diff --git a/multifurnace/api.lua b/multifurnace/api.lua index 0b0a639..2a9ee79 100644 --- a/multifurnace/api.lua +++ b/multifurnace/api.lua @@ -202,6 +202,14 @@ end -- Furnace lifecycle -- ----------------------- +local function swap_node(pos, node, name) + if node.name == name then + return + end + node.name = name + core.swap_node(pos, node) +end + function multifurnace.api.check_controller(pos) local check_serial = math.random(10000, 99999) local node = core.get_node_or_nil(pos) @@ -219,8 +227,10 @@ function multifurnace.api.check_controller(pos) if not dimensions then ctrl_meta:set_string("serial", "") + ctrl_meta:set_string("formspec", "") notify_ports_removal(pos) update_timer(pos) + swap_node(pos, node, "multifurnace:controller") return end @@ -242,6 +252,8 @@ function multifurnace.api.check_controller(pos) end local volume = calculate_volume(dimensions) + swap_node(pos, node, "multifurnace:controller_active") + def = core.registered_nodes["multifurnace:controller_active"] multifurnace.loaded_controllers[key] = { controller = pos, serial = check_serial, diff --git a/multifurnace/furnace.lua b/multifurnace/furnace.lua index 20f8f09..a91cbe9 100644 --- a/multifurnace/furnace.lua +++ b/multifurnace/furnace.lua @@ -410,6 +410,39 @@ core.register_node("multifurnace:controller", { tubedevice = 1, tubedevice_receiver = 1 }, + paramtype2 = "facedir", + is_ground_content = false, + -- on_timer = controller_timer, + on_construct = function(pos) + local meta = core.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("melt", 1) + meta:set_string("formspec", "") + multifurnace.api.component_changed_nearby(pos) + end, + on_destruct = function(pos) multifurnace.api.remove_controller(pos) end, + _mcl_hardness = 2, + _mcl_blast_resistance = 2, + _multifurnace_fuel_consumption = 10, + _multifurnace_max_dimensions = 8, +}) + +core.register_node("multifurnace:controller_active", { + description = S("Multifurnace Controller"), + tiles = { + "metal_melter_heatbrick.png", "metal_melter_heatbrick.png", + "metal_melter_heatbrick.png", "metal_melter_heatbrick.png", + "metal_melter_heatbrick.png", + "metal_melter_heatbrick.png^(multifurnace_controller_face.png^[colorize:#DD7C00:60)" + }, + groups = { + cracky = 3, + pickaxey = 1, + multifurnace = 1, + multifurnace_controller = 1, + tubedevice = 1, + tubedevice_receiver = 1 + }, tube = { can_remove = function() return 0 end, insert_object = function(pos, node, stack, direction) @@ -474,9 +507,15 @@ core.register_node("multifurnace:controller", { _mcl_hardness = 2, _mcl_blast_resistance = 2, _multifurnace_fuel_consumption = 10, - _multifurnace_max_dimensions = 8 + _multifurnace_max_dimensions = 8, + drop = "multifurnace:controller", }) +-- Add entry alias for the Help +if minetest.get_modpath("doc") then + doc.add_entry_alias("nodes", "multifurnace:controller", "nodes", "multifurnace:controller_active") +end + core.register_node("multifurnace:port", { description = S("Multifurnace Port"), tiles = { @@ -558,23 +597,20 @@ core.override_item("metal_melter:heated_bricks", { core.register_abm({ label = "Update Multifurnace structures", - nodenames = {"multifurnace:controller"}, - without_neighbors = {"multifurnace:controller"}, + nodenames = {"multifurnace:controller", "multifurnace:controller_active"}, + without_neighbors = {"multifurnace:controller", "multifurnace:controller_active"}, interval = 5, chance = 1, action = function(pos) multifurnace.api.detect_changes(pos) end }) -core.register_lbm({ - name = "multifurnace:load_controllers", - nodenames = {"multifurnace:controller"}, - action = function(pos) multifurnace.api.detect_changes(pos) end -}) - if core.get_modpath("tubelib") then core.override_item("multifurnace:controller", { + after_dig_node = function(pos) tubelib.remove_node(pos) end + }) + core.override_item("multifurnace:controller_active", { after_place_node = function(pos, placer) - tubelib.add_node(pos, "multifurnace:controller") + tubelib.add_node(pos, "multifurnace:controller_active") end, after_dig_node = function(pos) tubelib.remove_node(pos) end }) @@ -598,7 +634,7 @@ if core.get_modpath("tubelib") then return true end - tubelib.register_node("multifurnace:controller", {}, { + tubelib.register_node("multifurnace:controller_active", {}, { on_pull_item = function() return nil end, on_push_item = function(pos, side, item) return tubelib_insert(pos, side, item)