Compare commits

21 Commits

Author SHA1 Message Date
4ecc694518 Merge remote-tracking branch 'upstream/master' 2022-08-26 15:11:33 +02:00
68171b3d8d Store gate inputs in param2 instead of metadata (#583) 2022-08-25 16:55:03 +02:00
da57a6214a microcontroller: fix unsafe pattern usage (#620) 2022-08-01 17:27:05 +02:00
3dd0eb7e4f Merge remote-tracking branch 'upstream/master' 2022-06-25 16:50:22 +02:00
c4f9336a26 Exit with error if vports do not exist for any reason (#618)
Make sure node is registered before attempting to access the vports
2022-06-16 11:56:49 +02:00
0a4a88b1b9 Consolidate horizontal rules getters (#602) 2022-06-05 11:19:18 +02:00
58305f52bc Add missing nil check in hydroturbine code 2022-06-05 11:11:47 +02:00
e4d7c07962 Merge remote-tracking branch 'upstream/master' 2022-05-27 18:37:05 +02:00
27c3c515b4 Fix mesecon cooking recipes 2022-05-11 08:57:19 +02:00
960b7c4915 Make some fixes to movement and rotation (#584) 2022-05-07 22:24:58 +02:00
dfa43d6c0c Make modpack mostly independent from MTG (#607) 2022-05-05 16:57:53 +02:00
f4070d3e64 Use FIFO queue for mvps (#599) 2022-04-01 23:33:41 +02:00
69a4b6b332 Merge remote-tracking branch 'upstream/master' 2022-03-05 11:22:46 +01:00
e38e4fe0c5 Merge remote-tracking branch 'upstream/master' 2021-12-10 21:37:44 +01:00
5ad1e6bc4d Merge remote-tracking branch 'upstream/master' 2021-08-31 19:47:43 +02:00
b91fe92d13 Merge remote-tracking branch 'upstream/master' 2021-08-04 21:42:16 +02:00
6a87290ead Merge remote-tracking branch 'upstream/master' 2021-07-26 22:19:21 +02:00
1963bfcc0d Merge remote-tracking branch 'upstream/master' 2021-04-17 13:50:01 +02:00
6936c8c2e4 Merge remote-tracking branch 'upstream/master' 2021-04-04 21:01:12 +02:00
2fc1682c04 Merge remote-tracking branch 'upstream/master' 2021-03-12 12:22:52 +01:00
9b835053c2 Remove undeclared global variable corner_nodebox
To avoid warning message at load time.
2021-02-27 03:22:08 +01:00
70 changed files with 497 additions and 383 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 = {}
@ -54,7 +72,28 @@ function mesecon.rotate_rules_up(rules)
end
return nr
end
--
-- Returns a rules getter function that returns different rules depending on the node's horizontal rotation.
-- If param2 % 4 == 0, then the rules returned by the getter are a copy of base_rules.
function mesecon.horiz_rules_getter(base_rules)
local rotations = {mesecon.tablecopy(base_rules)}
for i = 2, 4 do
local right_rules = rotations[i - 1]
if not right_rules[1] or right_rules[1].x then
-- flat rules
rotations[i] = mesecon.rotate_rules_left(right_rules)
else
-- not flat
rotations[i] = {}
for j, rules in ipairs(right_rules) do
rotations[i][j] = mesecon.rotate_rules_left(rules)
end
end
end
return function(node)
return rotations[node.param2 % 4 + 1]
end
end
function mesecon.flattenrules(allrules)
--[[

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

@ -1,19 +1,7 @@
-- Function that get the input/output rules of the delayer
local delayer_get_output_rules = function(node)
local rules = {{x = 0, y = 0, z = 1}}
for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules)
end
return rules
end
local delayer_get_output_rules = mesecon.horiz_rules_getter({{x = 1, y = 0, z = 0}})
local delayer_get_input_rules = function(node)
local rules = {{x = 0, y = 0, z = -1}}
for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules)
end
return rules
end
local delayer_get_input_rules = mesecon.horiz_rules_getter({{x = -1, y = 0, z = 0}})
-- Functions that are called after the delay time
@ -69,7 +57,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 +157,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,21 +1,12 @@
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 },
}
local corner_get_rules = function (node)
local rules =
{{x = 1, y = 0, z = 0},
{x = 0, y = 0, z = -1}}
for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules)
end
return rules
end
local corner_get_rules = mesecon.horiz_rules_getter({
{x = 0, y = 0, z = -1},
{x = -1, y = 0, z = 0},
})
minetest.register_node("mesecons_extrawires:corner_on", {
drawtype = "mesh",
@ -32,7 +23,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 +31,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 +49,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 +57,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,12 +1,9 @@
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 },
}
local rules = {
local doublecorner_get_rules = mesecon.horiz_rules_getter({
{
{ x = 1, y = 0, z = 0 },
{ x = 0, y = 0, z = 1 },
@ -15,19 +12,7 @@ local rules = {
{ x = -1, y = 0, z = 0 },
{ x = 0, y = 0, z = -1 },
},
}
local doublecorner_rules = {}
for k = 1, 4 do
doublecorner_rules[k] = table.copy(rules)
for i, r in ipairs(rules) do
rules[i] = mesecon.rotate_rules_left(r)
end
end
local function doublecorner_get_rules(node)
return doublecorner_rules[node.param2 % 4 + 1]
end
})
local doublecorner_states = {
"mesecons_extrawires:doublecorner_00",
@ -61,7 +46,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 +54,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
@ -12,18 +10,11 @@ local tjunction_selectionbox = {
fixed = { -16/32, -16/32, -16/32, 16/32, -12/32, 7/32 },
}
local tjunction_get_rules = function (node)
local rules =
{{x = 0, y = 0, z = 1},
local tjunction_get_rules = mesecon.horiz_rules_getter({
{x = 1, y = 0, z = 0},
{x = 0, y = 0, z = -1}}
for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules)
end
return rules
end
{x = 0, y = 0, z = -1},
{x = -1, y = 0, z = 0},
})
minetest.register_node("mesecons_extrawires:tjunction_on", {
drawtype = "nodebox",
@ -44,7 +35,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 +43,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 +65,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 +73,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

@ -11,41 +11,32 @@ local nodebox = {
},
}
local function gate_rotate_rules(node, rules)
for rotations = 0, node.param2 - 1 do
rules = mesecon.rotate_rules_left(rules)
end
return rules
end
local gate_get_output_rules = mesecon.horiz_rules_getter({{x = 1, y = 0, z = 0}})
local function gate_get_output_rules(node)
return gate_rotate_rules(node, {{x=1, y=0, z=0}})
end
local gate_get_input_rules_oneinput = mesecon.horiz_rules_getter({{x =-1, y = 0, z = 0}})
local function gate_get_input_rules_oneinput(node)
return gate_rotate_rules(node, {{x=-1, y=0, z=0}})
end
local function gate_get_input_rules_twoinputs(node)
return gate_rotate_rules(node, {{x=0, y=0, z=1, name="input1"},
{x=0, y=0, z=-1, name="input2"}})
end
local gate_get_input_rules_twoinputs = mesecon.horiz_rules_getter({
{x = 0, y = 0, z = 1, name = "input1"},
{x = 0, y = 0, z = -1, name = "input2"},
})
local function set_gate(pos, node, state)
local gate = minetest.registered_nodes[node.name]
local new_nodename = state and gate.onstate or gate.offstate
minetest.swap_node(pos, {name = new_nodename, param2 = node.param2})
if new_nodename ~= node.name then
if mesecon.do_overheat(pos) then
minetest.remove_node(pos)
mesecon.receptor_off(pos, gate_get_output_rules(node))
minetest.add_item(pos, gate.drop)
elseif state then
minetest.swap_node(pos, {name = gate.onstate, param2=node.param2})
mesecon.receptor_on(pos, gate_get_output_rules(node))
else
minetest.swap_node(pos, {name = gate.offstate, param2=node.param2})
mesecon.receptor_off(pos, gate_get_output_rules(node))
end
end
end
local function update_gate(pos, node, link, newstate)
local gate = minetest.registered_nodes[node.name]
@ -53,11 +44,36 @@ local function update_gate(pos, node, link, newstate)
if gate.inputnumber == 1 then
set_gate(pos, node, gate.assess(newstate == "on"))
elseif gate.inputnumber == 2 then
-- Inputs are stored in param2. Bit 5 is always set.
-- input1 is bit 6 and input2 is bit 7.
local val1, val2
if node.param2 >= 32 then
-- Bit 5 is set, so param2 is in the proper format.
if link.name == "input1" then
val1 = newstate == "on"
val2 = node.param2 >= 128
else
val1 = node.param2 % 128 >= 64
val2 = newstate == "on"
end
else
-- Migrate old gates where the inputs are stored as metadata.
-- This also triggers for newly placed gates.
local meta = minetest.get_meta(pos)
meta:set_int(link.name, newstate == "on" and 1 or 0)
local val1 = meta:get_int("input1") == 1
local val2 = meta:get_int("input2") == 1
if link.name == "input1" then
val1 = newstate == "on"
val2 = meta:get_int("input2") == 1
else
val1 = meta:get_int("input1") == 1
val2 = newstate == "on"
end
-- Set bit 5 so this won't happen again.
node.param2 = node.param2 + 32
-- Clear the metadata.
meta:set_string("input1", "")
meta:set_string("input2", "")
end
node.param2 = node.param2 % 64 + (val1 and 64 or 0) + (val2 and 128 or 0)
set_gate(pos, node, gate.assess(val1, val2))
end
end
@ -78,12 +94,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
}},
@ -64,8 +64,8 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
local function is_flowing_water(pos)
local name = minetest.get_node(pos).name
local is_water = minetest.get_item_group(name, "water") > 0
local is_flowing = minetest.registered_items[name].liquidtype == "flowing"
return (is_water and is_flowing)
local def = minetest.registered_items[name]
return is_water and (def and def.liquidtype == "flowing")
end
minetest.register_abm({
@ -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,13 +1,7 @@
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}}
if node.param2 == 1 or node.param2 == 3 then
return mesecon.rotate_rules_right(rules)
end
return rules
end
local insulated_wire_get_rules = mesecon.horiz_rules_getter({
{x = 1, y = 0, z = 0},
{x = -1, y = 0, z = 0},
})
minetest.register_node("mesecons_insulated:insulated_on", {
drawtype = "nodebox",
@ -36,14 +30,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 +66,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

@ -470,7 +470,12 @@ local safe_globals = {
local function create_environment(pos, mem, event, itbl, send_warning)
-- Gather variables for the environment
local vports = minetest.registered_nodes[minetest.get_node(pos).name].virtual_portstates
local node_def = minetest.registered_nodes[minetest.get_node(pos).name]
if not node_def then return end
local vports = node_def.virtual_portstates
if not vports then return end
local vports_copy = {}
for k, v in pairs(vports) do vports_copy[k] = v end
local rports = get_real_port_states(pos)
@ -627,6 +632,7 @@ local function run_inner(pos, code, event)
-- Create environment
local itbl = {}
local env = create_environment(pos, mem, event, itbl, send_warning)
if not env then return false, "Env does not exist. Controller has been moved?" end
local success, msg
-- Create the sandbox and execute code
@ -865,7 +871,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 +920,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]
@ -332,7 +332,8 @@ yc.parse_get_eeprom_param = function(cond, starti)
local addr
while s ~= "" do
s = string.sub(cond, i, i)
if string.find("0123456789", s) == nil or s == "" then
local b = s:byte()
if s == "" or 48 > b or b > 57 then
addr = string.sub(cond, starti, i-1) -- i: last number i+1 after last number
return addr, i
end
@ -419,7 +420,9 @@ yc.command_sbi = function(params, eeprom, L, Lv)
if status == nil then return nil, nil end
if string.find("ABCD", params[1])~=nil and #params[1]==1 then --is a port
if #params[1]==1 then
local b = params[1]:byte()
if 65 <= b and b <= 68 then -- is a port
if status == "1" then
Lv = yc.set_portstate (params[1], true, Lv)
else
@ -427,6 +430,7 @@ yc.command_sbi = function(params, eeprom, L, Lv)
end
return eeprom, Lv;
end
end
--is an eeprom address
local new_eeprom = "";

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
frontiers:add(vector.subtract(np, dir))
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
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,
})
@ -464,8 +464,8 @@ 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"},
{"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

@ -25,18 +25,10 @@ local up_rcvboxes = {
{6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East)
}
local receiver_get_rules = function (node)
local rules = { {x = 1, y = 0, z = 0},
{x = -2, y = 0, z = 0}}
if node.param2 == 2 then
rules = mesecon.rotate_rules_left(rules)
elseif node.param2 == 3 then
rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules))
elseif node.param2 == 0 then
rules = mesecon.rotate_rules_right(rules)
end
return rules
end
local receiver_get_rules = mesecon.horiz_rules_getter({
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z = -2},
})
mesecon.register_node("mesecons_receiver:receiver", {
drawtype = "nodebox",
@ -56,7 +48,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 +97,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 +142,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 +201,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 +214,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 +252,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 ##
-- ##############
-- (Resolve aliases to avoid bug with cooking/fuel recipes.)
if minetest.registered_aliases["mesecons_gamecompat:mese_crystal_fragment"] then
minetest.register_craft({
type = "cooking",
output = "mesecons:wire_00000000_off 2",
recipe = "default:mese_crystal_fragment",
recipe = minetest.registered_aliases["mesecons_gamecompat:mese_crystal_fragment"],
cooktime = 3,
})
end
if minetest.registered_aliases["mesecons_gamecompat:mese_crystal"] then
minetest.register_craft({
type = "cooking",
output = "mesecons:wire_00000000_off 18",
recipe = "default:mese_crystal",
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 = "default:mese",
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