From 8c536bf6a518f72cbd9162b6297a328731337f4d Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Tue, 15 Jun 2021 18:17:06 -0700 Subject: [PATCH] futureproof min/max Y height check --- .../events/player/BiomeEnterExitScriptEvent.java | 4 ++-- .../events/player/PlayerStepsOnScriptEvent.java | 3 ++- .../denizenscript/denizen/objects/CuboidTag.java | 3 ++- .../denizen/objects/LocationTag.java | 4 ++-- .../scripts/commands/entity/PushCommand.java | 2 +- .../scripts/commands/world/LightCommand.java | 3 ++- .../commands/world/ModifyBlockCommand.java | 4 +++- .../denizen/utilities/Utilities.java | 15 +++++++++++++++ .../denizen/utilities/blocks/CuboidBlockSet.java | 3 ++- 9 files changed, 31 insertions(+), 10 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/BiomeEnterExitScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/BiomeEnterExitScriptEvent.java index dd6f29405c..9bf2dac4d1 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/BiomeEnterExitScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/BiomeEnterExitScriptEvent.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.objects.BiomeTag; import com.denizenscript.denizen.objects.EntityTag; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizen.objects.LocationTag; @@ -117,8 +118,7 @@ public void onPlayerEntersExitsBiome(PlayerMoveEvent event) { if (LocationTag.isSameBlock(event.getFrom(), event.getTo())) { return; } - if (event.getFrom().getBlockY() < 0 || event.getFrom().getBlockY() > 255 - || event.getTo().getBlockY() < 0 || event.getTo().getBlockY() > 255) { + if (!Utilities.isLocationYSafe(event.getFrom()) || !Utilities.isLocationYSafe(event.getTo())) { return; } from = new LocationTag(event.getFrom()); diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerStepsOnScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerStepsOnScriptEvent.java index 1e8fc2c20a..2eb4fff364 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerStepsOnScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerStepsOnScriptEvent.java @@ -1,6 +1,7 @@ package com.denizenscript.denizen.events.player; import com.denizenscript.denizen.objects.*; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizencore.objects.ObjectTag; @@ -104,7 +105,7 @@ public void onPlayerStepsOn(PlayerMoveEvent event) { return; } location = new LocationTag(event.getTo().clone().subtract(0, 1, 0)); - if (location.getBlockY() < 0 || location.getBlockY() > 255) { + if (!Utilities.isLocationYSafe(location)) { return; } previous_location = new LocationTag(event.getFrom()); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/CuboidTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/CuboidTag.java index b757c4b1bb..3392796fbb 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/CuboidTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/CuboidTag.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizen.objects.notable.NotableManager; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizen.utilities.depends.Depends; import com.denizenscript.denizen.utilities.flags.LocationFlagSearchHelper; @@ -524,7 +525,7 @@ public List getBlocks_internal(String matcher, Attribute attribute) for (int y = 0; y != y_distance + 1; y++) { for (int z = 0; z != z_distance + 1; z++) { loc = new LocationTag(loc_1.clone().add(x, y, z)); - if (loc.getY() < 0 || loc.getY() > 255) { + if (!Utilities.isLocationYSafe(loc)) { continue; } if (BukkitScriptEvent.tryMaterial(loc.getBlockTypeForTag(attribute), matcher)) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index 25ba071666..b3c185be9a 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -2255,7 +2255,7 @@ else if (yaw < 315) { fullloop: for (int y = -radiusInt; y <= radiusInt; y++) { double newY = y + tstartY; - if (newY < 0 || newY > 255) { + if (!Utilities.isLocationYSafe(newY, object.getWorld())) { continue; } for (int x = -radiusInt; x <= radiusInt; x++) { @@ -2305,7 +2305,7 @@ else if (yaw < 315) { for (int x = -radiusInt; x <= radiusInt; x++) { for (int y = -radiusInt; y <= radiusInt; y++) { double newY = y + tstartY; - if (newY < 0 || newY > 255) { + if (!Utilities.isLocationYSafe(newY, object.getWorld())) { continue; } for (int z = -radiusInt; z <= radiusInt; z++) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/entity/PushCommand.java b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/entity/PushCommand.java index 4635f6a8db..5369d53143 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/entity/PushCommand.java +++ b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/entity/PushCommand.java @@ -301,6 +301,6 @@ public void run() { } public static boolean isSafeBlock(Location loc) { - return loc.getBlockY() < 0 || loc.getBlockY() > 255 || !loc.getBlock().getType().isSolid(); + return !Utilities.isLocationYSafe(loc) || !loc.getBlock().getType().isSolid(); } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/LightCommand.java b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/LightCommand.java index b837c08869..69de455261 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/LightCommand.java +++ b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/LightCommand.java @@ -1,6 +1,7 @@ package com.denizenscript.denizen.scripts.commands.world; import com.denizenscript.denizen.objects.notable.NotableManager; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.abstracts.BlockLight; @@ -110,7 +111,7 @@ public void execute(ScriptEntry scriptEntry) { } - if (location.getY() < 0 || location.getY() > 255) { + if (!Utilities.isLocationYSafe(location)) { Debug.echoError(scriptEntry.getResidingQueue(), "Invalid light location!"); return; } diff --git a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/ModifyBlockCommand.java b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/ModifyBlockCommand.java index 625a039897..481ded4ab6 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/ModifyBlockCommand.java +++ b/plugin/src/main/java/com/denizenscript/denizen/scripts/commands/world/ModifyBlockCommand.java @@ -1,7 +1,9 @@ package com.denizenscript.denizen.scripts.commands.world; import com.denizenscript.denizen.Denizen; +import com.denizenscript.denizen.nms.NMSVersion; import com.denizenscript.denizen.objects.*; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizen.nms.NMSHandler; import com.denizenscript.denizen.nms.interfaces.WorldHelper; @@ -443,7 +445,7 @@ public static void setBlock(Location location, MaterialTag material, boolean phy block_physics.add(location); physitick = tick; } - if (location.getY() < 0 || location.getY() > 255) { + if (!Utilities.isLocationYSafe(location)) { Debug.echoError("Invalid modifyblock location: " + new LocationTag(location).toString()); return; } diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java index dec188b87f..f17162cc7d 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/Utilities.java @@ -1,5 +1,6 @@ package com.denizenscript.denizen.utilities; +import com.denizenscript.denizen.nms.NMSVersion; import com.denizenscript.denizen.objects.*; import com.denizenscript.denizen.objects.properties.material.MaterialDirectional; import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; @@ -488,4 +489,18 @@ public static PlayerTag getEntryPlayer(ScriptEntry entry) { public static NPCTag getEntryNPC(ScriptEntry entry) { return getEntryData(entry).getNPC(); } + + public static boolean isLocationYSafe(Location loc) { + return isLocationYSafe(loc.getBlockY(), loc.getWorld()); + } + + public static boolean isLocationYSafe(double y, World world) { + if (NMSHandler.getVersion().isAtMost(NMSVersion.v1_16)) { + return y >= 0 && y <= 255; + } + if (world == null) { + return true; + } + return y >= world.getMinHeight() && y <= world.getMaxHeight(); + } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/blocks/CuboidBlockSet.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/blocks/CuboidBlockSet.java index c5dd08f821..6b26bc0919 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/blocks/CuboidBlockSet.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/blocks/CuboidBlockSet.java @@ -3,6 +3,7 @@ import com.denizenscript.denizen.Denizen; import com.denizenscript.denizen.objects.*; import com.denizenscript.denizen.scripts.commands.world.SchematicCommand; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.core.ElementTag; @@ -203,7 +204,7 @@ public void setBlockSingle(FullBlockData block, int x, int y, int z, InputParams return; } int finalY = input.centerLocation.getBlockY() + y - center_y; - if (finalY < 0 || finalY > 255) { + if (!Utilities.isLocationYSafe(finalY, input.centerLocation.getWorld())) { return; } Block destBlock = input.centerLocation.clone().add(x - center_x, y - center_y, z - center_z).getBlock();