diff --git a/build.gradle.kts b/build.gradle.kts index 2cc60a02..4ce228f4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,24 +5,23 @@ import groovy.util.NodeList import io.papermc.hangarpublishplugin.model.HangarPublication import io.papermc.hangarpublishplugin.model.Platforms import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import java.io.ByteArrayOutputStream plugins { - kotlin("jvm") version "2.3.0" + kotlin("jvm") version "2.4.0" java - id("org.jetbrains.dokka").version("1.9.20") - id("com.gradleup.shadow").version("9.3.0") + id("org.jetbrains.dokka").version("2.2.0") + id("com.gradleup.shadow").version("9.6.1") // Maven publish `maven-publish` signing - id("cn.lalaki.central").version("1.2.8") + id("cn.lalaki.central").version("2.0.8") // Paper - id("io.papermc.paperweight.userdev") version "2.0.0-beta.17" apply false - id("io.papermc.hangar-publish-plugin") version "0.1.2" + id("io.papermc.paperweight.userdev") version "2.0.0-beta.21" apply false + id("io.papermc.hangar-publish-plugin") version "0.1.4" } group = "xyz.alexcrea" -version = "2.0.0" +version = "2.0.2" val isDevBuild = System.getenv("SMALL_COMMIT_HASH") != null val isPreRelease = System.getenv("IS_GITHUB_PRERELEASE") == "true" @@ -158,16 +157,16 @@ allprojects { // Set target version tasks.withType().configureEach { sourceCompatibility = - "16" // We aim for java 16 for minecraft 1.16.5. even if it not really supported by custom anvil. - targetCompatibility = "16" + "21" // We aim for java 21 for minecraft 1.21.0 + targetCompatibility = "21" options.encoding = "UTF-8" } kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) - jvmTarget.set(JvmTarget.JVM_16) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) + jvmTarget.set(JvmTarget.JVM_21) } } @@ -178,7 +177,10 @@ tasks { fun ShadowJar.configureBaseShadow(suffix: String, libraries: Array) { val processedSuffix = if(suffix.isEmpty()) "" else "-$suffix" - val name = "${rootProject.name}-${effectiveVersion}${processedSuffix}.jar" + val version = effectiveVersion + val name = "${rootProject.name}-${version}${processedSuffix}.jar" + val librariesExpendTo = libraries.joinToString(transform = { "\"$it\"" }) + archiveFileName.set(name) // Shadow necessary dependency @@ -187,8 +189,8 @@ tasks { filesMatching("plugin.yml") { expand( - "version" to effectiveVersion + processedSuffix, - "libraries" to libraries.joinToString(transform = { "\"$it\"" }), + "version" to version + processedSuffix, + "libraries" to librariesExpendTo, ) } @@ -200,7 +202,7 @@ tasks { shadowJar { configureBaseShadow("", arrayOf( - "org.jetbrains.kotlin:kotlin-stdlib:2.3.0", + "org.jetbrains.kotlin:kotlin-stdlib:2.4.0", "net.kyori:adventure-text-minimessage:4.25.0", "net.kyori:adventure-text-serializer-plain:4.25.0", "net.kyori:adventure-text-serializer-legacy:4.25.0", @@ -212,7 +214,7 @@ tasks { exclude("net/kyori/**") } - val offlineJar by registering(ShadowJar::class) { + val offlineJar = register("offlineJar") { configureBaseShadow("offline", emptyArray()) from(sourceSets.main.get().output) @@ -226,12 +228,12 @@ tasks { } -val sourcesJar by tasks.registering(Jar::class) { +val sourcesJar = tasks.register("sourcesJar") { archiveClassifier.set("sources") from(kotlin.sourceSets.main.get().kotlin) } -val javadocJar by tasks.registering(Jar::class, fun Jar.() { +val javadocJar = tasks.register("javadocJar", fun Jar.() { group = JavaBasePlugin.DOCUMENTATION_GROUP description = "Assembles Javadoc JAR" archiveClassifier.set("javadoc") @@ -355,36 +357,25 @@ publishing { } // hangar publish - -fun executeGitCommand(vararg command: String): String { - val byteOut = ByteArrayOutputStream() - exec { - commandLine = listOf("git", *command) - standardOutput = byteOut - } - return byteOut.toString(Charsets.UTF_8.name()).trim() +fun latestCommitMessage(): Provider { + return providers.exec { + commandLine("git", "log", "-1", "--pretty=%B") + }.standardOutput.asText.map(String::trim) } - -fun latestCommitMessage(): String { - return executeGitCommand("log", "-1", "--pretty=%B") -} - -fun changelog(isOnline: Boolean): String { - var changelog = if(isDevBuild) latestCommitMessage() - else System.getenv("RELEASE_CHANGELOG") - - if(!isOnline) { - changelog = "This is an offline version of the plugin. \\\n" + - "This mean that this plugin libraries are shaded into this plugin \\\n" + - "You likely want to use the normal version of this plugin\n\n" + changelog - } - - if(changelog == null || changelog.isEmpty()) { - changelog = "empty changelog" - } +fun changelog(isOnline: Boolean): Provider { + val changelog = if(isDevBuild) latestCommitMessage() + else providers.environmentVariable("RELEASE_CHANGELOG") return changelog + .filter{!it.isEmpty()} + .map { + if(!isOnline) + return@map "This is an offline version of the plugin. \\\n" + + "This mean that this plugin libraries are shaded into this plugin \\\n" + + "You likely want to use the normal version of this plugin\n\n" + it + else return@map it + }.orElse("empty changelog") } hangarPublish { @@ -395,11 +386,12 @@ hangarPublish { if(!isOnline) versionName+= "-offline" version.set(versionName) - var releaseChannel = if (isDevBuild || isPreRelease) devChannel else releaseChannel - if(releaseChannel == null) return - channel.set(releaseChannel) + var finalReleaseChannel = if (isDevBuild || isPreRelease) devChannel else releaseChannel + if(finalReleaseChannel == null) return + channel.set(finalReleaseChannel) changelog.set(changelog(isOnline)) + id.set("CustomAnvil") apiKey.set(System.getenv("HANGAR_API_TOKEN")) diff --git a/gradle.properties b/gradle.properties index 8bf9e80a..50a6ad2d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ kotlin.code.style=official +org.gradle.configuration-cache=true # Signing signing.secretKeyRingFile=~/.gnupg/secring.gpg diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0b55a3bd..8bf5ce26 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-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/impl/ExcellentEnchant5_4/build.gradle.kts b/impl/ExcellentEnchant5_4/build.gradle.kts index 9fe598b1..e624d159 100644 --- a/impl/ExcellentEnchant5_4/build.gradle.kts +++ b/impl/ExcellentEnchant5_4/build.gradle.kts @@ -2,7 +2,7 @@ group = rootProject.group version = rootProject.version plugins { - kotlin("jvm") version "2.3.0" + kotlin("jvm") version "2.4.0" } repositories { diff --git a/impl/LegacyEcoEnchant/build.gradle.kts b/impl/LegacyEcoEnchant/build.gradle.kts index 3c3f1aeb..71c62a78 100644 --- a/impl/LegacyEcoEnchant/build.gradle.kts +++ b/impl/LegacyEcoEnchant/build.gradle.kts @@ -2,7 +2,7 @@ group = rootProject.group version = rootProject.version plugins { - kotlin("jvm") version "2.3.0" + kotlin("jvm") version "2.4.0" } // Imitate needed class and method to support legacy version of EcoEnchant diff --git a/nms/nms-common/build.gradle.kts b/nms/nms-common/build.gradle.kts index 46f684d7..69777bae 100644 --- a/nms/nms-common/build.gradle.kts +++ b/nms/nms-common/build.gradle.kts @@ -29,7 +29,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/nms-paper/build.gradle.kts b/nms/nms-paper/build.gradle.kts index 19033be7..1fc283d7 100644 --- a/nms/nms-paper/build.gradle.kts +++ b/nms/nms-paper/build.gradle.kts @@ -29,7 +29,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt b/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt index 221dd2fa..043c25f8 100644 --- a/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt +++ b/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackTester.kt @@ -1,20 +1,39 @@ +@file:Suppress("DEPRECATION", "removal") package xyz.alexcrea.cuanvil.dependency.datapack import io.papermc.paper.datapack.Datapack import org.bukkit.Bukkit +import org.bukkit.packs.DataPack import java.util.* object DataPackTester { + val legacyNames: List + get() = Bukkit.getDataPackManager().dataPacks + .stream().filter { obj -> obj.isEnabled } + .map { pack -> pack.key.key } + .toList() val enabledPacks: List get() { - return try { - Bukkit.getDatapackManager().enabledPacks + try { + // will throw error if do not exist + Bukkit::class.java.getDeclaredMethod("getDatapackManager") + + return Bukkit.getDatapackManager().enabledPacks .stream().map { obj: Datapack -> obj.name } .toList() - } catch (_: Exception){ + } catch(_: NoSuchMethodException) { + try { + DataPack::class.java.getDeclaredMethod("getKey") + } catch(_: NoSuchMethodException) { + System.err.println("Could not find compatible datapack manager") + System.err.println("If you are using a datapack that should be compatible with CustomAnvil. It will not get detected...") + return emptyList() + } + return legacyNames + } catch(_: Exception) { // Assume cause UnimplementedOperationException on mock server - Collections.emptyList() + return Collections.emptyList() } } } diff --git a/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilTitleUtil.kt b/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilTitleUtil.kt index dc8ac092..447b06e6 100644 --- a/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilTitleUtil.kt +++ b/nms/nms-paper/src/main/kotlin/xyz/alexcrea/cuanvil/util/AnvilTitleUtil.kt @@ -13,6 +13,7 @@ object AnvilTitleUtil { private val runTaskMap = HashMap() + @Suppress("DEPRECATION") private fun actualRename(view: AnvilView, name: String, player: HumanEntity, anvilDialog: AnvilRenameDialog) { runTaskMap.remove(player.uniqueId) if (view.title == name) return diff --git a/nms/v1_21R1/build.gradle.kts b/nms/v1_21R1/build.gradle.kts index bf2152cc..ba86048f 100644 --- a/nms/v1_21R1/build.gradle.kts +++ b/nms/v1_21R1/build.gradle.kts @@ -29,7 +29,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/v1_21R2/build.gradle.kts b/nms/v1_21R2/build.gradle.kts index e65f6fd8..cbb75718 100644 --- a/nms/v1_21R2/build.gradle.kts +++ b/nms/v1_21R2/build.gradle.kts @@ -29,7 +29,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/v1_21R3/build.gradle.kts b/nms/v1_21R3/build.gradle.kts index d06816cc..4b54abc6 100644 --- a/nms/v1_21R3/build.gradle.kts +++ b/nms/v1_21R3/build.gradle.kts @@ -29,7 +29,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/v1_21R4/build.gradle.kts b/nms/v1_21R4/build.gradle.kts index 8bd22b9f..9e2f6e31 100644 --- a/nms/v1_21R4/build.gradle.kts +++ b/nms/v1_21R4/build.gradle.kts @@ -28,7 +28,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/v1_21R5/build.gradle.kts b/nms/v1_21R5/build.gradle.kts index e7f7c47c..2b5520ef 100644 --- a/nms/v1_21R5/build.gradle.kts +++ b/nms/v1_21R5/build.gradle.kts @@ -28,7 +28,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/v1_21R6/build.gradle.kts b/nms/v1_21R6/build.gradle.kts index 3189b5cb..69af3d8f 100644 --- a/nms/v1_21R6/build.gradle.kts +++ b/nms/v1_21R6/build.gradle.kts @@ -28,7 +28,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/nms/v1_21R7/build.gradle.kts b/nms/v1_21R7/build.gradle.kts index 91c3111a..0b39eee9 100644 --- a/nms/v1_21R7/build.gradle.kts +++ b/nms/v1_21R7/build.gradle.kts @@ -28,7 +28,7 @@ tasks.withType().configureEach { kotlin { compilerOptions { - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4) jvmTarget.set(JvmTarget.JVM_21) } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java index 58396638..0b5a08e7 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/ConfirmActionGui.java @@ -11,6 +11,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; +import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.util.MetricsUtil; import java.util.Arrays; @@ -33,7 +34,7 @@ public class ConfirmActionGui extends AbstractAskGui { if (!player.hasPermission(CustomAnvil.editConfigPermission)) { player.closeInventory(); - player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); + MsgUI.INSTANCE.getSHARED_CONFIG_NO_EDIT_PERM().send(player); return; } @@ -47,7 +48,7 @@ public class ConfirmActionGui extends AbstractAskGui { } if (!success) { - event.getWhoClicked().sendMessage("§cAction could not be completed. "); + MsgUI.INSTANCE.getCONFIRM_ACTION_FAILED().send(player); } backOnConfirm.show(player); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java index 66411bd4..f0369e6d 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; +import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.util.MaterialUtil; import java.util.Arrays; @@ -36,7 +37,7 @@ public class SelectItemTypeGui extends AbstractAskGui { if (!player.hasPermission(CustomAnvil.editConfigPermission)) { player.closeInventory(); - player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); + MsgUI.INSTANCE.getSHARED_CONFIG_NO_EDIT_PERM().send(player); return; } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java index 9b6c6100..7bfffdf8 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedElementListConfigGui.java @@ -10,6 +10,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.lang.MsgUI; import java.util.Arrays; import java.util.HashMap; @@ -52,13 +53,12 @@ public abstract class MappedElementListConfigGui extends ElementListConfig // check permission if (!player.hasPermission(CustomAnvil.editConfigPermission)) { player.closeInventory(); - player.sendMessage(GuiGlobalActions.NO_EDIT_PERM); + MsgUI.INSTANCE.getSHARED_CONFIG_NO_EDIT_PERM().send(player); return; } player.closeInventory(); - player.sendMessage("§eWrite the " + genericDisplayedName() + " name you want to create in the chat.\n" + - "§eOr write §ccancel §eto go back to " + genericDisplayedName() + " config menu"); + MsgUI.INSTANCE.getELEMENT_LIST_INSTRUCTION_NEW().send(player, genericDisplayedName()); CustomAnvil.Companion.getChatListener().setListenedCallback(player, prepareCreateItemConsumer(player)); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java index 8180694e..d25d6e72 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java @@ -8,6 +8,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.lang.MsgUI; import xyz.alexcrea.cuanvil.util.LazyValue; import java.util.Locale; @@ -69,13 +70,13 @@ public abstract class MappedGuiListConfigGui + PrepareAnvilEvent::class.java.constructors.first() fun createFakeEvent(view: AnvilView, result: ItemStack?): PrepareAnvilEvent { - return prepareAnvilConstructor.newInstance(view, result) + val result = prepareAnvilConstructor.newInstance(view, result) + if(result !is PrepareAnvilEvent) + throw IllegalStateException("Could not create a PrepareAnvilEvent ?") + + return result } } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoEnchantDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoEnchantDependency.kt index 78bc9d13..64078f0e 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoEnchantDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoEnchantDependency.kt @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchant.EcoEnchant import com.willfp.ecoenchants.enchant.EcoEnchants import com.willfp.ecoenchants.enchant.UtilKt import io.delilaheve.CustomAnvil +import org.bukkit.Bukkit import org.bukkit.event.inventory.PrepareAnvilEvent import org.bukkit.plugin.Plugin import xyz.alexcrea.cuanvil.api.EnchantmentApi @@ -22,11 +23,11 @@ class EcoEnchantDependency(private val ecoEnchantPlugin: Plugin) { try { Class.forName("com.willfp.ecoenchants.enchant.EcoEnchants") isLegacy = false - } catch (_: ClassNotFoundException) { + } catch(_: ClassNotFoundException) { } this.isLegacy = isLegacy; - if (isLegacy) { + if(isLegacy) { this.legacyDependency = LegacyEcoEnchantDependency() } else { this.legacyDependency = null @@ -34,25 +35,27 @@ class EcoEnchantDependency(private val ecoEnchantPlugin: Plugin) { } - public fun getEcoLevelLimit(): Int { + fun getEcoLevelLimit(): Int { return UtilKt.infiniteIfNegative((ecoEnchantPlugin as EcoPlugin).configYml.getInt("anvil.enchant-limit")) } fun disableAnvilListener() { PrepareAnvilEvent.getHandlerList().unregister(this.ecoEnchantPlugin) + // I don't like that but modern ee use eco prepare anvil event + PrepareAnvilEvent.getHandlerList().unregister(Bukkit.getPluginManager().getPlugin("eco")!!) } private var ecoEnchantOldEnchantments: MutableSet? = null fun registerEnchantments() { CustomAnvil.instance.logger.info("Preparing Eco Enchant compatibility...") - if (isLegacy) { + if(isLegacy) { legacyDependency!!.registerEnchantments(); return } val enchantments = EcoEnchants.INSTANCE.values() - for (ecoEnchant in enchantments) { + for(ecoEnchant in enchantments) { EnchantmentApi.unregisterEnchantment(ecoEnchant.enchantment) // As eco enchants is loaded before custom anvil and register enchantment to registry, we need to unregister old "vanilla" enchant. EnchantmentApi.registerEnchantment(CAEcoEnchant(ecoEnchant)) } @@ -63,24 +66,24 @@ class EcoEnchantDependency(private val ecoEnchantPlugin: Plugin) { } fun handleConfigReload() { - if (isLegacy) { + if(isLegacy) { legacyDependency!!.handleConfigReload() return } // Should not happen in known case. - if (this.ecoEnchantOldEnchantments == null) return + if(this.ecoEnchantOldEnchantments == null) return val newEnchantments = EcoEnchants.INSTANCE.values() // Add new enchantments - for (ecoEnchant in newEnchantments) - if (!this.ecoEnchantOldEnchantments!!.contains(ecoEnchant)) + for(ecoEnchant in newEnchantments) + if(!this.ecoEnchantOldEnchantments!!.contains(ecoEnchant)) EnchantmentApi.registerEnchantment(CAEcoEnchant(ecoEnchant)) // Remove old enchantments that not now currently used this.ecoEnchantOldEnchantments!!.removeAll(newEnchantments) - for (oldEnchantment in this.ecoEnchantOldEnchantments!!) { + for(oldEnchantment in this.ecoEnchantOldEnchantments!!) { EnchantmentApi.unregisterEnchantment(oldEnchantment.enchantment) } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ItemsAdderDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ItemsAdderDependency.kt index 9f366b20..6ef257bb 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ItemsAdderDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ItemsAdderDependency.kt @@ -6,6 +6,7 @@ import org.bukkit.NamespacedKey import org.bukkit.inventory.ItemStack import org.bukkit.plugin.Plugin +@Suppress("DEPRECATION") class ItemsAdderDependency(plugin: Plugin) : GenericPluginDependency(plugin) { var isLoaded: Boolean = false get() { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/LegacyEcoEnchantDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/LegacyEcoEnchantDependency.kt index 60f00b85..7f4196cf 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/LegacyEcoEnchantDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/LegacyEcoEnchantDependency.kt @@ -10,13 +10,20 @@ class LegacyEcoEnchantDependency { private var ecoEnchantOldEnchantments: MutableSet? = null + private fun unregisterEnchantment(enchant: Any) { + EnchantmentApi.unregisterEnchantment((enchant as Enchantment).key) + } + + private fun registerEnchantment(ecoEnchant: EcoEnchant, enchant: Any) { + EnchantmentApi.registerEnchantment(CALegacyEcoEnchant(ecoEnchant, enchant as Enchantment)) + } + fun registerEnchantments() { val enchantments = EcoEnchants.values() for (ecoEnchant in enchantments) { - ecoEnchant as Enchantment - - EnchantmentApi.unregisterEnchantment(ecoEnchant) // As eco enchants is loaded before custom anvil and register enchantment to registry, we need to unregister old "vanilla" enchant. - EnchantmentApi.registerEnchantment(CALegacyEcoEnchant(ecoEnchant, ecoEnchant)) + // As eco enchants is loaded before custom anvil and register enchantment to registry, we need to unregister old "vanilla" enchant. + unregisterEnchantment(ecoEnchant) + registerEnchantment(ecoEnchant, ecoEnchant) } ecoEnchantOldEnchantments = HashSet(enchantments) @@ -31,13 +38,13 @@ class LegacyEcoEnchantDependency { // Add new enchantments for (ecoEnchant in newEnchantments) if (!this.ecoEnchantOldEnchantments!!.contains(ecoEnchant)) - EnchantmentApi.registerEnchantment(CALegacyEcoEnchant(ecoEnchant, ecoEnchant as Enchantment)) + registerEnchantment(ecoEnchant, ecoEnchant) // Remove old enchantments that not now currently used this.ecoEnchantOldEnchantments!!.removeAll(newEnchantments) for (oldEnchantment in this.ecoEnchantOldEnchantments!!) { - EnchantmentApi.unregisterEnchantment(oldEnchantment as Enchantment) + unregisterEnchantment(oldEnchantment) } this.ecoEnchantOldEnchantments = HashSet(newEnchantments) diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt index f1193d17..8456ec87 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/ToolStatsDependency.kt @@ -18,9 +18,13 @@ class ToolStatsDependency(plugin: Plugin) : GenericPluginDependency(plugin) { getTokenMethod.trySetAccessible() } - private fun ItemChecker.getTokenSafe(item: ItemStack?): Array { - if (item == null) return arrayOf() - return getTokenMethod.invoke(this, item) as Array + private fun ItemChecker.getTokenSafe(item: ItemStack?): Array<*> { + if (item == null) return arrayOf() + val result = getTokenMethod.invoke(this, item) + if(result !is Array<*>) + throw IllegalStateException("Could not get token from ToolStats") + + return result } override fun testAnvilResult(event: InventoryClickEvent): Boolean { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/lang/Message.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/lang/Message.kt index 9c1dd596..5e9276d3 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/lang/Message.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/lang/Message.kt @@ -144,4 +144,4 @@ class ErrorMessage(key: String, vararg params: String) : Message("error.$key", * } class CommandMessage(key: String, vararg params: String) : Message("command.$key", *params) -class UIMessage(key: String, vararg params: String) : Message("ui.$key", *params) \ No newline at end of file +class UIMessage(key: String, vararg params: String) : Message("config-ui.$key", *params) \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgUI.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgUI.kt index bb1c807b..c144f1fc 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgUI.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgUI.kt @@ -1,6 +1,21 @@ package xyz.alexcrea.cuanvil.lang +import xyz.alexcrea.cuanvil.lang.UIMessage as Message + object MsgUI { + val SHARED_CONFIG_NO_EDIT_PERM = Message("shared.no-permission") + + val CONFIRM_ACTION_FAILED = Message("confirm-action.fail") + + val ELEMENT_LIST_INSTRUCTION_NEW = Message("element-list.instruction-new", "type") + val ELEMENT_LIST_CANCELLED_NEW = Message("element-list.cancelled-new", "type") + val ELEMENT_LIST_DUPLICATED_NEW = Message("element-list.duplicated-new", "type") + + val UNIT_REPAIR_ELEMENT_TITLE = Message("unit-repair.element.title") + val UNIT_REPAIR_ELEMENT_DESCRIPTION = Message("unit-repair.element.description") + val UNIT_REPAIR_ELEMENT_CANNOT_REPAIR_NEW = Message("unit-repair.element.cannot-damage-new") + val UNIT_REPAIR_ELEMENT_SAME_TYPE_NEW = Message("unit-repair.element.same-type-new") + } \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgWarning.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgWarning.kt index 90eafa56..486f589d 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgWarning.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/lang/MsgWarning.kt @@ -15,4 +15,6 @@ object MsgWarning { val LOAD_LEGACY_SPIGOT = Message("load.legacy.spigot") val LOAD_LEGACY_SPIGOT_OLD = Message("load.legacy.spigot-old") + val DEPENDENCY_GENERIC_EXCEPTION = Message("config-ui.shared.no-permission") + } \ No newline at end of file diff --git a/src/main/resources/lang/en.yml b/src/main/resources/lang/en.yml index cfd9ce17..75483d16 100644 --- a/src/main/resources/lang/en.yml +++ b/src/main/resources/lang/en.yml @@ -89,4 +89,24 @@ command: start: "Reloading config..." success: "Config reloaded !" fail: "Config was not able to be reloaded..." - hard-fail: "Hard fail, plugin disabled" \ No newline at end of file + hard-fail: "Hard fail, plugin disabled" + +config-ui: + shared: + no-permission: "You do not have permission to edit the config" + confirm-action: + fail: "Action could not be completed." + element-list: + instruction-new: + 1: "Write the %type name you want to create in the chat." + 2: "Or write cancel to go back to %type config menu" + cancelled-new: "%type creation cancelled..." + duplicated-new: "Please enter a %type name that do not already exist..." + unit-repair: + element: + title: "Select item to be repaired." + description: + 1: "Click here with an item to set the item" + 2: "You like to be repaired by %name" + cannot-damage-new: "This item can't be damaged, so it can't be repaired." + same-type-new: "Item can't repair something of the same type." \ No newline at end of file