Compare commits

...

10 Commits

Author SHA1 Message Date
Jordan
58016bb1c8 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
2025-08-03 11:13:48 +02:00
Alexander Brandes
e5943ba627 Update adventure-platform-bukkit to 4.4.1
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2025-07-30 09:01:56 +02:00
Alexander Brandes
07dfdeef2c Back to snapshot for development
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2025-07-29 21:20:36 +02:00
Alexander Brandes
025b08e716 Release 7.5.6
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2025-07-29 21:16:56 +02:00
Alexander Brandes
921435689e Update adventure-platform-bukkit to 4.4.1-SNAPSHOT (#4717)
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2025-07-29 21:09:20 +02:00
Alexander Brandes
aae154b23a Back to snapshot for development
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2025-07-29 18:36:10 +02:00
Alexander Brandes
0f33465d76 Release 7.5.5
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2025-07-29 18:33:50 +02:00
renovate[bot]
438f1d9656 Update junit-framework monorepo (#4715)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-28 16:00:43 +00:00
renovate[bot]
cb38aeef93 Update dependency com.diffplug.spotless to v7.2.1 (#4714)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-28 16:00:13 +00:00
Jordan
7be0655b86 fix: do not create south road twice on unlink (#4713)
- this was changed from else if to if in 7623698a00 (diff-b05df598e90ce5418467b07e84ef85a80be8bac7c70929063ace9ede4d5cf52eL1000) (for unknown reason)
 - fixes #4704
2025-07-28 13:44:55 +02:00
7 changed files with 45 additions and 36 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) {
throw new CommandException(TranslatableCaption.of("deny.cannot_interact"));
}
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

@@ -352,7 +352,7 @@ public class Plot {
* @param arg The search term * @param arg The search term
* @param message If a message should be sent to the player if a plot cannot be found * @param message If a message should be sent to the player if a plot cannot be found
* @return The plot if only 1 result is found, or null * @return The plot if only 1 result is found, or null
* @since TODO * @since 7.5.5
*/ */
public static @Nullable Plot getPlotFromStringUnchecked( public static @Nullable Plot getPlotFromStringUnchecked(
final @Nullable PlotPlayer<?> player, final @Nullable PlotPlayer<?> player,
@@ -434,7 +434,7 @@ public class Plot {
* @param string plot id/area + id * @param string plot id/area + id
* @param player {@link PlotPlayer} player to notify if plot is invalid (outside bounds) * @param player {@link PlotPlayer} player to notify if plot is invalid (outside bounds)
* @return New or existing plot object * @return New or existing plot object
* @since TODO * @since 7.5.5
*/ */
public static @Nullable Plot fromString( public static @Nullable Plot fromString(
final @Nullable PlotArea defaultArea, final @Nullable PlotArea defaultArea,
@@ -457,7 +457,7 @@ public class Plot {
* @param defaultArea if no area is specified * @param defaultArea if no area is specified
* @param string plot id/area + id * @param string plot id/area + id
* @return New or existing plot object * @return New or existing plot object
* @since TODO * @since 7.5.5
*/ */
public static @Nullable Plot fromStringUnchecked(final @Nullable PlotArea defaultArea, final @NonNull String string) { public static @Nullable Plot fromStringUnchecked(final @Nullable PlotArea defaultArea, final @NonNull String string) {
final String[] split = string.split("[;,]"); final String[] split = string.split("[;,]");

View File

@@ -371,8 +371,7 @@ public final class PlotModificationManager {
manager.createRoadSouthEast(current, queue); manager.createRoadSouthEast(current, queue);
} }
} }
} } else if (current.isMerged(Direction.SOUTH)) {
if (current.isMerged(Direction.SOUTH)) {
manager.createRoadSouth(current, queue); manager.createRoadSouth(current, queue);
} }
} }

View File

@@ -67,7 +67,7 @@ public class PlotTitle {
* Provides a string representation of this plot title value (used in placeholders). * Provides a string representation of this plot title value (used in placeholders).
* *
* @return the plot title representation in the format {@code "<title>" "<subtitle>"} * @return the plot title representation in the format {@code "<title>" "<subtitle>"}
* @since TODO * @since 7.5.5
*/ */
@Override @Override
public String toString() { public String toString() {

View File

@@ -415,6 +415,7 @@
"deny.denied_added": "<prefix><dark_aqua>You successfully denied the player from this plot.</dark_aqua>", "deny.denied_added": "<prefix><dark_aqua>You successfully denied the player from this plot.</dark_aqua>",
"deny.no_enter": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore not allowed to enter.</red>", "deny.no_enter": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore not allowed to enter.</red>",
"deny.you_got_denied": "<prefix><red>You are denied from the plot you were previously on, and got teleported to spawn.</red>", "deny.you_got_denied": "<prefix><red>You are denied from the plot you were previously on, and got teleported to spawn.</red>",
"deny.cannot_interact": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore cannot interact with it.</red>",
"deny.cant_remove_owner": "<prefix><red>You can't remove the plot owner.</red>", "deny.cant_remove_owner": "<prefix><red>You can't remove the plot owner.</red>",
"kick.player_not_in_plot": "<prefix><red>The player <gray><player></gray> is not on this plot.</red>", "kick.player_not_in_plot": "<prefix><red>The player <gray><player></gray> is not on this plot.</red>",
"kick.cannot_kick_player": "<prefix><red>You cannot kick the player <gray><player></gray>.</red>", "kick.cannot_kick_player": "<prefix><red>You cannot kick the player <gray><player></gray>.</red>",

View File

@@ -20,7 +20,7 @@ plugins {
} }
group = "com.intellectualsites.plotsquared" group = "com.intellectualsites.plotsquared"
version = "7.5.5-SNAPSHOT" version = "7.5.7-SNAPSHOT"
if (!File("$rootDir/.git").exists()) { if (!File("$rootDir/.git").exists()) {
logger.lifecycle(""" logger.lifecycle("""
@@ -67,8 +67,8 @@ subprojects {
dependencies { dependencies {
// Tests // Tests
testImplementation("org.junit.jupiter:junit-jupiter:5.13.3") testImplementation("org.junit.jupiter:junit-jupiter:5.13.4")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.13.3") testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.13.4")
} }
plugins.withId("java") { plugins.withId("java") {

View File

@@ -8,7 +8,7 @@ gson = "2.10"
guava = "31.1-jre" guava = "31.1-jre"
snakeyaml = "2.0" snakeyaml = "2.0"
adventure = "4.23.0" adventure = "4.23.0"
adventure-bukkit = "4.4.0" adventure-bukkit = "4.4.1"
log4j = "2.19.0" log4j = "2.19.0"
# Plugins # Plugins
@@ -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.0" spotless = "7.2.1"
publish = "0.34.0" publish = "0.34.0"
runPaper = "2.3.1" runPaper = "2.3.1"