Zaphkiel provides a complete set of API interfaces, allowing other plugin developers to easily integrate and use Zaphkiel's item system. Through the API, you can create, manage, and manipulate custom items, as well as listen to related events.
val itemUpdater = Zaphkiel.api().getItemUpdater()// Check inventory for updatesitemUpdater.checkUpdate(player, inventory)// Check single item for updatesval updatedStream = itemUpdater.checkUpdate(player, itemStack)
fun handlePlayerInteract(player: Player, itemStack: ItemStack) { val itemHandler = Zaphkiel.api().getItemHandler() // Check if it is a Zaphkiel item val itemId = itemHandler.getItemId(itemStack) if (itemId != null) { // Obtain item instance val item = itemHandler.getItem(itemStack) // Obtain item data val itemData = itemHandler.getItemData(itemStack) // Execute custom logic player.sendMessage("You used a Zaphkiel item: $itemId") }}
fun checkAndUpdateItems(player: Player) { val itemUpdater = Zaphkiel.api().getItemUpdater() // Check entire inventory itemUpdater.checkUpdate(player, player.inventory) // Or check specific item val mainHand = player.inventory.itemInMainHand if (!mainHand.type.isAir) { val updatedStream = itemUpdater.checkUpdate(player, mainHand) // The updated item stream can be further processed }}
fun customItemOperations(player: Player, itemId: String) { val itemManager = Zaphkiel.api().getItemManager() val item = itemManager.getItemMap()[itemId] ?: return // Check if player has the item if (item.hasItem(player, 1)) { // Remove item if (item.takeItem(player, 1)) { player.sendMessage("Item removed") } } // Give item (handle overflow) item.giveItem(player, 1) { overflow -> overflow.forEach { item -> player.world.dropItem(player.location, item) } } // Give item or drop if inventory is full item.giveItemOrDrop(player, 1)}
@EventHandlerfun onItemBuild(event: ItemBuildEvent) { val item = event.item val player = event.player val itemStream = event.itemStream // Execute custom logic when item is built if (item.id == "special_item") { // Modify item stream itemStream.getZaphkielData().putDeep("custom.property", ItemTagData("value")) }}@EventHandlerfun onItemRelease(event: ItemReleaseEvent) { val itemStream = event.itemStream val player = event.player // Execute logic when item is released val itemId = itemStream.getZaphkielItem().id player.sendMessage("Released item: $itemId")}
try { val itemStream = itemHandler.read(itemStack) // Process the item stream} catch (e: Exception) { // Handle exceptions (may not be a Zaphkiel item)}