diff --git a/technic/helpers.lua b/technic/helpers.lua index 3fee5bb..459b482 100644 --- a/technic/helpers.lua +++ b/technic/helpers.lua @@ -8,3 +8,27 @@ end function set_item_meta (table) return minetest.serialize(table) end + +function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +minetest.swap_node = minetest.swap_node or function(pos, node) + local oldmeta = minetest.get_meta(pos):to_table() + minetest.set_node(pos, node) + minetest.get_meta(pos):from_table(oldmeta) +end + +-- Only changes name, keeps other params +function technic.swap_node(pos, name) + local node = minetest.get_node(pos) + if node.name ~= name then + node.name = name + minetest.swap_node(pos, node) + end + return node.name +end + diff --git a/technic/init.lua b/technic/init.lua index 001ae5f..7d41b89 100644 --- a/technic/init.lua +++ b/technic/init.lua @@ -40,27 +40,6 @@ dofile(modpath.."/tools/init.lua") -- Aliases for legacy node/item names dofile(modpath.."/legacy.lua") -function has_locked_chest_privilege(meta, player) - if player:get_player_name() ~= meta:get_string("owner") then - return false - end - return true -end - --- Swap nodes out. Return the node name. -function hacky_swap_node(pos, name) - local node = minetest.get_node(pos) - if node.name ~= name then - local meta = minetest.get_meta(pos) - local meta_table = meta:to_table() - node.name = name - minetest.set_node(pos, node) - meta = minetest.get_meta(pos) - meta:from_table(meta_table) - end - return node.name -end - if minetest.setting_get("log_mod") then print(S("[Technic] Loaded in %f seconds"):format(os.clock() - load_start)) end diff --git a/technic/machines/HV/forcefield.lua b/technic/machines/HV/forcefield.lua index 1c5e39e..41adf94 100644 --- a/technic/machines/HV/forcefield.lua +++ b/technic/machines/HV/forcefield.lua @@ -178,7 +178,7 @@ minetest.register_abm({ if node.name == "technic:forcefield_emitter_on" then meta:set_int("HV_EU_demand", 0) update_forcefield(pos, meta:get_int("range"), false) - hacky_swap_node(pos, "technic:forcefield_emitter_off") + technic.swap_node(pos, "technic:forcefield_emitter_off") meta:set_string("infotext", S("%s Disabled"):format(machine_name)) return end @@ -186,11 +186,11 @@ minetest.register_abm({ meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) if node.name == "technic:forcefield_emitter_on" then update_forcefield(pos, meta:get_int("range"), false) - hacky_swap_node(pos, "technic:forcefield_emitter_off") + technic.swap_node(pos, "technic:forcefield_emitter_off") end elseif eu_input >= power_requirement then if node.name == "technic:forcefield_emitter_off" then - hacky_swap_node(pos, "technic:forcefield_emitter_on") + technic.swap_node(pos, "technic:forcefield_emitter_on") meta:set_string("infotext", S("%s Active"):format(machine_name)) end update_forcefield(pos, meta:get_int("range"), true) diff --git a/technic/machines/HV/nuclear_reactor.lua b/technic/machines/HV/nuclear_reactor.lua index afe0b5a..248d0c0 100644 --- a/technic/machines/HV/nuclear_reactor.lua +++ b/technic/machines/HV/nuclear_reactor.lua @@ -214,7 +214,7 @@ minetest.register_abm({ if correct_fuel_count == 6 and check_reactor_structure(pos) then meta:set_int("burn_time", 1) - hacky_swap_node(pos, "technic:hv_nuclear_reactor_core_active") + technic.swap_node(pos, "technic:hv_nuclear_reactor_core_active") meta:set_int("HV_EU_supply", power_supply) for idx, srcstack in pairs(srclist) do srcstack:take_item() @@ -226,7 +226,7 @@ minetest.register_abm({ meta:set_int("HV_EU_supply", 0) meta:set_int("burn_time", 0) meta:set_string("infotext", S("%s Idle"):format(machine_name)) - hacky_swap_node(pos, "technic:hv_nuclear_reactor_core") + technic.swap_node(pos, "technic:hv_nuclear_reactor_core") elseif burn_time > 0 then damage_nearby_players(pos) if not check_reactor_structure(pos) then diff --git a/technic/machines/LV/cnc.lua b/technic/machines/LV/cnc.lua index 146c1a4..10e9391 100644 --- a/technic/machines/LV/cnc.lua +++ b/technic/machines/LV/cnc.lua @@ -200,17 +200,17 @@ minetest.register_abm({ if inv:is_empty("src") or (not minetest.registered_nodes[result]) or (not inv:room_for_item("dst", result)) then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_string("cnc_product", "") return end if eu_input < demand then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) elseif eu_input >= demand then - hacky_swap_node(pos, machine_node.."_active") + technic.swap_node(pos, machine_node.."_active") meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_int("src_time", meta:get_int("src_time") + 1) if meta:get_int("src_time") >= 3 then -- 3 ticks per output diff --git a/technic/machines/LV/coal_alloy_furnace.lua b/technic/machines/LV/coal_alloy_furnace.lua index ad34208..36307b7 100644 --- a/technic/machines/LV/coal_alloy_furnace.lua +++ b/technic/machines/LV/coal_alloy_furnace.lua @@ -121,7 +121,7 @@ minetest.register_abm({ local percent = math.floor(meta:get_float("fuel_time") / meta:get_float("fuel_totaltime") * 100) meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..percent.."%)") - hacky_swap_node(pos, "technic:coal_alloy_furnace_active") + technic.swap_node(pos, "technic:coal_alloy_furnace_active") meta:set_string("formspec", "size[8,9]".. "label[0,0;"..machine_name.."]".. @@ -144,7 +144,7 @@ minetest.register_abm({ if recipe then if was_active then meta:set_string("infotext", "Furnace is empty") - hacky_swap_node(pos, "technic:coal_alloy_furnace") + technic.swap_node(pos, "technic:coal_alloy_furnace") meta:set_string("formspec", formspec) end return @@ -160,7 +160,7 @@ minetest.register_abm({ if fuel.time <= 0 then meta:set_string("infotext", S("%s Out Of Fuel"):format(machine_name)) - hacky_swap_node(pos, "technic:coal_alloy_furnace") + technic.swap_node(pos, "technic:coal_alloy_furnace") meta:set_string("formspec", formspec) return end diff --git a/technic/machines/LV/compressor.lua b/technic/machines/LV/compressor.lua index dd8c792..91b2e1d 100644 --- a/technic/machines/LV/compressor.lua +++ b/technic/machines/LV/compressor.lua @@ -125,7 +125,7 @@ minetest.register_abm({ end if empty or (not result) or (not inv:room_for_item("dst", result)) then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_int("LV_EU_demand", 0) meta:set_int("src_time", 0) @@ -133,10 +133,10 @@ minetest.register_abm({ end if eu_input < demand then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) elseif eu_input >= demand then - hacky_swap_node(pos, machine_node.."_active") + technic.swap_node(pos, machine_node.."_active") meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_int("src_time", meta:get_int("src_time") + 1) diff --git a/technic/machines/LV/extractor.lua b/technic/machines/LV/extractor.lua index f6df532..c4d8ad3 100644 --- a/technic/machines/LV/extractor.lua +++ b/technic/machines/LV/extractor.lua @@ -132,7 +132,7 @@ minetest.register_abm({ end if inv:is_empty("src") or (not recipe) or (not result) or (not inv:room_for_item("dst", result)) then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_int("LV_EU_demand", 0) return @@ -140,11 +140,11 @@ minetest.register_abm({ if eu_input < demand then -- unpowered - go idle - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) elseif eu_input >= demand then -- Powered - hacky_swap_node(pos, machine_node.."_active") + technic.swap_node(pos, machine_node.."_active") meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_int("src_time", meta:get_int("src_time") + 1) diff --git a/technic/machines/LV/geothermal.lua b/technic/machines/LV/geothermal.lua index 6066192..855593c 100644 --- a/technic/machines/LV/geothermal.lua +++ b/technic/machines/LV/geothermal.lua @@ -99,11 +99,11 @@ minetest.register_abm({ S("Geothermal Generator").." ("..production_level.."%)") if production_level > 0 and minetest.get_node(pos).name == "technic:geothermal" then - hacky_swap_node (pos, "technic:geothermal_active") + technic.swap_node (pos, "technic:geothermal_active") return end if production_level == 0 then - hacky_swap_node(pos, "technic:geothermal") + technic.swap_node(pos, "technic:geothermal") meta:set_int("LV_EU_supply", 0) end end diff --git a/technic/machines/LV/water_mill.lua b/technic/machines/LV/water_mill.lua index bf67268..90a5bae 100644 --- a/technic/machines/LV/water_mill.lua +++ b/technic/machines/LV/water_mill.lua @@ -89,12 +89,12 @@ minetest.register_abm({ if production_level > 0 and minetest.get_node(pos).name == "technic:water_mill" then - hacky_swap_node (pos, "technic:water_mill_active") + technic.swap_node (pos, "technic:water_mill_active") meta:set_int("LV_EU_supply", 0) return end if production_level == 0 then - hacky_swap_node(pos, "technic:water_mill") + technic.swap_node(pos, "technic:water_mill") end end }) diff --git a/technic/machines/MV/power_radiator.lua b/technic/machines/MV/power_radiator.lua index 2617578..6462606 100644 --- a/technic/machines/MV/power_radiator.lua +++ b/technic/machines/MV/power_radiator.lua @@ -43,7 +43,7 @@ end technic.inductive_on_punch_off = function(pos, eu_charge, swapnode) local meta = minetest.get_meta(pos) if meta:get_string("has_supply") ~= "" then - hacky_swap_node(pos, swapnode) + technic.swap_node(pos, swapnode) meta:set_int("active", 1) meta:set_int("EU_charge",eu_charge) --print("-----------") @@ -56,7 +56,7 @@ end technic.inductive_on_punch_on = function(pos, eu_charge, swapnode) local meta = minetest.get_meta(pos) - hacky_swap_node(pos, swapnode) + technic.swap_node(pos, swapnode) meta:set_int("active", 0) meta:set_int("EU_charge",eu_charge) --print("-----------") @@ -82,7 +82,7 @@ local shutdown_inductive_appliances = function(pos) local nodename = minetest.get_node(pos1).name -- Swap the node and make sure it is off and unpowered if string.sub(nodename, -7) == "_active" then - hacky_swap_node(pos1, string.sub(nodename, 1, -8)) + technic.swap_node(pos1, string.sub(nodename, 1, -8)) meta1:set_int("active", 0) meta1:set_int("EU_charge", 0) end diff --git a/technic/machines/other/constructor.lua b/technic/machines/other/constructor.lua index f4ccd09..f4f541f 100644 --- a/technic/machines/other/constructor.lua +++ b/technic/machines/other/constructor.lua @@ -34,7 +34,7 @@ mk1_on = function(pos, node) if node.param2==0 then pos1.z=pos1.z-1 end if node.name == "technic:constructor_mk1_off" then - hacky_swap_node(pos,"technic:constructor_mk1_on") + technic.swap_node(pos,"technic:constructor_mk1_on") nodeupdate(pos) local node1=minetest.get_node(pos1) deploy_node (inv,"slot1",pos1,node1,node) @@ -43,7 +43,7 @@ end mk1_off = function(pos, node) if node.name == "technic:constructor_mk1_on" then - hacky_swap_node(pos,"technic:constructor_mk1_off") + technic.swap_node(pos,"technic:constructor_mk1_off") nodeupdate(pos) end end @@ -114,7 +114,7 @@ mk2_on = function(pos, node) if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 end if node.name == "technic:constructor_mk2_off" then - hacky_swap_node(pos,"technic:constructor_mk2_on") + technic.swap_node(pos,"technic:constructor_mk2_on") nodeupdate(pos) local node1=minetest.get_node(pos1) deploy_node (inv,"slot1",pos1,node1,node) @@ -125,7 +125,7 @@ end mk2_off = function(pos, node) if node.name == "technic:constructor_mk2_on" then - hacky_swap_node(pos,"technic:constructor_mk2_off") + technic.swap_node(pos,"technic:constructor_mk2_off") nodeupdate(pos) end end @@ -212,7 +212,7 @@ mk3_on = function(pos, node) if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 pos3.z=pos3.z-3 pos4.z=pos4.z-4 end if node.name == "technic:constructor_mk3_off" then - hacky_swap_node(pos,"technic:constructor_mk3_on") + technic.swap_node(pos,"technic:constructor_mk3_on") nodeupdate(pos) local node1=minetest.get_node(pos1) deploy_node (inv,"slot1",pos1,node1,node) @@ -227,7 +227,7 @@ end mk3_off = function(pos, node) if node.name == "technic:constructor_mk3_on" then - hacky_swap_node(pos,"technic:constructor_mk3_off") + technic.swap_node(pos,"technic:constructor_mk3_off") nodeupdate(pos) end end diff --git a/technic/machines/other/frames.lua b/technic/machines/other/frames.lua index 46cf7bf..9eaf63e 100644 --- a/technic/machines/other/frames.lua +++ b/technic/machines/other/frames.lua @@ -342,7 +342,7 @@ local function swap_template(pos, new) local meta = minetest.get_meta(pos) local saved_node = meta:get_string("saved_node") meta:set_string("saved_node", "") - hacky_swap_node(pos, new) + technic.swap_node(pos, new) local meta = minetest.get_meta(pos) meta:set_string("saved_node", saved_node) end diff --git a/technic/machines/register/alloy_furnace.lua b/technic/machines/register/alloy_furnace.lua index 4bb61fd..64080c1 100644 --- a/technic/machines/register/alloy_furnace.lua +++ b/technic/machines/register/alloy_furnace.lua @@ -205,7 +205,7 @@ function technic.register_alloy_furnace(data) end if not result or not inv:room_for_item("dst", result) then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_int(tier.."_EU_demand", 0) return @@ -213,11 +213,11 @@ function technic.register_alloy_furnace(data) if eu_input < machine_demand[EU_upgrade+1] then -- Unpowered - go idle - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) elseif eu_input >= machine_demand[EU_upgrade+1] then -- Powered - hacky_swap_node(pos, machine_node.."_active") + technic.swap_node(pos, machine_node.."_active") meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_int("src_time", meta:get_int("src_time") + 1) if meta:get_int("src_time") == data.cook_time then diff --git a/technic/machines/register/battery_box.lua b/technic/machines/register/battery_box.lua index 3124635..f9bc893 100644 --- a/technic/machines/register/battery_box.lua +++ b/technic/machines/register/battery_box.lua @@ -126,7 +126,7 @@ function technic.register_battery_box(data) charge_count = math.max(charge_count, 0) local last_count = meta:get_float("last_side_shown") if charge_count ~= last_count then - hacky_swap_node(pos,"technic:"..ltier.."_battery_box"..charge_count) + technic.swap_node(pos,"technic:"..ltier.."_battery_box"..charge_count) meta:set_float("last_side_shown", charge_count) end diff --git a/technic/machines/register/electric_furnace.lua b/technic/machines/register/electric_furnace.lua index 7420ffe..36e4f6d 100644 --- a/technic/machines/register/electric_furnace.lua +++ b/technic/machines/register/electric_furnace.lua @@ -142,18 +142,18 @@ function technic.register_electric_furnace(data) if not result or result.time == 0 or not inv:room_for_item("dst", result.item) then meta:set_int(tier.."_EU_demand", 0) - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Idle"):format(machine_name)) return end if eu_input < machine_demand[EU_upgrade+1] then -- Unpowered - go idle - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) elseif eu_input >= machine_demand[EU_upgrade+1] then -- Powered - hacky_swap_node(pos, machine_node.."_active") + technic.swap_node(pos, machine_node.."_active") meta:set_string("infotext", S("%s Active"):format(machine_name)) technic.smelt_item(meta, result, data.speed) diff --git a/technic/machines/register/generator.lua b/technic/machines/register/generator.lua index 0d2ecd3..3f2f118 100644 --- a/technic/machines/register/generator.lua +++ b/technic/machines/register/generator.lua @@ -99,7 +99,7 @@ function technic.register_generator(data) fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) if not fuel or fuel.time == 0 then meta:set_string("infotext", S("%s Out Of Fuel"):format(desc)) - hacky_swap_node(pos, "technic:"..ltier.."_generator") + technic.swap_node(pos, "technic:"..ltier.."_generator") return end meta:set_int("burn_time", fuel.time) @@ -107,10 +107,10 @@ function technic.register_generator(data) local stack = inv:get_stack("src", 1) stack:take_item() inv:set_stack("src", 1, stack) - hacky_swap_node(pos, "technic:"..ltier.."_generator_active") + technic.swap_node(pos, "technic:"..ltier.."_generator_active") meta:set_int(tier.."_EU_supply", data.supply) else - hacky_swap_node(pos, "technic:"..ltier.."_generator") + technic.swap_node(pos, "technic:"..ltier.."_generator") meta:set_int(tier.."_EU_supply", 0) end end diff --git a/technic/machines/register/grinder.lua b/technic/machines/register/grinder.lua index 66f4771..24072e1 100644 --- a/technic/machines/register/grinder.lua +++ b/technic/machines/register/grinder.lua @@ -120,7 +120,7 @@ function technic.register_grinder(data) local result = technic.get_grinder_recipe(inv:get_stack("src", 1)) if not result then - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_int(tier.."_EU_demand", 0) return @@ -128,11 +128,11 @@ function technic.register_grinder(data) if eu_input < machine_demand[EU_upgrade+1] then -- Unpowered - go idle - hacky_swap_node(pos, machine_node) + technic.swap_node(pos, machine_node) meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) elseif eu_input >= machine_demand[EU_upgrade+1] then -- Powered - hacky_swap_node(pos, machine_node.."_active") + technic.swap_node(pos, machine_node.."_active") meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_int("src_time", meta:get_int("src_time") + 1) diff --git a/technic/tools/sonic_screwdriver.lua b/technic/tools/sonic_screwdriver.lua index 32f29d6..1639834 100644 --- a/technic/tools/sonic_screwdriver.lua +++ b/technic/tools/sonic_screwdriver.lua @@ -44,12 +44,8 @@ minetest.register_tool("technic:sonic_screwdriver", { if minetest.is_protected(pos, user:get_player_name()) then minetest.record_protection_violation(pos, user:get_player_name()) else - local meta = minetest.get_meta(pos) - local meta0 = meta:to_table() node.param2 = p - minetest.set_node(pos, node) - meta = minetest.get_meta(pos) - meta:from_table(meta0) + minetest.swap_node(pos, node) meta1.charge = meta1.charge - 100 itemstack:set_metadata(set_item_meta(meta1)) @@ -66,5 +62,6 @@ minetest.register_craft({ {"default:diamond"}, {"technic:battery"}, {"technic:stainless_steel_ingot"} - } + } }) +