From 13cbb7e08303fe69b22604f7a133aad8f062aee1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 25 Aug 2025 01:08:14 +0000 Subject: [PATCH 01/19] Update actions/checkout action to v5 (#4746) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-pr.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/codeql.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 6c772b3af..3e040e6d8 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -9,7 +9,7 @@ jobs: os: [ ubuntu-latest, windows-latest, macos-latest ] steps: - name: Checkout Repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v4 - name: Setup Java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 017e23ee8..37ec37b0a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v4 - name: Setup Java diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 43f2659e0..ac5817523 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -20,7 +20,7 @@ jobs: language: [ 'java' ] steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Java uses: actions/setup-java@v4 with: From 8a5fa2679677281c020a9873138e745cbc302fa3 Mon Sep 17 00:00:00 2001 From: Jordan Date: Sat, 30 Aug 2025 19:32:40 +0100 Subject: [PATCH 02/19] fix: allow extended world height when teleporting player on join (#4739) --- .../plotsquared/core/player/PlotPlayer.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java index f4bcd1943..f65cd4ed5 100644 --- a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java +++ b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java @@ -614,16 +614,16 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, PlotId id = plot.getId(); int x = id.getX(); int z = id.getY(); - ByteBuffer buffer = ByteBuffer.allocate(13); + ByteBuffer buffer = ByteBuffer.allocate(14); buffer.putShort((short) x); buffer.putShort((short) z); Location location = getLocation(); buffer.putInt(location.getX()); - buffer.put((byte) location.getY()); + buffer.putShort((short) location.getY()); buffer.putInt(location.getZ()); - setPersistentMeta("quitLoc", buffer.array()); - } else if (hasPersistentMeta("quitLoc")) { - removePersistentMeta("quitLoc"); + setPersistentMeta("quitLocV2", buffer.array()); + } else if (hasPersistentMeta("quitLocV2")) { + removePersistentMeta("quitLocV2"); } if (plot != null) { this.eventDispatcher.callLeave(this, plot); @@ -700,11 +700,18 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, return; } PlotArea area = ((SinglePlotAreaManager) manager).getArea(); + boolean V2 = false; byte[] arr = PlotPlayer.this.getPersistentMeta("quitLoc"); if (arr == null) { - return; + arr = PlotPlayer.this.getPersistentMeta("quitLocV2"); + if (arr == null) { + return; + } + V2 = true; + removePersistentMeta("quitLocV2"); + } else { + removePersistentMeta("quitLoc"); } - removePersistentMeta("quitLoc"); if (!getMeta("teleportOnLogin", true)) { return; @@ -714,7 +721,7 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, final int plotZ = quitWorld.getShort(); PlotId id = PlotId.of(plotX, plotZ); int x = quitWorld.getInt(); - int y = quitWorld.get() & 0xFF; + int y = V2 ? quitWorld.getShort() : (quitWorld.get() & 0xFF); int z = quitWorld.getInt(); Plot plot = area.getOwnedPlot(id); @@ -748,10 +755,11 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, } } } catch (Throwable e) { - e.printStackTrace(); + LOGGER.error("Error populating persistent meta for player {}", PlotPlayer.this.getName(), e); } } - }); + } + ); } } From 02a65c885537dddf04dfe36097113530fd8ff239 Mon Sep 17 00:00:00 2001 From: Jordan Date: Sat, 30 Aug 2025 19:33:13 +0100 Subject: [PATCH 03/19] fix: use PlotPlayer#getCurrentPlot across commands to allow / usage (#4738) * fix: use PlotPlayer#getCurrentPlot across commands to allow / usage - fixes #4526 - supersedes #4675 * cleanup --- .../java/com/plotsquared/core/command/Alias.java | 4 +--- .../java/com/plotsquared/core/command/Buy.java | 4 +++- .../java/com/plotsquared/core/command/Claim.java | 6 ++---- .../com/plotsquared/core/command/Continue.java | 4 ++-- .../java/com/plotsquared/core/command/Copy.java | 4 +--- .../core/command/CreateRoadSchematic.java | 6 ++---- .../plotsquared/core/command/DebugRoadRegen.java | 10 +++------- .../com/plotsquared/core/command/Delete.java | 6 ++---- .../java/com/plotsquared/core/command/Deny.java | 3 +-- .../java/com/plotsquared/core/command/Done.java | 4 +--- .../com/plotsquared/core/command/Download.java | 2 +- .../plotsquared/core/command/FlagCommand.java | 16 +++++++--------- .../java/com/plotsquared/core/command/Kick.java | 8 +++----- .../com/plotsquared/core/command/ListCmd.java | 4 ++-- .../java/com/plotsquared/core/command/Load.java | 2 +- .../com/plotsquared/core/command/Middle.java | 4 +--- .../java/com/plotsquared/core/command/Move.java | 4 +--- .../java/com/plotsquared/core/command/Music.java | 4 +--- .../com/plotsquared/core/command/Remove.java | 7 ++----- .../plotsquared/core/command/SchematicCmd.java | 7 ++----- .../java/com/plotsquared/core/command/Set.java | 2 +- .../com/plotsquared/core/command/SetCommand.java | 4 +--- .../java/com/plotsquared/core/command/Swap.java | 10 +++++----- .../com/plotsquared/core/command/Unlink.java | 4 +--- .../com/plotsquared/core/player/PlotPlayer.java | 11 ++++++++--- 25 files changed, 55 insertions(+), 85 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/command/Alias.java b/Core/src/main/java/com/plotsquared/core/command/Alias.java index a52e47ef2..51250b361 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Alias.java +++ b/Core/src/main/java/com/plotsquared/core/command/Alias.java @@ -21,7 +21,6 @@ package com.plotsquared.core.command; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -58,8 +57,7 @@ public class Alias extends SubCommand { return false; } - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Buy.java b/Core/src/main/java/com/plotsquared/core/command/Buy.java index d8f63530a..2ab5f0361 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Buy.java +++ b/Core/src/main/java/com/plotsquared/core/command/Buy.java @@ -20,6 +20,7 @@ package com.plotsquared.core.command; import com.google.inject.Inject; import com.plotsquared.core.PlotSquared; +import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.events.PlayerBuyPlotEvent; import com.plotsquared.core.events.Result; @@ -84,8 +85,9 @@ public class Buy extends Command { checkTrue(plot.hasOwner(), TranslatableCaption.of("info.plot_unowned")); checkTrue(!plot.isOwner(player.getUUID()), TranslatableCaption.of("economy.cannot_buy_own")); Set plots = plot.getConnectedPlots(); + int plotCount = Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(plot.getWorldName()); checkTrue( - player.getPlotCount() + plots.size() <= player.getAllowedPlots(), + plotCount + plots.size() <= player.getAllowedPlots(), TranslatableCaption.of("permission.cant_claim_more_plots"), TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots()))) ); diff --git a/Core/src/main/java/com/plotsquared/core/command/Claim.java b/Core/src/main/java/com/plotsquared/core/command/Claim.java index c118d4cb0..422347449 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Claim.java +++ b/Core/src/main/java/com/plotsquared/core/command/Claim.java @@ -26,7 +26,6 @@ import com.plotsquared.core.events.PlayerClaimPlotEvent; import com.plotsquared.core.events.PlotMergeEvent; import com.plotsquared.core.events.Result; import com.plotsquared.core.location.Direction; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.MetaDataAccess; import com.plotsquared.core.player.PlayerMetaDataKeys; @@ -72,8 +71,7 @@ public class Claim extends SubCommand { if (args.length >= 1) { schematic = args[0]; } - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -90,7 +88,7 @@ public class Claim extends SubCommand { boolean force = event.getEventResult() == Result.FORCE; int currentPlots = Settings.Limit.GLOBAL ? player.getPlotCount() : - player.getPlotCount(location.getWorldName()); + player.getPlotCount(plot.getWorldName()); final PlotArea area = plot.getArea(); diff --git a/Core/src/main/java/com/plotsquared/core/command/Continue.java b/Core/src/main/java/com/plotsquared/core/command/Continue.java index 1929b12c3..62898b725 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Continue.java +++ b/Core/src/main/java/com/plotsquared/core/command/Continue.java @@ -68,8 +68,8 @@ public class Continue extends SubCommand { return false; } int size = plot.getConnectedPlots().size(); - if (!Settings.Done.COUNTS_TOWARDS_LIMIT && (player.getAllowedPlots() - < player.getPlotCount() + size)) { + int plotCount = Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(plot.getWorldName()); + if (!Settings.Done.COUNTS_TOWARDS_LIMIT && (player.getAllowedPlots() < plotCount + size)) { player.sendMessage( TranslatableCaption.of("permission.cant_claim_more_plots"), TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots()))) diff --git a/Core/src/main/java/com/plotsquared/core/command/Copy.java b/Core/src/main/java/com/plotsquared/core/command/Copy.java index f281a4c4b..0b5b64b44 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Copy.java +++ b/Core/src/main/java/com/plotsquared/core/command/Copy.java @@ -19,7 +19,6 @@ package com.plotsquared.core.command; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -37,8 +36,7 @@ public class Copy extends SubCommand { @Override public boolean onCommand(final PlotPlayer player, String[] args) { - Location location = player.getLocation(); - Plot plot1 = location.getPlotAbs(); + Plot plot1 = player.getCurrentPlot(); if (plot1 == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/CreateRoadSchematic.java b/Core/src/main/java/com/plotsquared/core/command/CreateRoadSchematic.java index e4b6d0d38..41bdd8a4e 100644 --- a/Core/src/main/java/com/plotsquared/core/command/CreateRoadSchematic.java +++ b/Core/src/main/java/com/plotsquared/core/command/CreateRoadSchematic.java @@ -22,7 +22,6 @@ import com.google.inject.Inject; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.generator.HybridPlotWorld; import com.plotsquared.core.generator.HybridUtils; -import com.plotsquared.core.location.Location; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; import net.kyori.adventure.text.Component; @@ -47,8 +46,7 @@ public class CreateRoadSchematic extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -57,7 +55,7 @@ public class CreateRoadSchematic extends SubCommand { player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large")); return false; } - if (!(location.getPlotArea() instanceof HybridPlotWorld)) { + if (!(plot.getArea() instanceof HybridPlotWorld)) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); } this.hybridUtils.setupRoadSchematic(plot); diff --git a/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java b/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java index df6bd11d6..678dfd33a 100644 --- a/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java +++ b/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java @@ -22,7 +22,6 @@ import com.google.inject.Inject; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.generator.HybridPlotManager; import com.plotsquared.core.generator.HybridUtils; -import com.plotsquared.core.location.Location; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.PlotArea; @@ -57,8 +56,7 @@ public class DebugRoadRegen extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (args.length < 1) { player.sendMessage( TranslatableCaption.of("commandconfig.command_syntax"), @@ -92,8 +90,7 @@ public class DebugRoadRegen extends SubCommand { } public boolean regenPlot(PlotPlayer player) { - Location location = player.getLocation(); - PlotArea area = location.getPlotArea(); + PlotArea area = player.getCurrentPlot().getArea(); if (area == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); return false; @@ -148,8 +145,7 @@ public class DebugRoadRegen extends SubCommand { return false; } - Location location = player.getLocation(); - PlotArea area = location.getPlotArea(); + PlotArea area = player.getCurrentPlot().getArea(); if (area == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); } diff --git a/Core/src/main/java/com/plotsquared/core/command/Delete.java b/Core/src/main/java/com/plotsquared/core/command/Delete.java index 6784f9e5f..d7f6c6ab9 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Delete.java +++ b/Core/src/main/java/com/plotsquared/core/command/Delete.java @@ -23,7 +23,6 @@ import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.events.Result; import com.plotsquared.core.events.TeleportCause; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -61,8 +60,7 @@ public class Delete extends SubCommand { @Override public boolean onCommand(final PlotPlayer player, String[] args) { - Location location = player.getLocation(); - final Plot plot = location.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -92,7 +90,7 @@ public class Delete extends SubCommand { final java.util.Set plots = plot.getConnectedPlots(); final int currentPlots = Settings.Limit.GLOBAL ? player.getPlotCount() : - player.getPlotCount(location.getWorldName()); + player.getPlotCount(plot.getWorldName()); Runnable run = () -> { if (plot.getRunning() > 0) { player.sendMessage(TranslatableCaption.of("errors.wait_for_timer")); diff --git a/Core/src/main/java/com/plotsquared/core/command/Deny.java b/Core/src/main/java/com/plotsquared/core/command/Deny.java index 56e7c2c8a..8d7365f6e 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Deny.java +++ b/Core/src/main/java/com/plotsquared/core/command/Deny.java @@ -70,8 +70,7 @@ public class Deny extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - final Plot plot = location.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Done.java b/Core/src/main/java/com/plotsquared/core/command/Done.java index b8b091b85..d7d79ecaa 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Done.java +++ b/Core/src/main/java/com/plotsquared/core/command/Done.java @@ -26,7 +26,6 @@ import com.plotsquared.core.events.PlotDoneEvent; import com.plotsquared.core.events.PlotFlagAddEvent; import com.plotsquared.core.events.Result; import com.plotsquared.core.generator.HybridUtils; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -61,8 +60,7 @@ public class Done extends SubCommand { @Override public boolean onCommand(final PlotPlayer player, String[] args) { - Location location = player.getLocation(); - final Plot plot = location.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if ((plot == null) || !plot.hasOwner()) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Download.java b/Core/src/main/java/com/plotsquared/core/command/Download.java index 5897112ba..167f465ca 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Download.java +++ b/Core/src/main/java/com/plotsquared/core/command/Download.java @@ -73,7 +73,7 @@ public class Download extends SubCommand { @Override public boolean onCommand(final PlotPlayer player, String[] args) { - String world = player.getLocation().getWorldName(); + String world = player.getCurrentPlot().getWorldName(); if (!this.plotAreaManager.hasPlotArea(world)) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java b/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java index 7987bfb03..4406bf176 100644 --- a/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java @@ -27,7 +27,6 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.events.PlotFlagAddEvent; import com.plotsquared.core.events.PlotFlagRemoveEvent; import com.plotsquared.core.events.Result; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -179,8 +178,7 @@ public final class FlagCommand extends Command { * @return {@code true} if the player is allowed to modify the flags at their current location */ private static boolean checkRequirements(final @NonNull PlotPlayer player) { - final Location location = player.getLocation(); - final Plot plot = location.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -344,7 +342,7 @@ public final class FlagCommand extends Command { if (plotFlag == null) { return; } - Plot plot = player.getLocation().getPlotAbs(); + Plot plot = player.getCurrentPlot(); PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot); if (event.getEventResult() == Result.DENY) { player.sendMessage( @@ -409,7 +407,7 @@ public final class FlagCommand extends Command { if (plotFlag == null) { return; } - Plot plot = player.getLocation().getPlotAbs(); + Plot plot = player.getCurrentPlot(); PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot); if (event.getEventResult() == Result.DENY) { player.sendMessage( @@ -419,7 +417,7 @@ public final class FlagCommand extends Command { return; } boolean force = event.getEventResult() == Result.FORCE; - final PlotFlag localFlag = player.getLocation().getPlotAbs().getFlagContainer() + final PlotFlag localFlag = player.getCurrentPlot().getFlagContainer() .getFlag(event.getFlag().getClass()); if (!force) { for (String entry : args[1].split(",")) { @@ -444,7 +442,7 @@ public final class FlagCommand extends Command { return; } boolean result = - player.getLocation().getPlotAbs().setFlag(localFlag.merge(parsed.getValue())); + player.getCurrentPlot().setFlag(localFlag.merge(parsed.getValue())); if (!result) { player.sendMessage(TranslatableCaption.of("flag.flag_not_added")); return; @@ -484,7 +482,7 @@ public final class FlagCommand extends Command { if (flag == null) { return; } - final Plot plot = player.getLocation().getPlotAbs(); + final Plot plot = player.getCurrentPlot(); final PlotFlag flagWithOldValue = plot.getFlagContainer().getFlag(flag.getClass()); PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(flag, plot); if (event.getEventResult() == Result.DENY) { @@ -687,7 +685,7 @@ public final class FlagCommand extends Command { .build() ); // Default value - final String defaultValue = player.getLocation().getPlotArea().getFlagContainer() + final String defaultValue = player.getCurrentPlot().getArea().getFlagContainer() .getFlagErased(plotFlag.getClass()).toString(); player.sendMessage( TranslatableCaption.of("flag.flag_info_default_value"), diff --git a/Core/src/main/java/com/plotsquared/core/command/Kick.java b/Core/src/main/java/com/plotsquared/core/command/Kick.java index 5c9d07fc1..ced145fa5 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Kick.java +++ b/Core/src/main/java/com/plotsquared/core/command/Kick.java @@ -65,8 +65,7 @@ public class Kick extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - Plot plot = location.getPlot(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -124,7 +123,7 @@ public class Kick extends SubCommand { ); return; } - Location spawn = this.worldUtil.getSpawn(location.getWorldName()); + Location spawn = this.worldUtil.getSpawn(plot.getWorldName()); player2.sendMessage(TranslatableCaption.of("kick.you_got_kicked")); if (plot.equals(spawn.getPlot())) { Location newSpawn = this.worldUtil.getSpawn(this.plotAreaManager.getAllWorlds()[0]); @@ -148,8 +147,7 @@ public class Kick extends SubCommand { @Override public Collection tab(final PlotPlayer player, final String[] args, final boolean space) { - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { return Collections.emptyList(); } diff --git a/Core/src/main/java/com/plotsquared/core/command/ListCmd.java b/Core/src/main/java/com/plotsquared/core/command/ListCmd.java index 144380447..2766721ff 100644 --- a/Core/src/main/java/com/plotsquared/core/command/ListCmd.java +++ b/Core/src/main/java/com/plotsquared/core/command/ListCmd.java @@ -150,8 +150,8 @@ public class ListCmd extends SubCommand { page = 0; } - String world = player.getLocation().getWorldName(); - PlotArea area = player.getApplicablePlotArea(); + String world = player.getCurrentPlot().getWorldName(); + PlotArea area = player.getCurrentPlot().getArea(); String arg = args[0].toLowerCase(); final boolean[] sort = new boolean[]{true}; diff --git a/Core/src/main/java/com/plotsquared/core/command/Load.java b/Core/src/main/java/com/plotsquared/core/command/Load.java index 14c700d4c..cf4936211 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Load.java +++ b/Core/src/main/java/com/plotsquared/core/command/Load.java @@ -68,7 +68,7 @@ public class Load extends SubCommand { @Override public boolean onCommand(final PlotPlayer player, final String[] args) { - final String world = player.getLocation().getWorldName(); + final String world = player.getCurrentPlot().getWorldName(); if (!this.plotAreaManager.hasPlotArea(world)) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Middle.java b/Core/src/main/java/com/plotsquared/core/command/Middle.java index 24212cd44..5deb622d7 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Middle.java +++ b/Core/src/main/java/com/plotsquared/core/command/Middle.java @@ -20,7 +20,6 @@ package com.plotsquared.core.command; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.events.TeleportCause; -import com.plotsquared.core.location.Location; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -36,8 +35,7 @@ public class Middle extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] arguments) { - Location location = player.getLocation(); - Plot plot = location.getPlot(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Move.java b/Core/src/main/java/com/plotsquared/core/command/Move.java index 161d12991..cbd6c074d 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Move.java +++ b/Core/src/main/java/com/plotsquared/core/command/Move.java @@ -20,7 +20,6 @@ package com.plotsquared.core.command; import com.google.inject.Inject; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -55,8 +54,7 @@ public class Move extends SubCommand { RunnableVal3 confirm, RunnableVal2 whenDone ) { - Location location = player.getLocation(); - Plot plot1 = location.getPlotAbs(); + Plot plot1 = player.getCurrentPlot(); if (plot1 == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return CompletableFuture.completedFuture(false); diff --git a/Core/src/main/java/com/plotsquared/core/command/Music.java b/Core/src/main/java/com/plotsquared/core/command/Music.java index 075917cec..91c75b28b 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Music.java +++ b/Core/src/main/java/com/plotsquared/core/command/Music.java @@ -23,7 +23,6 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.events.PlotFlagAddEvent; import com.plotsquared.core.events.PlotFlagRemoveEvent; import com.plotsquared.core.events.Result; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -74,8 +73,7 @@ public class Music extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - final Plot plot = location.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Remove.java b/Core/src/main/java/com/plotsquared/core/command/Remove.java index 287145df5..e2fd2faca 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Remove.java +++ b/Core/src/main/java/com/plotsquared/core/command/Remove.java @@ -21,7 +21,6 @@ package com.plotsquared.core.command; import com.google.inject.Inject; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.database.DBFunc; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -56,8 +55,7 @@ public class Remove extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -132,8 +130,7 @@ public class Remove extends SubCommand { @Override public Collection tab(final PlotPlayer player, final String[] args, final boolean space) { - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { return Collections.emptyList(); } diff --git a/Core/src/main/java/com/plotsquared/core/command/SchematicCmd.java b/Core/src/main/java/com/plotsquared/core/command/SchematicCmd.java index a92f06c5a..38c75beea 100644 --- a/Core/src/main/java/com/plotsquared/core/command/SchematicCmd.java +++ b/Core/src/main/java/com/plotsquared/core/command/SchematicCmd.java @@ -22,7 +22,6 @@ import com.google.common.collect.Lists; import com.google.inject.Inject; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.ConsolePlayer; import com.plotsquared.core.player.PlotPlayer; @@ -102,8 +101,7 @@ public class SchematicCmd extends SubCommand { ); break; } - Location loc = player.getLocation(); - final Plot plot = loc.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; @@ -247,8 +245,7 @@ public class SchematicCmd extends SubCommand { player.sendMessage(TranslatableCaption.of("error.task_in_process")); return false; } - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Set.java b/Core/src/main/java/com/plotsquared/core/command/Set.java index 1b39a9dc5..52c32c997 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Set.java +++ b/Core/src/main/java/com/plotsquared/core/command/Set.java @@ -78,7 +78,7 @@ public class Set extends SubCommand { @Override public boolean set(PlotPlayer player, final Plot plot, String value) { - final PlotArea plotArea = player.getLocation().getPlotArea(); + final PlotArea plotArea = player.getCurrentPlot().getArea(); if (plotArea == null) { return false; } diff --git a/Core/src/main/java/com/plotsquared/core/command/SetCommand.java b/Core/src/main/java/com/plotsquared/core/command/SetCommand.java index 49794ec4b..9a05207bb 100644 --- a/Core/src/main/java/com/plotsquared/core/command/SetCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/SetCommand.java @@ -19,7 +19,6 @@ package com.plotsquared.core.command; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -32,8 +31,7 @@ public abstract class SetCommand extends SubCommand { @Override public boolean onCommand(PlotPlayer player, String[] args) { - Location location = player.getLocation(); - Plot plot = location.getPlotAbs(); + Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/command/Swap.java b/Core/src/main/java/com/plotsquared/core/command/Swap.java index e56def26f..ba24943b9 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Swap.java +++ b/Core/src/main/java/com/plotsquared/core/command/Swap.java @@ -19,7 +19,6 @@ package com.plotsquared.core.command; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -44,8 +43,7 @@ public class Swap extends SubCommand { RunnableVal3 confirm, RunnableVal2 whenDone ) { - Location location = player.getLocation(); - Plot plot1 = location.getPlotAbs(); + Plot plot1 = player.getCurrentPlot(); if (plot1 == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return CompletableFuture.completedFuture(false); @@ -79,8 +77,10 @@ public class Swap extends SubCommand { String p1 = plot1.toString(); String p2 = plot2.toString(); - return plot1.getPlotModificationManager().move(plot2, player, () -> { - }, true).thenApply(result -> { + return plot1.getPlotModificationManager().move( + plot2, player, () -> { + }, true + ).thenApply(result -> { if (result) { player.sendMessage( TranslatableCaption.of("swap.swap_success"), diff --git a/Core/src/main/java/com/plotsquared/core/command/Unlink.java b/Core/src/main/java/com/plotsquared/core/command/Unlink.java index 72c620fb7..22f5b34df 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Unlink.java +++ b/Core/src/main/java/com/plotsquared/core/command/Unlink.java @@ -22,7 +22,6 @@ import com.google.inject.Inject; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.events.PlotUnlinkEvent; import com.plotsquared.core.events.Result; -import com.plotsquared.core.location.Location; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -51,8 +50,7 @@ public class Unlink extends SubCommand { @Override public boolean onCommand(final PlotPlayer player, String[] args) { - Location location = player.getLocation(); - final Plot plot = location.getPlotAbs(); + final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); return false; diff --git a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java index f65cd4ed5..b0692aa2f 100644 --- a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java +++ b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java @@ -290,6 +290,7 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, * * @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea} */ + @Nullable public Plot getCurrentPlot() { try (final MetaDataAccess lastPlotAccess = this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { @@ -319,7 +320,7 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, */ public int getPlotCount() { if (!Settings.Limit.GLOBAL) { - return getPlotCount(getLocation().getWorldName()); + return getPlotCount(getCurrentPlot().getWorldName()); } final AtomicInteger count = new AtomicInteger(0); final UUID uuid = getUUID(); @@ -339,7 +340,7 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, public int getClusterCount() { if (!Settings.Limit.GLOBAL) { - return getClusterCount(getLocation().getWorldName()); + return getClusterCount(getCurrentPlot().getWorldName()); } final AtomicInteger count = new AtomicInteger(0); this.plotAreaManager.forEachPlotArea(value -> { @@ -408,7 +409,11 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, } public PlotArea getApplicablePlotArea() { - return this.plotAreaManager.getApplicablePlotArea(getLocation()); + Plot plot = getCurrentPlot(); + if (plot == null) { + return this.plotAreaManager.getApplicablePlotArea(getLocation()); + } + return plot.getArea(); } @Override From aaba2b5b1af6232f4061edf775f64a73964db7a3 Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 1 Sep 2025 19:29:52 +0100 Subject: [PATCH 04/19] fix: improve error handling in backups (#4740) * fix: improve error handling in backups - fixes #4460 * cleanup * Update Core/src/main/java/com/plotsquared/core/backup/Backup.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Alexander Brandes Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../com/plotsquared/core/backup/Backup.java | 8 +- .../core/backup/PlayerBackupProfile.java | 37 ++++---- .../core/backup/SimpleBackupManager.java | 11 ++- .../com/plotsquared/core/command/Backup.java | 88 +++++++++++-------- .../core/exception/PlotSquaredException.java | 62 +++++++++++++ .../core/util/SchematicHandler.java | 37 ++++---- 6 files changed, 170 insertions(+), 73 deletions(-) create mode 100644 Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java diff --git a/Core/src/main/java/com/plotsquared/core/backup/Backup.java b/Core/src/main/java/com/plotsquared/core/backup/Backup.java index bd7d4f227..5f52645a9 100644 --- a/Core/src/main/java/com/plotsquared/core/backup/Backup.java +++ b/Core/src/main/java/com/plotsquared/core/backup/Backup.java @@ -18,6 +18,8 @@ */ package com.plotsquared.core.backup; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.checkerframework.checker.nullness.qual.Nullable; import java.io.IOException; @@ -30,12 +32,14 @@ import java.nio.file.Path; */ public class Backup { + private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Backup.class.getSimpleName()); + private final BackupProfile owner; private final long creationTime; @Nullable private final Path file; - Backup(final BackupProfile owner, final long creationTime, final Path file) { + Backup(final BackupProfile owner, final long creationTime, @Nullable final Path file) { this.owner = owner; this.creationTime = creationTime; this.file = file; @@ -49,7 +53,7 @@ public class Backup { try { Files.deleteIfExists(file); } catch (final IOException e) { - e.printStackTrace(); + LOGGER.error("Error deleting backup at {}", file, e); } } } diff --git a/Core/src/main/java/com/plotsquared/core/backup/PlayerBackupProfile.java b/Core/src/main/java/com/plotsquared/core/backup/PlayerBackupProfile.java index 1725f5dc6..ce3658df4 100644 --- a/Core/src/main/java/com/plotsquared/core/backup/PlayerBackupProfile.java +++ b/Core/src/main/java/com/plotsquared/core/backup/PlayerBackupProfile.java @@ -21,14 +21,15 @@ package com.plotsquared.core.backup; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.plotsquared.core.configuration.caption.TranslatableCaption; -import com.plotsquared.core.player.ConsolePlayer; +import com.plotsquared.core.exception.PlotSquaredException; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.schematic.Schematic; import com.plotsquared.core.util.SchematicHandler; import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.TaskManager; -import net.kyori.adventure.text.minimessage.MiniMessage; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -51,7 +52,7 @@ import java.util.concurrent.CompletableFuture; */ public class PlayerBackupProfile implements BackupProfile { - static final MiniMessage MINI_MESSAGE = MiniMessage.builder().build(); + private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + PlayerBackupProfile.class.getSimpleName()); private final UUID owner; private final Plot plot; @@ -87,7 +88,7 @@ public class PlayerBackupProfile implements BackupProfile { Files.createDirectory(path); } } catch (final Exception e) { - e.printStackTrace(); + LOGGER.error("Error resolving {} from {}", child, parent, e); } return path; } @@ -104,7 +105,7 @@ public class PlayerBackupProfile implements BackupProfile { try { Files.createDirectories(path); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error creating directory {}", path, e); return Collections.emptyList(); } } @@ -117,11 +118,11 @@ public class PlayerBackupProfile implements BackupProfile { backups.add( new Backup(this, basicFileAttributes.creationTime().toMillis(), file)); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error getting attributes for file {} to create backup", file, e); } }); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error walking files from {}", path, e); } backups.sort(Comparator.comparingLong(Backup::getCreationTime).reversed()); return (this.backupCache = backups); @@ -133,7 +134,7 @@ public class PlayerBackupProfile implements BackupProfile { public void destroy() { this.listBackups().whenCompleteAsync((backups, error) -> { if (error != null) { - error.printStackTrace(); + LOGGER.error("Error while listing backups", error); } backups.forEach(Backup::delete); this.backupCache = null; @@ -141,10 +142,12 @@ public class PlayerBackupProfile implements BackupProfile { } public @NonNull Path getBackupDirectory() { - return resolve(resolve( - resolve(backupManager.getBackupPath(), Objects.requireNonNull(plot.getArea().toString(), "plot area id")), - Objects.requireNonNull(plot.getId().toDashSeparatedString(), "plot id") - ), Objects.requireNonNull(owner.toString(), "owner")); + return resolve( + resolve( + resolve(backupManager.getBackupPath(), Objects.requireNonNull(plot.getArea().toString(), "plot area id")), + Objects.requireNonNull(plot.getId().toDashSeparatedString(), "plot id") + ), Objects.requireNonNull(owner.toString(), "owner") + ); } @Override @@ -156,7 +159,8 @@ public class PlayerBackupProfile implements BackupProfile { backups.get(backups.size() - 1).delete(); } final List plots = Collections.singletonList(plot); - final boolean result = this.schematicHandler.exportAll(plots, getBackupDirectory().toFile(), + final boolean result = this.schematicHandler.exportAll( + plots, getBackupDirectory().toFile(), "%world%-%id%-" + System.currentTimeMillis(), () -> future.complete(new Backup(this, System.currentTimeMillis(), null)) ); @@ -180,7 +184,7 @@ public class PlayerBackupProfile implements BackupProfile { try { schematic = this.schematicHandler.getSchematic(backup.getFile().toFile()); } catch (SchematicHandler.UnsupportedFormatException e) { - e.printStackTrace(); + LOGGER.error("Unsupported format for backup {}", backup.getFile(), e); } if (schematic == null) { future.completeExceptionally(new IllegalArgumentException( @@ -200,10 +204,9 @@ public class PlayerBackupProfile implements BackupProfile { if (value) { future.complete(null); } else { - future.completeExceptionally(new RuntimeException(MINI_MESSAGE.escapeTags( + future.completeExceptionally(new PlotSquaredException( TranslatableCaption - .of("schematics.schematic_paste_failed") - .getComponent(ConsolePlayer.getConsole())))); + .of("schematics.schematic_paste_failed"))); } } } diff --git a/Core/src/main/java/com/plotsquared/core/backup/SimpleBackupManager.java b/Core/src/main/java/com/plotsquared/core/backup/SimpleBackupManager.java index f9f670532..b38697c75 100644 --- a/Core/src/main/java/com/plotsquared/core/backup/SimpleBackupManager.java +++ b/Core/src/main/java/com/plotsquared/core/backup/SimpleBackupManager.java @@ -32,6 +32,8 @@ import com.plotsquared.core.util.task.TaskManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -47,6 +49,7 @@ import java.util.concurrent.TimeUnit; @Singleton public class SimpleBackupManager implements BackupManager { + private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + SimpleBackupManager.class.getSimpleName()); private final Path backupPath; private final boolean automaticBackup; private final int backupLimit; @@ -112,7 +115,12 @@ public class SimpleBackupManager implements BackupManager { TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage()))) ); } - throwable.printStackTrace(); + LOGGER.error( + "Error creating backup for plot {};{} and player {}", + plot.getArea(), + plot.getId(), + player == null ? "null" : player.getName(), throwable + ); } else { if (player != null) { player.sendMessage(TranslatableCaption.of("backups.backup_automatic_finished")); @@ -128,6 +136,7 @@ public class SimpleBackupManager implements BackupManager { return this.automaticBackup; } + @NonNull public Path getBackupPath() { return this.backupPath; } diff --git a/Core/src/main/java/com/plotsquared/core/command/Backup.java b/Core/src/main/java/com/plotsquared/core/command/Backup.java index 3ccbb3f98..24866e748 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Backup.java +++ b/Core/src/main/java/com/plotsquared/core/command/Backup.java @@ -24,6 +24,7 @@ import com.plotsquared.core.backup.BackupProfile; import com.plotsquared.core.backup.NullBackupProfile; import com.plotsquared.core.backup.PlayerBackupProfile; import com.plotsquared.core.configuration.caption.TranslatableCaption; +import com.plotsquared.core.exception.PlotSquaredException; import com.plotsquared.core.permissions.Permission; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.plot.Plot; @@ -32,6 +33,8 @@ import com.plotsquared.core.util.task.RunnableVal3; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.checkerframework.checker.nullness.qual.NonNull; import java.nio.file.Files; @@ -57,6 +60,8 @@ import java.util.stream.Stream; permission = "plots.backup") public final class Backup extends Command { + private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Backup.class.getSimpleName()); + private final BackupManager backupManager; @Inject @@ -326,20 +331,43 @@ public final class Backup extends Command { if (backupProfile instanceof NullBackupProfile) { player.sendMessage( TranslatableCaption.of("backups.backup_impossible"), - TagResolver.resolver("plot", Tag.inserting( - TranslatableCaption.of("generic.generic_other").toComponent(player) - )) + TagResolver.resolver( + "plot", Tag.inserting( + TranslatableCaption.of("generic.generic_other").toComponent(player) + ) + ) ); } else { backupProfile.listBackups().whenComplete((backups, throwable) -> { if (throwable != null) { + Component reason; + if (throwable instanceof PlotSquaredException pe) { + reason = pe.getCaption().toComponent(player); + } else { + reason = Component.text(throwable.getMessage()); + } player.sendMessage( TranslatableCaption.of("backups.backup_load_failure"), - TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage()))) + TagResolver.resolver("reason", Tag.inserting(reason)) + ); + LOGGER.error("Error loading player ({}) backup", player.getName(), throwable); + return; + } + if (number < 1 || number > backups.size()) { + player.sendMessage( + TranslatableCaption.of("backups.backup_impossible"), + TagResolver.resolver( + "plot", + Tag.inserting(TranslatableCaption + .of("generic.generic_invalid_choice") + .toComponent(player)) + ) ); - throwable.printStackTrace(); } else { - if (number < 1 || number > backups.size()) { + final com.plotsquared.core.backup.Backup backup = + backups.get(number - 1); + if (backup == null || backup.getFile() == null || !Files + .exists(backup.getFile())) { player.sendMessage( TranslatableCaption.of("backups.backup_impossible"), TagResolver.resolver( @@ -350,37 +378,23 @@ public final class Backup extends Command { ) ); } else { - final com.plotsquared.core.backup.Backup backup = - backups.get(number - 1); - if (backup == null || backup.getFile() == null || !Files - .exists(backup.getFile())) { - player.sendMessage( - TranslatableCaption.of("backups.backup_impossible"), - TagResolver.resolver( - "plot", - Tag.inserting(TranslatableCaption - .of("generic.generic_invalid_choice") - .toComponent(player)) - ) - ); - } else { - CmdConfirm.addPending(player, "/plot backup load " + number, - () -> backupProfile.restoreBackup(backup, player) - .whenComplete((n, error) -> { - if (error != null) { - player.sendMessage( - TranslatableCaption.of("backups.backup_load_failure"), - TagResolver.resolver( - "reason", - Tag.inserting(Component.text(error.getMessage())) - ) - ); - } else { - player.sendMessage(TranslatableCaption.of("backups.backup_load_success")); - } - }) - ); - } + CmdConfirm.addPending( + player, "/plot backup load " + number, + () -> backupProfile.restoreBackup(backup, player) + .whenComplete((n, error) -> { + if (error != null) { + player.sendMessage( + TranslatableCaption.of("backups.backup_load_failure"), + TagResolver.resolver( + "reason", + Tag.inserting(Component.text(error.getMessage())) + ) + ); + } else { + player.sendMessage(TranslatableCaption.of("backups.backup_load_success")); + } + }) + ); } } }); diff --git a/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java b/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java new file mode 100644 index 000000000..4e8a7be40 --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java @@ -0,0 +1,62 @@ +/* + * PlotSquared, a land and world management plugin for Minecraft. + * Copyright (C) IntellectualSites + * Copyright (C) IntellectualSites team and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.plotsquared.core.exception; + +import com.plotsquared.core.configuration.caption.Caption; +import com.plotsquared.core.configuration.caption.LocaleHolder; + +/** + * Internal use only. Used to allow adventure captions to be used in an exception + * + * @since TODO + */ +public final class PlotSquaredException extends RuntimeException { + + private final Caption caption; + + /** + * Create a new instance with the given caption + * + * @param caption caption + */ + public PlotSquaredException(Caption caption) { + this.caption = caption; + } + + /** + * Create a new instance with the given caption and cause + * + * @param caption caption + * @param cause cause + */ + public PlotSquaredException(Caption caption, Exception cause) { + super(cause); + this.caption = caption; + } + + @Override + public String getMessage() { + return caption.getComponent(LocaleHolder.console()); + } + + public Caption getCaption() { + return caption; + } + +} diff --git a/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java b/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java index 93e885608..ef3e8775c 100644 --- a/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java +++ b/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java @@ -135,6 +135,7 @@ public abstract class SchematicHandler { } final String filename; final String website; + final @Nullable UUID finalUuid = uuid; if (uuid == null) { uuid = UUID.randomUUID(); website = Settings.Web.URL + "upload.php?" + uuid; @@ -144,10 +145,11 @@ public abstract class SchematicHandler { filename = file + '.' + extension; } final URL url; + String uri = Settings.Web.URL + "?key=" + uuid + "&type=" + extension; try { - url = URI.create(Settings.Web.URL + "?key=" + uuid + "&type=" + extension).toURL(); + url = URI.create(uri).toURL(); } catch (MalformedURLException e) { - e.printStackTrace(); + LOGGER.error("Malformed URI `{}`", uri, e); whenDone.run(); return; } @@ -193,7 +195,7 @@ public abstract class SchematicHandler { } TaskManager.runTask(whenDone); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error while uploading schematic for UUID {}", finalUuid, e); TaskManager.runTask(whenDone); } }); @@ -388,8 +390,14 @@ public abstract class SchematicHandler { } queue.enqueue(); } catch (Exception e) { - e.printStackTrace(); TaskManager.runTask(whenDone); + LOGGER.error( + "Error pasting schematic to plot {};{} for player {}", + plot.getArea(), + plot.getId(), + actor == null ? "null" : actor.getName(), + e + ); } } @@ -456,7 +464,7 @@ public abstract class SchematicHandler { Clipboard clip = reader.read(); return new Schematic(clip); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error reading schematic from file {}", file.getAbsolutePath(), e); } } else { throw new UnsupportedFormatException("This schematic format is not recognised or supported."); @@ -470,7 +478,7 @@ public abstract class SchematicHandler { InputStream inputStream = Channels.newInputStream(readableByteChannel); return getSchematic(inputStream); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error reading schematic from {}", url, e); } return null; } @@ -486,7 +494,7 @@ public abstract class SchematicHandler { Clipboard clip = schematicReader.read(); return new Schematic(clip); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error reading schematic", e); } } return null; @@ -515,7 +523,7 @@ public abstract class SchematicHandler { } return schematics; } catch (JsonParseException | IOException e) { - e.printStackTrace(); + LOGGER.error("Error retrieving saves for UUID {}", uuid, e); } return null; } @@ -532,7 +540,7 @@ public abstract class SchematicHandler { try (NBTOutputStream nos = new NBTOutputStream(new GZIPOutputStream(output, true))) { nos.writeNamedTag("Schematic", tag); } catch (IOException e1) { - e1.printStackTrace(); + LOGGER.error("Error uploading schematic for UUID {}", uuid, e1); } } }, whenDone); @@ -556,9 +564,9 @@ public abstract class SchematicHandler { nbtStream.writeNamedTag("Schematic", tag); } } catch (FileNotFoundException e) { - e.printStackTrace(); + LOGGER.error("Error saving schematic at {}", path, e); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Error saving schematic at {}", path, e); return false; } return true; @@ -581,7 +589,7 @@ public abstract class SchematicHandler { schematic.put("BlockData", new ByteArrayTag(buffer.toByteArray())); schematic.put("BlockEntities", new ListTag(CompoundTag.class, tileEntities)); - if (biomeBuffer.size() == 0 || biomePalette.size() == 0) { + if (biomeBuffer.size() == 0 || biomePalette.isEmpty()) { return; } @@ -733,10 +741,7 @@ public abstract class SchematicHandler { } BaseBlock block = aabb.getWorld().getFullBlock(point); if (block.getNbtData() != null) { - Map values = new HashMap<>(); - for (Map.Entry entry : block.getNbtData().getValue().entrySet()) { - values.put(entry.getKey(), entry.getValue()); - } + Map values = new HashMap<>(block.getNbtData().getValue()); // Positions are kept in NBT, we don't want that. values.remove("x"); From 8c9957edeb3f3ff803e96b434b8a09678463f779 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 01:36:15 +0000 Subject: [PATCH 05/19] Update actions/setup-java action to v5 (#4750) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-pr.yml | 2 +- .github/workflows/build.yml | 2 +- .github/workflows/codeql.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 3e040e6d8..8d275132c 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -13,7 +13,7 @@ jobs: - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v4 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 21 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 37ec37b0a..ba3b82bad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ jobs: - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v4 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 21 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index ac5817523..8a932ed0d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -22,7 +22,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v5 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: 21 From fd8cf3c475d1c37d70d02871dc52555ac0b206ae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 01:36:33 +0000 Subject: [PATCH 06/19] Update dependency org.checkerframework:checker-qual to v3.50.0 (#4749) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6e083a7c7..a720710ac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ paper = "1.20.4-R0.1-SNAPSHOT" guice = "7.0.0" spotbugs = "4.9.4" -checkerqual = "3.49.5" +checkerqual = "3.50.0" gson = "2.10" guava = "31.1-jre" snakeyaml = "2.0" From f01c287f89413accfd50e859ea40b93732ed4826 Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Tue, 9 Sep 2025 21:55:30 +0200 Subject: [PATCH 07/19] Release 7.5.7 Signed-off-by: Alexander Brandes --- .../com/plotsquared/core/exception/PlotSquaredException.java | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java b/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java index 4e8a7be40..166a33703 100644 --- a/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java +++ b/Core/src/main/java/com/plotsquared/core/exception/PlotSquaredException.java @@ -24,7 +24,7 @@ import com.plotsquared.core.configuration.caption.LocaleHolder; /** * Internal use only. Used to allow adventure captions to be used in an exception * - * @since TODO + * @since 7.5.7 */ public final class PlotSquaredException extends RuntimeException { diff --git a/build.gradle.kts b/build.gradle.kts index ef652ad7d..ba065cfe7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { } group = "com.intellectualsites.plotsquared" -version = "7.5.7-SNAPSHOT" +version = "7.5.7" if (!File("$rootDir/.git").exists()) { logger.lifecycle(""" From 109e6059f87fb23378f3461670c1b526ce0f47a3 Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Tue, 9 Sep 2025 21:56:03 +0200 Subject: [PATCH 08/19] Back to snapshot for development Signed-off-by: Alexander Brandes --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ba065cfe7..910364652 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { } group = "com.intellectualsites.plotsquared" -version = "7.5.7" +version = "7.5.8-SNAPSHOT" if (!File("$rootDir/.git").exists()) { logger.lifecycle(""" From c2f83560424562673cc24cc57e82f7eb717a3cd8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:05:57 +0000 Subject: [PATCH 09/19] Update dependency org.checkerframework:checker-qual to v3.51.0 (#4755) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a720710ac..601c4b570 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ paper = "1.20.4-R0.1-SNAPSHOT" guice = "7.0.0" spotbugs = "4.9.4" -checkerqual = "3.50.0" +checkerqual = "3.51.0" gson = "2.10" guava = "31.1-jre" snakeyaml = "2.0" From b613318a29c40951822ad7031fbf928dc94864a4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:06:16 +0000 Subject: [PATCH 10/19] Update fawe to v2.13.2 (#4754) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 601c4b570..16e2fda88 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ log4j = "2.19.0" # Plugins worldedit = "7.2.20" -fawe = "2.13.1" +fawe = "2.13.2" placeholderapi = "2.11.6" luckperms = "5.5" essentialsx = "2.21.2" From 05af41f8323526932ba2c71a0badb1aae9252ff3 Mon Sep 17 00:00:00 2001 From: Pierre Maurice Schwang Date: Fri, 19 Sep 2025 08:55:39 +0200 Subject: [PATCH 11/19] fix: binary incompatibility on 1.21.1 (#4758) --- Bukkit/build.gradle.kts | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Bukkit/build.gradle.kts b/Bukkit/build.gradle.kts index 25ac3fb2d..2f0f9d20a 100644 --- a/Bukkit/build.gradle.kts +++ b/Bukkit/build.gradle.kts @@ -17,6 +17,19 @@ repositories { } } +// Make sure we control the exact version of paper being included, while dropping spigot + bukkit +configurations.all { + exclude("org.bukkit") + exclude("org.spigotmc") + + resolutionStrategy.eachDependency { + if (requested.group == "io.papermc.paper" && requested.name == "paper-api") { + useVersion(checkNotNull(libs.paper.orNull?.version)) + because("specific paper version is required to prevent binary incompatibilities on older versions") + } + } +} + dependencies { api(projects.plotsquaredCore) @@ -28,20 +41,13 @@ dependencies { implementation(libs.paperlib) // Plugins - compileOnly(libs.worldeditBukkit) { - exclude(group = "org.bukkit") - exclude(group = "org.spigotmc") - } + compileOnly(libs.worldeditBukkit) compileOnly(libs.faweBukkit) { isTransitive = false } testImplementation(libs.faweBukkit) { isTransitive = false } - compileOnly(libs.vault) { - exclude(group = "org.bukkit") - } + compileOnly(libs.vault) compileOnly(libs.placeholderapi) compileOnly(libs.luckperms) - compileOnly(libs.essentialsx) { - exclude(group = "org.spigotmc") - } + compileOnly(libs.essentialsx) compileOnly(libs.mvdwapi) { isTransitive = false } // Other libraries From 2e3832f1bd52e15c36c1c77a938acfb4f67e403b Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Fri, 19 Sep 2025 21:55:57 +0200 Subject: [PATCH 12/19] Release 7.5.8 Signed-off-by: Alexander Brandes --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 910364652..65c2656f7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { } group = "com.intellectualsites.plotsquared" -version = "7.5.8-SNAPSHOT" +version = "7.5.8" if (!File("$rootDir/.git").exists()) { logger.lifecycle(""" From 03aa1be5a3f893e5691b7a6ff081bb2feecbda74 Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Fri, 19 Sep 2025 21:56:38 +0200 Subject: [PATCH 13/19] Back to snapshot for development Signed-off-by: Alexander Brandes --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 65c2656f7..c8538b81c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { } group = "com.intellectualsites.plotsquared" -version = "7.5.8" +version = "7.5.9-SNAPSHOT" if (!File("$rootDir/.git").exists()) { logger.lifecycle(""" From 78d6ca1debf4bf00b97e34e511c15f9dbd6cc351 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 00:41:24 +0000 Subject: [PATCH 14/19] Update dependency com.github.spotbugs:spotbugs-annotations to v4.9.6 (#4759) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 16e2fda88..8b7ed8564 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ # Platform expectations paper = "1.20.4-R0.1-SNAPSHOT" guice = "7.0.0" -spotbugs = "4.9.4" +spotbugs = "4.9.6" checkerqual = "3.51.0" gson = "2.10" guava = "31.1-jre" From 439fb3a8eac137cb575181f16a7a38e2654de9cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:11:55 +0000 Subject: [PATCH 15/19] Update dependency xyz.jpenilla.run-paper to v3 (#4764) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8b7ed8564..109c42433 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ shadow = "8.3.9" grgit = "4.1.1" spotless = "7.2.1" publish = "0.34.0" -runPaper = "2.3.1" +runPaper = "3.0.0" [libraries] # Platform expectations From 59183c1412290c8ecd35d098e3c6accfa60cdb59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:13:36 +0000 Subject: [PATCH 16/19] Update dependency com.diffplug.spotless to v8 (#4763) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 109c42433..72f9526f4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ serverlib = "2.3.7" # Gradle plugins shadow = "8.3.9" grgit = "4.1.1" -spotless = "7.2.1" +spotless = "8.0.0" publish = "0.34.0" runPaper = "3.0.0" From c887cbe28c86492d51eddf6901059e6c37e8764c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:33:19 +0200 Subject: [PATCH 17/19] Update junit-framework monorepo (#4767) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c8538b81c..5ef437abd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,8 +67,8 @@ subprojects { dependencies { // Tests - testImplementation("org.junit.jupiter:junit-jupiter:5.13.4") - testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.13.4") + testImplementation("org.junit.jupiter:junit-jupiter:5.14.0") + testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.14.0") } plugins.withId("java") { From cfd840151526460c365689b979ba9064b337b23d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:34:23 +0000 Subject: [PATCH 18/19] Update dependency org.checkerframework:checker-qual to v3.51.1 (#4765) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 72f9526f4..d1699beb2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ paper = "1.20.4-R0.1-SNAPSHOT" guice = "7.0.0" spotbugs = "4.9.6" -checkerqual = "3.51.0" +checkerqual = "3.51.1" gson = "2.10" guava = "31.1-jre" snakeyaml = "2.0" From db188150d74763f3913e955d14c1aa38167a6b67 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:34:41 +0000 Subject: [PATCH 19/19] Update dependency xyz.jpenilla.run-paper to v3.0.1 (#4766) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d1699beb2..b8818366f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ shadow = "8.3.9" grgit = "4.1.1" spotless = "8.0.0" publish = "0.34.0" -runPaper = "3.0.0" +runPaper = "3.0.1" [libraries] # Platform expectations