diff --git a/MobArena.jar b/MobArena.jar index c18ef7e..9d1d395 100644 Binary files a/MobArena.jar and b/MobArena.jar differ diff --git a/resources/plugin.yml b/resources/plugin.yml index eedc981..b178fb5 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: MobArena main: com.garbagemule.MobArena.MobArena -version: 0.94.3.4 +version: 0.94.3.5 softdepend: [Spout,Permissions,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells] commands: ma: @@ -18,7 +18,7 @@ commands: /mobarena notready - List of players who aren't ready. /mobarena spectate - Warp to the spectator area. permissions: - mobarena.use.*: + mobarena.use: description: Gives access to usage commands default: true children: @@ -32,8 +32,8 @@ permissions: mobarena.use.leave: default: true - mobarena.admin.*: - description: Gives access to admin commands + mobarena.admin: + description: Gives access to all admin commands default: op children: mobarena.admin.enable: true @@ -43,20 +43,26 @@ permissions: mobarena.admin.force.start: true mobarena.admin.config.reload: true mobarena.admin.enable: + description: Enable and disable MobArena and/or arenas. default: false mobarena.admin.kick: + description: Kick a player from an arena. default: false mobarena.admin.restore: + description: Restore a player's inventory. default: false mobarena.admin.force.end: + description: Force end an arena. default: false mobarena.admin.force.start: + description: Force start an arena. default: false mobarena.admin.config.reload: + description: Reload the config-file. default: false - mobarena.setup.*: - description: Gives access to setup commands + mobarena.setup: + description: Gives access to all setup commands default: op children: mobarena.setup.arena: true @@ -81,44 +87,65 @@ permissions: mobarena.setup.autogenerate: true mobarena.setup.autodegenerate: true mobarena.setup.arena: + description: Check which arena is the currently selected arena. default: false mobarena.setup.setarena: + description: Select a new arena. default: false mobarena.setup.addarena: + description: Add a new arena node. default: false mobarena.setup.delarena: + description: Delete an arena. default: false mobarena.setup.protect: + description: Turn arena protection on/off. default: false mobarena.setup.editarena: + description: Turn editmode on/off. default: false mobarena.setup.setregion: + description: Set region points p1/p2. default: false mobarena.setup.expandregion: + description: Expand arena region. default: false mobarena.setup.showregion: + description: Show arena region. default: false mobarena.setup.setlobbyregion: + description: Set lobby region points l1/l2. default: false mobarena.setup.expandlobbyregion: + description: Expand lobby region. default: false mobarena.setup.setwarp: + description: Set warp points arena/lobby/spectator. default: false mobarena.setup.spawnpoints: + description: List all spawnpoints. default: false mobarena.setup.addspawn: + description: Add a new spawnpoint. default: false mobarena.setup.delspawn: + description: Delete a spawnpoint. default: false mobarena.setup.containers: + description: List all containers. default: false mobarena.setup.addcontainer: + description: Add a new container. default: false mobarena.setup.delcontainer: + description: Delete a container. default: false mobarena.setup.checkdata: + description: Check which points need to be set up. default: false mobarena.setup.autogenerate: + description: Auto-generate an arena. default: false mobarena.setup.autodegenerate: + description: Auto-degenerate an arena. default: false \ No newline at end of file diff --git a/src/com/garbagemule/MobArena/Arena.java b/src/com/garbagemule/MobArena/Arena.java index aa08c1a..e26ee5c 100644 --- a/src/com/garbagemule/MobArena/Arena.java +++ b/src/com/garbagemule/MobArena/Arena.java @@ -154,7 +154,7 @@ public class Arena allowMonsters = world.getAllowMonsters(); allowAnimals = world.getAllowAnimals(); - spawnMonsters = ((net.minecraft.server.World) ((CraftWorld) world).getHandle()).spawnMonsters; + spawnMonsters = MAUtils.getSpawnMonsters(world); eventListener = new MAListener(this, plugin); repairQueue = new PriorityBlockingQueue(100, new RepairableComparator()); diff --git a/src/com/garbagemule/MobArena/MAListener.java b/src/com/garbagemule/MobArena/MAListener.java index 142100c..37c8150 100644 --- a/src/com/garbagemule/MobArena/MAListener.java +++ b/src/com/garbagemule/MobArena/MAListener.java @@ -163,9 +163,9 @@ public class MAListener implements ArenaListener LivingEntity entity = (LivingEntity) event.getEntity(); if (arena.running && entity instanceof Slime) arena.monsters.add(entity); - else - // If running == true, setCancelled(false), and vice versa. - event.setCancelled(!arena.running); + + // If running == true, setCancelled(false), and vice versa. + event.setCancelled(!arena.running); } public void onEntityExplode(EntityExplodeEvent event) diff --git a/src/com/garbagemule/MobArena/MAUtils.java b/src/com/garbagemule/MobArena/MAUtils.java index a1be3b9..5b762b0 100644 --- a/src/com/garbagemule/MobArena/MAUtils.java +++ b/src/com/garbagemule/MobArena/MAUtils.java @@ -1,5 +1,6 @@ package com.garbagemule.MobArena; +import java.lang.reflect.Field; import java.net.URI; import java.net.HttpURLConnection; import java.io.File; @@ -18,8 +19,6 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import net.minecraft.server.WorldServer; - import org.bukkit.block.Sign; import org.bukkit.command.CommandSender; import org.bukkit.craftbukkit.CraftWorld; @@ -1331,16 +1330,86 @@ public class MAUtils } } + public static int getSpawnMonsters(World world) + { + try + { + Field f = getSpawnMonstersField(world); + net.minecraft.server.World w = (net.minecraft.server.World) ((CraftWorld) world).getHandle(); + return f.getInt(w); + } + catch (Exception e) + { + e.printStackTrace(); + return 0; + } + + /* + Field f = null; + + try + { + String[] parts = Bukkit.getVersion().split("-"); + String version = parts[5].substring(1, 5); + int v = (version.matches("[0-9]+")) ? Integer.parseInt(version) : 0; + + String fieldName = (v >= 1191) ? "difficulty" : "spawnMonsters"; + f = net.minecraft.server.World.class.getDeclaredField(fieldName); + + if (f != null) + return f.getInt(w); + } + catch (Exception e) + { + e.printStackTrace(); + } + + return 0;*/ + } + + private static Field getSpawnMonstersField(World world) + { + try + { + String[] parts = Bukkit.getVersion().split("-"); + String version = parts[5].substring(1, 5); + int v = (version.matches("[0-9]+")) ? Integer.parseInt(version) : 0; + + String fieldName = (v >= 1191) ? "difficulty" : "spawnMonsters"; + return net.minecraft.server.World.class.getDeclaredField(fieldName); + } + catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + public static void setSpawnFlags(MobArena plugin, World world, int spawnMonsters, boolean allowMonsters, boolean allowAnimals) { for (Arena arena : plugin.getAM().getArenasInWorld(world)) if (arena.running) return; - WorldServer ws = ((CraftWorld) world).getHandle(); - ws.spawnMonsters = spawnMonsters; - ws.allowMonsters = allowMonsters; - ws.allowAnimals = allowAnimals; + //WorldServer ws = ((CraftWorld) world).getHandle(); + //ws.spawnMonsters = spawnMonsters; + //ws.allowMonsters = allowMonsters; + //ws.allowAnimals = allowAnimals; + + try + { + net.minecraft.server.World w = (net.minecraft.server.World) ((CraftWorld) world).getHandle(); + w.allowMonsters = allowMonsters; + w.allowAnimals = allowAnimals; + + Field f = getSpawnMonstersField(world); + f.setInt(w, spawnMonsters); + } + catch (Exception e) + { + e.printStackTrace(); + } } public static String getDuration(long duration)