2
0
Эх сурвалжийг харах

Added chests for abba games

also made a destructor for AbbaGame
lennartVH01 9 жил өмнө
parent
commit
b044e4d2b5

+ 5 - 7
config.yml

@@ -21,14 +21,12 @@ PlayerCap: 1
 #   Pot: Amount to be added to general Pot
 #   Top: first n players receive these chunks of total wins
 
-
-WinRatios:
-  All: 0.05
-  Pot: 0.05
+# Part of the winnings that go to each player
+WinWeights:
+  All: 1
   Top:
-  - 0.6
-  - 0.2
-  - 0.1
+  - 7
+  - 2
 
 
 

+ 39 - 29
src/me/lennartVH01/AbbaGame.java

@@ -37,11 +37,14 @@ public class AbbaGame {
 	public int playerCap;
 	public List<Player> players;
 	public Map<UUID, CalculatedScore> endStats = new HashMap<UUID, CalculatedScore>();
-	public Map<UUID, Inventory> playerChests = new HashMap<UUID, Inventory>();
+	public Map<UUID, Chest> playerChests = new HashMap<UUID, Chest>();
+	public List<Chest> chests = new ArrayList<Chest>();
+	public List<Sign> signs = new ArrayList<Sign>();
 	private Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
 	private Objective abbaObjective = scoreboard.registerNewObjective("AbbaStats", "dummy");
 	private Score timer = abbaObjective.getScore("Time Remaining");
 	
+	
 	public AbbaGame(Main plugin, String name, Location spawn, int duration, int playerCap, int countDownTime){
 		this.plugin = plugin;
 		this.name = name;
@@ -56,6 +59,20 @@ public class AbbaGame {
 		}
 		abbaObjective.setDisplaySlot(DisplaySlot.SIDEBAR);
 	}
+	public void destroy(){
+		for(Sign s:signs){
+			s.setLine(0, "");
+			s.setLine(1, "");
+			s.update();
+		}
+		for(Player p:players){
+			plugin.playerMap.remove(p.getUniqueId());
+			p.sendMessage("§cGame ended!");
+			
+			//probably tp people to spawn or something
+			
+		}
+	}
 	
 	public void start() {
 		// TODO Add stuff like tp people to cave if neccecary
@@ -140,28 +157,16 @@ public class AbbaGame {
 	public void close(){
 		open = false;
 	}
-	public void claimChest(Player p, Sign sign){
-		if(playerChests.containsKey(p.getUniqueId())){
-			p.sendMessage("§cYou already have a chest!");
-			return;
-		}
-		Block blockBelowSign = spawn.getWorld().getBlockAt(sign.getX(), sign.getY() - 1, sign.getZ());
-		if(blockBelowSign instanceof InventoryHolder){
-			InventoryHolder chest = (InventoryHolder) blockBelowSign;
-			
-			
-			
-			if(playerChests.containsValue(chest.getInventory())){
-				p.sendMessage("§cThis chest is already claimed!");
-				return;
-			}else{
-				playerChests.put(p.getUniqueId(), chest.getInventory());
-				sign.setLine(2, p.getName());
-				
-			}
+	public boolean addChest(Chest chest, Sign sign){
+		if(!chests.contains(chest)){
+			chests.add(chest);
+			signs.add(sign);
+			sign.setLine(0, "§9[" + name + "]");
+			sign.update();
 			
+			return true;
 		}
-		
+		return false;
 	}
 	
 	
@@ -187,11 +192,22 @@ public class AbbaGame {
 
 	public void addPlayer(Player p) {
 		players.add(p);
+		int index = playerChests.size();
+		Chest chest = chests.get(index);
+		Sign sign = signs.get(index);
+		sign.setLine(1, p.getName());
+		sign.update();
+		playerChests.put(p.getUniqueId(), chest);
+		
 		
 	}
-	public void leave(Player p) {
+	public void removePlayer(Player p) {
 		players.remove(p);
-		playerChests.remove(p.getUniqueId());
+		int index = chests.indexOf(playerChests.remove(p.getUniqueId()));
+		chests.remove(index);
+		Sign sign = signs.remove(index);
+		sign.setLine(1, "");
+		sign.update();
 	}
 	
 
@@ -214,12 +230,6 @@ public class AbbaGame {
 		endTime = newEndTime;
 		
 	}
-
-	public Map<UUID, Inventory> getPlayerChests() {
-		return playerChests;
-		
-	}
-	
 	
 	
 }

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

@@ -32,7 +32,9 @@ public class AbbaTools {
 	}
 	public static boolean removeAbbaGame(String name){
 		for(int i = 0; i < games.size(); i++){
-			if(games.get(i).name.equalsIgnoreCase(name)){
+			AbbaGame game = games.get(i);
+			if(game.name.equalsIgnoreCase(name)){
+				game.destroy();
 				games.remove(i);
 				return true;
 			}

+ 4 - 11
src/me/lennartVH01/EventListener.java

@@ -4,6 +4,7 @@ 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;
@@ -26,18 +27,10 @@ public class EventListener implements Listener{
 	public void onPlayerQuit(PlayerQuitEvent e){
 		AbbaGame game = plugin.playerMap.remove(e.getPlayer().getUniqueId());
 		if(game != null){
-			game.leave(e.getPlayer());
+			game.removePlayer(e.getPlayer());
 		}
 	}
 	
-	@EventHandler
-	public void onInventoryEdit(InventoryInteractEvent e){
-		UUID p = e.getView().getPlayer().getUniqueId();
-		if(!plugin.playerMap.get(p).getPlayerChests().get(p).equals(e.getInventory())){
-			((Cancellable) e).setCancelled(true);
-		}
-	}
-	public void onChestOpen(InventoryOpenEvent e){
-		
-	}
+	
+	
 }

+ 44 - 4
src/me/lennartVH01/Main.java

@@ -3,6 +3,7 @@ package me.lennartVH01;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.List;
 import java.util.UUID;
@@ -11,7 +12,12 @@ import java.text.SimpleDateFormat;
 
 import org.bukkit.GameMode;
 import org.bukkit.Location;
+import org.bukkit.Material;
 import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.Chest;
+import org.bukkit.block.Sign;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandSender;
 import org.bukkit.configuration.file.FileConfiguration;
@@ -22,7 +28,13 @@ import org.bukkit.scheduler.BukkitRunnable;
 
 public class Main extends JavaPlugin{
 	
-	
+	private static HashSet<Material> transparentBlocks = new HashSet<Material>();
+	static{
+		transparentBlocks.add(Material.AIR);
+		transparentBlocks.add(Material.SIGN);
+		transparentBlocks.add(Material.SIGN_POST);
+		transparentBlocks.add(Material.WALL_SIGN);
+	}
 	
 	
 	
@@ -40,12 +52,13 @@ public class Main extends JavaPlugin{
 	
 	@Override
 	public void onEnable(){
+		
+		
 		// Event handler
 		evtListener.initialize(this);
 		getServer().getPluginManager().registerEvents(evtListener, this);
 		
 		
-		
 		//Config
 		this.saveDefaultConfig();
 		
@@ -115,7 +128,7 @@ public class Main extends JavaPlugin{
 						AbbaGame oldGame = playerMap.get(p.getUniqueId());
 						if(oldGame != null){
 							if(p.hasPermission("AbbaCaving.leave")){
-								oldGame.leave(p);
+								oldGame.removePlayer(p);
 								playerMap.remove(p.getUniqueId());
 								p.sendMessage("Left game \"" + oldGame.getName() + "\"");
 							}else{
@@ -146,7 +159,7 @@ public class Main extends JavaPlugin{
 					if(sender.hasPermission("AbbaCaving.leave")){
 						Player p = (Player) sender;
 						AbbaGame game = playerMap.get(p.getUniqueId());
-						game.leave(p);
+						game.removePlayer(p);
 						playerMap.remove(p.getUniqueId());
 						p.sendMessage("Left game \"" + game.getName() + "\"");
 						return true;
@@ -466,6 +479,33 @@ public class Main extends JavaPlugin{
 									sender.sendMessage("§cPlease specify new time");
 									return false;
 								}
+							case "addchest":
+								if(sender instanceof Player){
+									Block blockInFront = ((Player) sender).getTargetBlock(transparentBlocks, 5);
+									if(blockInFront.getState() instanceof Chest){
+										for(BlockFace face:new BlockFace[]{BlockFace.UP, BlockFace.DOWN, BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}){
+											Block blockNextTo = blockInFront.getRelative(face);
+											if(blockNextTo.getState() instanceof Sign){
+												if(AbbaTools.getAbbaGame(args[1]).addChest((Chest) blockInFront.getState(), (Sign) blockNextTo.getState())){
+													sender.sendMessage("Chest created");
+													return true;
+												}else{
+													sender.sendMessage("§cChest already in a game!");
+													return false;
+												}
+											}
+										}
+										
+										sender.sendMessage("§cPut a sign next to the chest!");
+										return false;
+									}else{
+										sender.sendMessage("§cYou must look at a chest to register it!");
+										return false;
+									}
+								}else{
+									sender.sendMessage("§cMust be ingame to register chests!");
+									return false;
+								}
 							}
 						}else{
 							sender.sendMessage("§cChoose an option!");