package club.mcscrims.speedhg.util import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.TextDecoration import net.kyori.adventure.text.minimessage.MiniMessage import org.bukkit.Material import org.bukkit.NamespacedKey import org.bukkit.enchantments.Enchantment import org.bukkit.inventory.ItemFlag import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataType class ItemBuilder( private val itemStack: ItemStack ) { private val mm = MiniMessage.miniMessage() constructor( type: Material ) : this( ItemStack( type ) ) constructor( type: Material, amount: Int ) : this( ItemStack( type, amount ) ) constructor() : this( ItemStack( Material.STONE ) ) fun name( name: String ): ItemBuilder { itemStack.editMeta { it.displayName(mm.deserialize( name )) } return this } fun name( name: Component ): ItemBuilder { itemStack.editMeta { it.displayName( name ) } return this } fun lore( lore: List ): ItemBuilder { itemStack.editMeta { meta -> meta.lore(lore.map { line -> mm.deserialize( line ).decoration( TextDecoration.ITALIC, false ) }) } return this } fun unbreakable( unbreakable: Boolean ): ItemBuilder { itemStack.editMeta { it.isUnbreakable = unbreakable } return this } fun amount( amount: Int ): ItemBuilder { itemStack.amount = amount return this } fun pdc( key: NamespacedKey, dataType: PersistentDataType, value: Z ): ItemBuilder { itemStack.editMeta { it.persistentDataContainer.set( key, dataType, value!! ) } return this } fun enchant( ench: Enchantment ): ItemBuilder { enchant( ench, 1 ) return this } fun enchant( ench: Enchantment, level: Int ): ItemBuilder { itemStack.editMeta { it.addEnchant( ench, level, true ) } itemFlag( ItemFlag.HIDE_ENCHANTS ) return this } fun itemFlag( flag: ItemFlag ): ItemBuilder { itemStack.editMeta { it.addItemFlags( flag ) } return this } fun build(): ItemStack { return itemStack } }