Difference between revisions of "InvRef"
Jump to navigation
Jump to search
(Caveat about "non-live" ItemStacks) |
|||
Line 15: | Line 15: | ||
* <source enclose="none">contains_item("listname", stack)</source>: returns true if the stack of items can be fully taken from the list | * <source enclose="none">contains_item("listname", stack)</source>: returns true if the stack of items can be fully taken from the list | ||
* <source enclose="none">remove_item("listname", stack)</source>: take as many items as specified from the list, returns the items that were actually removed (as an ItemStack) | * <source enclose="none">remove_item("listname", stack)</source>: take as many items as specified from the list, returns the items that were actually removed (as an ItemStack) | ||
+ | |||
+ | == Caveats == | ||
+ | * A common mistake is to get an [[ItemStack]] from an inventory, change it, and expect the changes to carry through to the inventory. '''ItemStacks returned by and passed to inventory methods are ''not'' live objects''', but are passed "by copy". In other words, if you get an ItemStack result and change it, the inventory will ''not'' be modified. You have to call one of the inventory manipulator methods (e.g. <code>inv:set_stack(listName, changedStack)</code>) for your changes to be reflected back in the inventory. This is also true of <source enclose="none">object:get_wielded_item()</source> and <source enclose="none">object:set_wielded_item(...)</source>, which just get and set the inventory stack the player has selected on the hotbar. | ||
[[Category:Objects]] | [[Category:Objects]] |
Revision as of 19:15, 25 March 2013
Reference to an inventory.
Methods
is_empty("listname")
: return true if list is emptyget_size("listname")
: get size of a listset_size("listname", size)
: set size of a listget_width("listname")
: get width of a listset_width("listname", width)
: set width of list; currently used for craftingget_stack("listname", i)
: get a copy of stack index i in listset_stack("listname", i, stack)
: copy stack to index i in listget_list("listname")
: return full listset_list("listname", list)
: set full list (size will not change)[InvRef]add_item("listname", stack)
: add item somewhere in list, returns leftover ItemStackroom_for_item("listname", stack)
: returns true if the stack of items can be fully added to the listcontains_item("listname", stack)
: returns true if the stack of items can be fully taken from the listremove_item("listname", stack)
: take as many items as specified from the list, returns the items that were actually removed (as an ItemStack)
Caveats
- A common mistake is to get an ItemStack from an inventory, change it, and expect the changes to carry through to the inventory. ItemStacks returned by and passed to inventory methods are not live objects, but are passed "by copy". In other words, if you get an ItemStack result and change it, the inventory will not be modified. You have to call one of the inventory manipulator methods (e.g.
inv:set_stack(listName, changedStack)
) for your changes to be reflected back in the inventory. This is also true ofobject:get_wielded_item()
andobject:set_wielded_item(...)
, which just get and set the inventory stack the player has selected on the hotbar.