mirror of
https://github.com/minetest-mods/mesecons.git
synced 2024-12-25 23:17:28 +01:00
Add .luacheckrc and fix issues it pointed out (#589)
This commit is contained in:
parent
c9dd323207
commit
fb255d292e
15
.github/workflows/check-release.yml
vendored
Normal file
15
.github/workflows/check-release.yml
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
name: Check & Release
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@main
|
||||||
|
- name: apt
|
||||||
|
run: sudo apt-get install -y luarocks
|
||||||
|
- name: luacheck install
|
||||||
|
run: luarocks install --local luacheck
|
||||||
|
- name: luacheck run
|
||||||
|
run: $HOME/.luarocks/bin/luacheck ./
|
36
.luacheckrc
Normal file
36
.luacheckrc
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
std = "lua51c"
|
||||||
|
|
||||||
|
ignore = {
|
||||||
|
"21/_+", -- Unused variable, except "_", "__", etc.
|
||||||
|
"213", -- Unused loop variable
|
||||||
|
"421", -- Shadowing a local variable
|
||||||
|
"422", -- Shadowing an argument
|
||||||
|
"423", -- Shadowing a loop variable
|
||||||
|
"431", -- Shadowing an upvalue
|
||||||
|
"432", -- Shadowing an upvalue argument
|
||||||
|
"433", -- Shadowing an upvalue loop variable
|
||||||
|
"542", -- Empty if branch
|
||||||
|
}
|
||||||
|
|
||||||
|
max_line_length = 200
|
||||||
|
|
||||||
|
read_globals = {
|
||||||
|
"default",
|
||||||
|
"digiline",
|
||||||
|
"doors",
|
||||||
|
"dump",
|
||||||
|
"jit",
|
||||||
|
"minetest",
|
||||||
|
"screwdriver",
|
||||||
|
"string.split",
|
||||||
|
"table.copy",
|
||||||
|
"table.insert_all",
|
||||||
|
"vector",
|
||||||
|
"VoxelArea",
|
||||||
|
}
|
||||||
|
|
||||||
|
globals = {"mesecon"}
|
||||||
|
|
||||||
|
files["mesecons/actionqueue.lua"] = {
|
||||||
|
globals = {"minetest.registered_globalsteps"},
|
||||||
|
}
|
@ -29,7 +29,7 @@ local queue = mesecon.queue
|
|||||||
queue.actions = {} -- contains all ActionQueue actions
|
queue.actions = {} -- contains all ActionQueue actions
|
||||||
|
|
||||||
function queue:add_function(name, func)
|
function queue:add_function(name, func)
|
||||||
queue.funcs[name] = func
|
self.funcs[name] = func
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If add_action with twice the same overwritecheck and same position are called, the first one is overwritten
|
-- If add_action with twice the same overwritecheck and same position are called, the first one is overwritten
|
||||||
@ -51,17 +51,17 @@ function queue:add_action(pos, func, params, time, overwritecheck, priority)
|
|||||||
|
|
||||||
-- check if old action has to be overwritten / removed:
|
-- check if old action has to be overwritten / removed:
|
||||||
if overwritecheck then
|
if overwritecheck then
|
||||||
for i, ac in ipairs(queue.actions) do
|
for i, ac in ipairs(self.actions) do
|
||||||
if vector.equals(pos, ac.pos)
|
if vector.equals(pos, ac.pos)
|
||||||
and mesecon.cmpAny(overwritecheck, ac.owcheck) then
|
and mesecon.cmpAny(overwritecheck, ac.owcheck) then
|
||||||
-- remove the old action
|
-- remove the old action
|
||||||
table.remove(queue.actions, i)
|
table.remove(self.actions, i)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
table.insert(queue.actions, action)
|
table.insert(self.actions, action)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- execute the stored functions on a globalstep
|
-- execute the stored functions on a globalstep
|
||||||
@ -133,8 +133,8 @@ end
|
|||||||
function queue:execute(action)
|
function queue:execute(action)
|
||||||
-- ignore if action queue function name doesn't exist,
|
-- ignore if action queue function name doesn't exist,
|
||||||
-- (e.g. in case the action queue savegame was written by an old mesecons version)
|
-- (e.g. in case the action queue savegame was written by an old mesecons version)
|
||||||
if queue.funcs[action.func] then
|
if self.funcs[action.func] then
|
||||||
queue.funcs[action.func](action.pos, unpack(action.params))
|
self.funcs[action.func](action.pos, unpack(action.params))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ function mesecon.get_conductor_on(node_off, rulename)
|
|||||||
return conductor.states[tonumber(binstate,2)+1]
|
return conductor.states[tonumber(binstate,2)+1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return offstate
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_conductor_off(node_on, rulename)
|
function mesecon.get_conductor_off(node_on, rulename)
|
||||||
@ -334,7 +334,7 @@ function mesecon.get_conductor_off(node_on, rulename)
|
|||||||
return conductor.states[tonumber(binstate,2)+1]
|
return conductor.states[tonumber(binstate,2)+1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return onstate
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.conductor_get_rules(node)
|
function mesecon.conductor_get_rules(node)
|
||||||
|
@ -11,4 +11,4 @@ local old_forceloaded_blocks = mesecon.file2table("mesecon_forceloaded")
|
|||||||
for hash, _ in pairs(old_forceloaded_blocks) do
|
for hash, _ in pairs(old_forceloaded_blocks) do
|
||||||
minetest.forceload_free_block(unhash_blockpos(hash))
|
minetest.forceload_free_block(unhash_blockpos(hash))
|
||||||
end
|
end
|
||||||
os.remove(minetest.get_worldpath()..DIR_DELIM.."mesecon_forceloaded")
|
os.remove(minetest.get_worldpath().."/mesecon_forceloaded")
|
||||||
|
@ -11,7 +11,7 @@ minetest.register_node("mesecons:mesecon_off", {
|
|||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||||
},
|
},
|
||||||
groups = {dig_immediate=3, mesecon=1, mesecon_conductor_craftable=1},
|
groups = {dig_immediate=3, mesecon=1, mesecon_conductor_craftable=1},
|
||||||
description="Mesecons",
|
description="Mesecons",
|
||||||
mesecons = {conductor={
|
mesecons = {conductor={
|
||||||
state = mesecon.state.off,
|
state = mesecon.state.off,
|
||||||
onstate = "mesecons:mesecon_on"
|
onstate = "mesecons:mesecon_on"
|
||||||
|
@ -63,7 +63,7 @@ mesecon.on_dignode = function(pos, node)
|
|||||||
mesecon.execute_autoconnect_hooks_queue(pos, node)
|
mesecon.execute_autoconnect_hooks_queue(pos, node)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.on_blastnode(pos, intensity)
|
function mesecon.on_blastnode(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
mesecon.on_dignode(pos, node)
|
mesecon.on_dignode(pos, node)
|
||||||
|
@ -286,7 +286,7 @@ end
|
|||||||
-- File writing / reading utilities
|
-- File writing / reading utilities
|
||||||
local wpath = minetest.get_worldpath()
|
local wpath = minetest.get_worldpath()
|
||||||
function mesecon.file2table(filename)
|
function mesecon.file2table(filename)
|
||||||
local f = io.open(wpath..DIR_DELIM..filename, "r")
|
local f = io.open(wpath.."/"..filename, "r")
|
||||||
if f == nil then return {} end
|
if f == nil then return {} end
|
||||||
local t = f:read("*all")
|
local t = f:read("*all")
|
||||||
f:close()
|
f:close()
|
||||||
@ -295,7 +295,7 @@ function mesecon.file2table(filename)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.table2file(filename, table)
|
function mesecon.table2file(filename, table)
|
||||||
local f = io.open(wpath..DIR_DELIM..filename, "w")
|
local f = io.open(wpath.."/"..filename, "w")
|
||||||
f:write(minetest.serialize(table))
|
f:write(minetest.serialize(table))
|
||||||
f:close()
|
f:close()
|
||||||
end
|
end
|
||||||
@ -376,7 +376,7 @@ function mesecon.vm_get_node(pos)
|
|||||||
local tbl = vm_get_or_create_entry(pos)
|
local tbl = vm_get_or_create_entry(pos)
|
||||||
local index = tbl.va:indexp(pos)
|
local index = tbl.va:indexp(pos)
|
||||||
local node_value = tbl.data[index]
|
local node_value = tbl.data[index]
|
||||||
if node_value == core.CONTENT_IGNORE then
|
if node_value == minetest.CONTENT_IGNORE then
|
||||||
return nil
|
return nil
|
||||||
else
|
else
|
||||||
local node_param1 = tbl.param1[index]
|
local node_param1 = tbl.param1[index]
|
||||||
|
@ -32,7 +32,7 @@ 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 = function(pos, node, clicker)
|
on_rightclick = function(pos, _, clicker)
|
||||||
if minetest.is_protected(pos, clicker and clicker:get_player_name() or "") then
|
if minetest.is_protected(pos, clicker and clicker:get_player_name() or "") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -79,7 +79,7 @@ local function after_place(pos, placer)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function receive_fields(pos, formname, fields, sender)
|
local function receive_fields(pos, _, fields, sender)
|
||||||
if not fields.submit then
|
if not fields.submit then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -12,7 +12,7 @@ local function object_detector_make_formspec(pos)
|
|||||||
"button_exit[7,0.75;2,3;;Save]")
|
"button_exit[7,0.75;2,3;;Save]")
|
||||||
end
|
end
|
||||||
|
|
||||||
local function object_detector_on_receive_fields(pos, formname, fields, sender)
|
local function object_detector_on_receive_fields(pos, _, fields, sender)
|
||||||
if not fields.scanname or not fields.digiline_channel then return end
|
if not fields.scanname or not fields.digiline_channel then return end
|
||||||
|
|
||||||
if minetest.is_protected(pos, sender:get_player_name()) then return end
|
if minetest.is_protected(pos, sender:get_player_name()) then return end
|
||||||
@ -53,7 +53,7 @@ end
|
|||||||
-- set player name when receiving a digiline signal on a specific channel
|
-- set player name when receiving a digiline signal on a specific channel
|
||||||
local object_detector_digiline = {
|
local object_detector_digiline = {
|
||||||
effector = {
|
effector = {
|
||||||
action = function(pos, node, channel, msg)
|
action = function(pos, _, channel, msg)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if channel == meta:get_string("digiline_channel") then
|
if channel == meta:get_string("digiline_channel") then
|
||||||
meta:set_string("scanname", msg)
|
meta:set_string("scanname", msg)
|
||||||
@ -156,7 +156,7 @@ local function node_detector_make_formspec(pos)
|
|||||||
"button_exit[7,0.75;2,3;;Save]")
|
"button_exit[7,0.75;2,3;;Save]")
|
||||||
end
|
end
|
||||||
|
|
||||||
local function node_detector_on_receive_fields(pos, fieldname, fields, sender)
|
local function node_detector_on_receive_fields(pos, _, fields, sender)
|
||||||
if not fields.scanname or not fields.digiline_channel then return end
|
if not fields.scanname or not fields.digiline_channel then return end
|
||||||
|
|
||||||
if minetest.is_protected(pos, sender:get_player_name()) then return end
|
if minetest.is_protected(pos, sender:get_player_name()) then return end
|
||||||
@ -238,23 +238,6 @@ local node_detector_digiline = {
|
|||||||
receptor = {}
|
receptor = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
local function after_place_node_detector(pos, placer)
|
|
||||||
local placer_pos = placer:get_pos()
|
|
||||||
if not placer_pos then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
--correct for the player's height
|
|
||||||
if placer:is_player() then
|
|
||||||
placer_pos.y = placer_pos.y + 1.625
|
|
||||||
end
|
|
||||||
|
|
||||||
--correct for 6d facedir
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
node.param2 = minetest.dir_to_facedir(vector.subtract(pos, placer_pos), true)
|
|
||||||
minetest.set_node(pos, node)
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node("mesecons_detector:node_detector_off", {
|
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 = {"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"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
@ -22,11 +22,11 @@ end
|
|||||||
local function meseconify_door(name)
|
local function meseconify_door(name)
|
||||||
if minetest.registered_items[name .. "_b_1"] then
|
if minetest.registered_items[name .. "_b_1"] then
|
||||||
-- old style double-node doors
|
-- old style double-node doors
|
||||||
local function toggle_state1 (pos, node)
|
local function toggle_state1 (pos)
|
||||||
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
|
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
|
||||||
end
|
end
|
||||||
|
|
||||||
local function toggle_state2 (pos, node)
|
local function toggle_state2 (pos)
|
||||||
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
|
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -49,13 +49,13 @@ local function meseconify_door(name)
|
|||||||
-- new style mesh node based doors
|
-- new style mesh node based doors
|
||||||
local override = {
|
local override = {
|
||||||
mesecons = {effector = {
|
mesecons = {effector = {
|
||||||
action_on = function(pos, node)
|
action_on = function(pos)
|
||||||
local door = doors.get(pos)
|
local door = doors.get(pos)
|
||||||
if door then
|
if door then
|
||||||
door:open()
|
door:open()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
action_off = function(pos, node)
|
action_off = function(pos)
|
||||||
local door = doors.get(pos)
|
local door = doors.get(pos)
|
||||||
if door then
|
if door then
|
||||||
door:close()
|
door:close()
|
||||||
@ -93,13 +93,13 @@ end
|
|||||||
if doors and doors.get then
|
if doors and doors.get then
|
||||||
local override = {
|
local override = {
|
||||||
mesecons = {effector = {
|
mesecons = {effector = {
|
||||||
action_on = function(pos, node)
|
action_on = function(pos)
|
||||||
local door = doors.get(pos)
|
local door = doors.get(pos)
|
||||||
if door then
|
if door then
|
||||||
door:open()
|
door:open()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
action_off = function(pos, node)
|
action_off = function(pos)
|
||||||
local door = doors.get(pos)
|
local door = doors.get(pos)
|
||||||
if door then
|
if door then
|
||||||
door:close()
|
door:close()
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
local function crossover_get_rules(node)
|
local crossover_rules = {
|
||||||
return {
|
{--first wire
|
||||||
{--first wire
|
{x=-1,y=0,z=0},
|
||||||
{x=-1,y=0,z=0},
|
{x=1,y=0,z=0},
|
||||||
{x=1,y=0,z=0},
|
},
|
||||||
},
|
{--second wire
|
||||||
{--second wire
|
{x=0,y=0,z=-1},
|
||||||
{x=0,y=0,z=-1},
|
{x=0,y=0,z=1},
|
||||||
{x=0,y=0,z=1},
|
},
|
||||||
},
|
}
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local crossover_states = {
|
local crossover_states = {
|
||||||
"mesecons_extrawires:crossover_off",
|
"mesecons_extrawires:crossover_off",
|
||||||
@ -38,7 +36,7 @@ minetest.register_node("mesecons_extrawires:crossover_off", {
|
|||||||
mesecons = {
|
mesecons = {
|
||||||
conductor = {
|
conductor = {
|
||||||
states = crossover_states,
|
states = crossover_states,
|
||||||
rules = crossover_get_rules(),
|
rules = crossover_rules,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
@ -65,7 +63,7 @@ minetest.register_node("mesecons_extrawires:crossover_01", {
|
|||||||
mesecons = {
|
mesecons = {
|
||||||
conductor = {
|
conductor = {
|
||||||
states = crossover_states,
|
states = crossover_states,
|
||||||
rules = crossover_get_rules(),
|
rules = crossover_rules,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
@ -92,7 +90,7 @@ minetest.register_node("mesecons_extrawires:crossover_10", {
|
|||||||
mesecons = {
|
mesecons = {
|
||||||
conductor = {
|
conductor = {
|
||||||
states = crossover_states,
|
states = crossover_states,
|
||||||
rules = crossover_get_rules(),
|
rules = crossover_rules,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
@ -119,7 +117,7 @@ minetest.register_node("mesecons_extrawires:crossover_on", {
|
|||||||
mesecons = {
|
mesecons = {
|
||||||
conductor = {
|
conductor = {
|
||||||
states = crossover_states,
|
states = crossover_states,
|
||||||
rules = crossover_get_rules(),
|
rules = crossover_rules,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
|
@ -69,7 +69,7 @@ local vertical_updatepos = function (pos)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local vertical_update = function (pos, node)
|
local vertical_update = function (pos)
|
||||||
vertical_updatepos(pos) -- this one
|
vertical_updatepos(pos) -- this one
|
||||||
vertical_updatepos(vector.add(pos, vertical_rules[1])) -- above
|
vertical_updatepos(vector.add(pos, vertical_rules[1])) -- above
|
||||||
vertical_updatepos(vector.add(pos, vertical_rules[2])) -- below
|
vertical_updatepos(vector.add(pos, vertical_rules[2])) -- below
|
||||||
|
@ -96,7 +96,7 @@ plg.register_nodes({
|
|||||||
meta:set_int("valid", 0)
|
meta:set_int("valid", 0)
|
||||||
meta:set_string("infotext", "FPGA")
|
meta:set_string("infotext", "FPGA")
|
||||||
end,
|
end,
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, _, clicker)
|
||||||
if not minetest.is_player(clicker) then
|
if not minetest.is_player(clicker) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -113,7 +113,7 @@ plg.register_nodes({
|
|||||||
mesecons = {
|
mesecons = {
|
||||||
effector = {
|
effector = {
|
||||||
rules = {}, -- replaced later
|
rules = {}, -- replaced later
|
||||||
action_change = function(pos, node, rule, newstate)
|
action_change = function(pos, _, rule, newstate)
|
||||||
plg.ports_changed(pos, rule, newstate)
|
plg.ports_changed(pos, rule, newstate)
|
||||||
plg.update(pos)
|
plg.update(pos)
|
||||||
end
|
end
|
||||||
@ -129,7 +129,7 @@ plg.register_nodes({
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = function(pos, node, user, mode)
|
on_rotate = function(pos, _, user, mode)
|
||||||
local abcd1 = {"A", "B", "C", "D"}
|
local abcd1 = {"A", "B", "C", "D"}
|
||||||
local abcd2 = {A = 1, B = 2, C = 3, D = 4}
|
local abcd2 = {A = 1, B = 2, C = 3, D = 4}
|
||||||
local ops = {"op1", "op2", "dst"}
|
local ops = {"op1", "op2", "dst"}
|
||||||
|
@ -10,10 +10,10 @@ local operations = {
|
|||||||
-- unary: Whether this gate only has one input
|
-- unary: Whether this gate only has one input
|
||||||
{ gate = "and", short = "&", fs_name = " AND", func = function(a, b) return a and b end },
|
{ gate = "and", short = "&", fs_name = " AND", func = function(a, b) return a and b end },
|
||||||
{ gate = "or", short = "|", fs_name = " OR", func = function(a, b) return a or b end },
|
{ gate = "or", short = "|", fs_name = " OR", func = function(a, b) return a or b end },
|
||||||
{ gate = "not", short = "~", fs_name = " NOT", func = function(a, b) return not b end, unary = true },
|
{ gate = "not", short = "~", fs_name = " NOT", func = function(_, b) return not b end, unary = true },
|
||||||
{ gate = "xor", short = "^", fs_name = " XOR", func = function(a, b) return a ~= b end },
|
{ gate = "xor", short = "^", fs_name = " XOR", func = function(a, b) return a ~= b end },
|
||||||
{ gate = "nand", short = "?", fs_name = "NAND", func = function(a, b) return not (a and b) end },
|
{ gate = "nand", short = "?", fs_name = "NAND", func = function(a, b) return not (a and b) end },
|
||||||
{ gate = "buf", short = "_", fs_name = " =", func = function(a, b) return b end, unary = true },
|
{ gate = "buf", short = "_", fs_name = " =", func = function(_, b) return b end, unary = true },
|
||||||
{ gate = "xnor", short = "=", fs_name = "XNOR", func = function(a, b) return a == b end },
|
{ gate = "xnor", short = "=", fs_name = "XNOR", func = function(a, b) return a == b end },
|
||||||
{ gate = "nor", short = "!", fs_name = " NOR", func = function(a, b) return not (a or b) end },
|
{ gate = "nor", short = "!", fs_name = " NOR", func = function(a, b) return not (a or b) end },
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,6 @@ end
|
|||||||
local function register_gate(name, inputnumber, assess, recipe, description)
|
local function register_gate(name, inputnumber, assess, recipe, description)
|
||||||
local get_inputrules = inputnumber == 2 and gate_get_input_rules_twoinputs or
|
local get_inputrules = inputnumber == 2 and gate_get_input_rules_twoinputs or
|
||||||
gate_get_input_rules_oneinput
|
gate_get_input_rules_oneinput
|
||||||
description = "Logic Gate: "..name
|
|
||||||
|
|
||||||
local basename = "mesecons_gates:"..name
|
local basename = "mesecons_gates:"..name
|
||||||
mesecon.register_node(basename, {
|
mesecon.register_node(basename, {
|
||||||
|
@ -72,7 +72,7 @@ minetest.register_abm({
|
|||||||
nodenames = {"mesecons_hydroturbine:hydro_turbine_off"},
|
nodenames = {"mesecons_hydroturbine:hydro_turbine_off"},
|
||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos)
|
||||||
local waterpos={x=pos.x, y=pos.y+1, z=pos.z}
|
local waterpos={x=pos.x, y=pos.y+1, z=pos.z}
|
||||||
if is_flowing_water(waterpos) then
|
if is_flowing_water(waterpos) then
|
||||||
minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_on"})
|
minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_on"})
|
||||||
@ -85,7 +85,7 @@ minetest.register_abm({
|
|||||||
nodenames = {"mesecons_hydroturbine:hydro_turbine_on"},
|
nodenames = {"mesecons_hydroturbine:hydro_turbine_on"},
|
||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos)
|
||||||
local waterpos={x=pos.x, y=pos.y+1, z=pos.z}
|
local waterpos={x=pos.x, y=pos.y+1, z=pos.z}
|
||||||
if not is_flowing_water(waterpos) then
|
if not is_flowing_water(waterpos) then
|
||||||
minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_off"})
|
minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_off"})
|
||||||
|
@ -60,7 +60,7 @@ local function update_real_port_states(pos, rule_name, new_state)
|
|||||||
if rule_name.x == nil then
|
if rule_name.x == nil then
|
||||||
for _, rname in ipairs(rule_name) do
|
for _, rname in ipairs(rule_name) do
|
||||||
local port = pos_to_side[rname.x + (2 * rname.z) + 3]
|
local port = pos_to_side[rname.x + (2 * rname.z) + 3]
|
||||||
L[port] = (newstate == "on") and 1 or 0
|
L[port] = (new_state == "on") and 1 or 0
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local port = pos_to_side[rule_name.x + (2 * rule_name.z) + 3]
|
local port = pos_to_side[rule_name.x + (2 * rule_name.z) + 3]
|
||||||
@ -172,7 +172,7 @@ local function burn_controller(pos)
|
|||||||
minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat)
|
minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function overheat(pos, meta)
|
local function overheat(pos)
|
||||||
if mesecon.do_overheat(pos) then -- If too hot
|
if mesecon.do_overheat(pos) then -- If too hot
|
||||||
burn_controller(pos)
|
burn_controller(pos)
|
||||||
return true
|
return true
|
||||||
@ -612,9 +612,8 @@ local function run_inner(pos, code, event)
|
|||||||
if overheat(pos) then return true, "" end
|
if overheat(pos) then return true, "" end
|
||||||
if ignore_event(event, meta) then return true, "" end
|
if ignore_event(event, meta) then return true, "" end
|
||||||
|
|
||||||
-- Load code & mem from meta
|
-- Load mem from meta
|
||||||
local mem = load_memory(meta)
|
local mem = load_memory(meta)
|
||||||
local code = meta:get_string("code")
|
|
||||||
|
|
||||||
-- 'Last warning' label.
|
-- 'Last warning' label.
|
||||||
local warning = ""
|
local warning = ""
|
||||||
@ -626,15 +625,17 @@ local function run_inner(pos, code, event)
|
|||||||
local itbl = {}
|
local itbl = {}
|
||||||
local env = create_environment(pos, mem, event, itbl, send_warning)
|
local env = create_environment(pos, mem, event, itbl, send_warning)
|
||||||
|
|
||||||
|
local success, msg
|
||||||
-- Create the sandbox and execute code
|
-- Create the sandbox and execute code
|
||||||
local f, msg = create_sandbox(code, env)
|
local f
|
||||||
|
f, msg = create_sandbox(code, env)
|
||||||
if not f then return false, msg end
|
if not f then return false, msg end
|
||||||
-- Start string true sandboxing
|
-- Start string true sandboxing
|
||||||
local onetruestring = getmetatable("")
|
local onetruestring = getmetatable("")
|
||||||
-- If a string sandbox is already up yet inconsistent, something is very wrong
|
-- If a string sandbox is already up yet inconsistent, something is very wrong
|
||||||
assert(onetruestring.__index == string)
|
assert(onetruestring.__index == string)
|
||||||
onetruestring.__index = env.string
|
onetruestring.__index = env.string
|
||||||
local success, msg = pcall(f)
|
success, msg = pcall(f)
|
||||||
onetruestring.__index = string
|
onetruestring.__index = string
|
||||||
-- End string true sandboxing
|
-- End string true sandboxing
|
||||||
if not success then return false, msg end
|
if not success then return false, msg end
|
||||||
@ -748,7 +749,7 @@ local selection_box = {
|
|||||||
local digiline = {
|
local digiline = {
|
||||||
receptor = {},
|
receptor = {},
|
||||||
effector = {
|
effector = {
|
||||||
action = function(pos, node, channel, msg)
|
action = function(pos, _, channel, msg)
|
||||||
msg = clean_and_weigh_digiline_message(msg)
|
msg = clean_and_weigh_digiline_message(msg)
|
||||||
run(pos, {type = "digiline", channel = channel, msg = msg})
|
run(pos, {type = "digiline", channel = channel, msg = msg})
|
||||||
end
|
end
|
||||||
@ -766,7 +767,7 @@ local function set_program(pos, code)
|
|||||||
return run(pos, {type="program"})
|
return run(pos, {type="program"})
|
||||||
end
|
end
|
||||||
|
|
||||||
local function on_receive_fields(pos, form_name, fields, sender)
|
local function on_receive_fields(pos, _, fields, sender)
|
||||||
if not fields.program then
|
if not fields.program then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -871,7 +872,7 @@ for d = 0, 1 do
|
|||||||
c = c == 1,
|
c = c == 1,
|
||||||
d = d == 1,
|
d = d == 1,
|
||||||
},
|
},
|
||||||
after_dig_node = function (pos, node)
|
after_dig_node = function (pos)
|
||||||
mesecon.do_cooldown(pos)
|
mesecon.do_cooldown(pos)
|
||||||
mesecon.receptor_off(pos, output_rules)
|
mesecon.receptor_off(pos, output_rules)
|
||||||
end,
|
end,
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
minetest.register_craftitem("mesecons_materials:glue", {
|
minetest.register_craftitem("mesecons_materials:glue", {
|
||||||
image = "mesecons_glue.png",
|
image = "mesecons_glue.png",
|
||||||
on_place_on_ground = minetest.craftitem_place_item,
|
on_place_on_ground = minetest.craftitem_place_item,
|
||||||
description="Glue",
|
description="Glue",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("mesecons_materials:fiber", {
|
minetest.register_craftitem("mesecons_materials:fiber", {
|
||||||
image = "mesecons_fiber.png",
|
image = "mesecons_fiber.png",
|
||||||
on_place_on_ground = minetest.craftitem_place_item,
|
on_place_on_ground = minetest.craftitem_place_item,
|
||||||
description="Fiber",
|
description="Fiber",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
@ -29,7 +29,7 @@ minetest.register_craft({
|
|||||||
minetest.register_craftitem("mesecons_materials:silicon", {
|
minetest.register_craftitem("mesecons_materials:silicon", {
|
||||||
image = "mesecons_silicon.png",
|
image = "mesecons_silicon.png",
|
||||||
on_place_on_ground = minetest.craftitem_place_item,
|
on_place_on_ground = minetest.craftitem_place_item,
|
||||||
description="Silicon",
|
description="Silicon",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -102,7 +102,7 @@ minetest.register_node(nodename, {
|
|||||||
for i=1, EEPROM_SIZE+1 do r=r.."0" end --Generate a string with EEPROM_SIZE*"0"
|
for i=1, EEPROM_SIZE+1 do r=r.."0" end --Generate a string with EEPROM_SIZE*"0"
|
||||||
meta:set_string("eeprom", r)
|
meta:set_string("eeprom", r)
|
||||||
end,
|
end,
|
||||||
on_receive_fields = function(pos, formanme, fields, sender)
|
on_receive_fields = function(pos, _, fields, sender)
|
||||||
local player_name = sender:get_player_name()
|
local player_name = sender:get_player_name()
|
||||||
if minetest.is_protected(pos, player_name) and
|
if minetest.is_protected(pos, player_name) and
|
||||||
not minetest.check_player_privs(player_name, {protection_bypass=true}) then
|
not minetest.check_player_privs(player_name, {protection_bypass=true}) then
|
||||||
@ -225,7 +225,6 @@ yc.parsecode = function(code, pos)
|
|||||||
local Lreal = yc.get_real_portstates(pos)
|
local Lreal = yc.get_real_portstates(pos)
|
||||||
local Lvirtual = yc.get_virtual_portstates(pos)
|
local Lvirtual = yc.get_virtual_portstates(pos)
|
||||||
if Lvirtual == nil then return nil end
|
if Lvirtual == nil then return nil end
|
||||||
local c
|
|
||||||
local eeprom = meta:get_string("eeprom")
|
local eeprom = meta:get_string("eeprom")
|
||||||
while true do
|
while true do
|
||||||
local command, params
|
local command, params
|
||||||
@ -251,9 +250,9 @@ yc.parsecode = function(code, pos)
|
|||||||
if not params then return nil end
|
if not params then return nil end
|
||||||
end
|
end
|
||||||
if command == "on" then
|
if command == "on" then
|
||||||
L = yc.command_on (params, Lvirtual)
|
Lvirtual = yc.command_on (params, Lvirtual)
|
||||||
elseif command == "off" then
|
elseif command == "off" then
|
||||||
L = yc.command_off(params, Lvirtual)
|
Lvirtual = yc.command_off(params, Lvirtual)
|
||||||
elseif command == "print" then
|
elseif command == "print" then
|
||||||
local su = yc.command_print(params, eeprom, yc.merge_portstates(Lreal, Lvirtual))
|
local su = yc.command_print(params, eeprom, yc.merge_portstates(Lreal, Lvirtual))
|
||||||
if su ~= true then return nil end
|
if su ~= true then return nil end
|
||||||
@ -384,7 +383,6 @@ end
|
|||||||
|
|
||||||
--Commands
|
--Commands
|
||||||
yc.command_on = function(params, L)
|
yc.command_on = function(params, L)
|
||||||
local rules = {}
|
|
||||||
for i, port in ipairs(params) do
|
for i, port in ipairs(params) do
|
||||||
L = yc.set_portstate (port, true, L)
|
L = yc.set_portstate (port, true, L)
|
||||||
end
|
end
|
||||||
@ -392,7 +390,6 @@ yc.command_on = function(params, L)
|
|||||||
end
|
end
|
||||||
|
|
||||||
yc.command_off = function(params, L)
|
yc.command_off = function(params, L)
|
||||||
local rules = {}
|
|
||||||
for i, port in ipairs(params) do
|
for i, port in ipairs(params) do
|
||||||
L = yc.set_portstate (port, false, L)
|
L = yc.set_portstate (port, false, L)
|
||||||
end
|
end
|
||||||
@ -405,7 +402,7 @@ yc.command_print = function(params, eeprom, L)
|
|||||||
if param:sub(1,1) == '"' and param:sub(#param, #param) == '"' then
|
if param:sub(1,1) == '"' and param:sub(#param, #param) == '"' then
|
||||||
s = s..param:sub(2, #param-1)
|
s = s..param:sub(2, #param-1)
|
||||||
else
|
else
|
||||||
r = yc.command_parsecondition(param, L, eeprom)
|
local r = yc.command_parsecondition(param, L, eeprom)
|
||||||
if r == "1" or r == "0" then
|
if r == "1" or r == "0" then
|
||||||
s = s..r
|
s = s..r
|
||||||
else return nil end
|
else return nil end
|
||||||
@ -469,8 +466,8 @@ yc.command_after_execute = function(params)
|
|||||||
if yc.parsecode(params.code, params.pos) == nil then
|
if yc.parsecode(params.code, params.pos) == nil then
|
||||||
meta:set_string("infotext", "Code in after() not valid!")
|
meta:set_string("infotext", "Code in after() not valid!")
|
||||||
else
|
else
|
||||||
if code ~= nil then
|
if params.code ~= nil then
|
||||||
meta:set_string("infotext", "Working Microcontroller\n"..code)
|
meta:set_string("infotext", "Working Microcontroller\n"..params.code)
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", "Working Microcontroller")
|
meta:set_string("infotext", "Working Microcontroller")
|
||||||
end
|
end
|
||||||
@ -543,8 +540,8 @@ yc.command_parsecondition = function(cond, L, eeprom)
|
|||||||
cond = string.gsub(cond, "!0", "1")
|
cond = string.gsub(cond, "!0", "1")
|
||||||
cond = string.gsub(cond, "!1", "0")
|
cond = string.gsub(cond, "!1", "0")
|
||||||
|
|
||||||
local i = 2
|
i = 2
|
||||||
local l = string.len(cond)
|
l = string.len(cond)
|
||||||
while i<=l do
|
while i<=l do
|
||||||
local s = cond:sub(i,i)
|
local s = cond:sub(i,i)
|
||||||
local b = tonumber(cond:sub(i-1, i-1))
|
local b = tonumber(cond:sub(i-1, i-1))
|
||||||
@ -553,8 +550,7 @@ yc.command_parsecondition = function(cond, L, eeprom)
|
|||||||
if s == "=" then
|
if s == "=" then
|
||||||
if a==nil then return nil end
|
if a==nil then return nil end
|
||||||
if b==nil then return nil end
|
if b==nil then return nil end
|
||||||
if a == b then buf = "1" end
|
local buf = a == b and "1" or "0"
|
||||||
if a ~= b then buf = "0" end
|
|
||||||
cond = string.gsub(cond, b..s..a, buf)
|
cond = string.gsub(cond, b..s..a, buf)
|
||||||
i = 1
|
i = 1
|
||||||
l = string.len(cond)
|
l = string.len(cond)
|
||||||
@ -562,8 +558,8 @@ yc.command_parsecondition = function(cond, L, eeprom)
|
|||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
local i = 2
|
i = 2
|
||||||
local l = string.len(cond)
|
l = string.len(cond)
|
||||||
while i<=l do
|
while i<=l do
|
||||||
local s = cond:sub(i,i)
|
local s = cond:sub(i,i)
|
||||||
local b = tonumber(cond:sub(i-1, i-1))
|
local b = tonumber(cond:sub(i-1, i-1))
|
||||||
@ -659,7 +655,7 @@ yc.set_portstate = function(port, state, L)
|
|||||||
return L
|
return L
|
||||||
end
|
end
|
||||||
|
|
||||||
yc.update_real_portstates = function(pos, node, rulename, newstate)
|
yc.update_real_portstates = function(pos, _, rulename, newstate)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if rulename == nil then
|
if rulename == nil then
|
||||||
meta:set_int("real_portstates", 1)
|
meta:set_int("real_portstates", 1)
|
||||||
@ -696,7 +692,7 @@ end
|
|||||||
|
|
||||||
yc.get_virtual_portstates = function(pos) -- portstates according to the name
|
yc.get_virtual_portstates = function(pos) -- portstates according to the name
|
||||||
local name = minetest.get_node(pos).name
|
local name = minetest.get_node(pos).name
|
||||||
local b, a = string.find(name, ":microcontroller")
|
local _, a = string.find(name, ":microcontroller")
|
||||||
if a == nil then return nil end
|
if a == nil then return nil end
|
||||||
a = a + 1
|
a = a + 1
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical)
|
|||||||
-- ### Step 3: If sticky, pull stack behind ###
|
-- ### Step 3: If sticky, pull stack behind ###
|
||||||
if is_sticky then
|
if is_sticky then
|
||||||
local backpos = vector.subtract(pos, direction)
|
local backpos = vector.subtract(pos, direction)
|
||||||
success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull, owner)
|
local success, _, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull, owner)
|
||||||
if success then
|
if success then
|
||||||
mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1)
|
mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1)
|
||||||
end
|
end
|
||||||
@ -94,7 +94,7 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical)
|
|||||||
|
|
||||||
def.after_place_node = mesecon.mvps_set_owner
|
def.after_place_node = mesecon.mvps_set_owner
|
||||||
|
|
||||||
def.on_punch = function(pos, node, player)
|
def.on_punch = function(pos, _, player)
|
||||||
local player_name = player and player.get_player_name and player:get_player_name()
|
local player_name = player and player.get_player_name and player:get_player_name()
|
||||||
if mesecon.mvps_claim(pos, player_name) then
|
if mesecon.mvps_claim(pos, player_name) then
|
||||||
minetest.get_node_timer(pos):start(timer_interval)
|
minetest.get_node_timer(pos):start(timer_interval)
|
||||||
@ -102,7 +102,7 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def.on_timer = function(pos, elapsed)
|
def.on_timer = function(pos)
|
||||||
local sourcepos = mesecon.is_powered(pos)
|
local sourcepos = mesecon.is_powered(pos)
|
||||||
if not sourcepos then
|
if not sourcepos then
|
||||||
return
|
return
|
||||||
|
@ -271,7 +271,6 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sti
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor)
|
function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor)
|
||||||
local objects_to_move = {}
|
|
||||||
local dir_k
|
local dir_k
|
||||||
local dir_l
|
local dir_l
|
||||||
for k, v in pairs(dir) do
|
for k, v in pairs(dir) do
|
||||||
|
@ -107,7 +107,7 @@ local function piston_off(pos, node)
|
|||||||
local dir = minetest.facedir_to_dir(node.param2)
|
local dir = minetest.facedir_to_dir(node.param2)
|
||||||
local pullpos = vector.add(pos, vector.multiply(dir, -2))
|
local pullpos = vector.add(pos, vector.multiply(dir, -2))
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local success, stack, oldstack = mesecon.mvps_pull_single(pullpos, dir, max_pull, meta:get_string("owner"))
|
local success, _, oldstack = mesecon.mvps_pull_single(pullpos, dir, max_pull, meta:get_string("owner"))
|
||||||
if success then
|
if success then
|
||||||
mesecon.mvps_move_objects(pullpos, vector.multiply(dir, -1), oldstack, -1)
|
mesecon.mvps_move_objects(pullpos, vector.multiply(dir, -1), oldstack, -1)
|
||||||
end
|
end
|
||||||
@ -234,7 +234,7 @@ local function piston_rotate_pusher(pos, node, player, mode)
|
|||||||
return piston_rotate_on(piston_pos, piston_node, player, mode)
|
return piston_rotate_on(piston_pos, piston_node, player, mode)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function piston_punch(pos, node, player)
|
local function piston_punch(pos, _, player)
|
||||||
local player_name = player and player.get_player_name and player:get_player_name()
|
local player_name = player and player.get_player_name and player:get_player_name()
|
||||||
if mesecon.mvps_claim(pos, player_name) then
|
if mesecon.mvps_claim(pos, player_name) then
|
||||||
minetest.chat_send_player(player_name, "Reclaimed piston")
|
minetest.chat_send_player(player_name, "Reclaimed piston")
|
||||||
@ -422,7 +422,7 @@ minetest.register_node("mesecons_pistons:piston_pusher_sticky", {
|
|||||||
|
|
||||||
|
|
||||||
-- Register pushers as stoppers if they would be seperated from the piston
|
-- Register pushers as stoppers if they would be seperated from the piston
|
||||||
local function piston_pusher_get_stopper(node, dir, stack, stackid)
|
local function piston_pusher_get_stopper(node, _, stack, stackid)
|
||||||
if (stack[stackid + 1]
|
if (stack[stackid + 1]
|
||||||
and stack[stackid + 1].node.name == get_pistonspec(node.name, "pusher").onname
|
and stack[stackid + 1].node.name == get_pistonspec(node.name, "pusher").onname
|
||||||
and stack[stackid + 1].node.param2 == node.param2)
|
and stack[stackid + 1].node.param2 == node.param2)
|
||||||
@ -434,32 +434,12 @@ local function piston_pusher_get_stopper(node, dir, stack, stackid)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
local function piston_pusher_up_down_get_stopper(node, dir, stack, stackid)
|
|
||||||
if (stack[stackid + 1]
|
|
||||||
and stack[stackid + 1].node.name == get_pistonspec(node.name, "pusher").onname)
|
|
||||||
or (stack[stackid - 1]
|
|
||||||
and stack[stackid - 1].node.name == get_pistonspec(node.name, "pusher").onname) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_normal", piston_pusher_get_stopper)
|
mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_normal", piston_pusher_get_stopper)
|
||||||
mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_sticky", piston_pusher_get_stopper)
|
mesecon.register_mvps_stopper("mesecons_pistons:piston_pusher_sticky", piston_pusher_get_stopper)
|
||||||
|
|
||||||
|
|
||||||
-- Register pistons as stoppers if they would be seperated from the stopper
|
-- Register pistons as stoppers if they would be seperated from the stopper
|
||||||
local piston_up_down_get_stopper = function (node, dir, stack, stackid)
|
local function piston_get_stopper(node, _, stack, stackid)
|
||||||
if (stack[stackid + 1]
|
|
||||||
and stack[stackid + 1].node.name == get_pistonspec(node.name, "onname").pusher)
|
|
||||||
or (stack[stackid - 1]
|
|
||||||
and stack[stackid - 1].node.name == get_pistonspec(node.name, "onname").pusher) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local function piston_get_stopper(node, dir, stack, stackid)
|
|
||||||
local pistonspec = get_pistonspec(node.name, "onname")
|
local pistonspec = get_pistonspec(node.name, "onname")
|
||||||
local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1)
|
local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1)
|
||||||
local pusherpos = vector.add(stack[stackid].pos, dir)
|
local pusherpos = vector.add(stack[stackid].pos, dir)
|
||||||
@ -499,4 +479,4 @@ minetest.register_craft({
|
|||||||
|
|
||||||
|
|
||||||
-- load legacy code
|
-- load legacy code
|
||||||
dofile(minetest.get_modpath("mesecons_pistons")..DIR_DELIM.."legacy.lua")
|
dofile(minetest.get_modpath("mesecons_pistons").."/legacy.lua")
|
||||||
|
@ -11,7 +11,7 @@ minetest.register_node("mesecons_powerplant:power_plant", {
|
|||||||
walkable = false,
|
walkable = false,
|
||||||
groups = {dig_immediate=3, mesecon = 2},
|
groups = {dig_immediate=3, mesecon = 2},
|
||||||
light_source = minetest.LIGHT_MAX-9,
|
light_source = minetest.LIGHT_MAX-9,
|
||||||
description="Power Plant",
|
description="Power Plant",
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
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},
|
||||||
|
@ -8,7 +8,7 @@ local pp_box_on = {
|
|||||||
fixed = { -7/16, -8/16, -7/16, 7/16, -7.5/16, 7/16 },
|
fixed = { -7/16, -8/16, -7/16, 7/16, -7.5/16, 7/16 },
|
||||||
}
|
}
|
||||||
|
|
||||||
local function pp_on_timer(pos, elapsed)
|
local function pp_on_timer(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local basename = minetest.registered_nodes[node.name].pressureplate_basename
|
local basename = minetest.registered_nodes[node.name].pressureplate_basename
|
||||||
|
|
||||||
@ -17,7 +17,6 @@ local function pp_on_timer(pos, elapsed)
|
|||||||
if not basename then return end
|
if not basename then return end
|
||||||
|
|
||||||
local objs = minetest.get_objects_inside_radius(pos, 1)
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
||||||
local two_below = vector.add(pos, vector.new(0, -2, 0))
|
|
||||||
|
|
||||||
if objs[1] == nil and node.name == basename .. "_on" then
|
if objs[1] == nil and node.name == basename .. "_on" then
|
||||||
minetest.set_node(pos, {name = basename .. "_off"})
|
minetest.set_node(pos, {name = basename .. "_off"})
|
||||||
@ -46,7 +45,6 @@ end
|
|||||||
-- sounds: sound table
|
-- sounds: sound table
|
||||||
|
|
||||||
function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe, groups, sounds)
|
function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe, groups, sounds)
|
||||||
local groups_off, groups_on
|
|
||||||
if not groups then
|
if not groups then
|
||||||
groups = {}
|
groups = {}
|
||||||
end
|
end
|
||||||
|
@ -59,7 +59,7 @@ minetest.register_node("mesecons_random:ghoststone_active", {
|
|||||||
}},
|
}},
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
-- remove shadow
|
-- remove shadow
|
||||||
shadowpos = vector.add(pos, vector.new(0, 1, 0))
|
local shadowpos = vector.add(pos, vector.new(0, 1, 0))
|
||||||
if (minetest.get_node(shadowpos).name == "air") then
|
if (minetest.get_node(shadowpos).name == "air") then
|
||||||
minetest.dig_node(shadowpos)
|
minetest.dig_node(shadowpos)
|
||||||
end
|
end
|
||||||
|
@ -47,7 +47,7 @@ mesecon.register_node("mesecons_receiver:receiver", {
|
|||||||
walkable = false,
|
walkable = false,
|
||||||
on_rotate = false,
|
on_rotate = false,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 }
|
fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 }
|
||||||
},
|
},
|
||||||
node_box = {
|
node_box = {
|
||||||
@ -96,7 +96,7 @@ mesecon.register_node("mesecons_receiver:receiver_up", {
|
|||||||
walkable = false,
|
walkable = false,
|
||||||
on_rotate = false,
|
on_rotate = false,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = up_rcvboxes
|
fixed = up_rcvboxes
|
||||||
},
|
},
|
||||||
node_box = {
|
node_box = {
|
||||||
@ -141,7 +141,7 @@ mesecon.register_node("mesecons_receiver:receiver_down", {
|
|||||||
walkable = false,
|
walkable = false,
|
||||||
on_rotate = false,
|
on_rotate = false,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = down_rcvboxes
|
fixed = down_rcvboxes
|
||||||
},
|
},
|
||||||
node_box = {
|
node_box = {
|
||||||
|
@ -8,7 +8,7 @@ minetest.register_node("mesecons_stickyblocks:sticky_block_all", {
|
|||||||
tiles = {"mesecons_stickyblocks_sticky.png"},
|
tiles = {"mesecons_stickyblocks_sticky.png"},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {choppy=3, oddly_breakable_by_hand=2},
|
groups = {choppy=3, oddly_breakable_by_hand=2},
|
||||||
mvps_sticky = function (pos, node)
|
mvps_sticky = function (pos)
|
||||||
local connected = {}
|
local connected = {}
|
||||||
for _, r in ipairs(mesecon.rules.alldirs) do
|
for _, r in ipairs(mesecon.rules.alldirs) do
|
||||||
table.insert(connected, vector.add(pos, r))
|
table.insert(connected, vector.add(pos, r))
|
||||||
|
@ -14,7 +14,7 @@ local wire_getconnect = function (from_pos, self_pos)
|
|||||||
if minetest.registered_nodes[node.name]
|
if minetest.registered_nodes[node.name]
|
||||||
and minetest.registered_nodes[node.name].mesecons then
|
and minetest.registered_nodes[node.name].mesecons then
|
||||||
-- rules of node to possibly connect to
|
-- rules of node to possibly connect to
|
||||||
local rules = {}
|
local rules
|
||||||
if (minetest.registered_nodes[node.name].mesecon_wire) then
|
if (minetest.registered_nodes[node.name].mesecon_wire) then
|
||||||
rules = mesecon.rules.default
|
rules = mesecon.rules.default
|
||||||
else
|
else
|
||||||
@ -73,7 +73,7 @@ local update_on_place_dig = function (pos, node)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Update nodes around it
|
-- Update nodes around it
|
||||||
local rules = {}
|
local rules
|
||||||
if minetest.registered_nodes[node.name]
|
if minetest.registered_nodes[node.name]
|
||||||
and minetest.registered_nodes[node.name].mesecon_wire then
|
and minetest.registered_nodes[node.name].mesecon_wire then
|
||||||
rules = mesecon.rules.default
|
rules = mesecon.rules.default
|
||||||
|
Loading…
Reference in New Issue
Block a user