Added ExtendedPersistentDataContainer.create
This commit is contained in:
@@ -282,7 +282,8 @@ public interface Handler {
|
|||||||
* @param <T> The mob type.
|
* @param <T> The mob type.
|
||||||
* @return The controlled entity.
|
* @return The controlled entity.
|
||||||
*/
|
*/
|
||||||
@NotNull <T extends Mob> EntityController<T> createEntityController(@NotNull T mob);
|
@NotNull
|
||||||
|
<T extends Mob> EntityController<T> createEntityController(@NotNull T mob);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapt base PDC to extended PDC.
|
* Adapt base PDC to extended PDC.
|
||||||
@@ -292,4 +293,12 @@ public interface Handler {
|
|||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
ExtendedPersistentDataContainer adaptPdc(@NotNull PersistentDataContainer container);
|
ExtendedPersistentDataContainer adaptPdc(@NotNull PersistentDataContainer container);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new PDC.
|
||||||
|
*
|
||||||
|
* @return The container.
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
PersistentDataContainer newPdc();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ public interface ExtendedPersistentDataContainer extends PersistentDataContainer
|
|||||||
* @param <Z> The type.
|
* @param <Z> The type.
|
||||||
* @return The value, or null if not found.
|
* @return The value, or null if not found.
|
||||||
*/
|
*/
|
||||||
@Nullable <T, Z> Z get(@NotNull String key, @NotNull PersistentDataType<T, Z> dataType);
|
@Nullable
|
||||||
|
<T, Z> Z get(@NotNull String key, @NotNull PersistentDataType<T, Z> dataType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a value or default if not present.
|
* Get a value or default if not present.
|
||||||
@@ -55,7 +56,8 @@ public interface ExtendedPersistentDataContainer extends PersistentDataContainer
|
|||||||
* @param <Z> The type.
|
* @param <Z> The type.
|
||||||
* @return The value, or the default if not found.
|
* @return The value, or the default if not found.
|
||||||
*/
|
*/
|
||||||
@NotNull <T, Z> Z getOrDefault(@NotNull String key, @NotNull PersistentDataType<T, Z> dataType, @NotNull Z defaultValue);
|
@NotNull
|
||||||
|
<T, Z> Z getOrDefault(@NotNull String key, @NotNull PersistentDataType<T, Z> dataType, @NotNull Z defaultValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all keys, including namespaced keys.
|
* Get all keys, including namespaced keys.
|
||||||
@@ -91,4 +93,13 @@ public interface ExtendedPersistentDataContainer extends PersistentDataContainer
|
|||||||
static ExtendedPersistentDataContainer wrap(@NotNull PersistentDataContainer base) {
|
static ExtendedPersistentDataContainer wrap(@NotNull PersistentDataContainer base) {
|
||||||
return Eco.getHandler().adaptPdc(base);
|
return Eco.getHandler().adaptPdc(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new extended container.
|
||||||
|
*
|
||||||
|
* @return The extended container.
|
||||||
|
*/
|
||||||
|
static ExtendedPersistentDataContainer create() {
|
||||||
|
return wrap(Eco.getHandler().newPdc());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.willfp.eco.core.items;
|
|||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
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.fast.FastItemStack;
|
||||||
import com.willfp.eco.core.items.args.LookupArgParser;
|
import com.willfp.eco.core.items.args.LookupArgParser;
|
||||||
import com.willfp.eco.core.items.provider.ItemProvider;
|
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.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.persistence.PersistentDataContainer;
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -28,7 +26,6 @@ import java.util.Arrays;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ import org.bukkit.persistence.PersistentDataContainer
|
|||||||
import org.bukkit.persistence.PersistentDataType
|
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
|
||||||
|
|
||||||
override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer {
|
override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer {
|
||||||
return when (pdc) {
|
return when (pdc) {
|
||||||
is ExtendedPersistentDataContainer -> 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
|
val handle: CraftPersistentDataContainer
|
||||||
) : ExtendedPersistentDataContainer, PersistentDataContainer by handle {
|
) : ExtendedPersistentDataContainer, PersistentDataContainer by handle {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -25,11 +34,6 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac
|
|||||||
CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags")
|
CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags")
|
||||||
.apply { isAccessible = true }.get(handle) as MutableMap<String, Tag>
|
.apply { isAccessible = true }.get(handle) as MutableMap<String, Tag>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
private val registry: CraftPersistentDataTypeRegistry =
|
|
||||||
CraftPersistentDataContainer::class.java.getDeclaredField("registry")
|
|
||||||
.apply { isAccessible = true }.get(handle) as CraftPersistentDataTypeRegistry
|
|
||||||
|
|
||||||
override fun <T : Any, Z : Any> set(key: String, dataType: PersistentDataType<T, Z>, value: Z) {
|
override fun <T : Any, Z : Any> set(key: String, dataType: PersistentDataType<T, Z>, value: Z) {
|
||||||
customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext))
|
customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ import org.bukkit.persistence.PersistentDataContainer
|
|||||||
import org.bukkit.persistence.PersistentDataType
|
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
|
||||||
|
|
||||||
override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer {
|
override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer {
|
||||||
return when (pdc) {
|
return when (pdc) {
|
||||||
is ExtendedPersistentDataContainer -> 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
|
val handle: CraftPersistentDataContainer
|
||||||
) : ExtendedPersistentDataContainer, PersistentDataContainer by handle {
|
) : ExtendedPersistentDataContainer, PersistentDataContainer by handle {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -25,11 +34,6 @@ class ExtendedPersistentDataContainerFactory : ExtendedPersistentDataContainerFa
|
|||||||
CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags")
|
CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags")
|
||||||
.apply { isAccessible = true }.get(handle) as MutableMap<String, Tag>
|
.apply { isAccessible = true }.get(handle) as MutableMap<String, Tag>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
private val registry: CraftPersistentDataTypeRegistry =
|
|
||||||
CraftPersistentDataContainer::class.java.getDeclaredField("registry")
|
|
||||||
.apply { isAccessible = true }.get(handle) as CraftPersistentDataTypeRegistry
|
|
||||||
|
|
||||||
override fun <T : Any, Z : Any> set(key: String, dataType: PersistentDataType<T, Z>, value: Z) {
|
override fun <T : Any, Z : Any> set(key: String, dataType: PersistentDataType<T, Z>, value: Z) {
|
||||||
customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext))
|
customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ import org.bukkit.persistence.PersistentDataContainer
|
|||||||
import org.bukkit.persistence.PersistentDataType
|
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
|
||||||
|
|
||||||
override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer {
|
override fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer {
|
||||||
return when (pdc) {
|
return when (pdc) {
|
||||||
is ExtendedPersistentDataContainer -> 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
|
val handle: CraftPersistentDataContainer
|
||||||
) : ExtendedPersistentDataContainer, PersistentDataContainer by handle {
|
) : ExtendedPersistentDataContainer, PersistentDataContainer by handle {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -25,11 +34,6 @@ class ExtendedPersistentDataContainerFactory: ExtendedPersistentDataContainerFac
|
|||||||
CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags")
|
CraftPersistentDataContainer::class.java.getDeclaredField("customDataTags")
|
||||||
.apply { isAccessible = true }.get(handle) as MutableMap<String, Tag>
|
.apply { isAccessible = true }.get(handle) as MutableMap<String, Tag>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
private val registry: CraftPersistentDataTypeRegistry =
|
|
||||||
CraftPersistentDataContainer::class.java.getDeclaredField("registry")
|
|
||||||
.apply { isAccessible = true }.get(handle) as CraftPersistentDataTypeRegistry
|
|
||||||
|
|
||||||
override fun <T : Any, Z : Any> set(key: String, dataType: PersistentDataType<T, Z>, value: Z) {
|
override fun <T : Any, Z : Any> set(key: String, dataType: PersistentDataType<T, Z>, value: Z) {
|
||||||
customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext))
|
customDataTags[key] = registry.wrap(dataType.primitiveType, dataType.toPrimitive(value, adapterContext))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,4 +156,7 @@ class EcoHandler : EcoSpigotPlugin(), Handler {
|
|||||||
|
|
||||||
override fun adaptPdc(container: PersistentDataContainer): ExtendedPersistentDataContainer =
|
override fun adaptPdc(container: PersistentDataContainer): ExtendedPersistentDataContainer =
|
||||||
getProxy(ExtendedPersistentDataContainerFactoryProxy::class.java).adapt(container)
|
getProxy(ExtendedPersistentDataContainerFactoryProxy::class.java).adapt(container)
|
||||||
|
|
||||||
|
override fun newPdc(): PersistentDataContainer =
|
||||||
|
getProxy(ExtendedPersistentDataContainerFactoryProxy::class.java).newPdc()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ import org.bukkit.persistence.PersistentDataContainer
|
|||||||
|
|
||||||
interface ExtendedPersistentDataContainerFactoryProxy {
|
interface ExtendedPersistentDataContainerFactoryProxy {
|
||||||
fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer
|
fun adapt(pdc: PersistentDataContainer): ExtendedPersistentDataContainer
|
||||||
|
fun newPdc(): PersistentDataContainer
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user