red_glazed_terracotta/mods/rgt_inv/init.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
})