From 2ce493ae687f8afed6af103b1428e36ef8d2cd8f Mon Sep 17 00:00:00 2001 From: MattBDev <4009945+MattBDev@users.noreply.github.com> Date: Mon, 18 Jan 2021 15:58:50 -0500 Subject: [PATCH 01/16] Miscellaneous improvements to build scripts. --- buildSrc/src/main/kotlin/CommonConfig.kt | 4 +- buildSrc/src/main/kotlin/LibsConfig.kt | 2 +- buildSrc/src/main/kotlin/PlatformConfig.kt | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 13 +++++ worldedit-bukkit/build.gradle.kts | 58 +++++++++++----------- worldedit-core/build.gradle.kts | 54 ++++++++++---------- 7 files changed, 73 insertions(+), 62 deletions(-) diff --git a/buildSrc/src/main/kotlin/CommonConfig.kt b/buildSrc/src/main/kotlin/CommonConfig.kt index ca995e5e7..bec46c4cc 100644 --- a/buildSrc/src/main/kotlin/CommonConfig.kt +++ b/buildSrc/src/main/kotlin/CommonConfig.kt @@ -6,11 +6,11 @@ fun Project.applyCommonConfiguration() { version = rootProject.version repositories { - mavenCentral() mavenLocal() maven { url = uri("https://mvn.intellectualsites.com/content/groups/public/") } maven { url = uri("https://plotsquared.com/mvn/") } - maven { url = uri("https://maven.enginehub.org/repo/") + maven { + url = uri("https://maven.enginehub.org/repo/") content { excludeGroup("net.milkbowl.vault") } diff --git a/buildSrc/src/main/kotlin/LibsConfig.kt b/buildSrc/src/main/kotlin/LibsConfig.kt index a84f4f5d9..6ab5396d8 100644 --- a/buildSrc/src/main/kotlin/LibsConfig.kt +++ b/buildSrc/src/main/kotlin/LibsConfig.kt @@ -15,7 +15,7 @@ import org.gradle.kotlin.dsl.register fun Project.applyLibrariesConfiguration() { applyCommonConfiguration() apply(plugin = "java-base") - apply(plugin = "maven") + apply(plugin = "maven-publish") apply(plugin = "com.github.johnrengelman.shadow") configurations { diff --git a/buildSrc/src/main/kotlin/PlatformConfig.kt b/buildSrc/src/main/kotlin/PlatformConfig.kt index 662e1c150..a1ac6de77 100644 --- a/buildSrc/src/main/kotlin/PlatformConfig.kt +++ b/buildSrc/src/main/kotlin/PlatformConfig.kt @@ -21,7 +21,7 @@ fun Project.applyPlatformAndCoreConfiguration() { apply(plugin = "java") apply(plugin = "eclipse") apply(plugin = "idea") - apply(plugin = "maven") + apply(plugin = "maven-publish") // apply(plugin = "checkstyle") apply(plugin = "com.github.johnrengelman.shadow") diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index da9702f9e..80cf08e74 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index 56f98fe6a..c3d7f43ec 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,3 +7,16 @@ listOf("bukkit", "core").forEach { include("worldedit-$it") } include("worldedit-libs:core:ap") + +dependencyResolutionManagement { + repositories { + mavenCentral() + maven { + name = "EngineHub Repository" + url = uri("https://maven.enginehub.org/repo/") + content { + excludeGroup("net.milkbowl.vault") + } + } + } +} diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 9ff5705fe..6f842d105 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -44,48 +44,48 @@ dependencies { compileOnly("com.github.MilkBowl:VaultAPI:1.7") { isTransitive = false } - "api"(project(":worldedit-core")) - "api"(project(":worldedit-libs:bukkit")) - "compile"(":worldedit-adapters:") + api(project(":worldedit-core")) + api(project(":worldedit-libs:bukkit")) + compile(":worldedit-adapters:") // Paper-patched NMS jars - "compile"("com.destroystokyo.paperv1_15_r1:paperv1_15_r1:1_15_r1") - "compile"("com.destroystokyo.paperv1_16_r1:paperv1_16_r1:1_16_r1") - "compile"("com.destroystokyo.paperv1_16_r2:paperv1_16_r2:1_16_r2") - "compile"("com.destroystokyo.paperv1_16_r3:paperv1_16_r3:1_16_r3") - "compile"("org.spigotmcv1_15_r1:spigotmcv1_15_r1:1_15_r1") - "compile"("org.spigotmcv1_16_r1:spigotmcv1_16_r1:1_16_r1") - "compile"("org.spigotmcv1_16_r2:spigotmcv1_16_r2:1_16_r2") - "compile"("org.spigotmcv1_16_r3:spigotmcv1_16_r3:1_16_r3") - "implementation"("it.unimi.dsi:fastutil:${Versions.FAST_UTIL}") - "api"("com.destroystokyo.paper:paper-api:1.16.4-R0.1-SNAPSHOT") { + compile("com.destroystokyo.paperv1_15_r1:paperv1_15_r1:1_15_r1") + compile("com.destroystokyo.paperv1_16_r1:paperv1_16_r1:1_16_r1") + compile("com.destroystokyo.paperv1_16_r2:paperv1_16_r2:1_16_r2") + compile("com.destroystokyo.paperv1_16_r3:paperv1_16_r3:1_16_r3") + compile("org.spigotmcv1_15_r1:spigotmcv1_15_r1:1_15_r1") + compile("org.spigotmcv1_16_r1:spigotmcv1_16_r1:1_16_r1") + compile("org.spigotmcv1_16_r2:spigotmcv1_16_r2:1_16_r2") + compile("org.spigotmcv1_16_r3:spigotmcv1_16_r3:1_16_r3") + implementation("it.unimi.dsi:fastutil:${Versions.FAST_UTIL}") + api("com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT") { exclude("junit", "junit") isTransitive = false } - "compileOnly"("org.jetbrains:annotations:20.1.0") - "testCompileOnly"("org.jetbrains:annotations:20.1.0") - "compileOnly"("org.spigotmc:spigot:1.16.4-R0.1-SNAPSHOT") - "implementation"("io.papermc:paperlib:1.0.6") - "compileOnly"("com.sk89q:dummypermscompat:1.10") { + compileOnly("org.jetbrains:annotations:20.1.0") + testCompileOnly("org.jetbrains:annotations:20.1.0") + compileOnly("org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT") + implementation("io.papermc:paperlib:1.0.6") + compileOnly("com.sk89q:dummypermscompat:1.10") { exclude("com.github.MilkBowl", "VaultAPI") } - "implementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") - "testImplementation"("org.mockito:mockito-core:1.9.0-rc1") - "compileOnly"("com.sk89q.worldguard:worldguard-bukkit:7.+") { + implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") + testImplementation("org.mockito:mockito-core:1.9.0-rc1") + compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.+") { exclude("com.sk89q.worldedit", "worldedit-bukkit") exclude("com.sk89q.worldedit", "worldedit-core") exclude("com.sk89q.worldedit.worldedit-libs", "bukkit") exclude("com.sk89q.worldedit.worldedit-libs", "core") } - "compile"("org.bstats:bstats-bukkit:1.8") - "compile"("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") + implementation("org.bstats:bstats-bukkit:1.8") + api("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") // Third party compileOnlyApi("org.inventivetalent:mapmanager:1.7.+") { isTransitive = false } - "implementation"("com.github.TechFortress:GriefPrevention:16.+") { isTransitive = false } - "implementation"("com.massivecraft:mcore:7.0.1") { isTransitive = false } - "implementation"("com.bekvon.bukkit.residence:Residence:4.5._13.1") { isTransitive = false } - "implementation"("com.palmergames.bukkit:towny:0.84.0.9") { isTransitive = false } - "implementation"("com.thevoxelbox.voxelsniper:voxelsniper:5.171.0") { isTransitive = false } - "implementation"("com.comphenix.protocol:ProtocolLib:4.5.1") { isTransitive = false } + implementation("com.github.TechFortress:GriefPrevention:16.+") { isTransitive = false } + implementation("com.massivecraft:mcore:7.0.1") { isTransitive = false } + implementation("com.bekvon.bukkit.residence:Residence:4.5._13.1") { isTransitive = false } + implementation("com.palmergames.bukkit:towny:0.84.0.9") { isTransitive = false } + implementation("com.thevoxelbox.voxelsniper:voxelsniper:5.171.0") { isTransitive = false } + implementation("com.comphenix.protocol:ProtocolLib:4.5.1") { isTransitive = false } } tasks.named("processResources") { diff --git a/worldedit-core/build.gradle.kts b/worldedit-core/build.gradle.kts index 8dd88b06e..a078c2f3d 100644 --- a/worldedit-core/build.gradle.kts +++ b/worldedit-core/build.gradle.kts @@ -12,10 +12,8 @@ plugins { } repositories { - maven { url = uri("https://plotsquared.com/mvn") } + maven { url = uri("https://plotsquared.com/mvn/") } maven { url = uri("https://mvn.intellectualsites.com/content/groups/public/") } - mavenCentral() - } applyPlatformAndCoreConfiguration() @@ -27,39 +25,39 @@ configurations.all { } dependencies { - "api"(project(":worldedit-libs:core")) - "implementation"("de.schlichtherle:truezip:6.8.4") - "implementation"("net.java.truevfs:truevfs-profile-default_2.13:0.12.2") - "implementation"("org.mozilla:rhino-runtime:1.7.12") - "implementation"("org.yaml:snakeyaml:1.27") - "implementation"("com.google.guava:guava:${Versions.GUAVA}") - "implementation"("com.google.code.findbugs:jsr305:3.0.2") - "implementation"("com.google.code.gson:gson:${Versions.GSON}") - "implementation"("org.slf4j:slf4j-api:1.7.26") - "implementation"("it.unimi.dsi:fastutil:${Versions.FAST_UTIL}") + api(project(":worldedit-libs:core")) + implementation("de.schlichtherle:truezip:6.8.4") + implementation("net.java.truevfs:truevfs-profile-default_2.13:0.12.2") + implementation("org.mozilla:rhino-runtime:1.7.12") + implementation("org.yaml:snakeyaml:1.27") + implementation("com.google.guava:guava:${Versions.GUAVA}") + implementation("com.google.code.findbugs:jsr305:3.0.2") + implementation("com.google.code.gson:gson:${Versions.GSON}") + implementation("org.slf4j:slf4j-api:1.7.26") + implementation("it.unimi.dsi:fastutil:${Versions.FAST_UTIL}") val antlrVersion = "4.7.2" - "antlr"("org.antlr:antlr4:$antlrVersion") - "implementation"("org.antlr:antlr4-runtime:$antlrVersion") + antlr("org.antlr:antlr4:$antlrVersion") + implementation("org.antlr:antlr4-runtime:$antlrVersion") - "implementation"("com.googlecode.json-simple:json-simple:1.1.1") { isTransitive = false } - "compileOnly"(project(":worldedit-libs:core:ap")) - "annotationProcessor"(project(":worldedit-libs:core:ap")) + implementation("com.googlecode.json-simple:json-simple:1.1.1") { isTransitive = false } + compileOnly(project(":worldedit-libs:core:ap")) + annotationProcessor(project(":worldedit-libs:core:ap")) // ensure this is on the classpath for the AP - "annotationProcessor"("com.google.guava:guava:21.0") - "compileOnly"("com.google.auto.value:auto-value-annotations:${Versions.AUTO_VALUE}") - "annotationProcessor"("com.google.auto.value:auto-value:${Versions.AUTO_VALUE}") - "testImplementation"("ch.qos.logback:logback-core:${Versions.LOGBACK}") - "testImplementation"("ch.qos.logback:logback-classic:${Versions.LOGBACK}") - "compile"("com.github.luben:zstd-jni:1.4.8-1") - "compileOnly"("net.fabiozumbi12:redprotect:1.9.6") - "compile"("com.github.intellectualsites.plotsquared:PlotSquared-API:latest") { + annotationProcessor("com.google.guava:guava:21.0") + compileOnly("com.google.auto.value:auto-value-annotations:${Versions.AUTO_VALUE}") + annotationProcessor("com.google.auto.value:auto-value:${Versions.AUTO_VALUE}") + testImplementation("ch.qos.logback:logback-core:${Versions.LOGBACK}") + testImplementation("ch.qos.logback:logback-classic:${Versions.LOGBACK}") + implementation("com.github.luben:zstd-jni:1.4.8-1") + compileOnly("net.fabiozumbi12:redprotect:1.9.6") + api("com.github.intellectualsites.plotsquared:PlotSquared-API:latest") { isTransitive = false } - "compile"("com.plotsquared:PlotSquared-Core:5.13.3") { + api("com.plotsquared:PlotSquared-Core:5.13.3") { isTransitive = false } - "api"("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") + api("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") } tasks.named("test") { From 4b38526efb999d29bcc1b2cecd135e7275a2e0e2 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Tue, 19 Jan 2021 19:50:43 +0100 Subject: [PATCH 02/16] Update left over 1.16.4 notes --- .github/ISSUE_TEMPLATE/bug-report.md | 4 ++-- .github/workflows/build.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index a6086b9a6..47dae88dd 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -24,7 +24,7 @@ assignees: '' **Required Information** - FAWE Version Number (`/version FastAsyncWorldEdit`): - Spigot/Paper Version Number (`/version`): -- Minecraft Version: [e.g. 1.16.4] +- Minecraft Version: [e.g. 1.16.5] **Describe the bug** A clear and concise description of what the bug is. @@ -43,5 +43,5 @@ Steps to reproduce the behavior: - [] I included all information required in the sections above - [] I made sure there are no duplicates of this report [(Use Search)](https://github.com/IntellectualSites/FastAsyncWorldEdit/issues?q=is%3Aissue) -- [] I made sure I am using an up-to-date version of [FastAsyncWorldEdit for 1.16.4](https://ci.athion.net/job/FastAsyncWorldEdit-1.16/) +- [] I made sure I am using an up-to-date version of [FastAsyncWorldEdit for 1.16.5](https://ci.athion.net/job/FastAsyncWorldEdit-1.16/) - [] I made sure the bug/error is not caused by any other plugin diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb9597bb4..e276daa34 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,7 +44,7 @@ jobs: - name: "Download BuildTools" run: "wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" - name: "Run BuildTools" - run: "java -jar BuildTools.jar --rev 1.16.4" + run: "java -jar BuildTools.jar --rev 1.16.5" - name: "Clean Build" run: "./gradlew clean build sourcesJar javadocJar" From acc8a79e8eeea801362d2149ca92c892e9a530b0 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Tue, 19 Jan 2021 20:23:37 +0100 Subject: [PATCH 03/16] Leave a note about unsupported versions --- buildSrc/src/main/kotlin/PlatformConfig.kt | 1 - .../bukkit/adapter/BukkitImplLoader.java | 4 ++-- .../src/main/resources/worldedit-adapters.jar | Bin 453945 -> 453936 bytes 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/kotlin/PlatformConfig.kt b/buildSrc/src/main/kotlin/PlatformConfig.kt index a1ac6de77..42b9c6d4c 100644 --- a/buildSrc/src/main/kotlin/PlatformConfig.kt +++ b/buildSrc/src/main/kotlin/PlatformConfig.kt @@ -112,7 +112,6 @@ fun Project.applyPlatformAndCoreConfiguration() { fun Project.applyShadowConfiguration() { tasks.named("shadowJar") { -// archiveClassifier.set("dist") dependencies { include(project(":worldedit-libs:core")) include(project(":worldedit-libs:${project.name.replace("worldedit-", "")}")) diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplLoader.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplLoader.java index ed2d4d063..5b11d7fc0 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplLoader.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/BukkitImplLoader.java @@ -49,11 +49,11 @@ public class BukkitImplLoader { private static final String LOAD_ERROR_MESSAGE = "\n**********************************************\n" + "** This FastAsyncWorldEdit version does not fully support your version of Bukkit.\n" + + "** You can fix this by:\n" + + "** - Updating your server version\n** - Updating FAWE\n" + "**\n" + "** When working with blocks or undoing, chests will be empty, signs\n" + "** will be blank, and so on. There will be no support for entity\n" + "** and block property-related functions.\n" - + "**\n" - + "** Please see https://worldedit.enginehub.org/en/latest/faq/#bukkit-adapters\n" + "**********************************************\n"; /** diff --git a/worldedit-bukkit/src/main/resources/worldedit-adapters.jar b/worldedit-bukkit/src/main/resources/worldedit-adapters.jar index 21a08ec5c357a6f2a5a984eec15b49f724238f80..8085c693645770b0ea631cce74e0417c5104cd0d 100644 GIT binary patch delta 32517 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

aeGHGC$ldId&L^GB#-}yOGYyP?l6yjOhWuwj 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%0DW8yz@?;l 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 Date: Wed, 20 Jan 2021 13:56:19 +0100 Subject: [PATCH 04/16] Replace dead links --- .../main/java/com/sk89q/worldedit/command/UtilityCommands.java | 2 +- .../worldedit/extension/platform/PlatformCommandManager.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java index c41f244a5..50700b8b9 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java @@ -125,7 +125,7 @@ public class UtilityCommands { @Command( name = "/heightmapinterface", aliases = { "/hmi", "hmi" }, - desc = "Generate the heightmap interface: https://github.com/boy0001/HeightMap" + desc = "Generate the heightmap interface: https://github.com/IntellectualSites/HeightMap" ) @CommandPermissions("fawe.admin") public void heightmapInterface(Player player, @Arg(name = "min", desc = "int", def = "100") int min, @Arg(name = "max", desc = "int", def = "200") int max) throws IOException { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandManager.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandManager.java index 3bb76fe2f..78416a905 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandManager.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlatformCommandManager.java @@ -471,7 +471,7 @@ public final class PlatformCommandManager { registerSubCommands( "/anvil", ImmutableList.of(), - "Manipulate billions of blocks https://github.com/boy0001/FastAsyncWorldedit/wiki/Anvil-API", + "Manipulate billions of blocks", AnvilCommandsRegistration.builder(), new AnvilCommands(worldEdit) ); From 67f9e54285bd1fc024e46671f164dba6a65bc775 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Thu, 21 Jan 2021 10:19:07 +0100 Subject: [PATCH 05/16] Enhance reload message --- .../fawe/bukkit/util/SaneSoftwareCheck.java | 18 ++++++++++++++++++ .../worldedit/bukkit/WorldEditPlugin.java | 6 +++++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java new file mode 100644 index 000000000..570332118 --- /dev/null +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java @@ -0,0 +1,18 @@ +package com.boydti.fawe.bukkit.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SaneSoftwareCheck { + + private static final Logger log = LoggerFactory.getLogger(SaneSoftwareCheck.class); + + public static Class checkVersion() { + try { + Class.forName("org.yatopiamc.yatopia.server.YatopiaConfig"); + } catch (ClassNotFoundException e) { + return null; + } log.warn("You are running a server fork that is known to be extremely dangerous and lead to data loss. It is strongly recommended you switch to a more stable, high-performing server software, like Paper."); + return null; + } +} diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index 500d3796e..78b9a3221 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -84,6 +84,7 @@ import java.util.Optional; import java.util.logging.Level; import static com.boydti.fawe.bukkit.util.JavaVersionCheck.checkJvm; +import static com.boydti.fawe.bukkit.util.SaneSoftwareCheck.checkVersion; import static com.google.common.base.Preconditions.checkNotNull; import static com.sk89q.worldedit.internal.anvil.ChunkDeleter.DELCHUNKS_FILE_NAME; @@ -162,7 +163,8 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter // register this so we can load world-dependent data right as the first world is loading getServer().getPluginManager().registerEvents(new WorldInitListener(), this); } else { - getLogger().warning("Server reload detected. This may cause various issues with WorldEdit and dependent plugins."); + getLogger().warning("Server reload detected. This may cause various issues with FastAsyncWorldEdit and dependent plugins."); + getLogger().warning("For more information, see https://matthewmiller.dev/blog/problem-with-reload/"); try { setupPreWorldData(); // since worlds are loaded already, we can do this now @@ -176,6 +178,8 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter // Check whether the server runs on 11 or greater checkJvm(); + // Check if we are in a safe environment + checkVersion(); } private void setupPreWorldData() { From c35ebd7b5344cbe8a178c20880abda1bc0510521 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Thu, 21 Jan 2021 13:07:17 +0100 Subject: [PATCH 06/16] Only scan used repositories --- buildSrc/build.gradle.kts | 27 +++++--- buildSrc/src/main/kotlin/CommonConfig.kt | 44 +++++++++--- buildSrc/src/main/kotlin/PlatformConfig.kt | 12 ++-- buildSrc/src/main/kotlin/Versions.kt | 16 +---- gradle.properties | 1 + settings.gradle.kts | 2 +- worldedit-bukkit/build.gradle.kts | 81 +++++++++++++++------- worldedit-cli/build.gradle.kts | 4 +- worldedit-core/build.gradle.kts | 49 ++++++------- worldedit-core/doctools/build.gradle.kts | 2 +- worldedit-libs/bukkit/build.gradle.kts | 6 +- worldedit-libs/core/ap/build.gradle.kts | 4 +- worldedit-libs/core/build.gradle.kts | 14 ++-- worldedit-libs/sponge/build.gradle.kts | 2 +- 14 files changed, 160 insertions(+), 104 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index a926d3139..dcdddf2dd 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -8,6 +8,7 @@ plugins { repositories { jcenter() gradlePluginPortal() + /* maven { name = "Forge Maven" url = uri("https://files.minecraftforge.net/maven") @@ -20,15 +21,16 @@ repositories { name = "sponge" url = uri("https://repo.spongepowered.org/maven") } + */ maven { name = "EngineHub Repository" url = uri("https://maven.enginehub.org/repo/") content { - excludeGroup("net.milkbowl.vault") + includeGroup("com.sk89q") } } } - +/* configurations.all { resolutionStrategy { // Fabric needs this. @@ -39,27 +41,32 @@ configurations.all { ) } } + */ val properties = Properties().also { props -> project.projectDir.resolveSibling("gradle.properties").bufferedReader().use { props.load(it) } } +/* val loomVersion: String = properties.getProperty("loom.version") val mixinVersion: String = properties.getProperty("mixin.version") + */ dependencies { implementation(gradleApi()) - implementation("gradle.plugin.net.minecrell:licenser:0.4.1") - implementation("org.ajoberstar.grgit:grgit-gradle:4.0.2") - implementation("com.github.jengelman.gradle.plugins:shadow:5.2.0") + implementation("gradle.plugin.org.cadixdev.gradle:licenser:0.5.0") + implementation("org.ajoberstar.grgit:grgit-gradle:4.1.0") + implementation("com.github.jengelman.gradle.plugins:shadow:6.1.0") implementation("net.ltgt.apt-eclipse:net.ltgt.apt-eclipse.gradle.plugin:0.21") implementation("net.ltgt.apt-idea:net.ltgt.apt-idea.gradle.plugin:0.21") - //implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.16.0") - //implementation("gradle.plugin.org.spongepowered:spongegradle:0.9.0") - //implementation("net.minecraftforge.gradle:ForgeGradle:3.0.181") - //implementation("net.fabricmc:fabric-loom:$loomVersion") - //implementation("net.fabricmc:sponge-mixin:$mixinVersion") + /* implementation("gradle.plugin.com.mendhak.gradlecrowdin:plugin:0.1.0") implementation("org.enginehub.gradle:gradle-codecov-plugin:0.1.0") + implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.16.0") + implementation("gradle.plugin.org.spongepowered:spongegradle:0.9.0") + implementation("net.minecraftforge.gradle:ForgeGradle:3.0.181") + implementation("net.fabricmc:fabric-loom:$loomVersion") + implementation("net.fabricmc:sponge-mixin:$mixinVersion") + */ } diff --git a/buildSrc/src/main/kotlin/CommonConfig.kt b/buildSrc/src/main/kotlin/CommonConfig.kt index bec46c4cc..422b075d6 100644 --- a/buildSrc/src/main/kotlin/CommonConfig.kt +++ b/buildSrc/src/main/kotlin/CommonConfig.kt @@ -7,21 +7,43 @@ fun Project.applyCommonConfiguration() { repositories { mavenLocal() - maven { url = uri("https://mvn.intellectualsites.com/content/groups/public/") } - maven { url = uri("https://plotsquared.com/mvn/") } maven { - url = uri("https://maven.enginehub.org/repo/") + name = "IntellectualSites" + url = uri("https://mvn.intellectualsites.com/content/groups/public/") content { - excludeGroup("net.milkbowl.vault") + includeGroup("com.plotsquared") + includeGroup("com.intellectualsites.paster") + includeGroup("com.github.intellectualsites.plotsquared") + } + } + maven { + name = "EngineHub Repository" + url = uri("https://maven.enginehub.org/repo/") + content { + includeGroup("com.sk89q") + includeGroup("com.sk89q.lib") + includeGroupByRegex("org.enginehub.*") + } + } + maven { + name = "OSS Sonatype Snapshots" + url = uri("https://oss.sonatype.org/content/repositories/snapshots/") + } + maven { + name = "OSS Sonatype Releases" + url = uri("https://oss.sonatype.org/content/repositories/releases/") + } + maven { + name = "Athion" + url = uri("https://ci.athion.net/plugin/repository/tools/") + content { + includeGroup("com.massivecraft") + includeGroup("com.thevoxelbox.voxelsniper") + includeGroup("com.palmergames.bukkit") + includeGroup("net.fabiozumbi12") + includeGroupByRegex("com.destroystokyo.*") } } - maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") } - maven { url = uri("https://ci.athion.net/plugin/repository/tools/") } - maven { url = uri("https://repo.destroystokyo.com/repository/maven-public") } - ivy { url = uri("https://ci.athion.net/job") - patternLayout { - artifact("/[organisation]/[revision]/artifact/[module].[ext]") - }} } configurations.all { diff --git a/buildSrc/src/main/kotlin/PlatformConfig.kt b/buildSrc/src/main/kotlin/PlatformConfig.kt index 42b9c6d4c..c8b28e4fe 100644 --- a/buildSrc/src/main/kotlin/PlatformConfig.kt +++ b/buildSrc/src/main/kotlin/PlatformConfig.kt @@ -29,7 +29,7 @@ fun Project.applyPlatformAndCoreConfiguration() { configure { sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = sourceCompatibility } tasks @@ -55,11 +55,11 @@ fun Project.applyPlatformAndCoreConfiguration() { dependencies { "compileOnly"("org.jetbrains:annotations:20.1.0") - "testImplementation"("org.junit.jupiter:junit-jupiter-api:${Versions.JUNIT}") - "testImplementation"("org.junit.jupiter:junit-jupiter-params:${Versions.JUNIT}") - "testImplementation"("org.mockito:mockito-core:${Versions.MOCKITO}") - "testImplementation"("org.mockito:mockito-junit-jupiter:${Versions.MOCKITO}") - "testRuntime"("org.junit.jupiter:junit-jupiter-engine:${Versions.JUNIT}") + "testImplementation"("org.junit.jupiter:junit-jupiter-api:5.6.1") + "testImplementation"("org.junit.jupiter:junit-jupiter-params:5.6.1") + "testImplementation"("org.mockito:mockito-core:3.3.3") + "testImplementation"("org.mockito:mockito-junit-jupiter:3.3.3") + "testRuntime"("org.junit.jupiter:junit-jupiter-engine:5.6.1") } // Java 8 turns on doclint which we fail diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 14054d450..77bf827ae 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -1,18 +1,6 @@ +/* import org.gradle.api.Project -object Versions { - const val TEXT = "3.0.4" - const val TEXT_EXTRAS = "3.0.6" - const val PISTON = "0.5.6" - const val AUTO_VALUE = "1.7" - const val JUNIT = "5.6.1" - const val MOCKITO = "3.3.3" - const val LOGBACK = "1.2.3" - const val FAST_UTIL = "8.2.1" - const val GUAVA = "21.0" - const val GSON = "2.8.0" -} - // Properties that need a project reference to resolve: class ProjectVersions(project: Project) { val loom = project.rootProject.property("loom.version") @@ -21,3 +9,5 @@ class ProjectVersions(project: Project) { val Project.versions get() = ProjectVersions(this) + + */ diff --git a/gradle.properties b/gradle.properties index fc36c4337..26c5e6d55 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,7 @@ org.gradle.daemon=true org.gradle.configureondemand=true org.gradle.parallel=true org.gradle.caching=true +org.gradle.vfs.watch=true loom.version=0.2.6-20200124.104118-60 mixin.version=0.8+build.17 diff --git a/settings.gradle.kts b/settings.gradle.kts index c3d7f43ec..cf43a5552 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,7 +15,7 @@ dependencyResolutionManagement { name = "EngineHub Repository" url = uri("https://maven.enginehub.org/repo/") content { - excludeGroup("net.milkbowl.vault") + includeGroup("com.sk89q") } } } diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 6f842d105..267570e2c 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -1,28 +1,48 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { - `java-library` + id("java-library") } applyPlatformAndCoreConfiguration() applyShadowConfiguration() repositories { - maven { url = uri("https://hub.spigotmc.org/nexus/content/groups/public") } - maven { url = uri("https://repo.codemc.org/repository/maven-public") } - maven { url = uri("https://papermc.io/repo/repository/maven-public/") } - maven { url = uri("https://maven.enginehub.org/repo/") + maven { + name = "Spigot" + url = uri("https://hub.spigotmc.org/nexus/content/groups/public") content { - excludeGroup("net.milkbowl.vault") + includeGroup("org.bukkit") + includeGroup("org.spigotmc") } } - maven { url = uri("https://ci.emc.gs/nexus/content/groups/aikar/") } - maven { url = uri("https://ci.athion.net/plugin/repository/tools/") } + maven { + name = "Paper" + url = uri("https://papermc.io/repo/repository/maven-public/") + content { + includeGroup("io.papermc") + includeGroup("com.destroystokyo.paper") + } + } + maven { + name = "EngineHub Repository" + url = uri("https://maven.enginehub.org/repo/") + content { + includeGroup("com.sk89q") + } + } + maven { + name = "Athion" + url = uri("https://ci.athion.net/plugin/repository/tools/") + } maven { this.name = "JitPack" this.url = uri("https://jitpack.io") + content { + includeGroup("net.milkbowl.vault") + includeGroup("com.github.TechFortress") + } } - maven { url = uri("https://repo.destroystokyo.com/repository/maven-public/") } maven { name = "ProtocolLib Repo" url = uri("https://repo.dmulloy2.net/nexus/repository/public/") @@ -30,8 +50,21 @@ repositories { includeGroup("com.comphenix.protocol") } } - maven { url = uri("https://repo.inventivetalent.org/content/groups/public/") } - flatDir {dir(File("src/main/resources"))} + maven { + name = "Inventivetalent" + url = uri("https://repo.inventivetalent.org/content/groups/public/") + content { + includeGroupByRegex("org.inventivetalent.*") + } + } + maven { + name = "CodeMC" + url = uri("https://repo.codemc.org/repository/maven-public/") + content { + includeGroup("org.bstats") + } + } + flatDir { dir(File("src/main/resources")) } } configurations.all { @@ -41,29 +74,27 @@ configurations.all { } dependencies { - compileOnly("com.github.MilkBowl:VaultAPI:1.7") { - isTransitive = false - } + compileOnly("com.github.MilkBowl:VaultAPI:1.7") { isTransitive = false } api(project(":worldedit-core")) api(project(":worldedit-libs:bukkit")) compile(":worldedit-adapters:") // Paper-patched NMS jars - compile("com.destroystokyo.paperv1_15_r1:paperv1_15_r1:1_15_r1") - compile("com.destroystokyo.paperv1_16_r1:paperv1_16_r1:1_16_r1") - compile("com.destroystokyo.paperv1_16_r2:paperv1_16_r2:1_16_r2") - compile("com.destroystokyo.paperv1_16_r3:paperv1_16_r3:1_16_r3") - compile("org.spigotmcv1_15_r1:spigotmcv1_15_r1:1_15_r1") - compile("org.spigotmcv1_16_r1:spigotmcv1_16_r1:1_16_r1") - compile("org.spigotmcv1_16_r2:spigotmcv1_16_r2:1_16_r2") - compile("org.spigotmcv1_16_r3:spigotmcv1_16_r3:1_16_r3") - implementation("it.unimi.dsi:fastutil:${Versions.FAST_UTIL}") + compileOnly("com.destroystokyo.paperv1_15_r1:paperv1_15_r1:1_15_r1") + compileOnly("com.destroystokyo.paperv1_16_r1:paperv1_16_r1:1_16_r1") + compileOnly("com.destroystokyo.paperv1_16_r2:paperv1_16_r2:1_16_r2") + compileOnly("com.destroystokyo.paperv1_16_r3:paperv1_16_r3:1_16_r3") + compileOnly("org.spigotmcv1_15_r1:spigotmcv1_15_r1:1_15_r1") + compileOnly("org.spigotmcv1_16_r1:spigotmcv1_16_r1:1_16_r1") + compileOnly("org.spigotmcv1_16_r2:spigotmcv1_16_r2:1_16_r2") + compileOnly("org.spigotmcv1_16_r3:spigotmcv1_16_r3:1_16_r3") + implementation("it.unimi.dsi:fastutil:8.2.1") api("com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT") { exclude("junit", "junit") isTransitive = false } + compileOnly("org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT") compileOnly("org.jetbrains:annotations:20.1.0") testCompileOnly("org.jetbrains:annotations:20.1.0") - compileOnly("org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT") implementation("io.papermc:paperlib:1.0.6") compileOnly("com.sk89q:dummypermscompat:1.10") { exclude("com.github.MilkBowl", "VaultAPI") @@ -76,9 +107,9 @@ dependencies { exclude("com.sk89q.worldedit.worldedit-libs", "bukkit") exclude("com.sk89q.worldedit.worldedit-libs", "core") } - implementation("org.bstats:bstats-bukkit:1.8") api("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") // Third party + implementation("org.bstats:bstats-bukkit:1.8") compileOnlyApi("org.inventivetalent:mapmanager:1.7.+") { isTransitive = false } implementation("com.github.TechFortress:GriefPrevention:16.+") { isTransitive = false } implementation("com.massivecraft:mcore:7.0.1") { isTransitive = false } diff --git a/worldedit-cli/build.gradle.kts b/worldedit-cli/build.gradle.kts index a655b4b9a..ff4c37287 100644 --- a/worldedit-cli/build.gradle.kts +++ b/worldedit-cli/build.gradle.kts @@ -12,8 +12,8 @@ dependencies { "implementation"("org.apache.logging.log4j:log4j-core:2.8.1") "implementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") "implementation"("commons-cli:commons-cli:1.4") - "implementation"("com.google.guava:guava:${Versions.GUAVA}") - "implementation"("com.google.code.gson:gson:${Versions.GSON}") + "implementation"("com.google.guava:guava:21.0") + "implementation"("com.google.code.gson:gson:2.8.0") } tasks.named("jar") { diff --git a/worldedit-core/build.gradle.kts b/worldedit-core/build.gradle.kts index a078c2f3d..875008889 100644 --- a/worldedit-core/build.gradle.kts +++ b/worldedit-core/build.gradle.kts @@ -1,6 +1,4 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import com.mendhak.gradlecrowdin.DownloadTranslationsTask -import com.mendhak.gradlecrowdin.UploadSourceFileTask import org.gradle.plugins.ide.idea.model.IdeaModel plugins { @@ -8,12 +6,18 @@ plugins { id("net.ltgt.apt-eclipse") id("net.ltgt.apt-idea") id("antlr") - id("com.mendhak.gradlecrowdin") } repositories { - maven { url = uri("https://plotsquared.com/mvn/") } - maven { url = uri("https://mvn.intellectualsites.com/content/groups/public/") } + maven { + name = "IntellectualSites" + url = uri("https://mvn.intellectualsites.com/content/groups/public/") + content { + includeGroup("com.plotsquared") + includeGroup("com.intellectualsites.paster") + includeGroup("com.github.intellectualsites.plotsquared") + } + } } applyPlatformAndCoreConfiguration() @@ -30,33 +34,28 @@ dependencies { implementation("net.java.truevfs:truevfs-profile-default_2.13:0.12.2") implementation("org.mozilla:rhino-runtime:1.7.12") implementation("org.yaml:snakeyaml:1.27") - implementation("com.google.guava:guava:${Versions.GUAVA}") + implementation("com.google.guava:guava:21.0") implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.google.code.gson:gson:${Versions.GSON}") + implementation("com.google.code.gson:gson:2.8.0") implementation("org.slf4j:slf4j-api:1.7.26") - implementation("it.unimi.dsi:fastutil:${Versions.FAST_UTIL}") + implementation("it.unimi.dsi:fastutil:8.2.1") - val antlrVersion = "4.7.2" - antlr("org.antlr:antlr4:$antlrVersion") - implementation("org.antlr:antlr4-runtime:$antlrVersion") + antlr("org.antlr:antlr4:4.7.2") + implementation("org.antlr:antlr4-runtime:4.7.2") implementation("com.googlecode.json-simple:json-simple:1.1.1") { isTransitive = false } compileOnly(project(":worldedit-libs:core:ap")) annotationProcessor(project(":worldedit-libs:core:ap")) // ensure this is on the classpath for the AP annotationProcessor("com.google.guava:guava:21.0") - compileOnly("com.google.auto.value:auto-value-annotations:${Versions.AUTO_VALUE}") - annotationProcessor("com.google.auto.value:auto-value:${Versions.AUTO_VALUE}") - testImplementation("ch.qos.logback:logback-core:${Versions.LOGBACK}") - testImplementation("ch.qos.logback:logback-classic:${Versions.LOGBACK}") + compileOnly("com.google.auto.value:auto-value-annotations:1.7") + annotationProcessor("com.google.auto.value:auto-value:1.7") + testImplementation("ch.qos.logback:logback-core:1.2.3") + testImplementation("ch.qos.logback:logback-classic:1.2.3") implementation("com.github.luben:zstd-jni:1.4.8-1") compileOnly("net.fabiozumbi12:redprotect:1.9.6") - api("com.github.intellectualsites.plotsquared:PlotSquared-API:latest") { - isTransitive = false - } - api("com.plotsquared:PlotSquared-Core:5.13.3") { - isTransitive = false - } + api("com.github.intellectualsites.plotsquared:PlotSquared-API:4.514") { isTransitive = false } + api("com.plotsquared:PlotSquared-Core:5.13.3") { isTransitive = false } api("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") } @@ -73,8 +72,8 @@ tasks.named("generateGrammarSource").configure { val pkg = "com.sk89q.worldedit.antlr" outputDirectory = file("build/generated-src/antlr/main/${pkg.replace('.', '/')}") arguments = listOf( - "-visitor", "-package", pkg, - "-Xexact-output-dir" + "-visitor", "-package", pkg, + "-Xexact-output-dir" ) } @@ -112,7 +111,7 @@ tasks.named("shadowJar") { } } - +/* val crowdinApiKey = "crowdin_apikey" if (project.hasProperty(crowdinApiKey) && !gradle.startParameter.isOffline) { @@ -144,3 +143,5 @@ if (project.hasProperty(crowdinApiKey) && !gradle.startParameter.isOffline) { dependsOn("crowdinDownload") } } + + */ diff --git a/worldedit-core/doctools/build.gradle.kts b/worldedit-core/doctools/build.gradle.kts index 475a8839e..4dacc9ca3 100644 --- a/worldedit-core/doctools/build.gradle.kts +++ b/worldedit-core/doctools/build.gradle.kts @@ -21,5 +21,5 @@ dependencies { "implementation"(project(":worldedit-core")) "implementation"(kotlin("stdlib-jdk8")) "implementation"(kotlin("reflect")) - "implementation"("com.google.guava:guava:${Versions.GUAVA}") + "implementation"("com.google.guava:guava:21.0") } diff --git a/worldedit-libs/bukkit/build.gradle.kts b/worldedit-libs/bukkit/build.gradle.kts index a9d1c255e..3db476966 100644 --- a/worldedit-libs/bukkit/build.gradle.kts +++ b/worldedit-libs/bukkit/build.gradle.kts @@ -5,9 +5,13 @@ repositories { maven { name = "SpigotMC" url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + content { + includeGroup("org.bukkit") + includeGroup("org.spigotmc") + } } } dependencies { - "shade"("net.kyori:text-adapter-bukkit:${Versions.TEXT_EXTRAS}") + "shade"("net.kyori:text-adapter-bukkit:3.0.6") } diff --git a/worldedit-libs/core/ap/build.gradle.kts b/worldedit-libs/core/ap/build.gradle.kts index 44374359b..266d18fa2 100644 --- a/worldedit-libs/core/ap/build.gradle.kts +++ b/worldedit-libs/core/ap/build.gradle.kts @@ -1,6 +1,6 @@ applyLibrariesConfiguration() dependencies { - "shade"("org.enginehub.piston.core-ap:annotations:${Versions.PISTON}") - "shade"("org.enginehub.piston.core-ap:processor:${Versions.PISTON}") + "shade"("org.enginehub.piston.core-ap:annotations:0.5.6") + "shade"("org.enginehub.piston.core-ap:processor:0.5.6") } diff --git a/worldedit-libs/core/build.gradle.kts b/worldedit-libs/core/build.gradle.kts index 8a025d445..628b2163e 100644 --- a/worldedit-libs/core/build.gradle.kts +++ b/worldedit-libs/core/build.gradle.kts @@ -1,17 +1,17 @@ applyLibrariesConfiguration() dependencies { - "shade"("net.kyori:text-api:${Versions.TEXT}") - "shade"("net.kyori:text-serializer-gson:${Versions.TEXT}") - "shade"("net.kyori:text-serializer-legacy:${Versions.TEXT}") - "shade"("net.kyori:text-serializer-plain:${Versions.TEXT}") + "shade"("net.kyori:text-api:3.0.4") + "shade"("net.kyori:text-serializer-gson:3.0.4") + "shade"("net.kyori:text-serializer-legacy:3.0.4") + "shade"("net.kyori:text-serializer-plain:3.0.4") "shade"("com.sk89q:jchronic:0.2.4a") { exclude(group = "junit", module = "junit") } "shade"("com.thoughtworks.paranamer:paranamer:2.6") "shade"("com.github.luben:zstd-jni:1.4.8-1") "shade"("com.sk89q.lib:jlibnoise:1.0.0") - "shade"("org.enginehub.piston:core:${Versions.PISTON}") - "shade"("org.enginehub.piston.core-ap:runtime:${Versions.PISTON}") - "shade"("org.enginehub.piston:default-impl:${Versions.PISTON}") + "shade"("org.enginehub.piston:core:0.5.6") + "shade"("org.enginehub.piston.core-ap:runtime:0.5.6") + "shade"("org.enginehub.piston:default-impl:0.5.6") } diff --git a/worldedit-libs/sponge/build.gradle.kts b/worldedit-libs/sponge/build.gradle.kts index 47bd7e59c..dc241d185 100644 --- a/worldedit-libs/sponge/build.gradle.kts +++ b/worldedit-libs/sponge/build.gradle.kts @@ -8,5 +8,5 @@ repositories { } } dependencies { - "shade"("net.kyori:text-adapter-spongeapi:${Versions.TEXT_EXTRAS}") + "shade"("net.kyori:text-adapter-spongeapi:3.0.6") } From a300abae412a289722f5ffeb857aa74b835faaa4 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Thu, 21 Jan 2021 13:21:54 +0100 Subject: [PATCH 07/16] Properly define WorldGuard version --- buildSrc/build.gradle.kts | 2 +- buildSrc/src/main/kotlin/CommonConfig.kt | 3 +-- settings.gradle.kts | 2 +- worldedit-bukkit/build.gradle.kts | 4 ++-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index dcdddf2dd..cfd11d66a 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -26,7 +26,7 @@ repositories { name = "EngineHub Repository" url = uri("https://maven.enginehub.org/repo/") content { - includeGroup("com.sk89q") + includeGroupByRegex("com.sk89q.*") } } } diff --git a/buildSrc/src/main/kotlin/CommonConfig.kt b/buildSrc/src/main/kotlin/CommonConfig.kt index 422b075d6..eac58d136 100644 --- a/buildSrc/src/main/kotlin/CommonConfig.kt +++ b/buildSrc/src/main/kotlin/CommonConfig.kt @@ -20,9 +20,8 @@ fun Project.applyCommonConfiguration() { name = "EngineHub Repository" url = uri("https://maven.enginehub.org/repo/") content { - includeGroup("com.sk89q") - includeGroup("com.sk89q.lib") includeGroupByRegex("org.enginehub.*") + includeGroupByRegex("com.sk89q.*") } } maven { diff --git a/settings.gradle.kts b/settings.gradle.kts index cf43a5552..5ec69b404 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,7 +15,7 @@ dependencyResolutionManagement { name = "EngineHub Repository" url = uri("https://maven.enginehub.org/repo/") content { - includeGroup("com.sk89q") + includeGroupByRegex("com.sk89q.*") } } } diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 267570e2c..bf99fee79 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -28,7 +28,7 @@ repositories { name = "EngineHub Repository" url = uri("https://maven.enginehub.org/repo/") content { - includeGroup("com.sk89q") + includeGroupByRegex("com.sk89q.*") } } maven { @@ -101,7 +101,7 @@ dependencies { } implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") testImplementation("org.mockito:mockito-core:1.9.0-rc1") - compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.+") { + compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.4") { exclude("com.sk89q.worldedit", "worldedit-bukkit") exclude("com.sk89q.worldedit", "worldedit-core") exclude("com.sk89q.worldedit.worldedit-libs", "bukkit") From ef596664bcdef9035eef1c6ba35e22a63255f775 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Thu, 21 Jan 2021 13:34:33 +0100 Subject: [PATCH 08/16] Properly name repositories --- buildSrc/build.gradle.kts | 2 +- buildSrc/src/main/kotlin/CommonConfig.kt | 2 +- settings.gradle.kts | 2 +- worldedit-bukkit/build.gradle.kts | 14 +++++++------- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index cfd11d66a..16abd68fb 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -23,7 +23,7 @@ repositories { } */ maven { - name = "EngineHub Repository" + name = "EngineHub" url = uri("https://maven.enginehub.org/repo/") content { includeGroupByRegex("com.sk89q.*") diff --git a/buildSrc/src/main/kotlin/CommonConfig.kt b/buildSrc/src/main/kotlin/CommonConfig.kt index eac58d136..0b4a84b70 100644 --- a/buildSrc/src/main/kotlin/CommonConfig.kt +++ b/buildSrc/src/main/kotlin/CommonConfig.kt @@ -17,7 +17,7 @@ fun Project.applyCommonConfiguration() { } } maven { - name = "EngineHub Repository" + name = "EngineHub" url = uri("https://maven.enginehub.org/repo/") content { includeGroupByRegex("org.enginehub.*") diff --git a/settings.gradle.kts b/settings.gradle.kts index 5ec69b404..7e1ded413 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ dependencyResolutionManagement { repositories { mavenCentral() maven { - name = "EngineHub Repository" + name = "EngineHub" url = uri("https://maven.enginehub.org/repo/") content { includeGroupByRegex("com.sk89q.*") diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index bf99fee79..5d70530d9 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -9,7 +9,7 @@ applyShadowConfiguration() repositories { maven { - name = "Spigot" + name = "SpigotMC" url = uri("https://hub.spigotmc.org/nexus/content/groups/public") content { includeGroup("org.bukkit") @@ -17,7 +17,7 @@ repositories { } } maven { - name = "Paper" + name = "PaperMC" url = uri("https://papermc.io/repo/repository/maven-public/") content { includeGroup("io.papermc") @@ -25,7 +25,7 @@ repositories { } } maven { - name = "EngineHub Repository" + name = "EngineHub" url = uri("https://maven.enginehub.org/repo/") content { includeGroupByRegex("com.sk89q.*") @@ -36,15 +36,15 @@ repositories { url = uri("https://ci.athion.net/plugin/repository/tools/") } maven { - this.name = "JitPack" - this.url = uri("https://jitpack.io") + name = "JitPack" + url = uri("https://jitpack.io") content { - includeGroup("net.milkbowl.vault") + includeGroup("com.github.MilkBowl") includeGroup("com.github.TechFortress") } } maven { - name = "ProtocolLib Repo" + name = "ProtocolLib" url = uri("https://repo.dmulloy2.net/nexus/repository/public/") content { includeGroup("com.comphenix.protocol") From 692a844759a6f4b8919d947dff59927519d06b09 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Jan 2021 12:53:35 +0000 Subject: [PATCH 09/16] Update dependency com.google.code.gson:gson to v2.8.6 --- worldedit-cli/build.gradle.kts | 2 +- worldedit-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/worldedit-cli/build.gradle.kts b/worldedit-cli/build.gradle.kts index ff4c37287..e24323de8 100644 --- a/worldedit-cli/build.gradle.kts +++ b/worldedit-cli/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { "implementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") "implementation"("commons-cli:commons-cli:1.4") "implementation"("com.google.guava:guava:21.0") - "implementation"("com.google.code.gson:gson:2.8.0") + "implementation"("com.google.code.gson:gson:2.8.6") } tasks.named("jar") { diff --git a/worldedit-core/build.gradle.kts b/worldedit-core/build.gradle.kts index 875008889..7e772a339 100644 --- a/worldedit-core/build.gradle.kts +++ b/worldedit-core/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { implementation("org.yaml:snakeyaml:1.27") implementation("com.google.guava:guava:21.0") implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.google.code.gson:gson:2.8.0") + implementation("com.google.code.gson:gson:2.8.6") implementation("org.slf4j:slf4j-api:1.7.26") implementation("it.unimi.dsi:fastutil:8.2.1") From e9da3daf9ec3520f4ebd13a84cd734b0f05f2649 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Jan 2021 12:53:43 +0000 Subject: [PATCH 10/16] Update dependency it.unimi.dsi:fastutil to v8.4.4 --- worldedit-bukkit/build.gradle.kts | 2 +- worldedit-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 5d70530d9..6b5bdfe84 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -87,7 +87,7 @@ dependencies { compileOnly("org.spigotmcv1_16_r1:spigotmcv1_16_r1:1_16_r1") compileOnly("org.spigotmcv1_16_r2:spigotmcv1_16_r2:1_16_r2") compileOnly("org.spigotmcv1_16_r3:spigotmcv1_16_r3:1_16_r3") - implementation("it.unimi.dsi:fastutil:8.2.1") + implementation("it.unimi.dsi:fastutil:8.4.4") api("com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT") { exclude("junit", "junit") isTransitive = false diff --git a/worldedit-core/build.gradle.kts b/worldedit-core/build.gradle.kts index 875008889..cec554ecd 100644 --- a/worldedit-core/build.gradle.kts +++ b/worldedit-core/build.gradle.kts @@ -38,7 +38,7 @@ dependencies { implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.code.gson:gson:2.8.0") implementation("org.slf4j:slf4j-api:1.7.26") - implementation("it.unimi.dsi:fastutil:8.2.1") + implementation("it.unimi.dsi:fastutil:8.4.4") antlr("org.antlr:antlr4:4.7.2") implementation("org.antlr:antlr4-runtime:4.7.2") From 44a95b47a49dfd497038afbae357197005e7301b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Jan 2021 16:03:36 +0000 Subject: [PATCH 11/16] Update dependency com.google.code.gson:gson to v2.8.6 --- worldedit-cli/build.gradle.kts | 2 +- worldedit-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/worldedit-cli/build.gradle.kts b/worldedit-cli/build.gradle.kts index ff4c37287..e24323de8 100644 --- a/worldedit-cli/build.gradle.kts +++ b/worldedit-cli/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { "implementation"("org.apache.logging.log4j:log4j-slf4j-impl:2.8.1") "implementation"("commons-cli:commons-cli:1.4") "implementation"("com.google.guava:guava:21.0") - "implementation"("com.google.code.gson:gson:2.8.0") + "implementation"("com.google.code.gson:gson:2.8.6") } tasks.named("jar") { diff --git a/worldedit-core/build.gradle.kts b/worldedit-core/build.gradle.kts index cec554ecd..6d9ecc184 100644 --- a/worldedit-core/build.gradle.kts +++ b/worldedit-core/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { implementation("org.yaml:snakeyaml:1.27") implementation("com.google.guava:guava:21.0") implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.google.code.gson:gson:2.8.0") + implementation("com.google.code.gson:gson:2.8.6") implementation("org.slf4j:slf4j-api:1.7.26") implementation("it.unimi.dsi:fastutil:8.4.4") From 9cfcaa7605f26a63e13231a094dfbfbbca89a150 Mon Sep 17 00:00:00 2001 From: N0tMyFaultOG Date: Thu, 21 Jan 2021 20:20:09 +0100 Subject: [PATCH 12/16] Improve texture util if version is missing This could defo be done cleaner, but it works for now. --- .../com/boydti/fawe/util/TextureUtil.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java b/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java index ab52685f5..c4470a930 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java @@ -10,6 +10,8 @@ import com.google.gson.stream.JsonReader; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.util.PropertiesConfiguration; +import com.sk89q.worldedit.util.report.Unreported; import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypesCache; @@ -18,14 +20,19 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArraySet; import it.unimi.dsi.fastutil.longs.LongArrayList; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.awt.image.BufferedImage; +import java.io.BufferedInputStream; import java.io.File; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; @@ -48,6 +55,8 @@ import static org.slf4j.LoggerFactory.getLogger; // TODO FIXME public class TextureUtil implements TextureHolder { + private static final Logger log = LoggerFactory.getLogger(TextureUtil.class); + private static final int[] FACTORS = new int[766]; static { @@ -344,8 +353,20 @@ public class TextureUtil implements TextureHolder { public TextureUtil(File folder) throws FileNotFoundException { this.folder = folder; if (!folder.exists()) { - throw new FileNotFoundException( - "Please create a `FastAsyncWorldEdit/textures` folder with `.minecraft/versions` jar or mods in it."); + log.info("Downloading asset jar from Mojang, please wait..."); + new File(Fawe.imp().getDirectory() + "/" + Settings.IMP.PATHS.TEXTURES + "/" + "/.minecraft/versions/").mkdirs(); + try (BufferedInputStream in = new BufferedInputStream(new URL("https://launcher.mojang.com/v1/objects/37fd3c903861eeff3bc24b71eed48f828b5269c8/client.jar").openStream()); + FileOutputStream fileOutputStream = new FileOutputStream(Fawe.imp().getDirectory() + "/" + Settings.IMP.PATHS.TEXTURES + "/" + "/.minecraft/versions/1.16.5.jar")) { + byte[] dataBuffer = new byte[1024]; + int bytesRead; + while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) { + fileOutputStream.write(dataBuffer, 0, bytesRead); + } + log.info("Asset jar down has been downloaded successfully."); + } catch (IOException e) { + log.error("Could not download version jar. Please do so manually by creating a `FastAsyncWorldEdit/textures` folder with `.minecraft/versions` jar or mods in it."); + log.error("If the file exists, please make sure the server has read access to the directory."); + } } } @@ -606,8 +627,18 @@ public class TextureUtil implements TextureHolder { } } if (files.length == 0) { - getLogger(TextureUtil.class).debug( - "Please create a `FastAsyncWorldEdit/textures` folder with `.minecraft/versions/1.15.jar` jar or mods in it. If the file exists, please make sure the server has read access to the directory"); + new File(Fawe.imp().getDirectory() + "/" + Settings.IMP.PATHS.TEXTURES + "/" + "/.minecraft/versions/").mkdirs(); + try (BufferedInputStream in = new BufferedInputStream(new URL("https://launcher.mojang.com/v1/objects/37fd3c903861eeff3bc24b71eed48f828b5269c8/client.jar").openStream()); + FileOutputStream fileOutputStream = new FileOutputStream(Fawe.imp().getDirectory() + "/" + Settings.IMP.PATHS.TEXTURES + "/" + "/.minecraft/versions/1.16.5.jar")) { + byte[] dataBuffer = new byte[1024]; + int bytesRead; + while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) { + fileOutputStream.write(dataBuffer, 0, bytesRead); + } + } catch (IOException e) { + log.error("Could not download version jar. Please do so manually by creating a `FastAsyncWorldEdit/textures` folder with `.minecraft/versions` jar or mods in it."); + log.error("If the file exists, please make sure the server has read access to the directory."); + } } else { for (File file : files) { ZipFile zipFile = new ZipFile(file); From 86ecd9f55384a3fb5867e7d3d6f0d3c3bfd566d6 Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Fri, 22 Jan 2021 23:23:08 +0100 Subject: [PATCH 13/16] Move to ServerLib --- worldedit-bukkit/build.gradle.kts | 9 +++++++++ .../fawe/bukkit/util/SaneSoftwareCheck.java | 18 ------------------ .../worldedit/bukkit/WorldEditPlugin.java | 4 ++-- 3 files changed, 11 insertions(+), 20 deletions(-) delete mode 100644 worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 6b5bdfe84..89f17e9dc 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -64,6 +64,13 @@ repositories { includeGroup("org.bstats") } } + maven { + name = "IntellectualSites 3rd Party" + url = uri("https://mvn.intellectualsites.com/content/repositories/thirdparty") + content { + includeGroup("de.notmyfault") + } + } flatDir { dir(File("src/main/resources")) } } @@ -117,6 +124,7 @@ dependencies { implementation("com.palmergames.bukkit:towny:0.84.0.9") { isTransitive = false } implementation("com.thevoxelbox.voxelsniper:voxelsniper:5.171.0") { isTransitive = false } implementation("com.comphenix.protocol:ProtocolLib:4.5.1") { isTransitive = false } + implementation("de.notmyfault:serverlib:1.0.0") } tasks.named("processResources") { @@ -147,6 +155,7 @@ tasks.named("shadowJar") { include(dependency("org.slf4j:slf4j-api")) include(dependency("org.apache.logging.log4j:log4j-slf4j-impl")) include(dependency("org.antlr:antlr4-runtime")) + include(dependency("de.notmyfault:serverlib")) relocate("io.papermc.lib", "com.sk89q.worldedit.bukkit.paperlib") { include(dependency("io.papermc:paperlib:1.0.6")) } diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java deleted file mode 100644 index 570332118..000000000 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/util/SaneSoftwareCheck.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.boydti.fawe.bukkit.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SaneSoftwareCheck { - - private static final Logger log = LoggerFactory.getLogger(SaneSoftwareCheck.class); - - public static Class checkVersion() { - try { - Class.forName("org.yatopiamc.yatopia.server.YatopiaConfig"); - } catch (ClassNotFoundException e) { - return null; - } log.warn("You are running a server fork that is known to be extremely dangerous and lead to data loss. It is strongly recommended you switch to a more stable, high-performing server software, like Paper."); - return null; - } -} diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index 78b9a3221..d50d23813 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -49,6 +49,7 @@ import com.sk89q.worldedit.world.entity.EntityType; import com.sk89q.worldedit.world.gamemode.GameModes; import com.sk89q.worldedit.world.item.ItemCategory; import com.sk89q.worldedit.world.weather.WeatherTypes; +import de.notmyfault.serverlib.ServerLib; import io.papermc.lib.PaperLib; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -84,7 +85,6 @@ import java.util.Optional; import java.util.logging.Level; import static com.boydti.fawe.bukkit.util.JavaVersionCheck.checkJvm; -import static com.boydti.fawe.bukkit.util.SaneSoftwareCheck.checkVersion; import static com.google.common.base.Preconditions.checkNotNull; import static com.sk89q.worldedit.internal.anvil.ChunkDeleter.DELCHUNKS_FILE_NAME; @@ -179,7 +179,7 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter // Check whether the server runs on 11 or greater checkJvm(); // Check if we are in a safe environment - checkVersion(); + ServerLib.checkUnsafeForks(); } private void setupPreWorldData() { From 16f72d1cfdabaa402bad6260dc55434bb296538c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Jan 2021 23:36:08 +0100 Subject: [PATCH 14/16] Update dependency gradle to v6.8.1 (#879) Co-authored-by: Renovate Bot Co-authored-by: NotMyFault --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 80cf08e74..1c4bcc29e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 0bba9c5ac751cf09c1be176bae889894d3ba411d Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Sun, 24 Jan 2021 10:44:22 +0100 Subject: [PATCH 15/16] Update bStats --- worldedit-bukkit/build.gradle.kts | 11 ++--------- .../com/sk89q/worldedit/bukkit/WorldEditPlugin.java | 3 +-- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 89f17e9dc..70ead848d 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -57,13 +57,6 @@ repositories { includeGroupByRegex("org.inventivetalent.*") } } - maven { - name = "CodeMC" - url = uri("https://repo.codemc.org/repository/maven-public/") - content { - includeGroup("org.bstats") - } - } maven { name = "IntellectualSites 3rd Party" url = uri("https://mvn.intellectualsites.com/content/repositories/thirdparty") @@ -116,7 +109,7 @@ dependencies { } api("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") // Third party - implementation("org.bstats:bstats-bukkit:1.8") + implementation("org.bstats:bstats-bukkit:2.1.0") compileOnlyApi("org.inventivetalent:mapmanager:1.7.+") { isTransitive = false } implementation("com.github.TechFortress:GriefPrevention:16.+") { isTransitive = false } implementation("com.massivecraft:mcore:7.0.1") { isTransitive = false } @@ -163,7 +156,7 @@ tasks.named("shadowJar") { include(dependency("it.unimi.dsi:fastutil")) } relocate("org.bstats", "com.boydti.metrics") { - include(dependency("org.bstats:bstats-bukkit:1.8")) + include(dependency("org.bstats:bstats-bukkit:2.1.0")) } relocate("com.intellectualsites.paster", "com.boydti.fawe.paster") { include(dependency("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT")) diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index d50d23813..17c22d8c9 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -96,7 +96,6 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter private static final Logger log = LoggerFactory.getLogger(WorldEditPlugin.class); public static final String CUI_PLUGIN_CHANNEL = "worldedit:cui"; private static WorldEditPlugin INSTANCE; - private static final int BSTATS_PLUGIN_ID = 1403; private BukkitImplAdapter bukkitAdapter; private BukkitServerInterface server; @@ -174,7 +173,7 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter } // Setup metrics - new Metrics(this, BSTATS_PLUGIN_ID); + new Metrics(this, 1403); // Check whether the server runs on 11 or greater checkJvm(); From dd65cffe864ddfb694f188b9adaf37859e0423fb Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Sun, 24 Jan 2021 12:01:03 +0100 Subject: [PATCH 16/16] Relocate properly --- worldedit-bukkit/build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 70ead848d..9347ee491 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -110,6 +110,7 @@ dependencies { api("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT") // Third party implementation("org.bstats:bstats-bukkit:2.1.0") + implementation("org.bstats:bstats-base:2.1.0") compileOnlyApi("org.inventivetalent:mapmanager:1.7.+") { isTransitive = false } implementation("com.github.TechFortress:GriefPrevention:16.+") { isTransitive = false } implementation("com.massivecraft:mcore:7.0.1") { isTransitive = false } @@ -158,6 +159,9 @@ tasks.named("shadowJar") { relocate("org.bstats", "com.boydti.metrics") { include(dependency("org.bstats:bstats-bukkit:2.1.0")) } + relocate("org.bstats", "com.boydti.metrics") { + include(dependency("org.bstats:bstats-base:2.1.0")) + } relocate("com.intellectualsites.paster", "com.boydti.fawe.paster") { include(dependency("com.intellectualsites.paster:Paster:1.0.1-SNAPSHOT")) }