Compare commits

...

1 Commits

Author SHA1 Message Date
dordsor21
4ce8a38304 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
2025-07-26 14:33:55 +01:00

View File

@@ -283,24 +283,35 @@ public class MainCommand extends Command {
} }
} }
private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(@Nullable Plot newPlot, private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(
@Nullable Plot newPlot,
@Nonnull CommandExecutionData data, @Nonnull CommandExecutionData data,
@Nullable PlotArea area) { @Nullable PlotArea area
if (newPlot != null && (data.player() instanceof ConsolePlayer ) {
|| (area != null && area.equals(newPlot.getArea())) if (newPlot == null) {
|| data.player().hasPermission(Permission.PERMISSION_ADMIN) return CompletableFuture.completedFuture(Optional.of(data));
|| data.player().hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO)) }
&& !newPlot.isDenied(data.player().getUUID())) { 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) return fetchPlotCenterLocation(newPlot)
.thenApply(newLoc -> { .thenApply(newLoc -> {
if (!data.player().canTeleport(newLoc)) { if (!player.canTeleport(newLoc)) {
data.player().sendMessage(TranslatableCaption.of("border.denied")); player.sendMessage(TranslatableCaption.of("border.denied"));
return Optional.empty(); return Optional.empty();
} }
// Save meta // Save meta
var originalCommandMeta = setCommandScope(data.player(), new TemporaryCommandMeta(newLoc, newPlot)); var originalCommandMeta = setCommandScope(player, new TemporaryCommandMeta(newLoc, newPlot));
return Optional.of(new CommandExecutionData( return Optional.of(new CommandExecutionData(
data.player(), player,
Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command
data.confirm(), data.confirm(),
data.whenDone(), data.whenDone(),
@@ -308,8 +319,6 @@ public class MainCommand extends Command {
)); ));
}); });
} }
return CompletableFuture.completedFuture(Optional.of(data));
}
private Optional<CommandExecutionData> prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) { private Optional<CommandExecutionData> prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) {
if (data.args().length >= 2 && !data.args()[0].isEmpty() && data.args()[0].charAt(0) == '-') { if (data.args().length >= 2 && !data.args()[0].isEmpty() && data.args()[0].charAt(0) == '-') {