Lewati ke konten utama

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()

FieldType
Signature() → Inventory
ReturnsInventory — snapshot fresh dari cell parent bot
Common errors"getInventory: no parent client" (skrip gak punya bot ke-bind), "getInventory: parent client not found"
Asyncyes

Shortcut buat getClient():inventory(). Bakal error kalau gak ada parent yang ke-bind (misal jalan dari global executor).

client:inventory()

FieldType
Signature(self: Client) → Inventory
ReturnsInventory — snapshot dari cell bot ini
Asyncyes

Sama kayak getInventory() tapi bisa target bot tetangga yang di-resolve via getClient(key).

Fields

inventory.slots

FieldType
SignatureInventory.slots: number
Returnsnumber — jumlah cell yang lagi kepake

Protokol gak expose surface "max slot" terpisah — panggil client:expandInventory() buat nambahin.

inventory.items

FieldType
SignatureInventory.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)

FieldType
Signature(self: Inventory, invKey: number) → InventoryItem?
ReturnsInventoryItem?nil kalau gak ada cell yang match
Asyncno
local seedKey = (InventoryItemType.seed << 16) | 9 -- Obsidian Seed
local item = inventory:getItem(seedKey)

inventory:getItem(blockType, invType)

FieldType
Signature(self: Inventory, blockType: number, invType: number) → InventoryItem?
ReturnsInventoryItem?nil kalau gak ada cell yang match
Asyncno

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

FieldTypeCatatan
idnumberBlock id (number yang sama yang kamu pass ke client:place).
typenumberEnum InventoryItemType mentah (0..12), udah di-unpack.
amountnumberJumlah stack.
namestringDari 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.