moreblocks/stairsplus/circular_saw.lua
2022-06-22 11:58:24 -07:00

134 lines
3.4 KiB
Lua

stairsplus.api.circular_saw = {}
local circular_saw = stairsplus.api.circular_saw
local api = stairsplus.api
local station = api.station
local get_location_string = stairsplus.util.get_location_string
local S = stairsplus.S
local F = minetest.formspec_escape
local formspec_style = stairsplus.resources.formspec_style
function circular_saw.build_formspec(meta, inv)
local inv_location = get_location_string(inv)
return ([[
size[10,11]
%s
label[0,0;]
label[0,0;%s]
list[%s;stairsplus:input;1.7,0;1,1;]
label[0,1;%s]
list[%s;stairsplus:micro;1.7,1;1,1;]
label[0,2;%s]
list[%s;stairsplus:recycle;1.7,2;1,1;]
field[0.3,3.5;1,1;max_offered;%s:;%i]
button[1,3.2;1.7,1;Set;%s]
list[%s;stairsplus:output;2.8,0;7,7;]
list[current_player;main;1.5,7.25;8,4;]
listring[%s;stairsplus:output]
listring[current_player;main]
listring[%s;stairsplus:recycle]
listring[%s;stairsplus:micro]
listring[current_player;main]
listring[%s;stairsplus:input]
listring[current_player;main]
]]):format(
formspec_style,
F(S("Nodes")),
inv_location,
F(S("Microblocks")),
inv_location,
F(S("Input")),
inv_location,
F(S("Max")),
meta:get_int("stairsplus:max_offered"),
F(S("Set")),
inv_location,
inv_location,
inv_location,
inv_location,
inv_location
)
end
function circular_saw.update_metadata(meta, inv)
local parts = {S("Circular Saw")}
local owner = meta:get_string("owner")
if owner ~= "" then
table.insert(parts, S("(owned by @1)", owner))
end
local working_on = station.get_current_node(inv)
if working_on then
local stack = ItemStack(working_on)
table.insert(parts, S("Working on @1", stack:get_short_description() or stack:get_description()))
else
table.insert(parts, S("Empty"))
end
meta:set_string("infotext", table.concat(parts, " "))
end
api.register_station("stairsplus:circular_saw", {
description = S("Circular Saw"),
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.4, -0.5, -0.4, -0.25, 0.25, -0.25}, -- Leg
{0.25, -0.5, 0.25, 0.4, 0.25, 0.4}, -- Leg
{-0.4, -0.5, 0.25, -0.25, 0.25, 0.4}, -- Leg
{0.25, -0.5, -0.4, 0.4, 0.25, -0.25}, -- Leg
{-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- Tabletop
{-0.01, 0.4375, -0.125, 0.01, 0.5, 0.125}, -- Saw blade (top)
{-0.01, 0.375, -0.1875, 0.01, 0.4375, 0.1875}, -- Saw blade (bottom)
{-0.25, -0.0625, -0.25, 0.25, 0.25, 0.25}, -- Motor case
},
},
tiles = {
"stairsplus_circular_saw_top.png",
"stairsplus_circular_saw_bottom.png",
"stairsplus_circular_saw_side.png"
},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2},
sounds = stairsplus.resources.sounds.wood,
shape_groups = {"legacy"},
build_formspec = circular_saw.build_formspec,
update_metadata = circular_saw.update_metadata,
})
local cm = stairsplus.resources.craft_materials
if stairsplus.settings.circular_saw_crafting and cm.steel_ingot then
minetest.register_craft({
output = "stairsplus:circular_saw",
recipe = {
{"", cm.steel_ingot, ""},
{"group:wood", "group:wood", "group:wood"},
{"group:wood", "", "group:wood"},
}
})
end
minetest.register_lbm({
label = "Upgrade legacy saws",
name = "stairsplus:replace_legacy_saws",
nodenames = {"stairsplus:circular_saw"},
run_at_every_load = false,
action = function(pos, node)
local def = minetest.registered_nodes[node.name]
def.on_construct(pos, {"legacy"}, circular_saw.build_formspec, circular_saw.update_metadata)
end,
})