From a5a7a6dff6aad09083745e3b4b2586e2a666d384 Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Wed, 28 Oct 2020 21:14:00 +0100 Subject: [PATCH] Create MinecraftObjectMarker.kt --- .../kspigot/utils/MinecraftObjectMarker.kt | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/kotlin/net/axay/kspigot/utils/MinecraftObjectMarker.kt diff --git a/src/main/kotlin/net/axay/kspigot/utils/MinecraftObjectMarker.kt b/src/main/kotlin/net/axay/kspigot/utils/MinecraftObjectMarker.kt new file mode 100644 index 00000000..a21c2ced --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/utils/MinecraftObjectMarker.kt @@ -0,0 +1,50 @@ +package net.axay.kspigot.utils + +import net.axay.kspigot.extensions.pluginKey +import net.axay.kspigot.items.meta +import org.bukkit.inventory.ItemStack +import org.bukkit.persistence.PersistentDataHolder +import org.bukkit.persistence.PersistentDataType + +private fun markerKey(key: String) = pluginKey("kspigot_marker_$key") + +/** + * Marks this object with the given [key]. + * This is persistent. + * + * This function makes sure that there are no + * conflicts with other plugins, therefore even simple + * keys are safe. + */ +fun PersistentDataHolder.mark(key: String) { + persistentDataContainer[markerKey(key), PersistentDataType.BYTE] = 1.toByte() +} + +/** + * Removes the given [key] from this objects' + * markings. + */ +fun PersistentDataHolder.unmark(key: String) { + persistentDataContainer.remove(markerKey(key)) +} + +/** + * @return True, if the given [key] is among + * this objects' markings. + */ +fun PersistentDataHolder.hasMark(key: String) = persistentDataContainer.has(markerKey(key), PersistentDataType.BYTE) + +// quick access for ItemStacks + +/** @see PersistentDataHolder.mark */ +fun ItemStack.mark(key: String) = meta { mark(key) } + +/** @see PersistentDataHolder.unmark */ +fun ItemStack.unmark(key: String) = meta { unmark(key) } + +/** @see PersistentDataHolder.hasMark */ +fun ItemStack.hasMark(key: String): Boolean { + var result: Boolean = false + meta { result = hasMark(key) } + return result +} \ No newline at end of file