-- LUALOCALS < --------------------------------------------------------- local ItemStack, minetest, nodecore, pairs = ItemStack, minetest, nodecore, pairs -- LUALOCALS > --------------------------------------------------------- nodecore.register_aism({ label = "Packed Tote AISMs", interval = 1, chance = 1, itemnames = {"group:tote"}, action = function(stack, data) local stackmeta = stack:get_meta() local raw = stackmeta:get_string("carrying") local inv = raw and (raw ~= "") and minetest.deserialize(raw) if not inv then return end local dirty for _, slot in pairs(inv) do -- Modern format local ncitem = slot and slot.m and slot.m.fields and slot.m.fields.ncitem if ncitem then local istack = ItemStack(ncitem) if not istack:is_empty() then local sdata = { pos = data.pos, toteslot = slot, set = function(s) local ss = s:to_string() if ss ~= ncitem then slot.m.fields.ncitem = ss dirty = true end end } nodecore.aism_check_stack(istack, sdata) end end -- Legacy format for lname, list in pairs(slot and slot.m and slot.m.inventory or {}) do for sub, item in pairs(list) do local istack = ItemStack(item) if not istack:is_empty() then local sdata = { pos = data.pos, toteslot = slot, totelistname = lname, totelist = list, totesubslot = sub, set = function(s) list[sub] = s:to_string() dirty = true end } nodecore.aism_check_stack(istack, sdata) end end end end if not dirty then return end stackmeta:set_string("carrying", minetest.serialize(inv)) return stack end })