Skip to content

Commit 58016bb

Browse files
authored
fix: allow admin override when setting plot context in command (#4712)
* 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 * Print error to user if denied
1 parent e5943ba commit 58016bb

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

Core/src/main/java/com/plotsquared/core/command/MainCommand.java

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -283,32 +283,41 @@ private CompletableFuture<Optional<CommandExecutionData>> prepareArguments(Comma
283283
}
284284
}
285285

286-
private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(@Nullable Plot newPlot,
287-
@Nonnull CommandExecutionData data,
288-
@Nullable PlotArea area) {
289-
if (newPlot != null && (data.player() instanceof ConsolePlayer
290-
|| (area != null && area.equals(newPlot.getArea()))
291-
|| data.player().hasPermission(Permission.PERMISSION_ADMIN)
292-
|| data.player().hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO))
293-
&& !newPlot.isDenied(data.player().getUUID())) {
294-
return fetchPlotCenterLocation(newPlot)
295-
.thenApply(newLoc -> {
296-
if (!data.player().canTeleport(newLoc)) {
297-
data.player().sendMessage(TranslatableCaption.of("border.denied"));
298-
return Optional.empty();
299-
}
300-
// Save meta
301-
var originalCommandMeta = setCommandScope(data.player(), new TemporaryCommandMeta(newLoc, newPlot));
302-
return Optional.of(new CommandExecutionData(
303-
data.player(),
304-
Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command
305-
data.confirm(),
306-
data.whenDone(),
307-
originalCommandMeta
308-
));
309-
});
286+
private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(
287+
@Nullable Plot newPlot,
288+
@Nonnull CommandExecutionData data,
289+
@Nullable PlotArea area
290+
) {
291+
if (newPlot == null) {
292+
return CompletableFuture.completedFuture(Optional.of(data));
293+
}
294+
final PlotPlayer<?> player = data.player();
295+
final boolean isAdmin = player instanceof ConsolePlayer || player.hasPermission(Permission.PERMISSION_ADMIN);
296+
final boolean isDenied = newPlot.isDenied(player.getUUID());
297+
if (!isAdmin) {
298+
if (isDenied) {
299+
throw new CommandException(TranslatableCaption.of("deny.cannot_interact"));
300+
}
301+
if (area != null && area.equals(newPlot.getArea()) && !player.hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO)) {
302+
return CompletableFuture.completedFuture(Optional.of(data));
303+
}
310304
}
311-
return CompletableFuture.completedFuture(Optional.of(data));
305+
return fetchPlotCenterLocation(newPlot)
306+
.thenApply(newLoc -> {
307+
if (!player.canTeleport(newLoc)) {
308+
player.sendMessage(TranslatableCaption.of("border.denied"));
309+
return Optional.empty();
310+
}
311+
// Save meta
312+
var originalCommandMeta = setCommandScope(player, new TemporaryCommandMeta(newLoc, newPlot));
313+
return Optional.of(new CommandExecutionData(
314+
player,
315+
Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command
316+
data.confirm(),
317+
data.whenDone(),
318+
originalCommandMeta
319+
));
320+
});
312321
}
313322

314323
private Optional<CommandExecutionData> prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) {

Core/src/main/resources/lang/messages_en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@
415415
"deny.denied_added": "<prefix><dark_aqua>You successfully denied the player from this plot.</dark_aqua>",
416416
"deny.no_enter": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore not allowed to enter.</red>",
417417
"deny.you_got_denied": "<prefix><red>You are denied from the plot you were previously on, and got teleported to spawn.</red>",
418+
"deny.cannot_interact": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore cannot interact with it.</red>",
418419
"deny.cant_remove_owner": "<prefix><red>You can't remove the plot owner.</red>",
419420
"kick.player_not_in_plot": "<prefix><red>The player <gray><player></gray> is not on this plot.</red>",
420421
"kick.cannot_kick_player": "<prefix><red>You cannot kick the player <gray><player></gray>.</red>",

0 commit comments

Comments
 (0)