rgt_inv = {} local ns = rgt_inv local creative_inv = minetest.create_detached_inventory("rgt_creative_inv", { allow_take = function() return -1 end }) local num_items = 0 minetest.register_on_mods_loaded(function() for name, def in pairs(minetest.registered_items) do if not def._variant then creative_inv:set_size("main", num_items +1) creative_inv:set_stack("main", num_items, ItemStack(name.." "..def.stack_max)) num_items = num_items +1 end end end) Inventory = setmetatable({ new = function(p) local e = setmetatable({ player = p, inv = p:get_inventory(), state = { proximate_machines = {} } }, { __index = Inventory, -- Setting a value on the Inventory instance directly will -- automatically update the player's inventory formspec. -- `inv.state` should be used in cases where this is not desirable. __newindex = function(e, k, v) e.state[k] = v e:rebuild() end }) e.inv:set_size("hand", 1) e.inv:set_size("craft", 4) -- This is important for shaped crafting to work properly. e.inv:set_width("craft", 2) e:rebuild() return e end, rebuild = function(e) local fs = {"\ formspec_version[10]\ size[12,10]\ style_type[button,image_button;border=false]\ ", ui.list("current_player", "main", 1.125, 4.5, 8, 4), } if true or e.player._creative then fs[#fs +1] = "scroll_container[1,1;10,3;creativescroll;vertical;;0]" fs[#fs +1] = ui.list("detached:rgt_creative_inv", "main", 0.05, 0.05, 8, math.ceil(num_items /8)) fs[#fs +1] = "scroll_container_end[]\ scrollbar[11,1;0.2,3;vertical;creativescroll;]" else fs[#fs +1] = ui.list("current_player", "craft", 2, 1, 2, 2) fs[#fs +1] = "\ listring[]\ image[4.7,1.5;1,1;rgt_progress_bg.png^\\[transformR270]\ " fs[#fs +1] = ui.list("current_player", "craftpreview", 6, 1.5, 1, 1) end e.player:set_inventory_formspec(table.concat(fs)) end, set_craft_grid_size = function(e, size) e.inv:set_size("craft", size *size) e.inv:set_width("craft", size) end }, { __call = function(_, ...) return Inventory.new(...) end }) minetest.register_chatcommand("/lua", { privs = {server = true}, func = function(name, args) xpcall(function() loadstring(args)() end, say) end })