diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 8a5f66eb..d881f3fa 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -102,7 +102,6 @@ function inventory.get_uses(invid, slot) return uses end - function inventory.use(invid, slot) local itemid, count = inventory.get(invid, slot) if itemid == nil then @@ -119,6 +118,16 @@ function inventory.use(invid, slot) end end +function inventory.decrement(invid, slot, count) + count = count or 1 + local itemid, itemcount = inventory.get(invid, slot) + if itemcount <= count then + inventory.set(invid, slot, 0) + else + inventory.set_count(invid, slot, itemcount - count) + end +end + ------------------------------------------------ ------------------- Events --------------------- ------------------------------------------------ diff --git a/src/logic/scripting/lua/libs/libinventory.cpp b/src/logic/scripting/lua/libs/libinventory.cpp index 3e2d390e..4ae2861b 100644 --- a/src/logic/scripting/lua/libs/libinventory.cpp +++ b/src/logic/scripting/lua/libs/libinventory.cpp @@ -71,6 +71,15 @@ static int l_set(lua::State* L, ItemStack& item) { return 0; } +static int l_set_count(lua::State* L, ItemStack& item) { + auto count = lua::tointeger(L, 3); + if (item.getItemId() == ITEM_EMPTY) { + return 0; + } + item.setCount(count); + return 0; +} + static int l_size(lua::State* L) { auto invid = lua::tointeger(L, 1); const auto& inv = get_inventory(invid); @@ -226,6 +235,7 @@ static int l_set_data(lua::State* L, ItemStack& stack) { const luaL_Reg inventorylib[] = { {"get", wrap_slot}, {"set", wrap_slot}, + {"set_count", wrap_slot}, {"size", lua::wrap}, {"add", lua::wrap}, {"move", lua::wrap},