diff --git a/resources/plugin.yml b/resources/plugin.yml index a8b763c..d24c9ed 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.94.4.90 +version: 0.94.4.91 softdepend: [Spout,MultiVerse,MultiWorld,XcraftGate,Towny,Heroes,MagicSpells,Vault] commands: ma: @@ -143,4 +143,4 @@ permissions: default: false mobarena.setup.autodegenerate: description: Auto-degenerate an arena. - default: false \ No newline at end of file + default: false diff --git a/resources/res/settings.yml b/resources/res/settings.yml index 9baf598..3b674b2 100644 --- a/resources/res/settings.yml +++ b/resources/res/settings.yml @@ -32,3 +32,4 @@ lock-food-level: true spout-class-select: false player-time-in-arena: world auto-ignite-tnt: false +auto-start-timer: 0 diff --git a/src/com/garbagemule/MobArena/ArenaImpl.java b/src/com/garbagemule/MobArena/ArenaImpl.java index 662f219..02378ce 100644 --- a/src/com/garbagemule/MobArena/ArenaImpl.java +++ b/src/com/garbagemule/MobArena/ArenaImpl.java @@ -27,6 +27,7 @@ import org.bukkit.inventory.PlayerInventory; import org.bukkit.permissions.PermissionAttachment; import org.bukkit.potion.PotionEffect; +import com.garbagemule.MobArena.autostart.AutoStartTimer; import com.garbagemule.MobArena.events.*; import com.garbagemule.MobArena.framework.Arena; import com.garbagemule.MobArena.leaderboards.Leaderboard; @@ -110,6 +111,7 @@ public class ArenaImpl implements Arena private ArenaListener eventListener; private List entryFee; private TimeStrategy timeStrategy; + private AutoStartTimer autoStartTimer; /** * Primary constructor. Requires a name and a world. @@ -170,6 +172,9 @@ public class ArenaImpl implements Arena this.allowMonsters = world.getAllowMonsters(); this.allowAnimals = world.getAllowAnimals(); + int autoStart = settings.getInt("auto-start-timer", 0); + this.autoStartTimer = new AutoStartTimer(this, autoStart); + String timeString = settings.getString("player-time-in-arena", "world"); Time time = Enums.getEnumFromString(Time.class, timeString); this.timeStrategy = (time != null ? new TimeStrategyLocked(time) : new TimeStrategyNull()); @@ -583,7 +588,17 @@ public class ArenaImpl implements Arena if (MobArena.hasSpout && settings.getBoolean("spout-class-select")) Spouty.classSelectionScreen(plugin, this, p); + // Start the auto-start-timer + autoStartTimer.start(); + + // Notify player of joining Messenger.tellPlayer(p, Msg.JOIN_PLAYER_JOINED); + + // Notify player of time left + if (autoStartTimer.isRunning()) { + Messenger.tellPlayer(p, Msg.ARENA_AUTO_START, "" + autoStartTimer.getRemaining()); + } + return true; } @@ -603,7 +618,6 @@ public class ArenaImpl implements Arena } @Override - //@SuppressWarnings("deprecation") public boolean playerLeave(Player p) { // Fire the event and check if it's been cancelled. @@ -685,7 +699,6 @@ public class ArenaImpl implements Arena movePlayerToSpec(p); Messenger.tellPlayer(p, Msg.SPEC_FROM_ARENA); Messenger.tellPlayer(p, Msg.MISC_MA_LEAVE_REMINDER); - //restoreInvAndExp(p); } else { restoreInvAndExp(p); movePlayerToEntry(p); @@ -700,7 +713,6 @@ public class ArenaImpl implements Arena if (settings.getBoolean("spectate-on-death", true)) { l = region.getSpecWarp(); } else { - //l = locations.get(p); l = playerData.get(p).entry(); } return l; @@ -799,18 +811,6 @@ public class ArenaImpl implements Arena // Start bouncing! scheduleTask(sheepBouncer, settings.getInt("first-wave-delay", 5) * 20); } - - private void updateChunk(Location loc) - { - if (!arenaPlayers.isEmpty() || !world.getName().equals(loc.getWorld().getName())) - return; - - Chunk chunk = world.getChunkAt(loc); - if (!world.isChunkLoaded(chunk)) - world.loadChunk(chunk); - else - world.refreshChunk(chunk.getX(), chunk.getZ()); - } @Override public void storePlayerData(Player p, Location loc) @@ -864,22 +864,18 @@ public class ArenaImpl implements Arena @Override public void movePlayerToLobby(Player p) { - //updateChunk(region.getLobbyWarp()); specPlayers.remove(p); // If joining from spec area lobbyPlayers.add(p); p.teleport(region.getLobbyWarp()); timeStrategy.setPlayerTime(p); - //movePlayerToLocation(p, region.getLobbyWarp()); } @Override public void movePlayerToSpec(Player p) { - //updateChunk(region.getSpecWarp()); specPlayers.add(p); p.teleport(region.getSpecWarp()); timeStrategy.setPlayerTime(p); - //movePlayerToLocation(p, region.getSpecWarp()); } @Override @@ -888,32 +884,13 @@ public class ArenaImpl implements Arena Location entry = playerData.get(p).entry(); if (entry == null || p.isDead()) return; - //updateChunk(entry); p.teleport(entry); timeStrategy.resetPlayerTime(p); - //movePlayerToLocation(p, entry); p.setGameMode(playerData.get(p).getMode()); p.addPotionEffects(playerData.get(p).getPotionEffects()); } - /*private void movePlayerToLocation(Player p, Location l) { - WorldServer fromWorld = ((CraftWorld) p.getWorld()).getHandle(); - WorldServer toWorld = ((CraftWorld) l.getWorld()).getHandle(); - EntityPlayer player = ((CraftPlayer) p).getHandle(); - - if (fromWorld == toWorld) { - player.netServerHandler.teleport(l); - } - else { - if (player.activeContainer != player.defaultContainer) { - player.closeInventory(); - } - CraftServer cs = ((CraftServer) plugin.getServer()); - cs.getHandle().moveToWorld(player, toWorld.dimension, true, l); - } - }*/ - private void restoreInvAndExp(Player p) { inventoryManager.clearInventory(p); inventoryManager.restoreInventory(p); diff --git a/src/com/garbagemule/MobArena/Msg.java b/src/com/garbagemule/MobArena/Msg.java index 77accf8..dde1703 100644 --- a/src/com/garbagemule/MobArena/Msg.java +++ b/src/com/garbagemule/MobArena/Msg.java @@ -8,6 +8,7 @@ public enum Msg ARENA_END("Arena finished.", "Arena finished.", Material.REDSTONE_TORCH_OFF), ARENA_DOES_NOT_EXIST("That arena does not exist. Type /ma arenas for a list.", "Can't find arena."), ARENA_LBOARD_NOT_FOUND("That arena does not have a leaderboard set up."), + ARENA_AUTO_START("Arena will auto-start in % seconds."), JOIN_NOT_ENABLED("MobArena is not enabled.", "MobArena disabled.", Material.REDSTONE_TORCH_OFF), JOIN_IN_OTHER_ARENA("You are already in an arena! Leave that one first.", "In another arena."), JOIN_ARENA_NOT_ENABLED("This arena is not enabled.", "Arena disabled.", Material.REDSTONE_TORCH_OFF),