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/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/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 80afd09..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 = {} @@ -317,15 +335,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 +354,7 @@ local vm_update_light = false -- vm_abort. function mesecon.vm_begin() vm_cache = {} + vm_node_cache = {} vm_update_light = false end @@ -346,18 +364,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 +384,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 +393,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 +413,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 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 0000000..5e421f0 Binary files /dev/null and b/mesecons_detector/textures/mesecons_detector_side.png differ diff --git a/mesecons_doors/init.lua b/mesecons_doors/init.lua index 3b0a36b..3228f03 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 @@ -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 diff --git a/mesecons_extrawires/corner.lua b/mesecons_extrawires/corner.lua index 9c220a8..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 }, @@ -32,7 +30,7 @@ minetest.register_node("mesecons_extrawires:corner_on", { selection_box = corner_selectionbox, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_extrawires:corner_off", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {conductor = { state = mesecon.state.on, @@ -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", { @@ -58,7 +56,7 @@ minetest.register_node("mesecons_extrawires:corner_off", { sunlight_propagates = true, selection_box = corner_selectionbox, groups = {dig_immediate = 3}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {conductor = { state = mesecon.state.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/crossover.lua b/mesecons_extrawires/crossover.lua index 1164955..bf7f0db 100644 --- a/mesecons_extrawires/crossover.lua +++ b/mesecons_extrawires/crossover.lua @@ -32,7 +32,7 @@ minetest.register_node("mesecons_extrawires:crossover_off", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}}, groups = {dig_immediate=3, mesecon=3}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = { conductor = { states = crossover_states, @@ -59,7 +59,7 @@ minetest.register_node("mesecons_extrawires:crossover_01", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}}, groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = { conductor = { states = crossover_states, @@ -86,7 +86,7 @@ minetest.register_node("mesecons_extrawires:crossover_10", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}}, groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = { conductor = { states = crossover_states, @@ -113,7 +113,7 @@ minetest.register_node("mesecons_extrawires:crossover_on", { stack_max = 99, selection_box = {type="fixed", fixed={-16/32, -16/32, -16/32, 16/32, -5/32, 16/32}}, groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = { conductor = { states = crossover_states, diff --git a/mesecons_extrawires/doublecorner.lua b/mesecons_extrawires/doublecorner.lua index d94e792..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 }, @@ -61,7 +58,7 @@ for k, state in ipairs(doublecorner_states) do selection_box = doublecorner_selectionbox, groups = groups, drop = doublecorner_states[1], - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = { conductor = { states = doublecorner_states, @@ -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/mesewire.lua b/mesecons_extrawires/mesewire.lua index 519129f..f74fdcb 100644 --- a/mesecons_extrawires/mesewire.lua +++ b/mesecons_extrawires/mesewire.lua @@ -1,3 +1,20 @@ +local mese_nodename = minetest.registered_aliases["mesecons_gamecompat:mese"] +if mese_nodename then + -- Convert placeholders. + minetest.register_alias("mesecons_extrawires:mese", mese_nodename) +else + -- Register placeholder. + mese_nodename = "mesecons_extrawires:mese" + minetest.register_node("mesecons_extrawires:mese", { + description = "Mese Wire", + tiles = {"mesecons_wire_off.png"}, + paramtype = "light", + light_source = 3, + groups = {cracky = 1}, + sounds = mesecon.node_sound.stone, + }) +end + local mesewire_rules = { {x = 1, y = 0, z = 0}, @@ -8,7 +25,7 @@ local mesewire_rules = {x = 0, y = 0, z =-1}, } -minetest.override_item("default:mese", { +minetest.override_item(mese_nodename, { mesecons = {conductor = { state = mesecon.state.off, onstate = "mesecons_extrawires:mese_powered", @@ -18,15 +35,17 @@ minetest.override_item("default:mese", { -- Copy node definition of powered mese from normal mese -- and brighten texture tiles to indicate mese is powered -local powered_def = mesecon.merge_tables(minetest.registered_nodes["default:mese"], { - drop = "default:mese", - light_source = 5, +local unpowered_def = minetest.registered_nodes[mese_nodename] +local powered_def = mesecon.merge_tables(unpowered_def, { + drop = mese_nodename, + paramtype = "light", + light_source = math.min(unpowered_def.light_source + 2, minetest.LIGHT_MAX), mesecons = {conductor = { state = mesecon.state.on, - offstate = "default:mese", + offstate = mese_nodename, rules = mesewire_rules }}, - groups = {cracky = 1, not_in_creative_inventory = 1}, + groups = mesecon.merge_tables(unpowered_def.groups or {}, {not_in_creative_inventory = 1}), on_blast = mesecon.on_blastnode, }) diff --git a/mesecons_extrawires/mod.conf b/mesecons_extrawires/mod.conf index 5632d87..cd9e2d3 100644 --- a/mesecons_extrawires/mod.conf +++ b/mesecons_extrawires/mod.conf @@ -1,3 +1,2 @@ name = mesecons_extrawires -depends = default, mesecons -optional_depends = screwdriver +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_extrawires/tjunction.lua b/mesecons_extrawires/tjunction.lua index 8744a03..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 @@ -44,7 +42,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", { node_box = tjunction_nodebox, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_extrawires:tjunction_off", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {conductor = { state = mesecon.state.on, @@ -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", { @@ -74,7 +72,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", { selection_box = tjunction_selectionbox, node_box = tjunction_nodebox, groups = {dig_immediate = 3}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {conductor = { state = mesecon.state.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_extrawires/vertical.lua b/mesecons_extrawires/vertical.lua index bdd77a7..72084fc 100644 --- a/mesecons_extrawires/vertical.lua +++ b/mesecons_extrawires/vertical.lua @@ -89,7 +89,7 @@ mesecon.register_node("mesecons_extrawires:vertical", { drop = "mesecons_extrawires:vertical_off", after_place_node = vertical_update, after_dig_node = vertical_update, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, },{ tiles = {"mesecons_wire_off.png"}, groups = {dig_immediate=3}, @@ -123,7 +123,7 @@ mesecon.register_node("mesecons_extrawires:vertical_top", { drop = "mesecons_extrawires:vertical_off", after_place_node = vertical_update, after_dig_node = vertical_update, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, },{ tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { @@ -155,7 +155,7 @@ mesecon.register_node("mesecons_extrawires:vertical_bottom", { drop = "mesecons_extrawires:vertical_off", after_place_node = vertical_update, after_dig_node = vertical_update, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, },{ tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { diff --git a/mesecons_fpga/init.lua b/mesecons_fpga/init.lua index 32412f4..1898177 100644 --- a/mesecons_fpga/init.lua +++ b/mesecons_fpga/init.lua @@ -109,7 +109,7 @@ plg.register_nodes({ local is = lcore.deserialize(meta:get_string("instr")) minetest.show_formspec(name, "mesecons:fpga", plg.to_formspec_string(is, nil)) end, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = { effector = { rules = {}, -- replaced later diff --git a/mesecons_fpga/mod.conf b/mesecons_fpga/mod.conf index c2e3a25..5cd52f5 100644 --- a/mesecons_fpga/mod.conf +++ b/mesecons_fpga/mod.conf @@ -1,3 +1,3 @@ name = mesecons_fpga -depends = default, mesecons +depends = mesecons, mesecons_gamecompat optional_depends = screwdriver diff --git a/mesecons_gamecompat/compat_mtg.lua b/mesecons_gamecompat/compat_mtg.lua new file mode 100644 index 0000000..24af5e0 --- /dev/null +++ b/mesecons_gamecompat/compat_mtg.lua @@ -0,0 +1,71 @@ +--Aliases + +minetest.register_alias("mesecons_gamecompat:chest", "default:chest") +minetest.register_alias("mesecons_gamecompat:chest_locked", "default:chest_locked") +minetest.register_alias("mesecons_gamecompat:coalblock", "default:coalblock") +minetest.register_alias("mesecons_gamecompat:cobble", "default:cobble") +minetest.register_alias("mesecons_gamecompat:glass", "default:glass") +minetest.register_alias("mesecons_gamecompat:lava_source", "default:lava_source") +minetest.register_alias("mesecons_gamecompat:mese", "default:mese") +minetest.register_alias("mesecons_gamecompat:mese_crystal", "default:mese_crystal") +minetest.register_alias("mesecons_gamecompat:mese_crystal_fragment", "default:mese_crystal_fragment") +minetest.register_alias("mesecons_gamecompat:obsidian_glass", "default:obsidian_glass") +minetest.register_alias("mesecons_gamecompat:stone", "default:stone") +minetest.register_alias("mesecons_gamecompat:steel_ingot", "default:steel_ingot") +minetest.register_alias("mesecons_gamecompat:steelblock", "default:steelblock") +minetest.register_alias("mesecons_gamecompat:torch", "default:torch") + +if minetest.get_modpath("dye") then + for _, color in ipairs(mesecon.dye_colors) do + minetest.register_alias("mesecons_gamecompat:dye_" .. color, "dye:" .. color) + end +end + +-- Sounds + +mesecon.node_sound.default = default.node_sound_defaults() +mesecon.node_sound.glass = default.node_sound_glass_defaults() +mesecon.node_sound.leaves = default.node_sound_leaves_defaults() +mesecon.node_sound.stone = default.node_sound_stone_defaults() +mesecon.node_sound.wood = default.node_sound_wood_defaults() + +if minetest.get_modpath("fire") then + mesecon.sound_name.fire = "fire_fire" +end + +if minetest.get_modpath("tnt") then + mesecon.sound_name.explode = "tnt_explode" +end + +-- Textures + +mesecon.texture.steel_block = "default_steel_block.png" + +-- MVPS stoppers + +if minetest.get_modpath("mesecons_mvps") then + -- All of the locked and internal nodes in Minetest Game + for _, name in ipairs({ + "default:chest_locked", + "default:chest_locked_open", + "doors:door_steel_b_1", -- old style doors + "doors:door_steel_b_2", -- + "doors:door_steel_t_1", -- + "doors:door_steel_t_2", -- + "doors:door_steel_a", -- new style doors + "doors:door_steel_b", -- + "doors:door_steel_c", -- + "doors:door_steel_d", -- + "doors:hidden", + "doors:trapdoor_steel", + "doors:trapdoor_steel_open", + "xpanes:door_steel_bar_a", + "xpanes:door_steel_bar_b", + "xpanes:door_steel_bar_c", + "xpanes:door_steel_bar_d", + "xpanes:trapdoor_steel_bar", + "xpanes:trapdoor_steel_bar_open", + }) do + mesecon.register_mvps_stopper(name) + end +end diff --git a/mesecons_gamecompat/init.lua b/mesecons_gamecompat/init.lua new file mode 100644 index 0000000..2fc44d1 --- /dev/null +++ b/mesecons_gamecompat/init.lua @@ -0,0 +1,15 @@ +mesecon.node_sound = {} + +mesecon.sound_name = {} + +mesecon.texture = {} + +mesecon.dye_colors = { + "red", "green", "blue", "grey", "dark_grey", "yellow", + "orange", "white", "pink", "magenta", "cyan", "violet", +} + +if minetest.get_modpath("default") then + minetest.log("info", "Mesecons: detected Minetest Game for game compatibility") + dofile(minetest.get_modpath("mesecons_gamecompat").."/compat_mtg.lua") +end diff --git a/mesecons_gamecompat/mod.conf b/mesecons_gamecompat/mod.conf new file mode 100644 index 0000000..c683108 --- /dev/null +++ b/mesecons_gamecompat/mod.conf @@ -0,0 +1,3 @@ +name = mesecons_gamecompat +depends = mesecons +optional_depends = fire, default, dye, mesecons_mvps, tnt diff --git a/mesecons_gates/init.lua b/mesecons_gates/init.lua index d6ecb3c..51c29b3 100644 --- a/mesecons_gates/init.lua +++ b/mesecons_gates/init.lua @@ -78,12 +78,13 @@ local function register_gate(name, inputnumber, assess, recipe, description) selection_box = selection_box, node_box = nodebox, walkable = true, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, assess = assess, onstate = basename.."_on", 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_gates/mod.conf b/mesecons_gates/mod.conf index 399d832..f89c884 100644 --- a/mesecons_gates/mod.conf +++ b/mesecons_gates/mod.conf @@ -1,2 +1,2 @@ name = mesecons_gates -depends = default, mesecons, mesecons_microcontroller, mesecons_delayer, mesecons_torch, mesecons_materials +depends = mesecons, mesecons_gamecompat, mesecons_microcontroller, mesecons_delayer, mesecons_torch, mesecons_materials diff --git a/mesecons_hydroturbine/init.lua b/mesecons_hydroturbine/init.lua index 71cf805..99ac130 100644 --- a/mesecons_hydroturbine/init.lua +++ b/mesecons_hydroturbine/init.lua @@ -23,7 +23,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", { type = "fixed", fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, }, - sounds = default.node_sound_metal_defaults(), + sounds = mesecon.node_sound.metal, mesecons = {receptor = { state = mesecon.state.off }}, @@ -53,7 +53,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", { type = "fixed", fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }, }, - sounds = default.node_sound_metal_defaults(), + sounds = mesecon.node_sound.metal, mesecons = {receptor = { state = mesecon.state.on }}, @@ -97,9 +97,9 @@ nodenames = {"mesecons_hydroturbine:hydro_turbine_on"}, minetest.register_craft({ output = "mesecons_hydroturbine:hydro_turbine_off 2", recipe = { - {"","default:stick", ""}, - {"default:stick", "default:steel_ingot", "default:stick"}, - {"","default:stick", ""}, + {"","grup:stick", ""}, + {"group:stick", "mesecons_gamecompat:steel_ingot", "group:stick"}, + {"","group:stick", ""}, } }) diff --git a/mesecons_hydroturbine/mod.conf b/mesecons_hydroturbine/mod.conf index 2d1cfd8..98a3090 100644 --- a/mesecons_hydroturbine/mod.conf +++ b/mesecons_hydroturbine/mod.conf @@ -1,2 +1,2 @@ name = mesecons_hydroturbine -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_insulated/init.lua b/mesecons_insulated/init.lua index 1a4cc88..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}} @@ -36,14 +34,14 @@ minetest.register_node("mesecons_insulated:insulated_on", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_insulated:insulated_off", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {conductor = { state = mesecon.state.on, offstate = "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_node("mesecons_insulated:insulated_off", { @@ -72,14 +70,14 @@ minetest.register_node("mesecons_insulated:insulated_off", { fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 } }, groups = {dig_immediate = 3}, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {conductor = { state = mesecon.state.off, onstate = "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_craft({ diff --git a/mesecons_insulated/mod.conf b/mesecons_insulated/mod.conf index 7b33fe9..2f7f5b6 100644 --- a/mesecons_insulated/mod.conf +++ b/mesecons_insulated/mod.conf @@ -1,3 +1,2 @@ name = mesecons_insulated -depends = default, mesecons -optional_depends = screwdriver +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_lamp/init.lua b/mesecons_lamp/init.lua index fc4a932..aff1f26 100644 --- a/mesecons_lamp/init.lua +++ b/mesecons_lamp/init.lua @@ -26,7 +26,7 @@ minetest.register_node("mesecons_lamp:lamp_on", { selection_box = mesecon_lamp_box, groups = {dig_immediate = 3,not_in_creative_inventory = 1, mesecon_effector_on = 1}, drop = "mesecons_lamp:lamp_off 1", - sounds = default.node_sound_glass_defaults(), + sounds = mesecon.node_sound.glass, mesecons = {effector = { action_off = function (pos, node) minetest.swap_node(pos, {name = "mesecons_lamp:lamp_off", param2 = node.param2}) @@ -51,7 +51,7 @@ minetest.register_node("mesecons_lamp:lamp_off", { selection_box = mesecon_lamp_box, groups = {dig_immediate=3, mesecon_receptor_off = 1, mesecon_effector_off = 1}, description = "Mesecon Lamp", - sounds = default.node_sound_glass_defaults(), + sounds = mesecon.node_sound.glass, mesecons = {effector = { action_on = function (pos, node) minetest.swap_node(pos, {name = "mesecons_lamp:lamp_on", param2 = node.param2}) @@ -64,8 +64,8 @@ minetest.register_node("mesecons_lamp:lamp_off", { minetest.register_craft({ output = "mesecons_lamp:lamp_off 1", recipe = { - {"", "default:glass", ""}, - {"group:mesecon_conductor_craftable", "default:steel_ingot", "group:mesecon_conductor_craftable"}, - {"", "default:glass", ""}, + {"", "mesecons_gamecompat:glass", ""}, + {"group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable"}, + {"", "mesecons_gamecompat:glass", ""}, } }) diff --git a/mesecons_lamp/mod.conf b/mesecons_lamp/mod.conf index 4312b8f..1536447 100644 --- a/mesecons_lamp/mod.conf +++ b/mesecons_lamp/mod.conf @@ -1,2 +1,2 @@ name = mesecons_lamp -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_lightstone/init.lua b/mesecons_lightstone/init.lua index 4e56ba2..f2ea147 100644 --- a/mesecons_lightstone/init.lua +++ b/mesecons_lightstone/init.lua @@ -23,7 +23,7 @@ function mesecon.lightstone_add(name, base_item, texture_off, texture_on, desc) is_ground_content = false, groups = {cracky = 2, mesecon_effector_off = 1, mesecon = 2}, description = desc, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {effector = { rules = lightstone_rules, action_on = function (pos, node) @@ -38,7 +38,7 @@ function mesecon.lightstone_add(name, base_item, texture_off, texture_on, desc) groups = {cracky = 2, not_in_creative_inventory = 1, mesecon = 2}, drop = "mesecons_lightstone:lightstone_" .. name .. "_off", light_source = minetest.LIGHT_MAX - 2, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {effector = { rules = lightstone_rules, action_off = function (pos, node) @@ -52,22 +52,22 @@ function mesecon.lightstone_add(name, base_item, texture_off, texture_on, desc) output = "mesecons_lightstone:lightstone_" .. name .. "_off", recipe = { {"",base_item,""}, - {base_item,"default:torch",base_item}, + {base_item,"mesecons_gamecompat:torch",base_item}, {"","group:mesecon_conductor_craftable",""} } }) end -mesecon.lightstone_add("red", "dye:red", "jeija_lightstone_red_off.png", "jeija_lightstone_red_on.png", "Red Lightstone") -mesecon.lightstone_add("green", "dye:green", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png", "Green Lightstone") -mesecon.lightstone_add("blue", "dye:blue", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png", "Blue Lightstone") -mesecon.lightstone_add("gray", "dye:grey", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png", "Grey Lightstone") -mesecon.lightstone_add("darkgray", "dye:dark_grey", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png", "Dark Grey Lightstone") -mesecon.lightstone_add("yellow", "dye:yellow", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png", "Yellow Lightstone") -mesecon.lightstone_add("orange", "dye:orange", "jeija_lightstone_orange_off.png", "jeija_lightstone_orange_on.png", "Orange Lightstone") -mesecon.lightstone_add("white", "dye:white", "jeija_lightstone_white_off.png", "jeija_lightstone_white_on.png", "White Lightstone") -mesecon.lightstone_add("pink", "dye:pink", "jeija_lightstone_pink_off.png", "jeija_lightstone_pink_on.png", "Pink Lightstone") -mesecon.lightstone_add("magenta", "dye:magenta", "jeija_lightstone_magenta_off.png", "jeija_lightstone_magenta_on.png", "Magenta Lightstone") -mesecon.lightstone_add("cyan", "dye:cyan", "jeija_lightstone_cyan_off.png", "jeija_lightstone_cyan_on.png", "Cyan Lightstone") -mesecon.lightstone_add("violet", "dye:violet", "jeija_lightstone_violet_off.png", "jeija_lightstone_violet_on.png", "Violet Lightstone") +mesecon.lightstone_add("red", "mesecons_gamecompat:dye_red", "jeija_lightstone_red_off.png", "jeija_lightstone_red_on.png", "Red Lightstone") +mesecon.lightstone_add("green", "mesecons_gamecompat:dye_green", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png", "Green Lightstone") +mesecon.lightstone_add("blue", "mesecons_gamecompat:dye_blue", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png", "Blue Lightstone") +mesecon.lightstone_add("gray", "mesecons_gamecompat:dye_grey", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png", "Grey Lightstone") +mesecon.lightstone_add("darkgray", "mesecons_gamecompat:dye_dark_grey", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png", "Dark Grey Lightstone") +mesecon.lightstone_add("yellow", "mesecons_gamecompat:dye_yellow", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png", "Yellow Lightstone") +mesecon.lightstone_add("orange", "mesecons_gamecompat:dye_orange", "jeija_lightstone_orange_off.png", "jeija_lightstone_orange_on.png", "Orange Lightstone") +mesecon.lightstone_add("white", "mesecons_gamecompat:dye_white", "jeija_lightstone_white_off.png", "jeija_lightstone_white_on.png", "White Lightstone") +mesecon.lightstone_add("pink", "mesecons_gamecompat:dye_pink", "jeija_lightstone_pink_off.png", "jeija_lightstone_pink_on.png", "Pink Lightstone") +mesecon.lightstone_add("magenta", "mesecons_gamecompat:dye_magenta", "jeija_lightstone_magenta_off.png", "jeija_lightstone_magenta_on.png", "Magenta Lightstone") +mesecon.lightstone_add("cyan", "mesecons_gamecompat:dye_cyan", "jeija_lightstone_cyan_off.png", "jeija_lightstone_cyan_on.png", "Cyan Lightstone") +mesecon.lightstone_add("violet", "mesecons_gamecompat:dye_violet", "jeija_lightstone_violet_off.png", "jeija_lightstone_violet_on.png", "Violet Lightstone") diff --git a/mesecons_lightstone/mod.conf b/mesecons_lightstone/mod.conf index e7a55c2..7929e49 100644 --- a/mesecons_lightstone/mod.conf +++ b/mesecons_lightstone/mod.conf @@ -1,2 +1,2 @@ name = mesecons_lightstone -depends = default, mesecons, dye +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua index 8e60b1a..5799f8e 100644 --- a/mesecons_luacontroller/init.lua +++ b/mesecons_luacontroller/init.lua @@ -865,7 +865,7 @@ for d = 0, 1 do node_box = node_box, on_construct = reset_meta, on_receive_fields = on_receive_fields, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = mesecons, digiline = digiline, -- Virtual portstates are the ports that @@ -914,7 +914,7 @@ minetest.register_node(BASENAME .. "_burnt", { node_box = node_box, on_construct = reset_meta, on_receive_fields = on_receive_fields, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, virtual_portstates = {a = false, b = false, c = false, d = false}, mesecons = { effector = { diff --git a/mesecons_luacontroller/mod.conf b/mesecons_luacontroller/mod.conf index 0d95253..ca05fed 100644 --- a/mesecons_luacontroller/mod.conf +++ b/mesecons_luacontroller/mod.conf @@ -1,2 +1,2 @@ name = mesecons_luacontroller -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_materials/init.lua b/mesecons_materials/init.lua index f3aa01f..c3ed73b 100644 --- a/mesecons_materials/init.lua +++ b/mesecons_materials/init.lua @@ -36,6 +36,6 @@ minetest.register_craft({ output = "mesecons_materials:silicon 4", recipe = { {"group:sand", "group:sand"}, - {"group:sand", "default:steel_ingot"}, + {"group:sand", "mesecons_gamecompat:steel_ingot"}, } }) diff --git a/mesecons_materials/mod.conf b/mesecons_materials/mod.conf index 827423a..6e10949 100644 --- a/mesecons_materials/mod.conf +++ b/mesecons_materials/mod.conf @@ -1,2 +1,2 @@ name = mesecons_materials -depends = default, mesecons +depends = mesecons_gamecompat diff --git a/mesecons_microcontroller/init.lua b/mesecons_microcontroller/init.lua index 7134dc5..2e11afa 100644 --- a/mesecons_microcontroller/init.lua +++ b/mesecons_microcontroller/init.lua @@ -140,7 +140,7 @@ minetest.register_node(nodename, { yc.reset (pos) yc.update(pos) end, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = mesecons, after_dig_node = function (pos, node) rules = microc_rules[node.name] diff --git a/mesecons_microcontroller/mod.conf b/mesecons_microcontroller/mod.conf index 2d72941..a61475b 100644 --- a/mesecons_microcontroller/mod.conf +++ b/mesecons_microcontroller/mod.conf @@ -1,2 +1,2 @@ name = mesecons_microcontroller -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_movestones/init.lua b/mesecons_movestones/init.lua index e1ccbd0..e50103c 100644 --- a/mesecons_movestones/init.lua +++ b/mesecons_movestones/init.lua @@ -129,7 +129,7 @@ mesecon.register_movestone("mesecons_movestones:movestone", { }, groups = {cracky = 3}, description = "Movestone", - sounds = default.node_sound_stone_defaults() + sounds = mesecon.node_sound.stone }, false, false) mesecon.register_movestone("mesecons_movestones:sticky_movestone", { @@ -143,7 +143,7 @@ mesecon.register_movestone("mesecons_movestones:sticky_movestone", { }, groups = {cracky = 3}, description = "Sticky Movestone", - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, }, true, false) mesecon.register_movestone("mesecons_movestones:movestone_vertical", { @@ -157,7 +157,7 @@ mesecon.register_movestone("mesecons_movestones:movestone_vertical", { }, groups = {cracky = 3}, description = "Vertical Movestone", - sounds = default.node_sound_stone_defaults() + sounds = mesecon.node_sound.stone }, false, true) mesecon.register_movestone("mesecons_movestones:sticky_movestone_vertical", { @@ -171,7 +171,7 @@ mesecon.register_movestone("mesecons_movestones:sticky_movestone_vertical", { }, groups = {cracky = 3}, description = "Vertical Sticky Movestone", - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, }, true, true) @@ -180,9 +180,9 @@ mesecon.register_movestone("mesecons_movestones:sticky_movestone_vertical", { minetest.register_craft({ output = "mesecons_movestones:movestone 2", recipe = { - {"default:stone", "default:stone", "default:stone"}, + {"mesecons_gamecompat:stone", "mesecons_gamecompat:stone", "mesecons_gamecompat:stone"}, {"group:mesecon_conductor_craftable", "group:mesecon_conductor_craftable", "group:mesecon_conductor_craftable"}, - {"default:stone", "default:stone", "default:stone"}, + {"mesecons_gamecompat:stone", "mesecons_gamecompat:stone", "mesecons_gamecompat:stone"}, } }) diff --git a/mesecons_movestones/mod.conf b/mesecons_movestones/mod.conf index 6583448..6ece279 100644 --- a/mesecons_movestones/mod.conf +++ b/mesecons_movestones/mod.conf @@ -1,2 +1,2 @@ name = mesecons_movestones -depends = default, mesecons, mesecons_materials, mesecons_mvps +depends = mesecons, mesecons_gamecompat, mesecons_materials, mesecons_mvps diff --git a/mesecons_mvps/init.lua b/mesecons_mvps/init.lua index e3038a6..c047ed9 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 @@ -237,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) @@ -246,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 @@ -254,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 @@ -328,31 +318,6 @@ end -- TODO: load blocks instead, as with wires. mesecon.register_mvps_stopper("ignore") --- All of the locked and internal nodes in Minetest Game -for _, name in ipairs({ - "default:chest_locked", - "default:chest_locked_open", - "doors:door_steel_b_1", -- old style doors - "doors:door_steel_b_2", -- - "doors:door_steel_t_1", -- - "doors:door_steel_t_2", -- - "doors:door_steel_a", -- new style doors - "doors:door_steel_b", -- - "doors:door_steel_c", -- - "doors:door_steel_d", -- - "doors:hidden", - "doors:trapdoor_steel", - "doors:trapdoor_steel_open", - "xpanes:door_steel_bar_a", - "xpanes:door_steel_bar_b", - "xpanes:door_steel_bar_c", - "xpanes:door_steel_bar_d", - "xpanes:trapdoor_steel_bar", - "xpanes:trapdoor_steel_bar_open", -}) do - mesecon.register_mvps_stopper(name) -end - mesecon.register_on_mvps_move(mesecon.move_hot_nodes) mesecon.register_on_mvps_move(function(moved_nodes) for i = 1, #moved_nodes do diff --git a/mesecons_noteblock/init.lua b/mesecons_noteblock/init.lua index 40e2577..f0e7044 100644 --- a/mesecons_noteblock/init.lua +++ b/mesecons_noteblock/init.lua @@ -12,7 +12,7 @@ minetest.register_node("mesecons_noteblock:noteblock", { mesecon.noteblock_play(pos, node.param2) minetest.set_node(pos, node) end, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, mesecons = {effector = { -- play sound when activated action_on = function(pos, node) mesecon.noteblock_play(pos, node.param2) @@ -25,7 +25,7 @@ minetest.register_craft({ output = "mesecons_noteblock:noteblock 1", recipe = { {"group:wood", "group:wood", "group:wood"}, - {"group:mesecon_conductor_craftable", "default:steel_ingot", "group:mesecon_conductor_craftable"}, + {"group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable"}, {"group:wood", "group:wood", "group:wood"}, } }) @@ -46,14 +46,20 @@ local soundnames = { "mesecons_noteblock_c" } -local node_sounds = { - ["default:lava_source"] = "fire_fire", - ["default:chest"] = "mesecons_noteblock_snare", - ["default:chest_locked"] = "mesecons_noteblock_snare", - ["default:coalblock"] = "tnt_explode", - ["default:glass"] = "mesecons_noteblock_hihat", - ["default:obsidian_glass"] = "mesecons_noteblock_hihat", -} +local node_sounds = {} +for alias, sound in pairs({ + ["mesecons_gamecompat:lava_source"] = mesecon.sound_name.fire, + ["mesecons_gamecompat:chest"] = "mesecons_noteblock_snare", + ["mesecons_gamecompat:chest_locked"] = "mesecons_noteblock_snare", + ["mesecons_gamecompat:coalblock"] = mesecon.sound_name.explode, + ["mesecons_gamecompat:glass"] = "mesecons_noteblock_hihat", + ["mesecons_gamecompat:obsidian_glass"] = "mesecons_noteblock_hihat", +}) do + local nodename = minetest.registered_aliases[alias] + if nodename then + node_sounds[nodename] = sound + end +end local node_sounds_group = { ["stone"] = "mesecons_noteblock_kick", @@ -61,6 +67,7 @@ local node_sounds_group = { ["wood"] = "mesecons_noteblock_litecrash", } +local steelblock_nodename = minetest.registered_aliases["mesecons_gamecompat:steelblock"] mesecon.noteblock_play = function(pos, param2) pos.y = pos.y-1 local nodeunder = minetest.get_node(pos).name @@ -80,7 +87,7 @@ mesecon.noteblock_play = function(pos, param2) minetest.log("error", "[mesecons_noteblock] No soundname found, test param2") return end - if nodeunder == "default:steelblock" then + if nodeunder == steelblock_nodename then soundname = soundname.. 2 end end diff --git a/mesecons_noteblock/mod.conf b/mesecons_noteblock/mod.conf index ad0b4c7..261424b 100644 --- a/mesecons_noteblock/mod.conf +++ b/mesecons_noteblock/mod.conf @@ -1,2 +1,2 @@ name = mesecons_noteblock -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 732dd12..bc940d0 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -278,7 +278,7 @@ minetest.register_node("mesecons_pistons:piston_normal_off", { paramtype2 = "facedir", is_ground_content = false, after_place_node = piston_orientate, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, mesecons = {effector={ action_on = piston_on, rules = piston_get_rules, @@ -308,7 +308,7 @@ minetest.register_node("mesecons_pistons:piston_normal_on", { after_dig_node = piston_after_dig, node_box = piston_on_box, selection_box = piston_on_box, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, mesecons = {effector={ action_off = piston_off, rules = piston_get_rules, @@ -338,7 +338,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_normal", { node_box = piston_pusher_box, on_rotate = piston_rotate_pusher, drop = "", - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, }) -- Sticky ones @@ -357,7 +357,7 @@ minetest.register_node("mesecons_pistons:piston_sticky_off", { paramtype2 = "facedir", is_ground_content = false, after_place_node = piston_orientate, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, mesecons = {effector={ action_on = piston_on, rules = piston_get_rules, @@ -387,7 +387,7 @@ minetest.register_node("mesecons_pistons:piston_sticky_on", { after_dig_node = piston_after_dig, node_box = piston_on_box, selection_box = piston_on_box, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, mesecons = {effector={ action_off = piston_off, rules = piston_get_rules, @@ -417,7 +417,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_sticky", { node_box = piston_pusher_box, on_rotate = piston_rotate_pusher, drop = "", - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, }) @@ -463,9 +463,9 @@ mesecon.register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_get_st minetest.register_craft({ output = "mesecons_pistons:piston_normal_off 2", recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"default:cobble", "default:steel_ingot", "default:cobble"}, - {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, + {"group:wood", "group:wood", "group:wood"}, + {"mesecons_gamecompat:cobble", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:cobble"}, + {"mesecons_gamecompat:cobble", "group:mesecon_conductor_craftable", "mesecons_gamecompat:cobble"}, } }) diff --git a/mesecons_pistons/mod.conf b/mesecons_pistons/mod.conf index c7399a9..30a73a3 100644 --- a/mesecons_pistons/mod.conf +++ b/mesecons_pistons/mod.conf @@ -1,2 +1,2 @@ name = mesecons_pistons -depends = default, mesecons, mesecons_mvps +depends = mesecons, mesecons_gamecompat, mesecons_mvps diff --git a/mesecons_powerplant/init.lua b/mesecons_powerplant/init.lua index dff19ad..90724bd 100644 --- a/mesecons_powerplant/init.lua +++ b/mesecons_powerplant/init.lua @@ -16,7 +16,7 @@ minetest.register_node("mesecons_powerplant:power_plant", { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3}, }, - sounds = default.node_sound_leaves_defaults(), + sounds = mesecon.node_sound.leaves, mesecons = {receptor = { state = mesecon.state.on }}, diff --git a/mesecons_powerplant/mod.conf b/mesecons_powerplant/mod.conf index a0949a3..26c580b 100644 --- a/mesecons_powerplant/mod.conf +++ b/mesecons_powerplant/mod.conf @@ -1,2 +1,2 @@ name = mesecons_powerplant -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_pressureplates/init.lua b/mesecons_pressureplates/init.lua index 6c22db2..737d7cd 100644 --- a/mesecons_pressureplates/init.lua +++ b/mesecons_pressureplates/init.lua @@ -94,7 +94,7 @@ mesecon.register_pressure_plate( "jeija_pressure_plate_wood_inv.png", {{"group:wood", "group:wood"}}, { choppy = 3, oddly_breakable_by_hand = 3 }, - default.node_sound_wood_defaults()) + mesecon.node_sound.wood) mesecon.register_pressure_plate( "mesecons_pressureplates:pressure_plate_stone", @@ -103,6 +103,6 @@ mesecon.register_pressure_plate( {"jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on.png","jeija_pressure_plate_stone_on_edges.png"}, "jeija_pressure_plate_stone_wield.png", "jeija_pressure_plate_stone_inv.png", - {{"default:cobble", "default:cobble"}}, + {{"mesecons_gamecompat:cobble", "mesecons_gamecompat:cobble"}}, { cracky = 3, oddly_breakable_by_hand = 3 }, - default.node_sound_stone_defaults()) + mesecon.node_sound.stone) diff --git a/mesecons_pressureplates/mod.conf b/mesecons_pressureplates/mod.conf index 99b8745..cebd8a6 100644 --- a/mesecons_pressureplates/mod.conf +++ b/mesecons_pressureplates/mod.conf @@ -1,2 +1,2 @@ name = mesecons_pressureplates -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_random/init.lua b/mesecons_random/init.lua index b2a1702..cc57a46 100644 --- a/mesecons_random/init.lua +++ b/mesecons_random/init.lua @@ -6,7 +6,7 @@ minetest.register_node("mesecons_random:removestone", { inventory_image = minetest.inventorycube("jeija_removestone_inv.png"), groups = {cracky=3}, description="Removestone", - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {effector = { action_on = function (pos, node) minetest.remove_node(pos) @@ -20,9 +20,9 @@ minetest.register_node("mesecons_random:removestone", { minetest.register_craft({ output = 'mesecons_random:removestone 4', recipe = { - {"", "default:cobble", ""}, - {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, - {"", "default:cobble", ""}, + {"", "mesecons_gamecompat:cobble", ""}, + {"mesecons_gamecompat:cobble", "group:mesecon_conductor_craftable", "mesecons_gamecompat:cobble"}, + {"", "mesecons_gamecompat:cobble", ""}, } }) @@ -34,7 +34,7 @@ minetest.register_node("mesecons_random:ghoststone", { is_ground_content = false, inventory_image = minetest.inventorycube("jeija_ghoststone_inv.png"), groups = {cracky=3}, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, mesecons = {conductor = { state = mesecon.state.off, rules = mesecon.rules.alldirs, @@ -71,8 +71,8 @@ minetest.register_node("mesecons_random:ghoststone_active", { minetest.register_craft({ output = 'mesecons_random:ghoststone 4', recipe = { - {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, - {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"}, - {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:cobble", "mesecons_gamecompat:steel_ingot"}, + {"mesecons_gamecompat:cobble", "group:mesecon_conductor_craftable", "mesecons_gamecompat:cobble"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:cobble", "mesecons_gamecompat:steel_ingot"}, } }) diff --git a/mesecons_random/mod.conf b/mesecons_random/mod.conf index 8d233f0..af40fbb 100644 --- a/mesecons_random/mod.conf +++ b/mesecons_random/mod.conf @@ -1,2 +1,2 @@ name = mesecons_random -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_receiver/init.lua b/mesecons_receiver/init.lua index 6ac4eae..301dbc4 100644 --- a/mesecons_receiver/init.lua +++ b/mesecons_receiver/init.lua @@ -56,7 +56,7 @@ mesecon.register_node("mesecons_receiver:receiver", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, }, { tiles = { "receiver_top_off.png", @@ -105,7 +105,7 @@ mesecon.register_node("mesecons_receiver:receiver_up", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, }, { tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { @@ -150,7 +150,7 @@ mesecon.register_node("mesecons_receiver:receiver_down", { }, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, }, { tiles = {"mesecons_wire_off.png"}, mesecons = {conductor = { @@ -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 diff --git a/mesecons_receiver/mod.conf b/mesecons_receiver/mod.conf index 0bda4f6..3e0fda0 100644 --- a/mesecons_receiver/mod.conf +++ b/mesecons_receiver/mod.conf @@ -1,2 +1,2 @@ name = mesecons_receiver -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_solarpanel/init.lua b/mesecons_solarpanel/init.lua index dc0b8a4..84bbfd3 100644 --- a/mesecons_solarpanel/init.lua +++ b/mesecons_solarpanel/init.lua @@ -15,7 +15,7 @@ mesecon.register_node("mesecons_solarpanel:solar_panel", { wall_top = {-7/16, 7/16, -7/16, 7/16, 8/16, 7/16}, wall_side = {-8/16, -7/16, -7/16, -7/16, 7/16, 7/16}, }, - sounds = default.node_sound_glass_defaults(), + sounds = mesecon.node_sound.glass, on_blast = mesecon.on_blastnode, },{ groups = {dig_immediate = 3}, diff --git a/mesecons_solarpanel/mod.conf b/mesecons_solarpanel/mod.conf index 2c6f98c..ce3f7d7 100644 --- a/mesecons_solarpanel/mod.conf +++ b/mesecons_solarpanel/mod.conf @@ -1,2 +1,2 @@ name = mesecons_solarpanel -depends = default, mesecons, mesecons_materials +depends = mesecons, mesecons_gamecompat, mesecons_materials diff --git a/mesecons_stickyblocks/init.lua b/mesecons_stickyblocks/init.lua index 3e8b7c4..622455a 100644 --- a/mesecons_stickyblocks/init.lua +++ b/mesecons_stickyblocks/init.lua @@ -15,5 +15,5 @@ minetest.register_node("mesecons_stickyblocks:sticky_block_all", { end return connected end, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, }) diff --git a/mesecons_stickyblocks/mod.conf b/mesecons_stickyblocks/mod.conf index 5291e0a..4aa2ee2 100644 --- a/mesecons_stickyblocks/mod.conf +++ b/mesecons_stickyblocks/mod.conf @@ -1,2 +1,2 @@ name = mesecons_stickyblocks -depends = default, mesecons, mesecons_mvps +depends = mesecons, mesecons_gamecompat, mesecons_mvps diff --git a/mesecons_switch/init.lua b/mesecons_switch/init.lua index ba766d4..4d650b1 100644 --- a/mesecons_switch/init.lua +++ b/mesecons_switch/init.lua @@ -4,7 +4,7 @@ mesecon.register_node("mesecons_switch:mesecon_switch", { paramtype2="facedir", description="Switch", is_ground_content = false, - sounds = default.node_sound_stone_defaults(), + sounds = mesecon.node_sound.stone, on_rightclick = function (pos, node) if(mesecon.flipstate(pos, node) == "on") then mesecon.receptor_on(pos) @@ -30,7 +30,7 @@ mesecon.register_node("mesecons_switch:mesecon_switch", { minetest.register_craft({ output = "mesecons_switch:mesecon_switch_off 2", recipe = { - {"default:steel_ingot", "default:cobble", "default:steel_ingot"}, + {"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:cobble", "mesecons_gamecompat:steel_ingot"}, {"group:mesecon_conductor_craftable","", "group:mesecon_conductor_craftable"}, } }) diff --git a/mesecons_switch/mod.conf b/mesecons_switch/mod.conf index 403fd22..f6b642c 100644 --- a/mesecons_switch/mod.conf +++ b/mesecons_switch/mod.conf @@ -1,2 +1,2 @@ name = mesecons_switch -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_torch/init.lua b/mesecons_torch/init.lua index bbb8da5..34f3c4d 100644 --- a/mesecons_torch/init.lua +++ b/mesecons_torch/init.lua @@ -42,7 +42,7 @@ minetest.register_craft({ output = "mesecons_torch:mesecon_torch_on 4", recipe = { {"group:mesecon_conductor_craftable"}, - {"default:stick"},} + {"group:stick"},} }) local torch_selectionbox = @@ -64,7 +64,7 @@ minetest.register_node("mesecons_torch:mesecon_torch_off", { selection_box = torch_selectionbox, groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons_torch:mesecon_torch_on", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {receptor = { state = mesecon.state.off, rules = torch_get_output_rules @@ -86,7 +86,7 @@ minetest.register_node("mesecons_torch:mesecon_torch_on", { groups = {dig_immediate=3}, light_source = minetest.LIGHT_MAX-5, description="Mesecon Torch", - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, mesecons = {receptor = { state = mesecon.state.on, rules = torch_get_output_rules diff --git a/mesecons_torch/mod.conf b/mesecons_torch/mod.conf index 6b694a3..b631be7 100644 --- a/mesecons_torch/mod.conf +++ b/mesecons_torch/mod.conf @@ -1,2 +1,2 @@ name = mesecons_torch -depends = default, mesecons +depends = mesecons, mesecons_gamecompat diff --git a/mesecons_walllever/init.lua b/mesecons_walllever/init.lua index 64d9b28..670dab5 100644 --- a/mesecons_walllever/init.lua +++ b/mesecons_walllever/init.lua @@ -15,7 +15,7 @@ mesecon.register_node("mesecons_walllever:wall_lever", { type = "fixed", fixed = { -8/16, -8/16, 3/16, 8/16, 8/16, 8/16 }, }, - sounds = default.node_sound_wood_defaults(), + sounds = mesecon.node_sound.wood, on_rightclick = function (pos, node) if(mesecon.flipstate(pos, node) == "on") then mesecon.receptor_on(pos, mesecon.rules.buttonlike_get(node)) @@ -58,7 +58,7 @@ minetest.register_craft({ output = "mesecons_walllever:wall_lever_off 2", recipe = { {"group:mesecon_conductor_craftable"}, - {"default:stone"}, - {"default:stick"}, + {"mesecons_gamecompat:stone"}, + {"group:stick"}, } }) diff --git a/mesecons_walllever/mod.conf b/mesecons_walllever/mod.conf index d6ca0bc..16467d4 100644 --- a/mesecons_walllever/mod.conf +++ b/mesecons_walllever/mod.conf @@ -1,2 +1,2 @@ name = mesecons_walllever -depends = default, mesecons, mesecons_receiver +depends = mesecons, mesecons_gamecompat, mesecons_receiver diff --git a/mesecons_wires/init.lua b/mesecons_wires/init.lua index 66a2305..c7669b3 100644 --- a/mesecons_wires/init.lua +++ b/mesecons_wires/init.lua @@ -216,7 +216,7 @@ local function register_wires() walkable = false, drop = "mesecons:wire_00000000_off", mesecon_wire = true, - sounds = default.node_sound_defaults(), + sounds = mesecon.node_sound.default, on_rotate = false, }, {tiles = tiles_off, mesecons = meseconspec_off, groups = groups_off}, {tiles = tiles_on, mesecons = meseconspec_on, groups = groups_on}) @@ -229,23 +229,31 @@ register_wires() -- ############## -- ## Crafting ## -- ############## -minetest.register_craft({ - type = "cooking", - output = "mesecons:wire_00000000_off 2", - recipe = "default: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 = "default: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 = "default: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 diff --git a/mesecons_wires/mod.conf b/mesecons_wires/mod.conf index 8e2c30b..abbdebe 100644 --- a/mesecons_wires/mod.conf +++ b/mesecons_wires/mod.conf @@ -1,2 +1,2 @@ name = mesecons_wires -depends = default, mesecons +depends = mesecons, mesecons_gamecompat