Merge remote-tracking branch 'upstream/master'

This commit is contained in:
bri cassa 2022-05-27 18:37:05 +02:00
commit e4d7c07962
71 changed files with 412 additions and 290 deletions

View File

@ -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 <https://github.com/kilbith>, which can be found at
<https://github.com/minetest/minetest_game/blob/9528c0f8b93d6934930e99c3c116df275fb0e4bc/mods/default/textures/default_steel_block.png>.
"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
<https://creativecommons.org/licenses/by-sa/3.0/>. The artwork is reportedly copyright (C) 2010-2018 kilbith.
=================================================================
GNU LESSER GENERAL PUBLIC LICENSE

View File

@ -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 = {}

View File

@ -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

View File

@ -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 nodes 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

View File

@ -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},

View File

@ -1,2 +1,2 @@
name = mesecons_blinkyplant
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_button
depends = default, mesecons, mesecons_receiver
depends = mesecons, mesecons_gamecompat, mesecons_receiver

View File

@ -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
}},

View File

@ -1,2 +1,2 @@
name = mesecons_commandblock
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_delayer
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_detector
depends = default, mesecons, mesecons_materials
depends = mesecons, mesecons_gamecompat, mesecons_materials

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

View File

@ -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

View File

@ -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({

View File

@ -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,

View File

@ -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

View File

@ -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,
})

View File

@ -1,3 +1,2 @@
name = mesecons_extrawires
depends = default, mesecons
optional_depends = screwdriver
depends = mesecons, mesecons_gamecompat

View File

@ -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({

View File

@ -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 = {

View File

@ -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

View File

@ -1,3 +1,3 @@
name = mesecons_fpga
depends = default, mesecons
depends = mesecons, mesecons_gamecompat
optional_depends = screwdriver

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,3 @@
name = mesecons_gamecompat
depends = mesecons
optional_depends = fire, default, dye, mesecons_mvps, tnt

View File

@ -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^"..

View File

@ -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

View File

@ -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", ""},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_hydroturbine
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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({

View File

@ -1,3 +1,2 @@
name = mesecons_insulated
depends = default, mesecons
optional_depends = screwdriver
depends = mesecons, mesecons_gamecompat

View File

@ -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", ""},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_lamp
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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")

View File

@ -1,2 +1,2 @@
name = mesecons_lightstone
depends = default, mesecons, dye
depends = mesecons, mesecons_gamecompat

View File

@ -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 = {

View File

@ -1,2 +1,2 @@
name = mesecons_luacontroller
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_materials
depends = default, mesecons
depends = mesecons_gamecompat

View File

@ -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]

View File

@ -1,2 +1,2 @@
name = mesecons_microcontroller
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_movestones
depends = default, mesecons, mesecons_materials, mesecons_mvps
depends = mesecons, mesecons_gamecompat, mesecons_materials, mesecons_mvps

View File

@ -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

View File

@ -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

View File

@ -1,2 +1,2 @@
name = mesecons_noteblock
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_pistons
depends = default, mesecons, mesecons_mvps
depends = mesecons, mesecons_gamecompat, mesecons_mvps

View File

@ -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
}},

View File

@ -1,2 +1,2 @@
name = mesecons_powerplant
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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)

View File

@ -1,2 +1,2 @@
name = mesecons_pressureplates
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_random
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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

View File

@ -1,2 +1,2 @@
name = mesecons_receiver
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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},

View File

@ -1,2 +1,2 @@
name = mesecons_solarpanel
depends = default, mesecons, mesecons_materials
depends = mesecons, mesecons_gamecompat, mesecons_materials

View File

@ -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,
})

View File

@ -1,2 +1,2 @@
name = mesecons_stickyblocks
depends = default, mesecons, mesecons_mvps
depends = mesecons, mesecons_gamecompat, mesecons_mvps

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_switch
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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

View File

@ -1,2 +1,2 @@
name = mesecons_torch
depends = default, mesecons
depends = mesecons, mesecons_gamecompat

View File

@ -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"},
}
})

View File

@ -1,2 +1,2 @@
name = mesecons_walllever
depends = default, mesecons, mesecons_receiver
depends = mesecons, mesecons_gamecompat, mesecons_receiver

View File

@ -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

View File

@ -1,2 +1,2 @@
name = mesecons_wires
depends = default, mesecons
depends = mesecons, mesecons_gamecompat