From 4ce8a383040a7f1c31def8f4b8884a73cdff3d3c Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sat, 26 Jul 2025 14:33:55 +0100 Subject: [PATCH] fix: allow admin override when setting plot context in command - when admins (plots.admin or console) attempted to use /plot x;z to set context on a plot they are denied on, it would not work - fixes #4696 --- .../plotsquared/core/command/MainCommand.java | 59 +++++++++++-------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/command/MainCommand.java b/Core/src/main/java/com/plotsquared/core/command/MainCommand.java index 1cdf06878..40661a75e 100644 --- a/Core/src/main/java/com/plotsquared/core/command/MainCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/MainCommand.java @@ -283,32 +283,41 @@ public class MainCommand extends Command { } } - private CompletableFuture> preparePlotArgument(@Nullable Plot newPlot, - @Nonnull CommandExecutionData data, - @Nullable PlotArea area) { - if (newPlot != null && (data.player() instanceof ConsolePlayer - || (area != null && area.equals(newPlot.getArea())) - || data.player().hasPermission(Permission.PERMISSION_ADMIN) - || data.player().hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO)) - && !newPlot.isDenied(data.player().getUUID())) { - return fetchPlotCenterLocation(newPlot) - .thenApply(newLoc -> { - if (!data.player().canTeleport(newLoc)) { - data.player().sendMessage(TranslatableCaption.of("border.denied")); - return Optional.empty(); - } - // Save meta - var originalCommandMeta = setCommandScope(data.player(), new TemporaryCommandMeta(newLoc, newPlot)); - return Optional.of(new CommandExecutionData( - data.player(), - Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command - data.confirm(), - data.whenDone(), - originalCommandMeta - )); - }); + private CompletableFuture> preparePlotArgument( + @Nullable Plot newPlot, + @Nonnull CommandExecutionData data, + @Nullable PlotArea area + ) { + if (newPlot == null) { + return CompletableFuture.completedFuture(Optional.of(data)); } - return CompletableFuture.completedFuture(Optional.of(data)); + final PlotPlayer player = data.player(); + final boolean isAdmin = player instanceof ConsolePlayer || player.hasPermission(Permission.PERMISSION_ADMIN); + final boolean isDenied = newPlot.isDenied(player.getUUID()); + if (!isAdmin) { + if (isDenied) { + return CompletableFuture.completedFuture(Optional.of(data)); + } + if (area != null && area.equals(newPlot.getArea()) && !player.hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO)) { + return CompletableFuture.completedFuture(Optional.of(data)); + } + } + return fetchPlotCenterLocation(newPlot) + .thenApply(newLoc -> { + if (!player.canTeleport(newLoc)) { + player.sendMessage(TranslatableCaption.of("border.denied")); + return Optional.empty(); + } + // Save meta + var originalCommandMeta = setCommandScope(player, new TemporaryCommandMeta(newLoc, newPlot)); + return Optional.of(new CommandExecutionData( + player, + Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command + data.confirm(), + data.whenDone(), + originalCommandMeta + )); + }); } private Optional prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) {