From 399ee9f5b5ded1c423f4aa652c2e2252abbe5312 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Tue, 8 Mar 2022 12:15:30 -0500 Subject: [PATCH 1/7] Avoid duplicating VManip data in Lua memory (#600) --- mesecons/util.lua | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/mesecons/util.lua b/mesecons/util.lua index 80afd09..f4137e5 100644 --- a/mesecons/util.lua +++ b/mesecons/util.lua @@ -317,15 +317,14 @@ end -- -- Contents of the table are: -- “vm” → the VoxelManipulator --- “va” → the VoxelArea --- “data” → the data array --- “param1” → the param1 array --- “param2” → the param2 array -- “dirty” → true if data has been modified -- -- Nil if no VM-based transaction is in progress. local vm_cache = nil +-- Cache from node position hashes to nodes (represented as tables). +local vm_node_cache = nil + -- Whether the current transaction will need a light update afterward. local vm_update_light = false @@ -337,6 +336,7 @@ local vm_update_light = false -- vm_abort. function mesecon.vm_begin() vm_cache = {} + vm_node_cache = {} vm_update_light = false end @@ -346,18 +346,19 @@ function mesecon.vm_commit() for hash, tbl in pairs(vm_cache) do if tbl.dirty then local vm = tbl.vm - vm:set_data(tbl.data) vm:write_to_map(vm_update_light) vm:update_map() end end vm_cache = nil + vm_node_cache = nil end -- Finishes a VoxelManipulator-based transaction, freeing the VMs and throwing -- away any modified areas. function mesecon.vm_abort() vm_cache = nil + vm_node_cache = nil end -- Gets the cache entry covering a position, populating it if necessary. @@ -365,10 +366,7 @@ local function vm_get_or_create_entry(pos) local hash = hash_blockpos(pos) local tbl = vm_cache[hash] if not tbl then - local vm = minetest.get_voxel_manip(pos, pos) - local min_pos, max_pos = vm:get_emerged_area() - local va = VoxelArea:new{MinEdge = min_pos, MaxEdge = max_pos} - tbl = {vm = vm, va = va, data = vm:get_data(), param1 = vm:get_light_data(), param2 = vm:get_param2_data(), dirty = false} + tbl = {vm = minetest.get_voxel_manip(pos, pos), dirty = false} vm_cache[hash] = tbl end return tbl @@ -377,16 +375,13 @@ end -- Gets the node at a given position during a VoxelManipulator-based -- transaction. function mesecon.vm_get_node(pos) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - local node_value = tbl.data[index] - if node_value == minetest.CONTENT_IGNORE then - return nil - else - local node_param1 = tbl.param1[index] - local node_param2 = tbl.param2[index] - return {name = minetest.get_name_from_content_id(node_value), param1 = node_param1, param2 = node_param2} + local hash = minetest.hash_node_position(pos) + local node = vm_node_cache[hash] + if not node then + node = vm_get_or_create_entry(pos).vm:get_node_at(pos) + vm_node_cache[hash] = node end + return node.name ~= "ignore" and {name = node.name, param1 = node.param1, param2 = node.param2} or nil end -- Sets a node’s name during a VoxelManipulator-based transaction. @@ -400,8 +395,14 @@ function mesecon.vm_swap_node(pos, name, update_light) vm_update_light = vm_update_light or update_light ~= false local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - tbl.data[index] = minetest.get_content_id(name) + local hash = minetest.hash_node_position(pos) + local node = vm_node_cache[hash] + if not node then + node = tbl.vm:get_node_at(pos) + vm_node_cache[hash] = node + end + node.name = name + tbl.vm:set_node_at(pos, node) tbl.dirty = true end From b630ff94438b32dd234d4909b2fd9f389795a22c Mon Sep 17 00:00:00 2001 From: Desour Date: Wed, 30 Mar 2022 21:41:51 +0200 Subject: [PATCH 2/7] Fix error prone negation reported by luacheck --- mesecons_doors/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mesecons_doors/init.lua b/mesecons_doors/init.lua index 3b0a36b..fa779b6 100644 --- a/mesecons_doors/init.lua +++ b/mesecons_doors/init.lua @@ -1,7 +1,7 @@ -- Modified, from minetest_game/mods/doors/init.lua local function on_rightclick(pos, dir, check_name, replace, replace_dir, params) pos.y = pos.y + dir - if not minetest.get_node(pos).name == check_name then + if minetest.get_node(pos).name ~= check_name then return end local p2 = minetest.get_node(pos).param2 From 21ac966ee22fb4fe7074b1172677c60df3e1a3d5 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 1 Apr 2022 23:27:35 +0200 Subject: [PATCH 3/7] Fix MTG doors not reacting correctly to Mesecon power --- mesecons_doors/init.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mesecons_doors/init.lua b/mesecons_doors/init.lua index fa779b6..3228f03 100644 --- a/mesecons_doors/init.lua +++ b/mesecons_doors/init.lua @@ -66,6 +66,10 @@ local function meseconify_door(name) } minetest.override_item(name .. "_a", override) minetest.override_item(name .. "_b", override) + if minetest.registered_items[name .. "_c"] then + minetest.override_item(name .. "_c", override) + minetest.override_item(name .. "_d", override) + end end end From f4070d3e64652837e4c79967f29bf67f0ac559f4 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Fri, 1 Apr 2022 17:33:41 -0400 Subject: [PATCH 4/7] Use FIFO queue for mvps (#599) --- mesecons/internal.lua | 7 +++--- mesecons_mvps/init.lua | 51 ++++++++++++++---------------------------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/mesecons/internal.lua b/mesecons/internal.lua index e6d20e4..6f52b44 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -46,7 +46,8 @@ -- mesecon.rotate_rules_down(rules) -- These functions return rules that have been rotated in the specific direction -local fifo_queue = dofile(minetest.get_modpath("mesecons").."/fifo_queue.lua") +-- See fifo_queue.lua for documentation. +mesecon.fifo_queue = dofile(minetest.get_modpath("mesecons").."/fifo_queue.lua") -- General function mesecon.get_effector(nodename) @@ -421,7 +422,7 @@ end function mesecon.turnon(pos, link) find_light_update_conductors() - local frontiers = fifo_queue.new() + local frontiers = mesecon.fifo_queue.new() frontiers:add({pos = pos, link = link}) local pos_can_be_skipped = {} @@ -484,7 +485,7 @@ end function mesecon.turnoff(pos, link) find_light_update_conductors() - local frontiers = fifo_queue.new() + local frontiers = mesecon.fifo_queue.new() frontiers:add({pos = pos, link = link}) local signals = {} local pos_can_be_skipped = {} diff --git a/mesecons_mvps/init.lua b/mesecons_mvps/init.lua index e3038a6..31f103c 100644 --- a/mesecons_mvps/init.lua +++ b/mesecons_mvps/init.lua @@ -63,28 +63,31 @@ end function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky) -- determine the number of nodes to be pushed local nodes = {} - local frontiers = {pos} + local pos_set = {} + local frontiers = mesecon.fifo_queue.new() + frontiers:add(vector.new(pos)) - while #frontiers > 0 do - local np = frontiers[1] - local nn = minetest.get_node(np) - - if not node_replaceable(nn.name) then + for np in frontiers:iter() do + local np_hash = minetest.hash_node_position(np) + local nn = not pos_set[np_hash] and minetest.get_node(np) + if nn and not node_replaceable(nn.name) then + pos_set[np_hash] = true table.insert(nodes, {node = nn, pos = np}) if #nodes > maximum then return nil end - -- add connected nodes to frontiers, connected is a vector list - -- the vectors must be absolute positions - local connected = {} + -- add connected nodes to frontiers if minetest.registered_nodes[nn.name] and minetest.registered_nodes[nn.name].mvps_sticky then - connected = minetest.registered_nodes[nn.name].mvps_sticky(np, nn) + local connected = minetest.registered_nodes[nn.name].mvps_sticky(np, nn) + for _, cp in ipairs(connected) do + frontiers:add(cp) + end end - table.insert(connected, vector.add(np, dir)) + frontiers:add(vector.add(np, dir)) -- If adjacent node is sticky block and connects add that - -- position to the connected table + -- position for _, r in ipairs(mesecon.rules.alldirs) do local adjpos = vector.add(np, r) local adjnode = minetest.get_node(adjpos) @@ -96,36 +99,16 @@ function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky) -- connects to this position? for _, link in ipairs(sticksto) do if vector.equals(link, np) then - table.insert(connected, adjpos) + frontiers:add(adjpos) end end end end if all_pull_sticky then - table.insert(connected, vector.subtract(np, dir)) - end - - -- Make sure there are no duplicates in frontiers / nodes before - -- adding nodes in "connected" to frontiers - for _, cp in ipairs(connected) do - local duplicate = false - for _, rp in ipairs(nodes) do - if vector.equals(cp, rp.pos) then - duplicate = true - end - end - for _, fp in ipairs(frontiers) do - if vector.equals(cp, fp) then - duplicate = true - end - end - if not duplicate then - table.insert(frontiers, cp) - end + frontiers:add(vector.subtract(np, dir)) end end - table.remove(frontiers, 1) end return nodes From dfa43d6c0c662409da4c026a676a39f82d36ef06 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Thu, 5 May 2022 10:57:53 -0400 Subject: [PATCH 5/7] Make modpack mostly independent from MTG (#607) --- LICENSE.txt | 6 ++ mesecons_blinkyplant/init.lua | 2 +- mesecons_blinkyplant/mod.conf | 2 +- mesecons_button/init.lua | 6 +- mesecons_button/mod.conf | 2 +- mesecons_commandblock/init.lua | 4 +- mesecons_commandblock/mod.conf | 2 +- mesecons_delayer/init.lua | 4 +- mesecons_delayer/mod.conf | 2 +- mesecons_detector/init.lua | 42 ++++++----- mesecons_detector/mod.conf | 2 +- .../textures/mesecons_detector_side.png | Bin 0 -> 350 bytes mesecons_extrawires/corner.lua | 4 +- mesecons_extrawires/crossover.lua | 8 +- mesecons_extrawires/doublecorner.lua | 2 +- mesecons_extrawires/mesewire.lua | 31 ++++++-- mesecons_extrawires/mod.conf | 2 +- mesecons_extrawires/tjunction.lua | 4 +- mesecons_extrawires/vertical.lua | 6 +- mesecons_fpga/init.lua | 2 +- mesecons_fpga/mod.conf | 2 +- mesecons_gamecompat/compat_mtg.lua | 71 ++++++++++++++++++ mesecons_gamecompat/init.lua | 15 ++++ mesecons_gamecompat/mod.conf | 3 + mesecons_gates/init.lua | 2 +- mesecons_gates/mod.conf | 2 +- mesecons_hydroturbine/init.lua | 10 +-- mesecons_hydroturbine/mod.conf | 2 +- mesecons_insulated/init.lua | 4 +- mesecons_insulated/mod.conf | 2 +- mesecons_lamp/init.lua | 10 +-- mesecons_lamp/mod.conf | 2 +- mesecons_lightstone/init.lua | 30 ++++---- mesecons_lightstone/mod.conf | 2 +- mesecons_luacontroller/init.lua | 4 +- mesecons_luacontroller/mod.conf | 2 +- mesecons_materials/init.lua | 2 +- mesecons_materials/mod.conf | 2 +- mesecons_microcontroller/init.lua | 2 +- mesecons_microcontroller/mod.conf | 2 +- mesecons_movestones/init.lua | 12 +-- mesecons_movestones/mod.conf | 2 +- mesecons_mvps/init.lua | 25 ------ mesecons_noteblock/init.lua | 29 ++++--- mesecons_noteblock/mod.conf | 2 +- mesecons_pistons/init.lua | 18 ++--- mesecons_pistons/mod.conf | 2 +- mesecons_powerplant/init.lua | 2 +- mesecons_powerplant/mod.conf | 2 +- mesecons_pressureplates/init.lua | 6 +- mesecons_pressureplates/mod.conf | 2 +- mesecons_random/init.lua | 16 ++-- mesecons_random/mod.conf | 2 +- mesecons_receiver/init.lua | 6 +- mesecons_receiver/mod.conf | 2 +- mesecons_solarpanel/init.lua | 2 +- mesecons_solarpanel/mod.conf | 2 +- mesecons_stickyblocks/init.lua | 2 +- mesecons_stickyblocks/mod.conf | 2 +- mesecons_switch/init.lua | 4 +- mesecons_switch/mod.conf | 2 +- mesecons_torch/init.lua | 6 +- mesecons_torch/mod.conf | 2 +- mesecons_walllever/init.lua | 6 +- mesecons_walllever/mod.conf | 2 +- mesecons_wires/init.lua | 8 +- mesecons_wires/mod.conf | 2 +- 67 files changed, 285 insertions(+), 187 deletions(-) create mode 100644 mesecons_detector/textures/mesecons_detector_side.png create mode 100644 mesecons_gamecompat/compat_mtg.lua create mode 100644 mesecons_gamecompat/init.lua create mode 100644 mesecons_gamecompat/mod.conf diff --git a/LICENSE.txt b/LICENSE.txt index 0d2fd18..5df6546 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,12 @@ The LGPLv3 applies to all code in this project. The CC-BY-SA-3.0 license applies to textures and any other content in this project which is not source code. +The file mesecons_detector/textures/mesecons_detector_side.png is an unmodified copy of +"default_steel_block.png" by Jean-Patrick Guerrero , which can be found at +. +"default_steel_block.png" is licensed under a CC BY-SA 3.0 license. This license can be found later in this document, and can also be found at +. The artwork is reportedly copyright (C) 2010-2018 kilbith. + ================================================================= GNU LESSER GENERAL PUBLIC LICENSE diff --git a/mesecons_blinkyplant/init.lua b/mesecons_blinkyplant/init.lua index 4e46750..28cb054 100644 --- a/mesecons_blinkyplant/init.lua +++ b/mesecons_blinkyplant/init.lua @@ -26,7 +26,7 @@ mesecon.register_node("mesecons_blinkyplant:blinky_plant", { paramtype = "light", is_ground_content = false, walkable = false, - sounds = default.node_sound_leaves_defaults(), + sounds = mesecon.node_sound.leaves, selection_box = { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3}, diff --git a/mesecons_blinkyplant/mod.conf b/mesecons_blinkyplant/mod.conf index 8332c95..3f23448 100644 --- a/mesecons_blinkyplant/mod.conf +++ b/mesecons_blinkyplant/mod.conf @@ -1,2 +1,2 @@ name = mesecons_blinkyplant -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_button/init.lua b/mesecons_button/init.lua index 9a189c8..7c70923 100644 --- a/mesecons_button/init.lua +++ b/mesecons_button/init.lua @@ -52,7 +52,7 @@ minetest.register_node("mesecons_button:button_off", { minetest.sound_play("mesecons_button_push", { pos = pos }, true) minetest.get_node_timer(pos):start(1) end, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.buttonlike_get @@ -93,7 +93,7 @@ minetest.register_node("mesecons_button:button_on", { groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, drop = 'mesecons_button:button_off', description = "Button", - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.buttonlike_get @@ -105,6 +105,6 @@ minetest.register_node("mesecons_button:button_on", { minetest.register_craft({ output = "mesecons_button:button_off 2", recipe = { - {"group:mesecon_conductor_craftable","default:stone"}, + {"group:mesecon_conductor_craftable","mesecons_gamecompat:stone"}, } }) diff --git a/mesecons_button/mod.conf b/mesecons_button/mod.conf index 62c1e40..cf67a2e 100644 --- a/mesecons_button/mod.conf +++ b/mesecons_button/mod.conf @@ -1,2 +1,2 @@ name = mesecons_button -depends = default, mesecons, mesecons_receiver +depends = mesecons, mesecons_gamecompat, mesecons_receiver diff --git a/mesecons_commandblock/init.lua b/mesecons_commandblock/init.lua index fbab54b..c96cfe8 100644 --- a/mesecons_commandblock/init.lua +++ b/mesecons_commandblock/init.lua @@ -189,7 +189,7 @@ minetest.register_node("mesecons_commandblock:commandblock_off", { after_place_node = after_place, on_receive_fields = receive_fields, can_dig = can_dig, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {effector = { action_on = commandblock_action_on }}, @@ -206,7 +206,7 @@ minetest.register_node("mesecons_commandblock:commandblock_on", { after_place_node = after_place, on_receive_fields = receive_fields, can_dig = can_dig, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {effector = { action_off = commandblock_action_off }}, diff --git a/mesecons_commandblock/mod.conf b/mesecons_commandblock/mod.conf index 66f847d..68cdc9e 100644 --- a/mesecons_commandblock/mod.conf +++ b/mesecons_commandblock/mod.conf @@ -1,2 +1,2 @@ name = mesecons_commandblock -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_delayer/init.lua b/mesecons_delayer/init.lua index f2f4b9c..bc95806 100644 --- a/mesecons_delayer/init.lua +++ b/mesecons_delayer/init.lua @@ -69,7 +69,7 @@ local def = { sunlight_propagates = true, is_ground_content = false, delayer_time = delaytime[i], - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, on_blast = mesecon.on_blastnode, drop = "mesecons_delayer:delayer_off_1", } @@ -169,6 +169,6 @@ minetest.register_craft({ output = "mesecons_delayer:delayer_off_1", recipe = { {"mesecons_torch:mesecon_torch_on", "group:mesecon_conductor_craftable", "mesecons_torch:mesecon_torch_on"}, - {"default:cobble","default:cobble", "default:cobble"}, + {"mesecons_gamecompat:cobble","mesecons_gamecompat:cobble", "mesecons_gamecompat:cobble"}, } }) diff --git a/mesecons_delayer/mod.conf b/mesecons_delayer/mod.conf index a6604ed..33a2ef5 100644 --- a/mesecons_delayer/mod.conf +++ b/mesecons_delayer/mod.conf @@ -1,2 +1,2 @@ name = mesecons_delayer -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_detector/init.lua b/mesecons_detector/init.lua index 0a97684..d460936 100644 --- a/mesecons_detector/init.lua +++ b/mesecons_detector/init.lua @@ -1,3 +1,5 @@ +local side_texture = mesecon.texture.steel_block or "mesecons_detector_side.png" + local GET_COMMAND = "GET" -- Object detector @@ -64,7 +66,7 @@ local object_detector_digiline = { } minetest.register_node("mesecons_detector:object_detector_off", { - tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"}, + tiles = {side_texture, side_texture, "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"}, paramtype = "light", is_ground_content = false, walkable = true, @@ -76,13 +78,13 @@ minetest.register_node("mesecons_detector:object_detector_off", { }}, on_construct = object_detector_make_formspec, on_receive_fields = object_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, digiline = object_detector_digiline, on_blast = mesecon.on_blastnode, }) minetest.register_node("mesecons_detector:object_detector_on", { - tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"}, + tiles = {side_texture, side_texture, "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"}, paramtype = "light", is_ground_content = false, walkable = true, @@ -94,7 +96,7 @@ minetest.register_node("mesecons_detector:object_detector_on", { }}, on_construct = object_detector_make_formspec, on_receive_fields = object_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, digiline = object_detector_digiline, on_blast = mesecon.on_blastnode, }) @@ -102,18 +104,18 @@ minetest.register_node("mesecons_detector:object_detector_on", { minetest.register_craft({ output = 'mesecons_detector:object_detector_off', recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "mesecons_luacontroller:luacontroller0000", "default:steel_ingot"}, - {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_luacontroller:luacontroller0000", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"}, } }) minetest.register_craft({ output = 'mesecons_detector:object_detector_off', recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "mesecons_microcontroller:microcontroller0000", "default:steel_ingot"}, - {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_microcontroller:microcontroller0000", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"}, } }) @@ -239,7 +241,7 @@ local node_detector_digiline = { } minetest.register_node("mesecons_detector:node_detector_off", { - tiles = {"default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "jeija_node_detector_off.png"}, + tiles = {side_texture, side_texture, side_texture, side_texture, side_texture, "jeija_node_detector_off.png"}, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, @@ -251,13 +253,13 @@ minetest.register_node("mesecons_detector:node_detector_off", { }}, on_construct = node_detector_make_formspec, on_receive_fields = node_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, digiline = node_detector_digiline, on_blast = mesecon.on_blastnode, }) minetest.register_node("mesecons_detector:node_detector_on", { - tiles = {"default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "jeija_node_detector_on.png"}, + tiles = {side_texture, side_texture, side_texture, side_texture, side_texture, "jeija_node_detector_on.png"}, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, @@ -269,7 +271,7 @@ minetest.register_node("mesecons_detector:node_detector_on", { }}, on_construct = node_detector_make_formspec, on_receive_fields = node_detector_on_receive_fields, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, digiline = node_detector_digiline, on_blast = mesecon.on_blastnode, }) @@ -277,18 +279,18 @@ minetest.register_node("mesecons_detector:node_detector_on", { minetest.register_craft({ output = 'mesecons_detector:node_detector_off', recipe = { - {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, - {"default:steel_ingot", "mesecons_luacontroller:luacontroller0000", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_luacontroller:luacontroller0000", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"}, } }) minetest.register_craft({ output = 'mesecons_detector:node_detector_off', recipe = { - {"default:steel_ingot", "group:mesecon_conductor_craftable", "default:steel_ingot"}, - {"default:steel_ingot", "mesecons_microcontroller:microcontroller0000", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_microcontroller:microcontroller0000", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"}, } }) diff --git a/mesecons_detector/mod.conf b/mesecons_detector/mod.conf index 0a43985..6d5a0e6 100644 --- a/mesecons_detector/mod.conf +++ b/mesecons_detector/mod.conf @@ -1,2 +1,2 @@ name = mesecons_detector -depends = default, mesecons, mesecons_materials +depends = mesecons, mesecons_gamecompat, mesecons_materials diff --git a/mesecons_detector/textures/mesecons_detector_side.png b/mesecons_detector/textures/mesecons_detector_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5e421f026e37a1b6629f837d1862621f8abf87c3 GIT binary patch literal 350 zcmV-k0iphhP)CdN%F4pR!lI(0nVFf>)YQPi zz`nk|mzS5;($UPy&dklt&dbT3o}QJJm6MZ`yS%!%xVW#cug}lU(9+E?z=xIq006d0 zL_t&-83n)=3|xuOABX$`z0bQhUdac3FLtR z$Us5*B_Ij21AgF{umAu;#4#J{LcB2`LU-EsfeE3DMEGw-SFQLmNeIjwC~I`XASSsr zI#bgS@`2$UU~kmiscFT78Ve{k%@q1pVZ?Ojn|p{M_g+xtIzx=AZ{2&}3?B|zb$^## wvu<0##69M`?Vr7?#yC;UtXi>$&0+Iv|IVTbVIPc Date: Sat, 7 May 2022 16:24:58 -0400 Subject: [PATCH 6/7] Make some fixes to movement and rotation (#584) --- mesecons/services.lua | 15 +++++++++------ mesecons/util.lua | 18 ++++++++++++++++++ mesecons_extrawires/corner.lua | 6 ++---- mesecons_extrawires/doublecorner.lua | 5 +---- mesecons_extrawires/mod.conf | 1 - mesecons_extrawires/tjunction.lua | 6 ++---- mesecons_gates/init.lua | 1 + mesecons_insulated/init.lua | 6 ++---- mesecons_insulated/mod.conf | 1 - mesecons_mvps/init.lua | 9 ++++++++- mesecons_receiver/init.lua | 19 ++++++++++++++----- 11 files changed, 57 insertions(+), 30 deletions(-) diff --git a/mesecons/services.lua b/mesecons/services.lua index 58e57b5..f33aee4 100644 --- a/mesecons/services.lua +++ b/mesecons/services.lua @@ -2,6 +2,7 @@ mesecon.on_placenode = function(pos, node) mesecon.execute_autoconnect_hooks_now(pos, node) + node = minetest.get_node(pos) -- Update the node in case it was just changed. -- Receptors: Send on signal when active if mesecon.is_receptor_on(node.name) then @@ -11,18 +12,20 @@ mesecon.on_placenode = function(pos, node) -- Conductors: Send turnon signal when powered or replace by respective offstate conductor -- if placed conductor is an onstate one if mesecon.is_conductor(node.name) then + local conductor = mesecon.get_conductor(node.name) + if conductor.state ~= mesecon.state.off then + -- Turn the conductor off. + node.name = conductor.offstate or conductor.states[1] + minetest.swap_node(pos, node) + end local sources = mesecon.is_powered(pos) if sources then - -- also call receptor_on if itself is powered already, so that neighboring - -- conductors will be activated (when pushing an on-conductor with a piston) + mesecon.vm_begin() for _, s in ipairs(sources) do local rule = vector.subtract(s, pos) mesecon.turnon(pos, rule) end - --mesecon.receptor_on (pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_conductor_on(node) then - node.name = mesecon.get_conductor_off(node) - minetest.swap_node(pos, node) + mesecon.vm_commit() end end diff --git a/mesecons/util.lua b/mesecons/util.lua index f4137e5..b87dffd 100644 --- a/mesecons/util.lua +++ b/mesecons/util.lua @@ -6,6 +6,24 @@ function mesecon.move_node(pos, newpos) minetest.get_meta(pos):from_table(meta) end +-- An on_rotate callback for mesecons components. +function mesecon.on_rotate(pos, node, _, _, new_param2) + local new_node = {name = node.name, param1 = node.param1, param2 = new_param2} + minetest.swap_node(pos, new_node) + mesecon.on_dignode(pos, node) + mesecon.on_placenode(pos, new_node) + minetest.check_for_falling(pos) + return true +end + +-- An on_rotate callback for components which stay horizontal. +function mesecon.on_rotate_horiz(pos, node, user, mode, new_param2) + if not minetest.global_exists("screwdriver") or mode ~= screwdriver.ROTATE_FACE then + return false + end + return mesecon.on_rotate(pos, node, user, mode, new_param2) +end + -- Rules rotation Functions: function mesecon.rotate_rules_right(rules) local nr = {} diff --git a/mesecons_extrawires/corner.lua b/mesecons_extrawires/corner.lua index 1651b46..3aca209 100644 --- a/mesecons_extrawires/corner.lua +++ b/mesecons_extrawires/corner.lua @@ -1,5 +1,3 @@ -local screwdriver_exists = minetest.global_exists("screwdriver") - local corner_selectionbox = { type = "fixed", fixed = { -16/32, -16/32, -16/32, 5/32, -12/32, 5/32 }, @@ -40,7 +38,7 @@ minetest.register_node("mesecons_extrawires:corner_on", { offstate = "mesecons_extrawires:corner_off" }}, on_blast = mesecon.on_blastnode, - on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_rotate = mesecon.on_rotate_horiz, }) minetest.register_node("mesecons_extrawires:corner_off", { @@ -66,7 +64,7 @@ minetest.register_node("mesecons_extrawires:corner_off", { onstate = "mesecons_extrawires:corner_on" }}, on_blast = mesecon.on_blastnode, - on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_rotate = mesecon.on_rotate_horiz, }) minetest.register_craft({ diff --git a/mesecons_extrawires/doublecorner.lua b/mesecons_extrawires/doublecorner.lua index fbb39c0..de6051f 100644 --- a/mesecons_extrawires/doublecorner.lua +++ b/mesecons_extrawires/doublecorner.lua @@ -1,6 +1,3 @@ -local rotate -if minetest.global_exists("screwdriver") then rotate = screwdriver.rotate_simple end - local doublecorner_selectionbox = { type = "fixed", fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, @@ -69,7 +66,7 @@ for k, state in ipairs(doublecorner_states) do }, }, on_blast = mesecon.on_blastnode, - on_rotate = rotate, + on_rotate = mesecon.on_rotate_horiz, }) end diff --git a/mesecons_extrawires/mod.conf b/mesecons_extrawires/mod.conf index b4b88c2..cd9e2d3 100644 --- a/mesecons_extrawires/mod.conf +++ b/mesecons_extrawires/mod.conf @@ -1,3 +1,2 @@ name = mesecons_extrawires depends = mesecons, mesecons_gamecompat -optional_depends = screwdriver diff --git a/mesecons_extrawires/tjunction.lua b/mesecons_extrawires/tjunction.lua index 3829edb..ba68f75 100644 --- a/mesecons_extrawires/tjunction.lua +++ b/mesecons_extrawires/tjunction.lua @@ -1,5 +1,3 @@ -local screwdriver_exists = minetest.global_exists("screwdriver") - local tjunction_nodebox = { type = "fixed", -- ±0.001 is to prevent z-fighting @@ -52,7 +50,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", { offstate = "mesecons_extrawires:tjunction_off" }}, on_blast = mesecon.on_blastnode, - on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_rotate = mesecon.on_rotate_horiz, }) minetest.register_node("mesecons_extrawires:tjunction_off", { @@ -82,7 +80,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", { onstate = "mesecons_extrawires:tjunction_on" }}, on_blast = mesecon.on_blastnode, - on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_rotate = mesecon.on_rotate_horiz, }) minetest.register_craft({ diff --git a/mesecons_gates/init.lua b/mesecons_gates/init.lua index e42f548..51c29b3 100644 --- a/mesecons_gates/init.lua +++ b/mesecons_gates/init.lua @@ -84,6 +84,7 @@ local function register_gate(name, inputnumber, assess, recipe, description) offstate = basename.."_off", inputnumber = inputnumber, after_dig_node = mesecon.do_cooldown, + on_rotate = mesecon.on_rotate_horiz, },{ tiles = { "jeija_microcontroller_bottom.png^".."jeija_gate_off.png^".. diff --git a/mesecons_insulated/init.lua b/mesecons_insulated/init.lua index ceb7302..c641e94 100644 --- a/mesecons_insulated/init.lua +++ b/mesecons_insulated/init.lua @@ -1,5 +1,3 @@ -local screwdriver_exists = minetest.global_exists("screwdriver") - local function insulated_wire_get_rules(node) local rules = {{x = 1, y = 0, z = 0}, {x =-1, y = 0, z = 0}} @@ -43,7 +41,7 @@ minetest.register_node("mesecons_insulated:insulated_on", { rules = insulated_wire_get_rules }}, on_blast = mesecon.on_blastnode, - on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_rotate = mesecon.on_rotate_horiz, }) minetest.register_node("mesecons_insulated:insulated_off", { @@ -79,7 +77,7 @@ minetest.register_node("mesecons_insulated:insulated_off", { rules = insulated_wire_get_rules }}, on_blast = mesecon.on_blastnode, - on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_rotate = mesecon.on_rotate_horiz, }) minetest.register_craft({ diff --git a/mesecons_insulated/mod.conf b/mesecons_insulated/mod.conf index 1ff02e0..2f7f5b6 100644 --- a/mesecons_insulated/mod.conf +++ b/mesecons_insulated/mod.conf @@ -1,3 +1,2 @@ name = mesecons_insulated depends = mesecons, mesecons_gamecompat -optional_depends = screwdriver diff --git a/mesecons_mvps/init.lua b/mesecons_mvps/init.lua index f0ae522..c047ed9 100644 --- a/mesecons_mvps/init.lua +++ b/mesecons_mvps/init.lua @@ -220,6 +220,8 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sti minetest.remove_node(n.pos) end + local oldstack = mesecon.tablecopy(nodes) + -- update mesecons for removed nodes ( has to be done after all nodes have been removed ) for _, n in ipairs(nodes) do mesecon.on_dignode(n.pos, n.node) @@ -229,6 +231,12 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sti for _, n in ipairs(nodes) do local np = vector.add(n.pos, movedir) + -- Turn off conductors in transit + local conductor = mesecon.get_conductor(n.node.name) + if conductor and conductor.state ~= mesecon.state.off then + n.node.name = conductor.offstate or conductor.states[1] + end + minetest.set_node(np, n.node) minetest.get_meta(np):from_table(n.meta) if n.node_timer then @@ -237,7 +245,6 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sti end local moved_nodes = {} - local oldstack = mesecon.tablecopy(nodes) for i in ipairs(nodes) do moved_nodes[i] = {} moved_nodes[i].oldpos = nodes[i].pos diff --git a/mesecons_receiver/init.lua b/mesecons_receiver/init.lua index d95b333..301dbc4 100644 --- a/mesecons_receiver/init.lua +++ b/mesecons_receiver/init.lua @@ -209,8 +209,10 @@ function mesecon.receiver_place(rcpt_pos) local param2 = minetest.dir_to_facedir(minetest.facedir_to_dir(node.param2)) if string.find(nn.name, "mesecons:wire_") ~= nil then - minetest.set_node(pos, {name = rcvtype, param2 = param2}) - mesecon.on_placenode(pos, nn) + local rcv_node = {name = rcvtype, param2 = param2} + minetest.set_node(pos, rcv_node) + mesecon.on_dignode(pos, nn) + mesecon.on_placenode(pos, rcv_node) end end @@ -220,6 +222,7 @@ function mesecon.receiver_remove(rcpt_pos, dugnode) if string.find(nn.name, "mesecons_receiver:receiver_") ~= nil then local node = {name = "mesecons:wire_00000000_off"} minetest.set_node(pos, node) + mesecon.on_dignode(pos, nn) mesecon.on_placenode(pos, node) end end @@ -257,7 +260,13 @@ minetest.register_on_placenode(function (pos, node) end end) -function mesecon.buttonlike_onrotate(pos, node) - minetest.after(0, mesecon.receiver_remove, pos, node) - minetest.after(0, mesecon.receiver_place, pos) +function mesecon.buttonlike_onrotate(pos, node, _, _, new_param2) + local new_node = {name = node.name, param1 = node.param1, param2 = new_param2} + minetest.swap_node(pos, new_node) + mesecon.receiver_remove(pos, node) + mesecon.on_dignode(pos, node) + mesecon.on_placenode(pos, new_node) + mesecon.receiver_place(pos) + minetest.check_for_falling(pos) + return true end From 27c3c515b49af91c1dbc427f31a820722854eb24 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Mon, 9 May 2022 19:09:07 -0400 Subject: [PATCH 7/7] Fix mesecon cooking recipes --- mesecons_wires/init.lua | 44 ++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/mesecons_wires/init.lua b/mesecons_wires/init.lua index 21565ea..c7669b3 100644 --- a/mesecons_wires/init.lua +++ b/mesecons_wires/init.lua @@ -229,23 +229,31 @@ register_wires() -- ############## -- ## Crafting ## -- ############## -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 2", - recipe = "mesecons_gamecompat:mese_crystal_fragment", - cooktime = 3, -}) +-- (Resolve aliases to avoid bug with cooking/fuel recipes.) -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 18", - recipe = "mesecons_gamecompat:mese_crystal", - cooktime = 15, -}) +if minetest.registered_aliases["mesecons_gamecompat:mese_crystal_fragment"] then + minetest.register_craft({ + type = "cooking", + output = "mesecons:wire_00000000_off 2", + recipe = minetest.registered_aliases["mesecons_gamecompat:mese_crystal_fragment"], + cooktime = 3, + }) +end -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 162", - recipe = "mesecons_gamecompat:mese", - cooktime = 30, -}) +if minetest.registered_aliases["mesecons_gamecompat:mese_crystal"] then + minetest.register_craft({ + type = "cooking", + output = "mesecons:wire_00000000_off 18", + recipe = minetest.registered_aliases["mesecons_gamecompat:mese_crystal"], + cooktime = 15, + }) +end + +if minetest.registered_aliases["mesecons_gamecompat:mese"] then + minetest.register_craft({ + type = "cooking", + output = "mesecons:wire_00000000_off 162", + recipe = minetest.registered_aliases["mesecons_gamecompat:mese"], + cooktime = 30, + }) +end