From 3d20364405a9df348aac7df2967820a720610b59 Mon Sep 17 00:00:00 2001 From: Garbage Mule Date: Tue, 5 Jul 2011 18:22:43 +0200 Subject: [PATCH] Fixed some wolf issues --- MobArena.jar | Bin 76403 -> 76417 bytes src/com/garbagemule/MobArena/Arena.java | 92 ++++++++--- src/com/garbagemule/MobArena/ArenaMaster.java | 2 +- src/com/garbagemule/MobArena/MACommands.java | 147 +++++++++++++----- src/com/garbagemule/MobArena/MAUtils.java | 79 ++++++++-- 5 files changed, 248 insertions(+), 72 deletions(-) diff --git a/MobArena.jar b/MobArena.jar index b3b1b8da45b030246f6f66c712f9876536f285ca..a5ecf5b9873eb042d98884669ecc63cbf91425c1 100644 GIT binary patch delta 18317 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 diff --git a/src/com/garbagemule/MobArena/Arena.java b/src/com/garbagemule/MobArena/Arena.java index d85ffa5..221f703 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -62,9 +62,9 @@ public class Arena // Setup fields protected String name; protected World world; - protected boolean enabled, running, setup, protect, autoEquip, forceRestore, softRestore, softRestoreDrops, emptyInvJoin, emptyInvSpec, pvp, monsterInfight, allowWarp; + protected boolean enabled, running, setup, lobbySetup, protect, autoEquip, forceRestore, softRestore, softRestoreDrops, emptyInvJoin, emptyInvSpec, pvp, monsterInfight, allowWarp; protected boolean edit, waveClear, detCreepers, detDamage, lightning, hellhounds; - protected Location p1, p2, arenaLoc, lobbyLoc, spectatorLoc; + protected Location p1, p2, l1, l2, arenaLoc, lobbyLoc, spectatorLoc; protected Map spawnpoints; // Wave/reward fields @@ -127,8 +127,6 @@ public class Arena public Arena(String name, World world, ArenaMaster am) { this(name, world); - //classItems = am.classItems; - //classArmor = am.classArmor; } public void startArena() @@ -238,7 +236,10 @@ public class Arena // Force leave. for (Player p : tmp) + { + plugin.getAM().arenaMap.remove(p); playerLeave(p); + } } /** @@ -321,6 +322,8 @@ public class Arena deadPlayers.remove(p); specPlayers.remove(p); removePets(p); + + if (!emptyInvJoin) MAUtils.restoreInventory(p); if (running && livePlayers.isEmpty()) endArena(); @@ -492,6 +495,8 @@ public class Arena p1 = MAUtils.getArenaCoord(config, world, configName, "p1"); p2 = MAUtils.getArenaCoord(config, world, configName, "p2"); + l1 = MAUtils.getArenaCoord(config, world, configName, "l1"); + l2 = MAUtils.getArenaCoord(config, world, configName, "l2"); arenaLoc = MAUtils.getArenaCoord(config, world, configName, "arena"); lobbyLoc = MAUtils.getArenaCoord(config, world, configName, "lobby"); spectatorLoc = MAUtils.getArenaCoord(config, world, configName, "spectator"); @@ -503,17 +508,20 @@ public class Arena // Determine if the arena is properly set up. Then add the to arena list. setup = MAUtils.verifyData(this); + lobbySetup = MAUtils.verifyLobby(this); } public void serializeConfig() { - String coords = "arenas." + configName() + ".coords."; + String coords = "arenas." + configName() + ".coords."; Configuration config = plugin.getConfig(); config.setProperty("arenas." + configName() + ".settings.enabled", enabled); config.setProperty("arenas." + configName() + ".settings.protect", protect); if (p1 != null) config.setProperty(coords + "p1", MAUtils.makeCoord(p1)); if (p2 != null) config.setProperty(coords + "p2", MAUtils.makeCoord(p2)); + if (l1 != null) config.setProperty(coords + "l1", MAUtils.makeCoord(l1)); + if (l2 != null) config.setProperty(coords + "l2", MAUtils.makeCoord(l2)); if (arenaLoc != null) config.setProperty(coords + "arena", MAUtils.makeCoord(arenaLoc)); if (lobbyLoc != null) config.setProperty(coords + "lobby", MAUtils.makeCoord(lobbyLoc)); if (spectatorLoc != null) config.setProperty(coords + "spectator", MAUtils.makeCoord(spectatorLoc)); @@ -612,16 +620,26 @@ public class Arena */ public boolean inRegion(Location loc) { - if (!loc.getWorld().getName().equals(world.getName())) + if (!loc.getWorld().getName().equals(world.getName()) || !setup) return false; - if (!setup) - return false; + int x = loc.getBlockX(); + int y = loc.getBlockY(); + int z = loc.getBlockZ(); + + // Check the lobby first. + if (lobbySetup) + { + if ((x >= l1.getBlockX() && x <= l2.getBlockX()) && + (z >= l1.getBlockZ() && z <= l2.getBlockZ()) && + (y >= l1.getBlockY() && y <= l2.getBlockY())) + return true; + } // Returns false if the location is outside of the region. - return ((loc.getX() >= p1.getX() && loc.getX() <= p2.getX()) && - (loc.getZ() >= p1.getZ() && loc.getZ() <= p2.getZ()) && - (loc.getY() >= p1.getY() && loc.getY() <= p2.getY())); + return ((x >= p1.getBlockX() && x <= p2.getBlockX()) && + (z >= p1.getBlockZ() && z <= p2.getBlockZ()) && + (y >= p1.getBlockY() && y <= p2.getBlockY())); } /** @@ -633,9 +651,22 @@ public class Arena if (!loc.getWorld().getName().equals(world.getName()) || !setup) return false; - return ((loc.getX() + radius >= p1.getX() && loc.getX() - radius <= p2.getX()) && - (loc.getZ() + radius >= p1.getZ() && loc.getZ() - radius <= p2.getZ()) && - (loc.getY() + radius >= p1.getY() && loc.getY() - radius <= p2.getY())); + int x = loc.getBlockX(); + int y = loc.getBlockY(); + int z = loc.getBlockZ(); + + // Check the lobby first. + if (lobbySetup) + { + if ((x + radius >= l1.getBlockX() && x - radius <= l2.getBlockX()) && + (z + radius >= l1.getBlockZ() && z - radius <= l2.getBlockZ()) && + (y + radius >= l1.getBlockY() && y - radius <= l2.getBlockY())) + return true; + } + + return ((x + radius >= p1.getBlockX() && x - radius <= p2.getBlockX()) && + (z + radius >= p1.getBlockZ() && z - radius <= p2.getBlockZ()) && + (y + radius >= p1.getBlockY() && y - radius <= p2.getBlockY())); } @@ -649,14 +680,14 @@ public class Arena // Block Listener public void onBlockBreak(BlockBreakEvent event) { - if (edit || !inRegion(event.getBlock().getLocation())) + if (!inRegion(event.getBlock().getLocation()) || edit) return; Block b = event.getBlock(); if (blocks.remove(b) || b.getType() == Material.TNT) return; - if (softRestore) + if (softRestore && running) { int[] buffer = new int[5]; buffer[0] = b.getX(); @@ -674,8 +705,7 @@ public class Arena public void onBlockPlace(BlockPlaceEvent event) { - // If in edit mode or the event didn't happen in this region, return. - if (edit || !inRegion(event.getBlock().getLocation())) + if (!inRegion(event.getBlock().getLocation()) || edit) return; Block b = event.getBlock(); @@ -708,17 +738,30 @@ public class Arena if (!monsters.contains(event.getEntity()) && !inRegionRadius(event.getLocation(), 10)) return; + event.setYield(0); + monsters.remove(event.getEntity()); + // If the arena isn't running if (!running || repairDelay == 0) { event.setCancelled(true); return; } + + // If there is a sign in the blocklist, cancel + for (Block b : event.blockList()) + { + if (!(b.getType() == Material.SIGN_POST || b.getType() == Material.WALL_SIGN)) + { + continue; + } + + event.setCancelled(true); + return; + } // Uncancel, just in case. event.setCancelled(false); - event.setYield(0); - monsters.remove(event.getEntity()); int[] buffer; final HashMap blockMap = new HashMap(); @@ -784,7 +827,7 @@ public class Arena if (!running) return; if (pets.contains(event.getEntity())) - { + { if (event.getReason() != TargetReason.TARGET_ATTACKED_OWNER && event.getReason() != TargetReason.OWNER_ATTACKED_TARGET) return; @@ -870,6 +913,8 @@ public class Arena damagee.setFireTicks(32768); // For mcMMO event.setCancelled(true); } + if (e != null && damager instanceof Player) + event.setCancelled(true); event.setDamage(0); return; @@ -919,7 +964,7 @@ public class Arena if (running) return; Player p = event.getPlayer(); - if (!inRegion(p.getLocation()) || !livePlayers.contains(p)) + if (!livePlayers.contains(p)) return; MAUtils.tellPlayer(p, MAMessages.get(Msg.LOBBY_DROP_ITEM)); @@ -1156,7 +1201,10 @@ public class Arena // Compare the current size with the previous size. if (monsters.size() < spawnThread.previousSize || spawnThread.previousSize == 0) + { + resetIdleTimer(); return; + } // Clear all player inventories, and "kill" all players. for (Player p : livePlayers) diff --git a/src/com/garbagemule/MobArena/ArenaMaster.java b/src/com/garbagemule/MobArena/ArenaMaster.java index cbfbd07..6e50b7b 100644 --- a/src/com/garbagemule/MobArena/ArenaMaster.java +++ b/src/com/garbagemule/MobArena/ArenaMaster.java @@ -20,7 +20,7 @@ public class ArenaMaster private MobArena plugin; private Configuration config; protected Arena selectedArena; - protected Lobby masterLobby; + //protected Lobby masterLobby; // Settings protected boolean enabled, updateNotify, autoEquip, emptyInvs, hellhounds; diff --git a/src/com/garbagemule/MobArena/MACommands.java b/src/com/garbagemule/MobArena/MACommands.java index 6a6439a..ea39a23 100644 --- a/src/com/garbagemule/MobArena/MACommands.java +++ b/src/com/garbagemule/MobArena/MACommands.java @@ -20,38 +20,40 @@ public class MACommands implements CommandExecutor public static final List COMMANDS = new LinkedList(); static { - COMMANDS.add("j"); // Join - COMMANDS.add("join"); // Join - COMMANDS.add("l"); // Leave - COMMANDS.add("leave"); // Leave - COMMANDS.add("notready"); // List of players who aren't ready - COMMANDS.add("spec"); // Watch arena - COMMANDS.add("spectate"); // Watch arena - COMMANDS.add("arenas"); // List of arenas - COMMANDS.add("list"); // List of players - COMMANDS.add("players"); // List of players - COMMANDS.add("restore"); // Restore inventory - COMMANDS.add("enable"); // Enabling - COMMANDS.add("disable"); // Disabling - COMMANDS.add("protect"); // Protection on/off - COMMANDS.add("force"); // Force start/end - COMMANDS.add("config"); // Reload config - COMMANDS.add("arena"); // Current arena - COMMANDS.add("setarena"); // Set current arena - COMMANDS.add("addarena"); // Add a new arena - COMMANDS.add("delarena"); // Delete current aren - COMMANDS.add("editarena"); // Editing - COMMANDS.add("setregion"); // Set a region point - COMMANDS.add("setwarp"); // Set arena/lobby/spec - COMMANDS.add("spawnpoints"); // List spawnpoints - COMMANDS.add("addspawn"); // Add a spawnpoint - COMMANDS.add("delspawn"); // Delete a spawnpoint - COMMANDS.add("expandregion"); // Expand the region - COMMANDS.add("reset"); // Reset arena coordinates - COMMANDS.add("auto-generate"); // Auto-generate arena - COMMANDS.add("auto-degenerate"); // Restore cuboid + COMMANDS.add("j"); // Join + COMMANDS.add("join"); // Join + COMMANDS.add("l"); // Leave + COMMANDS.add("leave"); // Leave + COMMANDS.add("notready"); // List of players who aren't ready + COMMANDS.add("spec"); // Watch arena + COMMANDS.add("spectate"); // Watch arena + COMMANDS.add("arenas"); // List of arenas + COMMANDS.add("list"); // List of players + COMMANDS.add("players"); // List of players + COMMANDS.add("restore"); // Restore inventory + COMMANDS.add("enable"); // Enabling + COMMANDS.add("disable"); // Disabling + COMMANDS.add("protect"); // Protection on/off + COMMANDS.add("force"); // Force start/end + COMMANDS.add("config"); // Reload config + COMMANDS.add("arena"); // Current arena + COMMANDS.add("setarena"); // Set current arena + COMMANDS.add("addarena"); // Add a new arena + COMMANDS.add("delarena"); // Delete current aren + COMMANDS.add("editarena"); // Editing + COMMANDS.add("setregion"); // Set a region point + COMMANDS.add("expandregion"); // Expand the region + COMMANDS.add("setlobbyregion"); // Set a region point + COMMANDS.add("expandlobbyregion"); // Expand the region + COMMANDS.add("setwarp"); // Set arena/lobby/spec + COMMANDS.add("spawnpoints"); // List spawnpoints + COMMANDS.add("addspawn"); // Add a spawnpoint + COMMANDS.add("delspawn"); // Delete a spawnpoint + COMMANDS.add("reset"); // Reset arena coordinates + COMMANDS.add("auto-generate"); // Auto-generate arena + COMMANDS.add("auto-degenerate"); // Restore cuboid } - private boolean player, op, console, meanAdmins; + private boolean meanAdmins; private Server server; private MobArena plugin; private ArenaMaster am; @@ -80,9 +82,9 @@ public class MACommands implements CommandExecutor } // Determine if the sender is a player (and an op), or the console. - player = (sender instanceof Player); - op = player && ((Player) sender).isOp(); - console = (sender instanceof ConsoleCommandSender); + boolean player = (sender instanceof Player); + boolean op = player && ((Player) sender).isOp(); + boolean console = (sender instanceof ConsoleCommandSender); // Cast the sender to Player if possible. Player p = (player) ? (Player)sender : null; @@ -306,14 +308,14 @@ public class MACommands implements CommandExecutor return true; } - String list = MAUtils.listToString(arena.getLivingPlayers()); + String list = MAUtils.playerListToString(arena.getLivingPlayers()); MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_PLAYERS, list)); } else { StringBuffer buffy = new StringBuffer(); for (Arena arena : am.arenas) - buffy.append(MAUtils.listToString(arena.getLivingPlayers(), false)); + buffy.append(MAUtils.playerListToString(arena.getLivingPlayers())); MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_PLAYERS, buffy.toString())); } return true; @@ -349,7 +351,7 @@ public class MACommands implements CommandExecutor return true; } - String list = MAUtils.listToString(arena.getNonreadyPlayers()); + String list = MAUtils.playerListToString(arena.getNonreadyPlayers()); MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_PLAYERS, list)); return true; } @@ -454,7 +456,7 @@ public class MACommands implements CommandExecutor /* * Force start/end arenas. */ - if (base.equals("force") && arg1.equals("end")) + if (base.equals("force")) { if (arg1.equals("end")) { @@ -737,6 +739,11 @@ public class MACommands implements CommandExecutor MAUtils.tellPlayer(sender, "Usage: /ma expandregion [up|down|out]"); return true; } + if (am.selectedArena.p1 == null || am.selectedArena.p2 == null) + { + MAUtils.tellPlayer(sender, "You must first define p1 and p2"); + return true; + } if (arg2.equals("up")) { @@ -765,6 +772,70 @@ public class MACommands implements CommandExecutor return true; } + if (base.equals("setlobbyregion")) + { + if (!(player && MobArena.has(p, "mobarena.setup.setlobbyregion")) && !op) + { + MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS)); + return true; + } + + if (!(arg1.equals("l1") || arg1.equals("l2"))) + { + MAUtils.tellPlayer(sender, "Usage: /ma setlobbyregion [l1|l2]"); + return true; + } + + MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation()); + MAUtils.tellPlayer(sender, "Set lobby point " + arg1 + " for arena '" + am.selectedArena.configName() + "'"); + return true; + } + + if (base.equals("expandlobbyregion")) + { + if (!console && !(player && MobArena.has(p, "mobarena.setup.expandlobbyregion")) && !op) + { + MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS)); + return true; + } + if (args.length != 3 || !arg1.matches("[0-9]+")) + { + MAUtils.tellPlayer(sender, "Usage: /ma expandlobbyregion [up|down|out]"); + return true; + } + if (am.selectedArena.l1 == null || am.selectedArena.l2 == null) + { + MAUtils.tellPlayer(sender, "You must first define l1 and l2"); + return true; + } + + if (arg2.equals("up")) + { + am.selectedArena.l2.setY(Math.min(127, am.selectedArena.l2.getY() + Integer.parseInt(arg1))); + } + else if (arg2.equals("down")) + { + am.selectedArena.l1.setY(Math.max(0, am.selectedArena.l1.getY() - Integer.parseInt(arg1))); + } + else if (arg2.equals("out")) + { + am.selectedArena.l1.setX(am.selectedArena.l1.getX() - Integer.parseInt(arg1)); + am.selectedArena.l1.setZ(am.selectedArena.l1.getZ() - Integer.parseInt(arg1)); + am.selectedArena.l2.setX(am.selectedArena.l2.getX() + Integer.parseInt(arg1)); + am.selectedArena.l2.setZ(am.selectedArena.l2.getZ() + Integer.parseInt(arg1)); + } + else + { + MAUtils.tellPlayer(sender, "Usage: /ma expandlobbyregion [up|down|out]"); + return true; + } + + MAUtils.tellPlayer(sender, "Lobby region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks."); + am.selectedArena.serializeConfig(); + am.selectedArena.load(plugin.getConfig()); + return true; + } + /* * Set warp points [arena|lobby|spectator] for the current arena. */ diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index 04b3a41..c54283e 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -261,11 +261,11 @@ public class MAUtils { config.setProperty(arenaPath + ".powered-creepers", 10); config.setProperty(arenaPath + ".zombie-pigmen", 10); - config.setProperty(arenaPath + ".slimes", 10); - config.setProperty(arenaPath + ".humans", 10); + config.setProperty(arenaPath + ".slimes", 10); + config.setProperty(arenaPath + ".humans", 10); config.setProperty(arenaPath + ".angry-wolves", 10); - config.setProperty(arenaPath + ".giants", 0); - config.setProperty(arenaPath + ".ghasts", 0); + config.setProperty(arenaPath + ".giants", 0); + config.setProperty(arenaPath + ".ghasts", 0); } //config.save(); dists = config.getKeys(arenaPath); @@ -561,14 +561,20 @@ public class MAUtils */ public static void sitPets(Player p) { + if (p == null) + { + System.out.println("Player is null!"); + return; + } + List entities = p.getNearbyEntities(80, 40, 80); for (Entity e : entities) { if (!(e instanceof Wolf)) continue; - Wolf w = (Wolf) e; - if (w.getOwner().equals(p)) + Wolf w = (Wolf) e; + if (w.isTamed() && w.getOwner() != null && w.getOwner().equals(p)) w.setSitting(true); } } @@ -616,6 +622,8 @@ public class MAUtils if (coord.equals("p1") || coord.equals("p2")) fixRegion(config, loc.getWorld(), arena); + if (coord.equals("l1") || coord.equals("l2")) + fixLobby(config, loc.getWorld(), arena); } public static boolean delArenaCoord(Configuration config, Arena arena, String coord) @@ -658,6 +666,35 @@ public class MAUtils arena.load(config); } + private static void fixLobby(Configuration config, World world, Arena arena) + { + if (arena.l1 == null || arena.l2 == null) + return; + + if (arena.l1.getX() > arena.l2.getX()) + { + double tmp = arena.l1.getX(); + arena.l1.setX(arena.l2.getX()); + arena.l2.setX(tmp); + } + + if (arena.l1.getZ() > arena.l2.getZ()) + { + double tmp = arena.l1.getZ(); + arena.l1.setZ(arena.l2.getZ()); + arena.l2.setZ(tmp); + } + + if (arena.l1.getY() > arena.l2.getY()) + { + double tmp = arena.l1.getY(); + arena.l1.setY(arena.l2.getY()); + arena.l2.setY(tmp); + } + arena.serializeConfig(); + arena.load(config); + } + /** * Create a Location from the input String in the input World. */ @@ -665,14 +702,14 @@ public class MAUtils { String[] parts = str.split(","); - double x = Double.parseDouble(parts[0]); - double y = Double.parseDouble(parts[1]); - double z = Double.parseDouble(parts[2]); + double x = Double.parseDouble(parts[0].trim()); + double y = Double.parseDouble(parts[1].trim()); + double z = Double.parseDouble(parts[2].trim()); if (extras && parts.length == 5) { - float yaw = Float.parseFloat(parts[3]); - float pitch = Float.parseFloat(parts[4]); + float yaw = Float.parseFloat(parts[3].trim()); + float pitch = Float.parseFloat(parts[4].trim()); return new Location(world, x, y, z, yaw, pitch); } @@ -850,6 +887,20 @@ public class MAUtils return buffy.toString(); } + public static String playerListToString(List list) + { + if (list.isEmpty()) + return MAMessages.get(Msg.MISC_NONE); + + StringBuffer buffy = new StringBuffer(); + for (Player p : list) + { + buffy.append(p.getName()); + buffy.append(" "); + } + return buffy.toString(); + } + /** * Returns a String-list version of a comma-separated list. */ @@ -891,6 +942,12 @@ public class MAUtils (arena.p2 != null) && (arena.spawnpoints.size() > 0)); } + + public static boolean verifyLobby(Arena arena) + { + return ((arena.l1 != null) && + (arena.l2 != null)); + } /** * Checks if there is a new update of MobArena and notifies the