# Inventory DSL ## Directives ### Inventory * `inventory(size, title, body)` * `inventory(type, title, body)` * `inventory(inventory, title, body)` ### Block * `section(fromPoint, toPoint, body)` * `row(index, body)` * `rowFromLast(index, body)` = `row(rowCount - index, body)` * `firstRow(body)` * `lastRow(body)` * `column(index, body)` * `columnFromLast(index, body)` = `column(columnCount - index, body)` * `firstColumn(body)` * `lastColumn(body)` ### Item * `item(slot, itemStack)` * `item(slot, itemStack with action)` * `itemFromLast(slot, itemStack)` = `item(slotCount - slot, itemStack)` * `itemFromLast(slot, itemStack with action)` = `item(slotCount - slot, itemStack)` * `fill(itemStack)` * `fill(itemStack with action)` * `clear()` = `fill { ItemStack(Material.AIR) }` * `empty(slot)` = `item(slot) { ItemStack(Material.AIR) }` ## Predefined Actions * `Actions.navigateTo(inventory, flushHistory = false)` * `infix fun ItemStack.navigatesTo(inventory)` * `infix fun ItemStack.forceNavigatesTo(inventory)` * `Actions.navigateBack()` * `fun ItemStack.navigatesBack()` * `Actions.close()` * `fun ItemStack.closes()` ## Example ```kotlin= val borderItem = ItemStack(Material.STAINED_GLASS_PANE, ...) val placeholderItem = ItemStack(Material.BARRIER, ...) val backItem = ItemStack(Material.SLIME_BALL, ...) val navigateBack: (Player) -> Boolean = { context, player -> context.navigateBack() return true } // ... inventory(player, size, title) { firstRow { borderItem } section(Point(0, 1) to Point(9, 2)) { firstColumn { borderItem } fill { placeholderItem } lastColumn { borderItem } } lastRow { fill { borderItem } item(1) { backItem withAction Actions.navigateBack() } } } ``` ```kotlin= val baseInventory: Inventory = // ... inventory(player, baseInventory) { section(fromSlot, toSlot) { clear() } lastRow { item(1) { backItem.navigatesBack() } } } ``` ```kotlin= inventory(player, type, title) { lastRow { itemFromLast(1) { backItem navigatesTo otherInventory } } } ```