diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 4e00f8f217..12e35e3ad7 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -17,11 +17,11 @@ jobs: with: distribution: temurin cache: gradle - java-version: 21 + java-version: 25 - name: Build on ${{ matrix.os }} run: ./gradlew build -s - name: Archive artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 if: ${{ matrix.os == 'ubuntu-latest' }} # only upload once, use linux builds with: name: FastAsyncWorldEdit-SNAPSHOT diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0011fdcade..06e0f87e38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: with: distribution: temurin cache: gradle - java-version: 21 + java-version: 25 - name: Build run: ./gradlew build - name: Determine release status @@ -67,7 +67,7 @@ jobs: target-branch: main target-directory: worldedit-bukkit - name: Archive Artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: FastAsyncWorldEdit-Bukkit-SNAPSHOT path: worldedit-bukkit/build/libs/FastAsyncWorldEdit-*.jar diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index e10ce431a3..b3e15fccb9 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -25,7 +25,7 @@ jobs: with: distribution: temurin cache: gradle - java-version: 21 + java-version: 25 - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: diff --git a/.github/workflows/upload-release-assets.yml b/.github/workflows/upload-release-assets.yml index e1d4f391ac..a510c5ae92 100644 --- a/.github/workflows/upload-release-assets.yml +++ b/.github/workflows/upload-release-assets.yml @@ -15,7 +15,7 @@ jobs: with: distribution: temurin cache: gradle - java-version: 21 + java-version: 25 - name: Clean Build run: ./gradlew clean build --no-daemon - name: Upload Release Assets diff --git a/build-logic/src/main/kotlin/buildlogic.common-java.gradle.kts b/build-logic/src/main/kotlin/buildlogic.common-java.gradle.kts index 1d92782248..cc46c1734a 100644 --- a/build-logic/src/main/kotlin/buildlogic.common-java.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.common-java.gradle.kts @@ -15,7 +15,7 @@ tasks val disabledLint = listOf( "processing", "path", "fallthrough", "serial", "overloads", "this-escape", ) - options.release.set(21) + sourceCompatibility = "21" options.compilerArgs.addAll(listOf("-Xlint:all") + disabledLint.map { "-Xlint:-$it" }) options.isDeprecation = true options.encoding = "UTF-8" diff --git a/build-logic/src/main/kotlin/buildlogic.common.gradle.kts b/build-logic/src/main/kotlin/buildlogic.common.gradle.kts index 227ec60d08..c47abfe3f1 100644 --- a/build-logic/src/main/kotlin/buildlogic.common.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.common.gradle.kts @@ -13,7 +13,7 @@ configurations.all { plugins.withId("java") { the().toolchain { - languageVersion.set(JavaLanguageVersion.of(21)) + languageVersion.set(JavaLanguageVersion.of(25)) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8bf868d176..0094b39a51 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ towny = "0.102.0.7" plotsquared = "7.5.11" # Third party -bstats = "3.1.0" +bstats = "3.2.1" sparsebitset = "1.3" parallelgzip = "1.0.5" adventure = "4.26.1" @@ -39,6 +39,7 @@ vault = "1.7.1" serverlib = "2.3.7" linbus = "0.2.0" autoService = "1.1.1" +guice = "7.0.0" ## Internal text-adapter = "3.0.6" @@ -46,14 +47,14 @@ text = "3.0.4" piston = "0.5.11" # Tests -mockito = "5.21.0" +mockito = "5.22.0" junit = "6.0.3" # Gradle plugins pluginyml = "0.6.0" mod-publish-plugin = "1.1.0" grgit = "5.3.3" -shadow = "9.3.1" +shadow = "9.3.2" paperweight = "2.0.0-SNAPSHOT" codecov = "0.2.0" @@ -125,6 +126,8 @@ linBus-stream = { group = "org.enginehub.lin-bus", name = "lin-bus-stream" } linBus-tree = { group = "org.enginehub.lin-bus", name = "lin-bus-tree" } linBus-format-snbt = { group = "org.enginehub.lin-bus.format", name = "lin-bus-format-snbt" } +guice = { group = "com.google.inject", name = "guice", version.ref = "guice" } + # Internal ## Text kyoriText-adapter-bukkit = { group = "net.kyori", name = "text-adapter-bukkit", version.ref = "text-adapter" } diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index b22c6f15b4..c169b8905b 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -130,6 +130,7 @@ dependencies { compileOnly(libs.towny) { isTransitive = false } compileOnly(libs.plotsquared.bukkit) { isTransitive = false } compileOnly(libs.plotsquared.core) { isTransitive = false } + compileOnly(libs.guice) // Third party implementation(libs.serverlib) diff --git a/worldedit-bukkit/src/main/resources/defaults/worldedit-config.yml b/worldedit-bukkit/src/main/resources/defaults/worldedit-config.yml index b74eaa0919..f3736fdb45 100644 --- a/worldedit-bukkit/src/main/resources/defaults/worldedit-config.yml +++ b/worldedit-bukkit/src/main/resources/defaults/worldedit-config.yml @@ -24,6 +24,11 @@ limits: max-polygonal-points: default: -1 maximum: 20 + max-polyhedron-points: + default: -1 + maximum: 20 + vertical-height: + default: 256 # radius, superpickaxe, brush radius are ignored, use FAWE config limits max-radius: -1 max-super-pickaxe-size: 5 @@ -84,6 +89,7 @@ history: calculation: timeout: 100 + max-timeout: 300 debugging: trace-unflushed-sessions: false diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/change/ChangePopulator.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/change/ChangePopulator.java index 84424d9488..a75d0e6e21 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/change/ChangePopulator.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/change/ChangePopulator.java @@ -14,7 +14,6 @@ public interface ChangePopulator { static ChangePopulator empty() { class Empty implements ChangePopulator { - private static final Empty EMPTY = new Empty(); @Override public @NotNull C create() { @@ -36,7 +35,7 @@ public boolean accepts(final Change change) { return false; } } - return Empty.EMPTY; + return new Empty(); } @SuppressWarnings("unchecked") diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/internal/simd/SimdSupport.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/internal/simd/SimdSupport.java index 8adca710a2..ba12f47e9e 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/internal/simd/SimdSupport.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/internal/simd/SimdSupport.java @@ -24,6 +24,7 @@ public class SimdSupport { private static final Logger LOGGER = LogManagerCompat.getLogger(); private static final boolean VECTOR_API_PRESENT; + private static final boolean JAVA_25_OR_NEWER = Runtime.version().feature() >= 25; static { boolean vectorApiPresent = false; @@ -36,7 +37,7 @@ public class SimdSupport { if (!VECTOR_API_PRESENT && Settings.settings().EXPERIMENTAL.USE_VECTOR_API) { LOGGER.warn(""" FAWE use-vector-api is enabled but --add-modules=jdk.incubator.vector is not set. - Vector instructions will not be used. + Vector instructions will not be used.\ """); } else if (VECTOR_API_PRESENT && !Settings.settings().EXPERIMENTAL.USE_VECTOR_API) { LOGGER.warn(""" @@ -44,11 +45,17 @@ public class SimdSupport { FAWE can use vector instructions, but it is disabled in the config. Enable use-vector-api to benefit from vector instructions with FAWE.\ """); + } else if (VECTOR_API_PRESENT && !JAVA_25_OR_NEWER) { + LOGGER.warn(""" + The server is running with the --add-modules=jdk.incubator.vector option. + However, Java 25+ is required due to compatibility problems. + Update to Java 25 to make use of this feature.\ + """); } } public static boolean useVectorApi() { - return VECTOR_API_PRESENT && Settings.settings().EXPERIMENTAL.USE_VECTOR_API; + return VECTOR_API_PRESENT && JAVA_25_OR_NEWER && Settings.settings().EXPERIMENTAL.USE_VECTOR_API; } public static @Nullable VectorizedMask vectorizedTargetMask(Mask mask) { @@ -72,7 +79,7 @@ public static boolean useVectorApi() { private static VectorizedMask vectorizedTargetMaskNonAir() { // everything > VOID_AIR is not air - return (set, get, species) -> get.get(species).compare(VectorOperators.UNSIGNED_GT, BlockTypesCache.ReservedIDs.VOID_AIR); + return (set, get, species) -> get.get(species).compare(VectorOperators.UGT, BlockTypesCache.ReservedIDs.VOID_AIR); } private static VectorizedMask vectorizedTargetMask(char ordinal) {