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
2 changed files with 35 additions and 26 deletions

View File

@@ -283,32 +283,41 @@ public class MainCommand extends Command {
} }
} }
private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(@Nullable Plot newPlot, private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(
@Nonnull CommandExecutionData data, @Nullable Plot newPlot,
@Nullable PlotArea area) { @Nonnull CommandExecutionData data,
if (newPlot != null && (data.player() instanceof ConsolePlayer @Nullable PlotArea area
|| (area != null && area.equals(newPlot.getArea())) ) {
|| data.player().hasPermission(Permission.PERMISSION_ADMIN) if (newPlot == null) {
|| data.player().hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO)) return CompletableFuture.completedFuture(Optional.of(data));
&& !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
));
});
} }
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<CommandExecutionData> prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) { private Optional<CommandExecutionData> prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) {

View File

@@ -35,7 +35,7 @@ serverlib = "2.3.7"
# Gradle plugins # Gradle plugins
shadow = "8.3.8" shadow = "8.3.8"
grgit = "4.1.1" grgit = "4.1.1"
spotless = "7.2.1" spotless = "7.2.0"
publish = "0.34.0" publish = "0.34.0"
runPaper = "2.3.1" runPaper = "2.3.1"