Update furnace, workbench, HUD position
parent
49c92b7108
commit
a748397bfa
|
@ -3,38 +3,37 @@
|
|||
-- Formspecs
|
||||
--
|
||||
|
||||
local function active_formspec(fuel_percent, item_percent)
|
||||
local formspec =
|
||||
"size[9,8.75]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_inventory.png]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_furnace.png]"..
|
||||
"bgcolor[#08080880;true]"..
|
||||
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
|
||||
"image_button_exit[8.4,-0.1;0.75,0.75;close.png;exit;;true;true;]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"list[current_name;src;3,0.5;1,1;]"..
|
||||
"list[current_name;fuel;3,2.5;1,1;]"..
|
||||
"list[current_name;dst;5,1.5;1,1;]"..
|
||||
"list[detached:split;main;8,3.14;1,1;]"..
|
||||
"image[3,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||
(100-fuel_percent)..":default_furnace_fire_fg.png]"
|
||||
return formspec
|
||||
function default.get_furnace_active_formspec(fuel_percent, item_percent)
|
||||
return "size[9,8.75]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_inventory.png]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_furnace.png]"..
|
||||
"bgcolor[#08080880;true]"..
|
||||
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
|
||||
"image_button_exit[8.4,-0.1;0.75,0.75;close.png;exit;;true;true;]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"list[current_name;src;3,0.5;1,1;]"..
|
||||
"list[current_name;fuel;3,2.5;1,1;]"..
|
||||
"list[current_name;dst;5,1.5;1,1;]"..
|
||||
"list[detached:split;main;8,3.14;1,1;]"..
|
||||
"image[3,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||
(100-fuel_percent)..":default_furnace_fire_fg.png]"
|
||||
end
|
||||
|
||||
local inactive_formspec =
|
||||
"size[9,8.75]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_inventory.png]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_furnace.png]"..
|
||||
"bgcolor[#08080880;true]"..
|
||||
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
|
||||
"image_button_exit[8.4,-0.1;0.75,0.75;close.png;exit;;true;true;]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"list[current_name;src;3,0.5;1,1;]"..
|
||||
"list[current_name;fuel;3,2.5;1,1;]"..
|
||||
"list[current_name;dst;5,1.5;1,1;]"..
|
||||
"list[detached:split;main;8,3.14;1,1;]"
|
||||
function default.get_furnace_inactive_formspec()
|
||||
return "size[9,8.75]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_inventory.png]"..
|
||||
"background[-0.2,-0.26;9.41,9.49;formspec_furnace.png]"..
|
||||
"bgcolor[#08080880;true]"..
|
||||
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
|
||||
"image_button_exit[8.4,-0.1;0.75,0.75;close.png;exit;;true;true;]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"list[current_name;src;3,0.5;1,1;]"..
|
||||
"list[current_name;fuel;3,2.5;1,1;]"..
|
||||
"list[current_name;dst;5,1.5;1,1;]"..
|
||||
"list[detached:split;main;8,3.14;1,1;]"
|
||||
end
|
||||
|
||||
local split_inv = minetest.create_detached_inventory("split", {
|
||||
allow_move = function(_, _, _, _, _, count, _)
|
||||
|
@ -56,6 +55,12 @@ split_inv:set_size("main", 1)
|
|||
local function can_dig(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
for _, name in pairs({"fuel", "dst", "src"}) do
|
||||
local stack = inv:get_stack(name, 1)
|
||||
minetest.item_drop(stack, nil, pos)
|
||||
stack:clear()
|
||||
inv:set_stack(name, 1, stack)
|
||||
end
|
||||
return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src")
|
||||
end
|
||||
|
||||
|
@ -95,6 +100,164 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
|
|||
return stack:get_count()
|
||||
end
|
||||
|
||||
local function swap_node(pos, name)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == name then
|
||||
return
|
||||
end
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
local function furnace_node_timer(pos, elapsed)
|
||||
--
|
||||
-- Inizialize metadata
|
||||
--
|
||||
local meta = minetest.get_meta(pos)
|
||||
local fuel_time = meta:get_float("fuel_time") or 0
|
||||
local src_time = meta:get_float("src_time") or 0
|
||||
local fuel_totaltime = meta:get_float("fuel_totaltime") or 0
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
local srclist, fuellist
|
||||
|
||||
local cookable, cooked
|
||||
local fuel
|
||||
|
||||
local update = true
|
||||
while elapsed > 0 and update do
|
||||
update = false
|
||||
|
||||
srclist = inv:get_list("src")
|
||||
fuellist = inv:get_list("fuel")
|
||||
|
||||
--
|
||||
-- Cooking
|
||||
--
|
||||
|
||||
-- Check if we have cookable content
|
||||
local aftercooked
|
||||
cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
cookable = cooked.time ~= 0
|
||||
|
||||
local el = math.min(elapsed, fuel_totaltime - fuel_time)
|
||||
if cookable then -- fuel lasts long enough, adjust el to cooking duration
|
||||
el = math.min(el, cooked.time - src_time)
|
||||
end
|
||||
|
||||
-- Check if we have enough fuel to burn
|
||||
if fuel_time < fuel_totaltime then
|
||||
-- The furnace is currently active and has enough fuel
|
||||
fuel_time = fuel_time + el
|
||||
-- If there is a cookable item then check if it is ready yet
|
||||
if cookable then
|
||||
src_time = src_time + el
|
||||
if src_time >= cooked.time then
|
||||
-- Place result in dst list if possible
|
||||
if inv:room_for_item("dst", cooked.item) then
|
||||
inv:add_item("dst", cooked.item)
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
src_time = src_time - cooked.time
|
||||
update = true
|
||||
end
|
||||
else
|
||||
-- Item could not be cooked: probably missing fuel
|
||||
update = true
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Furnace ran out of fuel
|
||||
if cookable then
|
||||
-- We need to get new fuel
|
||||
local afterfuel
|
||||
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
|
||||
if fuel.time == 0 then
|
||||
-- No valid fuel in fuel list
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
else
|
||||
-- Take fuel from fuel list
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
update = true
|
||||
fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time)
|
||||
end
|
||||
else
|
||||
-- We don't need to get new fuel since there is no cookable item
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
end
|
||||
fuel_time = 0
|
||||
end
|
||||
|
||||
elapsed = elapsed - el
|
||||
end
|
||||
|
||||
if fuel and fuel_totaltime > fuel.time then
|
||||
fuel_totaltime = fuel.time
|
||||
end
|
||||
if srclist[1]:is_empty() then
|
||||
src_time = 0
|
||||
end
|
||||
|
||||
--
|
||||
-- Update formspec, infotext and node
|
||||
--
|
||||
local formspec
|
||||
local item_state
|
||||
local item_percent = 0
|
||||
if cookable then
|
||||
item_percent = math.floor(src_time / cooked.time * 100)
|
||||
if item_percent > 100 then
|
||||
item_state = "100% (output full)"
|
||||
else
|
||||
item_state = item_percent .. "%"
|
||||
end
|
||||
else
|
||||
if srclist[1]:is_empty() then
|
||||
item_state = "Empty"
|
||||
else
|
||||
item_state = "Not cookable"
|
||||
end
|
||||
end
|
||||
|
||||
local fuel_state = "Empty"
|
||||
local active = "inactive"
|
||||
local result = false
|
||||
|
||||
if fuel_totaltime ~= 0 then
|
||||
active = "active"
|
||||
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||
fuel_state = fuel_percent .. "%"
|
||||
formspec = default.get_furnace_active_formspec(fuel_percent, item_percent)
|
||||
swap_node(pos, "default:furnace_active")
|
||||
-- make sure timer restarts automatically
|
||||
result = true
|
||||
else
|
||||
if not fuellist[1]:is_empty() then
|
||||
fuel_state = "0%"
|
||||
end
|
||||
formspec = default.get_furnace_inactive_formspec()
|
||||
swap_node(pos, "default:furnace")
|
||||
-- stop timer on the inactive furnace
|
||||
minetest.get_node_timer(pos):stop()
|
||||
end
|
||||
|
||||
local infotext = "Furnace " .. active .. "\n(Item: " .. item_state ..
|
||||
"; Fuel: " .. fuel_state .. ")"
|
||||
|
||||
--
|
||||
-- Set meta values
|
||||
--
|
||||
meta:set_float("fuel_totaltime", fuel_totaltime)
|
||||
meta:set_float("fuel_time", fuel_time)
|
||||
meta:set_float("src_time", src_time)
|
||||
meta:set_string("formspec", formspec)
|
||||
meta:set_string("infotext", infotext)
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
--
|
||||
-- Node definitions
|
||||
--
|
||||
|
@ -111,9 +274,37 @@ minetest.register_node("default:furnace", {
|
|||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
|
||||
|
||||
can_dig = can_dig,
|
||||
|
||||
|
||||
on_timer = furnace_node_timer,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", default.get_furnace_inactive_formspec())
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('src', 1)
|
||||
inv:set_size('fuel', 1)
|
||||
inv:set_size('dst', 4)
|
||||
end,
|
||||
|
||||
on_metadata_inventory_move = function(pos)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos)
|
||||
-- start timer function, it will sort out whether furnace can burn or not.
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
default.get_inventory_drops(pos, "src", drops)
|
||||
default.get_inventory_drops(pos, "fuel", drops)
|
||||
default.get_inventory_drops(pos, "dst", drops)
|
||||
drops[#drops+1] = "default:furnace"
|
||||
minetest.remove_node(pos)
|
||||
return drops
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
|
@ -143,154 +334,11 @@ minetest.register_node("default:furnace_active", {
|
|||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
|
||||
on_timer = furnace_node_timer,
|
||||
|
||||
can_dig = can_dig,
|
||||
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
})
|
||||
|
||||
--
|
||||
-- ABM
|
||||
--
|
||||
|
||||
local function swap_node(pos, name)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == name then
|
||||
return
|
||||
end
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"default:furnace", "default:furnace_active"},
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
--
|
||||
-- Inizialize metadata
|
||||
--
|
||||
local meta = minetest.get_meta(pos)
|
||||
local fuel_time = meta:get_float("fuel_time") or 0
|
||||
local src_time = meta:get_float("src_time") or 0
|
||||
local fuel_totaltime = meta:get_float("fuel_totaltime") or 0
|
||||
|
||||
--
|
||||
-- Inizialize inventory
|
||||
--
|
||||
local inv = meta:get_inventory()
|
||||
for listname, size in pairs({
|
||||
src = 1,
|
||||
fuel = 1,
|
||||
dst = 4,
|
||||
}) do
|
||||
if inv:get_size(listname) ~= size then
|
||||
inv:set_size(listname, size)
|
||||
end
|
||||
end
|
||||
local srclist = inv:get_list("src")
|
||||
local fuellist = inv:get_list("fuel")
|
||||
local dstlist = inv:get_list("dst")
|
||||
|
||||
--
|
||||
-- Cooking
|
||||
--
|
||||
|
||||
-- Check if we have cookable content
|
||||
local cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
local cookable = true
|
||||
|
||||
if cooked.time == 0 then
|
||||
cookable = false
|
||||
end
|
||||
|
||||
-- Check if we have enough fuel to burn
|
||||
if fuel_time < fuel_totaltime then
|
||||
-- The furnace is currently active and has enough fuel
|
||||
fuel_time = fuel_time + 1
|
||||
|
||||
-- If there is a cookable item then check if it is ready yet
|
||||
if cookable then
|
||||
src_time = src_time + 1
|
||||
if src_time >= cooked.time then
|
||||
-- Place result in dst list if possible
|
||||
if inv:room_for_item("dst", cooked.item) then
|
||||
inv:add_item("dst", cooked.item)
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
src_time = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Furnace ran out of fuel
|
||||
if cookable then
|
||||
-- We need to get new fuel
|
||||
local fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
|
||||
if fuel.time == 0 then
|
||||
-- No valid fuel in fuel list
|
||||
fuel_totaltime = 0
|
||||
fuel_time = 0
|
||||
src_time = 0
|
||||
else
|
||||
-- Take fuel from fuel list
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
|
||||
fuel_totaltime = fuel.time
|
||||
fuel_time = 0
|
||||
|
||||
end
|
||||
else
|
||||
-- We don't need to get new fuel since there is no cookable item
|
||||
fuel_totaltime = 0
|
||||
fuel_time = 0
|
||||
src_time = 0
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Update formspec, infotext and node
|
||||
--
|
||||
local formspec = inactive_formspec
|
||||
local item_state = ""
|
||||
local item_percent = 0
|
||||
if cookable then
|
||||
item_percent = math.floor(src_time / cooked.time * 100)
|
||||
item_state = item_percent .. "%"
|
||||
else
|
||||
if srclist[1]:is_empty() then
|
||||
item_state = "Empty"
|
||||
else
|
||||
item_state = "Not cookable"
|
||||
end
|
||||
end
|
||||
|
||||
local fuel_state = "Empty"
|
||||
local active = "inactive "
|
||||
if fuel_time <= fuel_totaltime and fuel_totaltime ~= 0 then
|
||||
active = "active "
|
||||
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||
fuel_state = fuel_percent .. "%"
|
||||
formspec = active_formspec(fuel_percent, item_percent)
|
||||
swap_node(pos, "default:furnace_active")
|
||||
else
|
||||
if not fuellist[1]:is_empty() then
|
||||
fuel_state = "0%"
|
||||
end
|
||||
swap_node(pos, "default:furnace")
|
||||
end
|
||||
|
||||
local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")"
|
||||
|
||||
--
|
||||
-- Set meta values
|
||||
--
|
||||
meta:set_float("fuel_totaltime", fuel_totaltime)
|
||||
meta:set_float("fuel_time", fuel_time)
|
||||
meta:set_float("src_time", src_time)
|
||||
meta:set_string("formspec", formspec)
|
||||
meta:set_string("infotext", infotext)
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -39,9 +39,8 @@ end
|
|||
hud.register("xp_bar", {
|
||||
hud_elem_type = "statbar",
|
||||
position = {x = 0.5, y = 1},
|
||||
size = {x = 31, y = 13},
|
||||
alignment = {x = -1, y = -1},
|
||||
offset = {x = -249, y = -79},
|
||||
offset = {x = -184, y = -59},
|
||||
text = "expbar_full.png",
|
||||
background = "expbar_empty.png",
|
||||
number = MAX_HUD_XP,
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 134 B After Width: | Height: | Size: 134 B |
Binary file not shown.
Before Width: | Height: | Size: 134 B After Width: | Height: | Size: 133 B |
|
@ -1,8 +1,8 @@
|
|||
HUD_SB_SIZE = {x = 24, y = 24}
|
||||
HUD_HEALTH_OFFSET = {x = -255, y = -109}
|
||||
HUD_AIR_OFFSET = {x = 15, y = -134}
|
||||
HUD_HUNGER_OFFSET = {x = 15, y = -109}
|
||||
HUD_ARMOR_OFFSET = {x = -255, y = -134}
|
||||
HUD_HEALTH_OFFSET = {x = -249, y = -109}
|
||||
HUD_AIR_OFFSET = {x = 8, y = -134}
|
||||
HUD_HUNGER_OFFSET = {x = 8, y = -109}
|
||||
HUD_ARMOR_OFFSET = {x = -249, y = -134}
|
||||
|
||||
hud.register("health", {
|
||||
hud_elem_type = "statbar",
|
||||
|
|
|
@ -2,10 +2,9 @@ hud = {}
|
|||
|
||||
hud.show_armor = minetest.get_modpath("3d_armor") ~= nil
|
||||
|
||||
local modpath = minetest.get_modpath("hud")
|
||||
dofile(modpath .. "/api.lua")
|
||||
|
||||
if minetest.settings:get_bool("enable_damage") then
|
||||
|
||||
local modpath = minetest.get_modpath("hud")
|
||||
dofile(modpath .. "/api.lua")
|
||||
dofile(modpath .. "/builtin.lua")
|
||||
|
||||
end
|
||||
|
|
|
@ -55,7 +55,7 @@ workbench.defs = {
|
|||
{ 0, 15, 8, 16, 1, 8 }},
|
||||
{"cube", 4, { 0, 0, 0, 8, 8, 8 }},
|
||||
{"panel", 4, { 0, 0, 0, 16, 8, 8 }},
|
||||
{"slab", 2, { 0, 0, 0, 16, 8, 16 }},
|
||||
{"slab", 2, { 0, 0, 0, 16, 8, 16 }},
|
||||
{"doublepanel", 2, { 0, 0, 0, 16, 8, 8 },
|
||||
{ 0, 8, 8, 16, 8, 8 }},
|
||||
{"halfstair", 2, { 0, 0, 0, 8, 8, 16 },
|
||||
|
@ -70,7 +70,6 @@ workbench.defs = {
|
|||
{ 0, 8, 0, 8, 8, 8 }}
|
||||
}
|
||||
|
||||
|
||||
-- Tools allowed to be repaired
|
||||
function workbench:repairable(stack)
|
||||
local tools = {"pick", "axe", "shovel", "sword", "hoe", "armor", "shield"}
|
||||
|
@ -260,7 +259,7 @@ function workbench.on_take(pos, listname, index, stack, player)
|
|||
local stackname = stack:get_name()
|
||||
|
||||
if listname == "input" then
|
||||
if stackname == inputname then
|
||||
if stackname == inputname and registered_nodes[inputname.."_cube"] then
|
||||
workbench:get_output(inv, input, stackname)
|
||||
else
|
||||
inv:set_list("forms", {})
|
||||
|
@ -296,29 +295,7 @@ minetest.register_node("workbench:workbench", {
|
|||
on_metadata_inventory_put = workbench.on_put,
|
||||
on_metadata_inventory_take = workbench.on_take,
|
||||
allow_metadata_inventory_put = workbench.put,
|
||||
allow_metadata_inventory_move = workbench.move,
|
||||
})
|
||||
|
||||
minetest.register_tool("workbench:hammer", {
|
||||
description = "Hammer",
|
||||
inventory_image = "workbench_hammer.png",
|
||||
on_use = function() do return end end
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "workbench:workbench",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "workbench:hammer",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "group:stick", "default:steel_ingot"},
|
||||
{"", "group:stick", ""}
|
||||
}
|
||||
allow_metadata_inventory_move = workbench.move
|
||||
})
|
||||
|
||||
for _, d in pairs(workbench.defs) do
|
||||
|
@ -338,7 +315,7 @@ for i=1, #nodes do
|
|||
end
|
||||
|
||||
if def.tiles then
|
||||
if #def.tiles > 1 and not (def.drawtype:sub(1,5) == "glass") then
|
||||
if #def.tiles > 1 and (def.drawtype:sub(1,5) ~= "glass") then
|
||||
tiles = def.tiles
|
||||
else
|
||||
tiles = {def.tiles[1]}
|
||||
|
@ -361,7 +338,7 @@ for i=1, #nodes do
|
|||
sounds = def.sounds,
|
||||
tiles = tiles,
|
||||
groups = groups,
|
||||
-- `unpack` has been changed to `table.unpack` in newest Lua versions.
|
||||
-- `unpack` has been changed to `table.unpack` in newest Lua versions
|
||||
node_box = workbench:pixelbox(16, {unpack(d, 3)}),
|
||||
sunlight_propagates = true,
|
||||
on_place = minetest.rotate_node
|
||||
|
@ -369,3 +346,27 @@ for i=1, #nodes do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Craft items
|
||||
|
||||
minetest.register_tool("workbench:hammer", {
|
||||
description = "Hammer",
|
||||
inventory_image = "workbench_hammer.png",
|
||||
on_use = function() do return end end
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "workbench:workbench",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "workbench:hammer",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "group:stick", "default:steel_ingot"},
|
||||
{"", "group:stick", ""}
|
||||
}
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue