mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 01:23:44 +01:00 
			
		
		
		
	Sponge stuff
Added entity / mob / vehicle / animal / monster caps + entity clearing on plot clear.
This commit is contained in:
		| @@ -92,7 +92,14 @@ public class DebugExec extends SubCommand { | |||||||
|         File file = new File(PS.get().IMP.getDirectory(), "scripts" + File.separator + "start.js"); |         File file = new File(PS.get().IMP.getDirectory(), "scripts" + File.separator + "start.js"); | ||||||
|         if (file.exists()) { |         if (file.exists()) { | ||||||
|             init(); |             init(); | ||||||
|             onCommand(ConsolePlayer.getConsole(), new String[] {"run", "start.js"}); |             try { | ||||||
|  |                 String script = StringMan.join(Files.readLines(new File(new File(PS.get().IMP.getDirectory() + File.separator + "scripts"), "start.js"), StandardCharsets.UTF_8), System.getProperty("line.separator")); | ||||||
|  |                 scope.put("THIS", this); | ||||||
|  |                 scope.put("PlotPlayer", ConsolePlayer.getConsole()); | ||||||
|  |                 engine.eval(script, scope); | ||||||
|  |             } catch (Exception e) { | ||||||
|  |                 e.printStackTrace(); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
| @@ -148,7 +155,7 @@ public class DebugExec extends SubCommand { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     @Override |     @Override | ||||||
|     public boolean onCommand(final PlotPlayer player, String[] args) { |     public boolean onCommand(final PlotPlayer player, String... args) { | ||||||
|         final List<String> allowed_params = Arrays.asList("calibrate-analysis", "remove-flag", "stop-expire", "start-expire", "show-expired", "update-expired", "seen", "trim-check"); |         final List<String> allowed_params = Arrays.asList("calibrate-analysis", "remove-flag", "stop-expire", "start-expire", "show-expired", "update-expired", "seen", "trim-check"); | ||||||
|         if (args.length > 0) { |         if (args.length > 0) { | ||||||
|             final String arg = args[0].toLowerCase(); |             final String arg = args[0].toLowerCase(); | ||||||
|   | |||||||
| @@ -86,7 +86,7 @@ public class list extends SubCommand { | |||||||
|         if (Permissions.hasPermission(player, "plots.list.top")) { |         if (Permissions.hasPermission(player, "plots.list.top")) { | ||||||
|             args.add("top"); |             args.add("top"); | ||||||
|         } |         } | ||||||
|         if (Permissions.hasPermission(player, "plots.list..all")) { |         if (Permissions.hasPermission(player, "plots.list.all")) { | ||||||
|             args.add("all"); |             args.add("all"); | ||||||
|         } |         } | ||||||
|         if (Permissions.hasPermission(player, "plots.list.unowned")) { |         if (Permissions.hasPermission(player, "plots.list.unowned")) { | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ public enum Permissions { | |||||||
|         if ((player == null) || player.hasPermission(ADMIN.s) || player.hasPermission(STAR.s)) { |         if ((player == null) || player.hasPermission(ADMIN.s) || player.hasPermission(STAR.s)) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         if (Permissions.hasPermission(player, perm)) { |         if (player.hasPermission(perm)) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         final String[] nodes = perm.split("\\."); |         final String[] nodes = perm.split("\\."); | ||||||
| @@ -67,11 +67,11 @@ public enum Permissions { | |||||||
|         if ((player == null) || player.hasPermission(ADMIN.s) || player.hasPermission(STAR.s)) { |         if ((player == null) || player.hasPermission(ADMIN.s) || player.hasPermission(STAR.s)) { | ||||||
|             return Integer.MAX_VALUE; |             return Integer.MAX_VALUE; | ||||||
|         } |         } | ||||||
|         if (Permissions.hasPermission(player, stub + ".*")) { |         if (player.hasPermission(stub + ".*")) { | ||||||
|             return Integer.MAX_VALUE; |             return Integer.MAX_VALUE; | ||||||
|         } |         } | ||||||
|         for (int i = range; i > 0; i--) { |         for (int i = range; i > 0; i--) { | ||||||
|             if (Permissions.hasPermission(player, stub + "." + i)) { |             if (player.hasPermission(stub + "." + i)) { | ||||||
|                 return i; |                 return i; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -685,7 +685,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | |||||||
|         if (Permissions.hasPermission(pp, PERMISSION_ADMIN_DESTROY_ROAD)) { |         if (Permissions.hasPermission(pp, PERMISSION_ADMIN_DESTROY_ROAD)) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (MainUtil.isPlotArea(loc)) { |         if (MainUtil.isPlotAreaAbs(loc)) { | ||||||
|             MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, PERMISSION_ADMIN_DESTROY_ROAD); |             MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, PERMISSION_ADMIN_DESTROY_ROAD); | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } |         } | ||||||
| @@ -1268,6 +1268,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | |||||||
|             int[] mobs = null; |             int[] mobs = null; | ||||||
|             if (entityFlag != null) { |             if (entityFlag != null) { | ||||||
|                 int cap = ((Integer) entityFlag.getValue()); |                 int cap = ((Integer) entityFlag.getValue()); | ||||||
|  |                 if (cap == 0) { | ||||||
|  |                     return true; | ||||||
|  |                 } | ||||||
|                 mobs = ChunkManager.manager.countEntities(plot); |                 mobs = ChunkManager.manager.countEntities(plot); | ||||||
|                 if (mobs[0] >= cap) { |                 if (mobs[0] >= cap) { | ||||||
|                     return true; |                     return true; | ||||||
| @@ -1277,6 +1280,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | |||||||
|                 Flag mobFlag = FlagManager.getPlotFlag(plot, "mob-cap"); |                 Flag mobFlag = FlagManager.getPlotFlag(plot, "mob-cap"); | ||||||
|                 if (mobFlag != null) { |                 if (mobFlag != null) { | ||||||
|                     int cap = ((Integer) mobFlag.getValue()); |                     int cap = ((Integer) mobFlag.getValue()); | ||||||
|  |                     if (cap == 0) { | ||||||
|  |                         return true; | ||||||
|  |                     } | ||||||
|                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); |                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|                     if (mobs[3] >= cap) { |                     if (mobs[3] >= cap) { | ||||||
|                         return true; |                         return true; | ||||||
| @@ -1286,6 +1292,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | |||||||
|                     Flag animalFlag = FlagManager.getPlotFlag(plot, "animal-cap"); |                     Flag animalFlag = FlagManager.getPlotFlag(plot, "animal-cap"); | ||||||
|                     if (animalFlag != null) { |                     if (animalFlag != null) { | ||||||
|                         int cap = ((Integer) animalFlag.getValue()); |                         int cap = ((Integer) animalFlag.getValue()); | ||||||
|  |                         if (cap == 0) { | ||||||
|  |                             return true; | ||||||
|  |                         } | ||||||
|                         if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); |                         if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|                         if (mobs[1] >= cap) { |                         if (mobs[1] >= cap) { | ||||||
|                             return true; |                             return true; | ||||||
| @@ -1296,6 +1305,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | |||||||
|                     Flag monsterFlag = FlagManager.getPlotFlag(plot, "hostile-cap"); |                     Flag monsterFlag = FlagManager.getPlotFlag(plot, "hostile-cap"); | ||||||
|                     if (monsterFlag != null) { |                     if (monsterFlag != null) { | ||||||
|                         int cap = ((Integer) monsterFlag.getValue()); |                         int cap = ((Integer) monsterFlag.getValue()); | ||||||
|  |                         if (cap == 0) { | ||||||
|  |                             return true; | ||||||
|  |                         } | ||||||
|                         if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); |                         if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|                         if (mobs[2] >= cap) { |                         if (mobs[2] >= cap) { | ||||||
|                             return true; |                             return true; | ||||||
| @@ -1307,6 +1319,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | |||||||
|                 Flag vehicleFlag = FlagManager.getPlotFlag(plot, "vehicle-cap"); |                 Flag vehicleFlag = FlagManager.getPlotFlag(plot, "vehicle-cap"); | ||||||
|                 if (vehicleFlag != null) { |                 if (vehicleFlag != null) { | ||||||
|                     int cap = ((Integer) vehicleFlag.getValue()); |                     int cap = ((Integer) vehicleFlag.getValue()); | ||||||
|  |                     if (cap == 0) { | ||||||
|  |                         return true; | ||||||
|  |                     } | ||||||
|                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); |                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|                     if (mobs[4] >= cap) { |                     if (mobs[4] >= cap) { | ||||||
|                         return true; |                         return true; | ||||||
|   | |||||||
| @@ -21,11 +21,18 @@ import java.util.UUID; | |||||||
| import org.spongepowered.api.block.BlockState; | import org.spongepowered.api.block.BlockState; | ||||||
| import org.spongepowered.api.entity.Entity; | import org.spongepowered.api.entity.Entity; | ||||||
| import org.spongepowered.api.entity.EntityTypes; | import org.spongepowered.api.entity.EntityTypes; | ||||||
|  | import org.spongepowered.api.entity.living.Ambient; | ||||||
|  | import org.spongepowered.api.entity.living.Living; | ||||||
|  | import org.spongepowered.api.entity.living.animal.Animal; | ||||||
|  | import org.spongepowered.api.entity.living.monster.Monster; | ||||||
| import org.spongepowered.api.entity.player.Player; | import org.spongepowered.api.entity.player.Player; | ||||||
|  | import org.spongepowered.api.entity.vehicle.Boat; | ||||||
|  | import org.spongepowered.api.entity.vehicle.minecart.Minecart; | ||||||
| import org.spongepowered.api.event.Subscribe; | import org.spongepowered.api.event.Subscribe; | ||||||
| import org.spongepowered.api.event.block.BlockMoveEvent; | import org.spongepowered.api.event.block.BlockMoveEvent; | ||||||
| import org.spongepowered.api.event.block.BlockRedstoneUpdateEvent; | import org.spongepowered.api.event.block.BlockRedstoneUpdateEvent; | ||||||
| import org.spongepowered.api.event.block.FloraGrowEvent; | import org.spongepowered.api.event.block.FloraGrowEvent; | ||||||
|  | import org.spongepowered.api.event.block.FluidSpreadEvent; | ||||||
| import org.spongepowered.api.event.entity.EntityChangeBlockEvent; | import org.spongepowered.api.event.entity.EntityChangeBlockEvent; | ||||||
| import org.spongepowered.api.event.entity.EntitySpawnEvent; | import org.spongepowered.api.event.entity.EntitySpawnEvent; | ||||||
| import org.spongepowered.api.event.entity.EntityTeleportEvent; | import org.spongepowered.api.event.entity.EntityTeleportEvent; | ||||||
| @@ -66,6 +73,7 @@ import com.intellectualcrafters.plot.object.PlotManager; | |||||||
| import com.intellectualcrafters.plot.object.PlotPlayer; | import com.intellectualcrafters.plot.object.PlotPlayer; | ||||||
| import com.intellectualcrafters.plot.object.PlotWorld; | import com.intellectualcrafters.plot.object.PlotWorld; | ||||||
| import com.intellectualcrafters.plot.object.StringWrapper; | import com.intellectualcrafters.plot.object.StringWrapper; | ||||||
|  | import com.intellectualcrafters.plot.util.ChunkManager; | ||||||
| import com.intellectualcrafters.plot.util.EventUtil; | import com.intellectualcrafters.plot.util.EventUtil; | ||||||
| import com.intellectualcrafters.plot.util.ExpireManager; | import com.intellectualcrafters.plot.util.ExpireManager; | ||||||
| import com.intellectualcrafters.plot.util.MainUtil; | import com.intellectualcrafters.plot.util.MainUtil; | ||||||
| @@ -90,19 +98,41 @@ public class MainListener { | |||||||
|      *  - BlockFromToEvent |      *  - BlockFromToEvent | ||||||
|      *  - BlockDamageEvent |      *  - BlockDamageEvent | ||||||
|      *  - Structure (tree etc) |      *  - Structure (tree etc) | ||||||
|      *  - Per plot mob caps |  | ||||||
|      *  - PlayerIgniteBlockEvent |      *  - PlayerIgniteBlockEvent | ||||||
|      *  - PlayerBucketEmptyEvent |      *  - PlayerBucketEmptyEvent | ||||||
|      *  - PlayerBucketFillEvent |      *  - PlayerBucketFillEvent | ||||||
|      *  - VehicleCreateEvent |      *  - VehicleCreateEvent | ||||||
|      *  - HangingPlaceEvent |      *  - HangingPlaceEvent | ||||||
|      *  - HangingBreakEvent |      *  - HangingBreakEvent | ||||||
|  |      *  - Liquid flow | ||||||
|      *  - PVP |      *  - PVP | ||||||
|      *  - PVE |      *  - PVE | ||||||
|      *  - VehicleDestroy |      *  - VehicleDestroy | ||||||
|      *  - Projectile |      *  - Projectile | ||||||
|      */ |      */ | ||||||
|      |      | ||||||
|  |     @Subscribe | ||||||
|  |     public void onFluidSpread(FluidSpreadEvent event) { | ||||||
|  |         // TODO This event isn't called | ||||||
|  |         Location loc = SpongeUtil.getLocation(event.getLocation()); | ||||||
|  |         final Plot plot = MainUtil.getPlot(loc); | ||||||
|  |         if (plot == null) { | ||||||
|  |             if (MainUtil.isPlotAreaAbs(loc)) { | ||||||
|  |                 event.setCancelled(true); | ||||||
|  |             } | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         event.filterLocations(new Predicate<org.spongepowered.api.world.Location>() { | ||||||
|  |             @Override | ||||||
|  |             public boolean apply(org.spongepowered.api.world.Location loc) { | ||||||
|  |                 if (!plot.equals(MainUtil.getPlot(SpongeUtil.getLocation(loc)))) { | ||||||
|  |                     return false; | ||||||
|  |                 } | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|     @Subscribe |     @Subscribe | ||||||
|     public void onMobSpawn(EntitySpawnEvent event) { |     public void onMobSpawn(EntitySpawnEvent event) { | ||||||
|         Entity entity = event.getEntity(); |         Entity entity = event.getEntity(); | ||||||
| @@ -133,10 +163,86 @@ public class MainListener { | |||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|          |         int[] mobs = null; | ||||||
|         if (!plotworld.MOB_SPAWNING) { |         if (entity instanceof Living) { | ||||||
|             event.setCancelled(true); |             if (!plotworld.MOB_SPAWNING) { | ||||||
|  |                 event.setCancelled(true); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             Flag mobCap = FlagManager.getPlotFlag(plot, "mob-cap"); | ||||||
|  |             if (mobCap != null) { | ||||||
|  |                 Integer cap = (Integer) mobCap.getValue(); | ||||||
|  |                 if (cap == 0) { | ||||||
|  |                     event.setCancelled(true); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|  |                 if (mobs[3] >= cap) { | ||||||
|  |                     event.setCancelled(true); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (entity instanceof Ambient || entity instanceof Animal) { | ||||||
|  |                 Flag animalFlag = FlagManager.getPlotFlag(plot, "animal-cap"); | ||||||
|  |                 if (animalFlag != null) { | ||||||
|  |                     int cap = ((Integer) animalFlag.getValue()); | ||||||
|  |                     if (cap == 0) { | ||||||
|  |                         event.setCancelled(true); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|  |                     if (mobs[1] >= cap) { | ||||||
|  |                         event.setCancelled(true); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (entity instanceof Monster) { | ||||||
|  |                 Flag monsterFlag = FlagManager.getPlotFlag(plot, "hostile-cap"); | ||||||
|  |                 if (monsterFlag != null) { | ||||||
|  |                     int cap = ((Integer) monsterFlag.getValue()); | ||||||
|  |                     if (cap == 0) { | ||||||
|  |                         event.setCancelled(true); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|  |                     if (mobs[2] >= cap) { | ||||||
|  |                         event.setCancelled(true); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             return; | ||||||
|         } |         } | ||||||
|  |         if (entity instanceof Minecart || entity instanceof Boat) { | ||||||
|  |             Flag vehicleFlag = FlagManager.getPlotFlag(plot, "vehicle-cap"); | ||||||
|  |             if (vehicleFlag != null) { | ||||||
|  |                 int cap = ((Integer) vehicleFlag.getValue()); | ||||||
|  |                 if (cap == 0) { | ||||||
|  |                     event.setCancelled(true); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|  |                 if (mobs[4] >= cap) { | ||||||
|  |                     event.setCancelled(true); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         Flag entityCap = FlagManager.getPlotFlag(plot, "entity-cap"); | ||||||
|  |         if (entityCap != null) { | ||||||
|  |             Integer cap = (Integer) entityCap.getValue(); | ||||||
|  |             if (cap == 0) { | ||||||
|  |                 event.setCancelled(true); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||||
|  |             if (mobs[0] >= cap) { | ||||||
|  |                 event.setCancelled(true); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     @Subscribe |     @Subscribe | ||||||
|   | |||||||
| @@ -10,10 +10,13 @@ import org.spongepowered.api.block.tileentity.Sign; | |||||||
| import org.spongepowered.api.block.tileentity.TileEntity; | import org.spongepowered.api.block.tileentity.TileEntity; | ||||||
| import org.spongepowered.api.data.key.Keys; | import org.spongepowered.api.data.key.Keys; | ||||||
| import org.spongepowered.api.data.manipulator.mutable.tileentity.SignData; | import org.spongepowered.api.data.manipulator.mutable.tileentity.SignData; | ||||||
|  | import org.spongepowered.api.data.value.immutable.ImmutableListValue; | ||||||
|  | import org.spongepowered.api.data.value.mutable.ListValue; | ||||||
| import org.spongepowered.api.text.Text; | import org.spongepowered.api.text.Text; | ||||||
| import org.spongepowered.api.world.World; | import org.spongepowered.api.world.World; | ||||||
| import org.spongepowered.api.world.biome.BiomeType; | import org.spongepowered.api.world.biome.BiomeType; | ||||||
| import org.spongepowered.api.world.biome.BiomeTypes; | import org.spongepowered.api.world.biome.BiomeTypes; | ||||||
|  | import org.spongepowered.common.data.value.mutable.SpongeListValue; | ||||||
|  |  | ||||||
| import com.google.common.base.Optional; | import com.google.common.base.Optional; | ||||||
| import com.intellectualcrafters.plot.object.Location; | import com.intellectualcrafters.plot.object.Location; | ||||||
| @@ -191,7 +194,13 @@ public class SpongeBlockManager extends BlockManager { | |||||||
|         for (int i = 0; i < 4; i++) { |         for (int i = 0; i < 4; i++) { | ||||||
|             text.add(SpongeMain.THIS.getText(lines[i])); |             text.add(SpongeMain.THIS.getText(lines[i])); | ||||||
|         } |         } | ||||||
|         sign.offer(Keys.SIGN_LINES, text); |         try { | ||||||
|  |             SpongeListValue<Text> offering = new SpongeListValue<Text>(Keys.SIGN_LINES, text); | ||||||
|  |             sign.offer(offering); | ||||||
|  |         } | ||||||
|  |         catch (NullPointerException e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -4,11 +4,16 @@ import java.util.ArrayList; | |||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| import org.spongepowered.api.data.DataContainer; | import org.spongepowered.api.data.DataContainer; | ||||||
|  | import org.spongepowered.api.entity.Entity; | ||||||
|  | import org.spongepowered.api.entity.living.Living; | ||||||
|  | import org.spongepowered.api.entity.living.animal.Animal; | ||||||
|  | import org.spongepowered.api.entity.living.monster.Monster; | ||||||
| import org.spongepowered.api.world.Chunk; | import org.spongepowered.api.world.Chunk; | ||||||
| import org.spongepowered.api.world.World; | import org.spongepowered.api.world.World; | ||||||
| import org.spongepowered.api.world.storage.ChunkDataStream; | import org.spongepowered.api.world.storage.ChunkDataStream; | ||||||
|  |  | ||||||
| import com.google.common.base.Optional; | import com.google.common.base.Optional; | ||||||
|  | import com.google.common.base.Predicate; | ||||||
| import com.intellectualcrafters.plot.object.ChunkLoc; | import com.intellectualcrafters.plot.object.ChunkLoc; | ||||||
| import com.intellectualcrafters.plot.object.Location; | import com.intellectualcrafters.plot.object.Location; | ||||||
| import com.intellectualcrafters.plot.object.Plot; | import com.intellectualcrafters.plot.object.Plot; | ||||||
| @@ -28,8 +33,42 @@ public class SpongeChunkManager extends ChunkManager { | |||||||
|      |      | ||||||
|     @Override |     @Override | ||||||
|     public int[] countEntities(Plot plot) { |     public int[] countEntities(Plot plot) { | ||||||
|         // TODO Auto-generated method stub |         Location pos1 = plot.getBottom().add(1, 0, 1); | ||||||
|         return new int[5]; |         Location pos2 = plot.getTop(); | ||||||
|  |          | ||||||
|  |         String worldname = pos1.getWorld(); | ||||||
|  |         World world = SpongeUtil.getWorld(worldname); | ||||||
|  |         final int bx = pos1.getX(); | ||||||
|  |         final int bz = pos1.getZ(); | ||||||
|  |         final int tx = pos2.getX(); | ||||||
|  |         final int tz = pos2.getZ(); | ||||||
|  |         final int[] count = new int[5]; | ||||||
|  |         world.getEntities(new Predicate<Entity>() { | ||||||
|  |             @Override | ||||||
|  |             public boolean apply(Entity entity) { | ||||||
|  |                 org.spongepowered.api.world.Location loc = entity.getLocation(); | ||||||
|  |                 int x = loc.getBlockX(); | ||||||
|  |                 if (x >= bx && x <= tx) { | ||||||
|  |                     int z = loc.getBlockZ(); | ||||||
|  |                     if (z >= bz && z <= tz) { | ||||||
|  |                         count[0]++; | ||||||
|  |                         if (entity instanceof Living) { | ||||||
|  |                             count[3]++; | ||||||
|  |                             if (entity instanceof Animal) { | ||||||
|  |                                 count[1]++; | ||||||
|  |                             } else if (entity instanceof Monster){ | ||||||
|  |                                 count[2]++; | ||||||
|  |                             } | ||||||
|  |                         } else { | ||||||
|  |                             count[4]++; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         return count; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     @Override |     @Override | ||||||
| @@ -116,8 +155,26 @@ public class SpongeChunkManager extends ChunkManager { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void clearAllEntities(Location pos1, Location pos2) { |     public void clearAllEntities(Location pos1, Location pos2) { | ||||||
|         // TODO Auto-generated method stub |         String worldname = pos1.getWorld(); | ||||||
|          |         World world = SpongeUtil.getWorld(worldname); | ||||||
|  |         final int bx = pos1.getX(); | ||||||
|  |         final int bz = pos1.getZ(); | ||||||
|  |         final int tx = pos2.getX(); | ||||||
|  |         final int tz = pos2.getZ(); | ||||||
|  |         world.getEntities(new Predicate<Entity>() { | ||||||
|  |             @Override | ||||||
|  |             public boolean apply(Entity entity) { | ||||||
|  |                 org.spongepowered.api.world.Location loc = entity.getLocation(); | ||||||
|  |                 int x = loc.getBlockX(); | ||||||
|  |                 if (x >= bx && x <= tx) { | ||||||
|  |                     int z = loc.getBlockZ(); | ||||||
|  |                     if (z >= bz && z <= tz) { | ||||||
|  |                         entity.remove(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|     } |     } | ||||||
|      |      | ||||||
| } | } | ||||||
|   | |||||||
| @@ -89,4 +89,17 @@ public class SpongeUtil { | |||||||
|     public static Location getLocation(String world, org.spongepowered.api.world.Location spawn) { |     public static Location getLocation(String world, org.spongepowered.api.world.Location spawn) { | ||||||
|         return new Location(world, spawn.getBlockX(), spawn.getBlockY(), spawn.getBlockZ()); |         return new Location(world, spawn.getBlockX(), spawn.getBlockY(), spawn.getBlockZ()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public static String getWorldName(org.spongepowered.api.world.Location origin) { | ||||||
|  |         Extent extent = origin.getExtent(); | ||||||
|  |         if (extent == lastWorld) { | ||||||
|  |             return last; | ||||||
|  |         } | ||||||
|  |         if (extent instanceof World) { | ||||||
|  |             lastWorld = (World) extent; | ||||||
|  |             last = ((World) extent).getName(); | ||||||
|  |             return last; | ||||||
|  |         } | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 boy0001
					boy0001