diff --git a/.test/sink.lua b/.test/sink.lua index 0b265e7..9a7d659 100644 --- a/.test/sink.lua +++ b/.test/sink.lua @@ -61,7 +61,7 @@ end minetest.register_node("techage:sink", { description = "Sink", - tiles = {'techage_electric_button.png'}, + tiles = {'techage_electric_button.png^[colorize:#000000:50'}, on_timer = function(pos, elapsed) local consumed = power.consume_power(pos, Cable, nil, PWR_NEEDED) diff --git a/basis/command.lua b/basis/command.lua index 6e967df..37c4aca 100644 --- a/basis/command.lua +++ b/basis/command.lua @@ -169,6 +169,14 @@ minetest.register_globalstep(function(dtime) techage.SystemTime = techage.SystemTime + dtime end) +-- used by TA1 hammer: dug_node[player_name] = pos +techage.dug_node = {} +minetest.register_on_dignode(function(pos, oldnode, digger) + if not digger then return end + -- store pos for tools without own 'register_on_dignode' + techage.dug_node[digger:get_player_name()] = pos +end) + ------------------------------------------------------------------- -- API helper functions ------------------------------------------------------------------- diff --git a/init.lua b/init.lua index b75a43e..b48f1d9 100644 --- a/init.lua +++ b/init.lua @@ -193,7 +193,7 @@ dofile(MP.."/basic_machines/chest.lua") --dofile(MP.."/furnace/recipes.lua") -- Tools ---dofile(MP.."/tools/trowel.lua") +dofile(MP.."/tools/trowel.lua") --dofile(MP.."/tools/repairkit.lua") --dofile(MP.."/tools/pipe_wrench.lua") --dofile(MP.."/basic_machines/blackhole.lua") diff --git a/power/junctionbox.lua b/power/junctionbox.lua index 5c2dbcd..7f40f0a 100644 --- a/power/junctionbox.lua +++ b/power/junctionbox.lua @@ -43,8 +43,10 @@ local names = networks.register_junction("techage:electric_junction", 2/8, Boxes Cable:after_place_node(pos) end, tubelib2_on_update2 = function(pos, dir1, tlib2, node) - local name = "techage:electric_junction" .. networks.junction_type(pos, Cable) - minetest.swap_node(pos, {name = name, param2 = 0}) + if not networks.hidden_name(pos) then + local name = "techage:electric_junction" .. networks.junction_type(pos, Cable) + minetest.swap_node(pos, {name = name, param2 = 0}) + end power.update_network(pos, 0, tlib2, node) end, after_dig_node = function(pos, oldnode, oldmetadata, digger) diff --git a/power/powerswitch.lua b/power/powerswitch.lua index 0b55363..c5b056e 100644 --- a/power/powerswitch.lua +++ b/power/powerswitch.lua @@ -18,6 +18,7 @@ local M = minetest.get_meta local S = techage.S local Cable = techage.ElectricCable +local power = networks.power local Param2ToDir = { [0] = 6, @@ -28,9 +29,17 @@ local Param2ToDir = { [5] = 3, } -local function is_switchbox(pos) - return techage.get_node_lvm(pos).name == "techage:powerswitch_box" or - M(pos):get_string("techage_hidden_nodename") == "techage:powerswitch_box" +local function legacy_switchbox(pos) + local name = networks.hidden_name(pos) + if name == "techage:powerswitch_box" then + local meta = M(pos) + meta:set_int("networks_param2_copy", meta:get_int("tl2_param2_copy")) + if meta:get_int("networks_param2_copy") == 0 then + meta:set_string("networks_nodename", "techage:powerswitch_box_off") + else + meta:set_string("networks_nodename", "techage:powerswitch_box_on") + end + end end local function switch_on(pos, node, clicker, name) @@ -47,14 +56,8 @@ local function switch_on(pos, node, clicker, name) local dir = Param2ToDir[node.param2] local pos2 = tubelib2.get_pos(pos, dir) - if is_switchbox(pos2) then - if M(pos2):get_int("tl2_param2_copy") == 0 then - M(pos2):set_int("tl2_param2", techage.get_node_lvm(pos2).param2) - else - M(pos2):set_int("tl2_param2", M(pos2):get_int("tl2_param2_copy")) - end - Cable:after_place_tube(pos2, clicker) - end + legacy_switchbox(pos2) + power.turn_switch_on(pos2, Cable, "techage:powerswitch_box_off", "techage:powerswitch_box_on") end local function switch_off(pos, node, clicker, name) @@ -72,13 +75,9 @@ local function switch_off(pos, node, clicker, name) local dir = Param2ToDir[node.param2] local pos2 = tubelib2.get_pos(pos, dir) - if is_switchbox(pos2) then - local node2 = techage.get_node_lvm(pos2) - node2.param2 = M(pos2):get_int("tl2_param2") - M(pos2):set_int("tl2_param2_copy", M(pos2):get_int("tl2_param2")) - M(pos2):set_int("tl2_param2", 0) - Cable:after_dig_tube(pos2, node2) - end + legacy_switchbox(pos2) + power.turn_switch_off(pos2, Cable, "techage:powerswitch_box_off", "techage:powerswitch_box_on") + end diff --git a/power/powerswitchbox_legacy.lua b/power/powerswitchbox_legacy.lua index 9a63009..5b144b0 100644 --- a/power/powerswitchbox_legacy.lua +++ b/power/powerswitchbox_legacy.lua @@ -73,9 +73,9 @@ minetest.register_lbm({ label = "[techage] legacy Power Switch Box", name = "techage:powerswitch_box", nodenames = {"techage:powerswitch_box"}, - run_at_every_load = false, + run_at_every_load = true, action = function(pos, node) - if M(pos):get_int("tl2_param2" == 0 then + if M(pos):get_int("tl2_param2") == 0 then minetest.swap_node(pos, {name = "techage:powerswitch_box_off", param2 = node.param2}) M(pos):set_int("networks_param2", 0) else diff --git a/tools/trowel.lua b/tools/trowel.lua index 6e895fe..8d4b075 100644 --- a/tools/trowel.lua +++ b/tools/trowel.lua @@ -17,53 +17,6 @@ local P = minetest.string_to_pos local M = minetest.get_meta local S = techage.S - --- used by other tools: dug_node[player_name] = pos -techage.dug_node = {} - --- Determine if one node in the surrounding is a hidden tube/cable/pipe -local function other_hidden_nodes(pos, node_name) - return M({x=pos.x+1, y=pos.y, z=pos.z}):get_string(node_name) ~= "" or - M({x=pos.x-1, y=pos.y, z=pos.z}):get_string(node_name) ~= "" or - M({x=pos.x, y=pos.y+1, z=pos.z}):get_string(node_name) ~= "" or - M({x=pos.x, y=pos.y-1, z=pos.z}):get_string(node_name) ~= "" or - M({x=pos.x, y=pos.y, z=pos.z+1}):get_string(node_name) ~= "" or - M({x=pos.x, y=pos.y, z=pos.z-1}):get_string(node_name) ~= "" -end - -local function hide_node(pos, node, meta, placer) - local inv = placer:get_inventory() - local stack = inv:get_stack("main", 1) - local taken = stack:take_item(1) - local ndef = minetest.registered_nodes[taken:get_name()] - -- test if it is a simple node without logic - if taken:get_count() == 1 - and ndef - and not ndef.groups.soil - and not ndef.after_place_node - and not ndef.on_construct then - meta:set_string("techage_hidden_nodename", node.name) - meta:set_string("techage_hidden_param2", node.param2) - local param2 = 0 - if ndef.paramtype2 and ndef.paramtype2 == "facedir" then - param2 = minetest.dir_to_facedir(placer:get_look_dir(), true) - end - minetest.swap_node(pos, {name = taken:get_name(), param2 = param2}) - inv:set_stack("main", 1, stack) - end -end - -local function open_node(pos, node, meta, placer) - local name = meta:get_string("techage_hidden_nodename") - local param2 = meta:get_string("techage_hidden_param2") - minetest.swap_node(pos, {name = name, param2 = param2}) - meta:set_string("techage_hidden_nodename", "") - meta:set_string("techage_hidden_param2", "") - local inv = placer:get_inventory() - inv:add_item("main", ItemStack(node.name)) -end - --- Hide or open a node local function replace_node(itemstack, placer, pointed_thing) if pointed_thing.type == "node" then local pos = pointed_thing.under @@ -71,17 +24,24 @@ local function replace_node(itemstack, placer, pointed_thing) if minetest.is_protected(pos, name) then return end - local meta = M(pos) - local node = minetest.get_node(pos) + local node = minetest.get_node(pos) + local res = false if minetest.get_item_group(node.name, "techage_trowel") == 1 then - hide_node(pos, node, meta, placer) - elseif meta:get_string("techage_hidden_nodename") ~= "" then - open_node(pos, node, meta, placer) + res = networks.hide_node(pos, node, placer) + elseif networks.hidden_name(pos) then + res = networks.open_node(pos, node, placer) + else + minetest.chat_send_player(placer:get_player_name(), "Invalid/unsuported block!") + return + end + if res then + minetest.sound_play("default_dig_snappy", { + pos = pos, + gain = 1, + max_hear_distance = 5}) + elseif placer and placer.get_player_name then + minetest.chat_send_player(placer:get_player_name(), "Invalid fill material in inventory slot 1!") end - minetest.sound_play("default_dig_snappy", { - pos = pos, - gain = 1, - max_hear_distance = 5}) end end @@ -97,20 +57,6 @@ minetest.register_tool("techage:trowel", { stack_max = 1, }) -minetest.register_on_dignode(function(pos, oldnode, digger) - if not digger then return end - -- If hidden nodes are arround, the removed one was probably - -- a hidden node, too. - if other_hidden_nodes(pos, "techage_hidden_nodename") then - -- test both hidden networks - techage.ElectricCable:after_dig_node(pos, oldnode, digger) - -- probably a hidden node with mem data - techage.del_mem(pos) - else - -- store pos for other tools without own 'register_on_dignode' - techage.dug_node[digger:get_player_name()] = pos - end -end) minetest.register_craft({ output = "techage:trowel", @@ -120,35 +66,3 @@ minetest.register_craft({ {"", "", "default:stick"}, }, }) - -local function get_new_can_dig(old_can_dig) - return function(pos, player, ...) - if M(pos):get_string("techage_hidden_nodename") ~= "" then - if player and player.get_player_name then - minetest.chat_send_player(player:get_player_name(), S("Use a trowel to remove the node.")) - end - return false - end - if old_can_dig then - return old_can_dig(pos, player, ...) - else - return true - end - end -end - --- Change can_dig for already registered nodes. -for _, ndef in pairs(minetest.registered_nodes) do - local old_can_dig = ndef.can_dig - minetest.override_item(ndef.name, { - can_dig = get_new_can_dig(old_can_dig) - }) -end - --- Change can_dig for all nodes that are going to be registered in the future. -local old_register_node = minetest.register_node -minetest.register_node = function(name, def) - local old_can_dig = def.can_dig - def.can_dig = get_new_can_dig(old_can_dig) - return old_register_node(name, def) -end