Fix models and buttons, and let containers handle inventories properly.

This commit is contained in:
Signal 2026-01-26 15:28:26 -05:00
parent 1040034efa
commit 7a1fac9b36

View file

@ -362,27 +362,30 @@ local fs_model = {
out[#out +1] = x:render()
end
out[#out +1] = string.format(
"model[%f,%f;%f,%f;%s;%s;%s;%f;%s;%s;%s;%f]",
"model[%f,%f;%f,%f;%s;%s;%s;%s;%s;%s;%s;%s]",
x or get(e, "x"), y or get(e, "y"),
w or get(e, "w"), h or get(e, "h"),
e.__id,
get(e, "mesh"), get(e, "textures"),
get(e, "_rotation") or "", get(e, "_continuous") or "",
get(e, "_mouse_control"),
get(e, "_animation") or "", get(e, "_animation_speed")
get(e, "_mouse_control") or "",
get(e, "_animation") or "", get(e, "_animation_speed") or ""
)
return table.concat(out)
end,
rotation = function(e, rot, continuous)
e._rotation = rot
e._continuous = continuous
return e
end,
mouse_control = function(e, mouse_control)
e._mouse_control = mouse_control ~= false and true or false
return e
end,
animated = function(frames, speed)
e._animation = frames
e._animation_speed = speed or 1
return e
end,
style = add_elem_style,
tooltip = add_elem_tooltip,
@ -390,7 +393,7 @@ local fs_model = {
fs_model.__index = fs_model
setmetatable(fs_model, {
__call = function(_, x, y, w, h, mesh, textures)
local e = {x = x, y = y, w = w, h = h, mesh = mesh, textures = textures, mouse_control = true}
local e = {x = x, y = y, w = w, h = h, mesh = mesh, textures = textures, _mouse_control = true, _styles = {}}
e.__id = new_id()
setmetatable(e, fs_model)
table.insert(ctx, e)
@ -421,12 +424,15 @@ local fs_button = {
image = function(e, img, pressed_img)
e._image = img
e._image_pressed = pressed_img
return e
end,
item_image = function(e, item)
e._item = item
return e
end,
exit = function(e)
e._exit = true
return e
end,
onclick = function(e, fn)
ctx._events.on_click[e.__id] = fn
@ -472,9 +478,10 @@ local fs_list = {
w = w or get(e, "w")
h = h or get(e, "h")
-- These lines will cause `w` and `h` to be interpreted as formspec coordinates rather than numbers of slots.
-- w = w -((w -1) /4)
-- h = h -((h -1) /4)
-- Interpret `w` and `h` as formspec coordinates rather than numbers of slots.
-- This is necessary so that inventories in flex containers will work correctly.
w = w -((w -1) /4)
h = h -((h -1) /4)
return string.format("list[%s;%s;%f,%f;%d,%d;%s]", get(e, "location"), get(e, "list"), x or get(e, "x"), y or get(e, "y"), w, h, get(e, "start"))
end