Version MFF.
1
.gitignore
vendored
@ -1 +0,0 @@
|
||||
*~
|
0
LICENSE.txt
Normal file → Executable file
0
mesecons/actionqueue.lua
Normal file → Executable file
0
mesecons/depends.txt
Normal file → Executable file
2
mesecons/init.lua
Normal file → Executable file
@ -126,7 +126,7 @@ function mesecon.receptor_off(pos, rules)
|
||||
end
|
||||
|
||||
|
||||
print("[OK] Mesecons")
|
||||
minetest.log("action", "[OK] Mesecons")
|
||||
|
||||
-- Deprecated stuff
|
||||
-- To be removed in future releases
|
||||
|
0
mesecons/internal.lua
Normal file → Executable file
0
mesecons/legacy.lua
Normal file → Executable file
4
mesecons/oldwires.lua
Normal file → Executable file
@ -10,7 +10,7 @@ minetest.register_node("mesecons:mesecon_off", {
|
||||
type = "fixed",
|
||||
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=2, mesecon=1, mesecon_conductor_craftable=1}, --MFF
|
||||
description="Mesecons",
|
||||
mesecons = {conductor={
|
||||
state = mesecon.state.off,
|
||||
@ -28,7 +28,7 @@ minetest.register_node("mesecons:mesecon_on", {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -0.45, 0.5},
|
||||
},
|
||||
groups = {dig_immediate=3, not_in_creaive_inventory=1, mesecon=1},
|
||||
groups = {dig_immediate=2, not_in_creaive_inventory=1, mesecon=1}, --MFF
|
||||
drop = "mesecons:mesecon_off 1",
|
||||
light_source = default.LIGHT_MAX-11,
|
||||
mesecons = {conductor={
|
||||
|
0
mesecons/presets.lua
Normal file → Executable file
0
mesecons/services.lua
Normal file → Executable file
30
mesecons/settings.lua
Normal file → Executable file
@ -1,15 +1,15 @@
|
||||
-- SETTINGS
|
||||
function mesecon.setting(setting, default)
|
||||
if type(default) == "boolean" then
|
||||
local read = minetest.setting_getbool("mesecon."..setting)
|
||||
if read == nil then
|
||||
return default
|
||||
else
|
||||
return read
|
||||
end
|
||||
elseif type(default) == "string" then
|
||||
return minetest.setting_get("mesecon."..setting) or default
|
||||
elseif type(default) == "number" then
|
||||
return tonumber(minetest.setting_get("mesecon."..setting) or default)
|
||||
end
|
||||
end
|
||||
-- SETTINGS
|
||||
function mesecon.setting(setting, default)
|
||||
if type(default) == "boolean" then
|
||||
local read = minetest.setting_getbool("mesecon."..setting)
|
||||
if read == nil then
|
||||
return default
|
||||
else
|
||||
return read
|
||||
end
|
||||
elseif type(default) == "string" then
|
||||
return minetest.setting_get("mesecon."..setting) or default
|
||||
elseif type(default) == "number" then
|
||||
return tonumber(minetest.setting_get("mesecon."..setting) or default)
|
||||
end
|
||||
end
|
||||
|
BIN
mesecons/textures/mesecons_wire_inv.png
Normal file → Executable file
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 186 B |
BIN
mesecons/textures/mesecons_wire_off.png
Normal file → Executable file
Before Width: | Height: | Size: 465 B After Width: | Height: | Size: 378 B |
BIN
mesecons/textures/mesecons_wire_on.png
Normal file → Executable file
Before Width: | Height: | Size: 464 B After Width: | Height: | Size: 366 B |
0
mesecons/util.lua
Normal file → Executable file
6
mesecons/wires.lua
Normal file → Executable file
@ -197,9 +197,9 @@ register_wires = function()
|
||||
offstate = "mesecons:wire_"..nodeid.."_off"
|
||||
}}
|
||||
|
||||
local groups_on = {dig_immediate = 3, mesecon_conductor_craftable = 1,
|
||||
not_in_creative_inventory = 1}
|
||||
local groups_off = {dig_immediate = 3, mesecon_conductor_craftable = 1}
|
||||
local groups_on = {dig_immediate = 2, mesecon_conductor_craftable = 1,
|
||||
not_in_creative_inventory = 1} --MFF
|
||||
local groups_off = {dig_immediate = 2, mesecon_conductor_craftable = 1} --MFF
|
||||
if nodeid ~= "00000000" then
|
||||
groups_off["not_in_creative_inventory"] = 1
|
||||
end
|
||||
|
0
mesecons_alias/depends.txt
Normal file → Executable file
0
mesecons_alias/init.lua
Normal file → Executable file
0
mesecons_blinkyplant/depends.txt
Normal file → Executable file
24
mesecons_blinkyplant/init.lua
Normal file → Executable file
@ -10,11 +10,25 @@ local toggle_timer = function (pos)
|
||||
end
|
||||
|
||||
local on_timer = function (pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if(mesecon.flipstate(pos, node) == "on") then
|
||||
mesecon.receptor_on(pos)
|
||||
else
|
||||
mesecon.receptor_off(pos)
|
||||
-- DO NOT TOUCH OR.. THREATS! Thanks, MFF
|
||||
local activate = false
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local p = player:getpos()
|
||||
local dist = ((p.x-pos.x)^2 + (p.y-pos.y)^2 + (p.z-pos.z)^2)^0.5
|
||||
if dist < 40 then
|
||||
activate = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if activate then
|
||||
local node = minetest.get_node(pos)
|
||||
if(mesecon.flipstate(pos, node) == "on") then
|
||||
mesecon.receptor_on(pos)
|
||||
else
|
||||
mesecon.receptor_off(pos)
|
||||
end
|
||||
-- Our modification stops there, thank you, @crabman77
|
||||
end
|
||||
toggle_timer(pos)
|
||||
end
|
||||
|
BIN
mesecons_blinkyplant/textures/jeija_blinky_plant_off.png
Normal file → Executable file
Before Width: | Height: | Size: 454 B After Width: | Height: | Size: 370 B |
BIN
mesecons_blinkyplant/textures/jeija_blinky_plant_on.png
Normal file → Executable file
Before Width: | Height: | Size: 463 B After Width: | Height: | Size: 395 B |
0
mesecons_button/depends.txt
Normal file → Executable file
0
mesecons_button/init.lua
Normal file → Executable file
0
mesecons_button/sounds/mesecons_button_pop.ogg
Normal file → Executable file
0
mesecons_button/sounds/mesecons_button_push.ogg
Normal file → Executable file
0
mesecons_button/textures/jeija_wall_button_off.png
Normal file → Executable file
Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 411 B |
0
mesecons_button/textures/jeija_wall_button_on.png
Normal file → Executable file
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 449 B |
BIN
mesecons_button/textures/jeija_wall_button_sides.png
Normal file → Executable file
Before Width: | Height: | Size: 434 B After Width: | Height: | Size: 220 B |
0
mesecons_commandblock/depends.txt
Normal file → Executable file
416
mesecons_commandblock/init.lua
Normal file → Executable file
@ -1,208 +1,208 @@
|
||||
minetest.register_chatcommand("say", {
|
||||
params = "<text>",
|
||||
description = "Say <text> as the server",
|
||||
privs = {server=true},
|
||||
func = function(name, param)
|
||||
minetest.chat_send_all(name .. ": " .. param)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("tell", {
|
||||
params = "<name> <text>",
|
||||
description = "Say <text> to <name> privately",
|
||||
func = function(name, param)
|
||||
local found, _, target, message = param:find("^([^%s]+)%s+(.*)$")
|
||||
if found == nil then
|
||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||
return
|
||||
end
|
||||
if not minetest.get_player_by_name(target) then
|
||||
minetest.chat_send_player(name, "Invalid target: " .. target)
|
||||
end
|
||||
minetest.chat_send_player(target, name .. " whispers: " .. message, false)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("hp", {
|
||||
params = "<name> <value>",
|
||||
description = "Set health of <name> to <value> hitpoints",
|
||||
privs = {ban=true},
|
||||
func = function(name, param)
|
||||
local found, _, target, value = param:find("^([^%s]+)%s+(%d+)$")
|
||||
if found == nil then
|
||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||
return
|
||||
end
|
||||
local player = minetest.get_player_by_name(target)
|
||||
if player then
|
||||
player:set_hp(value)
|
||||
else
|
||||
minetest.chat_send_player(name, "Invalid target: " .. target)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local function initialize_data(meta)
|
||||
local commands = minetest.formspec_escape(meta:get_string("commands"))
|
||||
meta:set_string("formspec",
|
||||
"invsize[9,5;]" ..
|
||||
"textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" ..
|
||||
"label[1,3.8;@nearest, @farthest, and @random are replaced by the respective player names]" ..
|
||||
"button_exit[3.3,4.5;2,1;submit;Submit]")
|
||||
local owner = meta:get_string("owner")
|
||||
if owner == "" then
|
||||
owner = "not owned"
|
||||
else
|
||||
owner = "owned by " .. owner
|
||||
end
|
||||
meta:set_string("infotext", "Command Block\n" ..
|
||||
"(" .. owner .. ")\n" ..
|
||||
"Commands: "..commands)
|
||||
end
|
||||
|
||||
local function construct(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_string("commands", "tell @nearest Commandblock unconfigured")
|
||||
|
||||
meta:set_string("owner", "")
|
||||
|
||||
initialize_data(meta)
|
||||
end
|
||||
|
||||
local function after_place(pos, placer)
|
||||
if placer then
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name())
|
||||
initialize_data(meta)
|
||||
end
|
||||
end
|
||||
|
||||
local function receive_fields(pos, formname, fields, sender)
|
||||
if not fields.submit then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
if owner ~= "" and sender:get_player_name() ~= owner then
|
||||
return
|
||||
end
|
||||
meta:set_string("commands", fields.commands)
|
||||
|
||||
initialize_data(meta)
|
||||
end
|
||||
|
||||
local function resolve_commands(commands, pos)
|
||||
local players = minetest.get_connected_players()
|
||||
|
||||
-- No players online: remove all commands containing
|
||||
-- @nearest, @farthest and @random
|
||||
if #players == 0 then
|
||||
commands = commands:gsub("[^\r\n]+", function (line)
|
||||
if line:find("@nearest") then return "" end
|
||||
if line:find("@farthest") then return "" end
|
||||
if line:find("@random") then return "" end
|
||||
return line
|
||||
end)
|
||||
return commands
|
||||
end
|
||||
|
||||
local nearest, farthest = nil, nil
|
||||
local min_distance, max_distance = math.huge, -1
|
||||
for index, player in pairs(players) do
|
||||
local distance = vector.distance(pos, player:getpos())
|
||||
if distance < min_distance then
|
||||
min_distance = distance
|
||||
nearest = player:get_player_name()
|
||||
end
|
||||
if distance > max_distance then
|
||||
max_distance = distance
|
||||
farthest = player:get_player_name()
|
||||
end
|
||||
end
|
||||
local random = players[math.random(#players)]:get_player_name()
|
||||
commands = commands:gsub("@nearest", nearest)
|
||||
commands = commands:gsub("@farthest", farthest)
|
||||
commands = commands:gsub("@random", random)
|
||||
return commands
|
||||
end
|
||||
|
||||
local function commandblock_action_on(pos, node)
|
||||
if node.name ~= "mesecons_commandblock:commandblock_off" then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"})
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
if owner == "" then
|
||||
return
|
||||
end
|
||||
|
||||
local commands = resolve_commands(meta:get_string("commands"), pos)
|
||||
for _, command in pairs(commands:split("\n")) do
|
||||
local pos = command:find(" ")
|
||||
local cmd, param = command, ""
|
||||
if pos then
|
||||
cmd = command:sub(1, pos - 1)
|
||||
param = command:sub(pos + 1)
|
||||
end
|
||||
local cmddef = minetest.chatcommands[cmd]
|
||||
if not cmddef then
|
||||
minetest.chat_send_player(owner, "The command "..cmd.." does not exist")
|
||||
return
|
||||
end
|
||||
local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs)
|
||||
if not has_privs then
|
||||
minetest.chat_send_player(owner, "You don't have permission "
|
||||
.."to run "..cmd
|
||||
.." (missing privileges: "
|
||||
..table.concat(missing_privs, ", ")..")")
|
||||
return
|
||||
end
|
||||
cmddef.func(owner, param)
|
||||
end
|
||||
end
|
||||
|
||||
local function commandblock_action_off(pos, node)
|
||||
if node.name == "mesecons_commandblock:commandblock_on" then
|
||||
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"})
|
||||
end
|
||||
end
|
||||
|
||||
local function can_dig(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
return owner == "" or owner == player:get_player_name()
|
||||
end
|
||||
|
||||
minetest.register_node("mesecons_commandblock:commandblock_off", {
|
||||
description = "Command Block",
|
||||
tiles = {"jeija_commandblock_off.png"},
|
||||
inventory_image = minetest.inventorycube("jeija_commandblock_off.png"),
|
||||
groups = {cracky=2, mesecon_effector_off=1},
|
||||
on_construct = construct,
|
||||
after_place_node = after_place,
|
||||
on_receive_fields = receive_fields,
|
||||
can_dig = can_dig,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
mesecons = {effector = {
|
||||
action_on = commandblock_action_on
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_commandblock:commandblock_on", {
|
||||
tiles = {"jeija_commandblock_on.png"},
|
||||
groups = {cracky=2, mesecon_effector_on=1, not_in_creative_inventory=1},
|
||||
light_source = 10,
|
||||
drop = "mesecons_commandblock:commandblock_off",
|
||||
on_construct = construct,
|
||||
after_place_node = after_place,
|
||||
on_receive_fields = receive_fields,
|
||||
can_dig = can_dig,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
mesecons = {effector = {
|
||||
action_off = commandblock_action_off
|
||||
}}
|
||||
})
|
||||
minetest.register_chatcommand("say", {
|
||||
params = "<text>",
|
||||
description = "Say <text> as the server",
|
||||
privs = {server=true},
|
||||
func = function(name, param)
|
||||
minetest.chat_send_all(name .. ": " .. param)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("tell", {
|
||||
params = "<name> <text>",
|
||||
description = "Say <text> to <name> privately",
|
||||
func = function(name, param)
|
||||
local found, _, target, message = param:find("^([^%s]+)%s+(.*)$")
|
||||
if found == nil then
|
||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||
return
|
||||
end
|
||||
if not minetest.get_player_by_name(target) then
|
||||
minetest.chat_send_player(name, "Invalid target: " .. target)
|
||||
end
|
||||
minetest.chat_send_player(target, name .. " whispers: " .. message, false)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("hp", {
|
||||
params = "<name> <value>",
|
||||
description = "Set health of <name> to <value> hitpoints",
|
||||
privs = {ban=true},
|
||||
func = function(name, param)
|
||||
local found, _, target, value = param:find("^([^%s]+)%s+(%d+)$")
|
||||
if found == nil then
|
||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||
return
|
||||
end
|
||||
local player = minetest.get_player_by_name(target)
|
||||
if player then
|
||||
player:set_hp(value)
|
||||
else
|
||||
minetest.chat_send_player(name, "Invalid target: " .. target)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local function initialize_data(meta)
|
||||
local commands = minetest.formspec_escape(meta:get_string("commands"))
|
||||
meta:set_string("formspec",
|
||||
"invsize[9,5;]" ..
|
||||
"textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" ..
|
||||
"label[1,3.8;@nearest, @farthest, and @random are replaced by the respective player names]" ..
|
||||
"button_exit[3.3,4.5;2,1;submit;Submit]")
|
||||
local owner = meta:get_string("owner")
|
||||
if owner == "" then
|
||||
owner = "not owned"
|
||||
else
|
||||
owner = "owned by " .. owner
|
||||
end
|
||||
meta:set_string("infotext", "Command Block\n" ..
|
||||
"(" .. owner .. ")\n" ..
|
||||
"Commands: "..commands)
|
||||
end
|
||||
|
||||
local function construct(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_string("commands", "tell @nearest Commandblock unconfigured")
|
||||
|
||||
meta:set_string("owner", "")
|
||||
|
||||
initialize_data(meta)
|
||||
end
|
||||
|
||||
local function after_place(pos, placer)
|
||||
if placer then
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name())
|
||||
initialize_data(meta)
|
||||
end
|
||||
end
|
||||
|
||||
local function receive_fields(pos, formname, fields, sender)
|
||||
if not fields.submit then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
if owner ~= "" and sender:get_player_name() ~= owner then
|
||||
return
|
||||
end
|
||||
meta:set_string("commands", fields.commands)
|
||||
|
||||
initialize_data(meta)
|
||||
end
|
||||
|
||||
local function resolve_commands(commands, pos)
|
||||
local players = minetest.get_connected_players()
|
||||
|
||||
-- No players online: remove all commands containing
|
||||
-- @nearest, @farthest and @random
|
||||
if #players == 0 then
|
||||
commands = commands:gsub("[^\r\n]+", function (line)
|
||||
if line:find("@nearest") then return "" end
|
||||
if line:find("@farthest") then return "" end
|
||||
if line:find("@random") then return "" end
|
||||
return line
|
||||
end)
|
||||
return commands
|
||||
end
|
||||
|
||||
local nearest, farthest = nil, nil
|
||||
local min_distance, max_distance = math.huge, -1
|
||||
for index, player in pairs(players) do
|
||||
local distance = vector.distance(pos, player:getpos())
|
||||
if distance < min_distance then
|
||||
min_distance = distance
|
||||
nearest = player:get_player_name()
|
||||
end
|
||||
if distance > max_distance then
|
||||
max_distance = distance
|
||||
farthest = player:get_player_name()
|
||||
end
|
||||
end
|
||||
local random = players[math.random(#players)]:get_player_name()
|
||||
commands = commands:gsub("@nearest", nearest)
|
||||
commands = commands:gsub("@farthest", farthest)
|
||||
commands = commands:gsub("@random", random)
|
||||
return commands
|
||||
end
|
||||
|
||||
local function commandblock_action_on(pos, node)
|
||||
if node.name ~= "mesecons_commandblock:commandblock_off" then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"})
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
if owner == "" then
|
||||
return
|
||||
end
|
||||
|
||||
local commands = resolve_commands(meta:get_string("commands"), pos)
|
||||
for _, command in pairs(commands:split("\n")) do
|
||||
local pos = command:find(" ")
|
||||
local cmd, param = command, ""
|
||||
if pos then
|
||||
cmd = command:sub(1, pos - 1)
|
||||
param = command:sub(pos + 1)
|
||||
end
|
||||
local cmddef = minetest.chatcommands[cmd]
|
||||
if not cmddef then
|
||||
minetest.chat_send_player(owner, "The command "..cmd.." does not exist")
|
||||
return
|
||||
end
|
||||
local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs)
|
||||
if not has_privs then
|
||||
minetest.chat_send_player(owner, "You don't have permission "
|
||||
.."to run "..cmd
|
||||
.." (missing privileges: "
|
||||
..table.concat(missing_privs, ", ")..")")
|
||||
return
|
||||
end
|
||||
cmddef.func(owner, param)
|
||||
end
|
||||
end
|
||||
|
||||
local function commandblock_action_off(pos, node)
|
||||
if node.name == "mesecons_commandblock:commandblock_on" then
|
||||
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"})
|
||||
end
|
||||
end
|
||||
|
||||
local function can_dig(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string("owner")
|
||||
return owner == "" or owner == player:get_player_name()
|
||||
end
|
||||
|
||||
minetest.register_node("mesecons_commandblock:commandblock_off", {
|
||||
description = "Command Block",
|
||||
tiles = {"jeija_commandblock_off.png"},
|
||||
inventory_image = minetest.inventorycube("jeija_commandblock_off.png"),
|
||||
groups = {cracky=2, mesecon_effector_off=1},
|
||||
on_construct = construct,
|
||||
after_place_node = after_place,
|
||||
on_receive_fields = receive_fields,
|
||||
can_dig = can_dig,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
mesecons = {effector = {
|
||||
action_on = commandblock_action_on
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_commandblock:commandblock_on", {
|
||||
tiles = {"jeija_commandblock_on.png"},
|
||||
groups = {cracky=2, mesecon_effector_on=1, not_in_creative_inventory=1},
|
||||
light_source = 10,
|
||||
drop = "mesecons_commandblock:commandblock_off",
|
||||
on_construct = construct,
|
||||
after_place_node = after_place,
|
||||
on_receive_fields = receive_fields,
|
||||
can_dig = can_dig,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
mesecons = {effector = {
|
||||
action_off = commandblock_action_off
|
||||
}}
|
||||
})
|
||||
|
BIN
mesecons_commandblock/textures/jeija_close_window.png
Normal file → Executable file
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 191 B |
BIN
mesecons_commandblock/textures/jeija_commandblock_off.png
Normal file → Executable file
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 183 B |
BIN
mesecons_commandblock/textures/jeija_commandblock_on.png
Normal file → Executable file
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 183 B |
0
mesecons_delayer/depends.txt
Normal file → Executable file
0
mesecons_delayer/init.lua
Normal file → Executable file
BIN
mesecons_delayer/textures/mesecons_delayer_bottom.png
Normal file → Executable file
Before Width: | Height: | Size: 438 B After Width: | Height: | Size: 261 B |
BIN
mesecons_delayer/textures/mesecons_delayer_ends_off.png
Normal file → Executable file
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 204 B |
BIN
mesecons_delayer/textures/mesecons_delayer_ends_on.png
Normal file → Executable file
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 204 B |
BIN
mesecons_delayer/textures/mesecons_delayer_off_1.png
Normal file → Executable file
Before Width: | Height: | Size: 562 B After Width: | Height: | Size: 448 B |
BIN
mesecons_delayer/textures/mesecons_delayer_off_2.png
Normal file → Executable file
Before Width: | Height: | Size: 558 B After Width: | Height: | Size: 449 B |
BIN
mesecons_delayer/textures/mesecons_delayer_off_3.png
Normal file → Executable file
Before Width: | Height: | Size: 561 B After Width: | Height: | Size: 448 B |
BIN
mesecons_delayer/textures/mesecons_delayer_off_4.png
Normal file → Executable file
Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 446 B |
BIN
mesecons_delayer/textures/mesecons_delayer_on_1.png
Normal file → Executable file
Before Width: | Height: | Size: 635 B After Width: | Height: | Size: 544 B |
BIN
mesecons_delayer/textures/mesecons_delayer_on_2.png
Normal file → Executable file
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 544 B |
BIN
mesecons_delayer/textures/mesecons_delayer_on_3.png
Normal file → Executable file
Before Width: | Height: | Size: 635 B After Width: | Height: | Size: 544 B |
BIN
mesecons_delayer/textures/mesecons_delayer_on_4.png
Normal file → Executable file
Before Width: | Height: | Size: 630 B After Width: | Height: | Size: 539 B |
BIN
mesecons_delayer/textures/mesecons_delayer_sides_off.png
Normal file → Executable file
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 204 B |
BIN
mesecons_delayer/textures/mesecons_delayer_sides_on.png
Normal file → Executable file
Before Width: | Height: | Size: 234 B After Width: | Height: | Size: 204 B |
0
mesecons_detector/depends.txt
Normal file → Executable file
48
mesecons_detector/init.lua
Normal file → Executable file
@ -4,10 +4,12 @@ local GET_COMMAND = "GET"
|
||||
-- Detects players in a certain radius
|
||||
-- The radius can be specified in mesecons/settings.lua
|
||||
|
||||
local function object_detector_make_formspec(pos)
|
||||
minetest.get_meta(pos):set_string("formspec", "size[9,2.5]" ..
|
||||
"field[0.3, 0;9,2;scanname;Name of player to scan for (empty for any):;${scanname}]"..
|
||||
"field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
|
||||
-- The following file was modified to detect multiple players
|
||||
local object_detector_make_formspec = function (pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", "size[9,2.5]" ..
|
||||
"field[0.3, 0;12,2;scanname;Name of player(s) to scan for (empty for any, separate with comma):;${scanname}]"..
|
||||
"field[0.3,1.5;4 ,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
|
||||
"button_exit[7,0.75;2,3;;Save]")
|
||||
end
|
||||
|
||||
@ -23,34 +25,36 @@ end
|
||||
-- returns true if player was found, false if not
|
||||
local function object_detector_scan(pos)
|
||||
local objs = minetest.get_objects_inside_radius(pos, mesecon.setting("detector_radius", 6))
|
||||
|
||||
-- abort if no scan results were found
|
||||
if next(objs) == nil then return false end
|
||||
|
||||
local scanname = minetest.get_meta(pos):get_string("scanname")
|
||||
local every_player = scanname == ""
|
||||
for _, obj in pairs(objs) do
|
||||
-- "" is returned if it is not a player; "" ~= nil; so only handle objects with foundname ~= ""
|
||||
local foundname = obj:get_player_name()
|
||||
|
||||
if foundname ~= "" then
|
||||
-- return true if scanning for any player or if specific playername was detected
|
||||
if scanname == "" or foundname == scanname then
|
||||
return true
|
||||
for k, obj in pairs(objs) do
|
||||
local isname = obj:get_player_name() -- "" is returned if it is not a player; "" ~= nil!
|
||||
local scanname = minetest.get_meta(pos):get_string("scanname"):gsub(' ', "")
|
||||
if (scanname == "" and isname ~= "") then
|
||||
minetest.get_meta(pos):set_string("scanedname", "")
|
||||
return true
|
||||
end
|
||||
local founds = {}
|
||||
for _, name in pairs(scanname:split(',')) do
|
||||
if (isname == name and isname ~= "") then
|
||||
table.insert(founds, isname)
|
||||
end
|
||||
end
|
||||
if #founds > 0 then
|
||||
minetest.get_meta(pos):set_string("scannedname", table.concat(founds, ','))
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
minetest.get_meta(pos):set_string("scanedname", "")
|
||||
return false
|
||||
end
|
||||
|
||||
-- set player name when receiving a digiline signal on a specific channel
|
||||
local object_detector_digiline = {
|
||||
effector = {
|
||||
action = function(pos, node, channel, msg)
|
||||
action = function (pos, node, channel, msg)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if channel == meta:get_string("digiline_channel") then
|
||||
meta:set_string("scanname", msg)
|
||||
local active_channel = meta:get_string("digiline_channel")
|
||||
if channel == active_channel then
|
||||
meta:set_string("scanedname", msg)
|
||||
object_detector_make_formspec(pos)
|
||||
end
|
||||
end,
|
||||
|
BIN
mesecons_detector/textures/jeija_node_detector_off.png
Normal file → Executable file
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 680 B |
0
mesecons_detector/textures/jeija_node_detector_on.png
Normal file → Executable file
Before Width: | Height: | Size: 727 B After Width: | Height: | Size: 727 B |
BIN
mesecons_detector/textures/jeija_object_detector_off.png
Normal file → Executable file
Before Width: | Height: | Size: 712 B After Width: | Height: | Size: 655 B |
BIN
mesecons_detector/textures/jeija_object_detector_on.png
Normal file → Executable file
Before Width: | Height: | Size: 735 B After Width: | Height: | Size: 733 B |
0
mesecons_doors/depends.txt
Normal file → Executable file
13
mesecons_doors/init.lua
Normal file → Executable file
@ -74,6 +74,19 @@ meseconify_door("doors:door_steel")
|
||||
meseconify_door("doors:door_glass")
|
||||
meseconify_door("doors:door_obsidian_glass")
|
||||
|
||||
--MFF meseconify all doors, crabman 12/06/2016
|
||||
meseconify_door("doors:door_cherry")
|
||||
meseconify_door("doors:door_tin")
|
||||
meseconify_door("doors:door_prison")
|
||||
meseconify_door("doors:door_gardengate_white")
|
||||
meseconify_door("doors:door3_wood")
|
||||
meseconify_door("doors:door3_steel")
|
||||
meseconify_door("doors:door3_glass")
|
||||
meseconify_door("doors:door3_obsidian_glass")
|
||||
meseconify_door("doors:door3_cherry")
|
||||
meseconify_door("doors:door3_prison")
|
||||
|
||||
|
||||
-- Trapdoor
|
||||
local function trapdoor_switch(pos, node)
|
||||
local state = minetest.get_meta(pos):get_int("state")
|
||||
|
4
mesecons_extrawires/corner.lua
Normal file → Executable file
@ -37,7 +37,7 @@ minetest.register_node("mesecons_extrawires:corner_on", {
|
||||
sunlight_propagates = true,
|
||||
selection_box = corner_selectionbox,
|
||||
node_box = corner_nodebox,
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 2, not_in_creative_inventory = 1}, -- MFF
|
||||
drop = "mesecons_extrawires:corner_off",
|
||||
mesecons = {conductor =
|
||||
{
|
||||
@ -64,7 +64,7 @@ minetest.register_node("mesecons_extrawires:corner_off", {
|
||||
sunlight_propagates = true,
|
||||
selection_box = corner_selectionbox,
|
||||
node_box = corner_nodebox,
|
||||
groups = {dig_immediate = 3},
|
||||
groups = {dig_immediate = 2}, --MFF
|
||||
mesecons = {conductor =
|
||||
{
|
||||
state = mesecon.state.off,
|
||||
|
4
mesecons_extrawires/crossover.lua
Normal file → Executable file
@ -41,7 +41,7 @@ minetest.register_node("mesecons_extrawires:crossover_off", {
|
||||
{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
|
||||
},
|
||||
},
|
||||
groups = {dig_immediate=3, mesecon=3},
|
||||
groups = {dig_immediate=2, mesecon=3}, --MFF
|
||||
mesecons = {
|
||||
conductor = {
|
||||
states = crossover_states,
|
||||
@ -77,7 +77,7 @@ minetest.register_node("mesecons_extrawires:crossover_01", {
|
||||
{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
|
||||
},
|
||||
},
|
||||
groups = {dig_immediate=3, mesecon=3, not_in_creative_inventory=1},
|
||||
groups = {dig_immediate=2, mesecon=3, not_in_creative_inventory=1}, --MFF
|
||||
mesecons = {
|
||||
conductor = {
|
||||
states = crossover_states,
|
||||
|
0
mesecons_extrawires/depends.txt
Normal file → Executable file
0
mesecons_extrawires/init.lua
Normal file → Executable file
0
mesecons_extrawires/mesewire.lua
Normal file → Executable file
4
mesecons_extrawires/tjunction.lua
Normal file → Executable file
@ -38,7 +38,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
|
||||
sunlight_propagates = true,
|
||||
selection_box = tjunction_selectionbox,
|
||||
node_box = tjunction_nodebox,
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 2, not_in_creative_inventory = 1}, --MFF
|
||||
drop = "mesecons_extrawires:tjunction_off",
|
||||
mesecons = {conductor =
|
||||
{
|
||||
@ -65,7 +65,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
|
||||
sunlight_propagates = true,
|
||||
selection_box = tjunction_selectionbox,
|
||||
node_box = tjunction_nodebox,
|
||||
groups = {dig_immediate = 3},
|
||||
groups = {dig_immediate = 2}, --MFF
|
||||
mesecons = {conductor =
|
||||
{
|
||||
state = mesecon.state.off,
|
||||
|
8
mesecons_extrawires/vertical.lua
Normal file → Executable file
@ -90,7 +90,7 @@ mesecon.register_node("mesecons_extrawires:vertical", {
|
||||
after_dig_node = vertical_update
|
||||
},{
|
||||
tiles = {"mesecons_wire_off.png"},
|
||||
groups = {dig_immediate=3},
|
||||
groups = {dig_immediate=2}, --MFF
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.off,
|
||||
onstate = "mesecons_extrawires:vertical_on",
|
||||
@ -98,7 +98,7 @@ mesecon.register_node("mesecons_extrawires:vertical", {
|
||||
}}
|
||||
},{
|
||||
tiles = {"mesecons_wire_on.png"},
|
||||
groups = {dig_immediate=3, not_in_creative_inventory=1},
|
||||
groups = {dig_immediate=2, not_in_creative_inventory=1}, --MFF
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.on,
|
||||
offstate = "mesecons_extrawires:vertical_off",
|
||||
@ -113,7 +113,7 @@ mesecon.register_node("mesecons_extrawires:vertical_top", {
|
||||
walkable = false,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
groups = {dig_immediate=3, not_in_creative_inventory=1},
|
||||
groups = {dig_immediate=2, not_in_creative_inventory=1}, --MFF
|
||||
selection_box = top_box,
|
||||
node_box = top_box,
|
||||
is_vertical_conductor = true,
|
||||
@ -143,7 +143,7 @@ mesecon.register_node("mesecons_extrawires:vertical_bottom", {
|
||||
walkable = false,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 2, not_in_creative_inventory = 1}, --MFF
|
||||
selection_box = bottom_box,
|
||||
node_box = bottom_box,
|
||||
is_vertical_conductor = true,
|
||||
|
0
mesecons_gates/depends.txt
Normal file → Executable file
0
mesecons_gates/init.lua
Normal file → Executable file
BIN
mesecons_gates/textures/jeija_gate_and.png
Normal file → Executable file
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 129 B |
BIN
mesecons_gates/textures/jeija_gate_diode.png
Normal file → Executable file
Before Width: | Height: | Size: 231 B After Width: | Height: | Size: 134 B |
BIN
mesecons_gates/textures/jeija_gate_nand.png
Normal file → Executable file
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 133 B |
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 127 B |
BIN
mesecons_gates/textures/jeija_gate_not.png
Normal file → Executable file
Before Width: | Height: | Size: 241 B After Width: | Height: | Size: 133 B |
BIN
mesecons_gates/textures/jeija_gate_off.png
Normal file → Executable file
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 105 B |
BIN
mesecons_gates/textures/jeija_gate_on.png
Normal file → Executable file
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 109 B |
Before Width: | Height: | Size: 243 B After Width: | Height: | Size: 127 B |
BIN
mesecons_gates/textures/jeija_gate_xor.png
Normal file → Executable file
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 136 B |
0
mesecons_hydroturbine/depends.txt
Normal file → Executable file
4
mesecons_hydroturbine/init.lua
Normal file → Executable file
@ -59,7 +59,7 @@ nodenames = {"mesecons_hydroturbine:hydro_turbine_off"},
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local waterpos={x=pos.x, y=pos.y+1, z=pos.z}
|
||||
if minetest.get_node(waterpos).name=="default:water_flowing" then
|
||||
if minetest.get_node(waterpos).name=="default:water_flowing" or minetest.get_node(waterpos).name == "default:river_water_flowing" then
|
||||
minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_on"})
|
||||
nodeupdate(pos)
|
||||
mesecon.receptor_on(pos)
|
||||
@ -73,7 +73,7 @@ nodenames = {"mesecons_hydroturbine:hydro_turbine_on"},
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local waterpos={x=pos.x, y=pos.y+1, z=pos.z}
|
||||
if minetest.get_node(waterpos).name~="default:water_flowing" then
|
||||
if minetest.get_node(waterpos).name~="default:water_flowing" or minetest.get_node(waterpos).name ~= "default:river_water_flowing" then
|
||||
minetest.set_node(pos, {name="mesecons_hydroturbine:hydro_turbine_off"})
|
||||
nodeupdate(pos)
|
||||
mesecon.receptor_off(pos)
|
||||
|
0
mesecons_hydroturbine/models/jeija_hydro_turbine.obj
Normal file → Executable file
BIN
mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png
Normal file → Executable file
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
BIN
mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png
Normal file → Executable file
Before Width: | Height: | Size: 782 B After Width: | Height: | Size: 776 B |
BIN
mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png
Normal file → Executable file
Before Width: | Height: | Size: 758 B After Width: | Height: | Size: 754 B |
0
mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png
Normal file → Executable file
Before Width: | Height: | Size: 564 B After Width: | Height: | Size: 564 B |
BIN
mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc.png
Normal file → Executable file
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 729 B |
0
mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom.png
Normal file → Executable file
Before Width: | Height: | Size: 496 B After Width: | Height: | Size: 496 B |
0
mesecons_insulated/depends.txt
Normal file → Executable file
4
mesecons_insulated/init.lua
Normal file → Executable file
@ -30,7 +30,7 @@ minetest.register_node("mesecons_insulated:insulated_on", {
|
||||
type = "fixed",
|
||||
fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }
|
||||
},
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 2, not_in_creative_inventory = 1}, --MFF
|
||||
drop = "mesecons_insulated:insulated_off",
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.on,
|
||||
@ -62,7 +62,7 @@ minetest.register_node("mesecons_insulated:insulated_off", {
|
||||
type = "fixed",
|
||||
fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }
|
||||
},
|
||||
groups = {dig_immediate = 3},
|
||||
groups = {dig_immediate = 2}, --MFF
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.off,
|
||||
onstate = "mesecons_insulated:insulated_on",
|
||||
|
BIN
mesecons_insulated/textures/jeija_insulated_wire_crossing_tb_01.png
Normal file → Executable file
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 169 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_crossing_tb_10.png
Normal file → Executable file
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 169 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_crossing_tb_off.png
Normal file → Executable file
Before Width: | Height: | Size: 293 B After Width: | Height: | Size: 156 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_crossing_tb_on.png
Normal file → Executable file
Before Width: | Height: | Size: 209 B After Width: | Height: | Size: 156 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png
Normal file → Executable file
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 136 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png
Normal file → Executable file
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 136 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_ends_01x.png
Normal file → Executable file
Before Width: | Height: | Size: 246 B After Width: | Height: | Size: 173 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_ends_01z.png
Normal file → Executable file
Before Width: | Height: | Size: 252 B After Width: | Height: | Size: 157 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_ends_10x.png
Normal file → Executable file
Before Width: | Height: | Size: 238 B After Width: | Height: | Size: 161 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_ends_10z.png
Normal file → Executable file
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 161 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_ends_off.png
Normal file → Executable file
Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 109 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_ends_on.png
Normal file → Executable file
Before Width: | Height: | Size: 126 B After Width: | Height: | Size: 109 B |
BIN
mesecons_insulated/textures/jeija_insulated_wire_sides_off.png
Normal file → Executable file
Before Width: | Height: | Size: 200 B After Width: | Height: | Size: 100 B |