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 d402e3d9..d77ed801 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 @@ -3,16 +3,28 @@ 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 net.minecraft.nbt.Tag +import org.bukkit.Material +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_17_R1.persistence.CraftPersistentDataContainer import org.bukkit.craftbukkit.v1_17_R1.persistence.CraftPersistentDataTypeRegistry +import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataContainer import org.bukkit.persistence.PersistentDataType -class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFactoryProxy { +class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFactoryProxy { @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(null) as CraftPersistentDataTypeRegistry + private val registry: CraftPersistentDataTypeRegistry + + init { + /* + Can't grab actual instance since it's in CraftMetaItem (which is package-private) + And getting it would mean more janky reflection + */ + val item = CraftItemStack.asCraftCopy(ItemStack(Material.STONE)) + val pdc = item.itemMeta!!.persistentDataContainer + this.registry = CraftPersistentDataContainer::class.java.getDeclaredField("registry") + .apply { isAccessible = true }.get(pdc) as CraftPersistentDataTypeRegistry + } override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { @@ -34,7 +46,8 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac .apply { isAccessible = true }.get(handle) as MutableMap override fun set(key: String, dataType: PersistentDataType, value: Z) { - customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, handle.adapterContext)) + customDataTags[key] = + registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, handle.adapterContext)) } override fun has(key: String, dataType: PersistentDataType): Boolean { 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 91a35bcd..cd9bf0bf 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 @@ -3,16 +3,28 @@ 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 net.minecraft.nbt.Tag +import org.bukkit.Material +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_18_R1.persistence.CraftPersistentDataContainer import org.bukkit.craftbukkit.v1_18_R1.persistence.CraftPersistentDataTypeRegistry +import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataContainer import org.bukkit.persistence.PersistentDataType class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFactoryProxy { @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(null) as CraftPersistentDataTypeRegistry + private val registry: CraftPersistentDataTypeRegistry + + init { + /* + Can't grab actual instance since it's in CraftMetaItem (which is package-private) + And getting it would mean more janky reflection + */ + val item = CraftItemStack.asCraftCopy(ItemStack(Material.STONE)) + val pdc = item.itemMeta!!.persistentDataContainer + this.registry = CraftPersistentDataContainer::class.java.getDeclaredField("registry") + .apply { isAccessible = true }.get(pdc) as CraftPersistentDataTypeRegistry + } override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { 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 ec30ae8c..b3ff5f5e 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 @@ -3,16 +3,28 @@ 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 net.minecraft.nbt.Tag +import org.bukkit.Material +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_18_R2.persistence.CraftPersistentDataContainer import org.bukkit.craftbukkit.v1_18_R2.persistence.CraftPersistentDataTypeRegistry +import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataContainer import org.bukkit.persistence.PersistentDataType -class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFactoryProxy { +class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFactoryProxy { @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(null) as CraftPersistentDataTypeRegistry + private val registry: CraftPersistentDataTypeRegistry + + init { + /* + Can't grab actual instance since it's in CraftMetaItem (which is package-private) + And getting it would mean more janky reflection + */ + val item = CraftItemStack.asCraftCopy(ItemStack(Material.STONE)) + val pdc = item.itemMeta!!.persistentDataContainer + this.registry = CraftPersistentDataContainer::class.java.getDeclaredField("registry") + .apply { isAccessible = true }.get(pdc) as CraftPersistentDataTypeRegistry + } override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { @@ -34,7 +46,8 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac .apply { isAccessible = true }.get(handle) as MutableMap override fun set(key: String, dataType: PersistentDataType, value: Z) { - customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, handle.adapterContext)) + customDataTags[key] = + registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, handle.adapterContext)) } override fun has(key: String, dataType: PersistentDataType): Boolean { 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 3c6dd2d5..c6d8c35e 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 @@ -3,21 +3,33 @@ package com.willfp.eco.internal.spigot.proxy.v1_19_R1 import com.willfp.eco.core.data.ExtendedPersistentDataContainer import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy import net.minecraft.nbt.Tag +import org.bukkit.Material +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_19_R1.persistence.CraftPersistentDataContainer import org.bukkit.craftbukkit.v1_19_R1.persistence.CraftPersistentDataTypeRegistry +import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataContainer import org.bukkit.persistence.PersistentDataType -class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFactoryProxy { +class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFactoryProxy { @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(null) as CraftPersistentDataTypeRegistry + private val registry: CraftPersistentDataTypeRegistry + + init { + /* + Can't grab actual instance since it's in CraftMetaItem (which is package-private) + And getting it would mean more janky reflection + */ + val item = CraftItemStack.asCraftCopy(ItemStack(Material.STONE)) + val pdc = item.itemMeta!!.persistentDataContainer + this.registry = CraftPersistentDataContainer::class.java.getDeclaredField("registry") + .apply { isAccessible = true }.get(pdc) as CraftPersistentDataTypeRegistry + } 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 ims not supported!") } } @@ -34,7 +46,8 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac .apply { isAccessible = true }.get(handle) as MutableMap override fun set(key: String, dataType: PersistentDataType, value: Z) { - customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, handle.adapterContext)) + customDataTags[key] = + registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, handle.adapterContext)) } override fun has(key: String, dataType: PersistentDataType): Boolean {