From a19cc7df1e21aa3f3b53fa49ccda818384f9b8a8 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 23 Apr 2022 15:54:40 +0100 Subject: [PATCH] Added ExtendedPersistentDataContainer.create --- .../main/java/com/willfp/eco/core/Handler.java | 11 ++++++++++- .../data/ExtendedPersistentDataContainer.java | 15 +++++++++++++-- .../java/com/willfp/eco/core/items/Items.java | 3 --- .../ExtendedPersistentDataContainerFactory.kt | 16 ++++++++++------ .../ExtendedPersistentDataContainerFactory.kt | 16 ++++++++++------ .../ExtendedPersistentDataContainerFactory.kt | 16 ++++++++++------ .../com/willfp/eco/internal/spigot/EcoHandler.kt | 3 +++ ...xtendedPersistentDataContainerFactoryProxy.kt | 1 + 8 files changed, 57 insertions(+), 24 deletions(-) diff --git a/eco-api/src/main/java/com/willfp/eco/core/Handler.java b/eco-api/src/main/java/com/willfp/eco/core/Handler.java index 2ba2786c..258a4aba 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/Handler.java +++ b/eco-api/src/main/java/com/willfp/eco/core/Handler.java @@ -282,7 +282,8 @@ public interface Handler { * @param The mob type. * @return The controlled entity. */ - @NotNull EntityController createEntityController(@NotNull T mob); + @NotNull + EntityController createEntityController(@NotNull T mob); /** * Adapt base PDC to extended PDC. @@ -292,4 +293,12 @@ public interface Handler { */ @NotNull ExtendedPersistentDataContainer adaptPdc(@NotNull PersistentDataContainer container); + + /** + * Create new PDC. + * + * @return The container. + */ + @NotNull + PersistentDataContainer newPdc(); } 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 d7f85a07..0bd7aac3 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 @@ -43,7 +43,8 @@ public interface ExtendedPersistentDataContainer extends PersistentDataContainer * @param The type. * @return The value, or null if not found. */ - @Nullable Z get(@NotNull String key, @NotNull PersistentDataType dataType); + @Nullable + Z get(@NotNull String key, @NotNull PersistentDataType dataType); /** * Get a value or default if not present. @@ -55,7 +56,8 @@ public interface ExtendedPersistentDataContainer extends PersistentDataContainer * @param The type. * @return The value, or the default if not found. */ - @NotNull Z getOrDefault(@NotNull String key, @NotNull PersistentDataType dataType, @NotNull Z defaultValue); + @NotNull + Z getOrDefault(@NotNull String key, @NotNull PersistentDataType dataType, @NotNull Z defaultValue); /** * Get all keys, including namespaced keys. @@ -91,4 +93,13 @@ public interface ExtendedPersistentDataContainer extends PersistentDataContainer static ExtendedPersistentDataContainer wrap(@NotNull PersistentDataContainer base) { return Eco.getHandler().adaptPdc(base); } + + /** + * Create a new extended container. + * + * @return The extended container. + */ + static ExtendedPersistentDataContainer create() { + return wrap(Eco.getHandler().newPdc()); + } } diff --git a/eco-api/src/main/java/com/willfp/eco/core/items/Items.java b/eco-api/src/main/java/com/willfp/eco/core/items/Items.java index 40545c8b..f7752dcd 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/items/Items.java +++ b/eco-api/src/main/java/com/willfp/eco/core/items/Items.java @@ -2,7 +2,6 @@ package com.willfp.eco.core.items; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; -import com.willfp.eco.core.data.ExtendedPersistentDataContainer; import com.willfp.eco.core.fast.FastItemStack; import com.willfp.eco.core.items.args.LookupArgParser; import com.willfp.eco.core.items.provider.ItemProvider; @@ -19,7 +18,6 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,7 +26,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; 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 c5578158..c9680ec5 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 @@ -9,6 +9,11 @@ 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 + override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is ExtendedPersistentDataContainer -> pdc @@ -17,7 +22,11 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac } } - class EcoPersistentDataContainer( + override fun newPdc(): PersistentDataContainer { + return CraftPersistentDataContainer(registry) + } + + inner class EcoPersistentDataContainer( val handle: CraftPersistentDataContainer ) : ExtendedPersistentDataContainer, PersistentDataContainer by handle { @Suppress("UNCHECKED_CAST") @@ -25,11 +34,6 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags") .apply { isAccessible = true }.get(handle) as MutableMap - @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(handle) as CraftPersistentDataTypeRegistry - override fun set(key: String, dataType: PersistentDataType, value: Z) { customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext)) } 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 a8be27a7..1c4addb8 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 @@ -9,6 +9,11 @@ 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 + override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is ExtendedPersistentDataContainer -> pdc @@ -17,7 +22,11 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa } } - class EcoPersistentDataContainer( + override fun newPdc(): PersistentDataContainer { + return CraftPersistentDataContainer(registry) + } + + inner class EcoPersistentDataContainer( val handle: CraftPersistentDataContainer ) : ExtendedPersistentDataContainer, PersistentDataContainer by handle { @Suppress("UNCHECKED_CAST") @@ -25,11 +34,6 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags") .apply { isAccessible = true }.get(handle) as MutableMap - @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(handle) as CraftPersistentDataTypeRegistry - override fun set(key: String, dataType: PersistentDataType, value: Z) { customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext)) } 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 86b0243e..162d69fc 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 @@ -9,6 +9,11 @@ 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 + override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer { return when (pdc) { is ExtendedPersistentDataContainer -> pdc @@ -17,7 +22,11 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac } } - class EcoPersistentDataContainer( + override fun newPdc(): PersistentDataContainer { + return CraftPersistentDataContainer(registry) + } + + inner class EcoPersistentDataContainer( val handle: CraftPersistentDataContainer ) : ExtendedPersistentDataContainer, PersistentDataContainer by handle { @Suppress("UNCHECKED_CAST") @@ -25,11 +34,6 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags") .apply { isAccessible = true }.get(handle) as MutableMap - @Suppress("UNCHECKED_CAST") - private val registry: CraftPersistentDataTypeRegistry = - CraftPersistentDataContainer::class.java.getDeclaredField("registry") - .apply { isAccessible = true }.get(handle) as CraftPersistentDataTypeRegistry - override fun set(key: String, dataType: PersistentDataType, value: Z) { customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext)) } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoHandler.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoHandler.kt index e3701b72..c18deba0 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoHandler.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoHandler.kt @@ -156,4 +156,7 @@ class EcoHandler : EcoSpigotPlugin(), Handler { override fun adaptPdc(container: PersistentDataContainer): ExtendedPersistentDataContainer = getProxy(ExtendedPersistentDataContainerFactoryProxy::class.java).adapt(container) + + override fun newPdc(): PersistentDataContainer = + getProxy(ExtendedPersistentDataContainerFactoryProxy::class.java).newPdc() } diff --git a/eco-core/core-proxy/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/ExtendedPersistentDataContainerFactoryProxy.kt b/eco-core/core-proxy/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/ExtendedPersistentDataContainerFactoryProxy.kt index af2eccd9..b1ca7397 100644 --- a/eco-core/core-proxy/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/ExtendedPersistentDataContainerFactoryProxy.kt +++ b/eco-core/core-proxy/src/main/kotlin/com/willfp/eco/internal/spigot/proxy/ExtendedPersistentDataContainerFactoryProxy.kt @@ -5,4 +5,5 @@ import org.bukkit.persistence.PersistentDataContainer interface ExtendedPersistentDataContainerFactoryProxy { fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer + fun newPdc(): PersistentDataContainer }