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

68 lines
1.9 KiB
Kotlin
Raw Normal View History

2022-06-18 05:23:22 +00:00
package dev.plex.shop.item
import dev.plex.cache.DataUtils
import dev.plex.listener.PlexListener
2022-06-18 05:23:22 +00:00
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
2022-06-18 05:23:22 +00:00
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.ItemMeta
import org.bukkit.persistence.PersistentDataContainer
2022-06-18 05:23:22 +00:00
import java.util.concurrent.CompletableFuture
abstract class AbstractItem(val item: ItemStack, val cost: Double, val itemTag: NamespacedKey) : PlexListener()
2022-06-18 05:23:22 +00:00
{
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
}
2022-06-18 05:23:22 +00:00
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)
}
2022-06-18 05:23:22 +00:00
}