Item.kt
Branches > main > 743d568 > files / src / main / kotlin / net / bowmap / server / item / Item.kt
package net.bowmap.server.item
import net.kyori.adventure.text.Component
import org.bukkit.inventory.ItemStack
import org.bukkit.Material
import kotlinx.collections.immutable.*
// Bowmap's Item type
// Either a material or a custommodeldata
data class Texture(val material: Material? = null, val customModelData: Int? = null) {
init {
require(material != null || customModelData != null) { "Texture requires either a material or custom model data" }
}
}
data class Item(
val material: Material,
val amount: Int = 1,
val texture: Texture = Texture(material = material),
val name: Component,
val lore: PersistentList<Component> = persistentListOf()
)
fun toItemStack(item: Item): ItemStack {
// TODO custommodeldata
val itemStack = ItemStack(item.material, item.amount)
val meta = itemStack.getItemMeta()
// itemName is not editable via an anvil, which is the desired behavior
// TODO make sure its not italics!
meta.itemName(item.name)
if (item.lore.isNotEmpty()) {
// TODO Make sure it's not purple and italics...
meta.lore(item.lore)
}
itemStack.setItemMeta(meta)
return itemStack
}
fun toItem(itemStack: ItemStack): Item {
// TODO custommodeldata
// See the above itemName comment
val meta = itemStack.getItemMeta()
val lore = meta.lore()?.toPersistentList() ?: persistentListOf()
return Item(
material = itemStack.type,
amount = itemStack.amount,
name = meta.itemName(),
lore = lore
)
}