diff --git a/autocrafter.lua b/autocrafter.lua index c020c49..6134e03 100644 --- a/autocrafter.lua +++ b/autocrafter.lua @@ -193,8 +193,9 @@ local function update_meta(meta, enabled) "listring[context;dst]" .. "listring[current_player;main]" if minetest.get_modpath("digilines") then - fs = fs.."field[1,3.5;4,1;channel;"..S("Channel")..";${channel}]" - fs = fs.."button_exit[5,3.2;2,1;save;"..S("Save").."]" + fs = fs.."field[0.3,3.5;4.5,1;channel;"..S("Channel")..";${channel}]".. + "button[4.5,3.2;1.5,1;set_channel;"..S("Set").."]".. + "button_exit[6,3.2;2,1;close;"..S("Close").."]" end meta:set_string("formspec",fs) @@ -279,7 +280,7 @@ minetest.register_node("pipeworks:autocrafter", { update_meta(meta, false) end, on_receive_fields = function(pos, formname, fields, sender) - if (fields.quit and not fields.key_enter_field) + if not fields.channel or (fields.quit and not fields.key_enter_field) or not pipeworks.may_configure(pos, sender) then return end @@ -291,8 +292,9 @@ minetest.register_node("pipeworks:autocrafter", { if update_meta(meta, true) then start_crafter(pos) end - elseif fields.save then - meta:set_string("channel",fields.channel) + end + if fields.channel then + meta:set_string("channel", fields.channel) end end, can_dig = function(pos, player) diff --git a/init.lua b/init.lua index f14b3ba..beeefb7 100644 --- a/init.lua +++ b/init.lua @@ -151,7 +151,7 @@ minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty") -- Unified Inventory categories integration -if unified_inventory and unified_inventory.registered_categories then +if minetest.global_exists("unified_inventory") and unified_inventory.registered_categories then if not unified_inventory.registered_categories["automation"] then unified_inventory.register_category("automation", { symbol = "pipeworks:lua_tube000000", diff --git a/teleport_tube.lua b/teleport_tube.lua index 0960a47..e812b70 100644 --- a/teleport_tube.lua +++ b/teleport_tube.lua @@ -4,6 +4,9 @@ local filename=minetest.get_worldpath() .. "/teleport_tubes" local tp_tube_db = nil -- nil forces a read local tp_tube_db_version = 2.0 +-- cached rceiver list: hash(pos) => {receivers} +local cache = {} + local function hash(pos) return string.format("%.30g", minetest.hash_node_position(pos)) end @@ -18,6 +21,8 @@ local function save_tube_db() else error(err) end + -- reset tp-tube cache + cache = {} end local function migrate_tube_db() @@ -101,6 +106,12 @@ local function read_node_with_vm(pos) end local function get_receivers(pos, channel) + local hash = minetest.hash_node_position(pos) + if cache[hash] then + -- re-use cached result + return cache[hash] + end + local tubes = tp_tube_db or read_tube_db() local receivers = {} local dirty = false @@ -121,6 +132,8 @@ local function get_receivers(pos, channel) if dirty then save_tube_db() end + -- cache the result for next time + cache[hash] = receivers return receivers end