1 Commits

Author SHA1 Message Date
3c9055c723 Fix crash when doors.registered_doors isn't available 2024-10-17 11:14:04 +02:00
86 changed files with 121 additions and 605 deletions

View File

@ -9,9 +9,9 @@ jobs:
- uses: actions/checkout@main
- name: apt
run: sudo apt-get install -y luarocks
- name: install luacheck
- name: luacheck install
run: luarocks install --local luacheck
- name: run luacheck
- name: luacheck run
run: $HOME/.luarocks/bin/luacheck ./
mineunit:
@ -19,27 +19,23 @@ jobs:
name: "Mineunit tests"
steps:
- uses: actions/checkout@main
- name: apt
run: sudo apt-get install -y luarocks
- name: busted install
run: luarocks install --local busted
- name: luacov install
run: luarocks install --local luacov
- name: mineunit install
run: luarocks install --server=https://luarocks.org/dev --local mineunit
- name: run mesecons tests
uses: mt-mods/mineunit-actions@master
with:
coverage: false
mineunit-args: -q
working-directory: ./mesecons
working-directory: ./mesecons/
run: $HOME/.luarocks/bin/mineunit -q
- name: run mesecons_mvps tests
uses: mt-mods/mineunit-actions@master
with:
coverage: false
mineunit-args: -q
working-directory: ./mesecons_mvps
working-directory: ./mesecons_mvps/
run: $HOME/.luarocks/bin/mineunit -q
- name: run mesecons_fpga tests
uses: mt-mods/mineunit-actions@master
with:
coverage: false
mineunit-args: -q
working-directory: ./mesecons_fpga
working-directory: ./mesecons_fpga/
run: $HOME/.luarocks/bin/mineunit -q
- name: run mesecons_luacontroller tests
uses: mt-mods/mineunit-actions@master
with:
coverage: false
mineunit-args: -q
working-directory: ./mesecons_luacontroller
working-directory: ./mesecons_luacontroller/
run: $HOME/.luarocks/bin/mineunit -q

View File

@ -11,12 +11,10 @@ jobs:
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/luanti-org/luanti:5.11.0', mtg: true }
steps:
- uses: actions/checkout@main
- name: Download Minetest Game
uses: actions/checkout@main
- uses: actions/checkout@main
with:
repository: 'minetest/minetest_game'
path: ./.test/minetest_game

View File

@ -15,7 +15,6 @@ ignore = {
max_line_length = 200
read_globals = {
"core",
"default",
"digiline",
"doors",
@ -30,7 +29,6 @@ read_globals = {
"VoxelArea",
"mcl_dyes",
"mcl_sounds",
"hades_sounds",
}
globals = {"mesecon"}

View File

@ -99,9 +99,8 @@ do
offstate = "mesecons:test_conductor_rot_off",
}}
mesecon.register_node("mesecons:test_conductor_rot", {
paramtype2 = "4dir",
description = "Rotatable Test Conductor",
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
}, {mesecons = off_spec}, {mesecons = on_spec})
end

View File

@ -13,10 +13,9 @@ MESECONS by Jeija and contributors
Mezzee-what?
------------
[Mesecons](https://mesecons.net/)! They're yellow, they're conductive, and they'll add a whole new dimension to Luanti's gameplay.
[Mesecons](https://mesecons.net/)! They're yellow, they're conductive, and they'll add a whole new dimension to Minetest's gameplay.
Mesecons is a mod for [Luanti](https://www.luanti.org/) that implements a ton of items related to digital circuitry, such as wires, buttons, lights, and even programmable controllers.
Among other things, there are also pistons, solar panels, pressure plates, and note blocks.
Mesecons is a mod for [Minetest](https://www.minetest.net/) that implements a ton of items related to digital circuitry, such as wires, buttons, lights, and even programmable controllers. Among other things, there are also pistons, solar panels, pressure plates, and note blocks.
Mesecons has a similar goal to Redstone in Minecraft, but works in its own way, with different rules and mechanics.
@ -25,15 +24,15 @@ OK, I want in.
Go get it!
[![ContentDB](https://content.luanti.org/packages/Jeija/mesecons/shields/downloads/)](https://content.luanti.org/packages/Jeija/mesecons/)
[![ContentDB](https://content.minetest.net/packages/Jeija/mesecons/shields/downloads/)](https://content.minetest.net/packages/Jeija/mesecons/)
Install it directly from your client by searching it in the Online Content tab.
**Or** if you've downloaded a ZIP file check out [this page](https://docs.luanti.org/for-players/mods/) over at the official Luanti Wiki. For your convenience, here's a quick summary:
**Or** if you've downloaded a ZIP file check out [this page](https://wiki.minetest.net/Mods) over at the official Minetest Wiki. For your convenience, here's a quick summary:
1. If Mesecons is still in a ZIP file, extract the folder inside to somewhere on the computer.
2. Make sure that when you open the folder, you can directly find `README.md` in the listing. If you just see another folder, move that folder up one level and delete the old one.
3. Open up the Luanti mods folder - called `mods`.
3. Open up the Minetest mods folder - called `mods`.
4. Copy the Mesecons folder into the mods folder.
Don't like some parts of Mesecons? Open up the Mesecons folder and delete the subfolder containing the mod you don't want. If you didn't want movestones, for example, all you have to do is delete the `mesecons_movestones` folder and they will no longer be available.

View File

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

View File

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

View File

@ -17,7 +17,6 @@ function mesecon.on_rotate(pos, node, _, _, new_param2)
end
-- An on_rotate callback for components which stay horizontal.
-- Deprecated. Use paramtype2 = "4dir" instead.
function mesecon.on_rotate_horiz(pos, node, user, mode, new_param2)
if not minetest.global_exists("screwdriver") or mode ~= screwdriver.ROTATE_FACE then
return false

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,4 @@
local S = minetest.get_translator(minetest.get_current_modname())
local param_maxlen = mesecon.setting("commandblock_param_maxlen", 10000)
minetest.register_chatcommand("say", {
params = "<text>",
@ -49,7 +48,7 @@ minetest.register_chatcommand("hp", {
local function initialize_data(meta)
local commands = minetest.formspec_escape(meta:get_string("commands"))
meta:set_string("formspec",
"size[9,5]" ..
"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]")
@ -157,11 +156,6 @@ 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

@ -1,7 +0,0 @@
# 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

@ -1,7 +0,0 @@
# 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

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

View File

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

View File

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

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

View File

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

View File

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

View File

@ -132,6 +132,7 @@ local function meseconify_trapdoor(name)
end
minetest.register_on_mods_loaded(function()
if doors.registered_doors ~= nil then -- registered_doors is not always available
for k,_ in pairs(doors.registered_doors) do
if k:find("_a$") then
meseconify_door(k:sub(1,-3))
@ -142,4 +143,5 @@ minetest.register_on_mods_loaded(function()
meseconify_trapdoor(k)
end
end
end
end)

3
mesecons_doors/mod.conf Normal file
View File

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

View File

@ -18,7 +18,7 @@ minetest.register_node("mesecons_extrawires:corner_on", {
{ name = "jeija_insulated_wire_ends_on.png", backface_culling = true },
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -33,7 +33,7 @@ minetest.register_node("mesecons_extrawires:corner_on", {
offstate = "mesecons_extrawires:corner_off"
}},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
minetest.register_node("mesecons_extrawires:corner_off", {
@ -45,7 +45,7 @@ minetest.register_node("mesecons_extrawires:corner_off", {
{ name = "jeija_insulated_wire_ends_off.png", backface_culling = true },
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -59,7 +59,7 @@ minetest.register_node("mesecons_extrawires:corner_off", {
onstate = "mesecons_extrawires:corner_on"
}},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
minetest.register_craft({

View File

@ -41,7 +41,7 @@ for k, state in ipairs(doublecorner_states) do
{ name = "jeija_insulated_wire_ends_" .. w2 .. ".png", backface_culling = true },
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -56,7 +56,7 @@ for k, state in ipairs(doublecorner_states) do
},
},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
end

View File

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

View File

@ -1,20 +0,0 @@
# 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

@ -1,20 +0,0 @@
# 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=Вертикальний месекон

View File

@ -29,7 +29,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
"jeija_insulated_wire_ends_on.png"
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -45,7 +45,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
offstate = "mesecons_extrawires:tjunction_off"
}},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
minetest.register_node("mesecons_extrawires:tjunction_off", {
@ -60,7 +60,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
"jeija_insulated_wire_ends_off.png"
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -75,7 +75,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
onstate = "mesecons_extrawires:tjunction_on"
}},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
minetest.register_craft({

View File

@ -40,8 +40,6 @@ 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
@ -98,7 +96,6 @@ 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},
@ -133,7 +130,6 @@ 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 = {
@ -166,7 +162,6 @@ 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

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

View File

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

View File

@ -1,72 +0,0 @@
--Aliases
core.register_alias("mesecons_gamecompat:chest", "hades_chests:chest")
core.register_alias("mesecons_gamecompat:chest_locked", "hades_chests:chest_locked")
core.register_alias("mesecons_gamecompat:coalblock", "hades_core:coalblock")
core.register_alias("mesecons_gamecompat:cobble", "hades_core:cobble")
core.register_alias("mesecons_gamecompat:glass", "hades_core:glass")
core.register_alias("mesecons_gamecompat:lava_source", "hades_core:lava_source")
core.register_alias("mesecons_gamecompat:mese", "hades_core:mese")
core.register_alias("mesecons_gamecompat:mese_crystal", "hades_core:mese_crystal")
core.register_alias("mesecons_gamecompat:mese_crystal_fragment", "hades_core:mese_crystal_fragment")
core.register_alias("mesecons_gamecompat:obsidian_glass", "hades_core:obsidian_glass")
core.register_alias("mesecons_gamecompat:stone", "hades_core:stone")
core.register_alias("mesecons_gamecompat:steel_ingot", "hades_core:steel_ingot")
core.register_alias("mesecons_gamecompat:steelblock", "hades_core:steelblock")
core.register_alias("mesecons_gamecompat:torch", "hades_torches:torch")
if core.get_modpath("hades_dye") then
for _, color in ipairs(mesecon.dye_colors) do
core.register_alias("mesecons_gamecompat:dye_" .. color, "hades_dye:" .. color)
end
end
-- Sounds
mesecon.node_sound.default = hades_sounds.node_sound_defaults()
mesecon.node_sound.glass = hades_sounds.node_sound_glass_defaults()
mesecon.node_sound.leaves = hades_sounds.node_sound_leaves_defaults()
mesecon.node_sound.stone = hades_sounds.node_sound_stone_defaults()
mesecon.node_sound.wood = hades_sounds.node_sound_wood_defaults()
if core.get_modpath("hades_fire") then
mesecon.sound_name.fire = "fire_fire"
end
if core.get_modpath("hades_tnt") then
mesecon.sound_name.explode = "tnt_explode"
end
-- Textures
mesecon.texture.steel_block = "default_steel_block.png"
-- MVPS stoppers
if core.get_modpath("mesecons_mvps") then
-- All of the locked and internal nodes in Hades Revisited
for _, name in ipairs({
"hades_chests:chest_locked",
"hades_chests:chest_locked_open",
"hades_doors:hidden",
"hades_doors:hidden_center",
}) do
mesecon.register_mvps_stopper(name)
end
core.register_on_mods_loaded(function()
if core.get_modpath("hades_doors") then
for _,v in pairs(core.registered_nodes) do
if v.groups and (v.groups.door or v.groups.trapdoor) then
mesecon.register_mvps_stopper(v.name)
end
end
end
if core.get_modpath("hades_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

View File

@ -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:glass", "mcl_core:glass")
minetest.register_alias("mesecons_gamecompat:lava_source", "mcl_core:lava_source")
minetest.register_alias("mesecons_gamecompat:mese", "mcl_redstone_torch:redstoneblock")
minetest.register_alias("mesecons_gamecompat:mese_crystal", "mcl_redstone:redstone")
minetest.register_alias("mesecons_gamecompat:mese_crystal_fragment", "mcl_redstone:redstone")
minetest.register_alias("mesecons_gamecompat:mese", "mesecons:redstoneblock")
minetest.register_alias("mesecons_gamecompat:mese_crystal", "mesecoms:redstone")
minetest.register_alias("mesecons_gamecompat:mese_crystal_fragment", "mesecons:redstone")
minetest.register_alias("mesecons_gamecompat:obsidian_glass", "mcl_core:glass")
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:steelblock", "mcl_core:ironblock")
minetest.register_alias("mesecons_gamecompat:steelblock", "mcl_core:steelblock")
minetest.register_alias("mesecons_gamecompat:torch", "mcl_torches:torch")
if minetest.get_modpath("mcl_dyes") then
@ -41,48 +41,3 @@ end
-- Textures
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"}}
})

View File

@ -48,26 +48,28 @@ if minetest.get_modpath("mesecons_mvps") then
for _, name in ipairs({
"default:chest_locked",
"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:trapdoor_steel",
"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_open",
}) do
mesecon.register_mvps_stopper(name)
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

View File

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

View File

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

View File

@ -1,5 +1,3 @@
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 }
@ -89,7 +87,7 @@ local function register_gate(name, inputnumber, assess, recipe, description)
description = description,
inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png",
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
drawtype = "nodebox",
drop = basename.."_off",
@ -102,7 +100,7 @@ local function register_gate(name, inputnumber, assess, recipe, description)
offstate = basename.."_off",
inputnumber = inputnumber,
after_dig_node = mesecon.do_cooldown,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
},{
tiles = {
"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
@ -148,38 +146,38 @@ end
register_gate("diode", 1, function (input) return input end,
{{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons_torch:mesecon_torch_on"}},
S("Diode"))
"Diode")
register_gate("not", 1, function (input) return not input end,
{{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons:mesecon"}},
S("NOT Gate"))
"NOT Gate")
register_gate("and", 2, function (val1, val2) return val1 and val2 end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons_materials:silicon", "mesecons:mesecon"},
{"mesecons:mesecon", "", ""}},
S("AND Gate"))
"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", "", ""}},
S("NAND Gate"))
"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", "", ""}},
S("XOR Gate"))
"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", "", ""}},
S("NOR Gate"))
"NOR Gate")
register_gate("or", 2, function (val1, val2) return (val1 or val2) end,
{{"mesecons:mesecon", "", ""},
{"", "mesecons:mesecon", "mesecons:mesecon"},
{"mesecons:mesecon", "", ""}},
S("OR Gate"))
"OR Gate")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,7 +17,7 @@ minetest.register_node("mesecons_insulated:insulated_on", {
"jeija_insulated_wire_sides_on.png"
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -39,7 +39,7 @@ minetest.register_node("mesecons_insulated:insulated_on", {
rules = insulated_wire_get_rules
}},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
minetest.register_node("mesecons_insulated:insulated_off", {
@ -54,7 +54,7 @@ minetest.register_node("mesecons_insulated:insulated_off", {
"jeija_insulated_wire_sides_off.png"
},
paramtype = "light",
paramtype2 = "4dir",
paramtype2 = "facedir",
is_ground_content = false,
walkable = false,
sunlight_propagates = true,
@ -75,7 +75,7 @@ minetest.register_node("mesecons_insulated:insulated_off", {
rules = insulated_wire_get_rules
}},
on_blast = mesecon.on_blastnode,
on_rotate = mesecon.on_rotate,
on_rotate = mesecon.on_rotate_horiz,
})
minetest.register_craft({

View File

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

View File

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

View File

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

View File

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

View File

@ -1,15 +0,0 @@
# 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

@ -1,15 +0,0 @@
# 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,7 +509,6 @@ 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

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

View File

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

View File

@ -2,13 +2,13 @@ local S = minetest.get_translator(minetest.get_current_modname())
-- Glue and fiber
minetest.register_craftitem("mesecons_materials:glue", {
inventory_image = "mesecons_glue.png",
image = "mesecons_glue.png",
on_place_on_ground = minetest.craftitem_place_item,
description = S("Glue"),
})
minetest.register_craftitem("mesecons_materials:fiber", {
inventory_image = "mesecons_fiber.png",
image = "mesecons_fiber.png",
on_place_on_ground = minetest.craftitem_place_item,
description = S("Fiber"),
})
@ -29,7 +29,7 @@ minetest.register_craft({
-- Silicon
minetest.register_craftitem("mesecons_materials:silicon", {
inventory_image = "mesecons_silicon.png",
image = "mesecons_silicon.png",
on_place_on_ground = minetest.craftitem_place_item,
description = S("Silicon"),
})

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -30,8 +30,6 @@ 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",
@ -100,7 +98,6 @@ 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 = {
@ -146,7 +143,6 @@ 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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -11,11 +11,6 @@ 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