diff --git a/eco-api/src/main/java/com/willfp/eco/core/gui/menu/Menu.java b/eco-api/src/main/java/com/willfp/eco/core/gui/menu/Menu.java index 62a3e5cc..fddc8745 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/gui/menu/Menu.java +++ b/eco-api/src/main/java/com/willfp/eco/core/gui/menu/Menu.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -59,6 +60,37 @@ public interface Menu { */ List getCaptiveItems(@NotNull Player player); + /** + * Add state for a player. + * + * @param player The player. + * @param key The key. + * @param value The state. + */ + void addState(@NotNull Player player, + @NotNull String key, + @Nullable Object value); + + + /** + * Get state for a player. + * + * @param player The player. + * @param key The key. + * @param The type of state. + * @return The value. + */ + @Nullable T getState(@NotNull Player player, + @NotNull String key); + + /** + * Get state for a player. + * + * @param player The player. + * @return The state. + */ + Map getState(@NotNull Player player); + /** * Write data. * @@ -68,7 +100,9 @@ public interface Menu { * @param value The value. * @param The type. * @param The type. + * @deprecated Use addState instead. */ + @Deprecated(since = "6.35.0", forRemoval = true) void writeData(@NotNull Player player, @NotNull NamespacedKey key, @NotNull PersistentDataType type, @@ -83,7 +117,9 @@ public interface Menu { * @param The type. * @param The type. * @return The data. + * @deprecated Use getState instead. */ + @Deprecated(since = "6.35.0", forRemoval = true) @Nullable T readData(@NotNull Player player, @NotNull NamespacedKey key, @NotNull PersistentDataType type); @@ -93,7 +129,9 @@ public interface Menu { * * @param player The player. * @return The keys. + * @deprecated Use getState instead. */ + @Deprecated(since = "6.35.0", forRemoval = true) Set getKeys(@NotNull Player player); /** diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenu.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenu.kt index 09596c96..12d0cc16 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenu.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/EcoMenu.kt @@ -4,6 +4,7 @@ import com.willfp.eco.core.gui.menu.CloseHandler import com.willfp.eco.core.gui.menu.Menu import com.willfp.eco.core.gui.slot.Slot import com.willfp.eco.internal.gui.slot.EcoSlot +import com.willfp.eco.util.NamespacedKeyUtils import org.bukkit.Bukkit import org.bukkit.NamespacedKey import org.bukkit.entity.Player @@ -73,20 +74,30 @@ class EcoMenu( key: NamespacedKey, type: PersistentDataType, value: Z - ) { - val inventory = player.openInventory.topInventory.asRenderedInventory() ?: return - inventory.data[key] = value - inventory.render() - } + ) = addState(player, key.toString(), value) - override fun readData(player: Player, key: NamespacedKey, type: PersistentDataType): T? { - val inventory = player.openInventory.topInventory.asRenderedInventory() ?: return null - return inventory.data[key] as? T? - } + override fun readData(player: Player, key: NamespacedKey, type: PersistentDataType): T? = + getState(player, key.toString()) override fun getKeys(player: Player): Set { val inventory = player.openInventory.topInventory.asRenderedInventory() ?: return emptySet() - return inventory.data.keys + return inventory.state.keys.mapNotNull { NamespacedKeyUtils.fromStringOrNull(it) }.toSet() + } + + override fun addState(player: Player, key: String, value: Any?) { + val inventory = player.openInventory.topInventory.asRenderedInventory() ?: return + inventory.state[key] = value + inventory.render() + } + + override fun getState(player: Player): Map { + val inventory = player.openInventory.topInventory.asRenderedInventory() ?: return emptyMap() + return inventory.state.toMap() + } + + override fun getState(player: Player, key: String): T? { + val inventory = player.openInventory.topInventory.asRenderedInventory() ?: return null + return inventory.state[key] as? T? } override fun refresh(player: Player) { diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/MenuRenderedInventory.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/MenuRenderedInventory.kt index c5adb0bc..8c6da7ff 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/MenuRenderedInventory.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/gui/menu/MenuRenderedInventory.kt @@ -1,7 +1,6 @@ package com.willfp.eco.internal.gui.menu import com.willfp.eco.util.MenuUtils -import org.bukkit.NamespacedKey import org.bukkit.entity.Player import org.bukkit.inventory.Inventory import org.bukkit.inventory.ItemStack @@ -12,7 +11,7 @@ class MenuRenderedInventory( val player: Player ) { val captiveItems = mutableListOf() - val data = mutableMapOf() + val state = mutableMapOf() fun render() { generateCaptive()