Add support for minetest.swap_node
| | |
| | | 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 |
| | | |
| | |
| | | -- 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 |
| | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | 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() |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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.."]".. |
| | |
| | | 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 |
| | |
| | | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | 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 |
| | |
| | | |
| | | 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) |
| | |
| | | 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 |
| | |
| | | |
| | | 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.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("-----------") |
| | |
| | | |
| | | 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("-----------") |
| | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | |
| | | 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 |
| | |
| | | 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 |
| | | |
| | |
| | | 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) |
| | | |
| | |
| | | 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) |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | |
| | | 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 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)) |
| | |
| | | {"default:diamond"}, |
| | | {"technic:battery"}, |
| | | {"technic:stainless_steel_ingot"} |
| | | } |
| | | } |
| | | }) |
| | | |