diff --git a/MobArena.jar b/MobArena.jar index d829181..4de2c8a 100644 Binary files a/MobArena.jar and b/MobArena.jar differ diff --git a/src/com/garbagemule/MobArena/Arena.java b/src/com/garbagemule/MobArena/Arena.java index 4534c7f..ca774ea 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -89,8 +89,8 @@ public class Arena protected int spawnMonsters; protected boolean allowMonsters, allowAnimals; - // Global settings - protected int repairDelay; + // Other settings + protected int repairDelay, playerLimit; protected List classes = new LinkedList(); protected Map locations = new HashMap(); @@ -314,25 +314,9 @@ public class Arena listener.onPlayerLeave(p); } - public void playerQuit(Player p) - { - p.teleport(locations.get(p)); - readyPlayers.remove(p); - livePlayers.remove(p); - deadPlayers.remove(p); - specPlayers.remove(p); - removePets(p); - - if (!emptyInvJoin) MAUtils.restoreInventory(p); - - if (running && livePlayers.isEmpty()) - endArena(); - else if (!readyPlayers.isEmpty() && readyPlayers.equals(livePlayers)) - startArena(); - } - public void playerDeath(final Player p) { + p.teleport(arenaLoc); // This will force players to drop any items held p.teleport(spectatorLoc); p.setFireTicks(0); p.setHealth(20); @@ -482,6 +466,7 @@ public class Arena pvp = config.getBoolean(arenaPath + "pvp-enabled", false); monsterInfight = config.getBoolean(arenaPath + "monster-infight", false); allowWarp = config.getBoolean(arenaPath + "allow-teleporting", false); + playerLimit = config.getInt(arenaPath + "player-limit", 0); repairDelay = config.getInt(arenaPath + "repair-delay", 5); waveDelay = config.getInt(arenaPath + "first-wave-delay", 5) * 20; waveInterval = config.getInt(arenaPath + "wave-interval", 20) * 20; @@ -1049,21 +1034,23 @@ public class Arena public void onPlayerQuit(PlayerQuitEvent event) { Player p = event.getPlayer(); - if (!enabled || !getAllPlayers().contains(p)) + if (!enabled || !livePlayers.contains(p)) return; - MAUtils.clearInventory(p); - playerQuit(p); + //MAUtils.clearInventory(p); + plugin.getAM().arenaMap.remove(p); + playerLeave(p); } public void onPlayerKick(PlayerKickEvent event) { Player p = event.getPlayer(); - if (!enabled || !getAllPlayers().contains(p)) + if (!enabled || !livePlayers.contains(p)) return; - MAUtils.clearInventory(p); - playerQuit(p); + //MAUtils.clearInventory(p); + plugin.getAM().arenaMap.remove(p); + playerLeave(p); } // Teleport Listener @@ -1210,8 +1197,9 @@ public class Arena for (Player p : livePlayers) { MAUtils.clearInventory(p); - playerDeath(p); MAUtils.tellPlayer(p, MAMessages.get(Msg.FORCE_END_IDLE)); + p.damage(32768); + //playerDeath(p); } } }, maxIdleTime); diff --git a/src/com/garbagemule/MobArena/ArenaMaster.java b/src/com/garbagemule/MobArena/ArenaMaster.java index 4c619f5..a8da1fd 100644 --- a/src/com/garbagemule/MobArena/ArenaMaster.java +++ b/src/com/garbagemule/MobArena/ArenaMaster.java @@ -261,6 +261,7 @@ public class ArenaMaster config.setProperty("arenas." + configName + ".settings.pvp-enabled", false); config.setProperty("arenas." + configName + ".settings.monster-infight", false); config.setProperty("arenas." + configName + ".settings.allow-teleporting", false); + config.setProperty("arenas." + configName + ".settings.player-limit", 0); config.save(); config.load(); config.setProperty("arenas." + configName + ".settings.repair-delay", 5); diff --git a/src/com/garbagemule/MobArena/MACommands.java b/src/com/garbagemule/MobArena/MACommands.java index fbcf0b6..523f01e 100644 --- a/src/com/garbagemule/MobArena/MACommands.java +++ b/src/com/garbagemule/MobArena/MACommands.java @@ -137,6 +137,8 @@ public class MACommands implements CommandExecutor error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_IS_RUNNING)); else if (arena.livePlayers.contains(p)) error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ALREADY_PLAYING)); + else if (arena.playerLimit > 0 && arena.livePlayers.size() >= arena.playerLimit) + error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_PLAYER_LIMIT_REACHED)); else if (arena.emptyInvJoin && !MAUtils.hasEmptyInventory(p)) error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_EMPTY_INV)); else if (!arena.emptyInvJoin && !MAUtils.storeInventory(p)) @@ -147,6 +149,8 @@ public class MACommands implements CommandExecutor if (error) return true; + System.out.println("playerLimit: " + arena.playerLimit + ", livePlayers: " + arena.livePlayers.size()); + am.arenaMap.put(p,arena); arena.playerJoin(p, p.getLocation()); @@ -179,6 +183,8 @@ public class MACommands implements CommandExecutor error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_IS_RUNNING)); else if (arena.livePlayers.contains(p)) error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ALREADY_PLAYING)); + else if (arena.playerLimit > 0 && arena.livePlayers.size() >= arena.playerLimit) + error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_PLAYER_LIMIT_REACHED)); else if (arena.emptyInvJoin && !MAUtils.hasEmptyInventory(p)) error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_EMPTY_INV)); else if (!arena.emptyInvJoin && !MAUtils.storeInventory(p)) diff --git a/src/com/garbagemule/MobArena/MAMessages.java b/src/com/garbagemule/MobArena/MAMessages.java index 0a735b2..a5979b7 100644 --- a/src/com/garbagemule/MobArena/MAMessages.java +++ b/src/com/garbagemule/MobArena/MAMessages.java @@ -25,6 +25,7 @@ public class MAMessages JOIN_ARENA_IS_RUNNING, JOIN_ALREADY_PLAYING, JOIN_ARG_NEEDED, + JOIN_PLAYER_LIMIT_REACHED, JOIN_EMPTY_INV, JOIN_STORE_INV_FAIL, LEAVE_PLAYER_LEFT, @@ -76,6 +77,7 @@ public class MAMessages defaults.put(Msg.JOIN_ALREADY_PLAYING, "You are already playing!"); defaults.put(Msg.JOIN_ARG_NEEDED, "You must specify an arena. Type /ma arenas for a list."); defaults.put(Msg.JOIN_EMPTY_INV, "You must empty your inventory to join the arena."); + defaults.put(Msg.JOIN_PLAYER_LIMIT_REACHED, "The player limit of this arena has been reached."); defaults.put(Msg.JOIN_STORE_INV_FAIL, "Failed to store inventory. Try again."); defaults.put(Msg.JOIN_PLAYER_JOINED, "You joined the arena. Have fun!"); defaults.put(Msg.LEAVE_NOT_PLAYING, "You are not in the arena."); @@ -108,7 +110,7 @@ public class MAMessages defaults.put(Msg.MISC_LIST_PLAYERS, "Live players: %"); defaults.put(Msg.MISC_LIST_ARENAS, "Available arenas: %"); defaults.put(Msg.MISC_COMMAND_NOT_ALLOWED, "You can't use that command in the arena!"); - defaults.put(Msg.MISC_NO_ACCESS, "You don't have access to this comand."); + defaults.put(Msg.MISC_NO_ACCESS, "You don't have access to this command."); defaults.put(Msg.MISC_NONE, ""); } diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index 7370696..5348efe 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -330,6 +330,12 @@ public class MAUtils ItemStack[] armor = p.getInventory().getArmorContents(); ItemStack[] items = p.getInventory().getContents(); + /*p.getLocation().getBlock().getRelative(BlockFace.UP).setType(Material.CHEST); + Chest chest = (Chest) p.getLocation().getBlock().getRelative(BlockFace.UP).getState(); + for (ItemStack stack : p.getInventory().getContents()) + if (stack != null) + chest.getInventory().addItem(stack);*/ + String invPath = "plugins" + sep + "MobArena" + sep + "inventories"; new File(invPath).mkdir(); File backupFile = new File(invPath + sep + p.getName() + ".inv");