Inventory
Snapshot inventory bot pas dipanggil. Re-call client:inventory() (atau getInventory()) buat refresh — value-nya gak auto-update.
local client = getClient()
local inventory = client:inventory() -- atau getInventory()
inventory.slots -- jumlah slot total
inventory.items -- tabel di-key dengan inventory key
-- Lookup
inventory:getItem(invKey)
inventory:getItem(blockType, invType)
for invKey, item in pairs(inventory.items) do
item.id -- block type
item.type -- inventory item type (lihat di bawah)
item.amount
end
Constructors
getInventory()
| Field | Type |
|---|---|
| Signature | () → Inventory |
| Returns | Inventory — snapshot fresh dari cell parent bot |
| Common errors | "getInventory: no parent client" (skrip gak punya bot ke-bind), "getInventory: parent client not found" |
| Async | yes |
Shortcut buat getClient():inventory(). Bakal error kalau gak ada parent yang ke-bind (misal jalan dari global executor).
client:inventory()
| Field | Type |
|---|---|
| Signature | (self: Client) → Inventory |
| Returns | Inventory — snapshot dari cell bot ini |
| Async | yes |
Sama kayak getInventory() tapi bisa target bot tetangga yang di-resolve via getClient(key).
Fields
inventory.slots
| Field | Type |
|---|---|
| Signature | Inventory.slots: number |
| Returns | number — jumlah cell yang lagi kepake |
Protokol gak expose surface "max slot" terpisah — panggil client:expandInventory() buat nambahin.
inventory.items
| Field | Type |
|---|---|
| Signature | Inventory.items: {[number]: InventoryItem} |
| Returns | {[number]: InventoryItem} — cell di-key sama invKey = (inventory_type << 16) | block_id |
Key komposit ini bikin block_id yang sama bisa nempatin dua cell pas dia ada sebagai Block sekaligus Seed (misal Obsidian + Obsidian Seed).
for invKey, item in pairs(inventory.items) do
print(invKey, item.id, item.type, item.amount, item.name)
end
Lookups
inventory:getItem(invKey)
| Field | Type |
|---|---|
| Signature | (self: Inventory, invKey: number) → InventoryItem? |
| Returns | InventoryItem? — nil kalau gak ada cell yang match |
| Async | no |
local seedKey = (InventoryItemType.seed << 16) | 9 -- Obsidian Seed
local item = inventory:getItem(seedKey)
inventory:getItem(blockType, invType)
| Field | Type |
|---|---|
| Signature | (self: Inventory, blockType: number, invType: number) → InventoryItem? |
| Returns | InventoryItem? — nil kalau gak ada cell yang match |
| Async | no |
invType itu enum InventoryItemType mentah (0..12) — boundary udah handle packing upper-byte buat kamu, jadi getItem(9, InventoryItemType.seed) resolve ke cell Obsidian Seed.
local item = inventory:getItem(9, InventoryItemType.seed)
Field InventoryItem
| Field | Type | Catatan |
|---|---|---|
id | number | Block id (number yang sama yang kamu pass ke client:place). |
type | number | Enum InventoryItemType mentah (0..12), udah di-unpack. |
amount | number | Jumlah stack. |
name | string | Dari block_types.json; fallback ke "#<id>". |
Inventory item types
InventoryItemType.block -- 0 (default)
InventoryItemType.background -- 1
InventoryItemType.seed -- 2 (pake shortcut client:plant)
InventoryItemType.water -- 3
InventoryItemType.wearable -- 4
InventoryItemType.weapon -- 5
InventoryItemType.throwable -- 6
InventoryItemType.consumable -- 7
InventoryItemType.shard -- 8
InventoryItemType.blueprint -- 9
InventoryItemType.familiar -- 10
InventoryItemType.food -- 11 (FAMFood)
InventoryItemType.wiring -- 12
Drop, trash, equip, expand, dan use ada di client.