Browse Source

Started work on persisting and implemented pausing

also removed some redundand code
lennartVH01 9 years ago
parent
commit
aeecf6cdd7

+ 60 - 16
src/me/lennartVH01/AbbaGame.java

@@ -10,21 +10,17 @@ import java.util.UUID;
 
 import org.bukkit.Bukkit;
 import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
 import org.bukkit.block.Chest;
 import org.bukkit.block.Sign;
+import org.bukkit.configuration.serialization.ConfigurationSerializable;
 import org.bukkit.entity.Player;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.InventoryHolder;
-import org.bukkit.material.TrapDoor;
 import org.bukkit.scoreboard.DisplaySlot;
 import org.bukkit.scoreboard.Objective;
 import org.bukkit.scoreboard.Score;
 import org.bukkit.scoreboard.Scoreboard;
 
 
-public class AbbaGame {
+public class AbbaGame implements ConfigurationSerializable{
 	private Main plugin;
 	public int taskId;
 	public boolean open = false;
@@ -63,6 +59,7 @@ public class AbbaGame {
 		for(Sign s:signs){
 			s.setLine(0, "");
 			s.setLine(1, "");
+			s.setLine(2, "");
 			s.update();
 		}
 		for(Player p:players){
@@ -76,15 +73,31 @@ public class AbbaGame {
 	
 	public void start() {
 		// TODO Add stuff like tp people to cave if neccecary
-		endTime = System.currentTimeMillis() + 1000 * countDownTime;
-		state = GameState.COUNTDOWN;
-		
-		for(Player p:players){
-			p.sendMessage("§cGame starting!");
+		if(state == GameState.WAITING){
+			endTime = System.currentTimeMillis() + 1000 * countDownTime;
+			state = GameState.COUNTDOWN;
+			for(Player p:players){
+				p.sendMessage("§cGame starting!");
+			}
+		}else if(state == GameState.PAUSED){
+			endTime = System.currentTimeMillis() + 1000 * duration;
+			state = GameState.RUNNING;
+			for(Player p:players){
+				p.sendMessage("§cGame continuing!");
+			}
+			startClock(0);
 		}
 		
+		
+		
 		startClock(20);
 	}
+	public void pause(){
+		//TODO Implement pausing
+		stopClock();
+		state = GameState.PAUSED;
+		duration = (int) ((endTime - System.currentTimeMillis())/1000);
+	}
 	
 	
 	private void startClock(long delay){
@@ -130,10 +143,7 @@ public class AbbaGame {
 							p.teleport(spawn);
 							
 							
-							Score score = abbaObjective.getScore(p.getName());
-							CalculatedScore stat = AbbaTools.calcScore(p.getInventory());
-							score.setScore(stat.getTotal());
-							endStats.put(p.getUniqueId(), stat);
+							
 						}
 						
 					}
@@ -151,6 +161,21 @@ public class AbbaGame {
 		Bukkit.getScheduler().cancelTask(taskId);
 	}
 	
+	public void calcScores() {
+		for(UUID uuid:playerChests.keySet()){
+			Chest chest = playerChests.get(uuid);
+			Sign sign = signs.get(chests.indexOf(chest));
+			
+			Player p = plugin.getServer().getPlayer(uuid);
+			
+			Score score = abbaObjective.getScore(p.getName());
+			CalculatedScore stat = AbbaTools.calcScore(chest.getInventory());
+			score.setScore(stat.getTotal());
+			sign.setLine(2, "" + stat.getTotal());
+			endStats.put(p.getUniqueId(), stat);
+		}
+	}
+	
 	public void open(){
 		open = true;
 	}
@@ -181,7 +206,11 @@ public class AbbaGame {
 		return players.size();
 	}
 	public int getMaxPlayers(){
-		return playerCap;
+		if(playerCap == -1 || chests.size() < playerCap){
+			return chests.size();
+		}else{
+			return playerCap;
+		}
 	}
 	public String getName(){
 		return name;
@@ -232,4 +261,19 @@ public class AbbaGame {
 	}
 	
 	
+	
+	//TODO Make dis serializable
+	
+	@Override
+	public Map<String, Object> serialize() {
+		Map<String, Object> abbaMap = new HashMap<String, Object>();
+		abbaMap.put("spawn", spawn);
+		
+		
+		return abbaMap;
+	}
+	public AbbaGame deserialize(Map<String, Object> inputMap){
+		return null;
+	}
+	
 }

+ 0 - 1
src/me/lennartVH01/AbbaTools.java

@@ -5,7 +5,6 @@ import java.util.List;
 
 import org.bukkit.Location;
 import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.entity.Player;
 import org.bukkit.inventory.Inventory;
 import org.bukkit.inventory.ItemStack;
 

+ 0 - 13
src/me/lennartVH01/EventListener.java

@@ -1,20 +1,7 @@
 package me.lennartVH01;
 
-import java.util.UUID;
-
-import org.bukkit.Material;
-import org.bukkit.block.Chest;
-import org.bukkit.block.DoubleChest;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Cancellable;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.Listener;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.event.block.SignChangeEvent;
-import org.bukkit.event.inventory.InventoryEvent;
-import org.bukkit.event.inventory.InventoryInteractEvent;
-import org.bukkit.event.inventory.InventoryOpenEvent;
 import org.bukkit.event.player.PlayerQuitEvent;
 
 public class EventListener implements Listener{

+ 25 - 2
src/me/lennartVH01/Main.java

@@ -21,10 +21,10 @@ import org.bukkit.block.Sign;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandSender;
 import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.serialization.ConfigurationSerialization;
 import org.bukkit.entity.Player;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.scheduler.BukkitRunnable;
 
 public class Main extends JavaPlugin{
 	
@@ -45,15 +45,18 @@ public class Main extends JavaPlugin{
 	public final String[] abbaSubCommands = new String[]{"calc", "close", "config", "create", "info", "join", "leave", "list", "open", "reload", "remove", "start"};
 	
 	
-	public FileConfiguration config = this.getConfig();
+	public FileConfiguration config;
 	
 	
 	public EventListener evtListener = new EventListener();
 	
 	@Override
 	public void onEnable(){
+		ConfigurationSerialization.registerClass(AbbaGame.class);
 		
 		
+		
+		config = this.getConfig();
 		// Event handler
 		evtListener.initialize(this);
 		getServer().getPluginManager().registerEvents(evtListener, this);
@@ -255,6 +258,26 @@ public class Main extends JavaPlugin{
 				
 				
 			//Admin commands
+			case "calcscores":
+				if(sender.hasPermission("AbbaCaving.calcScores")){
+					AbbaGame game;
+					if(args.length >= 2){
+						game = AbbaTools.getAbbaGame(args[1]);
+					}else{
+						game = AbbaTools.getAbbaGame();
+					}
+					if(game.getState() != GameState.FINISHED){
+						game.calcScores();
+						
+					}else{
+						sender.sendMessage("§cGame not finished yet!");
+						return false;
+					}
+				}else{
+					sender.sendMessage(Messages.noPermissionError);
+					return false;
+				}
+				break;
 			case "create":
 				if(args.length <= 5 && !(sender instanceof Player)){
 					System.out.println("Must be ingame or specify world and coordinates");