Compare commits

...

10 Commits

Author SHA1 Message Date
Maksym H.
1f9e86c3da
Make the detector recipe from luacontroller optional (#696)
Some checks failed
Check / Luacheck (push) Has been cancelled
Check / Mineunit tests (push) Has been cancelled
Test / Smoke Test ghcr.io/minetest/minetest:5.10.0 (push) Has been cancelled
Test / Smoke Test registry.gitlab.com/minetest/minetest/server:5.0.1 (push) Has been cancelled
2025-01-02 10:19:16 +01:00
Maksym H.
dd073d2e83
Add missing use_texture_alpha (#697) 2024-12-28 15:23:18 +01:00
luk3yx
320ec93544
Limit chatcommand parameter length in command blocks (#695) 2024-12-22 19:08:44 +01:00
randomei
8051129f82
Russian translation, gates localization (#692) 2024-12-19 22:03:34 +01:00
sfan5
5883a0ce65 Change test workflow to Luanti 5.10 2024-12-10 15:17:58 +01:00
Darin
d547f5fe43
Added sha256 function to lua controller (#690) 2024-12-07 15:53:20 +01:00
SmallJoker
5c82089146 Detector: Ignore unexpected digiline data types 2024-12-06 18:50:44 +01:00
tour
31b56063a0
commandblock: replace deprecated formspec element "invsize" 2024-11-15 11:04:14 +01:00
mruncreative
b46c589a38
Support doors and trapdoors from mods (#683)
* Support doors and trapdoors from mods

Removed hardcoded door names and instead now use the API of the door mod to meseconify all doors and trapdoors that have been registered after the mods are finished loading.

* indentation as described by sfan5
2024-10-16 00:27:20 +02:00
sfan5
ac83dead50 mesecons_doors: Don't modify doors that are already mesecon-enabled 2024-10-08 20:30:26 +02:00
39 changed files with 247 additions and 41 deletions

View File

@ -10,7 +10,7 @@ jobs:
matrix:
cfg:
- { image: 'registry.gitlab.com/minetest/minetest/server:5.0.1', mtg: false }
- { image: 'ghcr.io/minetest/minetest:5.9.0', mtg: true }
- { image: 'ghcr.io/minetest/minetest:5.10.0', mtg: true }
steps:
- uses: actions/checkout@main

View File

@ -0,0 +1,4 @@
# textdomain: mesecons
### oldwires.lua ###
Mesecons=Мезеконы

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_blinkyplant
### init.lua ###
Blinky Plant=Мигающий цветок

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_button
### init.lua ###
Button=Кнопка

View File

@ -1,4 +1,5 @@
local S = minetest.get_translator(minetest.get_current_modname())
local param_maxlen = mesecon.setting("commandblock_param_maxlen", 10000)
minetest.register_chatcommand("say", {
params = "<text>",
@ -48,7 +49,7 @@ minetest.register_chatcommand("hp", {
local function initialize_data(meta)
local commands = minetest.formspec_escape(meta:get_string("commands"))
meta:set_string("formspec",
"invsize[9,5;]" ..
"size[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]")
@ -156,6 +157,11 @@ local function commandblock_action_on(pos, node)
minetest.chat_send_player(owner, "The command "..cmd.." does not exist")
return
end
if #param > param_maxlen then
minetest.chat_send_player(owner, "Command parameters are limited to max. " ..
param_maxlen .. " bytes.")
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 "

View File

@ -0,0 +1,7 @@
# textdomain: mesecons_commandblock
### init.lua ###
Say <text> as the server=Сказать <текст> от имени сервера
Say <text> to <name> privately=Сказать <текст> игроку <имя> в личном сообщении
Set health of <name> to <value> hitpoints=Установить здоровье игрока <имя> на <значение> хитпоинтов
Command Block=Комадный блок

View File

@ -0,0 +1,5 @@
# textdomain: mesecons_delayer
### init.lua ###
Delayer=Элемент задержки
You hacker you=Ти хакер, ти

View File

@ -66,7 +66,8 @@ local object_detector_digiline = {
effector = {
action = function(pos, _, channel, msg)
local meta = minetest.get_meta(pos)
if channel == meta:get_string("digiline_channel") then
if channel == meta:get_string("digiline_channel") and
(type(msg) == "string" or type(msg) == "number") then
meta:set_string("scanname", msg)
object_detector_make_formspec(pos)
end
@ -110,14 +111,16 @@ minetest.register_node("mesecons_detector:object_detector_on", {
on_blast = mesecon.on_blastnode,
})
minetest.register_craft({
output = 'mesecons_detector:object_detector_off',
recipe = {
{"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "mesecons_luacontroller:luacontroller0000", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"},
}
})
if minetest.get_modpath("mesecons_luacontroller") then
minetest.register_craft({
output = 'mesecons_detector:object_detector_off',
recipe = {
{"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "mesecons_luacontroller:luacontroller0000", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"},
}
})
end
minetest.register_craft({
output = 'mesecons_detector:object_detector_off',
@ -286,14 +289,16 @@ minetest.register_node("mesecons_detector:node_detector_on", {
on_blast = mesecon.on_blastnode,
})
minetest.register_craft({
output = 'mesecons_detector:node_detector_off',
recipe = {
{"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "mesecons_luacontroller:luacontroller0000", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"},
}
})
if minetest.get_modpath("mesecons_luacontroller") then
minetest.register_craft({
output = 'mesecons_detector:node_detector_off',
recipe = {
{"mesecons_gamecompat:steel_ingot", "group:mesecon_conductor_craftable", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "mesecons_luacontroller:luacontroller0000", "mesecons_gamecompat:steel_ingot"},
{"mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot", "mesecons_gamecompat:steel_ingot"},
}
})
end
minetest.register_craft({
output = 'mesecons_detector:node_detector_off',

View File

@ -0,0 +1,5 @@
# textdomain: mesecons_detector
### init.lua ###
Player Detector=Детектор игрока
Node Detector=Детектор блока

View File

@ -1,2 +1,3 @@
name = mesecons_detector
depends = mesecons, mesecons_gamecompat, mesecons_materials
optional_depends = mesecons_luacontroller

View File

@ -22,6 +22,11 @@ end
local function meseconify_door(name)
if minetest.registered_items[name .. "_b_1"] then
-- old style double-node doors
if minetest.registered_items[name .. "_b_1"].mesecons then
minetest.log("info", "[mesecons_doors] Not touching door " .. name)
return
end
local function toggle_state1 (pos)
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
end
@ -47,6 +52,10 @@ local function meseconify_door(name)
})
elseif minetest.registered_items[name .. "_a"] then
-- new style mesh node based doors
if minetest.registered_items[name .. "_a"].mesecons then
minetest.log("info", "[mesecons_doors] Not touching door " .. name)
return
end
local override = {
mesecons = {effector = {
action_on = function(pos)
@ -73,15 +82,6 @@ local function meseconify_door(name)
end
end
local doors_list = {
"doors:door_wood",
"doors:door_steel",
"doors:door_glass",
"doors:door_obsidian_glass",
"xpanes:door_steel_bar",
}
for i=1,#doors_list do meseconify_door(doors_list[i]) end
-- Trapdoor
local function trapdoor_switch(name)
return function(pos, node)
@ -131,9 +131,15 @@ local function meseconify_trapdoor(name)
end
end
local trapdoors_list = {
"doors:trapdoor",
"doors:trapdoor_steel",
"xpanes:trapdoor_steel_bar"
}
for i=1,#trapdoors_list do meseconify_trapdoor(trapdoors_list[i]) end
minetest.register_on_mods_loaded(function()
for k,_ in pairs(doors.registered_doors) do
if k:find("_a$") then
meseconify_door(k:sub(1,-3))
end
end
for k,_ in pairs(doors.registered_trapdoors) do
if not k:find("_open$") then
meseconify_trapdoor(k)
end
end
end)

View File

@ -0,0 +1,20 @@
# textdomain: mesecons_extrawires
### corner.lua ###
Insulated Mesecon Corner=Изолированный мезекон (угол)
### crossover.lua ###
Insulated Mesecon Crossover=Изолированный мезекон (перекрестие)
You hacker you!=Ти хакер ти!
### doublecorner.lua ###
Insulated Mesecon Double Corner=Изолированный мезекон (двойной угол)
### mesewire.lua ###
Mese Wire=Мезе-провод
### tjunction.lua ###
Insulated Mesecon T-junction=Изолированный мезекон (Т-соединение)
### vertical.lua ###
Vertical Mesecon=Вертикальный мезекон

View File

@ -40,6 +40,8 @@ local bottom_rules = {
{x=0, y=2, z=0} -- receive power from pressure plate / detector / ... 2 nodes above
}
local use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or nil
local function is_vertical_conductor(nodename)
local def = minetest.registered_nodes[nodename]
return def and def.is_vertical_conductor
@ -96,6 +98,7 @@ mesecon.register_node("mesecons_extrawires:vertical", {
after_place_node = vertical_update,
after_dig_node = vertical_update,
sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
},{
tiles = {"mesecons_wire_off.png"},
groups = {dig_immediate=3},
@ -130,6 +133,7 @@ mesecon.register_node("mesecons_extrawires:vertical_top", {
after_place_node = vertical_update,
after_dig_node = vertical_update,
sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
},{
tiles = {"mesecons_wire_off.png"},
mesecons = {conductor = {
@ -162,6 +166,7 @@ mesecon.register_node("mesecons_extrawires:vertical_bottom", {
after_place_node = vertical_update,
after_dig_node = vertical_update,
sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
},{
tiles = {"mesecons_wire_off.png"},
mesecons = {conductor = {

View File

@ -0,0 +1,7 @@
# textdomain: mesecons_fpga
### init.lua ###
FPGA=ПЛИС
### tool.lua ###
FPGA Programmer=ПЛИС-программер

View File

@ -1,3 +1,5 @@
local S = minetest.get_translator(minetest.get_current_modname())
local selection_box = {
type = "fixed",
fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
@ -146,38 +148,38 @@ end
register_gate("diode", 1, function (input) return input end,
{{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons_torch:mesecon_torch_on"}},
"Diode")
S("Diode"))
register_gate("not", 1, function (input) return not input end,
{{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons:mesecon"}},
"NOT Gate")
S("NOT Gate"))
register_gate("and", 2, function (val1, val2) return val1 and val2 end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons_materials:silicon", "mesecons:mesecon"},
{"mesecons:mesecon", "", ""}},
"AND Gate")
S("AND Gate"))
register_gate("nand", 2, function (val1, val2) return not (val1 and val2) end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons_materials:silicon", "mesecons_torch:mesecon_torch_on"},
{"mesecons:mesecon", "", ""}},
"NAND Gate")
S("NAND Gate"))
register_gate("xor", 2, function (val1, val2) return (val1 or val2) and not (val1 and val2) end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons_materials:silicon", "mesecons_materials:silicon"},
{"mesecons:mesecon", "", ""}},
"XOR Gate")
S("XOR Gate"))
register_gate("nor", 2, function (val1, val2) return not (val1 or val2) end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons:mesecon", "mesecons_torch:mesecon_torch_on"},
{"mesecons:mesecon", "", ""}},
"NOR Gate")
S("NOR Gate"))
register_gate("or", 2, function (val1, val2) return (val1 or val2) end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons:mesecon", "mesecons:mesecon"},
{"mesecons:mesecon", "", ""}},
"OR Gate")
S("OR Gate"))

View File

@ -0,0 +1,8 @@
# textdomain: mesecons_gates
Diode=Диод
NOT Gate=НЕ-шлюз
AND Gate=И-шлюз
NAND Gate=NAND-шлюз
XOR Gate=XOR-шлюз
NOR Gate=NOR-шлюз
OR Gate=ИЛИ-шлюз

View File

@ -0,0 +1,8 @@
# textdomain: mesecons_gates
Diode=
NOT Gate=
AND Gate=
NAND Gate=
XOR Gate=
NOR Gate=
OR Gate=

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_hydroturbine
### init.lua ###
Water Turbine=Гидротурбина

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_insulated
### init.lua ###
Straight Insulated Mesecon=Прямой изолированный мезекон

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_lamp
### init.lua ###
Mesecon Lamp=Мезеконовая лампа

View File

@ -0,0 +1,15 @@
# textdomain: mesecons_lightstone
### init.lua ###
Red Lightstone=Красный светящийся камень
Green Lightstone=Зеленый светящийся камень
Blue Lightstone=Синий светящийся камень
Grey Lightstone=Серый светящийся камень
Dark Grey Lightstone=Темно-серый светящийся камень
Yellow Lightstone=Желтый светящийся камень
Orange Lightstone=Оранжевый светящийся камень
White Lightstone=Белый светящийся камень
Pink Lightstone=Розовый светящийся камень
Magenta Lightstone=Пурпурный светящийся камень
Cyan Lightstone=Голубой светящийся камень
Violet Lightstone=Фиолетовый светящийся камень

View File

@ -509,6 +509,7 @@ local function create_environment(pos, mem, event, itbl, send_warning)
print = safe_print,
interrupt = get_interrupt(pos, itbl, send_warning),
digiline_send = get_digiline_send(pos, itbl, send_warning),
sha256sum = minetest.sha256,
string = {
byte = string.byte,
char = string.char,

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_luacontroller
### init.lua ###
Luacontroller=Lua-контроллер

View File

@ -0,0 +1,6 @@
# textdomain: mesecons_materials
### init.lua ###
Glue=Клей
Fiber=Волокно
Silicon=Кремний

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_microcontroller
### init.lua ###
Microcontroller=Микроконтроллер

View File

@ -0,0 +1,7 @@
# textdomain: mesecons_movestones
### init.lua ###
Movestone=Ходовой камень
Sticky Movestone=Липкий ходовой камень
Vertical Movestone=Вертикальный ходовой камень
Vertical Sticky Movestone=Вертикальный липкий ходовой камень

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_noteblock
### init.lua ###
Noteblock=Нотный блок

View File

@ -0,0 +1,9 @@
# textdomain: mesecons_pistons
### init.lua ###
Piston=Поршень
Activated Piston Base=Основание активированного поршня
Piston Pusher=Толкающая часть поршня
Sticky Piston=Липкий поршень
Activated Sticky Piston Base=Основание активированного липкого поршня
Sticky Piston Pusher=Толкающая часть липкого поршня

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_powerplant
### init.lua ###
Power Plant=Энергоцветок

View File

@ -0,0 +1,5 @@
# textdomain: mesecons_pressureplates
### init.lua ###
Wooden Pressure Plate=Деревянная нажимная пластина
Stone Pressure Plate=Каменная нажимная пластина

View File

@ -0,0 +1,5 @@
# textdomain: mesecons_random
### init.lua ###
Removestone=Исчезающий камень
Ghoststone=Призрачный камень

View File

@ -30,6 +30,8 @@ local receiver_get_rules = mesecon.horiz_rules_getter({
{x = 0, y = 0, z = -2},
})
local use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or nil
mesecon.register_node("mesecons_receiver:receiver", {
drawtype = "nodebox",
paramtype = "light",
@ -98,6 +100,7 @@ mesecon.register_node("mesecons_receiver:receiver_up", {
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
drop = "mesecons:wire_00000000_off",
sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
}, {
tiles = {"mesecons_wire_off.png"},
mesecons = {conductor = {
@ -143,6 +146,7 @@ mesecon.register_node("mesecons_receiver:receiver_down", {
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
drop = "mesecons:wire_00000000_off",
sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
}, {
tiles = {"mesecons_wire_off.png"},
mesecons = {conductor = {

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_solarpanel
### init.lua ###
Solar Panel=Солнечная панель

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_stickyblocks
### init.lua ###
Sticky Block=Липкий блок

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_switch
### init.lua ###
Switch=Выключатель

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_torch
### init.lua ###
Mesecon Torch=Мезе-факел

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_walllever
### init.lua ###
Lever=Рычаг

View File

@ -0,0 +1,4 @@
# textdomain: mesecons_wires
### init.lua ###
Mesecon=Мезекон

View File

@ -11,6 +11,11 @@ mesecon.cooldown_granularity (Cooldown step length) float 0.5 0.0 1.0
mesecon.blinky_plant_interval (Plant blinking interval) int 3 1 5
[mesecons_commandblock]
mesecon.commandblock_param_maxlen (Maximum command parameter length) int 10000 100 1000000
[mesecons_detector]
mesecon.detector_radius (Player detector scanning radius) int 6 3 16