diff --git a/metal_melter/caster.lua b/metal_melter/caster.lua index f018417..4fb670e 100644 --- a/metal_melter/caster.lua +++ b/metal_melter/caster.lua @@ -82,6 +82,7 @@ function metal_caster.get_metal_caster_formspec(data) "list[context;bucket_out;4.75,1.4;2,2;]".. "image[5.75,0.2;1,1;gui_furnace_arrow_bg.png^[transformR270]".. "image[5.75,1.4;1,1;gui_furnace_arrow_bg.png^[transformR90]".. + "button[6.68,2.48;1.33,1;dump;Dump]".. "list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,5.5;8,3;8]".. "listring[context;coolant]".. @@ -203,8 +204,6 @@ local function get_cast_for(item) break end end - - print(typename, cast) return typename, cast end @@ -254,6 +253,14 @@ local function caster_node_timer(pos, elapsed) local metal = meta:get_string("metal") local metal_type = "" + local dumping = meta:get_int("dump") + if dumping and dumping == 1 then + metal_count = 0 + metal = "" + refresh = true + meta:set_int("dump", 0) + end + -- Insert water bucket into tank, return empty bucket if inv:get_stack("coolant", 1):get_name() == "bucket:bucket_water" then if coolant_count + 1000 <= metal_caster.max_coolant then @@ -423,6 +430,18 @@ function metal_caster.register_cast(name, data) metal_melter.register_melt(castname, "gold", "cast") end +local function on_receive_fields(pos, formname, fields, sender) + if sender and minetest.is_protected(pos, sender:get_player_name()) then + return 0 + end + + local meta = minetest.get_meta(pos) + if fields["dump"] then + meta:set_int('dump', 1) + minetest.get_node_timer(pos):start(1.0) + end +end + -- Register the caster minetest.register_node("metal_melter:metal_caster", { description = "Metal Caster", @@ -449,6 +468,7 @@ minetest.register_node("metal_melter:metal_caster", { on_metadata_inventory_take = function(pos) minetest.get_node_timer(pos):start(1.0) end, + on_receive_fields = on_receive_fields, on_blast = function(pos) local drops = {} default.get_inventory_drops(pos, "cast", drops) diff --git a/metal_melter/melter.lua b/metal_melter/melter.lua index 397c3e8..75a4bd2 100644 --- a/metal_melter/melter.lua +++ b/metal_melter/melter.lua @@ -106,6 +106,7 @@ function metal_melter.get_metal_melter_formspec(data) "list[context;bucket_out;4.75,1.4;1,1;]".. "image[5.75,0.2;1,1;gui_furnace_arrow_bg.png^[transformR270]".. "image[5.75,1.4;1,1;gui_furnace_arrow_bg.png^[transformR90]".. + "button[6.68,2.48;1.33,1;dump;Dump]".. "list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,5.5;8,3;8]".. "listring[context;heat]".. @@ -189,6 +190,14 @@ local function melter_node_timer(pos, elapsed) -- Current metal used local metal = meta:get_string("metal") + local dumping = meta:get_int("dump") + if dumping and dumping == 1 then + metal_count = 0 + metal = "" + refresh = true + meta:set_int("dump", 0) + end + -- Insert lava bucket into tank, return empty bucket if inv:get_stack("heat", 1):get_name() == "bucket:bucket_lava" then if heat_count + 1000 <= metal_melter.max_fuel then @@ -324,6 +333,18 @@ local function can_dig(pos, player) return inv:is_empty("input") and inv:is_empty("heat") and inv:is_empty("bucket_in") and inv:is_empty("bucket_out") end +local function on_receive_fields(pos, formname, fields, sender) + if sender and minetest.is_protected(pos, sender:get_player_name()) then + return 0 + end + + local meta = minetest.get_meta(pos) + if fields["dump"] then + meta:set_int('dump', 1) + minetest.get_node_timer(pos):start(1.0) + end +end + minetest.register_node("metal_melter:metal_melter", { description = "Metal Melter", tiles = { @@ -356,6 +377,7 @@ minetest.register_node("metal_melter:metal_melter", { minetest.remove_node(pos) return drops end, + on_receive_fields = on_receive_fields, allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_move = allow_metadata_inventory_move, @@ -386,6 +408,7 @@ minetest.register_node("metal_melter:metal_melter_filled", { on_metadata_inventory_put = function(pos) minetest.get_node_timer(pos):start(1.0) end, + on_receive_fields = on_receive_fields, allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_move = allow_metadata_inventory_move, diff --git a/tinkering/register.lua b/tinkering/register.lua index ea4063d..04dc60e 100644 --- a/tinkering/register.lua +++ b/tinkering/register.lua @@ -325,6 +325,12 @@ local function compare_components_required(tool_spec, materials) end end + for i, v in pairs(materials) do + if not tool_spec[i] then + all_match = false + end + end + return all_match end @@ -334,15 +340,15 @@ function tinkering.create_tool(tool_type, materials, want_tool, custom_name, ove -- TODO: Add texture as metadata (https://github.com/minetest/minetest/issues/5686) -- Not a valid tool type - if not tinkering.tools[tool_type] then return false end + if not tinkering.tools[tool_type] then return nil end local tool_data = tinkering.tools[tool_type] -- Check if the components are correct - if not compare_components_required(tool_data.components, materials) then return false end + if not compare_components_required(tool_data.components, materials) then return nil end -- Get tool definition and other metadata local tool_def, mat_names, tags = tinkering.tool_definition(tool_type, materials) - if not tool_def then return false end + if not tool_def then return nil end local mod_name = tool_data.mod or "tinkering" @@ -366,7 +372,7 @@ function tinkering.create_tool(tool_type, materials, want_tool, custom_name, ove minetest.register_tool(internal_name, tool_def) end - if not want_tool then return true end + if not want_tool then return nil end -- Create a new tool instance and apply metadata local tool = ItemStack(internal_name)