18 Commity

Autor SHA1 Wiadomość Data
a9feea1b32 Merge remote-tracking branch 'upstream/master' 2025-03-20 11:47:30 +01:00
TarasArt
4bd59137a2 Add Ukrainian localization (#703) 2025-03-15 13:46:27 +01:00
blut
a0580f9f20 mesecons_gamecompat: Fix Mineclonia support
Fix node aliases
Synchronize unmovable_by_piston (node group)
Synchronize _mcl_pistons_unmovable (entity definition)
Use mcl_redstone_torch:redstoneblock (doesn't seem to interfere with the redstone functionality)
Automatic bed and door mvps stopper registration
2025-02-11 19:16:53 +01:00
blut
93751a9014 mesecons_gamecompat: Add redstone <--> mesecon wire crafting recipes 2025-02-11 19:15:38 +01:00
blut
786094ec06 mesecons_pistons: Fix impercise placement orientation
Piston placement used to be finicky and not map correctly to the viewing angle
2025-02-11 19:10:53 +01:00
blut
55359c7a0b mesecons_extrawires: Fix Mineclonia compatibility 2025-02-11 19:10:53 +01:00
blut
28467fc3cb Move mesecons_doors to mesecons_gamecompat 2025-02-11 19:10:53 +01:00
blut
4eeab8f6f5 mesecons_gamecompat: Automatically register mvps stoppers
- registered doors
- registered beds
- metal trapdoors
2025-02-11 19:05:01 +01:00
Maksym H.
1f9e86c3da Make the detector recipe from luacontroller optional (#696) 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
76 zmienionych plików z 488 dodań i 83 usunięć

Wyświetl plik

@@ -10,7 +10,7 @@ jobs:
matrix: matrix:
cfg: cfg:
- { image: 'registry.gitlab.com/minetest/minetest/server:5.0.1', mtg: false } - { 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: steps:
- uses: actions/checkout@main - uses: actions/checkout@main

Wyświetl plik

@@ -15,6 +15,7 @@ ignore = {
max_line_length = 200 max_line_length = 200
read_globals = { read_globals = {
"core",
"default", "default",
"digiline", "digiline",
"doors", "doors",

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,5 @@
# textdomain: mesecons
### oldwires.lua ###
Mesecons=Месекони
Mod that implements a ton of items related to digital circuitry.=Мод, який реалізує масу елементів, пов’язаних із цифровою схемою.

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,4 @@
# textdomain: mesecons_blinkyplant
### init.lua ###
Blinky Plant=Миготлива квітка

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -1,4 +1,5 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local param_maxlen = mesecon.setting("commandblock_param_maxlen", 10000)
minetest.register_chatcommand("say", { minetest.register_chatcommand("say", {
params = "<text>", params = "<text>",
@@ -48,7 +49,7 @@ minetest.register_chatcommand("hp", {
local function initialize_data(meta) local function initialize_data(meta)
local commands = minetest.formspec_escape(meta:get_string("commands")) local commands = minetest.formspec_escape(meta:get_string("commands"))
meta:set_string("formspec", meta:set_string("formspec",
"invsize[9,5;]" .. "size[9,5]" ..
"textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" .. "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]" .. "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]") "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") minetest.chat_send_player(owner, "The command "..cmd.." does not exist")
return return
end 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) local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs)
if not has_privs then if not has_privs then
minetest.chat_send_player(owner, "You don't have permission " minetest.chat_send_player(owner, "You don't have permission "

Wyświetl plik

@@ -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=Комадный блок

Wyświetl plik

@@ -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=Командний блок

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,5 @@
# textdomain: mesecons_delayer
### init.lua ###
Delayer=Затримувач
You hacker you=Ти хакер, ти

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -1,3 +0,0 @@
name = mesecons_doors
depends = mesecons, doors
optional_depends = xpanes

Wyświetl plik

@@ -3,4 +3,6 @@ dofile(minetest.get_modpath("mesecons_extrawires").."/tjunction.lua");
dofile(minetest.get_modpath("mesecons_extrawires").."/corner.lua"); dofile(minetest.get_modpath("mesecons_extrawires").."/corner.lua");
dofile(minetest.get_modpath("mesecons_extrawires").."/doublecorner.lua"); dofile(minetest.get_modpath("mesecons_extrawires").."/doublecorner.lua");
dofile(minetest.get_modpath("mesecons_extrawires").."/vertical.lua"); dofile(minetest.get_modpath("mesecons_extrawires").."/vertical.lua");
dofile(minetest.get_modpath("mesecons_extrawires").."/mesewire.lua"); if core.registered_nodes["mesecons_gamecompat:mese"] then
dofile(minetest.get_modpath("mesecons_extrawires").."/mesewire.lua");
end

Wyświetl plik

@@ -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=Вертикальный мезекон

Wyświetl plik

@@ -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=Ізольований месекон (T-з'єднання)
### vertical.lua ###
Vertical Mesecon=Вертикальний месекон

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -7,13 +7,13 @@ minetest.register_alias("mesecons_gamecompat:coalblock", "mcl_core:coalblock")
minetest.register_alias("mesecons_gamecompat:cobble", "mcl_core:cobble") minetest.register_alias("mesecons_gamecompat:cobble", "mcl_core:cobble")
minetest.register_alias("mesecons_gamecompat:glass", "mcl_core:glass") minetest.register_alias("mesecons_gamecompat:glass", "mcl_core:glass")
minetest.register_alias("mesecons_gamecompat:lava_source", "mcl_core:lava_source") minetest.register_alias("mesecons_gamecompat:lava_source", "mcl_core:lava_source")
minetest.register_alias("mesecons_gamecompat:mese", "mesecons:redstoneblock") minetest.register_alias("mesecons_gamecompat:mese", "mcl_redstone_torch:redstoneblock")
minetest.register_alias("mesecons_gamecompat:mese_crystal", "mesecoms:redstone") minetest.register_alias("mesecons_gamecompat:mese_crystal", "mcl_redstone:redstone")
minetest.register_alias("mesecons_gamecompat:mese_crystal_fragment", "mesecons:redstone") minetest.register_alias("mesecons_gamecompat:mese_crystal_fragment", "mcl_redstone:redstone")
minetest.register_alias("mesecons_gamecompat:obsidian_glass", "mcl_core:glass") minetest.register_alias("mesecons_gamecompat:obsidian_glass", "mcl_core:glass")
minetest.register_alias("mesecons_gamecompat:stone", "mcl_core:stone") minetest.register_alias("mesecons_gamecompat:stone", "mcl_core:stone")
minetest.register_alias("mesecons_gamecompat:steel_ingot", "mcl_core:iron_ingot") minetest.register_alias("mesecons_gamecompat:steel_ingot", "mcl_core:iron_ingot")
minetest.register_alias("mesecons_gamecompat:steelblock", "mcl_core:steelblock") minetest.register_alias("mesecons_gamecompat:steelblock", "mcl_core:ironblock")
minetest.register_alias("mesecons_gamecompat:torch", "mcl_torches:torch") minetest.register_alias("mesecons_gamecompat:torch", "mcl_torches:torch")
if minetest.get_modpath("mcl_dyes") then if minetest.get_modpath("mcl_dyes") then
@@ -41,3 +41,48 @@ end
-- Textures -- Textures
mesecon.texture.steel_block = "default_steel_block.png" mesecon.texture.steel_block = "default_steel_block.png"
if minetest.get_modpath("mesecons_mvps") then
for k,v in pairs(core.registered_nodes) do
local is_stopper = mesecon.mvps_stoppers[k]
if v.groups and v.groups.unmovable_by_piston then
mesecon.register_mvps_stopper(k)
end
if is_stopper then
local groups = table.copy(v.groups or {})
groups.unmovable_by_piston = 1
v.groups = groups
core.register_node(":"..k, v)
end
end
for k,v in pairs(core.registered_entities) do
local is_unmov = mesecon.mvps_unmov[k]
if v._mcl_pistons_unmovable then
mesecon.register_mvps_unmov(k)
end
if is_unmov then
v._mcl_pistons_unmovable = true
core.register_entity(":"..k, v)
end
end
core.register_on_mods_loaded(function()
for _,v in pairs(core.registered_nodes) do
if v.groups and v.groups.bed then
mesecon.register_mvps_stopper(v.name)
end
if v.groups and v.groups.door then
mesecon.register_mvps_stopper(v.name)
end
end
end)
end
core.register_craft({
output = "mesecons:wire_00000000_off",
recipe = {{"mcl_redstone:redstone"}}
})
core.register_craft({
output = "mcl_redstone:redstone",
recipe = {{"mesecons:wire_00000000_off"}}
})

Wyświetl plik

@@ -48,28 +48,26 @@ if minetest.get_modpath("mesecons_mvps") then
for _, name in ipairs({ for _, name in ipairs({
"default:chest_locked", "default:chest_locked",
"default:chest_locked_open", "default:chest_locked_open",
"doors:door_steel_b_1", -- old style doors
"doors:door_steel_b_2", --
"doors:door_steel_t_1", --
"doors:door_steel_t_2", --
"doors:door_steel_a", -- new style doors
"doors:door_steel_b", --
"doors:door_steel_c", --
"doors:door_steel_d", --
"doors:hidden", "doors:hidden",
"doors:trapdoor_steel", "doors:trapdoor_steel",
"doors:trapdoor_steel_open", "doors:trapdoor_steel_open",
"beds:bed_bottom",
"beds:bed_top",
"beds:fancy_bed_bottom",
"beds:fancy_bed_top",
"xpanes:door_steel_bar_a",
"xpanes:door_steel_bar_b",
"xpanes:door_steel_bar_c",
"xpanes:door_steel_bar_d",
"xpanes:trapdoor_steel_bar", "xpanes:trapdoor_steel_bar",
"xpanes:trapdoor_steel_bar_open", "xpanes:trapdoor_steel_bar_open",
}) do }) do
mesecon.register_mvps_stopper(name) mesecon.register_mvps_stopper(name)
end end
core.register_on_mods_loaded(function()
if minetest.get_modpath("doors") then
for k,_ in pairs(doors.registered_doors) do
mesecon.register_mvps_stopper(k)
end
end
if minetest.get_modpath("beds") then
for _,v in pairs(core.registered_nodes) do
if v.groups and v.groups.bed then
mesecon.register_mvps_stopper(v.name)
end
end
end
end)
end end

Wyświetl plik

@@ -22,6 +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
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) 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
@@ -47,6 +52,10 @@ local function meseconify_door(name)
}) })
elseif minetest.registered_items[name .. "_a"] then elseif minetest.registered_items[name .. "_a"] then
-- new style mesh node based doors -- 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 = { local override = {
mesecons = {effector = { mesecons = {effector = {
action_on = function(pos) action_on = function(pos)
@@ -73,15 +82,6 @@ local function meseconify_door(name)
end end
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 -- Trapdoor
local function trapdoor_switch(name) local function trapdoor_switch(name)
return function(pos, node) return function(pos, node)
@@ -131,9 +131,15 @@ local function meseconify_trapdoor(name)
end end
end end
local trapdoors_list = { minetest.register_on_mods_loaded(function()
"doors:trapdoor", for k,_ in pairs(doors.registered_doors) do
"doors:trapdoor_steel", if k:find("_a$") then
"xpanes:trapdoor_steel_bar" meseconify_door(k:sub(1,-3))
} end
for i=1,#trapdoors_list do meseconify_trapdoor(trapdoors_list[i]) end end
for k,_ in pairs(doors.registered_trapdoors) do
if not k:find("_open$") then
meseconify_trapdoor(k)
end
end
end)

Wyświetl plik

@@ -14,7 +14,11 @@ if minetest.get_modpath("default") then
dofile(minetest.get_modpath("mesecons_gamecompat").."/compat_mtg.lua") dofile(minetest.get_modpath("mesecons_gamecompat").."/compat_mtg.lua")
end end
if minetest.get_modpath("mcl_core") then if minetest.get_modpath("mcl_redstone") then
minetest.log("info", "Mesecons: detected MineClonia Game for game compatibility") minetest.log("info", "Mesecons: detected MineClonia Game for game compatibility")
dofile(minetest.get_modpath("mesecons_gamecompat").."/compat_mcl.lua") dofile(minetest.get_modpath("mesecons_gamecompat").."/compat_mcla.lua")
end
if minetest.get_modpath("doors") then
dofile(minetest.get_modpath("mesecons_gamecompat").."/doors.lua")
end end

Wyświetl plik

@@ -1,3 +1,3 @@
name = mesecons_gamecompat name = mesecons_gamecompat
depends = mesecons depends = mesecons
optional_depends = fire, default, dye, mesecons_mvps, tnt, mcl_fire, mcl_core, mcl_dye, mcl_tnt optional_depends = fire, default, dye, mesecons_mvps, tnt, doors, beds, mcl_fire, mcl_core, mcl_dye, mcl_tnt

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,8 @@
# textdomain: mesecons_gates
Diode=Діод
NOT Gate=NOT перехідник
AND Gate=AND перехідник
NAND Gate=NAND перехідник
XOR Gate=XOR перехідник
NOR Gate=NOR перехідник
OR Gate=OR перехідник

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -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=Фиолетовый светящийся камень

Wyświetl plik

@@ -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=Фіолетовий світловий камінь

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -115,27 +115,13 @@ local function piston_off(pos, node)
end end
end end
local orientations = {
[0] = { 4, 8},
{13, 17},
{10, 6},
{20, 15},
}
local function piston_orientate(pos, placer) local function piston_orientate(pos, placer)
mesecon.mvps_set_owner(pos, placer) mesecon.mvps_set_owner(pos, placer)
if not placer then if not placer then
return return
end end
local pitch = math.deg(placer:get_look_vertical())
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
if pitch > 55 then node.param2 = core.dir_to_facedir(placer:get_look_dir(), true)
node.param2 = orientations[node.param2][1]
elseif pitch < -55 then
node.param2 = orientations[node.param2][2]
else
return
end
minetest.swap_node(pos, node) minetest.swap_node(pos, node)
-- minetest.after, because on_placenode for unoriented piston must be processed first -- minetest.after, because on_placenode for unoriented piston must be processed first
minetest.after(0, mesecon.on_placenode, pos, node) minetest.after(0, mesecon.on_placenode, pos, node)

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,5 @@
# textdomain: mesecons_random
### init.lua ###
Removestone=Зникаючий камінь
Ghoststone=Примарний камінь

Wyświetl plik

@@ -30,6 +30,8 @@ local receiver_get_rules = mesecon.horiz_rules_getter({
{x = 0, y = 0, z = -2}, {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", { mesecon.register_node("mesecons_receiver:receiver", {
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
@@ -98,6 +100,7 @@ mesecon.register_node("mesecons_receiver:receiver_up", {
groups = {dig_immediate = 3, not_in_creative_inventory = 1}, groups = {dig_immediate = 3, not_in_creative_inventory = 1},
drop = "mesecons:wire_00000000_off", drop = "mesecons:wire_00000000_off",
sounds = mesecon.node_sound.default, sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
}, { }, {
tiles = {"mesecons_wire_off.png"}, tiles = {"mesecons_wire_off.png"},
mesecons = {conductor = { mesecons = {conductor = {
@@ -143,6 +146,7 @@ mesecon.register_node("mesecons_receiver:receiver_down", {
groups = {dig_immediate = 3, not_in_creative_inventory = 1}, groups = {dig_immediate = 3, not_in_creative_inventory = 1},
drop = "mesecons:wire_00000000_off", drop = "mesecons:wire_00000000_off",
sounds = mesecon.node_sound.default, sounds = mesecon.node_sound.default,
use_texture_alpha = use_texture_alpha,
}, { }, {
tiles = {"mesecons_wire_off.png"}, tiles = {"mesecons_wire_off.png"},
mesecons = {conductor = { mesecons = {conductor = {

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,4 @@
# textdomain: mesecons_switch
### init.lua ###
Switch=Перемикач

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,4 @@
# textdomain: mesecons_torch
### init.lua ###
Mesecon Torch=Месескип

Wyświetl plik

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

Wyświetl plik

@@ -0,0 +1,4 @@
# textdomain: mesecons_walllever
### init.lua ###
Lever=Важіль

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@@ -1,3 +1,5 @@
name = mesecons name = mesecons
description = Mod that implements a ton of items related to digital circuitry. description = Mod that implements a ton of items related to digital circuitry.
min_minetest_version = 5.0 min_minetest_version = 5.0
author = Jeija
title = Mesecons

Wyświetl plik

@@ -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 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] [mesecons_detector]
mesecon.detector_radius (Player detector scanning radius) int 6 3 16 mesecon.detector_radius (Player detector scanning radius) int 6 3 16