From fa53b9c3feb82238fd292fd2a18cc1d51dc6f91a Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Mon, 14 Nov 2022 15:00:14 +0000 Subject: [PATCH] feat: allow the world border to be larger than the road surrounding the outermost plots - Closes #2962 --- .../bukkit/listener/PlayerEventListener.java | 4 +-- .../com/plotsquared/core/command/Claim.java | 2 +- .../java/com/plotsquared/core/plot/Plot.java | 7 +++- .../com/plotsquared/core/plot/PlotArea.java | 34 +++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEventListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEventListener.java index ca7130deb..ff5cd6947 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEventListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEventListener.java @@ -596,7 +596,7 @@ public class PlayerEventListener implements Listener { this.tmpTeleport = true; return; } - int border = area.getBorder(); + int border = area.getBorder(true); int x1; if (x2 > border && this.tmpTeleport) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) { @@ -687,7 +687,7 @@ public class PlayerEventListener implements Listener { this.tmpTeleport = true; return; } - int border = area.getBorder(); + int border = area.getBorder(true); int z1; if (z2 > border && this.tmpTeleport) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) { diff --git a/Core/src/main/java/com/plotsquared/core/command/Claim.java b/Core/src/main/java/com/plotsquared/core/command/Claim.java index 821ade23d..6a84c6649 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Claim.java +++ b/Core/src/main/java/com/plotsquared/core/command/Claim.java @@ -177,7 +177,7 @@ public class Claim extends SubCommand { } } if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) { - int border = area.getBorder(); + int border = area.getBorder(false); if (border != Integer.MAX_VALUE && plot.getDistanceFromOrigin() > border && !force) { player.sendMessage(TranslatableCaption.of("border.denied")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java index 098b95656..23ad8f0c8 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java +++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java @@ -2690,6 +2690,11 @@ public class Plot { return false; } + /** + * Get the maximum distance of the plot from x=0, z=0. + * + * @return max block distance from 0,0 + */ public int getDistanceFromOrigin() { Location bot = getManager().getPlotBottomLocAbs(id); Location top = getManager().getPlotTopLocAbs(id); @@ -2703,7 +2708,7 @@ public class Plot { * Expands the world border to include this plot if it is beyond the current border. */ public void updateWorldBorder() { - int border = this.area.getBorder(); + int border = this.area.getBorder(false); if (border == Integer.MAX_VALUE) { return; } diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java b/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java index 63f5577ba..908eee8a2 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java +++ b/Core/src/main/java/com/plotsquared/core/plot/PlotArea.java @@ -143,6 +143,7 @@ public abstract class PlotArea { private Map prices = new HashMap<>(); private List schematics = new ArrayList<>(); private boolean worldBorder = false; + private int extraBorder; private boolean useEconomy = false; private int hash; private CuboidRegion region; @@ -352,6 +353,7 @@ public abstract class PlotArea { this.plotChat = config.getBoolean("chat.enabled"); this.forcingPlotChat = config.getBoolean("chat.forced"); this.worldBorder = config.getBoolean("world.border"); + this.extraBorder = config.getInt("world.extra_border"); this.maxBuildHeight = config.getInt("world.max_height"); this.minBuildHeight = config.getInt("world.min_height"); this.minGenHeight = config.getInt("world.min_gen_height"); @@ -469,6 +471,7 @@ public abstract class PlotArea { options.put("event.spawn.custom", this.isSpawnCustom()); options.put("event.spawn.breeding", this.isSpawnBreeding()); options.put("world.border", this.hasWorldBorder()); + options.put("world.extra_border", this.getExtaBorder()); options.put("home.default", "side"); String position = config.getString( "home.nonmembers", @@ -908,7 +911,9 @@ public abstract class PlotArea { * Get the plot border distance for a world
* * @return The border distance or Integer.MAX_VALUE if no border is set + * @deprecated Use {@link PlotArea#getBorder(boolean)} */ + @Deprecated(forRemoval = true, since = "TODO") public int getBorder() { final Integer meta = (Integer) getMeta("worldBorder"); if (meta != null) { @@ -922,6 +927,26 @@ public abstract class PlotArea { return Integer.MAX_VALUE; } + /** + * Get the plot border distance for a world, specifying whether the returned value should include the world.extra-border + * value. + * + * @param includeExtra If the extra border given by world.extra-border should be included + * @return Border distance of Integer.MAX_VALUE if no border is set + */ + public int getBorder(boolean includeExtra) { + final Integer meta = (Integer) getMeta("worldBorder"); + if (meta != null) { + int border = meta + 1; + if (border == 0) { + return Integer.MAX_VALUE; + } else { + return includeExtra ? border + extraBorder : border; + } + } + return Integer.MAX_VALUE; + } + /** * Setup the plot border for a world (usually done when the world is created). */ @@ -1181,6 +1206,15 @@ public abstract class PlotArea { return worldBorder; } + /** + * Get the "extra border" size of the plot area. + * + * @return Plot area extra border size + */ + public int getExtaBorder() { + return extraBorder; + } + /** * Get whether plot signs are allowed or not. *