Module-Shop/src/main/java/dev/plex/shop/ShopMenu.kt

69 lines
2.5 KiB
Kotlin

package dev.plex.shop
import com.google.common.collect.Lists
import com.google.common.collect.Maps
import dev.plex.Plex
import dev.plex.ShopModule
import dev.plex.player.PlexPlayer
import dev.plex.shop.item.AbstractItem
import dev.plex.util.item.ItemBuilder
import dev.plex.util.minimessage.SafeMiniMessage
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import org.bukkit.Bukkit
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.entity.Player
import org.bukkit.inventory.Inventory
import org.bukkit.inventory.meta.ItemMeta
import org.bukkit.persistence.PersistentDataContainer
import org.bukkit.persistence.PersistentDataType
/**
* @author Taah
* @project plex-shop
* @since 11:21 PM [10-06-2022]
*
*/
class ShopMenu
{
companion object
{
val ITEMS: HashMap<Int, AbstractItem> = Maps.newHashMap()
fun registerItem(index: Int, item: AbstractItem)
{
val meta: ItemMeta = item.item.itemMeta
val dataContainer: PersistentDataContainer = meta.persistentDataContainer
dataContainer.set(item.itemTag, PersistentDataType.STRING, item.itemTag.key)
val lore = meta.lore() ?: Lists.newArrayList()
lore.add(Component.empty())
lore.add(MiniMessage.miniMessage().deserialize("<!italic><gold>Price: ${item.cost}"))
meta.lore(lore)
item.item.itemMeta = meta
ITEMS[index] = item;
ShopModule.get().registerListener(item)
}
fun open(plexPlayer: PlexPlayer)
{
val player: Player? = plexPlayer.player
val inventory: Inventory = constructInventory(plexPlayer)
player?.openInventory(inventory)
}
private fun constructInventory(plexPlayer: PlexPlayer): Inventory
{
val inventory: Inventory = Bukkit.createInventory(null, 54, SafeMiniMessage.mmDeserialize("<gold>Shop"))
ITEMS.forEach { (t, u) -> inventory.setItem(t, u.item) }
for (i in 0 until inventory.size)
{
if (inventory.getItem(i) == null || inventory.getItem(i)?.type == Material.AIR)
{
inventory.setItem(i, ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).displayName(SafeMiniMessage.mmDeserialize("<!italic> ")).build())
}
}
inventory.setItem(53, ItemBuilder(Material.SUNFLOWER).displayName(SafeMiniMessage.mmDeserialize("<!italic>${plexPlayer.coins} Coins")).build())
return inventory
}
}
}