forked from minetest-mods/mesecons
Compare commits
5 Commits
mvps-ignor
...
9b835053c2
Author | SHA1 | Date | |
---|---|---|---|
9b835053c2 | |||
583d2c1441 | |||
397d449f1e | |||
29ec26a4c8 | |||
0d86f2c45e |
@ -92,8 +92,8 @@ function mesecon.get_any_inputrules(node)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_any_rules(node)
|
function mesecon.get_any_rules(node)
|
||||||
return mesecon.mergetable(mesecon.get_any_inputrules(node) or {},
|
return mesecon.merge_rule_sets(mesecon.get_any_inputrules(node),
|
||||||
mesecon.get_any_outputrules(node) or {})
|
mesecon.get_any_outputrules(node))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Receptors
|
-- Receptors
|
||||||
|
@ -16,9 +16,9 @@ mesecon.rules.default = {
|
|||||||
{x = 0, y = -1, z = -1},
|
{x = 0, y = -1, z = -1},
|
||||||
}
|
}
|
||||||
|
|
||||||
mesecon.rules.floor = mesecon.mergetable(mesecon.rules.default, {{x = 0, y = -1, z = 0}})
|
mesecon.rules.floor = mesecon.merge_rule_sets(mesecon.rules.default, {{x = 0, y = -1, z = 0}})
|
||||||
|
|
||||||
mesecon.rules.pplate = mesecon.mergetable(mesecon.rules.floor, {{x = 0, y = -2, z = 0}})
|
mesecon.rules.pplate = mesecon.merge_rule_sets(mesecon.rules.floor, {{x = 0, y = -2, z = 0}})
|
||||||
|
|
||||||
mesecon.rules.buttonlike = {
|
mesecon.rules.buttonlike = {
|
||||||
{x = 1, y = 0, z = 0},
|
{x = 1, y = 0, z = 0},
|
||||||
|
@ -213,8 +213,9 @@ function mesecon.cmpAny(t1, t2)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- does not overwrite values; number keys (ipairs) are appended, not overwritten
|
-- Deprecated. Use `merge_tables` or `merge_rule_sets` as appropriate.
|
||||||
function mesecon.mergetable(source, dest)
|
function mesecon.mergetable(source, dest)
|
||||||
|
minetest.log("warning", debug.traceback("Deprecated call to mesecon.mergetable"))
|
||||||
local rval = mesecon.tablecopy(dest)
|
local rval = mesecon.tablecopy(dest)
|
||||||
|
|
||||||
for k, v in pairs(source) do
|
for k, v in pairs(source) do
|
||||||
@ -227,6 +228,32 @@ function mesecon.mergetable(source, dest)
|
|||||||
return rval
|
return rval
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Merges several rule sets in one. Order may not be preserved. Nil arguments
|
||||||
|
-- are ignored.
|
||||||
|
-- The rule sets must be of the same kind (either all single-level or all two-level).
|
||||||
|
-- The function may be changed to normalize the resulting set in some way.
|
||||||
|
function mesecon.merge_rule_sets(...)
|
||||||
|
local rval = {}
|
||||||
|
for _, t in pairs({...}) do -- ignores nils automatically
|
||||||
|
table.insert_all(rval, mesecon.tablecopy(t))
|
||||||
|
end
|
||||||
|
return rval
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Merges two tables, with entries from `replacements` taking precedence over
|
||||||
|
-- those from `base`. Returns the new table.
|
||||||
|
-- Values are deep-copied from either table, keys are referenced.
|
||||||
|
-- Numerical indices aren’t handled specially.
|
||||||
|
function mesecon.merge_tables(base, replacements)
|
||||||
|
local ret = mesecon.tablecopy(replacements) -- these are never overriden so have to be copied in any case
|
||||||
|
for k, v in pairs(base) do
|
||||||
|
if ret[k] == nil then -- it could be `false`
|
||||||
|
ret[k] = mesecon.tablecopy(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
function mesecon.register_node(name, spec_common, spec_off, spec_on)
|
function mesecon.register_node(name, spec_common, spec_off, spec_on)
|
||||||
spec_common.drop = spec_common.drop or name .. "_off"
|
spec_common.drop = spec_common.drop or name .. "_off"
|
||||||
spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode
|
spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode
|
||||||
@ -234,8 +261,8 @@ function mesecon.register_node(name, spec_common, spec_off, spec_on)
|
|||||||
spec_on.__mesecon_state = "on"
|
spec_on.__mesecon_state = "on"
|
||||||
spec_off.__mesecon_state = "off"
|
spec_off.__mesecon_state = "off"
|
||||||
|
|
||||||
spec_on = mesecon.mergetable(spec_common, spec_on);
|
spec_on = mesecon.merge_tables(spec_common, spec_on);
|
||||||
spec_off = mesecon.mergetable(spec_common, spec_off);
|
spec_off = mesecon.merge_tables(spec_common, spec_off);
|
||||||
|
|
||||||
minetest.register_node(name .. "_on", spec_on)
|
minetest.register_node(name .. "_on", spec_on)
|
||||||
minetest.register_node(name .. "_off", spec_off)
|
minetest.register_node(name .. "_off", spec_off)
|
||||||
|
@ -32,7 +32,13 @@ mesecon.register_node("mesecons_blinkyplant:blinky_plant", {
|
|||||||
fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3},
|
fixed = {-0.3, -0.5, -0.3, 0.3, -0.5+0.7, 0.3},
|
||||||
},
|
},
|
||||||
on_timer = on_timer,
|
on_timer = on_timer,
|
||||||
on_rightclick = toggle_timer,
|
on_rightclick = function(pos, node, clicker)
|
||||||
|
if minetest.is_protected(pos, clicker and clicker:get_player_name() or "") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
toggle_timer(pos)
|
||||||
|
end,
|
||||||
on_construct = toggle_timer
|
on_construct = toggle_timer
|
||||||
},{
|
},{
|
||||||
tiles = {"jeija_blinky_plant_off.png"},
|
tiles = {"jeija_blinky_plant_off.png"},
|
||||||
|
@ -93,7 +93,7 @@ local off_state = {
|
|||||||
wield_image = "mesecons_delayer_off_1.png",
|
wield_image = "mesecons_delayer_off_1.png",
|
||||||
groups = off_groups,
|
groups = off_groups,
|
||||||
on_punch = function(pos, node, puncher)
|
on_punch = function(pos, node, puncher)
|
||||||
if minetest.is_protected(pos, puncher and puncher:get_player_name()) then
|
if minetest.is_protected(pos, puncher and puncher:get_player_name() or "") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ local on_state = {
|
|||||||
},
|
},
|
||||||
groups = {bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1},
|
groups = {bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1},
|
||||||
on_punch = function(pos, node, puncher)
|
on_punch = function(pos, node, puncher)
|
||||||
if minetest.is_protected(pos, puncher and puncher:get_player_name()) then
|
if minetest.is_protected(pos, puncher and puncher:get_player_name() or "") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ minetest.register_node("mesecons_extrawires:corner_on", {
|
|||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = corner_selectionbox,
|
selection_box = corner_selectionbox,
|
||||||
node_box = corner_nodebox,
|
|
||||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||||
drop = "mesecons_extrawires:corner_off",
|
drop = "mesecons_extrawires:corner_off",
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
@ -58,7 +57,6 @@ minetest.register_node("mesecons_extrawires:corner_off", {
|
|||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = corner_selectionbox,
|
selection_box = corner_selectionbox,
|
||||||
node_box = corner_nodebox,
|
|
||||||
groups = {dig_immediate = 3},
|
groups = {dig_immediate = 3},
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
mesecons = {conductor =
|
mesecons = {conductor =
|
||||||
|
@ -18,7 +18,7 @@ minetest.override_item("default:mese", {
|
|||||||
|
|
||||||
-- Copy node definition of powered mese from normal mese
|
-- Copy node definition of powered mese from normal mese
|
||||||
-- and brighten texture tiles to indicate mese is powered
|
-- and brighten texture tiles to indicate mese is powered
|
||||||
local powered_def = mesecon.mergetable(minetest.registered_nodes["default:mese"], {
|
local powered_def = mesecon.merge_tables(minetest.registered_nodes["default:mese"], {
|
||||||
drop = "default:mese",
|
drop = "default:mese",
|
||||||
light_source = 5,
|
light_source = 5,
|
||||||
mesecons = {conductor = {
|
mesecons = {conductor = {
|
||||||
|
@ -29,9 +29,6 @@ function mesecon.is_mvps_stopper(node, pushdir, stack, stackid)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.register_mvps_stopper(nodename, get_stopper)
|
function mesecon.register_mvps_stopper(nodename, get_stopper)
|
||||||
if minetest.registered_nodes[nodename] and minetest.registered_nodes[nodename].buildable_to then
|
|
||||||
minetest.log("warning", ("Registering a buildable-to node \"%s\" as a mesecon stopper, this is not supported"):format(nodename))
|
|
||||||
end
|
|
||||||
if get_stopper == nil then
|
if get_stopper == nil then
|
||||||
get_stopper = true
|
get_stopper = true
|
||||||
end
|
end
|
||||||
@ -74,10 +71,6 @@ function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky)
|
|||||||
local np = frontiers[1]
|
local np = frontiers[1]
|
||||||
local nn = minetest.get_node(np)
|
local nn = minetest.get_node(np)
|
||||||
|
|
||||||
-- Never push into unloaded blocks. Don’t try to pull from them, either.
|
|
||||||
-- TODO: load blocks instead, as with wires.
|
|
||||||
if nn.name == "ignore" then return nil end
|
|
||||||
|
|
||||||
if not node_replaceable(nn.name) then
|
if not node_replaceable(nn.name) then
|
||||||
table.insert(nodes, {node = nn, pos = np})
|
table.insert(nodes, {node = nn, pos = np})
|
||||||
if #nodes > maximum then return nil end
|
if #nodes > maximum then return nil end
|
||||||
@ -334,6 +327,10 @@ function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Never push into unloaded blocks. Don’t try to pull from them, either.
|
||||||
|
-- TODO: load blocks instead, as with wires.
|
||||||
|
mesecon.register_mvps_stopper("ignore")
|
||||||
|
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_b_1")
|
mesecon.register_mvps_stopper("doors:door_steel_b_1")
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_t_1")
|
mesecon.register_mvps_stopper("doors:door_steel_t_1")
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_b_2")
|
mesecon.register_mvps_stopper("doors:door_steel_b_2")
|
||||||
|
@ -3,7 +3,11 @@ minetest.register_node("mesecons_noteblock:noteblock", {
|
|||||||
tiles = {"mesecons_noteblock.png"},
|
tiles = {"mesecons_noteblock.png"},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
||||||
on_punch = function(pos, node) -- change sound when punched
|
on_punch = function(pos, node, puncher) -- change sound when punched
|
||||||
|
if minetest.is_protected(pos, puncher and puncher:get_player_name() or "") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
node.param2 = (node.param2+1)%12
|
node.param2 = (node.param2+1)%12
|
||||||
mesecon.noteblock_play(pos, node.param2)
|
mesecon.noteblock_play(pos, node.param2)
|
||||||
minetest.set_node(pos, node)
|
minetest.set_node(pos, node)
|
||||||
|
Reference in New Issue
Block a user