Compare commits
46 Commits
ec3218d6d9
...
master
Author | SHA1 | Date | |
---|---|---|---|
e2fc73da98 | |||
f24429b9f7 | |||
27072542cf | |||
b79962402b | |||
49879ab13c | |||
4c142ea871 | |||
1513a490dc | |||
4bd59137a2 | |||
a0580f9f20 | |||
93751a9014 | |||
786094ec06 | |||
55359c7a0b | |||
28467fc3cb | |||
4eeab8f6f5 | |||
1f9e86c3da | |||
dd073d2e83 | |||
320ec93544 | |||
8051129f82 | |||
5883a0ce65 | |||
d547f5fe43 | |||
5c82089146 | |||
31b56063a0 | |||
b46c589a38 | |||
ac83dead50 | |||
ff87cf3162 | |||
096df65cc6 | |||
f718816cea | |||
9ff3ab1007 | |||
368b294c70 | |||
fe57adec26 | |||
d52eac5a4a | |||
e2c8a81e7b | |||
e71cdb6f08 | |||
0c7bb316c7 | |||
0a4651c33c | |||
a82bac7b5b | |||
cffbc33e6d | |||
59780437f2 | |||
50a4bd6170 | |||
7418d5cb61 | |||
6b42419828 | |||
8e30ee4113 | |||
b318aadd0a | |||
fef402e88a | |||
f98ea14023 | |||
7f8758f17b |
41
.github/workflows/check-release.yml
vendored
@ -1,41 +0,0 @@
|
|||||||
on: [push, pull_request]
|
|
||||||
name: Check & Release
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@main
|
|
||||||
- name: apt
|
|
||||||
run: sudo apt-get install -y luarocks
|
|
||||||
- name: luacheck install
|
|
||||||
run: luarocks install --local luacheck
|
|
||||||
- name: luacheck run
|
|
||||||
run: $HOME/.luarocks/bin/luacheck ./
|
|
||||||
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
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
|
|
||||||
working-directory: ./mesecons/
|
|
||||||
run: $HOME/.luarocks/bin/mineunit -q
|
|
||||||
- name: run mesecons_mvps tests
|
|
||||||
working-directory: ./mesecons_mvps/
|
|
||||||
run: $HOME/.luarocks/bin/mineunit -q
|
|
||||||
- name: run mesecons_fpga tests
|
|
||||||
working-directory: ./mesecons_fpga/
|
|
||||||
run: $HOME/.luarocks/bin/mineunit -q
|
|
||||||
- name: run mesecons_luacontroller tests
|
|
||||||
working-directory: ./mesecons_luacontroller/
|
|
||||||
run: $HOME/.luarocks/bin/mineunit -q
|
|
45
.github/workflows/check.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
name: "Check"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: "Luacheck"
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@main
|
||||||
|
- name: apt
|
||||||
|
run: sudo apt-get install -y luarocks
|
||||||
|
- name: install luacheck
|
||||||
|
run: luarocks install --local luacheck
|
||||||
|
- name: run luacheck
|
||||||
|
run: $HOME/.luarocks/bin/luacheck ./
|
||||||
|
|
||||||
|
mineunit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: "Mineunit tests"
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@main
|
||||||
|
- name: run mesecons tests
|
||||||
|
uses: mt-mods/mineunit-actions@master
|
||||||
|
with:
|
||||||
|
coverage: false
|
||||||
|
mineunit-args: -q
|
||||||
|
working-directory: ./mesecons
|
||||||
|
- name: run mesecons_mvps tests
|
||||||
|
uses: mt-mods/mineunit-actions@master
|
||||||
|
with:
|
||||||
|
coverage: false
|
||||||
|
mineunit-args: -q
|
||||||
|
working-directory: ./mesecons_mvps
|
||||||
|
- name: run mesecons_fpga tests
|
||||||
|
uses: mt-mods/mineunit-actions@master
|
||||||
|
with:
|
||||||
|
coverage: false
|
||||||
|
mineunit-args: -q
|
||||||
|
working-directory: ./mesecons_fpga
|
||||||
|
- name: run mesecons_luacontroller tests
|
||||||
|
uses: mt-mods/mineunit-actions@master
|
||||||
|
with:
|
||||||
|
coverage: false
|
||||||
|
mineunit-args: -q
|
||||||
|
working-directory: ./mesecons_luacontroller
|
28
.github/workflows/test.yml
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
name: "Test"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: "Smoke Test ${{ matrix.cfg.image }}"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 5
|
||||||
|
strategy:
|
||||||
|
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/luanti-org/luanti:5.11.0', mtg: true }
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@main
|
||||||
|
|
||||||
|
- name: Download Minetest Game
|
||||||
|
uses: actions/checkout@main
|
||||||
|
with:
|
||||||
|
repository: 'minetest/minetest_game'
|
||||||
|
path: ./.test/minetest_game
|
||||||
|
if: ${{ matrix.cfg.mtg }}
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: ./.test/run.sh
|
||||||
|
env:
|
||||||
|
DOCKER_IMAGE: "${{ matrix.cfg.image }}"
|
@ -15,6 +15,7 @@ ignore = {
|
|||||||
max_line_length = 200
|
max_line_length = 200
|
||||||
|
|
||||||
read_globals = {
|
read_globals = {
|
||||||
|
"core",
|
||||||
"default",
|
"default",
|
||||||
"digiline",
|
"digiline",
|
||||||
"doors",
|
"doors",
|
||||||
@ -27,6 +28,9 @@ read_globals = {
|
|||||||
"table.insert_all",
|
"table.insert_all",
|
||||||
"vector",
|
"vector",
|
||||||
"VoxelArea",
|
"VoxelArea",
|
||||||
|
"mcl_dyes",
|
||||||
|
"mcl_sounds",
|
||||||
|
"hades_sounds",
|
||||||
}
|
}
|
||||||
|
|
||||||
globals = {"mesecon"}
|
globals = {"mesecon"}
|
||||||
|
3
.test/minetest.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
mg_name = singlenode
|
||||||
|
mesecon.internal_test = true
|
||||||
|
random_mod_load_order = true
|
31
.test/run.sh
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
tempdir=$(mktemp -d)
|
||||||
|
confpath=$tempdir/minetest.conf
|
||||||
|
worldpath=$tempdir/world
|
||||||
|
trap 'rm -rf "$tempdir" || :' EXIT
|
||||||
|
|
||||||
|
[ -f mesecons/mod.conf ] || { echo "Must be run in modpack root folder." >&2; exit 1; }
|
||||||
|
|
||||||
|
command -v docker >/dev/null || { echo "Docker is not installed." >&2; exit 1; }
|
||||||
|
mtg=.test/minetest_game
|
||||||
|
[ -d $mtg ] || echo "A source checkout of minetest_game was not found. This can fail if your docker image does not ship a game." >&2
|
||||||
|
|
||||||
|
mkdir "$worldpath"
|
||||||
|
cp -v .test/minetest.conf "$confpath"
|
||||||
|
chmod -R 777 "$tempdir"
|
||||||
|
|
||||||
|
args=(
|
||||||
|
-v "$confpath":/etc/minetest/minetest.conf
|
||||||
|
-v "$tempdir":/var/lib/minetest/.minetest
|
||||||
|
-v "$PWD":/var/lib/minetest/.minetest/world/worldmods/mesecons
|
||||||
|
)
|
||||||
|
[ -d $mtg ] && args+=(
|
||||||
|
-v "$(realpath $mtg)":/var/lib/minetest/.minetest/games/minetest_game
|
||||||
|
)
|
||||||
|
args+=("$DOCKER_IMAGE")
|
||||||
|
[ -d $mtg ] && args+=(--gameid minetest)
|
||||||
|
docker run --rm -i "${args[@]}"
|
||||||
|
|
||||||
|
ls -la "$worldpath"
|
||||||
|
test -f "$worldpath/mesecon_actionqueue" || exit 1
|
||||||
|
exit 0
|
@ -99,8 +99,9 @@ do
|
|||||||
offstate = "mesecons:test_conductor_rot_off",
|
offstate = "mesecons:test_conductor_rot_off",
|
||||||
}}
|
}}
|
||||||
mesecon.register_node("mesecons:test_conductor_rot", {
|
mesecon.register_node("mesecons:test_conductor_rot", {
|
||||||
|
paramtype2 = "4dir",
|
||||||
description = "Rotatable Test Conductor",
|
description = "Rotatable Test Conductor",
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
}, {mesecons = off_spec}, {mesecons = on_spec})
|
}, {mesecons = off_spec}, {mesecons = on_spec})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
30
README.md
@ -12,23 +12,28 @@ MESECONS by Jeija and contributors
|
|||||||
|
|
||||||
Mezzee-what?
|
Mezzee-what?
|
||||||
------------
|
------------
|
||||||
[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 [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](https://mesecons.net/)! They're yellow, they're conductive, and they'll add a whole new dimension to Luanti'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 has a similar goal to Redstone in Minecraft, but works in its own way, with different rules and mechanics.
|
Mesecons has a similar goal to Redstone in Minecraft, but works in its own way, with different rules and mechanics.
|
||||||
|
|
||||||
OK, I want in.
|
OK, I want in.
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Go get it!
|
Go get it!
|
||||||
|
|
||||||
[DOWNLOAD IT NOW](https://github.com/minetest-mods/mesecons/archive/master.zip)
|
[](https://content.luanti.org/packages/Jeija/mesecons/)
|
||||||
|
|
||||||
Now go ahead and install it like any other Minetest mod. Don't know how? Check out [the wonderful page about it](https://wiki.minetest.net/Mods) over at the official Minetest Wiki. For your convenience, here's a quick summary:
|
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:
|
||||||
|
|
||||||
1. If Mesecons is still in a ZIP file, extract the folder inside to somewhere on the computer.
|
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.
|
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 Minetest mods folder - usually `/mods/`. If you see the `minetest` or folder inside of that, that is your mod folder instead.
|
3. Open up the Luanti mods folder - called `mods`.
|
||||||
4. Copy the Mesecons folder into the mods folder.
|
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.
|
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.
|
||||||
@ -37,21 +42,21 @@ There are no dependencies - it will work right after installing!
|
|||||||
|
|
||||||
How do I use this thing?
|
How do I use this thing?
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
How about a [quick overview video](https://www.youtube.com/watch?v=6kmeQj6iW5k)?
|
How about a [quick overview video](https://www.youtube.com/watch?v=6kmeQj6iW5k)?
|
||||||
|
|
||||||
Or maybe a [comprehensive reference](http://mesecons.net/items.html) is your style?
|
Or maybe a [comprehensive reference](https://mesecons.net/items.html) is your style?
|
||||||
|
|
||||||
An overview for the very newest of new beginners? How does [this one](http://uberi.mesecons.net/projects/MeseconsBasics/index.html) look?
|
An overview for the very newest of new beginners? How does [this one](https://uberi.mesecons.net/projects/MeseconsBasics/index.html) look?
|
||||||
|
|
||||||
There is also a [wiki page](https://wiki.minetest.net/Mods/Mesecons) dedicated to this mod.
|
Want to get more into building? Why not check out the [Mesecons Laboratory](https://uberi.mesecons.net/), a website dedicated to advanced Mesecons builders?
|
||||||
|
|
||||||
Want to get more into building? Why not check out the [Mesecons Laboratory](http://uberi.mesecons.net/), a website dedicated to advanced Mesecons builders?
|
|
||||||
|
|
||||||
Want to contribute to Mesecons itself? Check out the [source code](https://github.com/minetest-mods/mesecons)!
|
Want to contribute to Mesecons itself? Check out the [source code](https://github.com/minetest-mods/mesecons)!
|
||||||
|
|
||||||
Who wrote it anyways?
|
Who wrote it anyways?
|
||||||
---------------------
|
---------------------
|
||||||
These awesome people made Mesecons possible!
|
|
||||||
|
These awesome people made Mesecons possible! (as of 2016)
|
||||||
|
|
||||||
| Contributor | Contribution |
|
| Contributor | Contribution |
|
||||||
| --------------- | -------------------------------- |
|
| --------------- | -------------------------------- |
|
||||||
@ -72,8 +77,11 @@ These awesome people made Mesecons possible!
|
|||||||
|
|
||||||
There are also a whole bunch of other people helping with everything from code to testing and feedback. Mesecons would also not be possible without their help!
|
There are also a whole bunch of other people helping with everything from code to testing and feedback. Mesecons would also not be possible without their help!
|
||||||
|
|
||||||
|
Check out the [entire contributor list](https://github.com/minetest-mods/mesecons/graphs/contributors) on GitHub.
|
||||||
|
|
||||||
Alright, how can I use it?
|
Alright, how can I use it?
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
All textures in this project are licensed under the CC-BY-SA 3.0 (Creative Commons Attribution-ShareAlike 3.0 Generic).
|
All textures in this project are licensed under the CC-BY-SA 3.0 (Creative Commons Attribution-ShareAlike 3.0 Generic).
|
||||||
That means you can distribute and remix them as much as you want to, under the condition that you give credit to the authors and the project, and that if you remix and release them, they must be under the same or similar license to this one.
|
That means you can distribute and remix them as much as you want to, under the condition that you give credit to the authors and the project, and that if you remix and release them, they must be under the same or similar license to this one.
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
},
|
},
|
||||||
"Logic" : {
|
"Logic" : {
|
||||||
"Luacontroller" : "mesecons_luacontroller/doc/luacontroller",
|
"Luacontroller" : "mesecons_luacontroller/doc/luacontroller",
|
||||||
|
"Microcontroller" : "mesecons_microcontroller/doc/microcontroler",
|
||||||
"FPGA" : "mesecons_fpga/doc/fpga",
|
"FPGA" : "mesecons_fpga/doc/fpga",
|
||||||
"FPGA Programmer" : "mesecons_fpga/doc/programmer",
|
"FPGA Programmer" : "mesecons_fpga/doc/programmer",
|
||||||
"Torch" : "mesecons_torch/doc/torch",
|
"Torch" : "mesecons_torch/doc/torch",
|
||||||
|
@ -70,7 +70,17 @@ end
|
|||||||
-- However, even that does not work in some cases, that's why we delay the time the globalsteps
|
-- However, even that does not work in some cases, that's why we delay the time the globalsteps
|
||||||
-- start to be execute by 4 seconds
|
-- start to be execute by 4 seconds
|
||||||
|
|
||||||
|
local m_time = 0
|
||||||
|
local resumetime = mesecon.setting("resumetime", 4)
|
||||||
|
|
||||||
local function globalstep_func(dtime)
|
local function globalstep_func(dtime)
|
||||||
|
-- don't even try if server has not been running for XY seconds; resumetime = time to wait
|
||||||
|
-- after starting the server before processing the ActionQueue, don't set this too low
|
||||||
|
if m_time < resumetime then
|
||||||
|
m_time = m_time + dtime
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local actions = queue.actions
|
local actions = queue.actions
|
||||||
-- split into two categories:
|
-- split into two categories:
|
||||||
-- actions_now: actions to execute now
|
-- actions_now: actions to execute now
|
||||||
@ -112,23 +122,7 @@ local function globalstep_func(dtime)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- delay the time the globalsteps start to be execute by 4 seconds
|
minetest.register_globalstep(globalstep_func)
|
||||||
do
|
|
||||||
local m_time = 0
|
|
||||||
local resumetime = mesecon.setting("resumetime", 4)
|
|
||||||
local globalstep_func_index = #minetest.registered_globalsteps + 1
|
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
m_time = m_time + dtime
|
|
||||||
-- don't even try if server has not been running for XY seconds; resumetime = time to wait
|
|
||||||
-- after starting the server before processing the ActionQueue, don't set this too low
|
|
||||||
if m_time < resumetime then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
-- replace this globalstep function
|
|
||||||
minetest.registered_globalsteps[globalstep_func_index] = globalstep_func
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
function queue:execute(action)
|
function queue:execute(action)
|
||||||
-- ignore if action queue function name doesn't exist,
|
-- ignore if action queue function name doesn't exist,
|
||||||
|
@ -123,3 +123,11 @@ dofile(minetest.get_modpath("mesecons").."/legacy.lua");
|
|||||||
|
|
||||||
--Services like turnoff receptor on dignode and so on
|
--Services like turnoff receptor on dignode and so on
|
||||||
dofile(minetest.get_modpath("mesecons").."/services.lua");
|
dofile(minetest.get_modpath("mesecons").."/services.lua");
|
||||||
|
|
||||||
|
-- Automated test run
|
||||||
|
if mesecon.setting("internal_test", false) then
|
||||||
|
-- currently does nothing, we only fail if some error happens right on startup
|
||||||
|
minetest.after(5, function()
|
||||||
|
minetest.request_shutdown()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
@ -51,27 +51,18 @@ mesecon.fifo_queue = dofile(minetest.get_modpath("mesecons").."/fifo_queue.lua")
|
|||||||
|
|
||||||
-- General
|
-- General
|
||||||
function mesecon.get_effector(nodename)
|
function mesecon.get_effector(nodename)
|
||||||
if minetest.registered_nodes[nodename]
|
local def = minetest.registered_nodes[nodename]
|
||||||
and minetest.registered_nodes[nodename].mesecons
|
return def and def.mesecons and def.mesecons.effector
|
||||||
and minetest.registered_nodes[nodename].mesecons.effector then
|
|
||||||
return minetest.registered_nodes[nodename].mesecons.effector
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_receptor(nodename)
|
function mesecon.get_receptor(nodename)
|
||||||
if minetest.registered_nodes[nodename]
|
local def = minetest.registered_nodes[nodename]
|
||||||
and minetest.registered_nodes[nodename].mesecons
|
return def and def.mesecons and def.mesecons.receptor
|
||||||
and minetest.registered_nodes[nodename].mesecons.receptor then
|
|
||||||
return minetest.registered_nodes[nodename].mesecons.receptor
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_conductor(nodename)
|
function mesecon.get_conductor(nodename)
|
||||||
if minetest.registered_nodes[nodename]
|
local def = minetest.registered_nodes[nodename]
|
||||||
and minetest.registered_nodes[nodename].mesecons
|
return def and def.mesecons and def.mesecons.conductor
|
||||||
and minetest.registered_nodes[nodename].mesecons.conductor then
|
|
||||||
return minetest.registered_nodes[nodename].mesecons.conductor
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_any_outputrules(node)
|
function mesecon.get_any_outputrules(node)
|
||||||
|
3
mesecons/locale/mesecons.de.tr
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# textdomain: mesecons
|
||||||
|
|
||||||
|
Mesecons=Mesecons
|
4
mesecons/locale/mesecons.fr.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons
|
||||||
|
|
||||||
|
### oldwires.lua ###
|
||||||
|
Mesecons=Mesecons
|
4
mesecons/locale/mesecons.ru.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons
|
||||||
|
|
||||||
|
### oldwires.lua ###
|
||||||
|
Mesecons=Мезеконы
|
5
mesecons/locale/mesecons.uk.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons
|
||||||
|
|
||||||
|
### oldwires.lua ###
|
||||||
|
Mesecons=Месекони
|
||||||
|
Mod that implements a ton of items related to digital circuitry.=Мод, який реалізує масу елементів, пов’язаних із цифровою схемою.
|
Before Width: | Height: | Size: 844 B After Width: | Height: | Size: 844 B |
Before Width: | Height: | Size: 838 B After Width: | Height: | Size: 838 B |
Before Width: | Height: | Size: 851 B After Width: | Height: | Size: 851 B |
Before Width: | Height: | Size: 846 B After Width: | Height: | Size: 846 B |
@ -17,6 +17,7 @@ function mesecon.on_rotate(pos, node, _, _, new_param2)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- An on_rotate callback for components which stay horizontal.
|
-- 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)
|
function mesecon.on_rotate_horiz(pos, node, user, mode, new_param2)
|
||||||
if not minetest.global_exists("screwdriver") or mode ~= screwdriver.ROTATE_FACE then
|
if not minetest.global_exists("screwdriver") or mode ~= screwdriver.ROTATE_FACE then
|
||||||
return false
|
return false
|
||||||
|
2
mesecons_blinkyplant/locale/mesecons_blinkyplant.de.tr
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# textdomain: mesecons_blinkyplant
|
||||||
|
Blinky Plant=Blinkpflanze
|
4
mesecons_blinkyplant/locale/mesecons_blinkyplant.fr.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_blinkyplant
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Blinky Plant=Plante clignotante
|
4
mesecons_blinkyplant/locale/mesecons_blinkyplant.ru.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_blinkyplant
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Blinky Plant=Мигающий цветок
|
4
mesecons_blinkyplant/locale/mesecons_blinkyplant.uk.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_blinkyplant
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Blinky Plant=Миготлива квітка
|
2
mesecons_button/locale/mesecons_button.de.tr
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# textdomain: mesecons_button
|
||||||
|
Button=Taster
|
4
mesecons_button/locale/mesecons_button.fr.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_button
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Button=Bouton
|
4
mesecons_button/locale/mesecons_button.ru.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_button
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Button=Кнопка
|
4
mesecons_button/locale/mesecons_button.uk.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_button
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Button=Кнопка
|
@ -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 "
|
||||||
|
5
mesecons_commandblock/locale/mesecons_commandblock.de.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_commandblock
|
||||||
|
Say <text> as the server=<Text> als Server sagen
|
||||||
|
Say <text> to <name> privately=<Text> an <Name> privat senden
|
||||||
|
Set health of <name> to <value> hitpoints=Gesundheit von <Name> auf <Wert> Trefferpunkte setzen
|
||||||
|
Command Block=Befehlsblock
|
7
mesecons_commandblock/locale/mesecons_commandblock.fr.tr
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# textdomain: mesecons_commandblock
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Say <text> as the server=Dire <text> au serveur
|
||||||
|
Say <text> to <name> privately=Dire <text> à <name> en privé
|
||||||
|
Set health of <name> to <value> hitpoints=Définir la vie de <name> sur <value> cœurs
|
||||||
|
Command Block=Bloc de commandes
|
7
mesecons_commandblock/locale/mesecons_commandblock.ru.tr
Normal 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=Комадный блок
|
7
mesecons_commandblock/locale/mesecons_commandblock.uk.tr
Normal 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=Командний блок
|
@ -27,20 +27,6 @@ local delaytime = { 0.1, 0.3, 0.5, 1.0 }
|
|||||||
|
|
||||||
for i = 1, 4 do
|
for i = 1, 4 do
|
||||||
|
|
||||||
local boxes = {
|
|
||||||
{ -6/16, -8/16, -6/16, 6/16, -7/16, 6/16 }, -- the main slab
|
|
||||||
|
|
||||||
{ -2/16, -7/16, -4/16, 2/16, -26/64, -3/16 }, -- the jeweled "on" indicator
|
|
||||||
{ -3/16, -7/16, -3/16, 3/16, -26/64, -2/16 },
|
|
||||||
{ -4/16, -7/16, -2/16, 4/16, -26/64, 2/16 },
|
|
||||||
{ -3/16, -7/16, 2/16, 3/16, -26/64, 3/16 },
|
|
||||||
{ -2/16, -7/16, 3/16, 2/16, -26/64, 4/16 },
|
|
||||||
|
|
||||||
{ -6/16, -7/16, -6/16, -4/16, -27/64, -4/16 }, -- the timer indicator
|
|
||||||
{ -8/16, -8/16, -1/16, -6/16, -7/16, 1/16 }, -- the two wire stubs
|
|
||||||
{ 6/16, -8/16, -1/16, 8/16, -7/16, 1/16 }
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Delayer definition defaults
|
-- Delayer definition defaults
|
||||||
local def = {
|
local def = {
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
@ -48,11 +34,14 @@ local def = {
|
|||||||
walkable = true,
|
walkable = true,
|
||||||
selection_box = {
|
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, -7/16, 8/16 },
|
||||||
},
|
},
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = boxes
|
fixed = {
|
||||||
|
{ -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab
|
||||||
|
{ -6/16, -7/16, -6/16, 6/16, -6/16, 6/16 }
|
||||||
|
},
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
@ -62,6 +51,8 @@ local def = {
|
|||||||
sounds = mesecon.node_sound.stone,
|
sounds = mesecon.node_sound.stone,
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
drop = "mesecons_delayer:delayer_off_1",
|
drop = "mesecons_delayer:delayer_off_1",
|
||||||
|
delayer_onstate = "mesecons_delayer:delayer_on_"..tostring(i),
|
||||||
|
delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i),
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Deactivated delayer definition defaults
|
-- Deactivated delayer definition defaults
|
||||||
@ -72,16 +63,17 @@ end
|
|||||||
|
|
||||||
local off_state = {
|
local off_state = {
|
||||||
description = S("Delayer"),
|
description = S("Delayer"),
|
||||||
|
inventory_image = "jeija_gate_off.png^jeija_delayer.png",
|
||||||
|
wield_image = "jeija_gate_off.png^jeija_delayer.png",
|
||||||
tiles = {
|
tiles = {
|
||||||
"mesecons_delayer_off_"..tostring(i)..".png",
|
"jeija_microcontroller_bottom.png^jeija_gate_output_off.png^jeija_gate_off.png^"..
|
||||||
"mesecons_delayer_bottom.png",
|
"jeija_delayer.png^mesecons_delayer_"..tostring(i)..".png",
|
||||||
"mesecons_delayer_ends_off.png",
|
"jeija_microcontroller_bottom.png^jeija_gate_output_off.png",
|
||||||
"mesecons_delayer_ends_off.png",
|
"jeija_gate_side.png^jeija_gate_side_output_off.png",
|
||||||
"mesecons_delayer_sides_off.png",
|
"jeija_gate_side.png",
|
||||||
"mesecons_delayer_sides_off.png"
|
"jeija_gate_side.png",
|
||||||
|
"jeija_gate_side.png",
|
||||||
},
|
},
|
||||||
inventory_image = "mesecons_delayer_off_1.png",
|
|
||||||
wield_image = "mesecons_delayer_off_1.png",
|
|
||||||
groups = off_groups,
|
groups = off_groups,
|
||||||
on_punch = function(pos, node, puncher)
|
on_punch = function(pos, node, puncher)
|
||||||
if minetest.is_protected(pos, puncher and puncher:get_player_name() or "") then
|
if minetest.is_protected(pos, puncher and puncher:get_player_name() or "") then
|
||||||
@ -93,7 +85,6 @@ local off_state = {
|
|||||||
param2 = node.param2
|
param2 = node.param2
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
delayer_onstate = "mesecons_delayer:delayer_on_"..tostring(i),
|
|
||||||
mesecons = {
|
mesecons = {
|
||||||
receptor =
|
receptor =
|
||||||
{
|
{
|
||||||
@ -103,6 +94,7 @@ local off_state = {
|
|||||||
effector =
|
effector =
|
||||||
{
|
{
|
||||||
rules = delayer_get_input_rules,
|
rules = delayer_get_input_rules,
|
||||||
|
action_off = delayer_deactivate,
|
||||||
action_on = delayer_activate
|
action_on = delayer_activate
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -115,13 +107,16 @@ minetest.register_node("mesecons_delayer:delayer_off_"..tostring(i), off_state)
|
|||||||
-- Activated delayer definition defaults
|
-- Activated delayer definition defaults
|
||||||
local on_state = {
|
local on_state = {
|
||||||
description = S("You hacker you"),
|
description = S("You hacker you"),
|
||||||
|
inventory_image = "jeija_gate_on.png^jeija_delayer.png",
|
||||||
|
wield_image = "jeija_gate_on.png^jeija_delayer.png",
|
||||||
tiles = {
|
tiles = {
|
||||||
"mesecons_delayer_on_"..tostring(i)..".png",
|
"jeija_microcontroller_bottom.png^jeija_gate_output_on.png^jeija_gate_on.png^"..
|
||||||
"mesecons_delayer_bottom.png",
|
"jeija_delayer.png^mesecons_delayer_"..tostring(i)..".png",
|
||||||
"mesecons_delayer_ends_on.png",
|
"jeija_microcontroller_bottom.png^jeija_gate_output_on.png",
|
||||||
"mesecons_delayer_ends_on.png",
|
"jeija_gate_side.png^jeija_gate_side_output_on.png",
|
||||||
"mesecons_delayer_sides_on.png",
|
"jeija_gate_side.png",
|
||||||
"mesecons_delayer_sides_on.png"
|
"jeija_gate_side.png",
|
||||||
|
"jeija_gate_side.png",
|
||||||
},
|
},
|
||||||
groups = {bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1},
|
groups = {bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1},
|
||||||
on_punch = function(pos, node, puncher)
|
on_punch = function(pos, node, puncher)
|
||||||
@ -134,7 +129,6 @@ local on_state = {
|
|||||||
param2 = node.param2
|
param2 = node.param2
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i),
|
|
||||||
mesecons = {
|
mesecons = {
|
||||||
receptor =
|
receptor =
|
||||||
{
|
{
|
||||||
@ -144,7 +138,8 @@ local on_state = {
|
|||||||
effector =
|
effector =
|
||||||
{
|
{
|
||||||
rules = delayer_get_input_rules,
|
rules = delayer_get_input_rules,
|
||||||
action_off = delayer_deactivate
|
action_off = delayer_deactivate,
|
||||||
|
action_on = delayer_activate
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
3
mesecons_delayer/locale/mesecons_delayer.de.tr
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# textdomain: mesecons_delayer
|
||||||
|
Delayer=Verzögerer
|
||||||
|
You hacker you=Du Hacker, Du
|
5
mesecons_delayer/locale/mesecons_delayer.fr.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_delayer
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Delayer=Retardateur
|
||||||
|
You hacker you=Vous êtes un pirate informatique
|
5
mesecons_delayer/locale/mesecons_delayer.ru.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_delayer
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Delayer=Элемент задержки
|
||||||
|
You hacker you=Ти хакер, ти
|
5
mesecons_delayer/locale/mesecons_delayer.uk.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_delayer
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Delayer=Затримувач
|
||||||
|
You hacker you=Ти хакер, ти
|
BIN
mesecons_delayer/textures/jeija_delayer.png
Normal file
After Width: | Height: | Size: 149 B |
Before Width: | Height: | Size: 84 B After Width: | Height: | Size: 84 B |
Before Width: | Height: | Size: 84 B After Width: | Height: | Size: 84 B |
Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 98 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 99 B |
Before Width: | Height: | Size: 136 B After Width: | Height: | Size: 136 B |
Before Width: | Height: | Size: 109 B After Width: | Height: | Size: 109 B |
Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 110 B |
BIN
mesecons_delayer/textures/mesecons_delayer_1.png
Normal file
After Width: | Height: | Size: 338 B |
BIN
mesecons_delayer/textures/mesecons_delayer_2.png
Normal file
After Width: | Height: | Size: 337 B |
BIN
mesecons_delayer/textures/mesecons_delayer_3.png
Normal file
After Width: | Height: | Size: 339 B |
BIN
mesecons_delayer/textures/mesecons_delayer_4.png
Normal file
After Width: | Height: | Size: 334 B |
Before Width: | Height: | Size: 221 B |
Before Width: | Height: | Size: 176 B |
Before Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 449 B |
Before Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 446 B |
Before Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 541 B |
Before Width: | Height: | Size: 538 B |
Before Width: | Height: | Size: 173 B |
Before Width: | Height: | Size: 181 B |
@ -4,6 +4,16 @@ local side_texture = mesecon.texture.steel_block or "mesecons_detector_side.png"
|
|||||||
|
|
||||||
local GET_COMMAND = "GET"
|
local GET_COMMAND = "GET"
|
||||||
|
|
||||||
|
|
||||||
|
local function comma_list_to_table(comma_list)
|
||||||
|
local tbl = {}
|
||||||
|
for _, str in ipairs(string.split(comma_list:gsub("%s", ""), ",")) do
|
||||||
|
tbl[str] = true
|
||||||
|
end
|
||||||
|
return tbl
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Object detector
|
-- Object detector
|
||||||
-- Detects players in a certain radius
|
-- Detects players in a certain radius
|
||||||
-- The radius can be specified in mesecons/settings.lua
|
-- The radius can be specified in mesecons/settings.lua
|
||||||
@ -35,10 +45,7 @@ local function object_detector_scan(pos)
|
|||||||
if next(objs) == nil then return false end
|
if next(objs) == nil then return false end
|
||||||
|
|
||||||
local scanname = minetest.get_meta(pos):get_string("scanname")
|
local scanname = minetest.get_meta(pos):get_string("scanname")
|
||||||
local scan_for = {}
|
local scan_for = comma_list_to_table(scanname)
|
||||||
for _, str in pairs(string.split(scanname:gsub(" ", ""), ",")) do
|
|
||||||
scan_for[str] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
local every_player = scanname == ""
|
local every_player = scanname == ""
|
||||||
for _, obj in pairs(objs) do
|
for _, obj in pairs(objs) do
|
||||||
@ -59,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
|
||||||
@ -103,6 +111,7 @@ minetest.register_node("mesecons_detector:object_detector_on", {
|
|||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("mesecons_luacontroller") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'mesecons_detector:object_detector_off',
|
output = 'mesecons_detector:object_detector_off',
|
||||||
recipe = {
|
recipe = {
|
||||||
@ -111,6 +120,7 @@ minetest.register_craft({
|
|||||||
{"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',
|
||||||
@ -188,8 +198,9 @@ local function node_detector_scan(pos)
|
|||||||
vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1))
|
vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1))
|
||||||
).name
|
).name
|
||||||
local scanname = meta:get_string("scanname")
|
local scanname = meta:get_string("scanname")
|
||||||
|
local scan_for = comma_list_to_table(scanname)
|
||||||
|
|
||||||
return (frontname == scanname) or
|
return (scan_for[frontname]) or
|
||||||
(frontname ~= "air" and frontname ~= "ignore" and scanname == "")
|
(frontname ~= "air" and frontname ~= "ignore" and scanname == "")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -215,10 +226,10 @@ local node_detector_digiline = {
|
|||||||
|
|
||||||
if type(msg) == "table" then
|
if type(msg) == "table" then
|
||||||
if msg.distance or msg.scanname then
|
if msg.distance or msg.scanname then
|
||||||
if msg.distance then
|
if type(msg.distance) == "number" or type(msg.distance) == "string" then
|
||||||
meta:set_string("distance", msg.distance)
|
meta:set_string("distance", msg.distance)
|
||||||
end
|
end
|
||||||
if msg.scanname then
|
if type(msg.scanname) == "string" then
|
||||||
meta:set_string("scanname", msg.scanname)
|
meta:set_string("scanname", msg.scanname)
|
||||||
end
|
end
|
||||||
node_detector_make_formspec(pos)
|
node_detector_make_formspec(pos)
|
||||||
@ -232,7 +243,7 @@ local node_detector_digiline = {
|
|||||||
else
|
else
|
||||||
if msg == GET_COMMAND then
|
if msg == GET_COMMAND then
|
||||||
node_detector_send_node_name(pos, node, channel, meta)
|
node_detector_send_node_name(pos, node, channel, meta)
|
||||||
else
|
elseif type(msg) == "string" then
|
||||||
meta:set_string("scanname", msg)
|
meta:set_string("scanname", msg)
|
||||||
node_detector_make_formspec(pos)
|
node_detector_make_formspec(pos)
|
||||||
end
|
end
|
||||||
@ -278,6 +289,7 @@ minetest.register_node("mesecons_detector:node_detector_on", {
|
|||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("mesecons_luacontroller") then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'mesecons_detector:node_detector_off',
|
output = 'mesecons_detector:node_detector_off',
|
||||||
recipe = {
|
recipe = {
|
||||||
@ -286,6 +298,7 @@ minetest.register_craft({
|
|||||||
{"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',
|
||||||
|
3
mesecons_detector/locale/mesecons_detector.de.tr
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# textdomain: mesecons_detector
|
||||||
|
Player Detector=Spielerdetektor
|
||||||
|
Node Detector=Blockdetektor
|
5
mesecons_detector/locale/mesecons_detector.fr.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_detector
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Player Detector=Détecteur de joueur
|
||||||
|
Node Detector=Détecteur de bloc
|
5
mesecons_detector/locale/mesecons_detector.ru.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_detector
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Player Detector=Детектор игрока
|
||||||
|
Node Detector=Детектор блока
|
5
mesecons_detector/locale/mesecons_detector.uk.tr
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# textdomain: mesecons_detector
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Player Detector=Детектор гравця
|
||||||
|
Node Detector=Детектор блоку
|
@ -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
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
name = mesecons_doors
|
|
||||||
depends = mesecons, doors
|
|
||||||
optional_depends = xpanes
|
|
@ -18,7 +18,7 @@ minetest.register_node("mesecons_extrawires:corner_on", {
|
|||||||
{ name = "jeija_insulated_wire_ends_on.png", backface_culling = true },
|
{ name = "jeija_insulated_wire_ends_on.png", backface_culling = true },
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -33,7 +33,7 @@ minetest.register_node("mesecons_extrawires:corner_on", {
|
|||||||
offstate = "mesecons_extrawires:corner_off"
|
offstate = "mesecons_extrawires:corner_off"
|
||||||
}},
|
}},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("mesecons_extrawires:corner_off", {
|
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 },
|
{ name = "jeija_insulated_wire_ends_off.png", backface_culling = true },
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -59,7 +59,7 @@ minetest.register_node("mesecons_extrawires:corner_off", {
|
|||||||
onstate = "mesecons_extrawires:corner_on"
|
onstate = "mesecons_extrawires:corner_on"
|
||||||
}},
|
}},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -41,7 +41,7 @@ for k, state in ipairs(doublecorner_states) do
|
|||||||
{ name = "jeija_insulated_wire_ends_" .. w2 .. ".png", backface_culling = true },
|
{ name = "jeija_insulated_wire_ends_" .. w2 .. ".png", backface_culling = true },
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -56,7 +56,7 @@ for k, state in ipairs(doublecorner_states) do
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -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");
|
||||||
|
if core.registered_nodes["mesecons_gamecompat:mese"] then
|
||||||
dofile(minetest.get_modpath("mesecons_extrawires").."/mesewire.lua");
|
dofile(minetest.get_modpath("mesecons_extrawires").."/mesewire.lua");
|
||||||
|
end
|
||||||
|
8
mesecons_extrawires/locale/mesecons_extrawires.de.tr
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# textdomain: mesecons_extrawires
|
||||||
|
Insulated Mesecon Corner=Isolierte Meseconecke
|
||||||
|
Insulated Mesecon Crossover=Isolierter Meseconübergang
|
||||||
|
You hacker you!=Sie Hacker!
|
||||||
|
Insulated Mesecon Double Corner=Isolierte Mesecondoppelecke
|
||||||
|
Mese Wire=Mesedraht
|
||||||
|
Insulated Mesecon T-junction=Isolierte Mesecongabelung
|
||||||
|
Vertical Mesecon=Vertikaler Mesecon
|
20
mesecons_extrawires/locale/mesecons_extrawires.fr.tr
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# textdomain: mesecons_extrawires
|
||||||
|
|
||||||
|
### corner.lua ###
|
||||||
|
Insulated Mesecon Corner=Coin de Mesecon isolé
|
||||||
|
|
||||||
|
### crossover.lua ###
|
||||||
|
Insulated Mesecon Crossover=Croisement de Mesecon isolé
|
||||||
|
You hacker you!=Vous êtes un pirate informatique !
|
||||||
|
|
||||||
|
### doublecorner.lua ###
|
||||||
|
Insulated Mesecon Double Corner=Double coin de Mesecon isolé
|
||||||
|
|
||||||
|
### mesewire.lua ###
|
||||||
|
Mese Wire=Câble de Mesecon
|
||||||
|
|
||||||
|
### tjunction.lua ###
|
||||||
|
Insulated Mesecon T-junction=Croisement en T de Mesecon isolé
|
||||||
|
|
||||||
|
### vertical.lua ###
|
||||||
|
Vertical Mesecon=Mesecon vertical
|
20
mesecons_extrawires/locale/mesecons_extrawires.ru.tr
Normal 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=Вертикальный мезекон
|
20
mesecons_extrawires/locale/mesecons_extrawires.uk.tr
Normal 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=Ізольований месекон (T-з'єднання)
|
||||||
|
|
||||||
|
### vertical.lua ###
|
||||||
|
Vertical Mesecon=Вертикальний месекон
|
@ -29,7 +29,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
|
|||||||
"jeija_insulated_wire_ends_on.png"
|
"jeija_insulated_wire_ends_on.png"
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -45,7 +45,7 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
|
|||||||
offstate = "mesecons_extrawires:tjunction_off"
|
offstate = "mesecons_extrawires:tjunction_off"
|
||||||
}},
|
}},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("mesecons_extrawires:tjunction_off", {
|
minetest.register_node("mesecons_extrawires:tjunction_off", {
|
||||||
@ -60,7 +60,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
|
|||||||
"jeija_insulated_wire_ends_off.png"
|
"jeija_insulated_wire_ends_off.png"
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -75,7 +75,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
|
|||||||
onstate = "mesecons_extrawires:tjunction_on"
|
onstate = "mesecons_extrawires:tjunction_on"
|
||||||
}},
|
}},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -40,17 +40,24 @@ 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 def = minetest.registered_nodes[nodename]
|
||||||
|
return def and def.is_vertical_conductor
|
||||||
|
end
|
||||||
|
|
||||||
local vertical_updatepos = function (pos)
|
local vertical_updatepos = function (pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
if minetest.registered_nodes[node.name]
|
if not is_vertical_conductor(node.name) then
|
||||||
and minetest.registered_nodes[node.name].is_vertical_conductor then
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local node_above = minetest.get_node(vector.add(pos, vertical_rules[1]))
|
local node_above = minetest.get_node(vector.add(pos, vertical_rules[1]))
|
||||||
local node_below = minetest.get_node(vector.add(pos, vertical_rules[2]))
|
local node_below = minetest.get_node(vector.add(pos, vertical_rules[2]))
|
||||||
|
|
||||||
local above = minetest.registered_nodes[node_above.name]
|
local above = is_vertical_conductor(node_above.name)
|
||||||
and minetest.registered_nodes[node_above.name].is_vertical_conductor
|
local below = is_vertical_conductor(node_below.name)
|
||||||
local below = minetest.registered_nodes[node_below.name]
|
|
||||||
and minetest.registered_nodes[node_below.name].is_vertical_conductor
|
|
||||||
|
|
||||||
mesecon.on_dignode(pos, node)
|
mesecon.on_dignode(pos, node)
|
||||||
|
|
||||||
@ -69,7 +76,6 @@ local vertical_updatepos = function (pos)
|
|||||||
minetest.set_node(pos, {name = newname})
|
minetest.set_node(pos, {name = newname})
|
||||||
mesecon.on_placenode(pos, {name = newname})
|
mesecon.on_placenode(pos, {name = newname})
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
local vertical_update = function (pos)
|
local vertical_update = function (pos)
|
||||||
vertical_updatepos(pos) -- this one
|
vertical_updatepos(pos) -- this one
|
||||||
@ -92,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},
|
||||||
@ -126,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 = {
|
||||||
@ -158,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 = {
|
||||||
|
@ -20,10 +20,10 @@ plg.register_nodes = function(template)
|
|||||||
|
|
||||||
-- build top texture string
|
-- build top texture string
|
||||||
local texture = "jeija_fpga_top.png"
|
local texture = "jeija_fpga_top.png"
|
||||||
if a == 1 then texture = texture .. "^jeija_microcontroller_LED_A.png" end
|
if a == 1 then texture = texture .. "^jeija_luacontroller_LED_A.png" end
|
||||||
if b == 1 then texture = texture .. "^jeija_microcontroller_LED_B.png" end
|
if b == 1 then texture = texture .. "^jeija_luacontroller_LED_B.png" end
|
||||||
if c == 1 then texture = texture .. "^jeija_microcontroller_LED_C.png" end
|
if c == 1 then texture = texture .. "^jeija_luacontroller_LED_C.png" end
|
||||||
if d == 1 then texture = texture .. "^jeija_microcontroller_LED_D.png" end
|
if d == 1 then texture = texture .. "^jeija_luacontroller_LED_D.png" end
|
||||||
ndef.tiles[1] = texture
|
ndef.tiles[1] = texture
|
||||||
ndef.inventory_image = texture
|
ndef.inventory_image = texture
|
||||||
|
|
||||||
|
3
mesecons_fpga/locale/mesecons_fpga.de.tr
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# textdomain: mesecons_fpga
|
||||||
|
FPGA=FPGA
|
||||||
|
FPGA Programmer=FPGA-Programmierer
|
7
mesecons_fpga/locale/mesecons_fpga.fr.tr
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# textdomain: mesecons_fpga
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
FPGA=Circuit logique programmable (FPGA)
|
||||||
|
|
||||||
|
### tool.lua ###
|
||||||
|
FPGA Programmer=Programmateur de circuit logique
|
7
mesecons_fpga/locale/mesecons_fpga.ru.tr
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# textdomain: mesecons_fpga
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
FPGA=ПЛИС
|
||||||
|
|
||||||
|
### tool.lua ###
|
||||||
|
FPGA Programmer=ПЛИС-программер
|
7
mesecons_fpga/locale/mesecons_fpga.uk.tr
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# textdomain: mesecons_fpga
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
FPGA=ПКВМ
|
||||||
|
|
||||||
|
### tool.lua ###
|
||||||
|
FPGA Programmer=ПКВМ-программер
|
72
mesecons_gamecompat/compat_hades.lua
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
--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
|
88
mesecons_gamecompat/compat_mcla.lua
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
--Aliases
|
||||||
|
|
||||||
|
minetest.register_alias("mesecons_gamecompat:chest", "mcl_chests:chest")
|
||||||
|
minetest.register_alias("mesecons_gamecompat:chest_locked", "mcl_chests:chest")
|
||||||
|
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: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:torch", "mcl_torches:torch")
|
||||||
|
|
||||||
|
if minetest.get_modpath("mcl_dyes") then
|
||||||
|
for color, def in ipairs(mcl_dyes.colors) do
|
||||||
|
minetest.register_alias("mesecons_gamecompat:dye_" .. def.mcl2, "mcl_dyes:" .. color)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Sounds
|
||||||
|
|
||||||
|
mesecon.node_sound.default = mcl_sounds.node_sound_defaults()
|
||||||
|
mesecon.node_sound.glass = mcl_sounds.node_sound_glass_defaults()
|
||||||
|
mesecon.node_sound.leaves = mcl_sounds.node_sound_leaves_defaults()
|
||||||
|
mesecon.node_sound.stone = mcl_sounds.node_sound_stone_defaults()
|
||||||
|
mesecon.node_sound.wood = mcl_sounds.node_sound_wood_defaults()
|
||||||
|
|
||||||
|
if minetest.get_modpath("mcl_fire") then
|
||||||
|
mesecon.sound_name.fire = "fire_fire"
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.get_modpath("mcl_tnt") then
|
||||||
|
mesecon.sound_name.explode = "tnt_explode"
|
||||||
|
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"}}
|
||||||
|
})
|
@ -48,24 +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",
|
||||||
"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
|
||||||
|
@ -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,29 +82,25 @@ local function meseconify_door(name)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
meseconify_door("doors:door_wood")
|
|
||||||
meseconify_door("doors:door_steel")
|
|
||||||
meseconify_door("doors:door_glass")
|
|
||||||
meseconify_door("doors:door_obsidian_glass")
|
|
||||||
meseconify_door("xpanes:door_steel_bar")
|
|
||||||
|
|
||||||
-- Trapdoor
|
-- Trapdoor
|
||||||
local function trapdoor_switch(pos, node)
|
local function trapdoor_switch(name)
|
||||||
|
return function(pos, node)
|
||||||
local state = minetest.get_meta(pos):get_int("state")
|
local state = minetest.get_meta(pos):get_int("state")
|
||||||
|
|
||||||
if state == 1 then
|
if state == 1 then
|
||||||
minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
|
minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
|
||||||
minetest.set_node(pos, {name="doors:trapdoor", param2 = node.param2})
|
minetest.set_node(pos, {name=name, param2 = node.param2})
|
||||||
else
|
else
|
||||||
minetest.sound_play("doors_door_open", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
|
minetest.sound_play("doors_door_open", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
|
||||||
minetest.set_node(pos, {name="doors:trapdoor_open", param2 = node.param2})
|
minetest.set_node(pos, {name=name.."_open", param2 = node.param2})
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.get_meta(pos):set_int("state", state == 1 and 0 or 1)
|
minetest.get_meta(pos):set_int("state", state == 1 and 0 or 1)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function meseconify_trapdoor(name)
|
||||||
|
local override
|
||||||
if doors and doors.get then
|
if doors and doors.get then
|
||||||
local override = {
|
override = {
|
||||||
mesecons = {effector = {
|
mesecons = {effector = {
|
||||||
action_on = function(pos)
|
action_on = function(pos)
|
||||||
local door = doors.get(pos)
|
local door = doors.get(pos)
|
||||||
@ -111,30 +116,30 @@ if doors and doors.get then
|
|||||||
end,
|
end,
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
minetest.override_item("doors:trapdoor", override)
|
|
||||||
minetest.override_item("doors:trapdoor_open", override)
|
|
||||||
minetest.override_item("doors:trapdoor_steel", override)
|
|
||||||
minetest.override_item("doors:trapdoor_steel_open", override)
|
|
||||||
|
|
||||||
if minetest.registered_items["xpanes:trapdoor_steel_bar"] then
|
|
||||||
minetest.override_item("xpanes:trapdoor_steel_bar", override)
|
|
||||||
minetest.override_item("xpanes:trapdoor_steel_bar_open", override)
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
else
|
||||||
if minetest.registered_nodes["doors:trapdoor"] then
|
override = {
|
||||||
minetest.override_item("doors:trapdoor", {
|
|
||||||
mesecons = {effector = {
|
mesecons = {effector = {
|
||||||
action_on = trapdoor_switch,
|
action_on = trapdoor_switch(name),
|
||||||
action_off = trapdoor_switch
|
action_off = trapdoor_switch(name)
|
||||||
}},
|
}},
|
||||||
})
|
}
|
||||||
|
end
|
||||||
|
|
||||||
minetest.override_item("doors:trapdoor_open", {
|
if minetest.registered_items[name] then
|
||||||
mesecons = {effector = {
|
minetest.override_item(name, override)
|
||||||
action_on = trapdoor_switch,
|
minetest.override_item(name.."_open", override)
|
||||||
action_off = trapdoor_switch
|
|
||||||
}},
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
end
|
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)
|
@ -13,3 +13,17 @@ if minetest.get_modpath("default") then
|
|||||||
minetest.log("info", "Mesecons: detected Minetest Game for game compatibility")
|
minetest.log("info", "Mesecons: detected Minetest Game for game compatibility")
|
||||||
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_redstone") 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")
|
||||||
|
end
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
name = mesecons_gamecompat
|
name = mesecons_gamecompat
|
||||||
depends = mesecons
|
depends = mesecons
|
||||||
optional_depends = fire, default, dye, mesecons_mvps, tnt
|
optional_depends = fire, default, dye, mesecons_mvps, tnt, doors, beds, mcl_fire, mcl_core, mcl_dye, mcl_tnt, hades_sounds
|
||||||
|
@ -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 }
|
||||||
@ -87,7 +89,7 @@ local function register_gate(name, inputnumber, assess, recipe, description)
|
|||||||
description = description,
|
description = description,
|
||||||
inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png",
|
inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
drop = basename.."_off",
|
drop = basename.."_off",
|
||||||
@ -100,7 +102,7 @@ local function register_gate(name, inputnumber, assess, recipe, description)
|
|||||||
offstate = basename.."_off",
|
offstate = basename.."_off",
|
||||||
inputnumber = inputnumber,
|
inputnumber = inputnumber,
|
||||||
after_dig_node = mesecon.do_cooldown,
|
after_dig_node = mesecon.do_cooldown,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
},{
|
},{
|
||||||
tiles = {
|
tiles = {
|
||||||
"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
|
"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
|
||||||
@ -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"))
|
||||||
|
8
mesecons_gates/locale/mesecons_gates.ru.tr
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# textdomain: mesecons_gates
|
||||||
|
Diode=Диод
|
||||||
|
NOT Gate=НЕ-шлюз
|
||||||
|
AND Gate=И-шлюз
|
||||||
|
NAND Gate=NAND-шлюз
|
||||||
|
XOR Gate=XOR-шлюз
|
||||||
|
NOR Gate=NOR-шлюз
|
||||||
|
OR Gate=ИЛИ-шлюз
|
8
mesecons_gates/locale/mesecons_gates.uk.tr
Normal file
@ -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 перехідник
|
8
mesecons_gates/locale/template.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# textdomain: mesecons_gates
|
||||||
|
Diode=
|
||||||
|
NOT Gate=
|
||||||
|
AND Gate=
|
||||||
|
NAND Gate=
|
||||||
|
XOR Gate=
|
||||||
|
NOR Gate=
|
||||||
|
OR Gate=
|
2
mesecons_hydroturbine/locale/mesecons_hydroturbine.de.tr
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# textdomain: mesecons_hydroturbine
|
||||||
|
Water Turbine=Wasserturbine
|
4
mesecons_hydroturbine/locale/mesecons_hydroturbine.fr.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_hydroturbine
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Water Turbine=Détecteur de courant
|
4
mesecons_hydroturbine/locale/mesecons_hydroturbine.ru.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_hydroturbine
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Water Turbine=Гидротурбина
|
4
mesecons_hydroturbine/locale/mesecons_hydroturbine.uk.tr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# textdomain: mesecons_hydroturbine
|
||||||
|
|
||||||
|
### init.lua ###
|
||||||
|
Water Turbine=Гідротурбіна
|
@ -17,7 +17,7 @@ minetest.register_node("mesecons_insulated:insulated_on", {
|
|||||||
"jeija_insulated_wire_sides_on.png"
|
"jeija_insulated_wire_sides_on.png"
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -39,7 +39,7 @@ minetest.register_node("mesecons_insulated:insulated_on", {
|
|||||||
rules = insulated_wire_get_rules
|
rules = insulated_wire_get_rules
|
||||||
}},
|
}},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("mesecons_insulated:insulated_off", {
|
minetest.register_node("mesecons_insulated:insulated_off", {
|
||||||
@ -54,7 +54,7 @@ minetest.register_node("mesecons_insulated:insulated_off", {
|
|||||||
"jeija_insulated_wire_sides_off.png"
|
"jeija_insulated_wire_sides_off.png"
|
||||||
},
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "4dir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -75,7 +75,7 @@ minetest.register_node("mesecons_insulated:insulated_off", {
|
|||||||
rules = insulated_wire_get_rules
|
rules = insulated_wire_get_rules
|
||||||
}},
|
}},
|
||||||
on_blast = mesecon.on_blastnode,
|
on_blast = mesecon.on_blastnode,
|
||||||
on_rotate = mesecon.on_rotate_horiz,
|
on_rotate = mesecon.on_rotate,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|