From 7238b37b9eacc6be013974288a5221fa7cfd0cf6 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:54:30 +0100 Subject: [PATCH 1/6] 1.21.5 nms (#55) --- build.gradle.kts | 3 +- nms/v1_21R4/.gitignore | 1 + nms/v1_21R4/build.gradle.kts | 47 +++++++++++++++++++ .../packet/versions/V1_21R4_PacketManager.kt | 34 ++++++++++++++ settings.gradle.kts | 2 + .../packet/PacketManagerSelector.kt | 1 + 6 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 nms/v1_21R4/.gitignore create mode 100644 nms/v1_21R4/build.gradle.kts create mode 100644 nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt diff --git a/build.gradle.kts b/build.gradle.kts index cd131bd..ea4a622 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.9.1" +version = "1.10.0" repositories { // EcoEnchants @@ -67,6 +67,7 @@ dependencies { implementation(project(":nms:v1_21R1", configuration = "reobf")) implementation(project(":nms:v1_21R2", configuration = "reobf")) implementation(project(":nms:v1_21R3", configuration = "reobf")) + implementation(project(":nms:v1_21R4"))//, configuration = "reobf")) // TODO add again when paperweigh 1.21.5 update // include kotlin for the offline jar implementation(kotlin("stdlib")) diff --git a/nms/v1_21R4/.gitignore b/nms/v1_21R4/.gitignore new file mode 100644 index 0000000..47374f1 --- /dev/null +++ b/nms/v1_21R4/.gitignore @@ -0,0 +1 @@ +.lastDeploymentsId \ No newline at end of file diff --git a/nms/v1_21R4/build.gradle.kts b/nms/v1_21R4/build.gradle.kts new file mode 100644 index 0000000..03a57d5 --- /dev/null +++ b/nms/v1_21R4/build.gradle.kts @@ -0,0 +1,47 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +group = rootProject.group +version = rootProject.version + +//TODO uncomment when paperDevBundle 1.21.4 release +/*plugins { + id("io.papermc.paperweight.userdev") +}*/ + +dependencies { + implementation(project(":nms:nms-common")) + + // Used for nms + compileOnly("org.spigotmc:spigot-api:1.20.5-R0.1-SNAPSHOT") //TODO remove when paperDevBundle 1.21.5 release + compileOnly("org.spigotmc:spigot:1.21.5-R0.1-SNAPSHOT") //TODO remove when paperDevBundle 1.21.5 release + //paperweight.paperDevBundle("1.21.5-R0.1-SNAPSHOT") //TODO uncomment when paperDevBundle 1.21.5 release +} + +repositories { + maven("https://repo.papermc.io/repository/maven-public/") + + mavenLocal()//TODO remove when paperDevBundle 1.21.5 release +} + +// minecraft 1.21 java version is 21. + +// Configure used version of kotlin and java +java { + disableAutoTargetJvm() + toolchain.languageVersion.set(JavaLanguageVersion.of(21)) +} + +// Set target version +tasks.withType().configureEach { + sourceCompatibility = "21" + targetCompatibility = "21" + + options.encoding = "UTF-8" +} + +kotlin { + compilerOptions { + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0) + jvmTarget.set(JvmTarget.JVM_21) + } +} diff --git a/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt b/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt new file mode 100644 index 0000000..cab0852 --- /dev/null +++ b/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt @@ -0,0 +1,34 @@ +package xyz.alexcrea.cuanvil.dependency.packet.versions + +import net.minecraft.network.protocol.game.PacketPlayOutAbilities +import net.minecraft.world.entity.player.PlayerAbilities +import org.bukkit.craftbukkit.v1_21_R4.entity.CraftPlayer +import org.bukkit.entity.Player +import xyz.alexcrea.cuanvil.dependency.packet.PacketManager +import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase + +class V1_21R4_PacketManager : PacketManagerBase(), PacketManager { + override val canSetInstantBuild: Boolean + get() = true + + override fun setInstantBuild(player: Player, instantBuild: Boolean) { + val nmsPlayer = (player as CraftPlayer).handle + val playerAbilities: PlayerAbilities = nmsPlayer.gk() + val sendedAbilities: PlayerAbilities + + if (playerAbilities.d == instantBuild) { + sendedAbilities = playerAbilities + } else { + sendedAbilities = PlayerAbilities() + sendedAbilities.a = playerAbilities.a + sendedAbilities.b = playerAbilities.b + sendedAbilities.c = playerAbilities.c + sendedAbilities.d = instantBuild + sendedAbilities.e = playerAbilities.e + sendedAbilities.m = playerAbilities.m + sendedAbilities.n = playerAbilities.n + } + val packet = PacketPlayOutAbilities(sendedAbilities) + nmsPlayer.f.sendPacket(packet) + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index bd7b34a..b77c2f3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -29,6 +29,8 @@ include("nms:v1_21R2") findProject(":nms:v1_21R2")?.name = "v1_21R2" include("nms:v1_21R3") findProject(":nms:v1_21R3")?.name = "v1_21R3" +include("nms:v1_21R4") +findProject(":nms:v1_21R4")?.name = "v1_21R4" include(":impl:LegacyEcoEnchant") findProject(":impl:LegacyEcoEnchant")?.name = "LegacyEcoEnchant" \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt index 71f4875..fc14921 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt @@ -57,6 +57,7 @@ object PacketManagerSelector { 0, 1 -> V1_21R1_PacketManager() 2, 3 -> V1_21R2_PacketManager() 4 -> V1_21R3_PacketManager() + 5 -> V1_21R4_PacketManager() else -> null } From 3a640ca93a5cfbad713ae479d5f9471fdd5b9f34 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 25 Mar 2025 18:01:14 +0100 Subject: [PATCH 2/6] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ee386c8..6b6b415 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Custom Anvil **Custom Anvil** is a plugin that allows server administrators to customize every aspect of the anvil's mechanics. -It is expected to work on 1.18 to 1.21.3 minecraft servers running spigot or paper. +It is expected to work on 1.18 to 1.21.5 minecraft servers running spigot or paper. (the plugin support of 1.16.5 to 1.17.1 is experimental and may encounter issues) **Custom Anvil** was previously named **Unsafe Enchants+**. @@ -80,7 +80,7 @@ as low priority as I work for the plugin on my free time for free. One of the configurations allow displaying price about 40 and removing Too Expensive. \ By how the minecraft client work: price above 40 can only be displayed green, even if the player does not own enough experience level. -Minecraft version 1.17 to 1.21.1 do not need any dependency. Other version need ProtocoLib enabled on your server for this feature. \ +Minecraft version 1.17 to 1.21.5 do not need any dependency. Other version need ProtocoLib enabled on your server for this feature. \ You can also wait for an update of the plugin to support a newer version. Please note that 1.16.5 to 1.17.1 are not officially supported. Run at your own risk. @@ -93,7 +93,7 @@ For information about the API, please refer to [the Wiki](https://github.com/ale ### Default Plugin's Configurations For 1.18 to 1.20.6 use the [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18)\ -For 1.21 to 1.21.1 use the [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21) +For 1.21 to 1.21.5 use the [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21) --- Custom anvil [use bstat](https://bstats.org/plugin/bukkit/Unsafe%20Enchants%20Plus/20923) for metric. You can [disable it](https://bstats.org/getting-started) if you like. From 0e4543769ee67055723363213cd309f275c6caca Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 8 Apr 2025 21:18:39 +0200 Subject: [PATCH 3/6] update expired gpg key --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 420f8a0..b302864 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ kotlin.code.style=official # Signing signing.gnupg.executable=gpg signing.gnupg.useLegacyGpg=true -signing.gnupg.keyName=B0DBF91F +signing.gnupg.keyName=2D3280C5 kotlin.daemon.jvmargs=-Xmx8G \ No newline at end of file From 0a548d1cc956749687dc3bbf98476d6a813351f2 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 8 Apr 2025 21:22:04 +0200 Subject: [PATCH 4/6] use paper 1.21.5 nms --- nms/v1_21R4/build.gradle.kts | 9 ++--- .../packet/versions/V1_21R4_PacketManager.kt | 33 +++++++++---------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/nms/v1_21R4/build.gradle.kts b/nms/v1_21R4/build.gradle.kts index 03a57d5..dcd0a7e 100644 --- a/nms/v1_21R4/build.gradle.kts +++ b/nms/v1_21R4/build.gradle.kts @@ -3,18 +3,15 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget group = rootProject.group version = rootProject.version -//TODO uncomment when paperDevBundle 1.21.4 release -/*plugins { +plugins { id("io.papermc.paperweight.userdev") -}*/ +} dependencies { implementation(project(":nms:nms-common")) // Used for nms - compileOnly("org.spigotmc:spigot-api:1.20.5-R0.1-SNAPSHOT") //TODO remove when paperDevBundle 1.21.5 release - compileOnly("org.spigotmc:spigot:1.21.5-R0.1-SNAPSHOT") //TODO remove when paperDevBundle 1.21.5 release - //paperweight.paperDevBundle("1.21.5-R0.1-SNAPSHOT") //TODO uncomment when paperDevBundle 1.21.5 release + paperweight.paperDevBundle("1.21.5-no-moonrise-SNAPSHOT") } repositories { diff --git a/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt b/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt index cab0852..b123625 100644 --- a/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt +++ b/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R4_PacketManager.kt @@ -1,8 +1,8 @@ package xyz.alexcrea.cuanvil.dependency.packet.versions -import net.minecraft.network.protocol.game.PacketPlayOutAbilities -import net.minecraft.world.entity.player.PlayerAbilities -import org.bukkit.craftbukkit.v1_21_R4.entity.CraftPlayer +import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket +import net.minecraft.world.entity.player.Abilities +import org.bukkit.craftbukkit.entity.CraftPlayer import org.bukkit.entity.Player import xyz.alexcrea.cuanvil.dependency.packet.PacketManager import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase @@ -13,22 +13,21 @@ class V1_21R4_PacketManager : PacketManagerBase(), PacketManager { override fun setInstantBuild(player: Player, instantBuild: Boolean) { val nmsPlayer = (player as CraftPlayer).handle - val playerAbilities: PlayerAbilities = nmsPlayer.gk() - val sendedAbilities: PlayerAbilities - - if (playerAbilities.d == instantBuild) { + val playerAbilities = nmsPlayer.abilities + val sendedAbilities: Abilities + if (playerAbilities.instabuild == instantBuild) { sendedAbilities = playerAbilities } else { - sendedAbilities = PlayerAbilities() - sendedAbilities.a = playerAbilities.a - sendedAbilities.b = playerAbilities.b - sendedAbilities.c = playerAbilities.c - sendedAbilities.d = instantBuild - sendedAbilities.e = playerAbilities.e - sendedAbilities.m = playerAbilities.m - sendedAbilities.n = playerAbilities.n + sendedAbilities = Abilities() + sendedAbilities.invulnerable = playerAbilities.invulnerable + sendedAbilities.flying = playerAbilities.flying + sendedAbilities.mayfly = playerAbilities.mayfly + sendedAbilities.instabuild = instantBuild + sendedAbilities.mayBuild = playerAbilities.mayBuild + sendedAbilities.flyingSpeed = playerAbilities.flyingSpeed + sendedAbilities.walkingSpeed = playerAbilities.walkingSpeed } - val packet = PacketPlayOutAbilities(sendedAbilities) - nmsPlayer.f.sendPacket(packet) + val packet = ClientboundPlayerAbilitiesPacket(sendedAbilities) + nmsPlayer.connection.send(packet) } } From cab89b66d9a631a894c385422189e39d4bda15f2 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Tue, 8 Apr 2025 21:50:19 +0200 Subject: [PATCH 5/6] made gradlew build be parallel --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index e0e8353..753ffaa 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -41,7 +41,7 @@ jobs: - name: Make gradlew executable run: chmod +x ./gradlew - name: Build with Gradle Wrapper - run: ./gradlew build + run: ./gradlew build --parallel - name: Summarize tests results uses: jeantessier/test-summary-action@v1 From 1f83b7b4fe434b04e0e8d1284e779b6d62d6cc0c Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Sat, 12 Apr 2025 19:29:13 +0200 Subject: [PATCH 6/6] forgot to update external gui tester and version up --- build.gradle.kts | 2 +- .../gui/version/v1_21R1_ExternGuiTester.kt | 17 ---------- .../gui/version/v1_21R2_ExternGuiTester.kt | 34 +++++++++++++++++++ .../gui/version/v1_21R3_ExternGuiTester.kt | 17 ++++++++++ .../gui/version/v1_21R4_ExternGuiTester.kt | 34 +++++++++++++++++++ .../dependency/gui/GuiTesterSelector.kt | 3 ++ 6 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R2_ExternGuiTester.kt create mode 100644 nms/v1_21R3/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R3_ExternGuiTester.kt create mode 100644 nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R4_ExternGuiTester.kt diff --git a/build.gradle.kts b/build.gradle.kts index ea4a622..b4fdd0c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.10.0" +version = "1.10.1" repositories { // EcoEnchants diff --git a/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt b/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt index eeee7ec..3111735 100644 --- a/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt +++ b/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt @@ -7,28 +7,11 @@ import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester class v1_21R1_ExternGuiTester: ExternGuiTester { override val wesjdAnvilGuiName = "Wrapper1_21_R1" - var tested = false; - var possible = false; - override fun getContainerClass(view: InventoryView): Class? { - // In case we are in a test environment - if(!tested) testClassExist() - if(!possible) return null - if(view !is CraftInventoryView<*, *>) return null val container = view.handle return container.javaClass } - fun testClassExist(){ - tested = true; - try { - Class.forName("org.bukkit.craftbukkit.inventory.CraftInventoryView") - possible = true - } catch (e: ClassNotFoundException){ - possible = false - } - } - } diff --git a/nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R2_ExternGuiTester.kt b/nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R2_ExternGuiTester.kt new file mode 100644 index 0000000..2604a16 --- /dev/null +++ b/nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R2_ExternGuiTester.kt @@ -0,0 +1,34 @@ +package xyz.alexcrea.cuanvil.dependency.gui.version + +import org.bukkit.craftbukkit.inventory.CraftInventoryView +import org.bukkit.inventory.InventoryView +import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester + +class v1_21R2_ExternGuiTester: ExternGuiTester { + override val wesjdAnvilGuiName = "Wrapper1_21_R2" + + var tested = false; + var possible = false; + + override fun getContainerClass(view: InventoryView): Class? { + // In case we are in a test environment + if(!tested) testClassExist() + if(!possible) return null + + if(view !is CraftInventoryView<*, *>) return null + val container = view.handle + + return container.javaClass + } + + fun testClassExist(){ + tested = true; + try { + Class.forName("org.bukkit.craftbukkit.inventory.CraftInventoryView") + possible = true + } catch (e: ClassNotFoundException){ + possible = false + } + } + +} diff --git a/nms/v1_21R3/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R3_ExternGuiTester.kt b/nms/v1_21R3/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R3_ExternGuiTester.kt new file mode 100644 index 0000000..70c5df9 --- /dev/null +++ b/nms/v1_21R3/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R3_ExternGuiTester.kt @@ -0,0 +1,17 @@ +package xyz.alexcrea.cuanvil.dependency.gui.version + +import org.bukkit.craftbukkit.inventory.CraftInventoryView +import org.bukkit.inventory.InventoryView +import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester + +class v1_21R3_ExternGuiTester: ExternGuiTester { + override val wesjdAnvilGuiName = "Wrapper1_21_R3" + + override fun getContainerClass(view: InventoryView): Class? { + if(view !is CraftInventoryView<*, *>) return null + val container = view.handle + + return container.javaClass + } + +} diff --git a/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R4_ExternGuiTester.kt b/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R4_ExternGuiTester.kt new file mode 100644 index 0000000..6b76451 --- /dev/null +++ b/nms/v1_21R4/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R4_ExternGuiTester.kt @@ -0,0 +1,34 @@ +package xyz.alexcrea.cuanvil.dependency.gui.version + +import org.bukkit.craftbukkit.inventory.CraftInventoryView +import org.bukkit.inventory.InventoryView +import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester + +class v1_21R4_ExternGuiTester: ExternGuiTester { + override val wesjdAnvilGuiName = "Wrapper1_21_R4" + + var tested = false; + var possible = false; + + override fun getContainerClass(view: InventoryView): Class? { + // In case we are in a test environment + if(!tested) testClassExist() + if(!possible) return null + + if(view !is CraftInventoryView<*, *>) return null + val container = view.handle + + return container.javaClass + } + + fun testClassExist(){ + tested = true; + try { + Class.forName("org.bukkit.craftbukkit.inventory.CraftInventoryView") + possible = true + } catch (e: ClassNotFoundException){ + possible = false + } + } + +} diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/GuiTesterSelector.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/GuiTesterSelector.kt index b1c27a1..8c6ad26 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/GuiTesterSelector.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/GuiTesterSelector.kt @@ -41,6 +41,9 @@ object GuiTesterSelector { 21 -> when (versionParts[2]) { 0, 1 -> v1_21R1_ExternGuiTester() + 2, 3 -> v1_21R2_ExternGuiTester() + 4 -> v1_21R3_ExternGuiTester() + 5 -> v1_21R4_ExternGuiTester() else -> null }