Add auto-start-timer feature. Minor cleanup.

This commit is contained in:
garbagemule
2012-12-26 12:55:46 +01:00
parent 5ed81f0a2a
commit 807e30be49
4 changed files with 19 additions and 40 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
name: MobArena name: MobArena
author: garbagemule author: garbagemule
main: com.garbagemule.MobArena.MobArena main: com.garbagemule.MobArena.MobArena
version: 0.94.4.90 version: 0.94.4.91
softdepend: [Spout,MultiVerse,MultiWorld,XcraftGate,Towny,Heroes,MagicSpells,Vault] softdepend: [Spout,MultiVerse,MultiWorld,XcraftGate,Towny,Heroes,MagicSpells,Vault]
commands: commands:
ma: ma:
@@ -143,4 +143,4 @@ permissions:
default: false default: false
mobarena.setup.autodegenerate: mobarena.setup.autodegenerate:
description: Auto-degenerate an arena. description: Auto-degenerate an arena.
default: false default: false
+1
View File
@@ -32,3 +32,4 @@ lock-food-level: true
spout-class-select: false spout-class-select: false
player-time-in-arena: world player-time-in-arena: world
auto-ignite-tnt: false auto-ignite-tnt: false
auto-start-timer: 0
+15 -38
View File
@@ -27,6 +27,7 @@ import org.bukkit.inventory.PlayerInventory;
import org.bukkit.permissions.PermissionAttachment; import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import com.garbagemule.MobArena.autostart.AutoStartTimer;
import com.garbagemule.MobArena.events.*; import com.garbagemule.MobArena.events.*;
import com.garbagemule.MobArena.framework.Arena; import com.garbagemule.MobArena.framework.Arena;
import com.garbagemule.MobArena.leaderboards.Leaderboard; import com.garbagemule.MobArena.leaderboards.Leaderboard;
@@ -110,6 +111,7 @@ public class ArenaImpl implements Arena
private ArenaListener eventListener; private ArenaListener eventListener;
private List<ItemStack> entryFee; private List<ItemStack> entryFee;
private TimeStrategy timeStrategy; private TimeStrategy timeStrategy;
private AutoStartTimer autoStartTimer;
/** /**
* Primary constructor. Requires a name and a world. * Primary constructor. Requires a name and a world.
@@ -170,6 +172,9 @@ public class ArenaImpl implements Arena
this.allowMonsters = world.getAllowMonsters(); this.allowMonsters = world.getAllowMonsters();
this.allowAnimals = world.getAllowAnimals(); 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"); String timeString = settings.getString("player-time-in-arena", "world");
Time time = Enums.getEnumFromString(Time.class, timeString); Time time = Enums.getEnumFromString(Time.class, timeString);
this.timeStrategy = (time != null ? new TimeStrategyLocked(time) : new TimeStrategyNull()); 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")) if (MobArena.hasSpout && settings.getBoolean("spout-class-select"))
Spouty.classSelectionScreen(plugin, this, p); Spouty.classSelectionScreen(plugin, this, p);
// Start the auto-start-timer
autoStartTimer.start();
// Notify player of joining
Messenger.tellPlayer(p, Msg.JOIN_PLAYER_JOINED); 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; return true;
} }
@@ -603,7 +618,6 @@ public class ArenaImpl implements Arena
} }
@Override @Override
//@SuppressWarnings("deprecation")
public boolean playerLeave(Player p) public boolean playerLeave(Player p)
{ {
// Fire the event and check if it's been cancelled. // Fire the event and check if it's been cancelled.
@@ -685,7 +699,6 @@ public class ArenaImpl implements Arena
movePlayerToSpec(p); movePlayerToSpec(p);
Messenger.tellPlayer(p, Msg.SPEC_FROM_ARENA); Messenger.tellPlayer(p, Msg.SPEC_FROM_ARENA);
Messenger.tellPlayer(p, Msg.MISC_MA_LEAVE_REMINDER); Messenger.tellPlayer(p, Msg.MISC_MA_LEAVE_REMINDER);
//restoreInvAndExp(p);
} else { } else {
restoreInvAndExp(p); restoreInvAndExp(p);
movePlayerToEntry(p); movePlayerToEntry(p);
@@ -700,7 +713,6 @@ public class ArenaImpl implements Arena
if (settings.getBoolean("spectate-on-death", true)) { if (settings.getBoolean("spectate-on-death", true)) {
l = region.getSpecWarp(); l = region.getSpecWarp();
} else { } else {
//l = locations.get(p);
l = playerData.get(p).entry(); l = playerData.get(p).entry();
} }
return l; return l;
@@ -799,18 +811,6 @@ public class ArenaImpl implements Arena
// Start bouncing! // Start bouncing!
scheduleTask(sheepBouncer, settings.getInt("first-wave-delay", 5) * 20); 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 @Override
public void storePlayerData(Player p, Location loc) public void storePlayerData(Player p, Location loc)
@@ -864,22 +864,18 @@ public class ArenaImpl implements Arena
@Override @Override
public void movePlayerToLobby(Player p) public void movePlayerToLobby(Player p)
{ {
//updateChunk(region.getLobbyWarp());
specPlayers.remove(p); // If joining from spec area specPlayers.remove(p); // If joining from spec area
lobbyPlayers.add(p); lobbyPlayers.add(p);
p.teleport(region.getLobbyWarp()); p.teleport(region.getLobbyWarp());
timeStrategy.setPlayerTime(p); timeStrategy.setPlayerTime(p);
//movePlayerToLocation(p, region.getLobbyWarp());
} }
@Override @Override
public void movePlayerToSpec(Player p) public void movePlayerToSpec(Player p)
{ {
//updateChunk(region.getSpecWarp());
specPlayers.add(p); specPlayers.add(p);
p.teleport(region.getSpecWarp()); p.teleport(region.getSpecWarp());
timeStrategy.setPlayerTime(p); timeStrategy.setPlayerTime(p);
//movePlayerToLocation(p, region.getSpecWarp());
} }
@Override @Override
@@ -888,32 +884,13 @@ public class ArenaImpl implements Arena
Location entry = playerData.get(p).entry(); Location entry = playerData.get(p).entry();
if (entry == null || p.isDead()) return; if (entry == null || p.isDead()) return;
//updateChunk(entry);
p.teleport(entry); p.teleport(entry);
timeStrategy.resetPlayerTime(p); timeStrategy.resetPlayerTime(p);
//movePlayerToLocation(p, entry);
p.setGameMode(playerData.get(p).getMode()); p.setGameMode(playerData.get(p).getMode());
p.addPotionEffects(playerData.get(p).getPotionEffects()); 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) { private void restoreInvAndExp(Player p) {
inventoryManager.clearInventory(p); inventoryManager.clearInventory(p);
inventoryManager.restoreInventory(p); inventoryManager.restoreInventory(p);
+1
View File
@@ -8,6 +8,7 @@ public enum Msg
ARENA_END("Arena finished.", "Arena finished.", Material.REDSTONE_TORCH_OFF), 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_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_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_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_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), JOIN_ARENA_NOT_ENABLED("This arena is not enabled.", "Arena disabled.", Material.REDSTONE_TORCH_OFF),