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"); | ||||
|         if (file.exists()) { | ||||
|             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 | ||||
|     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"); | ||||
|         if (args.length > 0) { | ||||
|             final String arg = args[0].toLowerCase(); | ||||
|   | ||||
| @@ -86,7 +86,7 @@ public class list extends SubCommand { | ||||
|         if (Permissions.hasPermission(player, "plots.list.top")) { | ||||
|             args.add("top"); | ||||
|         } | ||||
|         if (Permissions.hasPermission(player, "plots.list..all")) { | ||||
|         if (Permissions.hasPermission(player, "plots.list.all")) { | ||||
|             args.add("all"); | ||||
|         } | ||||
|         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)) { | ||||
|             return true; | ||||
|         } | ||||
|         if (Permissions.hasPermission(player, perm)) { | ||||
|         if (player.hasPermission(perm)) { | ||||
|             return true; | ||||
|         } | ||||
|         final String[] nodes = perm.split("\\."); | ||||
| @@ -67,11 +67,11 @@ public enum Permissions { | ||||
|         if ((player == null) || player.hasPermission(ADMIN.s) || player.hasPermission(STAR.s)) { | ||||
|             return Integer.MAX_VALUE; | ||||
|         } | ||||
|         if (Permissions.hasPermission(player, stub + ".*")) { | ||||
|         if (player.hasPermission(stub + ".*")) { | ||||
|             return Integer.MAX_VALUE; | ||||
|         } | ||||
|         for (int i = range; i > 0; i--) { | ||||
|             if (Permissions.hasPermission(player, stub + "." + i)) { | ||||
|             if (player.hasPermission(stub + "." + i)) { | ||||
|                 return i; | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -685,7 +685,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | ||||
|         if (Permissions.hasPermission(pp, PERMISSION_ADMIN_DESTROY_ROAD)) { | ||||
|             return; | ||||
|         } | ||||
|         if (MainUtil.isPlotArea(loc)) { | ||||
|         if (MainUtil.isPlotAreaAbs(loc)) { | ||||
|             MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, PERMISSION_ADMIN_DESTROY_ROAD); | ||||
|             event.setCancelled(true); | ||||
|         } | ||||
| @@ -1268,6 +1268,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | ||||
|             int[] mobs = null; | ||||
|             if (entityFlag != null) { | ||||
|                 int cap = ((Integer) entityFlag.getValue()); | ||||
|                 if (cap == 0) { | ||||
|                     return true; | ||||
|                 } | ||||
|                 mobs = ChunkManager.manager.countEntities(plot); | ||||
|                 if (mobs[0] >= cap) { | ||||
|                     return true; | ||||
| @@ -1277,6 +1280,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | ||||
|                 Flag mobFlag = FlagManager.getPlotFlag(plot, "mob-cap"); | ||||
|                 if (mobFlag != null) { | ||||
|                     int cap = ((Integer) mobFlag.getValue()); | ||||
|                     if (cap == 0) { | ||||
|                         return true; | ||||
|                     } | ||||
|                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||
|                     if (mobs[3] >= cap) { | ||||
|                         return true; | ||||
| @@ -1286,6 +1292,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | ||||
|                     Flag animalFlag = FlagManager.getPlotFlag(plot, "animal-cap"); | ||||
|                     if (animalFlag != null) { | ||||
|                         int cap = ((Integer) animalFlag.getValue()); | ||||
|                         if (cap == 0) { | ||||
|                             return true; | ||||
|                         } | ||||
|                         if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||
|                         if (mobs[1] >= cap) { | ||||
|                             return true; | ||||
| @@ -1296,6 +1305,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | ||||
|                     Flag monsterFlag = FlagManager.getPlotFlag(plot, "hostile-cap"); | ||||
|                     if (monsterFlag != null) { | ||||
|                         int cap = ((Integer) monsterFlag.getValue()); | ||||
|                         if (cap == 0) { | ||||
|                             return true; | ||||
|                         } | ||||
|                         if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||
|                         if (mobs[2] >= cap) { | ||||
|                             return true; | ||||
| @@ -1307,6 +1319,9 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen | ||||
|                 Flag vehicleFlag = FlagManager.getPlotFlag(plot, "vehicle-cap"); | ||||
|                 if (vehicleFlag != null) { | ||||
|                     int cap = ((Integer) vehicleFlag.getValue()); | ||||
|                     if (cap == 0) { | ||||
|                         return true; | ||||
|                     } | ||||
|                     if (mobs == null) mobs = ChunkManager.manager.countEntities(plot); | ||||
|                     if (mobs[4] >= cap) { | ||||
|                         return true; | ||||
|   | ||||
| @@ -21,11 +21,18 @@ import java.util.UUID; | ||||
| import org.spongepowered.api.block.BlockState; | ||||
| import org.spongepowered.api.entity.Entity; | ||||
| 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.vehicle.Boat; | ||||
| import org.spongepowered.api.entity.vehicle.minecart.Minecart; | ||||
| import org.spongepowered.api.event.Subscribe; | ||||
| import org.spongepowered.api.event.block.BlockMoveEvent; | ||||
| import org.spongepowered.api.event.block.BlockRedstoneUpdateEvent; | ||||
| 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.EntitySpawnEvent; | ||||
| 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.PlotWorld; | ||||
| import com.intellectualcrafters.plot.object.StringWrapper; | ||||
| import com.intellectualcrafters.plot.util.ChunkManager; | ||||
| import com.intellectualcrafters.plot.util.EventUtil; | ||||
| import com.intellectualcrafters.plot.util.ExpireManager; | ||||
| import com.intellectualcrafters.plot.util.MainUtil; | ||||
| @@ -90,19 +98,41 @@ public class MainListener { | ||||
|      *  - BlockFromToEvent | ||||
|      *  - BlockDamageEvent | ||||
|      *  - Structure (tree etc) | ||||
|      *  - Per plot mob caps | ||||
|      *  - PlayerIgniteBlockEvent | ||||
|      *  - PlayerBucketEmptyEvent | ||||
|      *  - PlayerBucketFillEvent | ||||
|      *  - VehicleCreateEvent | ||||
|      *  - HangingPlaceEvent | ||||
|      *  - HangingBreakEvent | ||||
|      *  - Liquid flow | ||||
|      *  - PVP | ||||
|      *  - PVE | ||||
|      *  - VehicleDestroy | ||||
|      *  - 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 | ||||
|     public void onMobSpawn(EntitySpawnEvent event) { | ||||
|         Entity entity = event.getEntity(); | ||||
| @@ -133,10 +163,86 @@ public class MainListener { | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         int[] mobs = null; | ||||
|         if (entity instanceof Living) { | ||||
|             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 | ||||
|   | ||||
| @@ -10,10 +10,13 @@ import org.spongepowered.api.block.tileentity.Sign; | ||||
| import org.spongepowered.api.block.tileentity.TileEntity; | ||||
| import org.spongepowered.api.data.key.Keys; | ||||
| 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.world.World; | ||||
| import org.spongepowered.api.world.biome.BiomeType; | ||||
| import org.spongepowered.api.world.biome.BiomeTypes; | ||||
| import org.spongepowered.common.data.value.mutable.SpongeListValue; | ||||
|  | ||||
| import com.google.common.base.Optional; | ||||
| import com.intellectualcrafters.plot.object.Location; | ||||
| @@ -191,7 +194,13 @@ public class SpongeBlockManager extends BlockManager { | ||||
|         for (int i = 0; i < 4; 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 | ||||
|   | ||||
| @@ -4,11 +4,16 @@ import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| 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.World; | ||||
| import org.spongepowered.api.world.storage.ChunkDataStream; | ||||
|  | ||||
| import com.google.common.base.Optional; | ||||
| import com.google.common.base.Predicate; | ||||
| import com.intellectualcrafters.plot.object.ChunkLoc; | ||||
| import com.intellectualcrafters.plot.object.Location; | ||||
| import com.intellectualcrafters.plot.object.Plot; | ||||
| @@ -28,8 +33,42 @@ public class SpongeChunkManager extends ChunkManager { | ||||
|      | ||||
|     @Override | ||||
|     public int[] countEntities(Plot plot) { | ||||
|         // TODO Auto-generated method stub | ||||
|         return new int[5]; | ||||
|         Location pos1 = plot.getBottom().add(1, 0, 1); | ||||
|         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 | ||||
| @@ -116,8 +155,26 @@ public class SpongeChunkManager extends ChunkManager { | ||||
|  | ||||
|     @Override | ||||
|     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) { | ||||
|         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