90 lines
2.7 KiB
Lua
90 lines
2.7 KiB
Lua
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
|
|
})
|