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

68 lines
1.9 KiB
Kotlin

package dev.plex.shop.item
import dev.plex.cache.DataUtils
import dev.plex.listener.PlexListener
import dev.plex.player.PlexPlayer
import dev.plex.util.PlexLog
import dev.plex.util.minimessage.SafeMiniMessage
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.event.EventHandler
import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.inventory.EquipmentSlot
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.ItemMeta
import org.bukkit.persistence.PersistentDataContainer
import java.util.concurrent.CompletableFuture
abstract class AbstractItem(val item: ItemStack, val cost: Double, val itemTag: NamespacedKey) : PlexListener()
{
fun purchase(player: PlexPlayer)
{
if (player.coins < this.cost) {
player.player?.sendMessage(SafeMiniMessage.mmDeserialize("<red>You need ${this.cost - player.coins} more coins to purchase this!"))
return
}
if (player.player?.inventory!!.filter { it?.type != Material.AIR }.size == 53)
{
player.player?.sendMessage(SafeMiniMessage.mmDeserialize("<red>Your inventory is currently full!"))
return
}
player.coins.minus(this.cost);
player.player?.inventory?.addItem(this.item);
CompletableFuture.runAsync {
DataUtils.update(player);
}
}
abstract fun interact(event: PlayerInteractEvent)
@EventHandler
fun onInteract(event: PlayerInteractEvent)
{
if (event.hand != EquipmentSlot.HAND)
{
return
}
if (event.item == null)
{
return
}
if (!event.item!!.hasItemMeta())
{
return
}
val meta: ItemMeta = event.item!!.itemMeta
val dataContainer: PersistentDataContainer = meta.persistentDataContainer
if (!dataContainer.has(itemTag))
{
return
}
interact(event)
}
}