From 12e1b4bb4203eee0e0d3cd7c522cf9e76470dc31 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 14 Sep 2022 16:56:18 +0100 Subject: [PATCH] Improved vanilla enchant manipulation --- .../proxy/v1_17_R1/EcoCraftEnchantment.kt | 8 ++++---- .../proxy/v1_17_R1/EcoCraftEnchantmentManager.kt | 6 +++--- .../proxy/v1_18_R1/EcoCraftEnchantment.kt | 8 ++++---- .../proxy/v1_18_R1/EcoCraftEnchantmentManager.kt | 6 +++--- .../proxy/v1_18_R2/EcoCraftEnchantment.kt | 8 ++++---- .../proxy/v1_18_R2/EcoCraftEnchantmentManager.kt | 6 +++--- .../proxy/v1_19_R1/EcoCraftEnchantment.kt | 9 ++++----- .../proxy/v1_19_R1/EcoCraftEnchantmentManager.kt | 6 +++--- .../willfp/ecoenchants/enchants/EcoEnchantLike.kt | 15 ++++++++++++--- .../src/main/resources/vanillaenchants.yml | 4 ---- .../proxies/EcoCraftEnchantmentManagerProxy.kt | 3 ++- .../ecoenchants/vanilla/VanillaEnchantmentData.kt | 8 ++++++++ 12 files changed, 50 insertions(+), 37 deletions(-) create mode 100644 eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/vanilla/VanillaEnchantmentData.kt diff --git a/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantment.kt b/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantment.kt index 2fc2480e..09f6f253 100644 --- a/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantment.kt +++ b/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantment.kt @@ -2,23 +2,23 @@ package com.willfp.ecoenchants.proxy.v1_17_R1 import com.willfp.ecoenchants.enchants.EcoEnchant import com.willfp.ecoenchants.enchants.EcoEnchants +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import net.minecraft.world.item.enchantment.Enchantment import org.bukkit.NamespacedKey import org.bukkit.craftbukkit.v1_17_R1.enchantments.CraftEnchantment class EcoCraftEnchantment( target: Enchantment, - private val _maxLevel: Int, - private val conflicts: Collection + private val data: VanillaEnchantmentData ) : CraftEnchantment(target) { - override fun getMaxLevel(): Int = _maxLevel + override fun getMaxLevel(): Int = data.maxLevel ?: super.getMaxLevel() override fun conflictsWith(other: org.bukkit.enchantments.Enchantment): Boolean { if (other is EcoEnchant) { return other.conflictsWith(this) } - return conflicts.contains(other.key) + return data.conflicts?.contains(other.key) ?: super.conflictsWith(other) } fun register() { diff --git a/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantmentManager.kt b/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantmentManager.kt index ee2a7dd5..6096c385 100644 --- a/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantmentManager.kt +++ b/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_17_R1/EcoCraftEnchantmentManager.kt @@ -1,14 +1,14 @@ package com.willfp.ecoenchants.proxy.v1_17_R1 import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { override fun registerNewCraftEnchantment( enchantment: Enchantment, - maxLevel: Int, - conflicts: Collection + data: VanillaEnchantmentData ) { for (enchant in net.minecraft.core.IRegistry.X) { val key = org.bukkit.craftbukkit.v1_17_R1.util.CraftNamespacedKey.fromMinecraft( @@ -17,7 +17,7 @@ class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { if (key.key != enchantment.key.key) { continue } - EcoCraftEnchantment(enchant, maxLevel, conflicts).register() + EcoCraftEnchantment(enchant, data).register() } } } diff --git a/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantment.kt b/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantment.kt index 78858b88..e9d70669 100644 --- a/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantment.kt +++ b/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantment.kt @@ -2,23 +2,23 @@ package com.willfp.ecoenchants.proxy.v1_18_R1 import com.willfp.ecoenchants.enchants.EcoEnchant import com.willfp.ecoenchants.enchants.EcoEnchants +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import net.minecraft.world.item.enchantment.Enchantment import org.bukkit.NamespacedKey import org.bukkit.craftbukkit.v1_18_R1.enchantments.CraftEnchantment class EcoCraftEnchantment( target: Enchantment, - private val _maxLevel: Int, - private val conflicts: Collection + private val data: VanillaEnchantmentData ) : CraftEnchantment(target) { - override fun getMaxLevel(): Int = _maxLevel + override fun getMaxLevel(): Int = data.maxLevel ?: super.getMaxLevel() override fun conflictsWith(other: org.bukkit.enchantments.Enchantment): Boolean { if (other is EcoEnchant) { return other.conflictsWith(this) } - return conflicts.contains(other.key) + return data.conflicts?.contains(other.key) ?: super.conflictsWith(other) } fun register() { diff --git a/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantmentManager.kt b/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantmentManager.kt index 92559513..3569dc2e 100644 --- a/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantmentManager.kt +++ b/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R1/EcoCraftEnchantmentManager.kt @@ -1,14 +1,14 @@ package com.willfp.ecoenchants.proxy.v1_18_R1 import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { override fun registerNewCraftEnchantment( enchantment: Enchantment, - maxLevel: Int, - conflicts: Collection + data: VanillaEnchantmentData ) { for (enchant in net.minecraft.core.IRegistry.Y) { val key = org.bukkit.craftbukkit.v1_18_R1.util.CraftNamespacedKey.fromMinecraft( @@ -17,7 +17,7 @@ class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { if (key.key != enchantment.key.key) { continue } - EcoCraftEnchantment(enchant, maxLevel, conflicts).register() + EcoCraftEnchantment(enchant, data).register() } } } diff --git a/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantment.kt b/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantment.kt index c3bab6b3..7edf2b2a 100644 --- a/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantment.kt +++ b/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantment.kt @@ -2,23 +2,23 @@ package com.willfp.ecoenchants.proxy.v1_18_R2 import com.willfp.ecoenchants.enchants.EcoEnchant import com.willfp.ecoenchants.enchants.EcoEnchants +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import net.minecraft.world.item.enchantment.Enchantment import org.bukkit.NamespacedKey import org.bukkit.craftbukkit.v1_18_R2.enchantments.CraftEnchantment class EcoCraftEnchantment( target: Enchantment, - private val _maxLevel: Int, - private val conflicts: Collection + private val data: VanillaEnchantmentData ) : CraftEnchantment(target) { - override fun getMaxLevel(): Int = _maxLevel + override fun getMaxLevel(): Int = data.maxLevel ?: super.getMaxLevel() override fun conflictsWith(other: org.bukkit.enchantments.Enchantment): Boolean { if (other is EcoEnchant) { return other.conflictsWith(this) } - return conflicts.contains(other.key) + return data.conflicts?.contains(other.key) ?: super.conflictsWith(other) } fun register() { diff --git a/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantmentManager.kt b/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantmentManager.kt index 3c459116..2ee2eb3e 100644 --- a/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantmentManager.kt +++ b/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_18_R2/EcoCraftEnchantmentManager.kt @@ -1,14 +1,14 @@ package com.willfp.ecoenchants.proxy.v1_18_R2 import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { override fun registerNewCraftEnchantment( enchantment: Enchantment, - maxLevel: Int, - conflicts: Collection + data: VanillaEnchantmentData ) { for (enchant in net.minecraft.core.IRegistry.V) { val key = org.bukkit.craftbukkit.v1_18_R2.util.CraftNamespacedKey.fromMinecraft( @@ -17,7 +17,7 @@ class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { if (key.key != enchantment.key.key) { continue } - EcoCraftEnchantment(enchant, maxLevel, conflicts).register() + EcoCraftEnchantment(enchant, data).register() } } } diff --git a/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantment.kt b/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantment.kt index ebcd5863..7b2ad00f 100644 --- a/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantment.kt +++ b/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantment.kt @@ -2,23 +2,22 @@ package com.willfp.ecoenchants.proxy.v1_19_R1 import com.willfp.ecoenchants.enchants.EcoEnchant import com.willfp.ecoenchants.enchants.EcoEnchants +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import net.minecraft.world.item.enchantment.Enchantment -import org.bukkit.NamespacedKey import org.bukkit.craftbukkit.v1_19_R1.enchantments.CraftEnchantment class EcoCraftEnchantment( target: Enchantment, - private val _maxLevel: Int, - private val conflicts: Collection + private val data: VanillaEnchantmentData ) : CraftEnchantment(target) { - override fun getMaxLevel(): Int = _maxLevel + override fun getMaxLevel(): Int = data.maxLevel ?: super.getMaxLevel() override fun conflictsWith(other: org.bukkit.enchantments.Enchantment): Boolean { if (other is EcoEnchant) { return other.conflictsWith(this) } - return conflicts.contains(other.key) + return data.conflicts?.contains(other.key) ?: super.conflictsWith(other) } fun register() { diff --git a/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantmentManager.kt b/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantmentManager.kt index 9c40b2a7..a727293c 100644 --- a/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantmentManager.kt +++ b/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/ecoenchants/proxy/v1_19_R1/EcoCraftEnchantmentManager.kt @@ -1,14 +1,14 @@ package com.willfp.ecoenchants.proxy.v1_19_R1 import com.willfp.ecoenchants.proxy.proxies.EcoCraftEnchantmentManagerProxy +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { override fun registerNewCraftEnchantment( enchantment: Enchantment, - maxLevel: Int, - conflicts: Collection + data: VanillaEnchantmentData ) { for (enchant in net.minecraft.core.IRegistry.W) { val key = org.bukkit.craftbukkit.v1_19_R1.util.CraftNamespacedKey.fromMinecraft( @@ -17,7 +17,7 @@ class EcoCraftEnchantmentManager : EcoCraftEnchantmentManagerProxy { if (key.key != enchantment.key.key) { continue } - EcoCraftEnchantment(enchant, maxLevel, conflicts).register() + EcoCraftEnchantment(enchant, data).register() } } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt index 49230860..0aaeb1b7 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt @@ -14,6 +14,7 @@ import com.willfp.ecoenchants.rarity.EnchantmentRarities import com.willfp.ecoenchants.rarity.EnchantmentRarity import com.willfp.ecoenchants.type.EnchantmentType import com.willfp.ecoenchants.type.EnchantmentTypes +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import org.bukkit.Material import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment @@ -147,13 +148,21 @@ class VanillaEcoEnchantLike( } } +private val enchantmentOptions = arrayOf( + "max-level", + "conflicts" +) + fun registerVanillaEnchants(plugin: EcoEnchantsPlugin) { for (vanilla in plugin.vanillaEnchantsYml.getKeys(false)) { - if (plugin.vanillaEnchantsYml.has("$vanilla.max-level")) { + if (enchantmentOptions.any { plugin.vanillaEnchantsYml.has("$vanilla.$it") }) { plugin.getProxy(EcoCraftEnchantmentManagerProxy::class.java).registerNewCraftEnchantment( Enchantment.getByKey(NamespacedKey.minecraft(vanilla))!!, - plugin.vanillaEnchantsYml.getInt("$vanilla.max-level"), - plugin.vanillaEnchantsYml.getStrings("$vanilla.conflicts").map { NamespacedKey.minecraft(it) } + VanillaEnchantmentData( + plugin.vanillaEnchantsYml.getIntOrNull("$vanilla.max-level"), + plugin.vanillaEnchantsYml.getStringsOrNull("$vanilla.conflicts") + ?.map { NamespacedKey.minecraft(it) } + ) ) } } diff --git a/eco-core/core-plugin/src/main/resources/vanillaenchants.yml b/eco-core/core-plugin/src/main/resources/vanillaenchants.yml index 4d8d2e10..8a384d74 100644 --- a/eco-core/core-plugin/src/main/resources/vanillaenchants.yml +++ b/eco-core/core-plugin/src/main/resources/vanillaenchants.yml @@ -1,10 +1,6 @@ # Rarity option does not affect vanilla enchantments. # The option is there for the display option to sort by rarity. -# If you enable custom max levels for a vanilla enchant you have to also specify conflicts, -# if you don't the enchantment will have no conflicts at all, and vice-versa; changing conflicts -# will require you to specify the max level. - protection: name: "Protection" description: "Reduces incoming damage by &a%placeholder%%" diff --git a/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/proxy/proxies/EcoCraftEnchantmentManagerProxy.kt b/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/proxy/proxies/EcoCraftEnchantmentManagerProxy.kt index 143b327d..3a996ad8 100644 --- a/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/proxy/proxies/EcoCraftEnchantmentManagerProxy.kt +++ b/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/proxy/proxies/EcoCraftEnchantmentManagerProxy.kt @@ -1,8 +1,9 @@ package com.willfp.ecoenchants.proxy.proxies +import com.willfp.ecoenchants.vanilla.VanillaEnchantmentData import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment interface EcoCraftEnchantmentManagerProxy { - fun registerNewCraftEnchantment(enchantment: Enchantment, maxLevel: Int, conflicts: Collection) + fun registerNewCraftEnchantment(enchantment: Enchantment, data: VanillaEnchantmentData) } diff --git a/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/vanilla/VanillaEnchantmentData.kt b/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/vanilla/VanillaEnchantmentData.kt new file mode 100644 index 00000000..7049d312 --- /dev/null +++ b/eco-core/core-proxy/src/main/kotlin/com/willfp/ecoenchants/vanilla/VanillaEnchantmentData.kt @@ -0,0 +1,8 @@ +package com.willfp.ecoenchants.vanilla + +import org.bukkit.NamespacedKey + +data class VanillaEnchantmentData( + val maxLevel: Int?, + val conflicts: Collection? +)