Compare commits

..

1 Commits

Author SHA1 Message Date
renovate[bot]
46d669dc19 Update Gradle to v9 2025-10-06 03:14:33 +00:00
14 changed files with 107 additions and 146 deletions

View File

@@ -11,7 +11,7 @@ jobs:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Validate Gradle Wrapper - name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v5 uses: gradle/actions/wrapper-validation@v4
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v5 uses: actions/setup-java@v5
with: with:

View File

@@ -11,7 +11,7 @@ jobs:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Validate Gradle Wrapper - name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v5 uses: gradle/actions/wrapper-validation@v4
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v5 uses: actions/setup-java@v5
with: with:

View File

@@ -27,10 +27,10 @@ jobs:
distribution: temurin distribution: temurin
java-version: 21 java-version: 21
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v4 uses: github/codeql-action/init@v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v4 uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4 uses: github/codeql-action/analyze@v3

View File

@@ -160,7 +160,7 @@ public class EntityEventListener implements Listener {
return; return;
} }
} }
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SILVERFISH_BLOCK", "ENDER_PEARL", case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL",
"TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN", "NETHER_PORTAL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN", "NETHER_PORTAL",
"FROZEN", "SPELL", "DEFAULT" -> { "FROZEN", "SPELL", "DEFAULT" -> {
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {

View File

@@ -202,7 +202,7 @@ public class PaperListener implements Listener {
return; return;
} }
} }
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SILVERFISH_BLOCK", "ENDER_PEARL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> { case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> {
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);

View File

@@ -90,7 +90,7 @@ public class DebugRoadRegen extends SubCommand {
} }
public boolean regenPlot(PlotPlayer<?> player) { public boolean regenPlot(PlotPlayer<?> player) {
PlotArea area = player.getContextualPlotArea(); PlotArea area = player.getCurrentPlot().getArea();
if (area == null) { if (area == null) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
return false; return false;
@@ -145,10 +145,9 @@ public class DebugRoadRegen extends SubCommand {
return false; return false;
} }
PlotArea area = player.getContextualPlotArea(); PlotArea area = player.getCurrentPlot().getArea();
if (area == null) { if (area == null) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
return false;
} }
Plot plot = player.getCurrentPlot(); Plot plot = player.getCurrentPlot();
PlotManager manager = area.getPlotManager(); PlotManager manager = area.getPlotManager();

View File

@@ -150,8 +150,8 @@ public class ListCmd extends SubCommand {
page = 0; page = 0;
} }
PlotArea area = player.getContextualPlotArea(); String world = player.getCurrentPlot().getWorldName();
String world = area != null ? area.getWorldName() : ""; PlotArea area = player.getCurrentPlot().getArea();
String arg = args[0].toLowerCase(); String arg = args[0].toLowerCase();
final boolean[] sort = new boolean[]{true}; final boolean[] sort = new boolean[]{true};

View File

@@ -68,6 +68,11 @@ public class Load extends SubCommand {
@Override @Override
public boolean onCommand(final PlotPlayer<?> player, final String[] args) { public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
final String world = player.getCurrentPlot().getWorldName();
if (!this.plotAreaManager.hasPlotArea(world)) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
return false;
}
final Plot plot = player.getCurrentPlot(); final Plot plot = player.getCurrentPlot();
if (plot == null) { if (plot == null) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));

View File

@@ -78,7 +78,7 @@ public class Set extends SubCommand {
@Override @Override
public boolean set(PlotPlayer<?> player, final Plot plot, String value) { public boolean set(PlotPlayer<?> player, final Plot plot, String value) {
final PlotArea plotArea = player.getContextualPlotArea(); final PlotArea plotArea = player.getCurrentPlot().getArea();
if (plotArea == null) { if (plotArea == null) {
return false; return false;
} }

View File

@@ -290,7 +290,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
* *
* @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea} * @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea}
*/ */
public @Nullable Plot getCurrentPlot() { @Nullable
public Plot getCurrentPlot() {
try (final MetaDataAccess<Plot> lastPlotAccess = try (final MetaDataAccess<Plot> lastPlotAccess =
this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
if (lastPlotAccess.get().orElse(null) == null && !Settings.Enabled_Components.EVENTS) { if (lastPlotAccess.get().orElse(null) == null && !Settings.Enabled_Components.EVENTS) {
@@ -319,7 +320,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
*/ */
public int getPlotCount() { public int getPlotCount() {
if (!Settings.Limit.GLOBAL) { if (!Settings.Limit.GLOBAL) {
return getPlotCount(getContextualWorldName()); return getPlotCount(getCurrentPlot().getWorldName());
} }
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
final UUID uuid = getUUID(); final UUID uuid = getUUID();
@@ -339,7 +340,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
public int getClusterCount() { public int getClusterCount() {
if (!Settings.Limit.GLOBAL) { if (!Settings.Limit.GLOBAL) {
return getClusterCount(getContextualWorldName()); return getClusterCount(getCurrentPlot().getWorldName());
} }
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
this.plotAreaManager.forEachPlotArea(value -> { this.plotAreaManager.forEachPlotArea(value -> {
@@ -352,34 +353,6 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
return count.get(); return count.get();
} }
/**
* {@return the world name at the player's contextual position}
* The contextual position can be affected when using a command with
* an explicit plot override, e.g., `/plot &ltid&gt info`.
*/
private @NonNull String getContextualWorldName() {
Plot current = getCurrentPlot();
if (current != null) {
return current.getWorldName();
}
return getLocation().getWorldName();
}
/**
* {@return the plot area at the player's contextual position}
* The contextual position can be affected when using a command with
* an explicit plot override, e.g., `/plot &ltid&gt info`.
*
* @since TODO
*/
public @Nullable PlotArea getContextualPlotArea() {
Plot current = getCurrentPlot();
if (current != null) {
return current.getArea();
}
return getLocation().getPlotArea();
}
/** /**
* Get the number of plots this player owns in the world. * Get the number of plots this player owns in the world.
* *
@@ -710,87 +683,86 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
public void populatePersistentMetaMap() { public void populatePersistentMetaMap() {
if (Settings.Enabled_Components.PERSISTENT_META) { if (Settings.Enabled_Components.PERSISTENT_META) {
DBFunc.getPersistentMeta( DBFunc.getPersistentMeta(getUUID(), new RunnableVal<>() {
getUUID(), new RunnableVal<>() { @Override
@Override public void run(Map<String, byte[]> value) {
public void run(Map<String, byte[]> value) { try {
try { PlotPlayer.this.metaMap = value;
PlotPlayer.this.metaMap = value; if (value.isEmpty()) {
if (value.isEmpty()) { return;
return; }
}
if (PlotPlayer.this.getAttribute("debug")) { if (PlotPlayer.this.getAttribute("debug")) {
debugModeEnabled.add(PlotPlayer.this); debugModeEnabled.add(PlotPlayer.this);
} }
if (!Settings.Teleport.ON_LOGIN) { if (!Settings.Teleport.ON_LOGIN) {
return; return;
} }
PlotAreaManager manager = PlotPlayer.this.plotAreaManager; PlotAreaManager manager = PlotPlayer.this.plotAreaManager;
if (!(manager instanceof SinglePlotAreaManager)) { if (!(manager instanceof SinglePlotAreaManager)) {
return; return;
} }
PlotArea area = ((SinglePlotAreaManager) manager).getArea(); PlotArea area = ((SinglePlotAreaManager) manager).getArea();
boolean V2 = false; boolean V2 = false;
byte[] arr = PlotPlayer.this.getPersistentMeta("quitLoc"); byte[] arr = PlotPlayer.this.getPersistentMeta("quitLoc");
if (arr == null) { if (arr == null) {
arr = PlotPlayer.this.getPersistentMeta("quitLocV2"); arr = PlotPlayer.this.getPersistentMeta("quitLocV2");
if (arr == null) { if (arr == null) {
return; return;
} }
V2 = true; V2 = true;
removePersistentMeta("quitLocV2"); removePersistentMeta("quitLocV2");
} else { } else {
removePersistentMeta("quitLoc"); removePersistentMeta("quitLoc");
} }
if (!getMeta("teleportOnLogin", true)) { if (!getMeta("teleportOnLogin", true)) {
return; return;
} }
ByteBuffer quitWorld = ByteBuffer.wrap(arr); ByteBuffer quitWorld = ByteBuffer.wrap(arr);
final int plotX = quitWorld.getShort(); final int plotX = quitWorld.getShort();
final int plotZ = quitWorld.getShort(); final int plotZ = quitWorld.getShort();
PlotId id = PlotId.of(plotX, plotZ); PlotId id = PlotId.of(plotX, plotZ);
int x = quitWorld.getInt(); int x = quitWorld.getInt();
int y = V2 ? quitWorld.getShort() : (quitWorld.get() & 0xFF); int y = V2 ? quitWorld.getShort() : (quitWorld.get() & 0xFF);
int z = quitWorld.getInt(); int z = quitWorld.getInt();
Plot plot = area.getOwnedPlot(id); Plot plot = area.getOwnedPlot(id);
if (plot == null) { if (plot == null) {
return; return;
} }
final Location location = Location.at(plot.getWorldName(), x, y, z); final Location location = Location.at(plot.getWorldName(), x, y, z);
if (plot.isLoaded()) { if (plot.isLoaded()) {
TaskManager.runTask(() -> { TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) { if (getMeta("teleportOnLogin", true)) {
teleport(location, TeleportCause.LOGIN); teleport(location, TeleportCause.LOGIN);
sendMessage( sendMessage(
TranslatableCaption.of("teleport.teleported_to_plot")); TranslatableCaption.of("teleport.teleported_to_plot"));
}
});
} else if (!PlotSquared.get().isMainThread(Thread.currentThread())) {
if (getMeta("teleportOnLogin", true)) {
plot.teleportPlayer(
PlotPlayer.this,
result -> TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) {
if (plot.isLoaded()) {
teleport(location, TeleportCause.LOGIN);
sendMessage(TranslatableCaption
.of("teleport.teleported_to_plot"));
}
}
})
);
}
} }
} catch (Throwable e) { });
LOGGER.error("Error populating persistent meta for player {}", PlotPlayer.this.getName(), e); } else if (!PlotSquared.get().isMainThread(Thread.currentThread())) {
if (getMeta("teleportOnLogin", true)) {
plot.teleportPlayer(
PlotPlayer.this,
result -> TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) {
if (plot.isLoaded()) {
teleport(location, TeleportCause.LOGIN);
sendMessage(TranslatableCaption
.of("teleport.teleported_to_plot"));
}
}
})
);
} }
} }
} catch (Throwable e) {
LOGGER.error("Error populating persistent meta for player {}", PlotPlayer.this.getName(), e);
}
}
} }
); );
} }
@@ -860,8 +832,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Nullable @Nullable <T> T getPersistentMeta(final @NonNull MetaDataKey<T> key) {
<T> T getPersistentMeta(final @NonNull MetaDataKey<T> key) {
final byte[] value = this.getPersistentMeta(key.toString()); final byte[] value = this.getPersistentMeta(key.toString());
if (value == null) { if (value == null) {
return null; return null;
@@ -1031,11 +1002,9 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
if (throwable != null) { if (throwable != null) {
sendMessage( sendMessage(
TranslatableCaption.of("errors.error"), TranslatableCaption.of("errors.error"),
TagResolver.resolver( TagResolver.resolver("value", Tag.inserting(
"value", Tag.inserting( Component.text("Failed to resolve asynchronous caption replacements")
Component.text("Failed to resolve asynchronous caption replacements") ))
)
)
); );
LOGGER.error("Failed to resolve asynchronous tagresolver(s) for " + caption, throwable); LOGGER.error("Failed to resolve asynchronous tagresolver(s) for " + caption, throwable);
} else { } else {

View File

@@ -541,7 +541,7 @@ public class Plot {
* *
* @return World name * @return World name
*/ */
public @NonNull String getWorldName() { public @Nullable String getWorldName() {
return area.getWorldName(); return area.getWorldName();
} }

View File

@@ -58,7 +58,7 @@ public class SinglePlot extends Plot {
} }
@Override @Override
public @NonNull String getWorldName() { public String getWorldName() {
return getId().toUnderscoreSeparatedString(); return getId().toUnderscoreSeparatedString();
} }

View File

@@ -65,16 +65,10 @@ subprojects {
plugin<IdeaPlugin>() plugin<IdeaPlugin>()
} }
configurations.matching { it.name == "signatures" }.configureEach {
attributes {
attribute(Attribute.of("signatures-unique", String::class.java), "true")
}
}
dependencies { dependencies {
// Tests // Tests
testImplementation("org.junit.jupiter:junit-jupiter:6.0.0") testImplementation("org.junit.jupiter:junit-jupiter:5.13.4")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:6.0.0") testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.13.4")
} }
plugins.withId("java") { plugins.withId("java") {
@@ -101,15 +95,9 @@ subprojects {
} }
} }
afterEvaluate { val javaComponent = components["java"] as AdhocComponentWithVariants
val javaComponent = components["java"] as AdhocComponentWithVariants javaComponent.withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) {
configurations.findByName("shadowRuntimeElements")?.let { shadowRuntimeElements -> skip()
javaComponent.withVariantsFromConfiguration(shadowRuntimeElements) {
skip()
}
} ?: run {
logger.warn("Configuration 'shadowRuntimeElements' does not exist.")
}
} }
signing { signing {

View File

@@ -3,11 +3,11 @@
paper = "1.20.4-R0.1-SNAPSHOT" paper = "1.20.4-R0.1-SNAPSHOT"
guice = "7.0.0" guice = "7.0.0"
spotbugs = "4.9.6" spotbugs = "4.9.6"
checkerqual = "3.51.1" checkerqual = "3.51.0"
gson = "2.10" gson = "2.10"
guava = "31.1-jre" guava = "31.1-jre"
snakeyaml = "2.0" snakeyaml = "2.0"
adventure = "4.25.0" adventure = "4.24.0"
adventure-bukkit = "4.4.1" adventure-bukkit = "4.4.1"
log4j = "2.19.0" log4j = "2.19.0"
@@ -33,11 +33,11 @@ vault = "1.7.1"
serverlib = "2.3.7" serverlib = "2.3.7"
# Gradle plugins # Gradle plugins
shadow = "9.2.2" shadow = "8.3.9"
grgit = "4.1.1" grgit = "4.1.1"
spotless = "8.0.0" spotless = "8.0.0"
publish = "0.34.0" publish = "0.34.0"
runPaper = "3.0.2" runPaper = "3.0.0"
[libraries] [libraries]
# Platform expectations # Platform expectations