Fixed some bugs

This commit is contained in:
Andreas Troelsen
2011-07-19 16:47:15 +02:00
parent f3131585de
commit 72cf8e6a42
6 changed files with 55 additions and 55 deletions
BIN
View File
Binary file not shown.
+24 -24
View File
@@ -59,7 +59,7 @@ public class Arena
protected List<ItemStack> entryFee; protected List<ItemStack> entryFee;
// Arena sets/maps // Arena sets/maps
protected Set<Player> /*livePlayers, */deadPlayers, readyPlayers, specPlayers, waitPlayers, hasPaid, arenaPlayers, lobbyPlayers, notifyPlayers, randoms; protected Set<Player> arenaPlayers, lobbyPlayers, readyPlayers, specPlayers, waitPlayers, hasPaid, rewardedPlayers, notifyPlayers, randoms;
protected Set<LivingEntity> monsters; protected Set<LivingEntity> monsters;
protected Set<Block> blocks; protected Set<Block> blocks;
protected Set<Wolf> pets; protected Set<Wolf> pets;
@@ -101,11 +101,10 @@ public class Arena
arenaPlayers = new HashSet<Player>(); arenaPlayers = new HashSet<Player>();
lobbyPlayers = new HashSet<Player>(); lobbyPlayers = new HashSet<Player>();
notifyPlayers = new HashSet<Player>(); notifyPlayers = new HashSet<Player>();
//livePlayers = new HashSet<Player>();
deadPlayers = new HashSet<Player>();
readyPlayers = new HashSet<Player>(); readyPlayers = new HashSet<Player>();
specPlayers = new HashSet<Player>(); specPlayers = new HashSet<Player>();
waitPlayers = new HashSet<Player>(); waitPlayers = new HashSet<Player>();
rewardedPlayers = new HashSet<Player>();
hasPaid = new HashSet<Player>(); hasPaid = new HashSet<Player>();
monsters = new HashSet<LivingEntity>(); monsters = new HashSet<LivingEntity>();
blocks = new HashSet<Block>(); blocks = new HashSet<Block>();
@@ -129,7 +128,7 @@ public class Arena
public boolean startArena() public boolean startArena()
{ {
// Sanity-checks // Sanity-checks
if (running || lobbyPlayers.isEmpty() || !lobbyPlayers.equals(readyPlayers)) if (running || lobbyPlayers.isEmpty() || !readyPlayers.containsAll(lobbyPlayers))
return false; return false;
if (!softRestore && forceRestore && !serializeRegion()) if (!softRestore && forceRestore && !serializeRegion())
return false; return false;
@@ -182,9 +181,6 @@ public class Arena
if (!running || !arenaPlayers.isEmpty()) if (!running || !arenaPlayers.isEmpty())
return false; return false;
// Stop spawning.
stopSpawning();
// Set the boolean. // Set the boolean.
running = false; running = false;
@@ -196,6 +192,9 @@ public class Arena
log.clear(); log.clear();
} }
// Stop spawning.
stopSpawning();
// Clean arena floor. // Clean arena floor.
cleanup(); cleanup();
@@ -210,10 +209,12 @@ public class Arena
MAUtils.tellAll(this, MAMessages.get(Msg.ARENA_END), true); MAUtils.tellAll(this, MAMessages.get(Msg.ARENA_END), true);
arenaPlayers.clear(); arenaPlayers.clear();
notifyPlayers.clear(); notifyPlayers.clear();
rewardedPlayers.clear();
classMap.clear(); classMap.clear();
rewardMap.clear(); rewardMap.clear();
waveMap.clear(); waveMap.clear();
killMap.clear(); killMap.clear();
spawnThread = null;
// Notify listeners. // Notify listeners.
for (MobArenaListener listener : plugin.getAM().listeners) for (MobArenaListener listener : plugin.getAM().listeners)
@@ -286,7 +287,7 @@ public class Arena
public void playerLeave(Player p) public void playerLeave(Player p)
{ {
// Clear class inventory, restore old inventory and fork over rewards. // Clear class inventory, restore old inventory and fork over rewards.
restoreInvAndGiveRewards(p, !specPlayers.contains(p)); restoreInvAndGiveRewards(p, (arenaPlayers.contains(p) || lobbyPlayers.contains(p)));
// Grab the player's entry location, and warp them there. // Grab the player's entry location, and warp them there.
Location entry = locations.get(p); Location entry = locations.get(p);
@@ -305,7 +306,7 @@ public class Arena
endArena(); endArena();
} }
public void playerDeath(final Player p) public void playerDeath(Player p)
{ {
// If spectate-on-death: false, pass on to playerLeave. // If spectate-on-death: false, pass on to playerLeave.
if (!specOnDeath) if (!specOnDeath)
@@ -361,12 +362,6 @@ public class Arena
specPlayers.remove(p); specPlayers.remove(p);
arenaPlayers.remove(p); arenaPlayers.remove(p);
lobbyPlayers.remove(p); lobbyPlayers.remove(p);
// arenaPlayers is empty if lobbyPlayers isnt, and vice versa
/*if (arenaPlayers.remove(p))
endArena2();
if (lobbyPlayers.remove(p))
startArena2();*/
} }
private void spawnPets() private void spawnPets()
@@ -409,6 +404,7 @@ public class Arena
Bukkit.getServer().getScheduler().cancelTask(spawnThread.taskId); Bukkit.getServer().getScheduler().cancelTask(spawnThread.taskId);
Bukkit.getServer().getScheduler().cancelTask(spawnTaskId); Bukkit.getServer().getScheduler().cancelTask(spawnTaskId);
spawnTaskId = -1; spawnTaskId = -1;
spawnThread = null;
} }
// Restore spawn flags. // Restore spawn flags.
@@ -438,18 +434,28 @@ public class Arena
public void restoreInvAndGiveRewards(final Player p, final boolean clear) public void restoreInvAndGiveRewards(final Player p, final boolean clear)
{ {
final List<ItemStack> rewards = rewardMap.get(p); final List<ItemStack> rewards = rewardMap.get(p);
final boolean hadRewards = rewardedPlayers.contains(p);
if (clear) MAUtils.clearInventory(p);
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin,
new Runnable() new Runnable()
{ {
public void run() public void run()
{ {
if (clear) //if (clear)
MAUtils.clearInventory(p); // MAUtils.clearInventory(p);
if (!emptyInvJoin) if (!emptyInvJoin)
MAUtils.restoreInventory(p); MAUtils.restoreInventory(p);
//if (rewardedPlayers.contains(p))
if (hadRewards)
return;
MAUtils.giveRewards(p, rewards, plugin); MAUtils.giveRewards(p, rewards, plugin);
if (running)
rewardedPlayers.add(p);
} }
}); });
} }
@@ -465,6 +471,7 @@ public class Arena
public void assignClass(Player p, String className) public void assignClass(Player p, String className)
{ {
petMap.remove(p); petMap.remove(p);
randoms.remove(p);
classMap.put(p, className); classMap.put(p, className);
MAUtils.clearInventory(p); MAUtils.clearInventory(p);
@@ -827,13 +834,6 @@ public class Arena
return result; return result;
} }
public List<Player> getDeadPlayers()
{
List<Player> result = new LinkedList<Player>();
result.addAll(deadPlayers);
return result;
}
public void resetIdleTimer() public void resetIdleTimer()
{ {
if (maxIdleTime <= 0 || !running) if (maxIdleTime <= 0 || !running)
+1 -4
View File
@@ -73,10 +73,7 @@ public class ArenaLog
log.add(" "); log.add(" ");
// Player data // Player data
int NAME = 12; int NAME = 12; int CLASS = 0; int WAVE = 4; int KILLS = 5;
int CLASS = 0;
int WAVE = 4;
int KILLS = 5;
for (String c : plugin.getAM().classes) for (String c : plugin.getAM().classes)
if (c.length() > CLASS) if (c.length() > CLASS)
CLASS = c.length(); CLASS = c.length();
+4 -1
View File
@@ -851,7 +851,7 @@ public class MACommands implements CommandExecutor
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS)); MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true; return true;
} }
if (args.length != 3 || !arg1.matches("[0-9]+")) if (args.length != 3 || !arg1.matches("(-)?[0-9]+"))
{ {
MAUtils.tellPlayer(sender, "Usage: /ma expandregion <amount> [up|down|out]"); MAUtils.tellPlayer(sender, "Usage: /ma expandregion <amount> [up|down|out]");
return true; return true;
@@ -883,6 +883,9 @@ public class MACommands implements CommandExecutor
return true; return true;
} }
// In case of a "negative" region, fix it!
MAUtils.fixRegion(plugin.getConfig(), am.selectedArena.world, am.selectedArena);
MAUtils.tellPlayer(sender, "Region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks."); MAUtils.tellPlayer(sender, "Region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
am.selectedArena.serializeConfig(); am.selectedArena.serializeConfig();
am.selectedArena.load(plugin.getConfig()); am.selectedArena.load(plugin.getConfig());
+2 -1
View File
@@ -16,6 +16,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
@@ -96,7 +97,7 @@ public class MAListener implements ArenaListener
public void onCreatureSpawn(CreatureSpawnEvent event) public void onCreatureSpawn(CreatureSpawnEvent event)
{ {
if (!arena.inRegion(event.getLocation())) if (!arena.inRegion(event.getLocation()) || event.getSpawnReason() == SpawnReason.CUSTOM)
return; return;
// If running == true, setCancelled(false), and vice versa. // If running == true, setCancelled(false), and vice versa.
+3 -4
View File
@@ -755,7 +755,7 @@ public class MAUtils
return true; return true;
} }
private static void fixRegion(Configuration config, World world, Arena arena) public static void fixRegion(Configuration config, World world, Arena arena)
{ {
if (arena.p1 == null || arena.p2 == null) if (arena.p1 == null || arena.p2 == null)
return; return;
@@ -904,12 +904,11 @@ public class MAUtils
public static void tellAll(Arena arena, String msg, boolean waitPlayers) public static void tellAll(Arena arena, String msg, boolean waitPlayers)
{ {
Set<Player> tmp = new HashSet<Player>(); Set<Player> tmp = new HashSet<Player>();
//tmp.addAll(arena.livePlayers);
tmp.addAll(arena.arenaPlayers); tmp.addAll(arena.arenaPlayers);
tmp.addAll(arena.lobbyPlayers); tmp.addAll(arena.lobbyPlayers);
tmp.addAll(arena.deadPlayers);
tmp.addAll(arena.specPlayers);
tmp.addAll(arena.readyPlayers); tmp.addAll(arena.readyPlayers);
tmp.addAll(arena.notifyPlayers);
tmp.addAll(arena.specPlayers);
if (waitPlayers) tmp.addAll(arena.waitPlayers); if (waitPlayers) tmp.addAll(arena.waitPlayers);
for (Player p : tmp) for (Player p : tmp)
tellPlayer(p, msg); tellPlayer(p, msg);