diff --git a/basic_machines/chest.lua b/basic_machines/chest.lua index 5f4e0b3..562cb39 100644 --- a/basic_machines/chest.lua +++ b/basic_machines/chest.lua @@ -42,7 +42,7 @@ local function can_dig(pos, player) end local function after_dig_node(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end local function formspec2() diff --git a/basic_machines/consumer.lua b/basic_machines/consumer.lua index 0cc5239..53abb76 100644 --- a/basic_machines/consumer.lua +++ b/basic_machines/consumer.lua @@ -197,7 +197,7 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState if crd.power_netw then crd.power_netw:after_dig_node(pos) end - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end diff --git a/basic_machines/ta4_chest.lua b/basic_machines/ta4_chest.lua index 5c77176..d98e00e 100644 --- a/basic_machines/ta4_chest.lua +++ b/basic_machines/ta4_chest.lua @@ -436,7 +436,7 @@ local function on_rotate(pos, node, user, mode, new_param2) end local function after_dig_node(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) convert_to_chest_again(pos, oldnode, digger) end diff --git a/basis/command.lua b/basis/command.lua index 94b4464..12fe9d1 100644 --- a/basis/command.lua +++ b/basis/command.lua @@ -18,6 +18,7 @@ local S = function(pos) if pos then return minetest.pos_to_string(pos) end end --local M = minetest.get_meta local NodeInfoCache = {} +local NumbersToBeRecycled = {} local MP = minetest.get_modpath("techage") local techage_use_sqlite = minetest.settings:get_bool('techage_use_sqlite', false) @@ -210,17 +211,19 @@ function techage.add_node(pos, name) if item_handling_node(name) then Tube:after_place_node(pos) end - -- store position - return get_number(pos, true) + local key = minetest.hash_node_position(pos) + return NumbersToBeRecycled[key] or get_number(pos, true) end -- Function removes the node from the techage lists. -function techage.remove_node(pos) - local number = get_number(pos) +function techage.remove_node(pos, oldnode, oldmetadata) + local number = oldmetadata and oldmetadata.fields and oldmetadata.fields.node_number + number = number or get_number(pos) if number then + local key = minetest.hash_node_position(pos) + NumbersToBeRecycled[key] = number local ninfo = NodeInfoCache[number] or update_nodeinfo(number) if ninfo then - backend.del_nodepos(number) NodeInfoCache[number] = nil if item_handling_node(ninfo.name) then Tube:after_dig_node(pos) diff --git a/carts/chest_cart.lua b/carts/chest_cart.lua index 20e8a6c..2cd29bd 100644 --- a/carts/chest_cart.lua +++ b/carts/chest_cart.lua @@ -17,6 +17,10 @@ local M = minetest.get_meta local S = techage.S local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end local S2P = minetest.string_to_pos +local MP = minetest.get_modpath("minecart") +local cart = dofile(MP.."/cart_lib1.lua") + +cart:init(true) local function formspec() return "size[8,6]".. @@ -31,7 +35,8 @@ end local function can_dig(pos, player) local owner = M(pos):get_string("owner") - if owner ~= "" and owner ~= player:get_player_name() then + if owner ~= "" and (owner ~= player:get_player_name() or + not minetest.check_player_privs(player:get_player_name(), "minecart")) then return false end local inv = minetest.get_meta(pos):get_inventory() @@ -91,12 +96,11 @@ minetest.register_node("techage:chest_cart", { end, on_place = function(itemstack, placer, pointed_thing) - return minecart.node_on_place(itemstack, placer, pointed_thing, - "techage:chest_cart") + return cart.add_cart(itemstack, placer, pointed_thing, "techage:chest_cart") end, on_punch = function(pos, node, puncher, pointed_thing) - minecart.node_on_punch(pos, node, puncher, pointed_thing, "techage:chest_cart_entity") + cart.node_on_punch(pos, node, puncher, pointed_thing, "techage:chest_cart_entity") end, set_cargo = function(pos, data) @@ -133,9 +137,9 @@ minecart.register_cart_entity("techage:chest_cart_entity", "techage:chest_cart", visual_size = {x=0.66, y=0.66, z=0.66}, static_save = false, }, - on_activate = minecart.on_activate, - on_punch = minecart.on_punch, - on_step = minecart.on_step, + on_activate = cart.on_activate, + on_punch = cart.on_punch, + on_step = cart.on_step, }) techage.register_node({"techage:chest_cart"}, { diff --git a/carts/tank_cart.lua b/carts/tank_cart.lua index 4cc4a14..562ecec 100644 --- a/carts/tank_cart.lua +++ b/carts/tank_cart.lua @@ -19,6 +19,10 @@ local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end local S2P = minetest.string_to_pos local Pipe = techage.LiquidPipe local liquid = techage.liquid +local MP = minetest.get_modpath("minecart") +local cart = dofile(MP.."/cart_lib1.lua") + +cart:init(true) local CAPACITY = 100 @@ -110,8 +114,7 @@ minetest.register_node("techage:tank_cart", { end, on_place = function(itemstack, placer, pointed_thing) - return minecart.node_on_place(itemstack, placer, pointed_thing, - "techage:tank_cart") + return cart.add_cart(itemstack, placer, pointed_thing, "techage:tank_cart") end, on_punch = function(pos, node, puncher, pointed_thing) @@ -121,7 +124,7 @@ minetest.register_node("techage:tank_cart", { if techage.liquid.is_container_empty(wielded_item) then liquid.on_punch(pos, node, puncher, pointed_thing) else - minecart.node_on_punch(pos, node, puncher, pointed_thing, "techage:tank_cart_entity") + cart.node_on_punch(pos, node, puncher, pointed_thing, "techage:tank_cart_entity") end end, @@ -170,9 +173,9 @@ minecart.register_cart_entity("techage:tank_cart_entity", "techage:tank_cart", { visual_size = {x=0.66, y=0.66, z=0.66}, static_save = false, }, - on_activate = minecart.on_activate, - on_punch = minecart.on_punch, - on_step = minecart.on_step, + on_activate = cart.on_activate, + on_punch = cart.on_punch, + on_step = cart.on_step, }) minetest.register_craft({ diff --git a/chemistry/ta4_doser.lua b/chemistry/ta4_doser.lua index ed63184..a94eae8 100644 --- a/chemistry/ta4_doser.lua +++ b/chemistry/ta4_doser.lua @@ -267,7 +267,7 @@ minetest.register_node("techage:ta4_doser", { del_liquids(pos) end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) Pipe:after_dig_node(pos) techage.del_mem(pos) end, diff --git a/icta_controller/commands.lua b/icta_controller/commands.lua index f1b096a..e140e4d 100644 --- a/icta_controller/commands.lua +++ b/icta_controller/commands.lua @@ -688,4 +688,3 @@ techage.icta_register_action("set_filter", { return send_single_string(environ, data.number, "filter", payload) end, }) - diff --git a/icta_controller/controller.lua b/icta_controller/controller.lua index 1a2ca3c..9b41145 100644 --- a/icta_controller/controller.lua +++ b/icta_controller/controller.lua @@ -451,8 +451,8 @@ minetest.register_node("techage:ta4_icta_controller", { return end - minetest.node_dig(pos, node, puncher, pointed_thing) techage.remove_node(pos) + minetest.node_dig(pos, node, puncher, pointed_thing) end, on_timer = on_timer, diff --git a/icta_controller/display.lua b/icta_controller/display.lua index 0c37533..04640c5 100644 --- a/icta_controller/display.lua +++ b/icta_controller/display.lua @@ -110,8 +110,8 @@ minetest.register_node("techage:ta4_display", { minetest.get_node_timer(pos):start(1) end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, on_timer = on_timer, @@ -157,8 +157,8 @@ minetest.register_node("techage:ta4_displayXL", { minetest.get_node_timer(pos):start(2) end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, on_timer = on_timer, diff --git a/icta_controller/signaltower.lua b/icta_controller/signaltower.lua index 5d51f05..5aeebc7 100644 --- a/icta_controller/signaltower.lua +++ b/icta_controller/signaltower.lua @@ -56,8 +56,8 @@ minetest.register_node("techage:ta4_signaltower", { end end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, paramtype = "light", diff --git a/liquids/silo.lua b/liquids/silo.lua index 1114565..b6fb63d 100644 --- a/liquids/silo.lua +++ b/liquids/silo.lua @@ -161,7 +161,7 @@ minetest.register_node("techage:ta3_silo", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) Pipe:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end, liquid = tLiquid, networks = tNetworks, @@ -206,7 +206,7 @@ minetest.register_node("techage:ta4_silo", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) Pipe:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end, liquid = tLiquid, networks = tNetworks, diff --git a/liquids/tank.lua b/liquids/tank.lua index d5dace8..9663653 100644 --- a/liquids/tank.lua +++ b/liquids/tank.lua @@ -103,7 +103,7 @@ minetest.register_node("techage:ta3_tank", { on_punch = liquid.on_punch, after_dig_node = function(pos, oldnode, oldmetadata, digger) Pipe:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end, liquid = { capa = CAPACITY, @@ -161,7 +161,7 @@ minetest.register_node("techage:oiltank", { on_punch = liquid.on_punch, after_dig_node = function(pos, oldnode, oldmetadata, digger) Pipe:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end, liquid = { capa = CAPACITY * 4, @@ -209,7 +209,7 @@ minetest.register_node("techage:ta4_tank", { on_punch = liquid.on_punch, after_dig_node = function(pos, oldnode, oldmetadata, digger) Pipe:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end, liquid = { capa = CAPACITY * 2, diff --git a/logic/button.lua b/logic/button.lua index cb77c77..12e1053 100644 --- a/logic/button.lua +++ b/logic/button.lua @@ -140,7 +140,7 @@ local function techage_set_numbers(pos, numbers, player_name) end local function after_dig_node(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end minetest.register_node("techage:ta3_button_off", { diff --git a/logic/cart_detector.lua b/logic/cart_detector.lua index fbc49ff..e4cc429 100644 --- a/logic/cart_detector.lua +++ b/logic/cart_detector.lua @@ -73,7 +73,7 @@ local function techage_set_numbers(pos, numbers, player_name) end local function after_dig_node(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end minetest.register_node("techage:ta3_cartdetector_off", { diff --git a/logic/collector.lua b/logic/collector.lua index 4f3ace4..c0fa6ef 100644 --- a/logic/collector.lua +++ b/logic/collector.lua @@ -177,8 +177,8 @@ minetest.register_node("techage:ta4_collector", { on_timer = on_timer, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, paramtype = "light", diff --git a/logic/detector.lua b/logic/detector.lua index 8a2bc49..a3fd146 100644 --- a/logic/detector.lua +++ b/logic/detector.lua @@ -76,7 +76,7 @@ local function techage_set_numbers(pos, numbers, player_name) end local function after_dig_node(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end diff --git a/logic/doorblock.lua b/logic/doorblock.lua index 721d819..70108db 100644 --- a/logic/doorblock.lua +++ b/logic/doorblock.lua @@ -78,8 +78,8 @@ for idx,pgn in ipairs(tPgns) do end end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, paramtype = "light", diff --git a/logic/doorcontroller.lua b/logic/doorcontroller.lua index 8e77d04..b670755 100644 --- a/logic/doorcontroller.lua +++ b/logic/doorcontroller.lua @@ -105,9 +105,9 @@ minetest.register_node("techage:ta3_doorcontroller", { return res end, - after_dig_node = function(pos) + after_dig_node = function(pos, oldnode, oldmetadata) swap_door_nodes(pos, false) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, diff --git a/logic/gateblock.lua b/logic/gateblock.lua index 447f536..f5ceb55 100644 --- a/logic/gateblock.lua +++ b/logic/gateblock.lua @@ -64,8 +64,8 @@ for idx,pgn in ipairs(tPgns) do end end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, paramtype = "light", diff --git a/logic/lua_logic.lua b/logic/lua_logic.lua index 8b68be2..1fc9449 100644 --- a/logic/lua_logic.lua +++ b/logic/lua_logic.lua @@ -207,8 +207,8 @@ minetest.register_node("techage:ta3_logic", { return res end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, diff --git a/logic/node_detector.lua b/logic/node_detector.lua index 50b491b..34cea52 100644 --- a/logic/node_detector.lua +++ b/logic/node_detector.lua @@ -135,7 +135,7 @@ minetest.register_node("techage:ta3_nodedetector_off", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, @@ -165,7 +165,7 @@ minetest.register_node("techage:ta3_nodedetector_on", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, diff --git a/logic/player_detector.lua b/logic/player_detector.lua index a4cfd94..ef4a120 100644 --- a/logic/player_detector.lua +++ b/logic/player_detector.lua @@ -133,7 +133,7 @@ minetest.register_node("techage:ta3_playerdetector_off", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, @@ -168,7 +168,7 @@ minetest.register_node("techage:ta3_playerdetector_on", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, @@ -224,7 +224,7 @@ minetest.register_node("techage:ta4_playerdetector_off", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, @@ -273,7 +273,7 @@ minetest.register_node("techage:ta4_playerdetector_on", { end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, diff --git a/logic/repeater.lua b/logic/repeater.lua index 9d0401a..4b24543 100644 --- a/logic/repeater.lua +++ b/logic/repeater.lua @@ -72,8 +72,8 @@ minetest.register_node("techage:ta3_repeater", { return res end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, diff --git a/logic/sequencer.lua b/logic/sequencer.lua index 494cafc..45b8467 100644 --- a/logic/sequencer.lua +++ b/logic/sequencer.lua @@ -228,8 +228,8 @@ minetest.register_node("techage:ta3_sequencer", { end local nvm = techage.get_nvm(pos) if not nvm.running then - minetest.node_dig(pos, node, puncher, pointed_thing) techage.remove_node(pos) + minetest.node_dig(pos, node, puncher, pointed_thing) techage.del_mem(pos) end end, diff --git a/logic/signallamp.lua b/logic/signallamp.lua index fa4b10b..385960a 100644 --- a/logic/signallamp.lua +++ b/logic/signallamp.lua @@ -54,7 +54,7 @@ minetest.register_node("techage:signal_lamp_off", { on_rightclick = switch_on, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) if COLORED then unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger) end @@ -97,7 +97,7 @@ minetest.register_node("techage:signal_lamp_on", { after_place_node = COLORED and unifieddyes.recolor_on_place or nil, after_dig_node = function(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) if COLORED then unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger) end diff --git a/logic/terminal.lua b/logic/terminal.lua index ed553ad..121d5c9 100644 --- a/logic/terminal.lua +++ b/logic/terminal.lua @@ -226,8 +226,8 @@ local function register_terminal(num, tiles, node_box, selection_box) end end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, paramtype = "light", diff --git a/logic/timer.lua b/logic/timer.lua index bbdcfd2..0705c8b 100644 --- a/logic/timer.lua +++ b/logic/timer.lua @@ -175,8 +175,8 @@ minetest.register_node("techage:ta3_timer", { on_timer = check_rules, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end, diff --git a/lua_controller/controller.lua b/lua_controller/controller.lua index a72261c..72f3acf 100644 --- a/lua_controller/controller.lua +++ b/lua_controller/controller.lua @@ -533,8 +533,8 @@ minetest.register_node("techage:ta4_lua_controller", { return end - minetest.node_dig(pos, node, puncher, pointed_thing) techage.remove_node(pos) + minetest.node_dig(pos, node, puncher, pointed_thing) end, on_timer = on_timer, diff --git a/lua_controller/sensorchest.lua b/lua_controller/sensorchest.lua index 7f46470..aa04ddc 100644 --- a/lua_controller/sensorchest.lua +++ b/lua_controller/sensorchest.lua @@ -89,7 +89,7 @@ local function can_dig(pos, player) end local function after_dig_node(pos, oldnode, oldmetadata, digger) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) end local function formspec1() diff --git a/lua_controller/server.lua b/lua_controller/server.lua index a23e394..f9ea5c3 100644 --- a/lua_controller/server.lua +++ b/lua_controller/server.lua @@ -86,8 +86,8 @@ minetest.register_node("techage:ta4_server", { return end techage.del_mem(pos) - minetest.node_dig(pos, node, puncher, pointed_thing) techage.remove_node(pos) + minetest.node_dig(pos, node, puncher, pointed_thing) end, on_timer = function(pos, elasped) diff --git a/lua_controller/terminal.lua b/lua_controller/terminal.lua index 4332c7d..5dfb0f5 100644 --- a/lua_controller/terminal.lua +++ b/lua_controller/terminal.lua @@ -173,8 +173,8 @@ minetest.register_node("techage:ta4_terminal", { end end, - after_dig_node = function(pos) - techage.remove_node(pos) + after_dig_node = function(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) end, paramtype = "light", diff --git a/manuals/ta4_lua_controller_EN.pdf b/manuals/ta4_lua_controller_EN.pdf index 06a17c0..62ffe0b 100644 Binary files a/manuals/ta4_lua_controller_EN.pdf and b/manuals/ta4_lua_controller_EN.pdf differ diff --git a/solar/minicell.lua b/solar/minicell.lua index 795ba9e..ec79066 100644 --- a/solar/minicell.lua +++ b/solar/minicell.lua @@ -72,9 +72,9 @@ local function after_place_node(pos) Cable:after_place_node(pos) end -local function after_dig_node(pos, oldnode) +local function after_dig_node(pos, oldnode, oldmetadata) Cable:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end diff --git a/wind_turbine/rotor.lua b/wind_turbine/rotor.lua index 43f0184..5be5909 100644 --- a/wind_turbine/rotor.lua +++ b/wind_turbine/rotor.lua @@ -171,14 +171,14 @@ local function after_place_node(pos, placer) Cable:after_place_node(pos) end -local function after_dig_node(pos, oldnode) +local function after_dig_node(pos, oldnode, oldmetadata) local hash = minetest.hash_node_position(pos) if Rotors[hash] and Rotors[hash]:get_luaentity() then Rotors[hash]:remove() end Rotors[hash] = nil Cable:after_dig_node(pos) - techage.remove_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end