From 4fca7c8c80420bca017127efe926a204cb102e3f Mon Sep 17 00:00:00 2001 From: mathiascode Date: Sun, 15 Dec 2019 02:09:29 +0200 Subject: [PATCH] Add teleport boundary limits --- src/main/java/pw/kaboom/extras/Main.java | 2 + .../extras/modules/entity/EntitySpawn.java | 49 +++++++++++++++++++ .../extras/modules/entity/EntityTeleport.java | 23 +++++++++ .../extras/modules/player/PlayerDamage.java | 3 ++ .../extras/modules/player/PlayerTeleport.java | 23 +++++++++ 5 files changed, 100 insertions(+) create mode 100644 src/main/java/pw/kaboom/extras/modules/entity/EntityTeleport.java create mode 100644 src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java diff --git a/src/main/java/pw/kaboom/extras/Main.java b/src/main/java/pw/kaboom/extras/Main.java index 9def567..c893df8 100644 --- a/src/main/java/pw/kaboom/extras/Main.java +++ b/src/main/java/pw/kaboom/extras/Main.java @@ -412,6 +412,7 @@ public class Main extends JavaPlugin { this.getServer().getPluginManager().registerEvents(new EntityExplosion(), this); this.getServer().getPluginManager().registerEvents(new EntityKnockback(), this); this.getServer().getPluginManager().registerEvents(new EntitySpawn(), this); + this.getServer().getPluginManager().registerEvents(new EntityTeleport(), this); /* Player-related modules */ this.getServer().getPluginManager().registerEvents(new PlayerChat(), this); @@ -419,6 +420,7 @@ public class Main extends JavaPlugin { this.getServer().getPluginManager().registerEvents(new PlayerConnection(), this); this.getServer().getPluginManager().registerEvents(new PlayerDamage(), this); this.getServer().getPluginManager().registerEvents(new PlayerInteract(), this); + this.getServer().getPluginManager().registerEvents(new PlayerTeleport(), this); /* Server-related modules */ this.getServer().getPluginManager().registerEvents(new ServerCommand(), this); diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java index 0a4ccb1..072776a 100644 --- a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java @@ -168,6 +168,19 @@ class EntitySpawn implements Listener { } return false; } + + private boolean isOutsideBoundaries(double X, double Y, double Z) { + int roundedX = (int) Math.round(X); + int roundedY = (int) Math.round(Y); + int roundedZ = (int) Math.round(Z); + + if (X != roundedX || + Y != roundedY || + Z != roundedZ) { + return true; + } + return false; + } /*public static boolean isIllegalItem(ItemStack item) { try { @@ -257,6 +270,15 @@ class EntitySpawn implements Listener { @EventHandler void onEntityAddToWorld(EntityAddToWorldEvent event) { final Entity entity = event.getEntity(); + double X = entity.getLocation().getX(); + double Y = entity.getLocation().getY(); + double Z = entity.getLocation().getZ(); + + if (isOutsideBoundaries(X, Y, Z)) { + entity.remove(); + return; + } + final World world = entity.getWorld(); final Chunk chunk = entity.getChunk(); @@ -276,9 +298,36 @@ class EntitySpawn implements Listener { checkShouldRemoveEntities(world); } } + + /*@EventHandler + void onEntityAirChangeEvent(EntityAirChangeEvent event) { + final Entity entity = event.getEntity(); + double X = entity.getLocation().getX(); + double Y = entity.getLocation().getY(); + double Z = entity.getLocation().getZ(); + + System.out.println(X); + System.out.println(Y); + System.out.println(Z); + System.out.println(entity.getChunk().getX()); + System.out.println(entity.getChunk().getZ()); + + if (isOutsideBoundaries(X, Y, Z)) { + entity.remove(); + } + }*/ @EventHandler void onEntitySpawn(EntitySpawnEvent event) { + double X = event.getLocation().getX(); + double Y = event.getLocation().getY(); + double Z = event.getLocation().getZ(); + + if (isOutsideBoundaries(X, Y, Z)) { + event.setCancelled(true); + return; + } + final Entity entity = event.getEntity(); final EntityType entityType = entity.getType(); final Chunk chunk = entity.getChunk(); diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntityTeleport.java b/src/main/java/pw/kaboom/extras/modules/entity/EntityTeleport.java new file mode 100644 index 0000000..ae9d3ce --- /dev/null +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntityTeleport.java @@ -0,0 +1,23 @@ +package pw.kaboom.extras; + +import org.bukkit.Location; +import org.bukkit.World; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import org.bukkit.event.entity.EntityTeleportEvent; + +class EntityTeleport implements Listener { + @EventHandler + void onEntityTeleport(EntityTeleportEvent event) { + final World world = event.getTo().getWorld(); + int X = (int) Math.round(event.getTo().getX()); + int Y = (int) Math.round(event.getTo().getY()); + int Z = (int) Math.round(event.getTo().getZ()); + + event.setTo( + new Location(world, X, Y, Z) + ); + } +} diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java index a15baef..b03dd07 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java @@ -21,6 +21,9 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.entity.EntityTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent; + import org.bukkit.inventory.ItemStack; class PlayerDamage implements Listener { diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java new file mode 100644 index 0000000..2a78733 --- /dev/null +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java @@ -0,0 +1,23 @@ +package pw.kaboom.extras; + +import org.bukkit.Location; +import org.bukkit.World; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import org.bukkit.event.player.PlayerTeleportEvent; + +class PlayerTeleport implements Listener { + @EventHandler + void onPlayerTeleport(PlayerTeleportEvent event) { + final World world = event.getTo().getWorld(); + int X = (int) Math.round(event.getTo().getX()); + int Y = (int) Math.round(event.getTo().getY()); + int Z = (int) Math.round(event.getTo().getZ()); + + event.setTo( + new Location(world, X, Y, Z) + ); + } +}