get(key: String, converter: TagConverter) : C? {
- val namespacedKey = NamespacedKey(Plugin, key)
+ override fun
get(id: Identifier, converter: TagConverter
): C? {
+ val namespacedKey = id.toNamespacedKey()
val container = getOrCreateBlockData()
- if (isNull(key)) storeNull(key)
+ if (isNull(id)) storeNull(id)
if (!container.has(namespacedKey)) return null
- val value = container.getPrimitiveValue(converter.primitiveClass, key)
+ val value = container.getPrimitiveValue(converter.primitiveClass, id)
return converter.fromPrimitive(value!!)
}
- private fun getOrCreateBlockData() : PersistentDataContainer {
+ private fun getOrCreateBlockData(): PersistentDataContainer {
val blockKey = getBlockKey()
if (!rootContainer.has(blockKey)) {
val blockDataContainer = rootContainer.adapterContext.newPersistentDataContainer()
@@ -49,17 +50,17 @@ public open class BlockDataTagContainer(public val block : Block) : TagContainer
?: error("Block data doesn't exist when it should?")
}
- override fun has(key: String): Boolean {
- return getOrCreateBlockData().has(NamespacedKey(Plugin, key))
+ override fun has(id: Identifier): Boolean {
+ return getOrCreateBlockData().has(id.toNamespacedKey())
}
- override fun isNull(key: String): Boolean {
+ override fun isNull(id: Identifier): Boolean {
val container = chunk.persistentDataContainer
- val namespacedKey = NamespacedKey(Plugin, key)
+ val namespacedKey = id.toNamespacedKey()
return PDCTagContainer.checkNull(container, namespacedKey)
}
- private fun getBlockKey() : NamespacedKey {
+ private fun getBlockKey(): NamespacedKey {
return NamespacedKey(Plugin, "CuTBlockData/${block.x}/${block.y}/${block.z}")
}
}
\ No newline at end of file
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemBehaviorTagContainer.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemBehaviorTagContainer.kt
index 9abd260..3d6a386 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemBehaviorTagContainer.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemBehaviorTagContainer.kt
@@ -1,6 +1,5 @@
package xyz.mastriel.cutapi.pdc.tags
-import org.bukkit.*
import org.bukkit.inventory.*
import org.bukkit.inventory.meta.*
import org.bukkit.persistence.*
@@ -11,41 +10,43 @@ import xyz.mastriel.cutapi.registry.*
public class ItemBehaviorTagContainer(private val itemStack: ItemStack, componentId: Identifier) : TagContainer {
- private val key = componentId.toString().replace(':', '.')
+ private val key = componentId
- override fun
set(key: String, complexValue: C?, converter: TagConverter
) {
+ private val behaviorsContainer = id(Plugin, "behaviors")
+
+ override fun
set(id: Identifier, complexValue: C?, converter: TagConverter
) {
val meta = itemStack.itemMeta
val container = getDataContainer(meta)
- val namespacedKey = NamespacedKey(Plugin, key)
+ val namespacedKey = id.toNamespacedKey();
if (complexValue == null) return container.remove(namespacedKey)
val primitiveValue = converter.toPrimitive(complexValue)
- container.setPrimitiveValue(converter.primitiveClass, key, primitiveValue)
+ container.setPrimitiveValue(converter.primitiveClass, id, primitiveValue)
setDataContainer(meta, container)
itemStack.itemMeta = meta
}
private fun getDataContainer(meta: ItemMeta): PersistentDataContainer {
- val componentsContainer = getOrCreateContainer(meta.persistentDataContainer, "CuTComponents")
+ val componentsContainer = getOrCreateContainer(meta.persistentDataContainer, behaviorsContainer)
return getOrCreateContainer(componentsContainer, key)
}
public fun setDataContainer(meta: ItemMeta, container: PersistentDataContainer) {
- val componentsContainer = getOrCreateContainer(meta.persistentDataContainer, "CuTComponents")
- componentsContainer.set(NamespacedKey(Plugin, key), PersistentDataType.TAG_CONTAINER, container)
+ val componentsContainer = getOrCreateContainer(meta.persistentDataContainer, behaviorsContainer)
+ componentsContainer.set(key.toNamespacedKey(), PersistentDataType.TAG_CONTAINER, container)
meta.persistentDataContainer.set(
- NamespacedKey(Plugin, "CuTComponents"),
+ behaviorsContainer.toNamespacedKey(),
PersistentDataType.TAG_CONTAINER,
componentsContainer
)
}
- private fun getOrCreateContainer(container: PersistentDataContainer, key: String): PersistentDataContainer {
- val namespacedKey = NamespacedKey(Plugin, key)
+ private fun getOrCreateContainer(container: PersistentDataContainer, id: Identifier): PersistentDataContainer {
+ val namespacedKey = id.toNamespacedKey()
if (container.has(namespacedKey)) return container.get(namespacedKey, PersistentDataType.TAG_CONTAINER)!!
val newContainer = container.adapterContext.newPersistentDataContainer()
@@ -54,25 +55,25 @@ public class ItemBehaviorTagContainer(private val itemStack: ItemStack, componen
}
@Suppress("DuplicatedCode")
- override fun
get(key: String, converter: TagConverter
): C? {
+ override fun
get(id: Identifier, converter: TagConverter
): C? {
val meta = itemStack.itemMeta
val container = getDataContainer(meta)
- if (isNull(key)) storeNull(key)
- val namespacedKey = NamespacedKey(Plugin, key)
+ if (isNull(id)) storeNull(id)
+ val namespacedKey = id.toNamespacedKey()
if (!container.has(namespacedKey)) return null
- val value = container.getPrimitiveValue(converter.primitiveClass, key)
+ val value = container.getPrimitiveValue(converter.primitiveClass, id)
return converter.fromPrimitive(value!!)
}
- override fun has(key: String): Boolean {
- return getDataContainer(itemStack.itemMeta).has(NamespacedKey(Plugin, key))
+ override fun has(id: Identifier): Boolean {
+ return getDataContainer(itemStack.itemMeta).has(id.toNamespacedKey())
}
- override fun isNull(key: String): Boolean {
+ override fun isNull(id: Identifier): Boolean {
val container = getDataContainer(itemStack.itemMeta)
- val namespacedKey = NamespacedKey(Plugin, key)
+ val namespacedKey = id.toNamespacedKey()
return PDCTagContainer.checkNull(container, namespacedKey)
}
}
\ No newline at end of file
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemTagContainer.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemTagContainer.kt
index 423042d..81a79d3 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemTagContainer.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/ItemTagContainer.kt
@@ -1,47 +1,46 @@
package xyz.mastriel.cutapi.pdc.tags
-import org.bukkit.*
import org.bukkit.inventory.*
-import xyz.mastriel.cutapi.*
import xyz.mastriel.cutapi.pdc.*
import xyz.mastriel.cutapi.pdc.tags.converters.*
+import xyz.mastriel.cutapi.registry.*
public open class ItemTagContainer(private val itemStack: ItemStack) : TagContainer {
- override fun set(key: String, complexValue: C?, converter: TagConverter) {
+ override fun
set(id: Identifier, complexValue: C?, converter: TagConverter
) {
val meta = itemStack.itemMeta
val container = meta.persistentDataContainer
- val namespacedKey = NamespacedKey(Plugin, key)
+ val namespacedKey = id.toNamespacedKey()
if (complexValue == null) return container.remove(namespacedKey)
val primitiveValue = converter.toPrimitive(complexValue)
- container.setPrimitiveValue(converter.primitiveClass, key, primitiveValue)
+ container.setPrimitiveValue(converter.primitiveClass, id, primitiveValue)
itemStack.itemMeta = meta
}
- override fun get(key: String, converter: TagConverter) : C? {
+ override fun
get(id: Identifier, converter: TagConverter
): C? {
val meta = itemStack.itemMeta
val container = meta.persistentDataContainer
- if (isNull(key)) storeNull(key)
- val namespacedKey = NamespacedKey(Plugin, key)
+ if (isNull(id)) storeNull(id)
+ val namespacedKey = id.toNamespacedKey()
if (!container.has(namespacedKey)) return null
- val value = container.getPrimitiveValue(converter.primitiveClass, key)
+ val value = container.getPrimitiveValue(converter.primitiveClass, id)
return converter.fromPrimitive(value!!)
}
- override fun has(key: String): Boolean {
- return itemStack.itemMeta.persistentDataContainer.has(NamespacedKey(Plugin, key))
+ override fun has(id: Identifier): Boolean {
+ return itemStack.itemMeta.persistentDataContainer.has(id.toNamespacedKey())
}
- override fun isNull(key: String): Boolean {
+ override fun isNull(id: Identifier): Boolean {
val container = itemStack.itemMeta.persistentDataContainer
- val namespacedKey = NamespacedKey(Plugin, key)
+ val namespacedKey = id.toNamespacedKey()
return PDCTagContainer.checkNull(container, namespacedKey)
}
}
\ No newline at end of file
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NotNullTag.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NotNullTag.kt
index 9f2cc92..52e13f8 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NotNullTag.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NotNullTag.kt
@@ -1,16 +1,17 @@
package xyz.mastriel.cutapi.pdc.tags
import xyz.mastriel.cutapi.pdc.tags.converters.*
+import xyz.mastriel.cutapi.registry.*
import kotlin.reflect.*
-public open class NotNullTag(
- override val key: String,
+public open class NotNullTag(
+ override val key: Identifier,
override var container: TagContainer,
override val default: C,
private val converter: TagConverter
) : Tag {
- private var cachedValue : C? = null
+ private var cachedValue: C? = null
override fun store(value: C) {
container.set(key, value, converter)
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NullableTag.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NullableTag.kt
index 63fb822..214d32a 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NullableTag.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/NullableTag.kt
@@ -1,16 +1,17 @@
package xyz.mastriel.cutapi.pdc.tags
import xyz.mastriel.cutapi.pdc.tags.converters.*
+import xyz.mastriel.cutapi.registry.*
import kotlin.reflect.*
public open class NullableTag(
- override val key: String,
+ override val key: Identifier,
override var container: TagContainer,
override val default: C?,
private val converter: TagConverter
) : Tag {
- private var cachedValue : C? = null
+ private var cachedValue: C? = null
override fun store(value: C?) {
if (value == null) return container.storeNull(key)
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/PDCTagContainer.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/PDCTagContainer.kt
index 580d150..3c9cf4b 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/PDCTagContainer.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/PDCTagContainer.kt
@@ -2,47 +2,44 @@ package xyz.mastriel.cutapi.pdc.tags
import org.bukkit.*
import org.bukkit.persistence.*
-import xyz.mastriel.cutapi.*
import xyz.mastriel.cutapi.pdc.*
import xyz.mastriel.cutapi.pdc.tags.converters.*
+import xyz.mastriel.cutapi.registry.*
public open class PDCTagContainer(public var container: PersistentDataContainer) : TagContainer {
- override fun set(key: String, complexValue: C?, converter: TagConverter) {
- val namespacedKey = NamespacedKey(Plugin, key)
- if (complexValue == null) return container.remove(namespacedKey)
+ override fun
set(id: Identifier, complexValue: C?, converter: TagConverter
) {
+ if (complexValue == null) return container.remove(id.toNamespacedKey())
val primitiveValue = converter.toPrimitive(complexValue)
- container.setPrimitiveValue(converter.primitiveClass, key, primitiveValue)
+ container.setPrimitiveValue(converter.primitiveClass, id, primitiveValue)
}
- override fun get(key: String, converter: TagConverter) : C? {
- val namespacedKey = NamespacedKey(Plugin, key)
- if (!container.has(namespacedKey)) return null
+ override fun
get(id: Identifier, converter: TagConverter
): C? {
+ if (!container.has(id.toNamespacedKey())) return null
- val value = container.getPrimitiveValue(converter.primitiveClass, key)
+ val value = container.getPrimitiveValue(converter.primitiveClass, id)
return converter.fromPrimitive(value!!)
}
- override fun has(key: String): Boolean {
- return container.has(NamespacedKey(Plugin, key))
+ override fun has(id: Identifier): Boolean {
+ return container.has(id.toNamespacedKey())
}
- override fun isNull(key: String): Boolean {
- val namespacedKey = NamespacedKey(Plugin, key)
- return checkNull(container, namespacedKey)
+ override fun isNull(id: Identifier): Boolean {
+ return checkNull(container, id.toNamespacedKey())
}
public companion object {
- public fun checkNull(container: PersistentDataContainer, namespacedKey: NamespacedKey) : Boolean {
+ public fun checkNull(container: PersistentDataContainer, namespacedKey: NamespacedKey): Boolean {
if (container.has(namespacedKey)) {
try {
return container.get(namespacedKey, PersistentDataType.STRING) == Tag.NULL
- // an IllegalArgumentException is thrown if the type isn't String.
+ // an IllegalArgumentException is thrown if the type isn't String.
} catch (ex: IllegalArgumentException) {
return false
}
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/Tag.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/Tag.kt
index 5943121..bb73977 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/Tag.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/Tag.kt
@@ -1,12 +1,14 @@
package xyz.mastriel.cutapi.pdc.tags
+import xyz.mastriel.cutapi.registry.*
+
public interface Tag {
public fun store(value: T)
public fun get(): T
public val default: T?
- public val key: String
+ public val key: Identifier
public var container: TagContainer
public companion object {
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagContainer.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagContainer.kt
index 9b927a5..6bacf27 100644
--- a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagContainer.kt
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagContainer.kt
@@ -13,245 +13,262 @@ import java.util.*
public interface TagContainer {
- public fun set(key: String, complexValue: C?, converter: TagConverter
)
+ public fun
set(id: Identifier, complexValue: C?, converter: TagConverter
)
- public fun
get(key: String, converter: TagConverter
): C?
+ public fun
get(id: Identifier, converter: TagConverter
): C?
- public fun has(key: String): Boolean
+ public fun has(id: Identifier): Boolean
- public fun storeNull(key: String) {
- set(key, Tag.NULL, PrimitiveTagConverter.String)
+ public fun storeNull(id: Identifier) {
+ set(id, Tag.NULL, PrimitiveTagConverter.String)
}
- public fun isNull(key: String): Boolean
-
-
+ public fun isNull(id: Identifier): Boolean
}
-public fun TagContainer.setPlayer(key: String, value: OfflinePlayer? = null): Unit =
+public fun TagContainer.setPlayer(key: Identifier, value: OfflinePlayer? = null): Unit =
set(key, value, PlayerTagConverter)
-public fun TagContainer.getPlayer(key: String): OfflinePlayer? =
+public fun TagContainer.getPlayer(key: Identifier): OfflinePlayer? =
get(key, PlayerTagConverter)
-public fun TagContainer.setString(key: String, value: String? = null): Unit =
+public fun TagContainer.setString(key: Identifier, value: String? = null): Unit =
set(key, value, PrimitiveTagConverter.String)
-public fun TagContainer.getString(key: String): String? =
+public fun TagContainer.getString(key: Identifier): String? =
get(key, PrimitiveTagConverter.String)
-public fun TagContainer.setInt(key: String, value: Int? = null): Unit =
+public fun TagContainer.setInt(key: Identifier, value: Int? = null): Unit =
set(key, value, PrimitiveTagConverter.Int)
-public fun TagContainer.getInt(key: String): Int? =
+public fun TagContainer.getInt(key: Identifier): Int? =
get(key, PrimitiveTagConverter.Int)
-public fun TagContainer.setLong(key: String, value: Long? = null): Unit =
+public fun TagContainer.setLong(key: Identifier, value: Long? = null): Unit =
set(key, value, PrimitiveTagConverter.Long)
-public fun TagContainer.getLong(key: String): Long? =
+public fun TagContainer.getLong(key: Identifier): Long? =
get(key, PrimitiveTagConverter.Long)
-public fun TagContainer.setFloat(key: String, value: Float? = null): Unit =
+public fun TagContainer.setFloat(key: Identifier, value: Float? = null): Unit =
set(key, value, PrimitiveTagConverter.Float)
-public fun TagContainer.getFloat(key: String): Float? =
+public fun TagContainer.getFloat(key: Identifier): Float? =
get(key, PrimitiveTagConverter.Float)
-public fun TagContainer.setDouble(key: String, value: Double? = null): Unit =
+public fun TagContainer.setDouble(key: Identifier, value: Double? = null): Unit =
set(key, value, PrimitiveTagConverter.Double)
-public fun TagContainer.getDouble(key: String): Double? =
+public fun TagContainer.getDouble(key: Identifier): Double? =
get(key, PrimitiveTagConverter.Double)
-public fun TagContainer.setBoolean(key: String, value: Boolean? = null): Unit =
+public fun TagContainer.setBoolean(key: Identifier, value: Boolean? = null): Unit =
set(key, value, BooleanTagConverter)
-public fun TagContainer.getBoolean(key: String): Boolean? =
+public fun TagContainer.getBoolean(key: Identifier): Boolean? =
get(key, BooleanTagConverter)
-public fun TagContainer.setUUID(key: String, value: UUID? = null): Unit =
+public fun TagContainer.setUUID(key: Identifier, value: UUID? = null): Unit =
set(key, value, UUIDTagConverter)
-public fun TagContainer.getUUID(key: String): UUID? =
+public fun TagContainer.getUUID(key: Identifier): UUID? =
get(key, UUIDTagConverter)
-public fun TagContainer.setIntArray(key: String, value: IntArray? = null): Unit =
+public fun TagContainer.setIntArray(key: Identifier, value: IntArray? = null): Unit =
set(key, value, PrimitiveTagConverter.IntArray)
-public fun TagContainer.getIntArray(key: String): IntArray? =
+public fun TagContainer.getIntArray(key: Identifier): IntArray? =
get(key, PrimitiveTagConverter.IntArray)
-public fun TagContainer.setByteArray(key: String, value: ByteArray? = null): Unit =
+public fun TagContainer.setByteArray(key: Identifier, value: ByteArray? = null): Unit =
set(key, value, PrimitiveTagConverter.ByteArray)
-public fun TagContainer.getByteArray(key: String): ByteArray? =
+public fun TagContainer.getByteArray(key: Identifier): ByteArray? =
get(key, PrimitiveTagConverter.ByteArray)
-public fun TagContainer.setByte(key: String, value: Byte? = null): Unit =
+public fun TagContainer.setByte(key: Identifier, value: Byte? = null): Unit =
set(key, value, PrimitiveTagConverter.Byte)
-public fun TagContainer.getByte(key: String): Byte? =
+public fun TagContainer.getByte(key: Identifier): Byte? =
get(key, PrimitiveTagConverter.Byte)
-public fun TagContainer.setShort(key: String, value: Short? = null): Unit =
+public fun TagContainer.setShort(key: Identifier, value: Short? = null): Unit =
set(key, value, PrimitiveTagConverter.Short)
-public fun TagContainer.getShort(key: String): Short? =
+public fun TagContainer.getShort(key: Identifier): Short? =
get(key, PrimitiveTagConverter.Short)
-public fun TagContainer.setIdentifier(key: String, value: Identifier? = null): Unit =
+public fun TagContainer.setIdentifier(key: Identifier, value: Identifier? = null): Unit =
set(key, value, IdentifierTagConverter)
-public fun TagContainer.getIdentifier(key: String): Identifier? =
+public fun TagContainer.getIdentifier(key: Identifier): Identifier? =
get(key, IdentifierTagConverter)
-public fun TagContainer.setLocation(key: String, value: Location? = null): Unit =
+public fun TagContainer.setLocation(key: Identifier, value: Location? = null): Unit =
set(key, value, ObjectTagConverter(Location::class, LocationSerializer))
-public fun TagContainer.getLocation(key: String): Location? =
+public fun TagContainer.getLocation(key: Identifier): Location? =
get(key, ObjectTagConverter(Location::class, LocationSerializer))
-public inline fun TagContainer.setResourceRef(key: String, value: ResourceRef? = null): Unit =
+public inline fun TagContainer.setResourceRef(
+ key: Identifier,
+ value: ResourceRef? = null
+): Unit =
set(key, value, ResourceRefTagConverter())
-public inline fun TagContainer.getResourceRef(key: String): ResourceRef? =
+public inline fun TagContainer.getResourceRef(key: Identifier): ResourceRef? =
get(key, ResourceRefTagConverter())
-public fun TagContainer.playerTag(key: String, default: OfflinePlayer): NotNullTag =
+public fun TagContainer.playerTag(key: Identifier, default: OfflinePlayer): NotNullTag =
NotNullTag(key, this, default, PlayerTagConverter)
-public fun TagContainer.nullablePlayerTag(key: String, default: OfflinePlayer? = null): NullableTag =
+public fun TagContainer.nullablePlayerTag(
+ key: Identifier,
+ default: OfflinePlayer? = null
+): NullableTag =
NullableTag(key, this, default, PlayerTagConverter)
-public fun TagContainer.identifierTag(key: String, default: Identifier): NotNullTag =
+public fun TagContainer.identifierTag(key: Identifier, default: Identifier): NotNullTag =
NotNullTag(key, this, default, IdentifierTagConverter)
-public fun TagContainer.nullableIdentifierTag(key: String, default: Identifier? = null): NullableTag =
+public fun TagContainer.nullableIdentifierTag(
+ key: Identifier,
+ default: Identifier? = null
+): NullableTag =
NullableTag(key, this, default, IdentifierTagConverter)
-public fun TagContainer.customItemTag(key: String, default: CustomItem<*>): NotNullTag> =
+public fun TagContainer.customItemTag(key: Identifier, default: CustomItem<*>): NotNullTag> =
NotNullTag(key, this, default, IdentifiableTagConverter.CustomItem)
public fun TagContainer.nullableCustomItemTag(
- key: String,
+ key: Identifier,
default: CustomItem<*>? = null
): NullableTag> =
NullableTag(key, this, default, IdentifiableTagConverter.CustomItem)
-public fun TagContainer.customBlockTag(key: String, default: CustomBlock<*>): NotNullTag> =
+public fun TagContainer.customBlockTag(key: Identifier, default: CustomBlock<*>): NotNullTag> =
NotNullTag(key, this, default, IdentifiableTagConverter.CustomBlock)
public fun TagContainer.nullableCustomBlockTag(
- key: String,
+ key: Identifier,
default: CustomBlock<*>? = null
): NullableTag> =
NullableTag(key, this, default, IdentifiableTagConverter.CustomBlock)
-public fun TagContainer.customBlockTag(key: String, default: CustomTile<*>): NotNullTag> =
+public fun TagContainer.customBlockTag(key: Identifier, default: CustomTile<*>): NotNullTag> =
NotNullTag(key, this, default, IdentifiableTagConverter.CustomTile)
public fun TagContainer.nullableCustomBlockTag(
- key: String,
+ key: Identifier,
default: CustomTile<*>? = null
): NullableTag> =
NullableTag(key, this, default, IdentifiableTagConverter.CustomTile)
public fun TagContainer.customTileEntityTag(
- key: String,
+ key: Identifier,
default: CustomTileEntity<*>
): NotNullTag> =
NotNullTag(key, this, default, IdentifiableTagConverter.CustomTileEntity)
public fun TagContainer.nullableTileEntityTag(
- key: String,
+ key: Identifier,
default: CustomTileEntity<*>? = null
): NullableTag> =
NullableTag(key, this, default, IdentifiableTagConverter.CustomTileEntity)
-public fun TagContainer.stringTag(key: String, default: String): NotNullTag =
+public fun TagContainer.stringTag(key: Identifier, default: String): NotNullTag =
NotNullTag(key, this, default, PrimitiveTagConverter.String)
-public fun TagContainer.nullableStringTag(key: String, default: String? = null): NullableTag =
+public fun TagContainer.nullableStringTag(key: Identifier, default: String? = null): NullableTag =
NullableTag(key, this, default, PrimitiveTagConverter.String)
-public fun TagContainer.doubleTag(key: String, default: Double): NotNullTag =
+public fun TagContainer.doubleTag(key: Identifier, default: Double): NotNullTag =
NotNullTag(key, this, default, PrimitiveTagConverter.Double)
-public fun TagContainer.nullableDoubleTag(key: String, default: Double? = null): NullableTag =
+public fun TagContainer.nullableDoubleTag(key: Identifier, default: Double? = null): NullableTag =
NullableTag(key, this, default, PrimitiveTagConverter.Double)
-public fun TagContainer.longTag(key: String, default: Long): NotNullTag =
+public fun TagContainer.longTag(key: Identifier, default: Long): NotNullTag =
NotNullTag(key, this, default, PrimitiveTagConverter.Long)
-public fun TagContainer.nullableLongTag(key: String, default: Long? = null): NullableTag =
+public fun TagContainer.nullableLongTag(key: Identifier, default: Long? = null): NullableTag =
NullableTag(key, this, default, PrimitiveTagConverter.Long)
-public fun TagContainer.intTag(key: String, default: Int): NotNullTag =
+public fun TagContainer.intTag(key: Identifier, default: Int): NotNullTag =
NotNullTag(key, this, default, PrimitiveTagConverter.Int)
-public fun TagContainer.nullableIntTag(key: String, default: Int? = null): NullableTag =
+public fun TagContainer.nullableIntTag(key: Identifier, default: Int? = null): NullableTag =
NullableTag(key, this, default, PrimitiveTagConverter.Int)
-public fun TagContainer.booleanTag(key: String, default: Boolean): NotNullTag =
+public fun TagContainer.booleanTag(key: Identifier, default: Boolean): NotNullTag =
NotNullTag(key, this, default, BooleanTagConverter)
-public fun TagContainer.nullableBooleanTag(key: String, default: Boolean? = null): NullableTag =
+public fun TagContainer.nullableBooleanTag(key: Identifier, default: Boolean? = null): NullableTag =
NullableTag(key, this, default, BooleanTagConverter)
-public fun TagContainer.uuidTag(key: String, default: UUID): NotNullTag =
+public fun TagContainer.uuidTag(key: Identifier, default: UUID): NotNullTag =
NotNullTag(key, this, default, UUIDTagConverter)
-public fun TagContainer.nullableUuidTag(key: String, default: UUID? = null): NullableTag =
+public fun TagContainer.nullableUuidTag(key: Identifier, default: UUID? = null): NullableTag =
NullableTag(key, this, default, UUIDTagConverter)
-public fun TagContainer.locationTag(key: String, default: Location): NotNullTag =
+public fun TagContainer.locationTag(key: Identifier, default: Location): NotNullTag =
objectTag(key, default, LocationSerializer)
-public fun TagContainer.nullableLocationTag(key: String, default: Location? = null): NullableTag =
+public fun TagContainer.nullableLocationTag(
+ key: Identifier,
+ default: Location? = null
+): NullableTag =
nullableObjectTag(key, default, LocationSerializer)
-public inline fun > TagContainer.enumTag(key: String, default: T): NotNullTag =
+public inline fun > TagContainer.enumTag(key: Identifier, default: T): NotNullTag =
NotNullTag(key, this, default, EnumTagConverter(T::class))
-public inline fun > TagContainer.nullableEnumTag(key: String, default: T? = null): NullableTag =
+public inline fun > TagContainer.nullableEnumTag(
+ key: Identifier,
+ default: T? = null
+): NullableTag =
NullableTag(key, this, default, EnumTagConverter(T::class))
public inline fun TagContainer.refTag(
- key: String,
+ key: Identifier,
default: ResourceRef
): NotNullTag> =
NotNullTag(key, this, default, ResourceRefTagConverter())
public inline fun TagContainer.nullableRefTag(
- key: String,
+ key: Identifier,
default: ResourceRef? = null
): NullableTag> =
NullableTag(key, this, default, ResourceRefTagConverter())
public inline fun TagContainer.objectTag(
- key: String,
+ key: Identifier,
default: T,
serializer: KSerializer
): NotNullTag =
NotNullTag(key, this, default, ObjectTagConverter(T::class, serializer))
public inline fun TagContainer.nullableObjectTag(
- key: String,
+ key: Identifier,
default: T?,
serializer: KSerializer
): NullableTag =
NullableTag(key, this, default, ObjectTagConverter(T::class, serializer))
-public inline fun > TagContainer.setEnum(key: String, value: T? = null): Unit =
+public inline fun > TagContainer.setEnum(key: Identifier, value: T? = null): Unit =
set(key, value, EnumTagConverter(T::class))
-public inline fun > TagContainer.getEnum(key: String): T? =
+public inline fun > TagContainer.getEnum(key: Identifier): T? =
get(key, EnumTagConverter(T::class))
-public inline fun TagContainer.setObject(key: String, value: T? = null, serializer: KSerializer): Unit =
+public inline fun TagContainer.setObject(
+ key: Identifier,
+ value: T? = null,
+ serializer: KSerializer
+): Unit =
set(key, value, ObjectTagConverter(T::class, serializer))
-public inline fun TagContainer.getObject(key: String, serializer: KSerializer): T? =
+public inline fun TagContainer.getObject(key: Identifier, serializer: KSerializer): T? =
get(key, ObjectTagConverter(T::class, serializer))
diff --git a/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagRef.kt b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagRef.kt
new file mode 100644
index 0000000..146207b
--- /dev/null
+++ b/src/main/kotlin/xyz/mastriel/cutapi/pdc/tags/TagRef.kt
@@ -0,0 +1,50 @@
+package xyz.mastriel.cutapi.pdc.tags
+
+import kotlinx.serialization.*
+import xyz.mastriel.cutapi.*
+import xyz.mastriel.cutapi.pdc.tags.converters.*
+import xyz.mastriel.cutapi.registry.*
+
+/**
+ * A reference to a tag of type T.
+ */
+public interface TagRef {
+ public val id: Identifier
+
+ public val converter: TagConverter<*, T>
+}
+
+private class TagRefImpl(
+ override val id: Identifier,
+ override val converter: TagConverter<*, T>
+) : TagRef {
+
+}
+
+public fun > tagRef(id: Identifier, type: C): TagRef {
+ return TagRefImpl(id, type)
+}
+
+public fun > tagRef(namespace: CuTPlugin, name: String, type: C): TagRef {
+ return tagRef(id(namespace, name), type)
+}
+
+public inline fun objectTagRef(
+ namespace: CuTPlugin,
+ name: String,
+ serializer: KSerializer
+): TagRef {
+ return tagRef(id(namespace, name), ObjectTagConverter(T::class, serializer))
+}
+
+public fun TagRef.toIdentifier(): Identifier {
+ return this.id
+}
+
+public fun