From 697e0b7c9c48741e576f3deda059c6d984f626cb Mon Sep 17 00:00:00 2001 From: Will FP Date: Sat, 11 May 2024 16:26:29 +0100 Subject: [PATCH] Fixed FastItemStack on 1.20.6 --- .../data/ExtendedPersistentDataContainer.java | 4 ++++ .../ExtendedPersistentDataContainerFactory.kt | 3 ++- .../ExtendedPersistentDataContainerFactory.kt | 3 ++- .../ExtendedPersistentDataContainerFactory.kt | 3 ++- .../ExtendedPersistentDataContainerFactory.kt | 2 +- .../ExtendedPersistentDataContainerFactory.kt | 3 ++- .../ExtendedPersistentDataContainerFactory.kt | 2 +- .../ExtendedPersistentDataContainerFactory.kt | 2 +- .../proxy/v1_20_6/FastItemStackFactory.kt | 23 +++++++++---------- .../ExtendedPersistentDataContainerFactory.kt | 2 +- .../ExtendedPersistentDataContainerFactory.kt | 2 +- .../ExtendedPersistentDataContainerFactory.kt | 3 ++- 12 files changed, 30 insertions(+), 22 deletions(-) diff --git a/eco-api/src/main/java/com/willfp/eco/core/data/ExtendedPersistentDataContainer.java b/eco-api/src/main/java/com/willfp/eco/core/data/ExtendedPersistentDataContainer.java index a13325a72..7e2f55346 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/data/ExtendedPersistentDataContainer.java +++ b/eco-api/src/main/java/com/willfp/eco/core/data/ExtendedPersistentDataContainer.java @@ -87,6 +87,10 @@ public interface ExtendedPersistentDataContainer { * @return The extended container. */ static ExtendedPersistentDataContainer extend(@NotNull PersistentDataContainer base) { + if (base instanceof ExtendedPersistentDataContainer) { + return (ExtendedPersistentDataContainer) base; + } + return Eco.get().adaptPdc(base); } diff --git a/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_17_R1/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_17_R1/ExtendedPersistentDataContainerFactory.kt index 7f7aed630..22d4f504b 100644 --- a/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_17_R1/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_17_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_17_R1/ExtendedPersistentDataContainerFactory.kt @@ -2,6 +2,7 @@ package com.willfp.eco.internal.spigot.proxy.v1_17_R1 import com.willfp.eco.core.data.ExtendedPersistentDataContainer import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy +import com.willfp.eco.internal.spigot.proxy.common.item.ContinuallyAppliedPersistentDataContainer import net.minecraft.nbt.Tag import org.bukkit.Material import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack @@ -28,7 +29,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance is not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R1/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R1/ExtendedPersistentDataContainerFactory.kt index 404c083d8..d960c8897 100644 --- a/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R1/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_18_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R1/ExtendedPersistentDataContainerFactory.kt @@ -2,6 +2,7 @@ package com.willfp.eco.internal.spigot.proxy.v1_18_R1 import com.willfp.eco.core.data.ExtendedPersistentDataContainer import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy +import com.willfp.eco.internal.spigot.proxy.common.item.ContinuallyAppliedPersistentDataContainer import net.minecraft.nbt.Tag import org.bukkit.Material import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack @@ -28,7 +29,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance is not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R2/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R2/ExtendedPersistentDataContainerFactory.kt index 5618882e0..d6844aa5c 100644 --- a/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R2/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_18_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_18_R2/ExtendedPersistentDataContainerFactory.kt @@ -2,6 +2,7 @@ package com.willfp.eco.internal.spigot.proxy.v1_18_R2 import com.willfp.eco.core.data.ExtendedPersistentDataContainer import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy +import com.willfp.eco.internal.spigot.proxy.common.item.ContinuallyAppliedPersistentDataContainer import net.minecraft.nbt.Tag import org.bukkit.Material import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack @@ -28,7 +29,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance is not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R1/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R1/ExtendedPersistentDataContainerFactory.kt index 70cd50246..fc433b981 100644 --- a/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R1/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_19_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R1/ExtendedPersistentDataContainerFactory.kt @@ -28,7 +28,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_19_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R2/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_19_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R2/ExtendedPersistentDataContainerFactory.kt index 07105f998..f82930662 100644 --- a/eco-core/core-nms/v1_19_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R2/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_19_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R2/ExtendedPersistentDataContainerFactory.kt @@ -2,6 +2,7 @@ package com.willfp.eco.internal.spigot.proxy.v1_19_R2 import com.willfp.eco.core.data.ExtendedPersistentDataContainer import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy +import com.willfp.eco.internal.spigot.proxy.common.item.ContinuallyAppliedPersistentDataContainer import net.minecraft.nbt.Tag import org.bukkit.Material import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack @@ -28,7 +29,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_19_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R3/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_19_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R3/ExtendedPersistentDataContainerFactory.kt index 8faff7a94..64fe1a59d 100644 --- a/eco-core/core-nms/v1_19_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R3/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_19_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_19_R3/ExtendedPersistentDataContainerFactory.kt @@ -28,7 +28,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/ExtendedPersistentDataContainerFactory.kt index bfea2a5bc..99dfbdb48 100644 --- a/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/ExtendedPersistentDataContainerFactory.kt @@ -28,7 +28,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/FastItemStackFactory.kt b/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/FastItemStackFactory.kt index b159e80c8..709c4e6a1 100644 --- a/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/FastItemStackFactory.kt +++ b/eco-core/core-nms/v1_20_6/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_6/FastItemStackFactory.kt @@ -49,13 +49,7 @@ class FastItemStackFactory : FastItemStackFactoryProxy { @Suppress("USELESS_CAST") private val handle = bukkit.asNMSStack() as net.minecraft.world.item.ItemStack - private val pdc = if (handle.has(DataComponents.CUSTOM_DATA)) { - handle.get(DataComponents.CUSTOM_DATA)!!.copyTag().makePdc() - } else { - val tag = CompoundTag() - handle.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)) - tag.makePdc() - } + private val pdc = (handle.get(DataComponents.CUSTOM_DATA)?.copyTag() ?: CompoundTag()).makePdc() override fun getEnchants(checkStored: Boolean): Map { val enchantments = handle.get(DataComponents.ENCHANTMENTS) ?: return emptyMap() @@ -340,6 +334,7 @@ class FastItemStackFactory : FastItemStackFactoryProxy { override fun setAmount(amount: Int) { handle.setCount(amount) + apply() } override fun setType(material: org.bukkit.Material) { @@ -376,11 +371,15 @@ class FastItemStackFactory : FastItemStackFactoryProxy { } override fun apply() { - val customData = handle.get(DataComponents.CUSTOM_DATA) - if (customData != null) { - val tag = customData.copyTag() - tag.setPdc(pdc) - handle.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)) + val customData = handle.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY) + val updated = customData.update { + it.setPdc(pdc) + } + + if (updated.isEmpty) { + handle.remove(DataComponents.CUSTOM_DATA) + } else { + handle.set(DataComponents.CUSTOM_DATA, updated) } bukkit.mergeIfNeeded(handle) diff --git a/eco-core/core-nms/v1_20_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R1/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_20_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R1/ExtendedPersistentDataContainerFactory.kt index fb8f55452..0d17fabe4 100644 --- a/eco-core/core-nms/v1_20_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R1/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_20_R1/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R1/ExtendedPersistentDataContainerFactory.kt @@ -28,7 +28,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_20_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R2/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_20_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R2/ExtendedPersistentDataContainerFactory.kt index f75c82b6a..38c255931 100644 --- a/eco-core/core-nms/v1_20_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R2/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_20_R2/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R2/ExtendedPersistentDataContainerFactory.kt @@ -28,7 +28,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } } diff --git a/eco-core/core-nms/v1_20_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R3/ExtendedPersistentDataContainerFactory.kt b/eco-core/core-nms/v1_20_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R3/ExtendedPersistentDataContainerFactory.kt index a3bea877c..980a85445 100644 --- a/eco-core/core-nms/v1_20_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R3/ExtendedPersistentDataContainerFactory.kt +++ b/eco-core/core-nms/v1_20_R3/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/v1_20_R3/ExtendedPersistentDataContainerFactory.kt @@ -2,6 +2,7 @@ package com.willfp.eco.internal.spigot.proxy.v1_20_R3 import com.willfp.eco.core.data.ExtendedPersistentDataContainer import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy +import com.willfp.eco.internal.spigot.proxy.common.item.ContinuallyAppliedPersistentDataContainer import net.minecraft.nbt.Tag import org.bukkit.Material import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftItemStack @@ -28,7 +29,7 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is CraftPersistentDataContainer -> EcoPersistentDataContainer(pdc) - else -> throw IllegalArgumentException("Custom PDC instance ims not supported!") + else -> throw IllegalArgumentException("Custom PDC instance ${pdc::class.java.name} is not supported!") } }