Compare commits

...

14 Commits

Author SHA1 Message Date
1321a004a1 Release as java 21
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2024-12-30 21:30:03 +01:00
a836e8e763 Back to snapshot for development
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2024-12-30 21:07:08 +01:00
6930a9cecb Release 7.4.1
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2024-12-30 21:03:23 +01:00
effbacb823 Force-enable NETWORK side effect to ensure blocks are instantly visible (#4558) 2024-12-30 21:01:10 +01:00
47d1f1e0cb Update fawe to v2.12.3 (#4561)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-29 13:17:37 +00:00
6bedd9b25f Update adventure to v4.18.0 (#4559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-23 00:23:50 +00:00
960b7b2a8b Add option to prevent entities from being moved from plot (#4554) 2024-12-22 11:12:10 +01:00
198052b7a8 Update dependency gradle to v8.12 (#4555)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 20:51:53 +00:00
a5af3a9d16 Update junit5 monorepo (#4553)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 15:52:35 +00:00
bc4e2c51da fix: update to changes in 1.21 class paths (#4546) 2024-12-06 17:52:17 +01:00
c46b4ddeaa Add 1.21 music discs (Fixes #4551)
Signed-off-by: Alexander Brandes <mc.cache@web.de>
2024-12-06 17:51:31 +01:00
c8e7367987 Update dependency org.checkerframework:checker-qual to v3.48.3 (#4549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 20:52:26 +00:00
1a0450eefb Migrate renovate config (#4543)
Migrate config .github/renovate.json

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Pierre Maurice Schwang <mail@pschwang.eu>
2024-11-30 00:00:16 +01:00
0cb8075184 Update dependency com.fastasyncworldedit:FastAsyncWorldEdit-Core to v2.12.2 (#4547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 05:11:54 +00:00
14 changed files with 75 additions and 68 deletions

View File

@ -27,7 +27,7 @@ body:
description: Which server version are you using? If your server version is not listed, it is not supported. Update to a supported version first. description: Which server version are you using? If your server version is not listed, it is not supported. Update to a supported version first.
multiple: false multiple: false
options: options:
- '1.21.3' - '1.21.4'
- '1.21.1' - '1.21.1'
- '1.20.6' - '1.20.6'
- '1.20.4' - '1.20.4'

View File

@ -1,7 +1,7 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [ "extends": [
"config:base", "config:recommended",
":semanticCommitsDisabled" ":semanticCommitsDisabled"
], ],
"automerge": true, "automerge": true,

View File

@ -1171,7 +1171,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
@Override @Override
public @NonNull String serverNativePackage() { public @NonNull String serverNativePackage() {
final String name = Bukkit.getServer().getClass().getPackage().getName(); final String name = Bukkit.getServer().getClass().getPackage().getName();
return name.substring(name.lastIndexOf('.') + 1); String ver = name.substring(name.lastIndexOf('.') + 1);
// org.bukkit.craftbukkit is no longer suffixed by a version
return ver.equals("craftbukkit") ? "" : ver;
} }
@Override @Override

View File

@ -47,6 +47,7 @@ import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
import com.plotsquared.core.plot.flag.types.BooleanFlag; import com.plotsquared.core.plot.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.PlotFlagUtil; import com.plotsquared.core.util.PlotFlagUtil;
import io.papermc.paper.event.entity.EntityMoveEvent;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@ -58,6 +59,7 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime; import org.bukkit.entity.Slime;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -104,33 +106,7 @@ public class PaperListener implements Listener {
if (!Settings.Paper_Components.ENTITY_PATHING) { if (!Settings.Paper_Components.ENTITY_PATHING) {
return; return;
} }
Location toLoc = BukkitUtil.adapt(event.getLoc()); handleEntityMovement(event, event.getEntity().getLocation(), event.getLoc());
Location fromLoc = BukkitUtil.adapt(event.getEntity().getLocation());
PlotArea tarea = toLoc.getPlotArea();
if (tarea == null) {
return;
}
PlotArea farea = fromLoc.getPlotArea();
if (farea == null) {
return;
}
if (tarea != farea) {
event.setCancelled(true);
return;
}
Plot tplot = toLoc.getPlot();
Plot fplot = fromLoc.getPlot();
if (tplot == null ^ fplot == null) {
event.setCancelled(true);
return;
}
if (tplot == null || tplot.getId().hashCode() == fplot.getId().hashCode()) {
return;
}
if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) {
return;
}
event.setCancelled(true);
} }
@EventHandler @EventHandler
@ -145,8 +121,23 @@ public class PaperListener implements Listener {
return; return;
} }
Location toLoc = BukkitUtil.adapt(b.getLocation()); handleEntityMovement(event, event.getEntity().getLocation(), b.getLocation());
Location fromLoc = BukkitUtil.adapt(event.getEntity().getLocation()); }
@EventHandler
public void onEntityMove(EntityMoveEvent event) {
if (!Settings.Paper_Components.ENTITY_MOVEMENT) {
return;
}
if (!event.hasExplicitlyChangedBlock()) {
return;
}
handleEntityMovement(event, event.getFrom(), event.getTo());
}
private static void handleEntityMovement(Cancellable event, org.bukkit.Location from, org.bukkit.Location target) {
Location toLoc = BukkitUtil.adapt(target);
Location fromLoc = BukkitUtil.adapt(from);
PlotArea tarea = toLoc.getPlotArea(); PlotArea tarea = toLoc.getPlotArea();
if (tarea == null) { if (tarea == null) {
return; return;
@ -155,7 +146,6 @@ public class PaperListener implements Listener {
if (farea == null) { if (farea == null) {
return; return;
} }
if (tarea != farea) { if (tarea != farea) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -166,10 +156,10 @@ public class PaperListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (tplot == null || tplot.getId().hashCode() == fplot.getId().hashCode()) { if (tplot == null || tplot.getId().equals(fplot.getId())) {
return; return;
} }
if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) { if (fplot.isMerged() && fplot.getConnectedPlots().contains(tplot)) {
return; return;
} }
event.setCancelled(true); event.setCancelled(true);

View File

@ -49,9 +49,14 @@ public class SingleWorldListener implements Listener {
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod(); this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
} catch (NoSuchMethodException ignored) { } catch (NoSuchMethodException ignored) {
try { try {
ReflectionUtils.RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus"); String chunkStatus = PlotSquared.platform().serverVersion()[1] < 21
? "net.minecraft.world.level.chunk" + ".ChunkStatus"
: "net.minecraft.world.level.chunk.status.ChunkStatus";
ReflectionUtils.RefClass classChunkStatus = getRefClass(chunkStatus);
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null); this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null);
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass()).getRealMethod(); this.methodGetHandleChunk = classCraftChunk
.getMethod("getHandle", classChunkStatus.getRealClass())
.getRealMethod();
} catch (NoSuchMethodException ex) { } catch (NoSuchMethodException ex) {
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }

View File

@ -62,19 +62,28 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
private static final SideEffectSet EDGE_LIGHTING_SIDE_EFFECT_SET; private static final SideEffectSet EDGE_LIGHTING_SIDE_EFFECT_SET;
static { static {
NO_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with( NO_SIDE_EFFECT_SET = enableNetworkIfNeeded()
SideEffect.NEIGHBORS, .with(SideEffect.LIGHTING, SideEffect.State.OFF)
SideEffect.State.OFF .with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
); EDGE_SIDE_EFFECT_SET = NO_SIDE_EFFECT_SET
EDGE_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with( .with(SideEffect.UPDATE, SideEffect.State.ON)
SideEffect.NEIGHBORS, .with(SideEffect.NEIGHBORS, SideEffect.State.ON);
SideEffect.State.ON LIGHTING_SIDE_EFFECT_SET = NO_SIDE_EFFECT_SET
); .with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF); EDGE_LIGHTING_SIDE_EFFECT_SET = NO_SIDE_EFFECT_SET
EDGE_LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with( .with(SideEffect.UPDATE, SideEffect.State.ON)
SideEffect.NEIGHBORS, .with(SideEffect.NEIGHBORS, SideEffect.State.ON);
SideEffect.State.ON }
);
// make sure block changes are sent
private static SideEffectSet enableNetworkIfNeeded() {
SideEffect network;
try {
network = SideEffect.valueOf("NETWORK");
} catch (IllegalArgumentException ignored) {
return SideEffectSet.none();
}
return SideEffectSet.none().with(network, SideEffect.State.ON);
} }
private org.bukkit.World bukkitWorld; private org.bukkit.World bukkitWorld;

View File

@ -206,7 +206,8 @@ public class PlotSquared {
GlobalFlagContainer.setup(); GlobalFlagContainer.setup();
try { try {
new ReflectionUtils(this.platform.serverNativePackage()); String ver = this.platform.serverNativePackage();
new ReflectionUtils(ver.isEmpty() ? null : ver);
try { try {
URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation(); URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
this.jarFile = new File( this.jarFile = new File(
@ -214,7 +215,7 @@ public class PlotSquared {
logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file")) logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
.getPath()); .getPath());
} catch (URISyntaxException | SecurityException e) { } catch (URISyntaxException | SecurityException e) {
e.printStackTrace(); LOGGER.error(e);
this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar"); this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
if (!this.jarFile.exists()) { if (!this.jarFile.exists()) {
this.jarFile = new File( this.jarFile = new File(
@ -238,7 +239,7 @@ public class PlotSquared {
copyFile("skyblock.template", Settings.Paths.TEMPLATES); copyFile("skyblock.template", Settings.Paths.TEMPLATES);
showDebug(); showDebug();
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); LOGGER.error(e);
} }
} }

View File

@ -56,7 +56,8 @@ public class Music extends SubCommand {
.asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp", .asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp",
"music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal", "music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal",
"music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside", "music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside",
"music_disc_pigstep", "music_disc_5", "music_disc_relic" "music_disc_pigstep", "music_disc_5", "music_disc_relic", "music_disc_creator",
"music_disc_creator_music_box", "music_disc_precipice"
); );
private final InventoryUtil inventoryUtil; private final InventoryUtil inventoryUtil;

View File

@ -26,6 +26,7 @@ import org.apache.logging.log4j.Logger;
import java.io.File; import java.io.File;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@ -372,6 +373,7 @@ public class Config {
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE}) @Target({ElementType.FIELD, ElementType.TYPE})
@Documented
public @interface Comment { public @interface Comment {
String[] value(); String[] value();

View File

@ -651,6 +651,8 @@ public class Settings extends Config {
public static boolean PAPER_LISTENERS = true; public static boolean PAPER_LISTENERS = true;
@Comment("Prevent entities from leaving plots") @Comment("Prevent entities from leaving plots")
public static boolean ENTITY_PATHING = true; public static boolean ENTITY_PATHING = true;
@Comment("Prevent entities from leaving plots, even by pushing or pulling")
public static boolean ENTITY_MOVEMENT = false;
@Comment( @Comment(
"Cancel entity spawns when the chunk is loaded if the PlotArea's mob spawning is off") "Cancel entity spawns when the chunk is loaded if the PlotArea's mob spawning is off")
public static boolean CANCEL_CHUNK_SPAWN = true; public static boolean CANCEL_CHUNK_SPAWN = true;

View File

@ -22,7 +22,7 @@ plugins {
} }
group = "com.intellectualsites.plotsquared" group = "com.intellectualsites.plotsquared"
version = "7.4.1-SNAPSHOT" version = "7.4.2-SNAPSHOT"
if (!File("$rootDir/.git").exists()) { if (!File("$rootDir/.git").exists()) {
logger.lifecycle(""" logger.lifecycle("""
@ -79,8 +79,8 @@ subprojects {
dependencies { dependencies {
// Tests // Tests
testImplementation("org.junit.jupiter:junit-jupiter:5.11.3") testImplementation("org.junit.jupiter:junit-jupiter:5.11.4")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.11.3") testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.11.4")
} }
plugins.withId("java") { plugins.withId("java") {
@ -89,10 +89,6 @@ subprojects {
} }
} }
tasks.compileJava.configure {
options.release.set(17)
}
configurations.all { configurations.all {
attributes.attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 21) attributes.attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 21)
} }
@ -230,7 +226,7 @@ tasks.getByName<Jar>("jar") {
enabled = false enabled = false
} }
val supportedVersions = listOf("1.18.2", "1.19.4", "1.20.6", "1.21.1", "1.21.3") val supportedVersions = listOf("1.18.2", "1.19.4", "1.20.6", "1.21.1", "1.21.4")
tasks { tasks {
register("cacheLatestFaweArtifact") { register("cacheLatestFaweArtifact") {
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL() val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()

View File

@ -3,17 +3,17 @@
paper = "1.20.4-R0.1-SNAPSHOT" paper = "1.20.4-R0.1-SNAPSHOT"
guice = "7.0.0" guice = "7.0.0"
spotbugs = "4.8.6" spotbugs = "4.8.6"
checkerqual = "3.48.2" checkerqual = "3.48.3"
gson = "2.10" gson = "2.10"
guava = "31.1-jre" guava = "31.1-jre"
snakeyaml = "2.0" snakeyaml = "2.0"
adventure = "4.17.0" adventure = "4.18.0"
adventure-bukkit = "4.3.4" adventure-bukkit = "4.3.4"
log4j = "2.19.0" log4j = "2.19.0"
# Plugins # Plugins
worldedit = "7.2.20" worldedit = "7.2.20"
fawe = "2.12.1" fawe = "2.12.3"
placeholderapi = "2.11.6" placeholderapi = "2.11.6"
luckperms = "5.4" luckperms = "5.4"
essentialsx = "2.20.1" essentialsx = "2.20.1"

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

3
gradlew vendored
View File

@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum