Add support for minetest.swap_node
authorShadowNinja <shadowninja@minetest.net>
Wed, 11 Dec 2013 01:14:39 +0000 (20:14 -0500)
committerShadowNinja <shadowninja@minetest.net>
Wed, 11 Dec 2013 01:14:39 +0000 (20:14 -0500)
19 files changed:
technic/helpers.lua
technic/init.lua
technic/machines/HV/forcefield.lua
technic/machines/HV/nuclear_reactor.lua
technic/machines/LV/cnc.lua
technic/machines/LV/coal_alloy_furnace.lua
technic/machines/LV/compressor.lua
technic/machines/LV/extractor.lua
technic/machines/LV/geothermal.lua
technic/machines/LV/water_mill.lua
technic/machines/MV/power_radiator.lua
technic/machines/other/constructor.lua
technic/machines/other/frames.lua
technic/machines/register/alloy_furnace.lua
technic/machines/register/battery_box.lua
technic/machines/register/electric_furnace.lua
technic/machines/register/generator.lua
technic/machines/register/grinder.lua
technic/tools/sonic_screwdriver.lua

index 3fee5bbfd3d423b9cf46e28913d577bf8deff479..459b48205f03957300ac86388a86416e1196f891 100644 (file)
@@ -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
+
index 001ae5f1f7ccde1bd67914b3495513d71a82baf4..7d41b890d8bea5355e92f817b939f7be3e64f897 100644 (file)
@@ -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
index 1c5e39e2dbaf91649697428b90fc985b9504cb8f..41adf94adbe2f534c6408aafff10e6ad562bb2c4 100644 (file)
@@ -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)
index afe0b5af7017e15db5853f7f57b274ec7edf7c6b..248d0c08889301e04ffd40b2356feaf3acf563af 100644 (file)
@@ -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
index 146c1a4a1a50fa7d000f83930f7ee366969552b6..10e9391a715a299f23023ff237ab4caa6ffb9a51 100644 (file)
@@ -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
index ad3420849affa2c7c5e7e3b7e027f3e9a110f506..36307b75b80f2a131ad8f78f2bb3ea08ec06d2ed 100644 (file)
@@ -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
index dd8c7923340e0354401206f6d898525eaeef14d5..91b2e1ddd1ce313007b82b6a413468934d4dc3f6 100644 (file)
@@ -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)
index f6df53294348cac2f1402c41e157f1b7707abee4..c4d8ad34e458f34b9e48b4d13e24073eb8dc99cc 100644 (file)
@@ -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)
index 606619274dd3947cf57b0c4d4433fb80504b73e7..855593c8c610500e8e72bdc636ab24b88836cc0b 100644 (file)
@@ -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
index bf67268c62d2c5caa9eba6123710532dd1924673..90a5bae39c1f74c21f816281a6a620e861b648e4 100644 (file)
@@ -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
 }) 
index 261757856b53b761d4b80462f46686ec17c389fc..6462606986480b5eb218e07dde09aa282c577140 100644 (file)
@@ -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
index f4ccd09ed4d9380c132aba61b5437fbcd09a9dbc..f4f541f8a607d308327dcebfab9494198777b491 100644 (file)
@@ -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
index 46cf7bf2280299637f5655c880f18301ea2d35ca..9eaf63ed81ca376a54088d957a85e6e19ba8be96 100644 (file)
@@ -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
index 4bb61fd29a1a472ab92787da3ace11fa1b006ae2..64080c1d08f454f6a4087b6876ca0870169152c9 100644 (file)
@@ -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
index 3124635c523b138f5ef84dfbad791c7d997ef0da..f9bc8939cc992e2314c7f32f9918537aeb88bd57 100644 (file)
@@ -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
 
index 7420ffe9212ea955997aa7923d3897d3f0bbd3d8..36e4f6d287ad4035d3080b873c239bbfb7ef97e8 100644 (file)
@@ -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)
 
index 0d2ecd3951f70f0426a4ee164676a7db3ea15830..3f2f118782370bcde08fb7181f590382aacd4c98 100644 (file)
@@ -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
index 66f4771e4742fafb3ecb22e52829c17ae7e484ba..24072e178a90074e3f9e9498fb6f8fe05f8aff29 100644 (file)
@@ -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)
index 32f29d6163c5027d7d4a60c85d65b298e466b723..163983407338436fa512d066caaac2144fdaa4ab 100644 (file)
@@ -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"}
-               }
+       }
 })
+