Add chests, the beginnings of a machines API, and other things
This commit is contained in:
parent
3720070a28
commit
4d8312b79d
22 changed files with 557 additions and 16 deletions
95
mods/rgt_inv/init.lua
Normal file
95
mods/rgt_inv/init.lua
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
rgt_inv = {}
|
||||
local ns = rgt_inv
|
||||
|
||||
Inventory = setmetatable({
|
||||
new = function(p)
|
||||
local e = setmetatable({
|
||||
player = p,
|
||||
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:rebuild()
|
||||
return e
|
||||
end,
|
||||
rebuild = function(e)
|
||||
local fs = {"\
|
||||
formspec_version[10]\
|
||||
size[12,10]\
|
||||
style_type[button,image_button;border=false]\
|
||||
"}
|
||||
for x = 0, 7 do
|
||||
for y = 0, 3 do
|
||||
fs[#fs +1] = "\
|
||||
image["..(x *1.25 +1.125 -0.0625)..","..(y *1.25 +4.5 -0.0625)..";1.14,1.14;rgt_other_button_bg.png;8,8]\
|
||||
"
|
||||
end
|
||||
end
|
||||
fs[#fs +1] = "\
|
||||
style_type[image_button;noclip=true;bgimg=rgt_button_bg.png;bgimg_middle=8,8]\
|
||||
"
|
||||
local i = 0
|
||||
for _, x in ipairs(e.state.proximate_machines) do
|
||||
local y = i > 11 and 10.5 or -1
|
||||
fs[#fs +1] = "image_button["..(i %11 +0.125)..","..y..";0.75,0.75;rgt_stone.png;blah;]"
|
||||
i = i +1
|
||||
end
|
||||
fs[#fs +1] = "\
|
||||
list[current_player;main;1.125,4.5;8,4;]\
|
||||
list[current_player;craft;3,0.5;3,3;]\
|
||||
listring[]\
|
||||
list[current_player;craftpreview;7,1;1,1;]\
|
||||
"
|
||||
e.player:set_inventory_formspec(table.concat(fs))
|
||||
end,
|
||||
on_action = function(e, data)
|
||||
|
||||
end
|
||||
}, {
|
||||
__call = function(_, ...)
|
||||
return Inventory.new(...)
|
||||
end
|
||||
})
|
||||
|
||||
local last_time = 0
|
||||
minetest.register_globalstep(function()
|
||||
local time = minetest.get_us_time()
|
||||
-- Scan for machines every second.
|
||||
if time -last_time > 1000000 then
|
||||
for name, m in pairs(rgt.players) do
|
||||
local pm = {}
|
||||
local machines = minetest.find_nodes_in_area(m.pos:offset(-7, -7, -7), m.pos:offset(7, 7, 7), "group:rgt_machine", true)
|
||||
for type, positions in pairs(machines) do
|
||||
pm[#pm +1] = {
|
||||
type = type,
|
||||
pos = positions[math.random(1, #positions)]
|
||||
}
|
||||
end
|
||||
if not (#pm <= 0 and #m.inv.state.proximate_machines <= 0) then
|
||||
-- Give the machines list a predictable order by sorting it alphabetically prior to submission.
|
||||
table.sort(pm, function(a, b) return a.type < b.type end)
|
||||
m.inv.proximate_machines = pm
|
||||
end
|
||||
end
|
||||
last_time = time
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
minetest.register_chatcommand("/lua", {
|
||||
privs = {server = true},
|
||||
func = function(name, args)
|
||||
xpcall(function()
|
||||
loadstring(args)()
|
||||
end, say)
|
||||
end
|
||||
})
|
||||
2
mods/rgt_inv/mod.conf
Normal file
2
mods/rgt_inv/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = rgt_inv
|
||||
depends = rgt_player
|
||||
Loading…
Add table
Add a link
Reference in a new issue