Improve mapgen, add grass, and include the fill tool.

This commit is contained in:
Signal 2026-01-15 18:54:28 -05:00
parent 1e897665bb
commit 4659a008ac
86 changed files with 1098 additions and 293 deletions

View file

@ -1,10 +1,28 @@
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 = {}
}
@ -18,6 +36,12 @@ Inventory = setmetatable({
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,
@ -26,33 +50,29 @@ Inventory = setmetatable({
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;]\
",
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[]\
list[current_player;craftpreview;7,1;1,1;]\
"
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,
on_action = function(e, data)
set_craft_grid_size = function(e, size)
e.inv:set_size("craft", size *size)
e.inv:set_width("craft", size)
end
}, {
__call = function(_, ...)
@ -60,31 +80,6 @@ Inventory = setmetatable({
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)