ShadowNinja
2013-12-11 f3d8b47b20feac740057984a70f93f38252619eb
Add support for minetest.swap_node
19 files modified
142 ■■■■ changed files
technic/helpers.lua 24 ●●●●● patch | view | raw | blame | history
technic/init.lua 21 ●●●●● patch | view | raw | blame | history
technic/machines/HV/forcefield.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/HV/nuclear_reactor.lua 4 ●●●● patch | view | raw | blame | history
technic/machines/LV/cnc.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/LV/coal_alloy_furnace.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/LV/compressor.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/LV/extractor.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/LV/geothermal.lua 4 ●●●● patch | view | raw | blame | history
technic/machines/LV/water_mill.lua 4 ●●●● patch | view | raw | blame | history
technic/machines/MV/power_radiator.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/other/constructor.lua 12 ●●●● patch | view | raw | blame | history
technic/machines/other/frames.lua 2 ●●● patch | view | raw | blame | history
technic/machines/register/alloy_furnace.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/register/battery_box.lua 2 ●●● patch | view | raw | blame | history
technic/machines/register/electric_furnace.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/register/generator.lua 6 ●●●● patch | view | raw | blame | history
technic/machines/register/grinder.lua 6 ●●●● patch | view | raw | blame | history
technic/tools/sonic_screwdriver.lua 9 ●●●●● patch | view | raw | blame | history
technic/helpers.lua
@@ -8,3 +8,27 @@
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
technic/init.lua
@@ -40,27 +40,6 @@
-- 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
technic/machines/HV/forcefield.lua
@@ -178,7 +178,7 @@
            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 @@
            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)
technic/machines/HV/nuclear_reactor.lua
@@ -214,7 +214,7 @@
                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 @@
            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
technic/machines/LV/cnc.lua
@@ -200,17 +200,17 @@
        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
technic/machines/LV/coal_alloy_furnace.lua
@@ -121,7 +121,7 @@
            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 @@
        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 @@
        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
technic/machines/LV/compressor.lua
@@ -125,7 +125,7 @@
        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 @@
        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)
technic/machines/LV/extractor.lua
@@ -132,7 +132,7 @@
        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 @@
        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)
technic/machines/LV/geothermal.lua
@@ -99,11 +99,11 @@
            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
technic/machines/LV/water_mill.lua
@@ -89,12 +89,12 @@
        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
}) 
technic/machines/MV/power_radiator.lua
@@ -43,7 +43,7 @@
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 @@
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 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
technic/machines/other/constructor.lua
@@ -34,7 +34,7 @@
    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 @@
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 @@
    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 @@
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 @@
    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 @@
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
technic/machines/other/frames.lua
@@ -342,7 +342,7 @@
    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
technic/machines/register/alloy_furnace.lua
@@ -205,7 +205,7 @@
            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 @@
            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
technic/machines/register/battery_box.lua
@@ -126,7 +126,7 @@
            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
technic/machines/register/electric_furnace.lua
@@ -142,18 +142,18 @@
            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)
technic/machines/register/generator.lua
@@ -99,7 +99,7 @@
                    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 @@
                    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
technic/machines/register/grinder.lua
@@ -120,7 +120,7 @@
            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 @@
        
            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)
technic/tools/sonic_screwdriver.lua
@@ -44,12 +44,8 @@
            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 @@
        {"default:diamond"},
        {"technic:battery"},
        {"technic:stainless_steel_ingot"}
        }
    }
})