Compare commits
591 Commits
frames-exp
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
88f42539bb | ||
|
b2a124dd83 | ||
|
34f2894321 | ||
|
fb4fef783b | ||
|
4a9ad94bf9 | ||
|
f3828c1943 | ||
|
0e10e8360d | ||
|
fbc4cc8511 | ||
|
904800abde | ||
|
1a45ad19d4 | ||
|
e90b28895c | ||
|
7696546d47 | ||
|
da95be53ec | ||
|
76a39e71b9 | ||
|
08b660ba99 | ||
|
cb84439266 | ||
|
c41f6509cf | ||
|
d5df30c3ff | ||
|
e66bb281a4 | ||
|
768fbecc64 | ||
|
707fa5a97c | ||
|
505ad8d045 | ||
|
a75cb7252d | ||
|
662cc7e7ef | ||
|
e12220be79 | ||
|
19e045e042 | ||
|
e8e5df3f4a | ||
|
d119a67482 | ||
|
bb05ff8fd2 | ||
|
d1bf386b80 | ||
|
dc4f4f66e6 | ||
|
62fdb853ec | ||
|
8a987bb361 | ||
|
e8f1033d49 | ||
|
a9b10cc4b1 | ||
|
b81d1d3f2d | ||
|
c9ba4b329d | ||
|
700faca5cb | ||
|
c14521cbd2 | ||
|
4f78a69ffc | ||
|
5f6b87d43a | ||
|
6e58a8e939 | ||
|
8ebc1de29c | ||
|
e1a71a8fb0 | ||
|
701240bc3a | ||
|
aa82fa1d13 | ||
|
bdd13beeff | ||
|
f5bf0d98b1 | ||
|
3cafe7553a | ||
|
bc26b047d2 | ||
|
83ec1b2476 | ||
|
c068edec65 | ||
|
4ecb3d4334 | ||
|
d40946fa38 | ||
|
dc0689018d | ||
|
51d7bd81ff | ||
|
2b2411d1ee | ||
|
8409be32fc | ||
|
3d52b679b0 | ||
|
44cb8df048 | ||
|
f702a6597b | ||
|
e931041358 | ||
|
5b97d94dae | ||
|
92dd0f4af8 | ||
|
29f746369f | ||
|
488f80d950 | ||
|
d74c250a40 | ||
|
2e7859c35e | ||
|
86a04d860e | ||
|
9b40d02fbd | ||
|
d1b54a573c | ||
|
f013d2dd1f | ||
|
80c6a14566 | ||
|
fb93388f06 | ||
|
41f175986d | ||
|
6af0376c23 | ||
|
0fcc7a14c2 | ||
|
68fac3ed7b | ||
|
395089dfd8 | ||
|
6664714313 | ||
|
c93bfefd9f | ||
|
689766f15a | ||
|
a5db87f0f1 | ||
|
86fb981b44 | ||
|
215de5487b | ||
|
930c51eef9 | ||
|
37d49142cf | ||
|
e056800cea | ||
|
a84b5f3b28 | ||
|
9d5bd90b57 | ||
|
16146231b8 | ||
|
d4162be9a7 | ||
|
db480011fb | ||
|
4cc124ff9e | ||
|
bf58c77316 | ||
|
a495541c09 | ||
|
1a75cd9254 | ||
|
51f9df2cf2 | ||
|
9167d4fc6f | ||
|
844e2fad47 | ||
|
e1bb29c338 | ||
|
987cc5a6a4 | ||
|
83a4bb60ca | ||
|
97e1c8b7f2 | ||
|
9cc1a78371 | ||
|
42efc7e47c | ||
|
adc638bd8c | ||
|
557dc4db1b | ||
|
e65c8b7130 | ||
|
69feeef0af | ||
|
fc2f6d8976 | ||
|
06abe11dd0 | ||
|
6b8011eba7 | ||
|
1d20af1bcb | ||
|
7c11ff1876 | ||
|
a34ea59105 | ||
|
33455328bd | ||
|
14e0c4c48c | ||
|
170d3e09c5 | ||
|
970f608078 | ||
|
39bfb76cfb | ||
|
d2fb249d94 | ||
|
fab2c492c4 | ||
|
54004f4951 | ||
|
8479a8c984 | ||
|
0e9caf069d | ||
|
869d0597ef | ||
|
ca86550f26 | ||
|
a3a959ab5e | ||
|
3f8478086d | ||
|
092ab7e738 | ||
|
b6d343e928 | ||
|
bdd45f161a | ||
|
5d05f59482 | ||
|
a353a807bd | ||
|
db0f8e04a1 | ||
|
64f38f423e | ||
|
ceead2b5ab | ||
|
4eaf48290f | ||
|
11f20da744 | ||
|
7244f86ee5 | ||
|
af39221df9 | ||
|
72c536c04e | ||
|
b67bca1277 | ||
|
ef8bb38bfd | ||
|
6c4e90d39c | ||
|
4dda59da0c | ||
|
338f3b6a99 | ||
|
eb344ad804 | ||
|
78f16c3e8e | ||
|
9755127ffd | ||
|
b7cecd7f3d | ||
|
6abd857b3f | ||
|
383f7df22d | ||
|
767f5346e9 | ||
|
df15a5ee65 | ||
|
cb5e3e8ff4 | ||
|
600fc6ff7e | ||
|
f420aa4d37 | ||
|
7d76ff8d38 | ||
|
408128d800 | ||
|
2a7dbe0506 | ||
|
018d66f791 | ||
|
6341ac9638 | ||
|
0a701a0dcf | ||
|
7ea645496d | ||
|
10307f23a7 | ||
|
7d5329834d | ||
|
ae7625d9f7 | ||
|
0ad8012cd3 | ||
|
3ba5354f83 | ||
|
bf3498b736 | ||
|
e5f40f5c39 | ||
|
c4acb7225a | ||
|
8b222bc66b | ||
|
9382558d82 | ||
|
343c7946d9 | ||
|
5b473927ca | ||
|
088eea1e3b | ||
|
9cc5ad3d90 | ||
|
b4659d9356 | ||
|
186f9b70ac | ||
|
ec6354b6a5 | ||
|
67d5a88d05 | ||
|
35da22fcd2 | ||
|
60b5ca5594 | ||
|
dd580e7684 | ||
|
663d272870 | ||
|
32b6ca9816 | ||
|
05dfc14fdb | ||
|
314d8c6c23 | ||
|
8596ca7c19 | ||
|
d26797d9de | ||
|
ed2aab46e1 | ||
|
e3b33e21c7 | ||
|
ff6675ef28 | ||
|
d3f40e0fd0 | ||
|
1765c31eaa | ||
|
11610cd9cb | ||
|
fd609d0f7b | ||
|
1b0669d5eb | ||
|
dab5fa7105 | ||
|
5e19514c60 | ||
|
0139eab9a2 | ||
|
1f49ef973d | ||
|
cbe97434dc | ||
|
73afc40d9c | ||
|
b739ed6cb1 | ||
|
51be33deea | ||
|
1810f417d2 | ||
|
4888581bee | ||
|
8cab1a0aec | ||
|
5dd6191175 | ||
|
06dec20326 | ||
|
1da213a5e4 | ||
|
26de2f7c88 | ||
|
8ccb6d97ec | ||
|
6b52c78963 | ||
|
5f1919d2bc | ||
|
d39797aad8 | ||
|
1475ee6e40 | ||
|
e501c4622b | ||
|
cfd4cb7871 | ||
|
2b0a283556 | ||
|
63efc395cd | ||
|
7890ffe46b | ||
|
428b1b8709 | ||
|
99bebc8008 | ||
|
03df68461a | ||
|
e8ac23e111 | ||
|
413d20d6c8 | ||
|
322615542e | ||
|
3db3a9cc32 | ||
|
2258adb2a9 | ||
|
097d033585 | ||
|
584cd82b58 | ||
|
0c144cd75c | ||
|
85a984982c | ||
|
4a993c2de8 | ||
|
83c6494166 | ||
|
f9a8593c87 | ||
|
c5127f4b1b | ||
|
46f3f8ec7d | ||
|
e16a39b385 | ||
|
8ef83e8f7e | ||
|
798a885807 | ||
|
71b13ab0e8 | ||
|
2d86ee64e3 | ||
|
54b6d9976c | ||
|
e7d06b33d1 | ||
|
1b1780946e | ||
|
28ed3b29a3 | ||
|
ec3e3b348d | ||
|
cfd788358c | ||
|
e2ca7166f9 | ||
|
32d776293b | ||
|
a529baba47 | ||
|
a793747d92 | ||
|
d732c8dfbd | ||
|
7cd848a050 | ||
|
fcef0ef987 | ||
|
ae7f49de38 | ||
|
84812d2307 | ||
|
055ee23431 | ||
|
a4f7996b56 | ||
|
24eca043d0 | ||
|
e393617fa1 | ||
|
35b0f068af | ||
|
4cf1e63adb | ||
|
1615681e89 | ||
|
3f179e4c53 | ||
|
6b800758fb | ||
|
137695ea67 | ||
|
b00e942824 | ||
|
cf75916ea7 | ||
|
4874e29025 | ||
|
78bfa4f893 | ||
|
ab6f2b2556 | ||
|
b8c9028681 | ||
|
19f74d11ba | ||
|
3624aabcf9 | ||
|
e6f715062d | ||
|
db35c9b54b | ||
|
fe6965d89a | ||
|
01fd5d6e6b | ||
|
8b16fc1176 | ||
|
0113975160 | ||
|
c8cbd261ee | ||
|
c6464d3ebe | ||
|
3eefa2f181 | ||
|
4b179821d3 | ||
|
7ed1aa9398 | ||
|
ce40d1cfb8 | ||
|
5ac93cccc9 | ||
|
cbfeb0192c | ||
|
bccefd6997 | ||
|
d5db189cf4 | ||
|
48e02b8452 | ||
|
72d541a607 | ||
|
a13e7b7ed1 | ||
|
91e12c41fd | ||
|
96788677bb | ||
|
6ef3438832 | ||
|
41a10a86d5 | ||
|
c17732b16f | ||
|
49e82a604b | ||
|
3fd53dfe95 | ||
|
3bcd99f098 | ||
|
122e97ebd9 | ||
|
63fa7a856e | ||
|
4735055b94 | ||
|
d452d16fa6 | ||
|
e08de57ec6 | ||
|
9444eff7f7 | ||
|
18265de3b3 | ||
|
3dc01a6720 | ||
|
d9bf9830b0 | ||
|
0c3f55e0c9 | ||
|
6dd7ffc455 | ||
|
a0cf9eb8f3 | ||
|
b9173be3b8 | ||
|
91fceece18 | ||
|
5a395928fa | ||
|
f330d58354 | ||
|
56e96b2593 | ||
|
80f79f5e1e | ||
|
a8c097bcd9 | ||
|
3cc568ddbd | ||
|
9d3f7304fb | ||
|
e4c34c9c32 | ||
|
1d81e6d4d1 | ||
|
581afee261 | ||
|
9087abcde0 | ||
|
00f61dfb81 | ||
|
a8b711a7f4 | ||
|
fe4372649f | ||
|
3252da05d1 | ||
|
f250e1632f | ||
|
86dd5852aa | ||
|
c38da0945c | ||
|
ec73a8508f | ||
|
7e92fe0a46 | ||
|
9e1c5740d3 | ||
|
d6b0deb989 | ||
|
1a7a17f3d7 | ||
|
3726bd9bd2 | ||
|
80cb6a495a | ||
|
0114feaf04 | ||
|
2e04374de8 | ||
|
bc0ac581aa | ||
|
4ac36e9d27 | ||
|
5382a88aef | ||
|
a413904ecd | ||
|
dd30838245 | ||
|
8da4d057b0 | ||
|
f13570b59b | ||
|
30a37a490f | ||
|
aef07eb604 | ||
|
f205e5f404 | ||
|
7c6c3b9679 | ||
|
42d0081367 | ||
|
4d1f9753e3 | ||
|
6d90ebb94e | ||
|
0defb2e66d | ||
|
0de4fec07c | ||
|
fd527c2d98 | ||
|
23423ab79b | ||
|
1d46d71b25 | ||
|
45919b871a | ||
|
706e880f05 | ||
|
7c85726e9a | ||
|
8cec4180af | ||
|
04e911f94b | ||
|
3b1abaaa56 | ||
|
ec069aa43e | ||
|
16302cffce | ||
|
78646b2d89 | ||
|
0cf4133b97 | ||
|
7ab3f9bed2 | ||
|
2912e2da78 | ||
|
7a9d2ffe5f | ||
|
7d610b7c80 | ||
|
814646b542 | ||
|
d0efa15b98 | ||
|
390ade6e54 | ||
|
d0001a20c9 | ||
|
35b10adb40 | ||
|
849526cd76 | ||
|
830de45936 | ||
|
6cc471e986 | ||
|
1d0687556a | ||
|
049129d9b8 | ||
|
772c21cb04 | ||
|
baf7f61665 | ||
|
3b16a2858f | ||
|
b001a67979 | ||
|
38e85e9775 | ||
|
df7bf8c713 | ||
|
7112e742f4 | ||
|
5692c29a45 | ||
|
eed803349c | ||
|
ddb522d4cc | ||
|
e3b44be6ec | ||
|
488070c1ee | ||
|
7cfb3874a3 | ||
|
ab567e21ca | ||
|
4996d1824c | ||
|
a2d1fefe14 | ||
|
fc87eca4cd | ||
|
8275091347 | ||
|
daa6135211 | ||
|
beb480bec2 | ||
|
0003ec6a79 | ||
|
2a7ee141eb | ||
|
88bdac62e3 | ||
|
12d0c6522b | ||
|
0dfac3f484 | ||
|
60bc80692b | ||
|
b0faa70873 | ||
|
d60e3fe939 | ||
|
9f0b41fe71 | ||
|
dd65a68ce9 | ||
|
84cf6504c5 | ||
|
d59055dd2b | ||
|
67b90f3ad1 | ||
|
ec008d7045 | ||
|
17c5b66524 | ||
|
e64fdbf03b | ||
|
e11f0f8817 | ||
|
c5e9480d99 | ||
|
366fc3bc65 | ||
|
62e04b9c0d | ||
|
6771ad9d33 | ||
|
cca72f43f1 | ||
|
6a4cb16392 | ||
|
1bf52c2d5a | ||
|
1d7cb74053 | ||
|
2d9e06c479 | ||
|
29c7ff5228 | ||
|
ad0c310b6b | ||
|
14b30bfd0d | ||
|
7d5edcf23e | ||
|
87fc21443c | ||
|
37c06a9110 | ||
|
22a4bcf80d | ||
|
dd468c3aaa | ||
|
6ec12b51cb | ||
|
9290e6f00d | ||
|
69487e530b | ||
|
efd5ff644c | ||
|
7065ba9155 | ||
|
1af6313c69 | ||
|
1c617f2c5e | ||
|
563a4c071d | ||
|
871ded6e6a | ||
|
83e9cab3ad | ||
|
78128fd49a | ||
|
5e4a87b925 | ||
|
5e7c47a619 | ||
|
5ec2d10dbc | ||
|
f7819b4cb8 | ||
|
3f717cbb9e | ||
|
4958a77e21 | ||
|
68ea0acbd0 | ||
|
e8a5a6652d | ||
|
430b310eb4 | ||
|
636b0f20df | ||
|
611c7760eb | ||
|
e5cc3359e0 | ||
|
ad157d1b8f | ||
|
0e6b3ce86b | ||
|
5727a84bd8 | ||
|
8f1c202eaa | ||
|
d55ecc39f9 | ||
|
95fcc435f1 | ||
|
5f2d09b8a9 | ||
|
2d6f34df15 | ||
|
c0a17396bf | ||
|
aa8af0c871 | ||
|
88cbc6c2a7 | ||
|
2a23587445 | ||
|
4ea213c1e0 | ||
|
96ad67b9ef | ||
|
51c02e9c8a | ||
|
9019ebe496 | ||
|
c636582707 | ||
|
c394984ae5 | ||
|
7c4b7046cc | ||
|
f7d103cd96 | ||
|
23603e7f41 | ||
|
c2bc4e9d56 | ||
|
9181666cdc | ||
|
799c1b3409 | ||
|
ebc122fb35 | ||
|
7c2f2d9630 | ||
|
b74c2d38b9 | ||
|
4d20e4473e | ||
|
623fcae4a4 | ||
|
29429f636e | ||
|
a5fc7ac41e | ||
|
6a08071d86 | ||
|
68b7bcc28e | ||
|
ecb53e9717 | ||
|
b204090acc | ||
|
c7a4c05860 | ||
|
45e1f05ffc | ||
|
30adc3b651 | ||
|
67b709744f | ||
|
5c689acc22 | ||
|
00d7c9bdea | ||
|
0294fc8f3a | ||
|
9b64ffea8c | ||
|
c9bf799e32 | ||
|
03a5375e55 | ||
|
99fd5dfee5 | ||
|
ca69473664 | ||
|
1a94fdc601 | ||
|
70fb21ef36 | ||
|
5c59d97070 | ||
|
db79675570 | ||
|
60c75bce74 | ||
|
e10335e952 | ||
|
f504178421 | ||
|
e748af927a | ||
|
04c6f5bea3 | ||
|
18cae761af | ||
|
593972b156 | ||
|
628a18977b | ||
|
39c41a06f4 | ||
|
db20250371 | ||
|
44dbc75b61 | ||
|
061d1a3ab4 | ||
|
7dc21cec40 | ||
|
179364ff8f | ||
|
5dd09aeff4 | ||
|
9ab5846d56 | ||
|
1b7fa38082 | ||
|
a6dae893d6 | ||
|
49052d6f4a | ||
|
252156d653 | ||
|
8684fa1733 | ||
|
8a88812b8b | ||
|
0201135231 | ||
|
8bdbe1e451 | ||
|
821fba9b02 | ||
|
187fd90a7c | ||
|
2db9121bdb | ||
|
b28001e36f | ||
|
e1c995f654 | ||
|
52e7014b7c | ||
|
8c1be3b48e | ||
|
8fba5e1140 | ||
|
68f7d34e1b | ||
|
ebc114df71 | ||
|
dc324816db | ||
|
749df3b581 | ||
|
93b0d25cbc | ||
|
8e2cb0121b | ||
|
2df417feb7 | ||
|
018b248d51 | ||
|
c5a2f0facc | ||
|
731a82169b | ||
|
0d32e05b52 | ||
|
82f4862e73 | ||
|
f3bba0aaac | ||
|
92db8e1f76 | ||
|
dd2962aba6 | ||
|
d8437faebc | ||
|
78cacdcbc6 | ||
|
c5d287f5f5 | ||
|
64db3d14d8 | ||
|
bab8517b2a | ||
|
5cf765b2f1 | ||
|
0ea1bd1fa2 | ||
|
ae235ee8f3 | ||
|
8ef3f20c3c | ||
|
f3d8b47b20 | ||
|
818a0e5ff0 | ||
|
47b0b59884 | ||
|
7a3cd49597 | ||
|
ef70cbfbf2 | ||
|
37acdc77f7 | ||
|
163457ed9a | ||
|
05b28f553e | ||
|
a35db449b3 | ||
|
354ee6f313 | ||
|
0809dd747e | ||
|
76a8acbe5b | ||
|
08db41ee4d | ||
|
bde49aca61 | ||
|
2d8ff45d9a |
1
.gitignore
vendored
|
@ -48,7 +48,6 @@ local.properties
|
||||||
*_p.c
|
*_p.c
|
||||||
*.ilk
|
*.ilk
|
||||||
*.meta
|
*.meta
|
||||||
*.obj
|
|
||||||
*.pch
|
*.pch
|
||||||
*.pdb
|
*.pdb
|
||||||
*.pgc
|
*.pgc
|
||||||
|
|
4
.mailmap
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
RealBadAngel <maciej.kasatkin@o2.pl> <mk@realbadangel.pl>
|
||||||
|
Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
|
||||||
|
Vanessa Ezekowitz <vanessaezekowitz@gmail.com> <vanessa@rainbird.(none)>
|
||||||
|
kaeza <kaeza@users.sf.net> Diego Martínez <kaeza@users.sf.net>
|
31
README.md
|
@ -1,14 +1,23 @@
|
||||||
technic 0.4.7
|
Technic
|
||||||
|
=======
|
||||||
|
|
||||||
Technic mod for Minetest 0.4.7
|
Credits for contributing to the project (in alphabetical order):
|
||||||
|
* kpoppel
|
||||||
|
* Nekogloop
|
||||||
|
* Nore/Ekdohibs
|
||||||
|
* ShadowNinja
|
||||||
|
* VanessaE
|
||||||
|
* And many others...
|
||||||
|
|
||||||
Credits for contributing to the project:
|
FAQ
|
||||||
Nekogloop
|
---
|
||||||
ShadowNinja
|
|
||||||
VanessaE
|
|
||||||
Nore/Novatux
|
|
||||||
kpoppel
|
|
||||||
And many others for ideas/inspiring
|
|
||||||
|
|
||||||
License:
|
1. My technic circuit doesn't work. No power is distrubuted.
|
||||||
LGPLv2+
|
* A: Make sure you have a switching station connected.
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
Unless otherwise stated, all components of this modpack are licensed under the
|
||||||
|
LGPL, V2 or later. See also the individual mod folders for their
|
||||||
|
secondary/alternate licenses, if any.
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
default
|
default
|
||||||
|
basic_materials
|
||||||
|
intllib?
|
||||||
|
moreblocks?
|
||||||
|
|
|
@ -1,47 +1,42 @@
|
||||||
--Minetest 0.4.7 mod: concrete
|
--Minetest 0.4.7 mod: concrete
|
||||||
--(c) 2013 by RealBadAngel <mk@realbadangel.pl>
|
--(c) 2013 by RealBadAngel <mk@realbadangel.pl>
|
||||||
|
|
||||||
local technic = technic or {}
|
local technic = rawget(_G, "technic") or {}
|
||||||
technic.concrete_posts = {}
|
technic.concrete_posts = {}
|
||||||
|
|
||||||
minetest.register_alias("technic:concrete_post", "technic:concrete_post0")
|
-- Boilerplate to support localized strings if intllib mod is installed.
|
||||||
minetest.register_alias("technic:concrete_post32", "technic:concrete_post12")
|
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
|
||||||
minetest.register_alias("technic:concrete_post33", "technic:concrete_post3")
|
|
||||||
minetest.register_alias("technic:concrete_post34", "technic:concrete_post28")
|
|
||||||
minetest.register_alias("technic:concrete_post35", "technic:concrete_post19")
|
|
||||||
|
|
||||||
minetest.register_craft({
|
for i = 0, 31 do
|
||||||
output = 'technic:rebar 6',
|
minetest.register_alias("technic:concrete_post"..i,
|
||||||
recipe = {
|
"technic:concrete_post")
|
||||||
{'','', 'default:steel_ingot'},
|
end
|
||||||
{'','default:steel_ingot',''},
|
for i = 32, 63 do
|
||||||
{'default:steel_ingot', '', ''},
|
minetest.register_alias("technic:concrete_post"..i,
|
||||||
}
|
"technic:concrete_post_with_platform")
|
||||||
})
|
end
|
||||||
|
|
||||||
minetest.register_craft({
|
local steel_ingot
|
||||||
output = 'technic:concrete 5',
|
if minetest.get_modpath("technic_worldgen") then
|
||||||
recipe = {
|
steel_ingot = "technic:carbon_steel_ingot"
|
||||||
{'default:stone','technic:rebar','default:stone'},
|
else
|
||||||
{'technic:rebar','default:stone','technic:rebar'},
|
steel_ingot = "default:steel_ingot"
|
||||||
{'default:stone','technic:rebar','default:stone'},
|
end
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:concrete_post_platform 6',
|
output = 'technic:concrete_post_platform 6',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:concrete','technic:concrete_post0','technic:concrete'},
|
{'technic:concrete','technic:concrete_post','technic:concrete'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:concrete_post0 12',
|
output = 'technic:concrete_post 12',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stone','technic:rebar','default:stone'},
|
{'default:stone','basic_materials:steel_bar','default:stone'},
|
||||||
{'default:stone','technic:rebar','default:stone'},
|
{'default:stone','basic_materials:steel_bar','default:stone'},
|
||||||
{'default:stone','technic:rebar','default:stone'},
|
{'default:stone','basic_materials:steel_bar','default:stone'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -53,47 +48,44 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}
|
|
||||||
local box_center = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
|
|
||||||
local box_x1 = {0, -0.3, -0.1, 0.5, 0.3, 0.1}
|
|
||||||
local box_z1 = {-0.1, -0.3, 0, 0.1, 0.3, 0.5}
|
|
||||||
local box_x2 = {0, -0.3, -0.1, -0.5, 0.3, 0.1}
|
|
||||||
local box_z2 = {-0.1, -0.3, 0, 0.1, 0.3, -0.5}
|
|
||||||
|
|
||||||
minetest.register_craftitem(":technic:rebar", {
|
|
||||||
description = "Rebar",
|
|
||||||
inventory_image = "technic_rebar.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":technic:concrete", {
|
|
||||||
description = "Concrete Block",
|
|
||||||
tile_images = {"technic_concrete_block.png",},
|
|
||||||
groups = {cracky=1, level=2, concrete=1},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
after_place_node = function(pos, placer, itemstack)
|
|
||||||
technic.update_posts(pos, false)
|
|
||||||
end,
|
|
||||||
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
|
||||||
technic.update_posts(pos, false)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":technic:blast_resistant_concrete", {
|
minetest.register_node(":technic:blast_resistant_concrete", {
|
||||||
description = "Blast-resistant Concrete Block",
|
description = S("Blast-resistant Concrete Block"),
|
||||||
tile_images = {"technic_blast_resistant_concrete_block.png",},
|
tiles = {"technic_blast_resistant_concrete_block.png",},
|
||||||
groups={cracky=1, level=3, concrete=1},
|
groups = {cracky=1, level=3, concrete=1},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
after_place_node = function(pos, player, itemstack)
|
on_blast = function(pos, intensity)
|
||||||
technic.update_posts(pos, false)
|
if intensity > 9 then
|
||||||
end,
|
minetest.remove_node(pos)
|
||||||
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
return {"technic:blast_resistant_concrete"}
|
||||||
technic.update_posts(pos, false)
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("moreblocks") then
|
||||||
|
stairsplus:register_all("technic","blast_resistant_concrete","technic:blast_resistant_concrete",{
|
||||||
|
description = "Blast-resistant Concrete",
|
||||||
|
tiles = {"technic_blast_resistant_concrete_block.png",},
|
||||||
|
groups = {cracky=1, level=3, concrete=1},
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
on_blast = function(pos, intensity)
|
||||||
|
if intensity > 1 then
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
minetest.add_item(pos, "technic:blast_resistant_concrete")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local box_platform = {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}
|
||||||
|
local box_post = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
|
||||||
|
local box_front = {-0.1, -0.3, -0.5, 0.1, 0.3, 0}
|
||||||
|
local box_back = {-0.1, -0.3, 0, 0.1, 0.3, 0.5}
|
||||||
|
local box_left = {-0.5, -0.3, -0.1, 0, 0.3, 0.1}
|
||||||
|
local box_right = {0, -0.3, -0.1, 0.5, 0.3, 0.1}
|
||||||
|
|
||||||
minetest.register_node(":technic:concrete_post_platform", {
|
minetest.register_node(":technic:concrete_post_platform", {
|
||||||
description = "Concrete Post Platform",
|
description = S("Concrete Post Platform"),
|
||||||
tile_images = {"technic_concrete_block.png",},
|
tiles = {"basic_materials_concrete_block.png",},
|
||||||
groups={cracky=1, level=2},
|
groups={cracky=1, level=2},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
@ -104,144 +96,45 @@ minetest.register_node(":technic:concrete_post_platform", {
|
||||||
},
|
},
|
||||||
on_place = function (itemstack, placer, pointed_thing)
|
on_place = function (itemstack, placer, pointed_thing)
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
if not technic.concrete_posts[node.name] then
|
if node.name ~= "technic:concrete_post" then
|
||||||
return minetest.item_place_node(itemstack, placer, pointed_thing)
|
return minetest.item_place_node(itemstack, placer, pointed_thing)
|
||||||
end
|
end
|
||||||
local links = technic.concrete_posts[node.name]
|
minetest.set_node(pointed_thing.under, {name="technic:concrete_post_with_platform"})
|
||||||
if links[5] ~= 0 then -- The post already has a platform
|
|
||||||
return minetest.item_place_node(itemstack, placer, pointed_thing)
|
|
||||||
end
|
|
||||||
local id = technic.get_post_id({links[1], links[2], links[3], links[4], 1})
|
|
||||||
minetest.set_node(pointed_thing.under, {name="technic:concrete_post"..id})
|
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
placer:set_wielded_item(itemstack)
|
placer:set_wielded_item(itemstack)
|
||||||
return itemstack
|
return itemstack
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local function gen_post_nodebox(x1, x2, z1, z2, platform)
|
|
||||||
local box = {box_center}
|
|
||||||
if x1 ~= 0 then
|
|
||||||
table.insert(box, box_x1)
|
|
||||||
end
|
|
||||||
if x2 ~= 0 then
|
|
||||||
table.insert(box, box_x2)
|
|
||||||
end
|
|
||||||
if z1 ~= 0 then
|
|
||||||
table.insert(box, box_z1)
|
|
||||||
end
|
|
||||||
if z2 ~= 0 then
|
|
||||||
table.insert(box, box_z2)
|
|
||||||
end
|
|
||||||
if platform ~= 0 then
|
|
||||||
table.insert(box, box_platform)
|
|
||||||
end
|
|
||||||
return box
|
|
||||||
end
|
|
||||||
|
|
||||||
local function dig_post_with_platform(pos, oldnode, oldmetadata)
|
|
||||||
oldnode.name = "technic:concrete_post0"
|
|
||||||
minetest.set_node(pos, oldnode)
|
|
||||||
technic.update_posts(pos, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
function technic.posts_should_connect(pos)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
if technic.concrete_posts[node.name] then
|
|
||||||
return "post"
|
|
||||||
elseif minetest.get_item_group(node.name, "concrete") ~= 0 then
|
|
||||||
return "block"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function technic.get_post_id(links)
|
|
||||||
return (links[4] * 1) + (links[3] * 2)
|
|
||||||
+ (links[2] * 4) + (links[1] * 8)
|
|
||||||
+ (links[5] * 16)
|
|
||||||
end
|
|
||||||
|
|
||||||
function technic.update_posts(pos, set, secondrun)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local link_positions = {
|
|
||||||
{x=pos.x+1, y=pos.y, z=pos.z},
|
|
||||||
{x=pos.x-1, y=pos.y, z=pos.z},
|
|
||||||
{x=pos.x, y=pos.y, z=pos.z+1},
|
|
||||||
{x=pos.x, y=pos.y, z=pos.z-1},
|
|
||||||
}
|
|
||||||
|
|
||||||
local links = {0, 0, 0, 0, 0}
|
|
||||||
|
|
||||||
for i, link_pos in pairs(link_positions) do
|
|
||||||
local connecttype = technic.posts_should_connect(link_pos)
|
|
||||||
if connecttype then
|
|
||||||
links[i] = 1
|
|
||||||
-- Have posts next to us update theirselves,
|
|
||||||
-- but only once. (We don't want to start an
|
|
||||||
-- infinite loop of updates)
|
|
||||||
if not secondrun and connecttype == "post" then
|
|
||||||
technic.update_posts(link_pos, true, true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- We don't want to set ourselves if we have been removed or we are
|
|
||||||
-- updating a concrete node
|
|
||||||
if set then
|
|
||||||
-- Preserve platform
|
|
||||||
local oldlinks = technic.concrete_posts[node.name]
|
|
||||||
if oldlinks then
|
|
||||||
links[5] = oldlinks[5]
|
|
||||||
end
|
|
||||||
minetest.set_node(pos, {name="technic:concrete_post"
|
|
||||||
..technic.get_post_id(links)})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for x1 = 0, 1 do
|
|
||||||
for x2 = 0, 1 do
|
|
||||||
for z1 = 0, 1 do
|
|
||||||
for z2 = 0, 1 do
|
|
||||||
for platform = 0, 1 do
|
for platform = 0, 1 do
|
||||||
local links = {x1, x2, z1, z2, platform}
|
local after_dig_node = nil
|
||||||
local id = technic.get_post_id(links)
|
if platform == 1 then
|
||||||
technic.concrete_posts["technic:concrete_post"..id] = links
|
after_dig_node = function(pos, old_node)
|
||||||
|
old_node.name = "technic:concrete_post"
|
||||||
local groups = {cracky=1, level=2, concrete_post=1}
|
minetest.set_node(pos, old_node)
|
||||||
if id ~= 0 then
|
|
||||||
groups.not_in_creative_inventory = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
local drop = "technic:concrete_post0"
|
|
||||||
local after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
||||||
technic.update_posts(pos, false)
|
|
||||||
end
|
|
||||||
if platform ~= 0 then
|
|
||||||
drop = "technic:concrete_post_platform"
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
||||||
dig_post_with_platform(pos, oldnode, oldmetadata)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node(":technic:concrete_post"..id, {
|
minetest.register_node(":technic:concrete_post"..(platform == 1 and "_with_platform" or ""), {
|
||||||
description = "Concrete Post",
|
description = S("Concrete Post"),
|
||||||
tiles = {"technic_concrete_block.png"},
|
tiles = {"basic_materials_concrete_block.png"},
|
||||||
groups = groups,
|
groups = {cracky=1, level=2, concrete_post=1, not_in_creative_inventory=platform},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
drop = drop,
|
drop = (platform == 1 and "technic:concrete_post_platform" or
|
||||||
|
"technic:concrete_post"),
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
|
connects_to = {"group:concrete", "group:concrete_post"},
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "connected",
|
||||||
fixed = gen_post_nodebox(x1, x2, z1, z2, platform),
|
fixed = {box_post, (platform == 1 and box_platform or nil)},
|
||||||
|
connect_front = box_front,
|
||||||
|
connect_back = box_back,
|
||||||
|
connect_left = box_left,
|
||||||
|
connect_right = box_right,
|
||||||
},
|
},
|
||||||
after_place_node = function(pos, placer, itemstack)
|
|
||||||
technic.update_posts(pos, true)
|
|
||||||
end,
|
|
||||||
after_dig_node = after_dig_node,
|
after_dig_node = after_dig_node,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
10
concrete/locale/de.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# German Translation for technic_concrete
|
||||||
|
# Deutsche Übersetzung von technic_concrete
|
||||||
|
# by Xanthin
|
||||||
|
|
||||||
|
Rebar = Bewehrungsstab
|
||||||
|
Concrete Block = Betonblock
|
||||||
|
Blast-resistant Concrete Block = Explosionsbestaendiger Betonblock
|
||||||
|
Concrete Post Platform = Betonpfostenplattform
|
||||||
|
Concrete Post = Betonpfosten
|
||||||
|
|
8
concrete/locale/es.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# technic_concrete traducido por Carlos Barraza
|
||||||
|
|
||||||
|
Rebar = Barra de refuerzo
|
||||||
|
Concrete Block = Bloque de concreto
|
||||||
|
Blast-resistant Concrete Block = Bloque de concreto resistente a explosiones
|
||||||
|
Concrete Post Platform = Plataforma de concreto
|
||||||
|
Concrete Post = Postes de concreto
|
||||||
|
|
7
concrete/locale/fr.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# technic_concrete translation template
|
||||||
|
|
||||||
|
Rebar = Armature
|
||||||
|
Concrete Block = Bloc de béton
|
||||||
|
Blast-resistant Concrete Block = Bloc de béton anti explosions
|
||||||
|
Concrete Post Platform = Plateforme en béton
|
||||||
|
Concrete Post = Pilier en béton
|
10
concrete/locale/pl.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Polish Translation for technic_concrete
|
||||||
|
# Polskie tłumaczenie technic_concrete
|
||||||
|
# by mat9117
|
||||||
|
|
||||||
|
Rebar = Pręt zbrojeniowy
|
||||||
|
Concrete Block = Blok betonu
|
||||||
|
Blast-resistant Concrete Block = Przeciwwybuchowy blok betonu
|
||||||
|
Concrete Post Platform = Betonowa platforma
|
||||||
|
Concrete Post = Betonowy słup
|
||||||
|
|
10
concrete/locale/pt_BR.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Braziliam portuguese translation for technic_concrete
|
||||||
|
# Tradução portuguesa brasileira para technic_concrete
|
||||||
|
# By Sires
|
||||||
|
|
||||||
|
Rebar = Vergalhão
|
||||||
|
Concrete Block = Bloco de Concreto
|
||||||
|
Blast-resistant Concrete Block = Bloco de Concreto resistente-a-explosões
|
||||||
|
Concrete Post Platform = Plataforma para Poste de Concreto
|
||||||
|
Concrete Post = Poste de Concreto
|
||||||
|
|
8
concrete/locale/template.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# technic_concrete translation template
|
||||||
|
|
||||||
|
Rebar =
|
||||||
|
Concrete Block =
|
||||||
|
Blast-resistant Concrete Block =
|
||||||
|
Concrete Post Platform =
|
||||||
|
Concrete Post =
|
||||||
|
|
7
concrete/locale/tr.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# turkish translation by mahmutelmas06
|
||||||
|
|
||||||
|
Rebar = Beton demiri
|
||||||
|
Concrete Block = Beton blok
|
||||||
|
Blast-resistant Concrete Block = Patlamaya dayanıklı beton blok
|
||||||
|
Concrete Post Platform = Beton direk platformu
|
||||||
|
Concrete Post = Beton direk
|
3
concrete/mod.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
name = concrete
|
||||||
|
depends = default
|
||||||
|
optional_depends = basic_materials, intllib, moreblocks
|
Before Width: | Height: | Size: 311 B After Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 500 B |
Before Width: | Height: | Size: 813 B |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 813 B After Width: | Height: | Size: 583 B |
|
@ -1,4 +1,9 @@
|
||||||
default
|
default
|
||||||
moreblocks
|
|
||||||
technic_worldgen
|
technic_worldgen
|
||||||
|
basic_materials
|
||||||
concrete
|
concrete
|
||||||
|
unifieddyes?
|
||||||
|
intllib?
|
||||||
|
moreblocks?
|
||||||
|
steel?
|
||||||
|
streetsmod?
|
||||||
|
|
|
@ -1,48 +1,63 @@
|
||||||
-- Minetest 0.4.6 mod: extranodes
|
-- Minetest 0.4.6 mod: extranodes
|
||||||
-- namespace: technic
|
-- namespace: technic
|
||||||
|
-- Boilerplate to support localized strings if intllib mod is installed.
|
||||||
|
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
|
||||||
|
|
||||||
--register stairslike nodes
|
if minetest.get_modpath("moreblocks") then
|
||||||
register_stair_slab_panel_micro("technic", "marble", "technic:marble",
|
|
||||||
{cracky=2, not_in_creative_inventory=1},
|
|
||||||
{"technic_marble.png"},
|
|
||||||
"Marble",
|
|
||||||
"marble",
|
|
||||||
"facedir",
|
|
||||||
0)
|
|
||||||
|
|
||||||
register_stair_slab_panel_micro("technic", "marble_bricks", "technic:marble_bricks",
|
-- register stairsplus/circular_saw nodes
|
||||||
{cracky=2, not_in_creative_inventory=1},
|
-- we skip blast resistant concrete and uranium intentionally
|
||||||
{"technic_marble_bricks.png"},
|
-- chrome seems to be too hard of a metal to be actually sawable
|
||||||
"Marble Bricks",
|
|
||||||
"marble_bricks",
|
|
||||||
"facedir",
|
|
||||||
0)
|
|
||||||
|
|
||||||
register_stair_slab_panel_micro("technic", "granite", "technic:granite",
|
stairsplus:register_all("technic", "marble", "technic:marble", {
|
||||||
{cracky=3, not_in_creative_inventory=1},
|
description=S("Marble"),
|
||||||
{"technic_granite.png"},
|
groups={cracky=3, not_in_creative_inventory=1},
|
||||||
"Granite",
|
tiles={"technic_marble.png"},
|
||||||
"granite",
|
})
|
||||||
"facedir",
|
|
||||||
0)
|
|
||||||
|
|
||||||
register_stair_slab_panel_micro("technic", "concrete", "technic:concrete",
|
stairsplus:register_all("technic", "marble_bricks", "technic:marble_bricks", {
|
||||||
{cracky=3, not_in_creative_inventory=1},
|
description=S("Marble Bricks"),
|
||||||
{"technic_concrete_block.png"},
|
groups={cracky=3, not_in_creative_inventory=1},
|
||||||
"Concrete",
|
tiles={"technic_marble_bricks.png"},
|
||||||
"concrete",
|
})
|
||||||
"facedir",
|
|
||||||
0)
|
|
||||||
|
|
||||||
--register nodes in circular saw if aviable
|
stairsplus:register_all("technic", "granite", "technic:granite", {
|
||||||
if circular_saw then
|
description=S("Granite"),
|
||||||
for i,v in ipairs({"concrete", "marble", "marble_bricks", "granite", "default:obsidian"}) do
|
groups={cracky=1, not_in_creative_inventory=1},
|
||||||
table.insert(circular_saw.known_stairs, "technic:" ..v);
|
tiles={"technic_granite.png"},
|
||||||
end
|
})
|
||||||
end
|
|
||||||
|
|
||||||
|
stairsplus:register_all("technic", "concrete", "technic:concrete", {
|
||||||
|
description=S("Concrete"),
|
||||||
|
groups={cracky=3, not_in_creative_inventory=1},
|
||||||
|
tiles={"basic_materials_concrete_block.png"},
|
||||||
|
})
|
||||||
|
|
||||||
function register_technic_stairs_alias(modname, origname, newmod, newname)
|
stairsplus:register_all("technic", "zinc_block", "technic:zinc_block", {
|
||||||
|
description=S("Zinc Block"),
|
||||||
|
groups={cracky=1, not_in_creative_inventory=1},
|
||||||
|
tiles={"technic_zinc_block.png"},
|
||||||
|
})
|
||||||
|
|
||||||
|
stairsplus:register_all("technic", "cast_iron_block", "technic:cast_iron_block", {
|
||||||
|
description=S("Cast Iron Block"),
|
||||||
|
groups={cracky=1, not_in_creative_inventory=1},
|
||||||
|
tiles={"technic_cast_iron_block.png"},
|
||||||
|
})
|
||||||
|
|
||||||
|
stairsplus:register_all("technic", "carbon_steel_block", "technic:carbon_steel_block", {
|
||||||
|
description=S("Carbon Steel Block"),
|
||||||
|
groups={cracky=1, not_in_creative_inventory=1},
|
||||||
|
tiles={"technic_carbon_steel_block.png"},
|
||||||
|
})
|
||||||
|
|
||||||
|
stairsplus:register_all("technic", "stainless_steel_block", "technic:stainless_steel_block", {
|
||||||
|
description=S("Stainless Steel Block"),
|
||||||
|
groups={cracky=1, not_in_creative_inventory=1},
|
||||||
|
tiles={"technic_stainless_steel_block.png"},
|
||||||
|
})
|
||||||
|
|
||||||
|
function register_technic_stairs_alias(modname, origname, newmod, newname)
|
||||||
minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname)
|
minetest.register_alias(modname .. ":slab_" .. origname, newmod..":slab_" .. newname)
|
||||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted")
|
minetest.register_alias(modname .. ":slab_" .. origname .. "_inverted", newmod..":slab_" .. newname .. "_inverted")
|
||||||
minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall")
|
minetest.register_alias(modname .. ":slab_" .. origname .. "_wall", newmod..":slab_" .. newname .. "_wall")
|
||||||
|
@ -72,9 +87,223 @@ function register_technic_stairs_alias(modname, origname, newmod, newname)
|
||||||
minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical")
|
minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", newmod..":panel_" .. newname .. "_vertical")
|
||||||
minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom")
|
minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", newmod..":micro_" .. newname .. "_bottom")
|
||||||
minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top")
|
minetest.register_alias(modname .. ":micro_" .. origname .. "_top", newmod..":micro_" .. newname .. "_top")
|
||||||
|
end
|
||||||
|
|
||||||
|
register_technic_stairs_alias("stairsplus", "concrete", "technic", "concrete")
|
||||||
|
register_technic_stairs_alias("stairsplus", "marble", "technic", "marble")
|
||||||
|
register_technic_stairs_alias("stairsplus", "granite", "technic", "granite")
|
||||||
|
register_technic_stairs_alias("stairsplus", "marble_bricks", "technic", "marble_bricks")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
register_technic_stairs_alias("stairsplus", "concrete", "technic", "concrete")
|
local iclip_def = {
|
||||||
register_technic_stairs_alias("stairsplus", "marble", "technic", "marble")
|
description = S("Insulator/cable clip"),
|
||||||
register_technic_stairs_alias("stairsplus", "granite", "technic", "granite")
|
drawtype = "mesh",
|
||||||
register_technic_stairs_alias("stairsplus", "marble_bricks", "technic", "marble_bricks")
|
mesh = "technic_insulator_clip.obj",
|
||||||
|
tiles = {"technic_insulator_clip.png"},
|
||||||
|
is_ground_content = false,
|
||||||
|
groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1 },
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
}
|
||||||
|
|
||||||
|
local iclipfence_def = {
|
||||||
|
description = S("Insulator/cable clip"),
|
||||||
|
tiles = {"technic_insulator_clip.png"},
|
||||||
|
is_ground_content = false,
|
||||||
|
paramtype = "light",
|
||||||
|
drawtype = "nodebox",
|
||||||
|
node_box = {
|
||||||
|
type = "connected",
|
||||||
|
fixed = {
|
||||||
|
{ -0.25, 0.75, -0.25, 0.25, 1.25, 0.25 }, -- the clip on top
|
||||||
|
{ -0.125, 0.6875, -0.125, 0.125, 0.75, 0.125 },
|
||||||
|
{ -0.1875, 0.625, -0.1875, 0.1875, 0.6875, 0.1875 },
|
||||||
|
{ -0.125, 0.5625, -0.125, 0.125, 0.625, 0.125 },
|
||||||
|
{ -0.1875, 0.5, -0.1875, 0.1875, 0.5625, 0.1875 },
|
||||||
|
{ -0.125, 0.4375, -0.125, 0.125, 0.5, 0.125 },
|
||||||
|
{ -0.1875, 0.375, -0.1875, 0.1875, 0.4375, 0.1875 },
|
||||||
|
{ -0.125, -0.5, -0.125, 0.125, 0.375, 0.125 }, -- the post, slightly short
|
||||||
|
},
|
||||||
|
-- connect_top =
|
||||||
|
-- connect_bottom =
|
||||||
|
connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8},
|
||||||
|
{-1/16,-5/16,-1/2,1/16,-3/16,-1/8}},
|
||||||
|
connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16},
|
||||||
|
{-1/2,-5/16,-1/16,-1/8,-3/16,1/16}},
|
||||||
|
connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2},
|
||||||
|
{-1/16,-5/16,1/8,1/16,-3/16,1/2}},
|
||||||
|
connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16},
|
||||||
|
{1/8,-5/16,-1/16,1/2,-3/16,1/16}},
|
||||||
|
},
|
||||||
|
connects_to = {"group:fence", "group:wood", "group:tree"},
|
||||||
|
groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1 },
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
}
|
||||||
|
|
||||||
|
local sclip_tex = {
|
||||||
|
"technic_insulator_clip.png",
|
||||||
|
{ name = "strut.png^technic_steel_strut_overlay.png", color = "white" },
|
||||||
|
{ name = "strut.png", color = "white" }
|
||||||
|
}
|
||||||
|
|
||||||
|
local streetsmod = minetest.get_modpath("streets") or minetest.get_modpath ("steelsupport")
|
||||||
|
-- cheapie's fork breaks it into several individual mods, with differernt names for the same content.
|
||||||
|
|
||||||
|
if streetsmod then
|
||||||
|
sclip_tex = {
|
||||||
|
"technic_insulator_clip.png",
|
||||||
|
{ name = "streets_support.png^technic_steel_strut_overlay.png", color = "white" },
|
||||||
|
{ name = "streets_support.png", color = "white" }
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local sclip_def = {
|
||||||
|
description = S("Steel strut with insulator/cable clip"),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "technic_steel_strut_with_insulator_clip.obj",
|
||||||
|
tiles = sclip_tex,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "wallmounted",
|
||||||
|
is_ground_content = false,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
groups = { choppy=1, cracky=1 },
|
||||||
|
backface_culling = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if minetest.get_modpath("unifieddyes") then
|
||||||
|
iclip_def.paramtype2 = "colorwallmounted"
|
||||||
|
iclip_def.palette = "unifieddyes_palette_colorwallmounted.png"
|
||||||
|
iclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||||
|
end
|
||||||
|
iclip_def.groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||||
|
iclip_def.on_dig = unifieddyes.on_dig
|
||||||
|
|
||||||
|
iclipfence_def.paramtype2 = "color"
|
||||||
|
iclipfence_def.palette = "unifieddyes_palette_extended.png"
|
||||||
|
iclipfence_def.on_construct = unifieddyes.on_construct
|
||||||
|
iclipfence_def.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||||
|
iclipfence_def.on_dig = unifieddyes.on_dig
|
||||||
|
|
||||||
|
sclip_def.paramtype2 = "colorwallmounted"
|
||||||
|
sclip_def.palette = "unifieddyes_palette_colorwallmounted.png"
|
||||||
|
sclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||||
|
end
|
||||||
|
sclip_def.on_dig = unifieddyes.on_dig
|
||||||
|
sclip_def.groups = {choppy=1, cracky=1, ud_param2_colorable = 1}
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node(":technic:insulator_clip", iclip_def)
|
||||||
|
minetest.register_node(":technic:insulator_clip_fencepost", iclipfence_def)
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "technic:insulator_clip",
|
||||||
|
recipe = {
|
||||||
|
{ "", "dye:white", ""},
|
||||||
|
{ "", "technic:raw_latex", ""},
|
||||||
|
{ "technic:raw_latex", "default:stone", "technic:raw_latex"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "technic:insulator_clip_fencepost 2",
|
||||||
|
recipe = {
|
||||||
|
{ "", "dye:white", ""},
|
||||||
|
{ "", "technic:raw_latex", ""},
|
||||||
|
{ "technic:raw_latex", "default:fence_wood", "technic:raw_latex"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local steelmod = minetest.get_modpath("steel")
|
||||||
|
|
||||||
|
if streetsmod or steelmod then
|
||||||
|
minetest.register_node(":technic:steel_strut_with_insulator_clip", sclip_def)
|
||||||
|
|
||||||
|
if steelmod then
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "technic:steel_strut_with_insulator_clip",
|
||||||
|
recipe = {
|
||||||
|
{"technic:insulator_clip_fencepost"},
|
||||||
|
{"steel:strut_mount"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "technic:steel_strut_with_insulator_clip",
|
||||||
|
recipe = {
|
||||||
|
{"technic:insulator_clip_fencepost", "" },
|
||||||
|
{"steel:strut", "default:steel_ingot" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
elseif streetsmod then
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "technic:steel_strut_with_insulator_clip",
|
||||||
|
recipe = {
|
||||||
|
{"technic:insulator_clip_fencepost", "" },
|
||||||
|
{"streets:steel_support", "default:steel_ingot" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.get_modpath("unifieddyes") then
|
||||||
|
|
||||||
|
unifieddyes.register_color_craft({
|
||||||
|
output = "technic:insulator_clip_fencepost",
|
||||||
|
palette = "extended",
|
||||||
|
type = "shapeless",
|
||||||
|
neutral_node = "technic:insulator_clip_fencepost",
|
||||||
|
recipe = {
|
||||||
|
"NEUTRAL_NODE",
|
||||||
|
"MAIN_DYE"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
unifieddyes.register_color_craft({
|
||||||
|
output = "technic:insulator_clip",
|
||||||
|
palette = "wallmounted",
|
||||||
|
type = "shapeless",
|
||||||
|
neutral_node = "technic:insulator_clip",
|
||||||
|
recipe = {
|
||||||
|
"NEUTRAL_NODE",
|
||||||
|
"MAIN_DYE"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
unifieddyes.register_color_craft({
|
||||||
|
output = "technic:steel_strut_with_insulator_clip",
|
||||||
|
palette = "wallmounted",
|
||||||
|
type = "shapeless",
|
||||||
|
neutral_node = "",
|
||||||
|
recipe = {
|
||||||
|
"technic:steel_strut_with_insulator_clip",
|
||||||
|
"MAIN_DYE"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if steelmod then
|
||||||
|
unifieddyes.register_color_craft({
|
||||||
|
output = "technic:steel_strut_with_insulator_clip",
|
||||||
|
palette = "wallmounted",
|
||||||
|
neutral_node = "",
|
||||||
|
recipe = {
|
||||||
|
{ "technic:insulator_clip_fencepost", "MAIN_DYE" },
|
||||||
|
{ "steel:strut_mount", "" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if streetsmod then
|
||||||
|
unifieddyes.register_color_craft({
|
||||||
|
output = "technic:steel_strut_with_insulator_clip",
|
||||||
|
palette = "wallmounted",
|
||||||
|
neutral_node = "technic:steel_strut_with_insulator_clip",
|
||||||
|
recipe = {
|
||||||
|
{ "technic:insulator_clip_fencepost", "MAIN_DYE" },
|
||||||
|
{ "streets:steel_support", "default:steel_ingot" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
9
extranodes/locale/de.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# German Translation for technic_extranodes
|
||||||
|
# Deutsche Übersetzung von technic_extranodes
|
||||||
|
# by Xanthin
|
||||||
|
|
||||||
|
Marble = Marmor
|
||||||
|
Marble Bricks = Marmorziegel
|
||||||
|
Granite = Granit
|
||||||
|
Concrete = Beton
|
||||||
|
|
7
extranodes/locale/es.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# technic_extranodes traducido por Carlos Barraza
|
||||||
|
|
||||||
|
Marble = Mármol
|
||||||
|
Marble Bricks = Ladrillos de mármol
|
||||||
|
Granite = Granito
|
||||||
|
Concrete = Concreto
|
||||||
|
|
7
extranodes/locale/fr.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# technic_extranodes translation template
|
||||||
|
|
||||||
|
Marble = Marbre
|
||||||
|
Marble Bricks = Briques en marbre
|
||||||
|
Granite = Granite
|
||||||
|
Concrete = Béton
|
||||||
|
|
9
extranodes/locale/pl.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Polish Translation for technic_extranodes
|
||||||
|
# Polskie tłumaczenie technic_extranodes
|
||||||
|
# by mat9117
|
||||||
|
|
||||||
|
Marble = Marmur
|
||||||
|
Marble Bricks = Marmurowe cegły
|
||||||
|
Granite = Granit
|
||||||
|
Concrete = Beton
|
||||||
|
|
9
extranodes/locale/pt_BR.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Braziliam portuguese translation for technic_extranodes
|
||||||
|
# Tradução portuguesa brasileira para technic_extranodes
|
||||||
|
# By Sires
|
||||||
|
|
||||||
|
Marble = Mármore
|
||||||
|
Marble Bricks = Tijolos de Mármore
|
||||||
|
Granite = Granito
|
||||||
|
Concrete = Concreto
|
||||||
|
|
7
extranodes/locale/template.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# technic_extranodes translation template
|
||||||
|
|
||||||
|
Marble =
|
||||||
|
Marble Bricks =
|
||||||
|
Granite =
|
||||||
|
Concrete =
|
||||||
|
|
6
extranodes/locale/tr.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# turkish translation by mahmutelmas06
|
||||||
|
|
||||||
|
Marble = Mermer
|
||||||
|
Marble Bricks = Mermer tuğla
|
||||||
|
Granite = Granit
|
||||||
|
Concrete = Beton
|
3
extranodes/mod.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
name = extranodes
|
||||||
|
depends = default, technic_worldgen, basic_materials, concrete
|
||||||
|
optional_depends = unifieddyes, intllib, moreblocks, steel, streetsmod
|
173
extranodes/models/technic_insulator_clip.obj
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
# Blender v2.72 (sub 0) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
o Cube
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v -0.249997 0.500000 0.249997
|
||||||
|
v -0.249997 0.500000 -0.249997
|
||||||
|
v 0.249997 0.500000 -0.249997
|
||||||
|
v 0.249997 0.500000 0.249997
|
||||||
|
v -0.187500 0.500000 0.187500
|
||||||
|
v -0.187500 0.500000 -0.187500
|
||||||
|
v 0.187500 0.500000 -0.187500
|
||||||
|
v 0.187500 0.500000 0.187500
|
||||||
|
v -0.187500 0.750000 0.187500
|
||||||
|
v -0.187500 0.750000 -0.187500
|
||||||
|
v 0.187500 0.750000 -0.187500
|
||||||
|
v 0.187500 0.750000 0.187500
|
||||||
|
v -0.250000 0.750000 0.250000
|
||||||
|
v -0.250000 0.750000 -0.250000
|
||||||
|
v 0.250000 0.750000 -0.250000
|
||||||
|
v 0.250000 0.750000 0.250000
|
||||||
|
v -0.250000 1.250000 0.250000
|
||||||
|
v -0.250000 1.250000 -0.250000
|
||||||
|
v 0.250000 1.250000 -0.250000
|
||||||
|
v 0.250000 1.250000 0.250000
|
||||||
|
v -0.500000 0.312500 0.500000
|
||||||
|
v -0.500000 0.312500 -0.500000
|
||||||
|
v 0.500000 0.312500 -0.500000
|
||||||
|
v 0.500000 0.312500 0.500000
|
||||||
|
v 0.187500 0.625000 0.187500
|
||||||
|
v 0.187500 0.625000 -0.187500
|
||||||
|
v -0.187500 0.625000 -0.187500
|
||||||
|
v -0.187500 0.625000 0.187500
|
||||||
|
v 0.187500 0.562500 0.187500
|
||||||
|
v 0.187500 0.687500 -0.187500
|
||||||
|
v -0.187500 0.687500 -0.187500
|
||||||
|
v -0.187500 0.562500 0.187500
|
||||||
|
v 0.187500 0.687500 0.187500
|
||||||
|
v 0.187500 0.562500 -0.187500
|
||||||
|
v -0.187500 0.562500 -0.187500
|
||||||
|
v -0.187500 0.687500 0.187500
|
||||||
|
v 0.168668 0.531250 0.168668
|
||||||
|
v 0.168668 0.718750 -0.168668
|
||||||
|
v -0.168668 0.718750 -0.168668
|
||||||
|
v -0.168668 0.531250 0.168668
|
||||||
|
v 0.168668 0.656250 0.168668
|
||||||
|
v 0.168668 0.593750 -0.168668
|
||||||
|
v -0.168668 0.593750 -0.168668
|
||||||
|
v -0.168668 0.656250 0.168668
|
||||||
|
v 0.168668 0.593750 0.168668
|
||||||
|
v 0.168668 0.656250 -0.168668
|
||||||
|
v -0.168668 0.656250 -0.168668
|
||||||
|
v -0.168668 0.593750 0.168668
|
||||||
|
v 0.168668 0.718750 0.168668
|
||||||
|
v 0.168668 0.531250 -0.168668
|
||||||
|
v -0.168668 0.531250 -0.168668
|
||||||
|
v -0.168668 0.718750 0.168668
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 0.749997 0.749997
|
||||||
|
vt 0.749997 0.250003
|
||||||
|
vt 0.250003 0.250003
|
||||||
|
vt 0.250003 0.749997
|
||||||
|
vt 0.000000 0.812500
|
||||||
|
vt 1.000000 0.812500
|
||||||
|
vt 0.312500 0.312500
|
||||||
|
vt 0.312500 0.687500
|
||||||
|
vt 0.687500 0.312500
|
||||||
|
vt 0.687500 0.687500
|
||||||
|
vt 0.331332 1.218750
|
||||||
|
vt 0.668668 1.218750
|
||||||
|
vt 0.687500 1.250000
|
||||||
|
vt 0.312500 1.250000
|
||||||
|
vt 0.750000 1.250000
|
||||||
|
vt 0.750000 1.750000
|
||||||
|
vt 0.250000 1.750000
|
||||||
|
vt 0.250000 1.250000
|
||||||
|
vt 0.331332 1.093750
|
||||||
|
vt 0.668668 1.093750
|
||||||
|
vt 0.687500 1.125000
|
||||||
|
vt 0.312500 1.125000
|
||||||
|
vt 0.331332 1.093750
|
||||||
|
vt 0.668668 1.093750
|
||||||
|
vt 0.331332 1.156250
|
||||||
|
vt 0.668668 1.156250
|
||||||
|
vt 0.687500 1.187500
|
||||||
|
vt 0.312500 1.187500
|
||||||
|
vt 0.331332 1.156250
|
||||||
|
vt 0.668668 1.156250
|
||||||
|
vt 0.331332 1.031250
|
||||||
|
vt 0.668668 1.031250
|
||||||
|
vt 0.687500 1.062500
|
||||||
|
vt 0.312500 1.062500
|
||||||
|
vt 0.312500 1.000000
|
||||||
|
vt 0.687500 1.000000
|
||||||
|
vn 0.000000 -1.000000 -0.000000
|
||||||
|
vn -0.600000 0.800000 -0.000000
|
||||||
|
vn 0.000000 0.800000 -0.600000
|
||||||
|
vn 0.600000 0.800000 0.000000
|
||||||
|
vn -0.000000 0.000000 1.000000
|
||||||
|
vn 0.000000 1.000000 0.000000
|
||||||
|
vn 0.856500 -0.516200 0.000000
|
||||||
|
vn 0.000000 -0.516200 -0.856500
|
||||||
|
vn -0.000000 -0.516200 0.856500
|
||||||
|
vn -0.856500 -0.516200 -0.000000
|
||||||
|
vn -1.000000 0.000000 -0.000000
|
||||||
|
vn 0.000000 -0.000000 -1.000000
|
||||||
|
vn 1.000000 -0.000000 0.000000
|
||||||
|
vn -0.000000 0.800000 0.600000
|
||||||
|
vn 0.856500 0.516200 0.000000
|
||||||
|
vn 0.000000 0.516200 -0.856500
|
||||||
|
vn -0.000000 0.516200 0.856500
|
||||||
|
vn -0.856500 0.516200 -0.000000
|
||||||
|
g Cube_Cube_Material
|
||||||
|
s off
|
||||||
|
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||||
|
f 25/2/2 5/5/2 6/6/2 26/1/2
|
||||||
|
f 26/1/3 6/6/3 7/7/3 27/4/3
|
||||||
|
f 27/4/4 7/7/4 8/8/4 28/3/4
|
||||||
|
f 25/9/5 1/4/5 4/1/5 28/10/5
|
||||||
|
f 8/8/6 7/7/6 11/11/6 12/12/6
|
||||||
|
f 7/7/6 6/6/6 10/13/6 11/11/6
|
||||||
|
f 5/5/6 8/8/6 12/12/6 9/14/6
|
||||||
|
f 6/6/6 5/5/6 9/14/6 10/13/6
|
||||||
|
f 53/15/7 42/16/7 15/17/7 16/18/7
|
||||||
|
f 42/15/8 43/16/8 14/17/8 15/18/8
|
||||||
|
f 56/15/9 53/16/9 16/17/9 13/18/9
|
||||||
|
f 43/15/10 56/16/10 13/17/10 14/18/10
|
||||||
|
f 14/4/1 18/4/1 19/4/1 15/4/1
|
||||||
|
f 17/19/11 21/20/11 22/21/11 18/22/11
|
||||||
|
f 18/19/12 22/20/12 23/21/12 19/22/12
|
||||||
|
f 19/19/13 23/20/13 24/21/13 20/22/13
|
||||||
|
f 21/21/5 17/22/5 20/19/5 24/20/5
|
||||||
|
f 21/5/6 24/8/6 23/7/6 22/6/6
|
||||||
|
f 15/4/1 19/4/1 20/4/1 16/4/1
|
||||||
|
f 16/4/1 20/4/1 17/4/1 13/4/1
|
||||||
|
f 13/4/1 17/4/1 18/4/1 14/4/1
|
||||||
|
f 1/1/11 25/10/11 26/9/11 2/4/11
|
||||||
|
f 2/1/12 26/10/12 27/9/12 3/4/12
|
||||||
|
f 3/1/13 27/10/13 28/9/13 4/4/13
|
||||||
|
f 5/5/14 25/2/14 28/3/14 8/8/14
|
||||||
|
f 49/23/7 46/24/7 30/25/7 29/26/7
|
||||||
|
f 46/27/8 47/28/8 31/25/8 30/26/8
|
||||||
|
f 52/23/9 49/24/9 29/25/9 32/26/9
|
||||||
|
f 47/23/10 52/24/10 32/25/10 31/26/10
|
||||||
|
f 45/29/7 50/30/7 34/31/7 37/32/7
|
||||||
|
f 50/33/8 51/34/8 35/31/8 34/32/8
|
||||||
|
f 48/33/9 45/34/9 37/31/9 40/32/9
|
||||||
|
f 51/29/10 48/30/10 40/31/10 35/32/10
|
||||||
|
f 41/35/7 54/36/7 38/37/7 33/38/7
|
||||||
|
f 54/35/8 55/36/8 39/37/8 38/38/8
|
||||||
|
f 44/35/9 41/36/9 33/37/9 36/38/9
|
||||||
|
f 55/35/10 44/36/10 36/37/10 39/38/10
|
||||||
|
f 37/32/15 34/31/15 42/16/15 53/15/15
|
||||||
|
f 34/32/16 35/31/16 43/16/16 42/15/16
|
||||||
|
f 40/32/17 37/31/17 53/16/17 56/15/17
|
||||||
|
f 35/32/18 40/31/18 56/16/18 43/15/18
|
||||||
|
f 33/38/15 38/37/15 46/24/15 49/23/15
|
||||||
|
f 38/38/16 39/37/16 47/28/16 46/27/16
|
||||||
|
f 36/38/17 33/37/17 49/24/17 52/23/17
|
||||||
|
f 39/38/18 36/37/18 52/24/18 47/23/18
|
||||||
|
f 29/26/15 30/25/15 50/30/15 45/29/15
|
||||||
|
f 30/26/16 31/25/16 51/34/16 50/33/16
|
||||||
|
f 32/26/17 29/25/17 45/34/17 48/33/17
|
||||||
|
f 31/26/18 32/25/18 48/30/18 51/29/18
|
||||||
|
f 12/39/15 11/40/15 54/36/15 41/35/15
|
||||||
|
f 11/39/16 10/40/16 55/36/16 54/35/16
|
||||||
|
f 9/39/17 12/40/17 41/36/17 44/35/17
|
||||||
|
f 10/39/18 9/40/18 44/36/18 55/35/18
|
246
extranodes/models/technic_steel_strut_with_insulator_clip.obj
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
# Blender v2.79 (sub 0) OBJ File: 'technic steel strut with insulator clip.blend'
|
||||||
|
# www.blender.org
|
||||||
|
o Cube_Cube_Material.001
|
||||||
|
v -0.375000 0.500532 -0.250000
|
||||||
|
v -0.249997 0.562500 -0.249997
|
||||||
|
v 0.249997 0.562500 -0.249997
|
||||||
|
v 0.375000 0.500532 -0.250000
|
||||||
|
v 0.249997 0.562500 0.249997
|
||||||
|
v 0.375000 0.500532 0.250000
|
||||||
|
v -0.249997 0.562500 0.249997
|
||||||
|
v -0.375000 0.500532 0.250000
|
||||||
|
v 0.187500 0.562500 -0.187500
|
||||||
|
v -0.168668 0.718750 0.168668
|
||||||
|
v 0.168668 0.718750 0.168668
|
||||||
|
v 0.187500 0.750000 0.187500
|
||||||
|
v -0.187500 0.750000 0.187500
|
||||||
|
v 0.168668 0.718750 -0.168668
|
||||||
|
v 0.187500 0.750000 -0.187500
|
||||||
|
v -0.168668 0.718750 -0.168668
|
||||||
|
v -0.187500 0.750000 -0.187500
|
||||||
|
v 0.250000 0.750000 -0.250000
|
||||||
|
v 0.250000 0.750000 0.250000
|
||||||
|
v -0.250000 0.750000 -0.250000
|
||||||
|
v -0.250000 1.250000 -0.250000
|
||||||
|
v 0.250000 1.250000 -0.250000
|
||||||
|
v 0.250000 1.250000 0.250000
|
||||||
|
v -0.250000 1.250000 0.250000
|
||||||
|
v -0.250000 0.750000 0.250000
|
||||||
|
v -0.168668 0.593750 0.168668
|
||||||
|
v 0.168668 0.593750 0.168668
|
||||||
|
v 0.187500 0.625000 0.187500
|
||||||
|
v -0.187500 0.625000 0.187500
|
||||||
|
v 0.168668 0.593750 -0.168668
|
||||||
|
v 0.187500 0.625000 -0.187500
|
||||||
|
v -0.168668 0.593750 -0.168668
|
||||||
|
v -0.187500 0.625000 -0.187500
|
||||||
|
v -0.168668 0.656250 0.168668
|
||||||
|
v 0.168668 0.656250 0.168668
|
||||||
|
v 0.187500 0.687500 0.187500
|
||||||
|
v -0.187500 0.687500 0.187500
|
||||||
|
v 0.168668 0.656250 -0.168668
|
||||||
|
v 0.187500 0.687500 -0.187500
|
||||||
|
v -0.168668 0.656250 -0.168668
|
||||||
|
v -0.187500 0.687500 -0.187500
|
||||||
|
v 0.187500 0.562500 0.187500
|
||||||
|
v -0.187500 0.562500 0.187500
|
||||||
|
v -0.187500 0.562500 -0.187500
|
||||||
|
v -0.499468 -0.499468 -0.499468
|
||||||
|
v -0.499468 0.500000 -0.499468
|
||||||
|
v 0.499468 -0.499468 -0.499468
|
||||||
|
v -0.499468 -0.499468 0.499468
|
||||||
|
v -0.499468 0.500000 0.499468
|
||||||
|
v 0.499468 -0.499468 0.499468
|
||||||
|
v 0.499468 0.500000 -0.499468
|
||||||
|
v 0.499468 0.500000 0.499468
|
||||||
|
vt 1.000000 0.875000
|
||||||
|
vt 0.937500 0.750000
|
||||||
|
vt 0.937500 0.250000
|
||||||
|
vt 1.000000 0.125000
|
||||||
|
vt 0.250000 0.875000
|
||||||
|
vt 0.250000 0.750000
|
||||||
|
vt 0.750000 0.750000
|
||||||
|
vt 0.750000 0.875000
|
||||||
|
vt 0.000000 0.125000
|
||||||
|
vt 0.062500 0.250000
|
||||||
|
vt 0.062500 0.750000
|
||||||
|
vt 0.000000 0.875000
|
||||||
|
vt 0.750000 0.250000
|
||||||
|
vt 0.687500 0.687500
|
||||||
|
vt 0.687500 0.312500
|
||||||
|
vt 0.312500 0.687500
|
||||||
|
vt 0.250000 0.250000
|
||||||
|
vt 0.312500 0.312500
|
||||||
|
vt 0.331332 1.218750
|
||||||
|
vt 0.668668 1.218750
|
||||||
|
vt 0.687500 1.250000
|
||||||
|
vt 0.312500 1.250000
|
||||||
|
vt 0.531250 0.666667
|
||||||
|
vt 0.531250 0.333333
|
||||||
|
vt 0.500000 0.312500
|
||||||
|
vt 0.500000 0.687500
|
||||||
|
vt 0.531250 0.333333
|
||||||
|
vt 0.531250 0.666667
|
||||||
|
vt 0.500000 0.687500
|
||||||
|
vt 0.500000 0.312500
|
||||||
|
vt 0.331332 1.218750
|
||||||
|
vt 0.668668 1.218750
|
||||||
|
vt 0.687500 1.250000
|
||||||
|
vt 0.312500 1.250000
|
||||||
|
vt 0.687500 0.312500
|
||||||
|
vt 0.750000 0.250000
|
||||||
|
vt 0.750000 0.750000
|
||||||
|
vt 0.687500 0.687500
|
||||||
|
vt 0.500000 0.250000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.000000 0.750000
|
||||||
|
vt 0.000000 0.250000
|
||||||
|
vt 0.500000 0.250000
|
||||||
|
vt 0.000000 0.250000
|
||||||
|
vt 0.000000 0.750000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.500000 0.250000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.000000 0.750000
|
||||||
|
vt 0.000000 0.250000
|
||||||
|
vt 0.000000 0.250000
|
||||||
|
vt 0.500000 0.750000
|
||||||
|
vt 0.250000 0.250000
|
||||||
|
vt 0.750000 0.250000
|
||||||
|
vt 0.750000 0.750000
|
||||||
|
vt 0.250000 0.750000
|
||||||
|
vt 0.250000 0.750000
|
||||||
|
vt 0.312500 0.687500
|
||||||
|
vt 0.250000 0.250000
|
||||||
|
vt 0.312500 0.312500
|
||||||
|
vt 0.250000 0.125000
|
||||||
|
vt 0.750000 0.125000
|
||||||
|
vt 0.331332 1.093750
|
||||||
|
vt 0.668668 1.093750
|
||||||
|
vt 0.687500 1.125000
|
||||||
|
vt 0.312500 1.125000
|
||||||
|
vt 0.656250 0.666667
|
||||||
|
vt 0.656250 0.333333
|
||||||
|
vt 0.625000 0.312500
|
||||||
|
vt 0.625000 0.687500
|
||||||
|
vt 0.656250 0.333333
|
||||||
|
vt 0.656250 0.666667
|
||||||
|
vt 0.625000 0.687500
|
||||||
|
vt 0.625000 0.312500
|
||||||
|
vt 0.331332 1.093750
|
||||||
|
vt 0.668668 1.093750
|
||||||
|
vt 0.687500 1.125000
|
||||||
|
vt 0.312500 1.125000
|
||||||
|
vt 0.331332 1.156250
|
||||||
|
vt 0.668668 1.156250
|
||||||
|
vt 0.687500 1.187500
|
||||||
|
vt 0.312500 1.187500
|
||||||
|
vt 0.593750 0.666667
|
||||||
|
vt 0.593750 0.333333
|
||||||
|
vt 0.562500 0.312500
|
||||||
|
vt 0.562500 0.687500
|
||||||
|
vt 0.593750 0.333333
|
||||||
|
vt 0.593750 0.666667
|
||||||
|
vt 0.562500 0.687500
|
||||||
|
vt 0.562500 0.312500
|
||||||
|
vt 0.331332 1.156250
|
||||||
|
vt 0.668668 1.156250
|
||||||
|
vt 0.687500 1.187500
|
||||||
|
vt 0.312500 1.187500
|
||||||
|
vt 0.312500 1.062500
|
||||||
|
vt 0.687500 1.062500
|
||||||
|
vt 0.687500 0.312500
|
||||||
|
vt 0.687500 0.312500
|
||||||
|
vt 0.687500 0.687500
|
||||||
|
vt 0.312500 1.062500
|
||||||
|
vt 0.687500 1.062500
|
||||||
|
vt 0.000000 0.750000
|
||||||
|
vt 0.000000 0.250000
|
||||||
|
vt 1.000000 0.250000
|
||||||
|
vt 1.000000 0.750000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt -0.000000 1.000000
|
||||||
|
vt 0.000000 -0.000000
|
||||||
|
vt 1.000000 -0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt -0.000000 1.000000
|
||||||
|
vt 0.000000 -0.000000
|
||||||
|
vt 1.000000 -0.000000
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 1.000000 0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 1.000000 -0.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt -0.000000 0.000000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 0.4442 0.8960 -0.0000
|
||||||
|
vn 0.0000 0.0000 1.0000
|
||||||
|
vn 0.0000 1.0000 -0.0000
|
||||||
|
vn 0.0000 -0.5161 0.8565
|
||||||
|
vn 0.8565 -0.5161 0.0000
|
||||||
|
vn -0.8565 -0.5161 0.0000
|
||||||
|
vn 0.0000 -0.5161 -0.8565
|
||||||
|
vn -0.0000 -1.0000 -0.0000
|
||||||
|
vn 1.0000 -0.0000 0.0000
|
||||||
|
vn -1.0000 0.0000 -0.0000
|
||||||
|
vn -0.4442 0.8960 -0.0000
|
||||||
|
vn -0.0000 0.5161 0.8565
|
||||||
|
vn 0.8565 0.5161 -0.0000
|
||||||
|
vn -0.8565 0.5161 -0.0000
|
||||||
|
vn 0.0000 0.5161 -0.8565
|
||||||
|
g Cube_Cube_Material.001_Cube_Cube_Material.001_clip
|
||||||
|
s 1
|
||||||
|
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||||
|
f 4/5/2 3/6/2 5/7/2 6/8/2
|
||||||
|
f 6/9/3 5/10/3 7/11/3 8/12/3
|
||||||
|
f 7/13/4 5/7/4 42/14/4 43/15/4
|
||||||
|
f 5/7/4 3/6/4 9/16/4 42/14/4
|
||||||
|
f 2/17/4 7/13/4 43/15/4 44/18/4
|
||||||
|
f 3/6/4 2/17/4 44/18/4 9/16/4
|
||||||
|
f 10/19/5 11/20/5 12/21/5 13/22/5
|
||||||
|
f 11/23/6 14/24/6 15/25/6 12/26/6
|
||||||
|
f 16/27/7 10/28/7 13/29/7 17/30/7
|
||||||
|
f 14/31/8 16/32/8 17/33/8 15/34/8
|
||||||
|
f 15/35/9 18/36/9 19/37/9 12/38/9
|
||||||
|
f 20/39/1 21/40/1 22/41/1 18/42/1
|
||||||
|
f 18/43/10 22/44/10 23/45/10 19/46/10
|
||||||
|
f 19/47/3 23/48/3 24/49/3 25/50/3
|
||||||
|
f 21/51/11 20/39/11 25/52/11 24/49/11
|
||||||
|
f 21/53/4 24/54/4 23/55/4 22/56/4
|
||||||
|
f 12/38/9 19/37/9 25/57/9 13/58/9
|
||||||
|
f 13/58/9 25/57/9 20/59/9 17/60/9
|
||||||
|
f 17/60/9 20/59/9 18/36/9 15/35/9
|
||||||
|
f 2/17/12 1/61/12 8/62/12 7/13/12
|
||||||
|
f 26/63/5 27/64/5 28/65/5 29/66/5
|
||||||
|
f 27/67/6 30/68/6 31/69/6 28/70/6
|
||||||
|
f 32/71/7 26/72/7 29/73/7 33/74/7
|
||||||
|
f 30/75/8 32/76/8 33/77/8 31/78/8
|
||||||
|
f 34/79/5 35/80/5 36/81/5 37/82/5
|
||||||
|
f 35/83/6 38/84/6 39/85/6 36/86/6
|
||||||
|
f 40/87/7 34/88/7 37/89/7 41/90/7
|
||||||
|
f 38/91/8 40/92/8 41/93/8 39/94/8
|
||||||
|
f 37/82/13 36/81/13 11/20/13 10/19/13
|
||||||
|
f 36/86/14 39/85/14 14/24/14 11/23/14
|
||||||
|
f 41/90/15 37/89/15 10/28/15 16/27/15
|
||||||
|
f 39/94/16 41/93/16 16/32/16 14/31/16
|
||||||
|
f 43/95/13 42/96/13 27/64/13 26/63/13
|
||||||
|
f 42/14/14 9/97/14 30/68/14 27/67/14
|
||||||
|
f 44/98/15 43/99/15 26/72/15 32/71/15
|
||||||
|
f 9/100/16 44/101/16 32/76/16 30/75/16
|
||||||
|
f 29/66/13 28/65/13 35/80/13 34/79/13
|
||||||
|
f 28/70/14 31/69/14 38/84/14 35/83/14
|
||||||
|
f 33/74/15 29/73/15 34/88/15 40/87/15
|
||||||
|
f 31/78/16 33/77/16 40/92/16 38/91/16
|
||||||
|
f 8/102/9 1/103/9 4/104/9 6/105/9
|
||||||
|
g Cube_Cube_Material.001_Cube_Cube_Material.001_sides_with_band
|
||||||
|
s off
|
||||||
|
f 47/106/10 51/107/10 52/108/10 50/109/10
|
||||||
|
f 48/110/11 49/111/11 46/112/11 45/113/11
|
||||||
|
f 47/114/9 50/115/9 48/116/9 45/117/9
|
||||||
|
f 51/118/4 46/112/4 49/111/4 52/119/4
|
||||||
|
g Cube_Cube_Material.001_Cube_Cube_Material.001_sides_without_band
|
||||||
|
f 45/113/1 46/120/1 51/107/1 47/121/1
|
||||||
|
f 50/109/3 52/119/3 49/111/3 48/122/3
|
BIN
extranodes/textures/technic_insulator_clip.png
Normal file
After Width: | Height: | Size: 202 B |
BIN
extranodes/textures/technic_steel_strut_overlay.png
Normal file
After Width: | Height: | Size: 103 B |
1
modpack.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
name = technic
|
|
@ -1 +0,0 @@
|
||||||
|
|
38
technic/README.md
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
Technic
|
||||||
|
=======
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
Copyright (C) 2012-2014 Maciej Kasatkin (RealBadAngel)
|
||||||
|
|
||||||
|
Technic chests code is licensed under the GNU LGPLv2+.
|
||||||
|
|
||||||
|
Texture licenses:
|
||||||
|
|
||||||
|
BlockMen modified by Zefram (CC BY-SA 3.0):
|
||||||
|
* technic_chernobylite_block.png
|
||||||
|
* technic_corium_flowing_animated.png
|
||||||
|
* technic_corium_source_animated.png
|
||||||
|
|
||||||
|
celeron55 (Perttu Ahola) modified by Zefram (CC BY-SA 3.0):
|
||||||
|
* technic_bucket_corium.png
|
||||||
|
|
||||||
|
sdzen (Elise Staudter) (CC BY-SA 3.0):
|
||||||
|
* most of the older 16x16 textures
|
||||||
|
|
||||||
|
leftshift (CC BY-SA 3.0):
|
||||||
|
* technic_river_water_can.png
|
||||||
|
|
||||||
|
RealBadAngel: (WTFPL)
|
||||||
|
* Everything else.
|
||||||
|
|
||||||
|
CC BY-SA 3.0: <http://creativecommons.org/licenses/by-sa/3.0/>
|
||||||
|
|
||||||
|
Sound licenses:
|
||||||
|
|
||||||
|
veikk0 (Veikko Mäkelä) (CC BY-SA 4.0):
|
||||||
|
* technic_hv_nuclear_reactor_siren_danger_loop.ogg
|
||||||
|
* Derived from "Nuclear alarm.wav" by Freesound.org user rene___ from <https://freesound.org/people/rene___/sounds/56778/>. Originally licensed under CC0 1.0 <https://creativecommons.org/publicdomain/zero/1.0/>
|
||||||
|
|
||||||
|
CC BY-SA 4.0: <https://creativecommons.org/licenses/by-sa/4.0/>
|
|
@ -1,7 +1,4 @@
|
||||||
|
technic.config = technic.config or Settings(minetest.get_worldpath().."/technic.conf")
|
||||||
local worldpath = minetest.get_worldpath()
|
|
||||||
|
|
||||||
technic.config = Settings(worldpath.."/technic.conf")
|
|
||||||
|
|
||||||
local conf_table = technic.config:to_table()
|
local conf_table = technic.config:to_table()
|
||||||
|
|
||||||
|
@ -9,10 +6,13 @@ local defaults = {
|
||||||
enable_mining_drill = "true",
|
enable_mining_drill = "true",
|
||||||
enable_mining_laser = "true",
|
enable_mining_laser = "true",
|
||||||
enable_flashlight = "false",
|
enable_flashlight = "false",
|
||||||
enable_rubber_tree_generation = "true",
|
|
||||||
enable_marble_generation = "true",
|
|
||||||
enable_granite_generation = "true",
|
|
||||||
enable_wind_mill = "false",
|
enable_wind_mill = "false",
|
||||||
|
enable_frames = "false",
|
||||||
|
enable_corium_griefing = "true",
|
||||||
|
enable_radiation_protection = "true",
|
||||||
|
enable_entity_radiation_damage = "true",
|
||||||
|
enable_longterm_radiation_damage = "true",
|
||||||
|
enable_nuclear_reactor_digiline_selfdestruct = "false",
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v in pairs(defaults) do
|
for k, v in pairs(defaults) do
|
||||||
|
@ -20,7 +20,3 @@ for k, v in pairs(defaults) do
|
||||||
technic.config:set(k, v)
|
technic.config:set(k, v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Create the config file if it doesn't exist
|
|
||||||
technic.config:write()
|
|
||||||
|
|
||||||
|
|
|
@ -1,57 +1,57 @@
|
||||||
|
-- check if we have the necessary dependencies to allow actually using these materials in the crafts
|
||||||
|
local mesecons_materials = minetest.get_modpath("mesecons_materials")
|
||||||
|
|
||||||
|
-- Remove some recipes
|
||||||
|
-- Bronze
|
||||||
|
minetest.clear_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "default:bronze_ingot"
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Accelerator tube
|
||||||
|
if pipeworks.enable_accelerator_tube then
|
||||||
|
minetest.clear_craft({
|
||||||
|
output = "pipeworks:accelerator_tube_1",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'pipeworks:accelerator_tube_1',
|
||||||
|
recipe = {
|
||||||
|
{'technic:copper_coil', 'pipeworks:tube_1', 'technic:copper_coil'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Teleport tube
|
||||||
|
if pipeworks.enable_teleport_tube then
|
||||||
|
minetest.clear_craft({
|
||||||
|
output = "pipeworks:teleport_tube_1",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'pipeworks:teleport_tube_1',
|
||||||
|
recipe = {
|
||||||
|
{'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'},
|
||||||
|
{'pipeworks:tube_1', 'technic:control_logic_unit', 'pipeworks:tube_1'},
|
||||||
|
{'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- basic materials' brass ingot
|
||||||
|
|
||||||
|
minetest.clear_craft({
|
||||||
|
output = "basic_materials:brass_ingot",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft( {
|
||||||
|
type = "shapeless",
|
||||||
|
output = "basic_materials:brass_ingot 9",
|
||||||
|
recipe = { "basic_materials:brass_block" },
|
||||||
|
})
|
||||||
|
|
||||||
-- tubes crafting recipes
|
-- tubes crafting recipes
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:tube_000000 9',
|
|
||||||
recipe = {
|
|
||||||
{'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
|
|
||||||
{'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
|
|
||||||
{'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:mese_tube_000000',
|
|
||||||
recipe = {
|
|
||||||
{'default:mese_crystal_fragment', 'pipeworks:tube_000000', 'default:mese_crystal_fragment'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:accelerator_tube_000000',
|
|
||||||
recipe = {
|
|
||||||
{'technic:copper_coil', 'pipeworks:tube_000000', 'technic:copper_coil'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:detector_tube_off_000000',
|
|
||||||
recipe = {
|
|
||||||
{'mesecons:mesecon', 'pipeworks:tube_000000', 'mesecons:mesecon'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:sand_tube_000000',
|
|
||||||
recipe = {
|
|
||||||
{'default:sand', 'pipeworks:tube_000000', 'default:sand'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:mese_sand_tube_000000',
|
|
||||||
recipe = {
|
|
||||||
{'default:mese_crystal_fragment', 'pipeworks:sand_tube_000000', 'default:mese_crystal_fragment'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'pipeworks:teleport_tube_000000',
|
|
||||||
recipe = {
|
|
||||||
{'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'},
|
|
||||||
{'pipeworks:tube_000000', 'technic:control_logic_unit', 'pipeworks:tube_000000'},
|
|
||||||
{'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:diamond_drill_head',
|
output = 'technic:diamond_drill_head',
|
||||||
recipe = {
|
recipe = {
|
||||||
|
@ -73,70 +73,60 @@ minetest.register_craft({
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:blue_energy_crystal',
|
output = 'technic:blue_energy_crystal',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:gold_ingot', 'technic:battery', 'dye:blue'},
|
{'moreores:mithril_ingot', 'technic:battery', 'dye:blue'},
|
||||||
{'technic:battery', 'technic:green_energy_crystal', 'technic:battery'},
|
{'technic:battery', 'technic:green_energy_crystal', 'technic:battery'},
|
||||||
{'dye:blue', 'technic:battery', 'default:gold_ingot'},
|
{'dye:blue', 'technic:battery', 'moreores:mithril_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:red_energy_crystal',
|
output = 'technic:red_energy_crystal',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:gold_ingot', 'technic:battery', 'dye:red'},
|
{'moreores:silver_ingot', 'technic:battery', 'dye:red'},
|
||||||
{'technic:battery', 'default:diamondblock', 'technic:battery'},
|
{'technic:battery', 'basic_materials:energy_crystal_simple', 'technic:battery'},
|
||||||
{'dye:red', 'technic:battery', 'default:gold_ingot'},
|
{'dye:red', 'technic:battery', 'moreores:silver_ingot'},
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'technic:fine_copper_wire 2',
|
|
||||||
recipe = {
|
|
||||||
{'', 'default:copper_ingot', ''},
|
|
||||||
{'', 'default:copper_ingot', ''},
|
|
||||||
{'', 'default:copper_ingot', ''},
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:copper_coil 1',
|
output = 'technic:copper_coil 1',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
|
{'basic_materials:copper_wire', 'technic:wrought_iron_ingot', 'basic_materials:copper_wire'},
|
||||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
{'technic:wrought_iron_ingot', '', 'technic:wrought_iron_ingot'},
|
||||||
{'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
|
{'basic_materials:copper_wire', 'technic:wrought_iron_ingot', 'basic_materials:copper_wire'},
|
||||||
}
|
},
|
||||||
|
replacements = {
|
||||||
|
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
|
||||||
|
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
|
||||||
|
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
|
||||||
|
{"basic_materials:copper_wire", "basic_materials:empty_spool"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
local isolation = mesecons_materials and "mesecons_materials:fiber" or "technic:rubber"
|
||||||
output = 'technic:motor',
|
|
||||||
recipe = {
|
|
||||||
{'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
|
|
||||||
{'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
|
|
||||||
{'default:steel_ingot', 'default:copper_ingot', 'default:steel_ingot'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:lv_transformer',
|
output = 'technic:lv_transformer',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:iron_lump', 'default:iron_lump', 'default:iron_lump'},
|
{isolation, 'technic:wrought_iron_ingot', isolation},
|
||||||
{'technic:copper_coil', 'default:iron_lump', 'technic:copper_coil'},
|
{'technic:copper_coil', 'technic:wrought_iron_ingot', 'technic:copper_coil'},
|
||||||
{'default:iron_lump', 'default:iron_lump', 'default:iron_lump'},
|
{'technic:wrought_iron_ingot', 'technic:wrought_iron_ingot', 'technic:wrought_iron_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:mv_transformer',
|
output = 'technic:mv_transformer',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
{isolation, 'technic:carbon_steel_ingot', isolation},
|
||||||
{'technic:copper_coil', 'default:steel_ingot', 'technic:copper_coil'},
|
{'technic:copper_coil', 'technic:carbon_steel_ingot', 'technic:copper_coil'},
|
||||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
{'technic:carbon_steel_ingot', 'technic:carbon_steel_ingot', 'technic:carbon_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:hv_transformer',
|
output = 'technic:hv_transformer',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
{isolation, 'technic:stainless_steel_ingot', isolation},
|
||||||
{'technic:copper_coil', 'technic:stainless_steel_ingot', 'technic:copper_coil'},
|
{'technic:copper_coil', 'technic:stainless_steel_ingot', 'technic:copper_coil'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
|
@ -145,10 +135,11 @@ minetest.register_craft({
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:control_logic_unit',
|
output = 'technic:control_logic_unit',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'', 'default:gold_ingot', ''},
|
{'', 'basic_materials:gold_wire', ''},
|
||||||
{'default:copper_ingot', 'technic:silicon_wafer', 'default:copper_ingot'},
|
{'default:copper_ingot', 'technic:silicon_wafer', 'default:copper_ingot'},
|
||||||
{'', 'default:copper_ingot', ''},
|
{'', 'technic:chromium_ingot', ''},
|
||||||
}
|
},
|
||||||
|
replacements = { {"basic_materials:gold_wire", "basic_materials:empty_spool"}, },
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -156,7 +147,7 @@ minetest.register_craft({
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
||||||
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
{'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
|
||||||
{'moreores:tin_ingot', 'moreores:tin_ingot', 'moreores:tin_ingot'},
|
{'default:tin_ingot', 'default:tin_ingot', 'default:tin_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -167,22 +158,24 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("technic:nothing", {
|
minetest.register_craft({
|
||||||
description = "",
|
output = "technic:machine_casing",
|
||||||
inventory_image = "blank.png",
|
recipe = {
|
||||||
|
{ "technic:cast_iron_ingot", "technic:cast_iron_ingot", "technic:cast_iron_ingot" },
|
||||||
|
{ "technic:cast_iron_ingot", "basic_materials:brass_ingot", "technic:cast_iron_ingot" },
|
||||||
|
{ "technic:cast_iron_ingot", "technic:cast_iron_ingot", "technic:cast_iron_ingot" },
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
output = "default:dirt 2",
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = "technic:nothing",
|
replacements = {{"bucket:bucket_water","bucket:bucket_empty"}},
|
||||||
recipe = {"default:copper_ingot", "default:steel_ingot"}
|
recipe = {
|
||||||
|
"technic:stone_dust",
|
||||||
|
"group:leaves",
|
||||||
|
"bucket:bucket_water",
|
||||||
|
"group:sand",
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest.register_craft_predict then
|
|
||||||
minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv)
|
|
||||||
if itemstack:get_name() == "technic:nothing" then
|
|
||||||
return ItemStack("")
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
default
|
default
|
||||||
moreores
|
|
||||||
pipeworks
|
pipeworks
|
||||||
mesecons
|
technic_worldgen
|
||||||
|
basic_materials
|
||||||
|
bucket?
|
||||||
|
screwdriver?
|
||||||
|
mesecons?
|
||||||
mesecons_mvps?
|
mesecons_mvps?
|
||||||
|
digilines?
|
||||||
|
digiline_remote?
|
||||||
intllib?
|
intllib?
|
||||||
|
unified_inventory?
|
||||||
|
vector_extras?
|
||||||
|
dye?
|
||||||
|
|
137
technic/doc/api.md
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
This file is fairly incomplete. Help is welcome.
|
||||||
|
|
||||||
|
Tiers
|
||||||
|
-----
|
||||||
|
The tier is a string, currently `"LV"`, `"MV"` and `"HV"` are supported.
|
||||||
|
|
||||||
|
Network
|
||||||
|
-------
|
||||||
|
The network is the cable with the connected machine nodes. Currently the
|
||||||
|
switching station handles the network activity.
|
||||||
|
|
||||||
|
Helper functions
|
||||||
|
----------------
|
||||||
|
* `technic.EU_string(num)`
|
||||||
|
* Converts num to a human-readable string (see pretty_num)
|
||||||
|
and adds the `EU` unit
|
||||||
|
* Use this function when showing players energy values
|
||||||
|
* `technic.pretty_num(num)`
|
||||||
|
* Converts the number `num` to a human-readable string with SI prefixes
|
||||||
|
* `technic.swap_node(pos, nodename)`
|
||||||
|
* Same as `mintest.swap_node` but it only changes the nodename.
|
||||||
|
* It uses `minetest.get_node` before swapping to ensure the new nodename
|
||||||
|
is not the same as the current one.
|
||||||
|
* `technic.get_or_load_node(pos)`
|
||||||
|
* If the mapblock is loaded, it returns the node at pos,
|
||||||
|
else it loads the chunk and returns `nil`.
|
||||||
|
* `technic.set_RE_wear(itemstack, item_load, max_charge)`
|
||||||
|
* If the `wear_represents` field in the item's nodedef is
|
||||||
|
`"technic_RE_charge"`, this function does nothing.
|
||||||
|
* `technic.refill_RE_charge(itemstack)`
|
||||||
|
* This function fully recharges an RE chargeable item.
|
||||||
|
* If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this
|
||||||
|
function does nothing, else that value is the maximum charge.
|
||||||
|
* The itemstack metadata is changed to contain the charge.
|
||||||
|
* `technic.is_tier_cable(nodename, tier)`
|
||||||
|
* Tells whether the node `nodename` is the cable of the tier `tier`.
|
||||||
|
* `technic.get_cable_tier(nodename)`
|
||||||
|
* Returns the tier of the cable `nodename` or `nil`.
|
||||||
|
* `technic.trace_node_ray(pos, dir, range)`
|
||||||
|
* Returns an iteration function (usable in the for loop) to iterate over the
|
||||||
|
node positions along the specified ray.
|
||||||
|
* The returned positions will not include the starting position `pos`.
|
||||||
|
* `technic.trace_node_ray_fat(pos, dir, range)`
|
||||||
|
* Like `technic.trace_node_ray` but includes extra positions near the ray.
|
||||||
|
* The node ray functions are used for mining lasers.
|
||||||
|
* `technic.config:get(name)`
|
||||||
|
* Some configuration function
|
||||||
|
* `technic.tube_inject_item(pos, start_pos, velocity, item)`
|
||||||
|
* Same as `pipeworks.tube_inject_item`
|
||||||
|
|
||||||
|
Registration functions
|
||||||
|
----------------------
|
||||||
|
* `technic.register_power_tool(itemname, max_charge)`
|
||||||
|
* Same as `technic.power_tools[itemname] = max_charge`
|
||||||
|
* This function makes the craftitem `itemname` chargeable.
|
||||||
|
* `technic.register_machine(tier, nodename, machine_type)`
|
||||||
|
* Same as `technic.machines[tier][nodename] = machine_type`
|
||||||
|
* Currently this is requisite to make technic recognize your node.
|
||||||
|
* See also `Machine types`
|
||||||
|
* `technic.register_tier(tier)`
|
||||||
|
* Same as `technic.machines[tier] = {}`
|
||||||
|
* See also `tiers`
|
||||||
|
|
||||||
|
### Specific machines
|
||||||
|
* `technic.register_solar_array(data)`
|
||||||
|
* data is a table
|
||||||
|
* `technic.can_insert_unique_stack(pos, node, stack, direction)`
|
||||||
|
* `technic.insert_object_unique_stack(pos, node, stack, direction)`
|
||||||
|
* Functions for the parameters `can_insert` and `insert_object` to avoid
|
||||||
|
filling multiple inventory slots with same type of item.
|
||||||
|
|
||||||
|
Used itemdef fields
|
||||||
|
-------------------
|
||||||
|
* groups:
|
||||||
|
* `technic_<ltier> = 1` ltier is a tier in small letters; this group makes
|
||||||
|
the node connect to the cable(s) of the right tier.
|
||||||
|
* `technic_machine = 1` Currently used for
|
||||||
|
* `connect_sides`
|
||||||
|
* In addition to the default use (see lua_api.txt), this tells where the
|
||||||
|
machine can be connected.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
* `technic_run(pos, node)`
|
||||||
|
* This function is currently used to update the node.
|
||||||
|
Modders have to manually change the information about supply etc. in the
|
||||||
|
node metadata.
|
||||||
|
|
||||||
|
Machine types
|
||||||
|
-------------
|
||||||
|
There are currently following types:
|
||||||
|
* `technic.receiver = "RE"` e.g. grinder
|
||||||
|
* `technic.producer = "PR"` e.g. solar panel
|
||||||
|
* `technic.producer_receiver = "PR_RE"` supply converter
|
||||||
|
* `technic.battery = "BA"` e.g. LV batbox
|
||||||
|
|
||||||
|
Switching Station
|
||||||
|
-----------------
|
||||||
|
The switching station is the center of all power distribution on an electric
|
||||||
|
network.
|
||||||
|
|
||||||
|
The station collects power from sources (PR), distributes it to sinks (RE),
|
||||||
|
and uses the excess/shortfall to charge and discharge batteries (BA).
|
||||||
|
|
||||||
|
For now, all supply and demand values are expressed in kW.
|
||||||
|
|
||||||
|
It works like this:
|
||||||
|
All PR,BA,RE nodes are indexed and tagged with the switching station.
|
||||||
|
The tagging is a workaround to allow more stations to be built without allowing
|
||||||
|
a cheat with duplicating power.
|
||||||
|
All the RE nodes are queried for their current EU demand. Those which are off
|
||||||
|
would require no or a small standby EU demand, while those which are on would
|
||||||
|
require more.
|
||||||
|
If the total demand is less than the available power they are all updated with
|
||||||
|
the demand number.
|
||||||
|
If any surplus exists from the PR nodes the batteries will be charged evenly
|
||||||
|
with this.
|
||||||
|
If the total demand requires draw on the batteries they will be discharged
|
||||||
|
evenly.
|
||||||
|
|
||||||
|
If the total demand is more than the available power all RE nodes will be shut
|
||||||
|
down. We have a brown-out situation.
|
||||||
|
|
||||||
|
Hence for now all the power distribution logic resides in this single node.
|
||||||
|
|
||||||
|
### Node meta usage
|
||||||
|
Nodes connected to the network will have one or more of these parameters as meta
|
||||||
|
data:
|
||||||
|
* `<LV|MV|HV>_EU_supply` : Exists for PR and BA node types.
|
||||||
|
This is the EU value supplied by the node. Output
|
||||||
|
* `<LV|MV|HV>_EU_demand` : Exists for RE and BA node types.
|
||||||
|
This is the EU value the node requires to run. Output
|
||||||
|
* `<LV|MV|HV>_EU_input` : Exists for RE and BA node types.
|
||||||
|
This is the actual EU value the network can give the node. Input
|
||||||
|
|
||||||
|
The reason the LV|MV|HV type is prepended to meta data is because some machine
|
||||||
|
could require several supplies to work.
|
||||||
|
This way the supplies are separated per network.
|
|
@ -1,10 +1,223 @@
|
||||||
function get_item_meta (string)
|
local constant_digit_count = technic.config:get("constant_digit_count")
|
||||||
if string.find(string, "return {") then
|
|
||||||
return minetest.deserialize(string)
|
-- converts a number to a readable string with SI prefix, e.g. 10000 → "10 k",
|
||||||
else return nil
|
-- 15 → "15 ", 0.1501 → "150.1 m"
|
||||||
|
-- a non-breaking space (U+a0) instead of a usual one is put after number
|
||||||
|
-- The precision is 4 digits
|
||||||
|
local prefixes = {[-8] = "y", [-7] = "z", [-6] = "a", [-5] = "f", [-4] = "p",
|
||||||
|
[-3] = "n", [-2] = "µ", [-1] = "m", [0] = "", [1] = "k", [2] = "M",
|
||||||
|
[3] = "G", [4] = "T", [5] = "P", [6] = "E", [7] = "Z", [8] = "Y"}
|
||||||
|
function technic.pretty_num(num)
|
||||||
|
-- the small number added is due to floating point inaccuracy
|
||||||
|
local b = math.floor(math.log10(math.abs(num)) +0.000001)
|
||||||
|
local pref_i
|
||||||
|
if b ~= 0 then
|
||||||
|
-- b is decremented by 1 to avoid a single digit with many decimals,
|
||||||
|
-- e.g. instead of 1.021 MEU, 1021 kEU is shown
|
||||||
|
pref_i = math.floor((b - 1) / 3)
|
||||||
|
else
|
||||||
|
-- as special case, avoid showing e.g. 1100 mEU instead of 1.1 EU
|
||||||
|
pref_i = 0
|
||||||
|
end
|
||||||
|
if not prefixes[pref_i] then
|
||||||
|
-- This happens for 0, nan, inf, very big values, etc.
|
||||||
|
if num == 0 then
|
||||||
|
-- handle 0 explicilty to avoid showing "-0"
|
||||||
|
if not constant_digit_count then
|
||||||
|
return "0 "
|
||||||
|
end
|
||||||
|
-- gives 0.000
|
||||||
|
return string.format("%.3f ", 0)
|
||||||
|
end
|
||||||
|
return string.format("%.4g ", num)
|
||||||
|
end
|
||||||
|
|
||||||
|
num = num * 10 ^ (-3 * pref_i)
|
||||||
|
if constant_digit_count then
|
||||||
|
local comma_digits_cnt = 3 - (b - 3 * pref_i)
|
||||||
|
return string.format("%." .. comma_digits_cnt .. "f %s",
|
||||||
|
num, prefixes[pref_i])
|
||||||
|
end
|
||||||
|
return string.format("%.4g %s", num, prefixes[pref_i])
|
||||||
|
end
|
||||||
|
|
||||||
|
-- some unittests
|
||||||
|
assert(technic.pretty_num(-0) == "0 ")
|
||||||
|
assert(technic.pretty_num(0) == "0 ")
|
||||||
|
assert(technic.pretty_num(1234) == "1234 ")
|
||||||
|
assert(technic.pretty_num(123456789) == "123.5 M")
|
||||||
|
|
||||||
|
|
||||||
|
-- used to display power values
|
||||||
|
function technic.EU_string(num)
|
||||||
|
return technic.pretty_num(num) .. "EU"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Same as minetest.swap_node, but only changes name
|
||||||
|
-- and doesn't re-set if already set.
|
||||||
|
function technic.swap_node(pos, name)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
if node.name ~= name then
|
||||||
|
node.name = name
|
||||||
|
minetest.swap_node(pos, node)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function set_item_meta (table)
|
|
||||||
return minetest.serialize(table)
|
--- Fully charge RE chargeable item.
|
||||||
|
-- Must be defined early to reference in item definitions.
|
||||||
|
function technic.refill_RE_charge(stack)
|
||||||
|
local max_charge = technic.power_tools[stack:get_name()]
|
||||||
|
if not max_charge then return stack end
|
||||||
|
technic.set_RE_wear(stack, max_charge, max_charge)
|
||||||
|
local meta = minetest.deserialize(stack:get_metadata()) or {}
|
||||||
|
meta.charge = max_charge
|
||||||
|
stack:set_metadata(minetest.serialize(meta))
|
||||||
|
return stack
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- If the node is loaded, returns it. If it isn't loaded, load it and return nil.
|
||||||
|
function technic.get_or_load_node(pos)
|
||||||
|
local node = minetest.get_node_or_nil(pos)
|
||||||
|
if node then return node end
|
||||||
|
local vm = VoxelManip()
|
||||||
|
local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
technic.tube_inject_item = pipeworks.tube_inject_item or function(pos, start_pos, velocity, item)
|
||||||
|
local tubed = pipeworks.tube_item(vector.new(pos), item)
|
||||||
|
tubed:get_luaentity().start_pos = vector.new(start_pos)
|
||||||
|
tubed:set_velocity(velocity)
|
||||||
|
tubed:set_acceleration(vector.new(0, 0, 0))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Iterates over the node positions along the specified ray.
|
||||||
|
-- The returned positions will not include the starting position.
|
||||||
|
function technic.trace_node_ray(pos, dir, range)
|
||||||
|
local x_step = dir.x > 0 and 1 or -1
|
||||||
|
local y_step = dir.y > 0 and 1 or -1
|
||||||
|
local z_step = dir.z > 0 and 1 or -1
|
||||||
|
|
||||||
|
local i = 1
|
||||||
|
return function(p)
|
||||||
|
-- Approximation of where we should be if we weren't rounding
|
||||||
|
-- to nodes. This moves forward a bit faster then we do.
|
||||||
|
-- A correction is done below.
|
||||||
|
local real_x = pos.x + (dir.x * i)
|
||||||
|
local real_y = pos.y + (dir.y * i)
|
||||||
|
local real_z = pos.z + (dir.z * i)
|
||||||
|
|
||||||
|
-- How far off we've gotten from where we should be.
|
||||||
|
local dx = math.abs(real_x - p.x)
|
||||||
|
local dy = math.abs(real_y - p.y)
|
||||||
|
local dz = math.abs(real_z - p.z)
|
||||||
|
|
||||||
|
-- If the real position moves ahead too fast, stop it so we
|
||||||
|
-- can catch up. If it gets too far ahead it will smooth
|
||||||
|
-- out our movement too much and we won't turn fast enough.
|
||||||
|
if dx + dy + dz < 2 then
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Step in whichever direction we're most off course in.
|
||||||
|
if dx > dy then
|
||||||
|
if dx > dz then
|
||||||
|
p.x = p.x + x_step
|
||||||
|
else
|
||||||
|
p.z = p.z + z_step
|
||||||
|
end
|
||||||
|
elseif dy > dz then
|
||||||
|
p.y = p.y + y_step
|
||||||
|
else
|
||||||
|
p.z = p.z + z_step
|
||||||
|
end
|
||||||
|
if vector.distance(pos, p) > range then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return p
|
||||||
|
end, vector.round(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Like trace_node_ray, but includes extra positions close to the ray.
|
||||||
|
function technic.trace_node_ray_fat(pos, dir, range)
|
||||||
|
local x_step = dir.x > 0 and 1 or -1
|
||||||
|
local y_step = dir.y > 0 and 1 or -1
|
||||||
|
local z_step = dir.z > 0 and 1 or -1
|
||||||
|
|
||||||
|
local next_poses = {}
|
||||||
|
|
||||||
|
local i = 1
|
||||||
|
return function(p)
|
||||||
|
local ni, np = next(next_poses)
|
||||||
|
if np then
|
||||||
|
next_poses[ni] = nil
|
||||||
|
return np
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Approximation of where we should be if we weren't rounding
|
||||||
|
-- to nodes. This moves forward a bit faster then we do.
|
||||||
|
-- A correction is done below.
|
||||||
|
local real_x = pos.x + (dir.x * i)
|
||||||
|
local real_y = pos.y + (dir.y * i)
|
||||||
|
local real_z = pos.z + (dir.z * i)
|
||||||
|
|
||||||
|
-- How far off we've gotten from where we should be.
|
||||||
|
local dx = math.abs(real_x - p.x)
|
||||||
|
local dy = math.abs(real_y - p.y)
|
||||||
|
local dz = math.abs(real_z - p.z)
|
||||||
|
|
||||||
|
-- If the real position moves ahead too fast, stop it so we
|
||||||
|
-- can catch up. If it gets too far ahead it will smooth
|
||||||
|
-- out our movement too much and we won't turn fast enough.
|
||||||
|
if dx + dy + dz < 2 then
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Step in whichever direction we're most off course in.
|
||||||
|
local sx, sy, sz -- Whether we've already stepped along each axis
|
||||||
|
if dx > dy then
|
||||||
|
if dx > dz then
|
||||||
|
sx = true
|
||||||
|
p.x = p.x + x_step
|
||||||
|
else
|
||||||
|
sz = true
|
||||||
|
p.z = p.z + z_step
|
||||||
|
end
|
||||||
|
elseif dy > dz then
|
||||||
|
sy = true
|
||||||
|
p.y = p.y + y_step
|
||||||
|
else
|
||||||
|
sz = true
|
||||||
|
p.z = p.z + z_step
|
||||||
|
end
|
||||||
|
|
||||||
|
if vector.distance(pos, p) > range then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add other positions that we're significantly off on.
|
||||||
|
-- We can just use fixed integer keys here because the
|
||||||
|
-- table will be completely cleared before we reach this
|
||||||
|
-- code block again.
|
||||||
|
local dlen = math.sqrt(dx*dx + dy*dy + dz*dz)
|
||||||
|
-- Normalized axis deltas
|
||||||
|
local dxn, dyn, dzn = dx / dlen, dy / dlen, dz / dlen
|
||||||
|
if not sx and dxn > 0.5 then
|
||||||
|
next_poses[1] = vector.new(p.x + x_step, p.y, p.z)
|
||||||
|
end
|
||||||
|
if not sy and dyn > 0.5 then
|
||||||
|
next_poses[2] = vector.new(p.x, p.y + y_step, p.z)
|
||||||
|
end
|
||||||
|
if not sz and dzn > 0.5 then
|
||||||
|
next_poses[3] = vector.new(p.x, p.y, p.z + z_step)
|
||||||
|
end
|
||||||
|
|
||||||
|
return p
|
||||||
|
end, vector.round(pos)
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,17 +2,21 @@
|
||||||
-- namespace: technic
|
-- namespace: technic
|
||||||
-- (c) 2012-2013 by RealBadAngel <mk@realbadangel.pl>
|
-- (c) 2012-2013 by RealBadAngel <mk@realbadangel.pl>
|
||||||
|
|
||||||
technic = {}
|
|
||||||
|
|
||||||
local load_start = os.clock()
|
local load_start = os.clock()
|
||||||
|
|
||||||
|
technic = rawget(_G, "technic") or {}
|
||||||
|
technic.creative_mode = minetest.settings:get_bool("creative_mode")
|
||||||
|
|
||||||
|
|
||||||
local modpath = minetest.get_modpath("technic")
|
local modpath = minetest.get_modpath("technic")
|
||||||
technic.modpath = modpath
|
technic.modpath = modpath
|
||||||
|
|
||||||
|
|
||||||
-- Boilerplate to support intllib
|
-- Boilerplate to support intllib
|
||||||
if intllib then
|
if rawget(_G, "intllib") then
|
||||||
technic.getter = intllib.Getter()
|
technic.getter = intllib.Getter()
|
||||||
else
|
else
|
||||||
technic.getter = function(s) return s end
|
technic.getter = function(s,a,...)if a==nil then return s end a={a,...}return s:gsub("(@?)@(%(?)(%d+)(%)?)",function(e,o,n,c)if e==""then return a[tonumber(n)]..(o==""and c or"")else return"@"..o..n..c end end) end
|
||||||
end
|
end
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
|
@ -31,6 +35,9 @@ dofile(modpath.."/crafts.lua")
|
||||||
-- Register functions
|
-- Register functions
|
||||||
dofile(modpath.."/register.lua")
|
dofile(modpath.."/register.lua")
|
||||||
|
|
||||||
|
-- Radiation
|
||||||
|
dofile(modpath.."/radiation.lua")
|
||||||
|
|
||||||
-- Machines
|
-- Machines
|
||||||
dofile(modpath.."/machines/init.lua")
|
dofile(modpath.."/machines/init.lua")
|
||||||
|
|
||||||
|
@ -40,28 +47,7 @@ dofile(modpath.."/tools/init.lua")
|
||||||
-- Aliases for legacy node/item names
|
-- Aliases for legacy node/item names
|
||||||
dofile(modpath.."/legacy.lua")
|
dofile(modpath.."/legacy.lua")
|
||||||
|
|
||||||
function has_locked_chest_privilege(meta, player)
|
if minetest.settings:get_bool("log_mods") then
|
||||||
if player:get_player_name() ~= meta:get_string("owner") then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Swap nodes out. Return the node name.
|
|
||||||
function hacky_swap_node(pos, name)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
if node.name ~= name then
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local meta_table = meta:to_table()
|
|
||||||
node.name = name
|
|
||||||
minetest.set_node(pos, node)
|
|
||||||
meta = minetest.get_meta(pos)
|
|
||||||
meta:from_table(meta_table)
|
|
||||||
end
|
|
||||||
return node.name
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.setting_get("log_mod") then
|
|
||||||
print(S("[Technic] Loaded in %f seconds"):format(os.clock() - load_start))
|
print(S("[Technic] Loaded in %f seconds"):format(os.clock() - load_start))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,6 @@ minetest.register_craftitem( "technic:doped_silicon_wafer", {
|
||||||
inventory_image = "technic_doped_silicon_wafer.png",
|
inventory_image = "technic_doped_silicon_wafer.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("technic:enriched_uranium", {
|
|
||||||
description = S("Enriched Uranium"),
|
|
||||||
inventory_image = "technic_enriched_uranium.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("technic:uranium_fuel", {
|
minetest.register_craftitem("technic:uranium_fuel", {
|
||||||
description = S("Uranium Fuel"),
|
description = S("Uranium Fuel"),
|
||||||
inventory_image = "technic_uranium_fuel.png",
|
inventory_image = "technic_uranium_fuel.png",
|
||||||
|
@ -32,6 +27,8 @@ minetest.register_tool("technic:blue_energy_crystal", {
|
||||||
"technic_diamond_block_blue.png",
|
"technic_diamond_block_blue.png",
|
||||||
"technic_diamond_block_blue.png",
|
"technic_diamond_block_blue.png",
|
||||||
"technic_diamond_block_blue.png"),
|
"technic_diamond_block_blue.png"),
|
||||||
|
wear_represents = "technic_RE_charge",
|
||||||
|
on_refill = technic.refill_RE_charge,
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
max_drop_level = 0,
|
max_drop_level = 0,
|
||||||
groupcaps = {
|
groupcaps = {
|
||||||
|
@ -46,6 +43,8 @@ minetest.register_tool("technic:green_energy_crystal", {
|
||||||
"technic_diamond_block_green.png",
|
"technic_diamond_block_green.png",
|
||||||
"technic_diamond_block_green.png",
|
"technic_diamond_block_green.png",
|
||||||
"technic_diamond_block_green.png"),
|
"technic_diamond_block_green.png"),
|
||||||
|
wear_represents = "technic_RE_charge",
|
||||||
|
on_refill = technic.refill_RE_charge,
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
max_drop_level = 0,
|
max_drop_level = 0,
|
||||||
groupcaps = {
|
groupcaps = {
|
||||||
|
@ -60,6 +59,8 @@ minetest.register_tool("technic:red_energy_crystal", {
|
||||||
"technic_diamond_block_red.png",
|
"technic_diamond_block_red.png",
|
||||||
"technic_diamond_block_red.png",
|
"technic_diamond_block_red.png",
|
||||||
"technic_diamond_block_red.png"),
|
"technic_diamond_block_red.png"),
|
||||||
|
wear_represents = "technic_RE_charge",
|
||||||
|
on_refill = technic.refill_RE_charge,
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
max_drop_level = 0,
|
max_drop_level = 0,
|
||||||
groupcaps = {
|
groupcaps = {
|
||||||
|
@ -68,31 +69,16 @@ minetest.register_tool("technic:red_energy_crystal", {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
minetest.register_craftitem("technic:fine_copper_wire", {
|
|
||||||
description = S("Fine Copper Wire"),
|
|
||||||
inventory_image = "technic_fine_copper_wire.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("technic:copper_coil", {
|
minetest.register_craftitem("technic:copper_coil", {
|
||||||
description = S("Copper Coil"),
|
description = S("Copper Coil"),
|
||||||
inventory_image = "technic_copper_coil.png",
|
inventory_image = "technic_copper_coil.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("technic:motor", {
|
|
||||||
description = S("Electric Motor"),
|
|
||||||
inventory_image = "technic_motor.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("technic:lv_transformer", {
|
minetest.register_craftitem("technic:lv_transformer", {
|
||||||
description = S("Low Voltage Transformer"),
|
description = S("Low Voltage Transformer"),
|
||||||
inventory_image = "technic_lv_transformer.png",
|
inventory_image = "technic_lv_transformer.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("technic:lv_transformer", {
|
|
||||||
description = S("Low Voltage Transformer"),
|
|
||||||
inventory_image = "technic_lv_transformer.png",
|
|
||||||
})
|
|
||||||
minetest.register_craftitem("technic:mv_transformer", {
|
minetest.register_craftitem("technic:mv_transformer", {
|
||||||
description = S("Medium Voltage Transformer"),
|
description = S("Medium Voltage Transformer"),
|
||||||
inventory_image = "technic_mv_transformer.png",
|
inventory_image = "technic_mv_transformer.png",
|
||||||
|
@ -138,3 +124,80 @@ minetest.register_craftitem("technic:carbon_cloth", {
|
||||||
inventory_image = "technic_carbon_cloth.png",
|
inventory_image = "technic_carbon_cloth.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_node("technic:machine_casing", {
|
||||||
|
description = S("Machine Casing"),
|
||||||
|
groups = {cracky=2},
|
||||||
|
sunlight_propagates = true,
|
||||||
|
paramtype = "light",
|
||||||
|
drawtype = "allfaces",
|
||||||
|
tiles = {"technic_machine_casing.png"},
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
for p = 0, 35 do
|
||||||
|
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
|
||||||
|
local psuffix = p == 7 and "" or p
|
||||||
|
local ingot = "technic:uranium"..psuffix.."_ingot"
|
||||||
|
local block = "technic:uranium"..psuffix.."_block"
|
||||||
|
local ov = p == 7 and minetest.override_item or nil;
|
||||||
|
(ov or minetest.register_craftitem)(ingot, {
|
||||||
|
description = string.format(S("%.1f%%-Fissile Uranium Ingot"), p/10),
|
||||||
|
inventory_image = "technic_uranium_ingot.png",
|
||||||
|
groups = {uranium_ingot=1, not_in_creative_inventory=nici},
|
||||||
|
});
|
||||||
|
-- Note on radioactivity of blocks:
|
||||||
|
-- Source: <http://www.wise-uranium.org/rup.html>
|
||||||
|
-- The baseline radioactivity of an isotope is not especially
|
||||||
|
-- correlated with whether it's fissile (i.e., suitable as
|
||||||
|
-- reactor fuel). Natural uranium consists mainly of fissile
|
||||||
|
-- U-235 and non-fissile U-238, and both U-235 and U-238 are
|
||||||
|
-- significantly radioactive. U-235's massic activity is
|
||||||
|
-- about 80.0 MBq/kg, and U-238's is about 12.4 MBq/kg, which
|
||||||
|
-- superficially suggests that 3.5%-fissile uranium should have
|
||||||
|
-- only 1.19 times the activity of fully-depleted uranium.
|
||||||
|
-- But a third isotope affects the result hugely: U-234 has
|
||||||
|
-- massic activity of 231 GBq/kg. Natural uranium has massic
|
||||||
|
-- composition of 99.2837% U-238, 0.711% U-235, and 0.0053% U-234,
|
||||||
|
-- so its activity comes roughly 49% each from U-234 and U-238
|
||||||
|
-- and only 2% from U-235. During enrichment via centrifuge,
|
||||||
|
-- the U-234 fraction is concentrated along with the U-235, with
|
||||||
|
-- the U-234:U-235 ratio remaining close to its original value.
|
||||||
|
-- (Actually the U-234 gets separated from U-238 slightly more
|
||||||
|
-- than the U-235 is, so the U-234:U-235 ratio is slightly
|
||||||
|
-- higher in enriched uranium.) A typical massic composition
|
||||||
|
-- for 3.5%-fissile uranium is 96.47116% U-238, 3.5% U-235, and
|
||||||
|
-- 0.02884% U-234. This gives 3.5%-fissile uranium about 6.55
|
||||||
|
-- times the activity of fully-depleted uranium. The values we
|
||||||
|
-- compute here for the "radioactive" group value are based on
|
||||||
|
-- linear interpolation of activity along that scale, rooted at
|
||||||
|
-- a natural (0.7%-fissile) uranium block having the activity of
|
||||||
|
-- 9 uranium ore blocks (due to 9 ingots per block). The group
|
||||||
|
-- value is proportional to the square root of the activity, and
|
||||||
|
-- uranium ore has radioactive=1. This yields radioactive=1.0
|
||||||
|
-- for a fully-depleted uranium block and radioactive=2.6 for
|
||||||
|
-- a 3.5%-fissile uranium block.
|
||||||
|
local radioactivity = math.floor(math.sqrt((1+5.55*p/35) * 18 / (1+5.55*7/35)) + 0.5);
|
||||||
|
(ov or minetest.register_node)(block, {
|
||||||
|
description = string.format(S("%.1f%%-Fissile Uranium Block"), p/10),
|
||||||
|
tiles = {"technic_uranium_block.png"},
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {uranium_block=1, not_in_creative_inventory=nici,
|
||||||
|
cracky=1, level=2, radioactive=radioactivity},
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
});
|
||||||
|
if not ov then
|
||||||
|
minetest.register_craft({
|
||||||
|
output = block,
|
||||||
|
recipe = {
|
||||||
|
{ingot, ingot, ingot},
|
||||||
|
{ingot, ingot, ingot},
|
||||||
|
{ingot, ingot, ingot},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
minetest.register_craft({
|
||||||
|
output = ingot.." 9",
|
||||||
|
recipe = {{block}},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
|
@ -17,16 +17,25 @@ technic.legacy_nodenames = {
|
||||||
["technic:electric_furnace_active"] = "technic:lv_electric_furnace_active",
|
["technic:electric_furnace_active"] = "technic:lv_electric_furnace_active",
|
||||||
["technic:grinder"] = "technic:lv_grinder",
|
["technic:grinder"] = "technic:lv_grinder",
|
||||||
["technic:grinder_active"] = "technic:lv_grinder_active",
|
["technic:grinder_active"] = "technic:lv_grinder_active",
|
||||||
|
["technic:extractor"] = "technic:lv_extractor",
|
||||||
|
["technic:extractor_active"] = "technic:lv_extractor_active",
|
||||||
|
["technic:compressor"] = "technic:lv_compressor",
|
||||||
|
["technic:compressor_active"] = "technic:lv_compressor_active",
|
||||||
["technic:hv_battery_box"] = "technic:hv_battery_box0",
|
["technic:hv_battery_box"] = "technic:hv_battery_box0",
|
||||||
["technic:hv_cable"] = "technic:hv_cable0",
|
|
||||||
["technic:lv_cable"] = "technic:lv_cable0",
|
|
||||||
["technic:mv_cable"] = "technic:mv_cable0",
|
|
||||||
["technic:mv_battery_box"] = "technic:mv_battery_box0",
|
["technic:mv_battery_box"] = "technic:mv_battery_box0",
|
||||||
["technic:generator"] = "technic:lv_generator",
|
["technic:generator"] = "technic:lv_generator",
|
||||||
["technic:generator_active"] = "technic:lv_generator_active",
|
["technic:generator_active"] = "technic:lv_generator_active",
|
||||||
|
["technic:iron_dust"] = "technic:wrought_iron_dust",
|
||||||
|
["technic:enriched_uranium"] = "technic:uranium35_ingot",
|
||||||
}
|
}
|
||||||
|
|
||||||
for old, new in pairs(technic.legacy_nodenames) do
|
for old, new in pairs(technic.legacy_nodenames) do
|
||||||
minetest.register_alias(old, new)
|
minetest.register_alias(old, new)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
for i = 0, 64 do
|
||||||
|
minetest.register_alias("technic:hv_cable"..i, "technic:hv_cable")
|
||||||
|
minetest.register_alias("technic:mv_cable"..i, "technic:mv_cable")
|
||||||
|
minetest.register_alias("technic:lv_cable"..i, "technic:lv_cable")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
168
technic/locale/de.txt
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
# German Translation for Technic Mod
|
||||||
|
# Deutsche Uebersetzung des Technic Mods
|
||||||
|
# by Xanthin
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
[Technic] Loaded in %f seconds = [Technic] ist in %f Sekunden geladen
|
||||||
|
|
||||||
|
## Items
|
||||||
|
Silicon Wafer = Siliziumscheibe
|
||||||
|
Doped Silicon Wafer = Dotierte Siliziumscheibe
|
||||||
|
Enriched Uranium = Angereichertes Uran
|
||||||
|
Uranium Fuel = Uranbrennstoff
|
||||||
|
Diamond Drill Head = Diamantbohrkopf
|
||||||
|
Blue Energy Crystal = Blauer Energiekristall
|
||||||
|
Green Energy Crystal = Gruener Energiekristall
|
||||||
|
Red Energy Crystal = Roter Energiekristall
|
||||||
|
Fine Copper Wire = Feinkupferdraht
|
||||||
|
Copper Coil = Kupferspule
|
||||||
|
Electric Motor = Elektromotor
|
||||||
|
Low Voltage Transformer = Niederspannungstransformator
|
||||||
|
Medium Voltage Transformer = Mittelspannungstransformator
|
||||||
|
High Voltage Transformer = Hochspannungstransformator
|
||||||
|
Control Logic Unit = Steuer- und Regelungseinheit
|
||||||
|
Mixed Metal Ingot = Mischmetallbarren
|
||||||
|
Composite Plate = Verbundplatte
|
||||||
|
Copper Plate = Kupferplatte
|
||||||
|
Carbon Plate = Kohlefaserplatte
|
||||||
|
Graphite = Graphit
|
||||||
|
Carbon Cloth = Kohlefasergewebe
|
||||||
|
Raw Latex = Rohlatex
|
||||||
|
Rubber Fiber = Gummifaser
|
||||||
|
%.1f%%-Fissile Uranium Ingot =
|
||||||
|
%.1f%%-Fissile Uranium Block =
|
||||||
|
|
||||||
|
## Machine misc
|
||||||
|
Machine cannot be removed because it is not empty = Die Maschine kann nicht entfernt werden, weil sie noch nicht leer ist.
|
||||||
|
Inventory move disallowed due to protection = Das Inventar ist geschuetzt, Zugriff verweigert.
|
||||||
|
# $1: Machine name (Includes tier)
|
||||||
|
@1 Active (@2 EU) = @1 ist eingeschaltet (@2 EU)
|
||||||
|
%s Active = %s ist eingeschaltet
|
||||||
|
%s Disabled = %s ist ausgeschaltet
|
||||||
|
%s Enabled =
|
||||||
|
%s Idle = %s ist bereit
|
||||||
|
%s Improperly Placed = %s ist falsch plaziert
|
||||||
|
%s Unpowered = %s hat keine Stromversorgung
|
||||||
|
%s Out Of Fuel = %s hat keinen Brennstoff
|
||||||
|
%s Has Bad Cabling = %s ist falsch verkabelt
|
||||||
|
%s Has No Network = %s hat kein Netzwerk
|
||||||
|
%s Finished = %s ist fertig
|
||||||
|
Enable/Disable = Einschalten/Ausschalten
|
||||||
|
Range = Reichweite
|
||||||
|
Upgrade Slots = Verbesserungsfaecher
|
||||||
|
In: = Rein:
|
||||||
|
Out: = Raus:
|
||||||
|
Slot %d = Fach %d
|
||||||
|
Itemwise = Einzelstuecke
|
||||||
|
Stackwise = Ganzer Stapel
|
||||||
|
Owner: =
|
||||||
|
Unlocked =
|
||||||
|
Locked =
|
||||||
|
Radius: =
|
||||||
|
Enabled =
|
||||||
|
Disabled =
|
||||||
|
|
||||||
|
## Machine names
|
||||||
|
# $1: Tier
|
||||||
|
%s Alloy Furnace = %s Legierungsofen
|
||||||
|
%s Battery Box = %s Batteriebox
|
||||||
|
%s Cable = %s Kabel
|
||||||
|
%s Compressor = %s Kompressor
|
||||||
|
%s Extractor = %s Extraktor
|
||||||
|
%s Forcefield Emitter = %s Kraftfeld-Emitter
|
||||||
|
%s Furnace = %s Ofen
|
||||||
|
%s Grinder = %s Schleifmaschine
|
||||||
|
%s Music Player = %s Musikspieler
|
||||||
|
%s Quarry = %s Steinbruch
|
||||||
|
%s Tool Workshop = %s Werkzeugwerkstatt
|
||||||
|
Arrayed Solar %s Generator = %s Solaranlage
|
||||||
|
Fuel-Fired %s Generator = %s Kohle-Generator
|
||||||
|
Geothermal %s Generator = %s Geothermie-Generator
|
||||||
|
Hydro %s Generator = %s Wassermuehle
|
||||||
|
Nuclear %s Generator Core = %s Reaktorkern
|
||||||
|
Small Solar %s Generator = %s Solarmodul
|
||||||
|
Wind %s Generator = %s Windmuehle
|
||||||
|
Self-Contained Injector = Selbstversorger-Injektor
|
||||||
|
Constructor Mk%d = Konstruktor Modell %d
|
||||||
|
Frame = Rahmen
|
||||||
|
Frame Motor = Rahmenmotor
|
||||||
|
Template = Schablone
|
||||||
|
Template (replacing) = Schablone (ersetzend)
|
||||||
|
Template motor = Schablonenmotor
|
||||||
|
Template tool = Schablonenwerkzeug
|
||||||
|
Battery Box = Batteriebox
|
||||||
|
Supply Converter = Stromumwandler
|
||||||
|
Switching Station = Schaltanlage
|
||||||
|
Fuel-Fired Alloy Furnace = Kohle-Legierungsofen
|
||||||
|
Fuel-Fired Furnace = Kohle-Ofen
|
||||||
|
Wind Mill Frame = Windmuehlengeruest
|
||||||
|
Forcefield = Kraftfeld
|
||||||
|
Nuclear Reactor Rod Compartment = Brennstabfaecher
|
||||||
|
Administrative World Anchor =
|
||||||
|
|
||||||
|
## Machine-specific
|
||||||
|
# $1: Pruduced EU
|
||||||
|
Charge = Aufladen
|
||||||
|
Discharge = Entladen
|
||||||
|
Power level = Energiestufe
|
||||||
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
|
@1 Battery Box: @2/@3 = @1 Batteriebox: @2/@3
|
||||||
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
|
@1. Supply: @2 Demand: @3 = @1. Versorgung: @2 Bedarf: @3
|
||||||
|
Production at %d%% = Produktion bei %d%%
|
||||||
|
Choose Milling Program: = Waehle ein Fraesprogramm:
|
||||||
|
Slim Elements half / normal height: = Schmale Elemente von halber / normaler Hoehe:
|
||||||
|
Current track %s = Aktueller Titel %s
|
||||||
|
Stopped =
|
||||||
|
Keeping %d/%d map blocks loaded =
|
||||||
|
Digging not started =
|
||||||
|
Digging finished =
|
||||||
|
Digging %d m above machine =
|
||||||
|
Digging %d m below machine =
|
||||||
|
|
||||||
|
## Grinder Recipes
|
||||||
|
# $1: Name
|
||||||
|
%s Dust = %sstaub
|
||||||
|
Akalin = Akalin
|
||||||
|
Alatro = Alatro
|
||||||
|
Arol = Arol
|
||||||
|
Brass = Messing
|
||||||
|
Bronze = Bronze
|
||||||
|
Carbon Steel = Kohlenstoffstahl
|
||||||
|
Cast Iron = Gusseisen
|
||||||
|
Chromium = Chrom
|
||||||
|
Coal = Kohle
|
||||||
|
Copper = Kupfer
|
||||||
|
Gold = Gold
|
||||||
|
Mithril = Mithril
|
||||||
|
Silver = Silber
|
||||||
|
Stainless Steel = Edelstahl
|
||||||
|
Talinite = Talinite
|
||||||
|
Tin = Zinn
|
||||||
|
Wrought Iron = Schmiedeeisen
|
||||||
|
Zinc = Zink
|
||||||
|
%.1f%%-Fissile Uranium =
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
RE Battery = Akkubatterie
|
||||||
|
Water Can = Wasserkanister
|
||||||
|
Lava Can = Lavakanister
|
||||||
|
Chainsaw = Kettensaege
|
||||||
|
Flashlight = Taschenlampe
|
||||||
|
3 nodes deep. = 3 Bloecke tief.
|
||||||
|
3 nodes tall. = 3 Bloecke hoch.
|
||||||
|
3 nodes wide. = 3 Bloecke breit.
|
||||||
|
3x3 nodes. = 3x3 Bloecke.
|
||||||
|
Use while sneaking to change Mining Drill Mk%d modes. = Halte die Shift-Taste beim Benutzen gedrueckt, um die Funktion des Bergbaubohrers Modell %d zu aendern.
|
||||||
|
Mining Drill Mk%d Mode %d = Bergbaubohrer Modell %d Funktion %d
|
||||||
|
Mining Drill Mk%d = Bergbaubohrer Modell %d
|
||||||
|
Mining Laser Mk%d = Bergbaulaser Modell %d
|
||||||
|
Single node. = Einzelblock
|
||||||
|
Sonic Screwdriver = Schallschraubendreher
|
||||||
|
Tree Tap = Baumzapfhahn
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking =
|
||||||
|
Grinding =
|
||||||
|
Compressing =
|
||||||
|
Extracting =
|
|
@ -1,4 +1,3 @@
|
||||||
# es.txt
|
|
||||||
# Spanish Translation for Technic Mod
|
# Spanish Translation for Technic Mod
|
||||||
# Traduccion al Español del Mod Technic
|
# Traduccion al Español del Mod Technic
|
||||||
# Autor: Diego Martínez <kaeza>
|
# Autor: Diego Martínez <kaeza>
|
||||||
|
@ -30,11 +29,16 @@ Graphite = Grafito
|
||||||
Carbon Cloth = Tela de Carbon
|
Carbon Cloth = Tela de Carbon
|
||||||
Raw Latex = Latex Crudo
|
Raw Latex = Latex Crudo
|
||||||
Rubber Fiber = Fibra de Hule
|
Rubber Fiber = Fibra de Hule
|
||||||
|
%.1f%%-Fissile Uranium Ingot =
|
||||||
|
%.1f%%-Fissile Uranium Block =
|
||||||
|
|
||||||
## Machine misc
|
## Machine misc
|
||||||
Machine cannot be removed because it is not empty = La maquina no puede removerse porque no esta vacia
|
Machine cannot be removed because it is not empty = La maquina no puede removerse porque no esta vacia
|
||||||
|
Inventory move disallowed due to protection =
|
||||||
# $1: Machine name (Includes tier)
|
# $1: Machine name (Includes tier)
|
||||||
|
@1 Active (@2 EU) = @1 Activo (@2 EU)
|
||||||
%s Active = %s Activo
|
%s Active = %s Activo
|
||||||
|
%s Enabled =
|
||||||
%s Idle = %s Quieto
|
%s Idle = %s Quieto
|
||||||
%s Unpowered = %s Sin Energia
|
%s Unpowered = %s Sin Energia
|
||||||
%s Out Of Fuel = %s Sin Combustible
|
%s Out Of Fuel = %s Sin Combustible
|
||||||
|
@ -45,35 +49,52 @@ Machine cannot be removed because it is not empty = La maquina no puede removers
|
||||||
%s Improperly Placed = %s No Colocado Apropiadamente
|
%s Improperly Placed = %s No Colocado Apropiadamente
|
||||||
Range = Alcance
|
Range = Alcance
|
||||||
Enable/Disable = Habilitar/Deshabilitar
|
Enable/Disable = Habilitar/Deshabilitar
|
||||||
|
Itemwise =
|
||||||
|
Stackwise =
|
||||||
|
Owner: =
|
||||||
|
Unlocked =
|
||||||
|
Locked =
|
||||||
|
Radius: =
|
||||||
|
Enabled =
|
||||||
|
Disabled =
|
||||||
|
|
||||||
## Machine names
|
## Machine names
|
||||||
# $1: Tier
|
# $1: Tier
|
||||||
%s Alloy Furnace = Horno de Aleacion %s
|
%s Alloy Furnace = Horno de Aleacion %s
|
||||||
%s Battery Box = Caja de Bateria %s
|
%s Battery Box = Caja de Bateria %s
|
||||||
%s Cable = Cable %s
|
%s Cable = Cable %s
|
||||||
%s Electric Furnace = Horno Electrico %s
|
%s Compressor = Compresor %s
|
||||||
|
%s Extractor = Extractor %s
|
||||||
|
%s Forcefield Emitter = Emisor de Campo de Fuerza %s
|
||||||
|
%s Furnace = Horno %s
|
||||||
%s Grinder = Amoladora %s
|
%s Grinder = Amoladora %s
|
||||||
%s Generator = Generador %s
|
%s Music Player = Reproductor de Musica %s
|
||||||
%s Solar Array = Panel Solar %s
|
%s Quarry = Cantera %s
|
||||||
|
%s Tool Workshop = Taller de Herramientas %s
|
||||||
|
Arrayed Solar %s Generator = Panel Solar %s
|
||||||
|
Fuel-Fired %s Generator = Generador a Carbon %s
|
||||||
|
Geothermal %s Generator = Generador Geotermico %s
|
||||||
|
Hydro %s Generator = Molino de Agua %s
|
||||||
|
Nuclear %s Generator Core = Nucleo de Reactor Nuclear %s
|
||||||
|
Small Solar %s Generator = Panel Solar %s
|
||||||
|
Wind %s Generator = Molino de Viento %s
|
||||||
|
Self-Contained Injector =
|
||||||
|
Constructor Mk%d =
|
||||||
|
Frame =
|
||||||
|
Frame Motor =
|
||||||
|
Template =
|
||||||
|
Template (replacing) =
|
||||||
|
Template Motor =
|
||||||
|
Template Tool =
|
||||||
Supply Converter = Convertidor de Alimentacion
|
Supply Converter = Convertidor de Alimentacion
|
||||||
Switching Station = Estacion de Conmutacion
|
Switching Station = Estacion de Conmutacion
|
||||||
Battery Box = Caja de Baterias
|
Battery Box = Caja de Baterias
|
||||||
Quarry = Cantera
|
Fuel-Fired Alloy Furnace = Horno de Aleacion a Carbon
|
||||||
CNC Machine = Maquina CNC
|
Fuel-Fired Furnace = Horno a Carbon
|
||||||
Music Player = Reproductor de Musica
|
|
||||||
Extractor = Extractor
|
|
||||||
Coal Alloy Furnace = Horno de Aleacion a Carbon
|
|
||||||
Tool WorkShop = Taller de Herramientas
|
|
||||||
Forcefield = Campo de Fuerza
|
Forcefield = Campo de Fuerza
|
||||||
Forcefield Emitter = Emisor de Campo de Fuerza
|
|
||||||
Compressor = Compresor
|
|
||||||
Geothermal Generator = Generador Geotermico
|
|
||||||
Water Mill = Molino de Agua
|
|
||||||
Nuclear Reactor Rod Compartment = Compartimiento para Vara de Reactor Nuclear
|
Nuclear Reactor Rod Compartment = Compartimiento para Vara de Reactor Nuclear
|
||||||
Nuclear Reactor Core = Nucleo de Reactor Nuclear
|
|
||||||
Wind Mill = Molino de Viento
|
|
||||||
Wind Mill Frame = Armazon de Molino de Viento
|
Wind Mill Frame = Armazon de Molino de Viento
|
||||||
Solar Panel = Panel Solar
|
Administrative World Anchor =
|
||||||
|
|
||||||
## Machine-specific
|
## Machine-specific
|
||||||
# $1: Pruduced EU
|
# $1: Pruduced EU
|
||||||
|
@ -81,46 +102,17 @@ Charge = Cargar
|
||||||
Discharge = Descargar
|
Discharge = Descargar
|
||||||
Power level = Nivel de Poder
|
Power level = Nivel de Poder
|
||||||
# $1: Tier $2: current_charge $3: max_charge
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
%s Battery Box: %d/%d = Caja de Bateria %s: %d/%d
|
@1 Battery Box: @2/@3 = Caja de Bateria @1: @2/@3
|
||||||
# $1: Machine name $2: Supply $3: Demand
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
%s. Supply: %d Demand: %d = %s. Alimentacion: %d Demanda: %d
|
@1. Supply: @2 Demand: @3 = @1. Alimentacion: @2 Demanda: @3
|
||||||
# $1: Production percent
|
# $1: Production percent
|
||||||
Production at %d%% = Produccion en %d%%
|
Production at %d%% = Produccion en %d%%
|
||||||
|
Stopped =
|
||||||
## CNC Machine
|
Keeping %d/%d map blocks loaded =
|
||||||
Element Edge = Elemento Borde
|
Digging not started =
|
||||||
Tree = Arbol
|
Digging finished =
|
||||||
Element Cross Double = Elemento Cruz Doble
|
Digging %d m above machine =
|
||||||
Spike = Pica
|
Digging %d m below machine =
|
||||||
Element Edge Double = Elemento Borde Doble
|
|
||||||
Two Curved Edge Block = Dos Bloques de Borde Curvados
|
|
||||||
Pyramid = Piramide
|
|
||||||
Slope Upside Down Inner Edge = Borde Interno de Rampa Al Reves
|
|
||||||
Slope Upside Down Edge = Borde de Rampa Al Reves
|
|
||||||
Element Straight Double = Elemento Doble Recto
|
|
||||||
Sphere = Esfera
|
|
||||||
Element End Double = Doble Fin de Elemento
|
|
||||||
Element Straight = Recta de Elemento
|
|
||||||
Horizontal Cylinder = Cilindro Horizontal
|
|
||||||
Slope Inner Edge = Borde Interno de Rampa
|
|
||||||
One Curved Edge Block = Un Bloque de Borde Curvado
|
|
||||||
Element Cross = Cruce de Elementos
|
|
||||||
Stick = Varita
|
|
||||||
Element End = Fin de Elemento
|
|
||||||
Slope Lying = Rampa en Reposo
|
|
||||||
Slope Upside Down = Rampa Al Reves
|
|
||||||
Slope Edge = Borde de Rampa
|
|
||||||
Slope = Rampa
|
|
||||||
Element T = Elemento T
|
|
||||||
Cylinder = Cilindro
|
|
||||||
Steel = Acero
|
|
||||||
Cobble = Adoquines
|
|
||||||
Stone = Piedra
|
|
||||||
Brick = Ladrillo
|
|
||||||
Dirt = Tierra
|
|
||||||
Sandstone = Arenisca
|
|
||||||
Wooden = Madera
|
|
||||||
Leaves = Hojas
|
|
||||||
|
|
||||||
## Grinder Recipes
|
## Grinder Recipes
|
||||||
# $1: Name
|
# $1: Name
|
||||||
|
@ -130,19 +122,23 @@ Alatro = Alatro
|
||||||
Arol = Arol
|
Arol = Arol
|
||||||
Brass = Laton
|
Brass = Laton
|
||||||
Bronze = Bronce
|
Bronze = Bronce
|
||||||
|
Carbon Steel = Acero al Carbono
|
||||||
|
Cast Iron = Hierro Fundido
|
||||||
Chromium = Cromo
|
Chromium = Cromo
|
||||||
Coal = Carbon
|
Coal = Carbon
|
||||||
Copper = Cobre
|
Copper = Cobre
|
||||||
Gold = Oro
|
Gold = Oro
|
||||||
Iron = Hierro
|
|
||||||
Mithril = Mitrilo
|
Mithril = Mitrilo
|
||||||
Silver = Plata
|
Silver = Plata
|
||||||
Stainless Steel = Acero Inoxidable
|
Stainless Steel = Acero Inoxidable
|
||||||
Talinite = Talinita
|
Talinite = Talinita
|
||||||
Tin = Estanio
|
Tin = Estanio
|
||||||
|
Wrought Iron = Hierro Forjado
|
||||||
Zinc = Zinc
|
Zinc = Zinc
|
||||||
|
%.1f%%-Fissile Uranium =
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
|
RE Battery =
|
||||||
Water Can = Bidon de Agua
|
Water Can = Bidon de Agua
|
||||||
Lava Can = Bidon de Lava
|
Lava Can = Bidon de Lava
|
||||||
Chainsaw = Motosierra
|
Chainsaw = Motosierra
|
||||||
|
@ -151,7 +147,7 @@ Flashlight = Linterna
|
||||||
3 nodes tall. = 3 nodos de alto.
|
3 nodes tall. = 3 nodos de alto.
|
||||||
3 nodes wide. = 3 nodos de ancho.
|
3 nodes wide. = 3 nodos de ancho.
|
||||||
3x3 nodes. = 3x3 nodos.
|
3x3 nodes. = 3x3 nodos.
|
||||||
Hold shift and use to change Mining Drill Mk%d modes. = Manten pulsado Mayus y Usar para cambiar el modo del Taladro de Mineria Mk%d.
|
Use while sneaking to change Mining Drill Mk%d modes. = Manten pulsado Mayus y Usar para cambiar el modo del Taladro de Mineria Mk%d.
|
||||||
Mining Drill Mk%d Mode %d = Taladro de Mineria Mk%d Modo %d
|
Mining Drill Mk%d Mode %d = Taladro de Mineria Mk%d Modo %d
|
||||||
Mining Drill Mk%d = Taladro de Mineria Mk%d
|
Mining Drill Mk%d = Taladro de Mineria Mk%d
|
||||||
Mining Laser Mk%d = Laser de Mineria Mk%d
|
Mining Laser Mk%d = Laser de Mineria Mk%d
|
||||||
|
@ -159,3 +155,8 @@ Single node. = Nodo simple.
|
||||||
Sonic Screwdriver = Destonillador Sonico
|
Sonic Screwdriver = Destonillador Sonico
|
||||||
Tree Tap = Grifo de Arbol
|
Tree Tap = Grifo de Arbol
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking =
|
||||||
|
Grinding =
|
||||||
|
Compressing =
|
||||||
|
Extracting =
|
||||||
|
|
215
technic/locale/fr.txt
Normal file
|
@ -0,0 +1,215 @@
|
||||||
|
# template.txt
|
||||||
|
# Template for translations of Technic
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
[Technic] Loaded in %f seconds = [Technic] Chargement en %f secondes
|
||||||
|
|
||||||
|
## Items
|
||||||
|
Silicon Wafer = Tranche de silicium
|
||||||
|
Doped Silicon Wafer = Tranche de silicium doppée
|
||||||
|
Enriched Uranium = Uranium enrichi
|
||||||
|
Uranium Fuel = Uranium 235
|
||||||
|
Diamond Drill Head = Tête de forage en diamant
|
||||||
|
Blue Energy Crystal = Cristal d'énergie bleu
|
||||||
|
Green Energy Crystal = Cristal d'énergie vert
|
||||||
|
Red Energy Crystal = Cristal d'énergie rouge
|
||||||
|
Fine Copper Wire = Fil en cuivre fin
|
||||||
|
Fine Gold Wire = Fil en or fin
|
||||||
|
Fine Silver Wire = Fil en argent fin
|
||||||
|
Copper Coil = Bobine de cuivre
|
||||||
|
Electric Motor = Moteur électrique
|
||||||
|
Low Voltage Transformer = Transformateur basse tension
|
||||||
|
Medium Voltage Transformer = Transformateur moyenne tension
|
||||||
|
High Voltage Transformer = Transformateur haute tension
|
||||||
|
Control Logic Unit = Unité de contrôle logique
|
||||||
|
Mixed Metal Ingot = Lingot de métal allié
|
||||||
|
Composite Plate = Plaque composite
|
||||||
|
Copper Plate = Plaque de cuivre
|
||||||
|
Carbon Plate = Plaque de carbone
|
||||||
|
Graphite = Graphite
|
||||||
|
Carbon Cloth = Fibre de carbone
|
||||||
|
Raw Latex = Latex brut
|
||||||
|
Rubber Fiber = Fibre de caoutchouc
|
||||||
|
%.1f%%-Fissile Uranium Ingot = Lingot d'uranium fissile (%.1f%%)
|
||||||
|
%.1f%%-Fissile Uranium Block = Bloc d'uranium fissile (%.1f%%)
|
||||||
|
|
||||||
|
## Machine misc
|
||||||
|
Machine cannot be removed because it is not empty = La machine ne peut pas être retirée car elle n'est pas vide
|
||||||
|
Inventory move disallowed due to protection = Le mouvement d'inventaire n'est pas autorisé en raison de la protection
|
||||||
|
|
||||||
|
# $1: Machine name (Includes tier)
|
||||||
|
@1 Active (@2 EU) = @1 Active (@2 EU)
|
||||||
|
%s Active = %s actif
|
||||||
|
%s Disabled = %s désactivé
|
||||||
|
%s Enabled = %s activé
|
||||||
|
%s Idle = %s au repos
|
||||||
|
%s Improperly Placed = %s est mal placé
|
||||||
|
%s is empty = %s est vide
|
||||||
|
%s Unpowered = %s non alimenté en énergie
|
||||||
|
%s Out Of Fuel = %s plus de carburant
|
||||||
|
%s Has Bad Cabling = %s est mal cablé
|
||||||
|
%s (Slave) = %s (esclave)
|
||||||
|
%s Has No Network = %s n'a pas de réseau
|
||||||
|
%s Finished = %s a fini
|
||||||
|
Enable/Disable = Activer/Désactiver
|
||||||
|
Range = Plage
|
||||||
|
Upgrade Slots = Emplacement d'amélioration
|
||||||
|
In: = Entrée :
|
||||||
|
Out: = Sortie :
|
||||||
|
Slot %d = Emplacement %d
|
||||||
|
Itemwise = Item par Item
|
||||||
|
Stackwise = Stack par Stack
|
||||||
|
Ignoring Mesecon Signal = Ignorer le signal Mesecon
|
||||||
|
Controlled by Mesecon Signal = Contrôlé par signal Mesecon
|
||||||
|
Owner: = Propriétaire :
|
||||||
|
Unlocked = Déverrouillé
|
||||||
|
Locked = Verrouillé
|
||||||
|
Radius: = Rayon :
|
||||||
|
Enabled = Activé
|
||||||
|
Disabled = Désactivé
|
||||||
|
|
||||||
|
## Machine names
|
||||||
|
# $1: Tier
|
||||||
|
%s Alloy Furnace = Four à alliage %s
|
||||||
|
%s Battery Box = Batterie %s
|
||||||
|
%s Cable = Câble %s
|
||||||
|
%s CNC Machine = Machine-outils %s
|
||||||
|
%s Centrifuge = Centrifugeuse %s
|
||||||
|
%s Compressor = Compresseur %s
|
||||||
|
%s Extractor = Extracteur %s
|
||||||
|
%s Forcefield Emitter = Emetteur de champ de force %s
|
||||||
|
%s Furnace = Four %s
|
||||||
|
%s Grinder = Broyeur %s
|
||||||
|
%s Music Player = Grammophone %s
|
||||||
|
%s Quarry = Carrière %s
|
||||||
|
%s Tool Workshop = Atelier d'outillage %s
|
||||||
|
Arrayed Solar %s Generator = Générateur solaire %s
|
||||||
|
Fuel-Fired %s Generator = Générateur thermique %s
|
||||||
|
Geothermal %s Generator = Géénarteur géothermique %s
|
||||||
|
Hydro %s Generator = Générateur hydroélectrique %s
|
||||||
|
Nuclear %s Generator Core = Générateur nucléaire %
|
||||||
|
Small Solar %s Generator = Petit générateur solaire %s
|
||||||
|
Wind %s Generator = Générateur éolien %s
|
||||||
|
Self-Contained Injector = Injecteur autonome
|
||||||
|
Constructor Mk%d = Constructeur Mk%d
|
||||||
|
Frame = Cadre
|
||||||
|
Frame Motor = Cadre de moteur
|
||||||
|
Template = Modèle
|
||||||
|
Template (replacing) =
|
||||||
|
Template Motor =
|
||||||
|
Template Tool =
|
||||||
|
Battery Box = Compartiment à batterie
|
||||||
|
Supply Converter = Convertisseur de tension
|
||||||
|
Switching Station = Station de commutation
|
||||||
|
Fuel-Fired Alloy Furnace = Four à alliage à carburant
|
||||||
|
Fuel-Fired Furnace = Four à carburant
|
||||||
|
Wind Mill Frame = Cadre d'éolienne
|
||||||
|
Forcefield = Champ de force
|
||||||
|
Nuclear Reactor Rod Compartment = Compartiment à barres du réacteur nucléaire
|
||||||
|
Administrative World Anchor =
|
||||||
|
|
||||||
|
## Machine-specific
|
||||||
|
# $1: Pruduced EU
|
||||||
|
Charge = Charger
|
||||||
|
Discharge = Décharger
|
||||||
|
Power level = Niveau d'énergie
|
||||||
|
|
||||||
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
|
@1 Battery Box: @2/@3 = @1 batterie : @2/@3
|
||||||
|
|
||||||
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
|
@1. Supply: @2 Demand: @3 = @1. fournit : @2 demande : @3
|
||||||
|
Production at %d%% = Production à %d%%
|
||||||
|
Choose Milling Program: = Choisissez le programme de fraisage :
|
||||||
|
Slim Elements half / normal height: =
|
||||||
|
Current track %s = Morceau actuel %s
|
||||||
|
Stopped = Arrêté
|
||||||
|
Keeping %d/%d map blocks loaded =
|
||||||
|
Digging not started = Creusement non démarré
|
||||||
|
Digging finished = Creusement terminé
|
||||||
|
Digging %d m above machine = Creusement à %dm au dessus de la machine
|
||||||
|
Digging %d m below machine = Creusement à %dm en dessous de la machine
|
||||||
|
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
|
||||||
|
|
||||||
|
## CNC
|
||||||
|
Cylinder =
|
||||||
|
Element Cross = Elément croisé
|
||||||
|
Element Cross Double = Elément croisé (double)
|
||||||
|
Element Edge = Elément de bordure
|
||||||
|
Element Edge Double = Elément de bordure (double)
|
||||||
|
Element End = Elément de fin
|
||||||
|
Element End Double = Elément de fin (double)
|
||||||
|
Element Straight = Elément droit
|
||||||
|
Element Straight Double = Elément droit (double)
|
||||||
|
Element T = Elément en T
|
||||||
|
Element T Double = Elément en T (double)
|
||||||
|
Horizontal Cylinder = Cylindre horizontal
|
||||||
|
One Curved Edge Block = Bloc à un bord incurvé
|
||||||
|
Pyramid = Pyramide
|
||||||
|
Slope = Pente
|
||||||
|
Slope Edge =
|
||||||
|
Slope Inner Edge =
|
||||||
|
Slope Lying =
|
||||||
|
Slope Upside Down =
|
||||||
|
Slope Upside Down Edge =
|
||||||
|
Slope Upside Down Inner Edge =
|
||||||
|
Sphere = Sphère
|
||||||
|
Spike = Pointe
|
||||||
|
Stick = Bâton
|
||||||
|
Two Curved Edge Block = Bloc à deux bords incurvés
|
||||||
|
Brick = Brique
|
||||||
|
Cobble = Pierre taillée
|
||||||
|
Dirt = Terre
|
||||||
|
Leaves = Feuilles
|
||||||
|
Sandstone = Grès
|
||||||
|
Stone = Pierre
|
||||||
|
Tree = Arbre
|
||||||
|
Wooden = Bois
|
||||||
|
|
||||||
|
## Grinder Recipes
|
||||||
|
# $1: Name
|
||||||
|
%s Dust = Poudre de %s
|
||||||
|
Akalin =
|
||||||
|
Alatro =
|
||||||
|
Arol =
|
||||||
|
Brass = Laiton
|
||||||
|
Bronze = Bronze
|
||||||
|
Carbon Steel = Acier au carbone
|
||||||
|
Cast Iron = Fonte
|
||||||
|
Chromium = Chrome
|
||||||
|
Coal = Charbon
|
||||||
|
Copper = Cuivre
|
||||||
|
Gold = Or
|
||||||
|
Mithril = Mithril
|
||||||
|
Silver = Argent
|
||||||
|
Stainless Steel = Acier inoxydable
|
||||||
|
Talinite = Talanite
|
||||||
|
Tin = Etain
|
||||||
|
Wrought Iron = Fer
|
||||||
|
Zinc = Zinc
|
||||||
|
%.1f%%-Fissile Uranium = Uranium fissile (%.1f%%)
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
RE Battery = Batterie RE
|
||||||
|
Water Can = Jerrycan d'eau
|
||||||
|
Lava Can = Jerrycan de lave
|
||||||
|
Chainsaw = Tronçonneuse
|
||||||
|
Flashlight = Lampe-torche
|
||||||
|
3 nodes deep. =
|
||||||
|
3 nodes tall. =
|
||||||
|
3 nodes wide. =
|
||||||
|
3x3 nodes. =
|
||||||
|
Use while sneaking to change Mining Drill Mk%d modes. =
|
||||||
|
Mining Drill Mk%d Mode %d = Foreuse Mk%d Mode %d
|
||||||
|
Mining Drill Mk%d = Foreuse Mk%d
|
||||||
|
Mining Laser Mk%d = Foreuse laser Mk%d
|
||||||
|
Single node. = Mode simple.
|
||||||
|
Sonic Screwdriver = Tournevis supersonique
|
||||||
|
Tree Tap = Robinet à sève
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking = Fonderie d'alliage
|
||||||
|
Grinding = Broyage
|
||||||
|
Compressing = Compression
|
||||||
|
Extracting = Extraction
|
||||||
|
Separating = Séparation
|
|
@ -26,12 +26,17 @@ Graphite = Lastra in graffite
|
||||||
Carbon Cloth = Fibra di carbonio
|
Carbon Cloth = Fibra di carbonio
|
||||||
Raw Latex = Latex grezzo
|
Raw Latex = Latex grezzo
|
||||||
Rubber Fiber = Fibra di gomma
|
Rubber Fiber = Fibra di gomma
|
||||||
|
%.1f%%-Fissile Uranium Ingot = %.1f%%-Lingotto di uranio fissile
|
||||||
|
%.1f%%-Fissile Uranium Block = %.1f%%-Blocco di uranio fissile
|
||||||
|
|
||||||
## Machine misc
|
## Machine misc
|
||||||
Machine cannot be removed because it is not empty = La macchina non può essere rimossa perchè non è vuota
|
Machine cannot be removed because it is not empty = La macchina non può essere rimossa perchè non è vuota
|
||||||
|
Inventory move disallowed due to protection = Impossibile muovere l'inventario a causa della protezione
|
||||||
# $1: Machine name (Includes tier)
|
# $1: Machine name (Includes tier)
|
||||||
|
@1 Active (@2 EU) = @1 Attivo (@2 EU)
|
||||||
%s Active = %s Attivo
|
%s Active = %s Attivo
|
||||||
%s Disabled = %s Disabilitato
|
%s Disabled = %s Disabilitato
|
||||||
|
%s Enabled = %s Abilitato
|
||||||
%s Idle = %s Inattivo
|
%s Idle = %s Inattivo
|
||||||
%s Improperly Placed = %s Piazzato impropiamente
|
%s Improperly Placed = %s Piazzato impropiamente
|
||||||
%s Unpowered = %s Non alimentato
|
%s Unpowered = %s Non alimentato
|
||||||
|
@ -41,36 +46,56 @@ Machine cannot be removed because it is not empty = La macchina non può essere
|
||||||
%s Finished = %s Finito
|
%s Finished = %s Finito
|
||||||
Enable/Disable = Abilita/Disabilita
|
Enable/Disable = Abilita/Disabilita
|
||||||
Range = Raggio
|
Range = Raggio
|
||||||
|
Upgrade Slots = Alloggi di aggiornamento
|
||||||
|
In: = Ingresso:
|
||||||
|
Out: = Uscita:
|
||||||
|
Slot %d = Alloggio %d
|
||||||
|
Itemwise = Singolo elemento
|
||||||
|
Stackwise = pila completa
|
||||||
|
Owner: = Proprietario:
|
||||||
|
Unlocked = Non chiuso a chiave
|
||||||
|
Locked = Chiuso a chiave
|
||||||
|
Radius: = Raggio:
|
||||||
|
Enabled = Abilitato
|
||||||
|
Disabled = Disabilitato
|
||||||
|
|
||||||
## Machine names
|
## Machine names
|
||||||
# $1: Tier
|
# $1: Tier
|
||||||
%s Alloy Furnace = %s Fornace per leghe
|
%s Alloy Furnace = %s Fornace per leghe
|
||||||
%s Battery Box = %s Box batterie
|
%s Battery Box = %s Box batterie
|
||||||
%s Cable = Cavo %s
|
%s Cable = Cavo %s
|
||||||
%s Electric Furnace = %s Fornace elettrica
|
%s Compressor = Compressore %s
|
||||||
|
%s Extractor = Estrattore %s
|
||||||
|
%s Forcefield Emitter = Emettitore di campo di forza %s
|
||||||
|
%s Furnace = %s Fornace
|
||||||
%s Grinder = %s Tritatutto
|
%s Grinder = %s Tritatutto
|
||||||
%s Generator = %s Generatore
|
%s Music Player = Music Player %s
|
||||||
%s Solar Array = %s Pannello Solare
|
%s Quarry = Cava %s
|
||||||
|
%s Tool Workshop = Officina per attrezzi %s
|
||||||
|
Arrayed Solar %s Generator = %s Pannello Solare
|
||||||
|
Fuel-Fired %s Generator = %s Generatore a carbone
|
||||||
|
Geothermal %s Generator = %s Generatore Geotermico
|
||||||
|
Hydro %s Generator = Turbina Elettrica %s
|
||||||
|
Nuclear %s Generator Core = Reattore nucleare %s
|
||||||
|
Small Solar %s Generator = %s Pannello solare
|
||||||
|
Wind %s Generator = %s Generatore eolico
|
||||||
|
Self-Contained Injector = Ignettore
|
||||||
|
Constructor Mk%d = Costruttore Mk%d
|
||||||
|
Frame = Cornice
|
||||||
|
Frame Motor = Cornice del motore
|
||||||
|
Template = Sagoma
|
||||||
|
Template (replacing) = Sagoma (di rimpiazzo)
|
||||||
|
Template Motor = Motore per sagome
|
||||||
|
Template Tool = Strumento per sagome
|
||||||
Battery Box = Box batterie
|
Battery Box = Box batterie
|
||||||
Supply Converter = Trasformatore
|
Supply Converter = Trasformatore
|
||||||
Switching Station = Stazione di controllo
|
Switching Station = Stazione di controllo
|
||||||
CNC Machine = Tornio CNC
|
Fuel-Fired Alloy Furnace = Fornace per leghe a carbone
|
||||||
Coal Alloy Furnace = Fornace per leghe a carbone
|
Fuel-Fired Furnace = Fornace a carbone
|
||||||
Extractor = Estrattore
|
|
||||||
Compressor = Compressore
|
|
||||||
Solar Panel = Pannello solare
|
|
||||||
Geothermal Generator = Generatore Geotermico
|
|
||||||
Music Player = Music Player
|
|
||||||
Water Mill = Turbina Elettrica
|
|
||||||
Tool WorkShop = Officina per attrezzi
|
|
||||||
Wind Mill = Generatore eolico
|
|
||||||
Wind Mill Frame = Pala eolica
|
Wind Mill Frame = Pala eolica
|
||||||
Forcefield Emitter = Emettitore di campo di forza
|
|
||||||
Forcefield = Campo di forza
|
Forcefield = Campo di forza
|
||||||
Nuclear Reactor Core = Reattore nucleare
|
|
||||||
Nuclear Reactor Rod Compartment = Compartimento combustibile nucleare
|
Nuclear Reactor Rod Compartment = Compartimento combustibile nucleare
|
||||||
Quarry = Cava
|
Administrative World Anchor = Ancora-mondo amministrativa
|
||||||
|
|
||||||
## Machine-specific
|
## Machine-specific
|
||||||
# $1: Pruduced EU
|
# $1: Pruduced EU
|
||||||
|
@ -78,46 +103,19 @@ Charge = Carica
|
||||||
Discharge = Scarica
|
Discharge = Scarica
|
||||||
Power level = Livello di potenza
|
Power level = Livello di potenza
|
||||||
# $1: Tier $2: current_charge $3: max_charge
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
%s Battery Box: %d/%d = %s Box Batterie: %d/%d
|
@1 Battery Box: @2/@3 = @1 Box Batterie: @2/@3
|
||||||
# $1: Machine name $2: Supply $3: Demand
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
%s. Supply: %d Demand: %d = %s. Prodotto: %d Consumato: %d
|
@1. Supply: @2 Demand: @3 = @1. Prodotto: @2 Consumato: @3
|
||||||
Production at %d%% = Produzione a %d%%
|
Production at %d%% = Produzione a %d%%
|
||||||
|
Choose Milling Program: = Scegliere un programma di Fresatura
|
||||||
## CNC
|
Slim Elements half / normal height: = Metà elementi sottili / altezza normale:
|
||||||
Cylinder = Cilindro
|
Current track %s = Traccia corrente %s
|
||||||
Element Cross = Elemento a croce
|
Stopped = Fermato
|
||||||
Element Cross Double = Elemento a croce doppio
|
Keeping %d/%d map blocks loaded = Mantenimento di %d/%d blocchi mappa caricati
|
||||||
Element Edge =
|
Digging not started = Scavo non iniziato
|
||||||
Element Edge Double =
|
Digging finished = Scavo finito
|
||||||
Element End = Elemento finale
|
Digging %d m above machine = Scavo di %d m sopra la macchina
|
||||||
Element End Double = Elemento finale doppio
|
Digging %d m below machine = Scavo di %d m sotto la macchina
|
||||||
Element Straight =
|
|
||||||
Element Straight Double =
|
|
||||||
Element T = Elemento a T
|
|
||||||
Element T Double = Elemento a T doppio
|
|
||||||
Horizontal Cylinder = Cilindro orizzontale
|
|
||||||
One Curved Edge Block =
|
|
||||||
Pyramid = Piramide
|
|
||||||
Slope =
|
|
||||||
Slope Edge =
|
|
||||||
Slope Inner Edge =
|
|
||||||
Slope Lying =
|
|
||||||
Slope Upside Down =
|
|
||||||
Slope Upside Down Edge =
|
|
||||||
Slope Upside Down Inner Edge =
|
|
||||||
Sphere = Sfera
|
|
||||||
Spike =
|
|
||||||
Stick = Bastone
|
|
||||||
Two Curved Edge Block =
|
|
||||||
Brick = Mattone
|
|
||||||
Cobble = Ciottolato
|
|
||||||
Dirt = Terra
|
|
||||||
Leaves = Foglie
|
|
||||||
Sandstone = Arenaria
|
|
||||||
Steel = Acciaio
|
|
||||||
Stone = Pietra
|
|
||||||
Tree = Albero
|
|
||||||
Wooden = Legno
|
|
||||||
|
|
||||||
## Grinder Recipes
|
## Grinder Recipes
|
||||||
# $1: Name
|
# $1: Name
|
||||||
|
@ -127,19 +125,23 @@ Alatro = Alatro
|
||||||
Arol = Arol
|
Arol = Arol
|
||||||
Brass = Ottone
|
Brass = Ottone
|
||||||
Bronze = Bronzo
|
Bronze = Bronzo
|
||||||
|
Carbon Steel = Acciaio al Carbonio
|
||||||
|
Cast Iron = Ghisa
|
||||||
Chromium = Cromo
|
Chromium = Cromo
|
||||||
Coal = Carbone
|
Coal = Carbone
|
||||||
Copper = Rame
|
Copper = Rame
|
||||||
Gold = Oro
|
Gold = Oro
|
||||||
Iron = Ferro
|
|
||||||
Mithril = Mithril
|
Mithril = Mithril
|
||||||
Silver = Argento
|
Silver = Argento
|
||||||
Stainless Steel = Acciaio Inossidabile
|
Stainless Steel = Acciaio Inossidabile
|
||||||
Talinite = Talinite
|
Talinite = Talinite
|
||||||
Tin = Stagno
|
Tin = Stagno
|
||||||
|
Wrought Iron = Ferro Battuto
|
||||||
Zinc = Zinco
|
Zinc = Zinco
|
||||||
|
%.1f%%-Fissile Uranium = %.1f%%-Uranio fissile
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
|
RE Battery = Batteria RE
|
||||||
Water Can = Serbatoio d'acqua
|
Water Can = Serbatoio d'acqua
|
||||||
Lava Can = Serbatoio di lava
|
Lava Can = Serbatoio di lava
|
||||||
Chainsaw = Motosega
|
Chainsaw = Motosega
|
||||||
|
@ -148,10 +150,16 @@ Flashlight = Torcia
|
||||||
3 nodes tall. = 3 nodi in altezza.
|
3 nodes tall. = 3 nodi in altezza.
|
||||||
3 nodes wide. = 3 nodi in larghezza.
|
3 nodes wide. = 3 nodi in larghezza.
|
||||||
3x3 nodes. = 3x3 nodi.
|
3x3 nodes. = 3x3 nodi.
|
||||||
Hold shift and use to change Mining Drill Mk%d modes. = Premi shift (freccia grossa) e usa per cambiare modalità nella trivella da miniera Mk%d.
|
Use while sneaking to change Mining Drill Mk%d modes. = Premi shift (freccia grossa) e usa per cambiare modalità nella trivella da miniera Mk%d.
|
||||||
Mining Drill Mk%d Mode %d = Trivella mk%d in modalità %d
|
Mining Drill Mk%d Mode %d = Trivella mk%d in modalità %d
|
||||||
Mining Drill Mk%d = Trivella da miniera mk%d
|
Mining Drill Mk%d = Trivella da miniera mk%d
|
||||||
Mining Laser Mk%d = Laser da miniera mk%d
|
Mining Laser Mk%d = Laser da miniera mk%d
|
||||||
Single node. = Nodo singolo.
|
Single node. = Nodo singolo.
|
||||||
Sonic Screwdriver = Cacciavite sonico
|
Sonic Screwdriver = Cacciavite sonico
|
||||||
Tree Tap = Batti albero
|
Tree Tap = Batti albero
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking = Cottura lege
|
||||||
|
Grinding = Macinazione
|
||||||
|
Compressing = Compressione
|
||||||
|
Extracting = Estrazione
|
||||||
|
|
175
technic/locale/pl.txt
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
# Polish Translation for Technic mod
|
||||||
|
# Polskie tłumaczenie Technic mod
|
||||||
|
# by mat9117
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
[Technic] Loaded in %f seconds = [Technic] Wczytany w %f sekund
|
||||||
|
|
||||||
|
## Items
|
||||||
|
Silicon Wafer = Płytka krzemowa
|
||||||
|
Doped Silicon Wafer = Domieszkowana płytka krzemowa
|
||||||
|
Enriched Uranium = Wzbogacony uran
|
||||||
|
Uranium Fuel = Paliwo uranowe
|
||||||
|
Diamond Drill Head = Diamentowa głowica wiertła
|
||||||
|
Blue Energy Crystal = Niebieski kryształ energii
|
||||||
|
Green Energy Crystal = Zielony kryształ energii
|
||||||
|
Red Energy Crystal = Czerwony kryształ energii
|
||||||
|
Fine Copper Wire = Cienki miedziany drut
|
||||||
|
Copper Coil = Miedziana cewka
|
||||||
|
Electric Motor = Silnik elektryczny
|
||||||
|
Low Voltage Transformer = Transformator niskiego napięcia
|
||||||
|
Medium Voltage Transformer = Transformator średniego napięcia
|
||||||
|
High Voltage Transformer = Transformator wysokiego napięcia
|
||||||
|
Control Logic Unit = Jednostka sterująca
|
||||||
|
Mixed Metal Ingot = Sztabka zmieszanych metali
|
||||||
|
Composite Plate = Płytka kompozytowa
|
||||||
|
Copper Plate = Płytka miedziana
|
||||||
|
Carbon Plate = Płytka węglowa
|
||||||
|
Graphite = Grafit
|
||||||
|
Carbon Cloth = Włókno węglowe
|
||||||
|
Raw Latex = Lateks naturalny
|
||||||
|
Rubber Fiber = Włókno gumowe
|
||||||
|
%.1f%%-Fissile Uranium Ingot = %.1f%% Sztabka uranu
|
||||||
|
%.1f%%-Fissile Uranium Block = %.1f%% Blok uranu
|
||||||
|
|
||||||
|
## Machine misc
|
||||||
|
Machine cannot be removed because it is not empty = Nie można usunąć maszyny, ponieważ nie jest pusta
|
||||||
|
Inventory move disallowed due to protection = Przenoszenie rzeczy z ekwipunku niemożliwe z powodu ochrony
|
||||||
|
# $1: Machine name (Includes tier)
|
||||||
|
@1 Active (@2 EU) = @1 Aktywny (@2 EU)
|
||||||
|
%s Active = %s Aktywny/a
|
||||||
|
%s Disabled = %s Wyłączony/a
|
||||||
|
%s Enabled = %s Włączony/a
|
||||||
|
%s Idle = %s Bezczynny/a
|
||||||
|
%s Improperly Placed = %s Ustawiony/a nieprawidłowo
|
||||||
|
%s is empty = %s jest pusty/a
|
||||||
|
%s Unpowered = %s brak zasilania
|
||||||
|
%s Out Of Fuel = %s brak paliwa
|
||||||
|
%s Has Bad Cabling = %s Źle podłączono kable
|
||||||
|
%s (Slave) =
|
||||||
|
%s Has No Network = %s Nie podłączony/a do sieci
|
||||||
|
%s Finished = %s Ukończony
|
||||||
|
Enable/Disable = Włącz/Wyłącz
|
||||||
|
Range = Zasięg
|
||||||
|
Upgrade Slots = Miejsca na ulepszenia
|
||||||
|
In: = Wejście
|
||||||
|
Out: = Wyjście
|
||||||
|
Slot %d = Otwór %d
|
||||||
|
Itemwise = Jeden przedmiot
|
||||||
|
Stackwise = Cały stack
|
||||||
|
Ignoring Mesecon Signal = Ignoruj sygnał Mesecon
|
||||||
|
Controlled by Mesecon Signal = Sterowany sygnałem Mesecon
|
||||||
|
Owner: = Właściciel:
|
||||||
|
Unlocked = Odblokowany/a
|
||||||
|
Locked = Zablokowany/a
|
||||||
|
Radius: = Promień:
|
||||||
|
Enabled = Włączony/a
|
||||||
|
Disabled = Wyłączony/a
|
||||||
|
|
||||||
|
## Machine names
|
||||||
|
# $1: Tier
|
||||||
|
%s Alloy Furnace = %s Piec stopowy
|
||||||
|
%s Battery Box = %s Skrzynka baterii
|
||||||
|
%s Cable = %s Przewód
|
||||||
|
%s Centrifuge = %s Centryfuga
|
||||||
|
%s Compressor = %s Kompresor
|
||||||
|
%s Extractor = %s Ekstraktor
|
||||||
|
%s Forcefield Emitter = %s Emiter pola siłowego
|
||||||
|
%s Furnace = %s Piec
|
||||||
|
%s Grinder = %s Młynek
|
||||||
|
%s Music Player = %s Odtwarzacz muzyki
|
||||||
|
%s Quarry = %s Kamieniołom
|
||||||
|
%s Tool Workshop = %s Warsztat narzędzi
|
||||||
|
Arrayed Solar %s Generator = %s Szeregowy generator słoneczny
|
||||||
|
Fuel-Fired %s Generator = %s Generator zasilany paliwem
|
||||||
|
Geothermal %s Generator = %s Generator geotermalny
|
||||||
|
Hydro %s Generator = %s Hydrogenerator
|
||||||
|
Nuclear %s Generator Core = %s Reaktor atomowy
|
||||||
|
Small Solar %s Generator = %s Mały generator słoneczny
|
||||||
|
Wind %s Generator = %s Generator wiatrowy
|
||||||
|
Self-Contained Injector = Samowystarczalny wtryskiwacz
|
||||||
|
Constructor Mk%d = Konstruktor Mk%d
|
||||||
|
Frame = Klatka
|
||||||
|
Frame Motor = Silnik klatkowy
|
||||||
|
Template = Szablon
|
||||||
|
Template (replacing) = Szablon (zastępczy)
|
||||||
|
Template Motor =Szablon silnika
|
||||||
|
Template Tool = Szablon narzędzia
|
||||||
|
Battery Box = Skrzynka baterii
|
||||||
|
Supply Converter = Konwerter zasilania
|
||||||
|
Switching Station = Rozdzielnia
|
||||||
|
Fuel-Fired Alloy Furnace = Piec stopowy zasilany paliwem
|
||||||
|
Fuel-Fired Furnace = Piec zasilany paliwem
|
||||||
|
Wind Mill Frame = Klatka wiatraka
|
||||||
|
Forcefield = Pole siłowe
|
||||||
|
Nuclear Reactor Rod Compartment = Komora rdzenia reaktora atomowego
|
||||||
|
Administrative World Anchor = Administracyjna kotwica świata
|
||||||
|
|
||||||
|
## Machine-specific
|
||||||
|
# $1: Pruduced EU
|
||||||
|
Charge = Ładuj
|
||||||
|
Discharge = Rozładuj
|
||||||
|
Power level = Poziom zasilania
|
||||||
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
|
@1 Battery Box: @2/@3 = @1 Skrzynka baterii: @2/@3
|
||||||
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
|
@1. Supply: @2 Demand: @3 = @1. Zapas: @2 Pobór: @3
|
||||||
|
Production at %d%% = Produkowanie w %d%%
|
||||||
|
Choose Milling Program: = Wybierz program mielenia:
|
||||||
|
Slim Elements half / normal height: = Małe elementy połowa / normalna wysokość:
|
||||||
|
Current track %s =
|
||||||
|
Stopped = Zatrzymany/a
|
||||||
|
Keeping %d/%d map blocks loaded = Ciągle ładuję %d/%d bloki mapy
|
||||||
|
Digging not started = Nie rozpoczęto kopania
|
||||||
|
Digging finished = Kopanie skończone
|
||||||
|
Digging %d m above machine = Kopię %d m nad maszyną
|
||||||
|
Digging %d m below machine = Kopię %d m pod maszyną
|
||||||
|
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
|
||||||
|
|
||||||
|
## Grinder Recipes
|
||||||
|
# $1: Name
|
||||||
|
%s Dust = %s Pył
|
||||||
|
Akalin = Akalinowy
|
||||||
|
Alatro = Alatrowy
|
||||||
|
Arol = Arolowy
|
||||||
|
Brass = Mosiądzu
|
||||||
|
Bronze = Brązu
|
||||||
|
Carbon Steel = Stali węglowej
|
||||||
|
Cast Iron = Żeliwa
|
||||||
|
Chromium = Chromu
|
||||||
|
Coal = Węglowy
|
||||||
|
Copper = Miedzi
|
||||||
|
Gold = Złoty
|
||||||
|
Mithril = Mithrilu
|
||||||
|
Silver = Srebrny
|
||||||
|
Stainless Steel = Stali nierdzewnej
|
||||||
|
Talinite = Talinitu
|
||||||
|
Tin = Cyny
|
||||||
|
Wrought Iron = Kutego żelaza
|
||||||
|
Zinc = Cynku
|
||||||
|
%.1f%%-Fissile Uranium = %.1f%% Uranu
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
RE Battery = Bateria ładowalna
|
||||||
|
Water Can = Kanister wody
|
||||||
|
Lava Can = Kanister lawy
|
||||||
|
Chainsaw = Piła łańcuchowa
|
||||||
|
Flashlight = Latarka
|
||||||
|
3 nodes deep. = Głęboki na 3 bloki.
|
||||||
|
3 nodes tall. = Wysoki na 3 bloki.
|
||||||
|
3 nodes wide. = Szeroki na 3 bloki.
|
||||||
|
3x3 nodes. = 3x3 bloki.
|
||||||
|
Use while sneaking to change Mining Drill Mk%d modes. = Użyj podczas skradania, aby zmienić tryby wiertła górniczego Mk%d
|
||||||
|
Mining Drill Mk%d Mode %d = Tryb wiertła górniczego Mk%d
|
||||||
|
Mining Drill Mk%d = Wiertło górnicze Mk%d
|
||||||
|
Mining Laser Mk%d = Laser górniczy Mk%d
|
||||||
|
Single node. = Pojedynczy blok.
|
||||||
|
Sonic Screwdriver = Dźwiękowy śrubokręt
|
||||||
|
Tree Tap = Nacinak drzewny
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking = Stapianie
|
||||||
|
Grinding = Mielenie
|
||||||
|
Compressing = Kompresowanie
|
||||||
|
Extracting = Ekstrakcja
|
||||||
|
Separating = Oddzielanie
|
211
technic/locale/pt_BR.txt
Normal file
|
@ -0,0 +1,211 @@
|
||||||
|
# Braziliam portuguese translation for technic
|
||||||
|
# Tradução portuguesa brasileira para technic
|
||||||
|
# By Sires
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
[Technic] Loaded in %f seconds = [Technic] Carregado em %f segundos
|
||||||
|
|
||||||
|
## Items
|
||||||
|
Silicon Wafer = Pastilha de Silício
|
||||||
|
Doped Silicon Wafer = Pastilha de Silício Dopada
|
||||||
|
Enriched Uranium = Urânio Enriquecido
|
||||||
|
Uranium Fuel = Combustivel de Urânio
|
||||||
|
Diamond Drill Head = Cabeça de Broca de Diamante
|
||||||
|
Blue Energy Crystal = Cristal de Energia Azul
|
||||||
|
Green Energy Crystal = Cristal de Energia Verde
|
||||||
|
Red Energy Crystal = Cristal de Energia Vermelho
|
||||||
|
Fine Copper Wire = Fio Fino de Cobre
|
||||||
|
Copper Coil = Bobina de Cobre
|
||||||
|
Electric Motor = Motor Elétrico
|
||||||
|
Low Voltage Transformer = Transformador de Baixa Voltagem
|
||||||
|
Medium Voltage Transformer = Transformador de Média Voltagem
|
||||||
|
High Voltage Transformer = Transformador de Alta Voltagem
|
||||||
|
Control Logic Unit = Unidade de Controle Lógico
|
||||||
|
Mixed Metal Ingot = Lingote de Metal Misturado
|
||||||
|
Composite Plate = Placa Composta
|
||||||
|
Copper Plate = Placa de Cobre
|
||||||
|
Carbon Plate = Placa de Carbono
|
||||||
|
Graphite = Grafite
|
||||||
|
Carbon Cloth = Recido de Carbono
|
||||||
|
Raw Latex = Latex bruto
|
||||||
|
Rubber Fiber = Fibra de Borracha
|
||||||
|
%.1f%%-Fissile Uranium Ingot = Lingote de Urânio %.1f%%-Físsil
|
||||||
|
%.1f%%-Fissile Uranium Block = Bloco de Urânio %.1f%%-Físsil
|
||||||
|
|
||||||
|
## Machine Misc
|
||||||
|
Machine cannot be removed because it is not empty = A máquina não pode ser removida porque ela não está vazia
|
||||||
|
Inventory move disallowed due to protection = Movimento de inventário não permitido pela proteção
|
||||||
|
# $1: Machine name (includes tier)
|
||||||
|
@1 Active (@2 EU) = @1 Ativo (@2 EU)
|
||||||
|
%s Active = %s Ativo
|
||||||
|
%s Disabled = %s Ativado
|
||||||
|
%s Enabled = %s Desativado
|
||||||
|
%s Idle = Ócio
|
||||||
|
%s Improperly Placed = %s Colocado Inapropriadamente
|
||||||
|
%s is empty = %s está vazio
|
||||||
|
%s Unpowered = %s Sem energia
|
||||||
|
%s Out Of Fuel = %s Sem Combustível
|
||||||
|
%s Has Bad Cabling = %s Tem Cabeamento Ruim
|
||||||
|
%s (Slave) = %s (Servo)
|
||||||
|
%s Has No Network = %s Não Tem Rede
|
||||||
|
%s Finished = %s Acabou
|
||||||
|
Enable/Disable = Ativar/Desativar
|
||||||
|
Range = Alcance
|
||||||
|
Upgrade Slots = Lugares para Melhoria
|
||||||
|
In: = Entrada:
|
||||||
|
Out: = Saída:
|
||||||
|
Slot %d = Lugar %d
|
||||||
|
Itemwise = Por item
|
||||||
|
Stackwise = Por pilha
|
||||||
|
Ignoring Mesecon Signal = Ignorar Sinaal de Mesecon
|
||||||
|
Controlled by Mesecon Signal = Controlado por Sinal de Mesecon
|
||||||
|
Owner: = Dono:
|
||||||
|
Unlocked = Destravado
|
||||||
|
Locked = Travado
|
||||||
|
Radius: = Raio:
|
||||||
|
Enabled = Ativado
|
||||||
|
Disabled = Desativado
|
||||||
|
|
||||||
|
## Machine names
|
||||||
|
# $1: Tier
|
||||||
|
%s Alloy Furnace = Fornalha de Liga %s
|
||||||
|
%s Battery Box = Caixa de Bateria %s
|
||||||
|
%s Cable = Cabo %s
|
||||||
|
%s CNC Machine = Máquina CNC %s
|
||||||
|
%s Centrifuge = Centrifuga %s
|
||||||
|
%s Compressor = Compresso %s
|
||||||
|
%s Extractor = Extrator %s
|
||||||
|
%s Forcefield Emitter = Emissor de Campo de Força %s
|
||||||
|
%s Furnace = Fornalha %s
|
||||||
|
%s Grinder = Triturador %s
|
||||||
|
%s Music Player = Tocador de Música %s
|
||||||
|
%s Quarry = Pedreira %s
|
||||||
|
%s Tool Workshop = Oficina de Ferramentas %s
|
||||||
|
Arrayed Solar %s Generator = Gerador Solar Equipado %s
|
||||||
|
Fuel-Fired %s Generator = Gerador Alimentado-por-Combustível %s
|
||||||
|
Geothermal %s Generator = Gerador Geotermal %s
|
||||||
|
Hydro %s Generator = Gerador Hidráulico %s
|
||||||
|
Nuclear %s Generator Core = Núcleo de Gerador Nuclear %s
|
||||||
|
Small Solar %s Generator = Gerador Solar Pequeno %s
|
||||||
|
Wind %s Generator = Gerador de Energia Eólica %s
|
||||||
|
Self-Contained Injector = Injetor Auto-Contido
|
||||||
|
Constructor Mk%d = Construtor Nv%d
|
||||||
|
Frame = Armação
|
||||||
|
Frame Motor = Motor de Armação
|
||||||
|
Template = Modelo
|
||||||
|
Template (replacing) = Modelo (recolocando)
|
||||||
|
Template Motor = Modelo de Motor
|
||||||
|
Template Tool = Modelo de Ferramenta
|
||||||
|
Battery Box = Caixa de Bateria
|
||||||
|
Supply Converter = Conversor de Energia
|
||||||
|
Switching Station = Estação de Comutação
|
||||||
|
Fuel-Fired Alloy Furnace = Fornalha de Liga Alimentada-por-Combustível
|
||||||
|
Fuel-Fired Furnace = Fornalha Alimentada-por-Combustível
|
||||||
|
Wind Mill Frame = Armação de Moinho de Vento
|
||||||
|
Forcefield = Campo de Força
|
||||||
|
Nuclear Reactor Rod Compartment = Compartimento de Barra do Reator Nuclear
|
||||||
|
Administrative World Anchor = Âncora de Mundo Administrativa
|
||||||
|
|
||||||
|
## Machine-specific
|
||||||
|
# $1: Pruduced EU
|
||||||
|
Charge = Carregar
|
||||||
|
Discharge = Descarregar
|
||||||
|
Power level = Nível de Energia
|
||||||
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
|
@1 Battery Box: @2/@3 = Caixa de Baterias @1: @2/@3
|
||||||
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
|
@1. Supply: @2 Demand: @3 = @1. Suprimento: @2 Demanda: @3
|
||||||
|
Production at %d%% = Produção em %d%%
|
||||||
|
Choose Milling Program: = Escolha o Programa de Serragem:
|
||||||
|
Slim Elements half / normal height: = Metade de Elementos Finos / altura normal:
|
||||||
|
Current track %s = Música Atual %s
|
||||||
|
Stopped = Parado
|
||||||
|
Keeping %d/%d map blocks loaded = Mantendo %d/%d blocos de mapa carregados
|
||||||
|
Digging not started = Escavação não começada
|
||||||
|
Digging finished = Escavação terminada
|
||||||
|
Digging %d m above machine = Escavando %d m acima da máquina
|
||||||
|
Digging %d m below machine = Escavando %d m abaixo da máquina
|
||||||
|
@1 (@2 @3 -> @4 @5) = @1 (@2 @3 -> @4 @5)
|
||||||
|
|
||||||
|
## CNC
|
||||||
|
Cylinder = Cilindro
|
||||||
|
Element Cross = Cruz do Elemento
|
||||||
|
Element Cross Double = Cruz Dupla do Elemento
|
||||||
|
Element Edge = Borda do Elemento
|
||||||
|
Element Edge Double = Borda Dupla do Elemento
|
||||||
|
Element End = Final do Elemento
|
||||||
|
Element End Double = Final Duplo do Elemento
|
||||||
|
Element Straight = Elemento Contínuo
|
||||||
|
Element Straight Double = Elemento Contínuo duplo
|
||||||
|
Element T = Elemento em T
|
||||||
|
Element T Double = Elemento em T Duplo
|
||||||
|
Horizontal Cylinder = Cilindro Horizontal
|
||||||
|
One Curved Edge Block = Uma Borda de Bloco Curvada
|
||||||
|
Pyramid = Pirâmide
|
||||||
|
Slope = Ladeira
|
||||||
|
Slope Edge = Canto de Ladeira
|
||||||
|
Slope Inner Edge = Canto de Dentro de Ladeira
|
||||||
|
Slope Lying = Ladeira Deitada
|
||||||
|
Slope Upside Down = Ladeira de Cabeça para Baixo
|
||||||
|
Slope Upside Down Edge = Cande de Ladeira de Cabeça para Baixo
|
||||||
|
Slope Upside Down Inner Edge = Canto de Dentro de Ladeira de Cabeça para Baixo
|
||||||
|
Sphere = Esfera
|
||||||
|
Spike = Espinho
|
||||||
|
Stick = Graveto
|
||||||
|
Two Curved Edge Block = Bloco de Duas Bordas Curvadas
|
||||||
|
Brick = Tijolo
|
||||||
|
Cobble = Pedregulho
|
||||||
|
Dirt = Terra
|
||||||
|
Leaves = Folhas
|
||||||
|
Sandstone = Arenito
|
||||||
|
Stone = Pedra
|
||||||
|
Tree = Árvore
|
||||||
|
Wooden = de Madeira
|
||||||
|
|
||||||
|
## Grinder Recipes
|
||||||
|
# $1: Name
|
||||||
|
%s Dust = Pó de %s
|
||||||
|
Akalin = Akalin
|
||||||
|
Alatro = Alatro
|
||||||
|
Arol = Arol
|
||||||
|
Brass = Latão
|
||||||
|
Bronze = Bronze
|
||||||
|
Carbon Steel = Aço Carbono
|
||||||
|
Cast Iron = Ferro Fundido
|
||||||
|
Chromium = Crômio
|
||||||
|
Coal = Carvão
|
||||||
|
Copper = Cobre
|
||||||
|
Gold = Ouro
|
||||||
|
Mithril = Mithril
|
||||||
|
Silver = Prata
|
||||||
|
Stainless Steel = Aço Inoxidável
|
||||||
|
Talinite = Talinite
|
||||||
|
Tin = Estanho
|
||||||
|
Wrought Iron = Ferro Forjado
|
||||||
|
Zinc = Zinco
|
||||||
|
%.1f%%-Fissile Uranium = Urânio %.1f%%-Físsil
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
RE Battery = Bateria RE
|
||||||
|
Water Can = Lata de Água
|
||||||
|
Lava Can = Lata de Lava
|
||||||
|
Chainsaw = Motosserra
|
||||||
|
Flashlight = Lanterna
|
||||||
|
3 nodes deep. = 3 nodes de profundidade.
|
||||||
|
3 nodes tall. = 3 nodes de altura.
|
||||||
|
3 nodes wide. = 3 nodes de largura.
|
||||||
|
3x3 nodes. = 3x3 nodes.
|
||||||
|
Use while sneaking to change Mining Drill Mk%d modes. = Use enquanto esgueirando para mudar os modos da Broca de Mineração Nv%d.
|
||||||
|
Mining Drill Mk%d Mode %d = Broca de Mineração Nv%d Modo %d
|
||||||
|
Mining Drill Mk%d = Broca de Mineração Nv%d
|
||||||
|
Mining Laser Mk%d = Laser de Mineração Nv%d
|
||||||
|
Single node. = Unico node.
|
||||||
|
Sonic Screwdriver = Chave de Fenda Sônica.
|
||||||
|
Tree Tap = Torneira de Árvore
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking = Cozinhando em liga
|
||||||
|
Grinding = Triturando
|
||||||
|
Compressing = Comprimindo
|
||||||
|
Extracting = Extraindo
|
||||||
|
Separating = Separando
|
|
@ -15,6 +15,8 @@ Blue Energy Crystal =
|
||||||
Green Energy Crystal =
|
Green Energy Crystal =
|
||||||
Red Energy Crystal =
|
Red Energy Crystal =
|
||||||
Fine Copper Wire =
|
Fine Copper Wire =
|
||||||
|
Fine Gold Wire =
|
||||||
|
Fine Silver Wire =
|
||||||
Copper Coil =
|
Copper Coil =
|
||||||
Electric Motor =
|
Electric Motor =
|
||||||
Low Voltage Transformer =
|
Low Voltage Transformer =
|
||||||
|
@ -29,51 +31,81 @@ Graphite =
|
||||||
Carbon Cloth =
|
Carbon Cloth =
|
||||||
Raw Latex =
|
Raw Latex =
|
||||||
Rubber Fiber =
|
Rubber Fiber =
|
||||||
|
%.1f%%-Fissile Uranium Ingot =
|
||||||
|
%.1f%%-Fissile Uranium Block =
|
||||||
|
|
||||||
## Machine misc
|
## Machine misc
|
||||||
Machine cannot be removed because it is not empty =
|
Machine cannot be removed because it is not empty =
|
||||||
|
Inventory move disallowed due to protection =
|
||||||
# $1: Machine name (Includes tier)
|
# $1: Machine name (Includes tier)
|
||||||
|
@1 Active (@2 EU) =
|
||||||
%s Active =
|
%s Active =
|
||||||
%s Disabled =
|
%s Disabled =
|
||||||
|
%s Enabled =
|
||||||
%s Idle =
|
%s Idle =
|
||||||
%s Improperly Placed =
|
%s Improperly Placed =
|
||||||
|
%s is empty =
|
||||||
%s Unpowered =
|
%s Unpowered =
|
||||||
%s Out Of Fuel =
|
%s Out Of Fuel =
|
||||||
%s Has Bad Cabling =
|
%s Has Bad Cabling =
|
||||||
|
%s (Slave) =
|
||||||
%s Has No Network =
|
%s Has No Network =
|
||||||
%s Finished =
|
%s Finished =
|
||||||
Enable/Disable =
|
Enable/Disable =
|
||||||
Range =
|
Range =
|
||||||
|
Upgrade Slots =
|
||||||
|
In: =
|
||||||
|
Out: =
|
||||||
|
Slot %d =
|
||||||
|
Itemwise =
|
||||||
|
Stackwise =
|
||||||
|
Ignoring Mesecon Signal =
|
||||||
|
Controlled by Mesecon Signal =
|
||||||
|
Owner: =
|
||||||
|
Unlocked =
|
||||||
|
Locked =
|
||||||
|
Radius: =
|
||||||
|
Enabled =
|
||||||
|
Disabled =
|
||||||
|
|
||||||
## Machine names
|
## Machine names
|
||||||
# $1: Tier
|
# $1: Tier
|
||||||
%s Alloy Furnace =
|
%s Alloy Furnace =
|
||||||
%s Battery Box =
|
%s Battery Box =
|
||||||
%s Cable =
|
%s Cable =
|
||||||
%s Electric Furnace =
|
%s Centrifuge =
|
||||||
|
%s Compressor =
|
||||||
|
%s Extractor =
|
||||||
|
%s Forcefield Emitter =
|
||||||
|
%s Furnace =
|
||||||
%s Grinder =
|
%s Grinder =
|
||||||
%s Generator =
|
%s Music Player =
|
||||||
%s Solar Array =
|
%s Quarry =
|
||||||
|
%s Tool Workshop =
|
||||||
|
Arrayed Solar %s Generator =
|
||||||
|
Fuel-Fired %s Generator =
|
||||||
|
Geothermal %s Generator =
|
||||||
|
Hydro %s Generator =
|
||||||
|
Nuclear %s Generator Core =
|
||||||
|
Small Solar %s Generator =
|
||||||
|
Wind %s Generator =
|
||||||
|
Self-Contained Injector =
|
||||||
|
Constructor Mk%d =
|
||||||
|
Frame =
|
||||||
|
Frame Motor =
|
||||||
|
Template =
|
||||||
|
Template (replacing) =
|
||||||
|
Template Motor =
|
||||||
|
Template Tool =
|
||||||
Battery Box =
|
Battery Box =
|
||||||
Supply Converter =
|
Supply Converter =
|
||||||
Switching Station =
|
Switching Station =
|
||||||
CNC Machine =
|
Fuel-Fired Alloy Furnace =
|
||||||
Coal Alloy Furnace =
|
Fuel-Fired Furnace =
|
||||||
Extractor =
|
|
||||||
Compressor =
|
|
||||||
Solar Panel =
|
|
||||||
Geothermal Generator =
|
|
||||||
Music Player =
|
|
||||||
Water Mill =
|
|
||||||
Tool WorkShop =
|
|
||||||
Wind Mill =
|
|
||||||
Wind Mill Frame =
|
Wind Mill Frame =
|
||||||
Forcefield Emitter =
|
|
||||||
Forcefield =
|
Forcefield =
|
||||||
Nuclear Reactor Core =
|
|
||||||
Nuclear Reactor Rod Compartment =
|
Nuclear Reactor Rod Compartment =
|
||||||
Quarry =
|
Administrative World Anchor =
|
||||||
|
|
||||||
## Machine-specific
|
## Machine-specific
|
||||||
# $1: Pruduced EU
|
# $1: Pruduced EU
|
||||||
|
@ -81,46 +113,21 @@ Charge =
|
||||||
Discharge =
|
Discharge =
|
||||||
Power level =
|
Power level =
|
||||||
# $1: Tier $2: current_charge $3: max_charge
|
# $1: Tier $2: current_charge $3: max_charge
|
||||||
%s Battery Box: %d/%d =
|
@1 Battery Box: @2/@3 =
|
||||||
# $1: Machine name $2: Supply $3: Demand
|
# $1: Machine name $2: Supply $3: Demand
|
||||||
%s. Supply: %d Demand: %d =
|
@1. Supply: @2 Demand: @3 =
|
||||||
Production at %d%% =
|
Production at %d%% =
|
||||||
|
Choose Milling Program: =
|
||||||
|
Slim Elements half / normal height: =
|
||||||
|
Current track %s =
|
||||||
|
Stopped =
|
||||||
|
Keeping %d/%d map blocks loaded =
|
||||||
|
Digging not started =
|
||||||
|
Digging finished =
|
||||||
|
Digging %d m above machine =
|
||||||
|
Digging %d m below machine =
|
||||||
|
@1 (@2 @3 -> @4 @5) =
|
||||||
|
|
||||||
## CNC
|
|
||||||
Cylinder =
|
|
||||||
Element Cross =
|
|
||||||
Element Cross Double =
|
|
||||||
Element Edge =
|
|
||||||
Element Edge Double =
|
|
||||||
Element End =
|
|
||||||
Element End Double =
|
|
||||||
Element Straight =
|
|
||||||
Element Straight Double =
|
|
||||||
Element T =
|
|
||||||
Element T Double =
|
|
||||||
Horizontal Cylinder =
|
|
||||||
One Curved Edge Block =
|
|
||||||
Pyramid =
|
|
||||||
Slope =
|
|
||||||
Slope Edge =
|
|
||||||
Slope Inner Edge =
|
|
||||||
Slope Lying =
|
|
||||||
Slope Upside Down =
|
|
||||||
Slope Upside Down Edge =
|
|
||||||
Slope Upside Down Inner Edge =
|
|
||||||
Sphere =
|
|
||||||
Spike =
|
|
||||||
Stick =
|
|
||||||
Two Curved Edge Block =
|
|
||||||
Brick =
|
|
||||||
Cobble =
|
|
||||||
Dirt =
|
|
||||||
Leaves =
|
|
||||||
Sandstone =
|
|
||||||
Steel =
|
|
||||||
Stone =
|
|
||||||
Tree =
|
|
||||||
Wooden =
|
|
||||||
|
|
||||||
## Grinder Recipes
|
## Grinder Recipes
|
||||||
# $1: Name
|
# $1: Name
|
||||||
|
@ -130,19 +137,23 @@ Alatro =
|
||||||
Arol =
|
Arol =
|
||||||
Brass =
|
Brass =
|
||||||
Bronze =
|
Bronze =
|
||||||
|
Carbon Steel =
|
||||||
|
Cast Iron =
|
||||||
Chromium =
|
Chromium =
|
||||||
Coal =
|
Coal =
|
||||||
Copper =
|
Copper =
|
||||||
Gold =
|
Gold =
|
||||||
Iron =
|
|
||||||
Mithril =
|
Mithril =
|
||||||
Silver =
|
Silver =
|
||||||
Stainless Steel =
|
Stainless Steel =
|
||||||
Talinite =
|
Talinite =
|
||||||
Tin =
|
Tin =
|
||||||
|
Wrought Iron =
|
||||||
Zinc =
|
Zinc =
|
||||||
|
%.1f%%-Fissile Uranium =
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
|
RE Battery =
|
||||||
Water Can =
|
Water Can =
|
||||||
Lava Can =
|
Lava Can =
|
||||||
Chainsaw =
|
Chainsaw =
|
||||||
|
@ -151,7 +162,7 @@ Flashlight =
|
||||||
3 nodes tall. =
|
3 nodes tall. =
|
||||||
3 nodes wide. =
|
3 nodes wide. =
|
||||||
3x3 nodes. =
|
3x3 nodes. =
|
||||||
Hold shift and use to change Mining Drill Mk%d modes. =
|
Use while sneaking to change Mining Drill Mk%d modes. =
|
||||||
Mining Drill Mk%d Mode %d =
|
Mining Drill Mk%d Mode %d =
|
||||||
Mining Drill Mk%d =
|
Mining Drill Mk%d =
|
||||||
Mining Laser Mk%d =
|
Mining Laser Mk%d =
|
||||||
|
@ -159,4 +170,9 @@ Single node. =
|
||||||
Sonic Screwdriver =
|
Sonic Screwdriver =
|
||||||
Tree Tap =
|
Tree Tap =
|
||||||
|
|
||||||
|
## Craft descriptions
|
||||||
|
Alloy cooking =
|
||||||
|
Grinding =
|
||||||
|
Compressing =
|
||||||
|
Extracting =
|
||||||
|
Separating =
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
-- HV battery box
|
-- HV battery box
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:hv_battery_box0',
|
output = 'technic:hv_battery_box0',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:mv_battery_box0', 'technic:mv_battery_box0', 'technic:mv_battery_box0'},
|
{'technic:mv_battery_box0', 'technic:mv_battery_box0', 'technic:mv_battery_box0'},
|
||||||
{'technic:mv_battery_box0', 'technic:hv_transformer', 'technic:mv_battery_box0'},
|
{'technic:mv_battery_box0', 'technic:hv_transformer', 'technic:mv_battery_box0'},
|
||||||
{'', 'technic:hv_cable0', ''},
|
{'', 'technic:hv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_battery_box({
|
technic.register_battery_box({
|
||||||
tier = "HV",
|
tier = "HV",
|
||||||
max_charge = 1500000,
|
max_charge = 1000000,
|
||||||
charge_rate = 100000,
|
charge_rate = 100000,
|
||||||
discharge_rate = 400000,
|
discharge_rate = 400000,
|
||||||
charge_step = 10000,
|
charge_step = 10000,
|
||||||
discharge_step = 40000,
|
discharge_step = 40000,
|
||||||
|
upgrade = 1,
|
||||||
|
tube = 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:hv_cable0 3',
|
output = 'technic:hv_cable 3',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
|
{'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'},
|
||||||
{'technic:mv_cable0', 'technic:mv_cable0', 'technic:mv_cable0'},
|
{'technic:mv_cable', 'technic:mv_cable', 'technic:mv_cable'},
|
||||||
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
|
{'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting', 'homedecor:plastic_sheeting'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,40 @@
|
||||||
-- Forcefield mod by ShadowNinja
|
--- Forcefield generator.
|
||||||
-- Modified by kpoppel
|
-- @author ShadowNinja
|
||||||
--
|
--
|
||||||
-- Forcefields are powerful barriers but they consume huge amounts of power.
|
-- Forcefields are powerful barriers but they consume huge amounts of power.
|
||||||
-- Forcefield Generator is a HV machine.
|
-- The forcefield Generator is an HV machine.
|
||||||
|
|
||||||
-- How expensive is the generator?
|
-- How expensive is the generator?
|
||||||
-- Leaves room for upgrades lowering the power drain?
|
-- Leaves room for upgrades lowering the power drain?
|
||||||
|
local digilines_path = minetest.get_modpath("digilines")
|
||||||
|
|
||||||
local forcefield_power_drain = 10
|
local forcefield_power_drain = 10
|
||||||
local forcefield_step_interval = 1
|
|
||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
|
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:forcefield_emitter_off',
|
output = "technic:forcefield_emitter_off",
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:mese', 'technic:deployer_off', 'default:mese' },
|
{"default:mese", "basic_materials:motor", "default:mese" },
|
||||||
{'technic:deployer_off', 'technic:motor', 'technic:deployer_off'},
|
{"technic:deployer_off", "technic:machine_casing", "technic:deployer_off"},
|
||||||
{'default:mese', 'technic:deployer_off', 'default:mese' },
|
{"default:mese", "technic:hv_cable", "default:mese" },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
local replaceable_cids = {}
|
||||||
|
|
||||||
|
minetest.after(0, function()
|
||||||
|
for name, ndef in pairs(minetest.registered_nodes) do
|
||||||
|
if ndef.buildable_to == true and name ~= "ignore" then
|
||||||
|
replaceable_cids[minetest.get_content_id(name)] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
-- Idea: Let forcefields have different colors by upgrade slot.
|
-- Idea: Let forcefields have different colors by upgrade slot.
|
||||||
-- Idea: Let forcefields add up by detecting if one hits another.
|
-- Idea: Let forcefields add up by detecting if one hits another.
|
||||||
-- ___ __
|
-- ___ __
|
||||||
|
@ -28,26 +42,39 @@ minetest.register_craft({
|
||||||
-- | |
|
-- | |
|
||||||
-- \___/\___/
|
-- \___/\___/
|
||||||
|
|
||||||
local function update_forcefield(pos, range, active)
|
local function update_forcefield(pos, meta, active)
|
||||||
|
local shape = meta:get_int("shape")
|
||||||
|
local range = meta:get_int("range")
|
||||||
local vm = VoxelManip()
|
local vm = VoxelManip()
|
||||||
local p1 = {x = pos.x-range, y = pos.y-range, z = pos.z-range}
|
local MinEdge, MaxEdge = vm:read_from_map(vector.subtract(pos, range),
|
||||||
local p2 = {x = pos.x+range, y = pos.y+range, z = pos.z+range}
|
vector.add(pos, range))
|
||||||
local MinEdge, MaxEdge = vm:read_from_map(p1, p2)
|
|
||||||
local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge})
|
local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge})
|
||||||
local data = vm:get_data()
|
local data = vm:get_data()
|
||||||
|
|
||||||
local c_air = minetest.get_content_id("air")
|
local c_air = minetest.get_content_id("air")
|
||||||
local c_field = minetest.get_content_id("technic:forcefield")
|
local c_field = minetest.get_content_id("technic:forcefield")
|
||||||
|
|
||||||
for z=-range, range do
|
for z = -range, range do
|
||||||
for y=-range, range do
|
for y = -range, range do
|
||||||
local vi = area:index(pos.x+(-range), pos.y+y, pos.z+z)
|
local vi = area:index(pos.x + (-range), pos.y + y, pos.z + z)
|
||||||
for x=-range, range do
|
for x = -range, range do
|
||||||
if x*x+y*y+z*z <= range * range + range and
|
local relevant
|
||||||
x*x+y*y+z*z >= (range-1) * (range-1) + (range-1) then
|
if shape == 0 then
|
||||||
if active and data[vi] == c_air then
|
local squared = x * x + y * y + z * z
|
||||||
|
relevant =
|
||||||
|
squared <= range * range + range and
|
||||||
|
squared >= (range - 1) * (range - 1) + (range - 1)
|
||||||
|
else
|
||||||
|
relevant =
|
||||||
|
x == -range or x == range or
|
||||||
|
y == -range or y == range or
|
||||||
|
z == -range or z == range
|
||||||
|
end
|
||||||
|
if relevant then
|
||||||
|
local cid = data[vi]
|
||||||
|
if active and replaceable_cids[cid] then
|
||||||
data[vi] = c_field
|
data[vi] = c_field
|
||||||
elseif not active and data[vi] == c_field then
|
elseif not active and cid == c_field then
|
||||||
data[vi] = c_air
|
data[vi] = c_air
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -59,55 +86,213 @@ local function update_forcefield(pos, range, active)
|
||||||
vm:set_data(data)
|
vm:set_data(data)
|
||||||
vm:update_liquids()
|
vm:update_liquids()
|
||||||
vm:write_to_map()
|
vm:write_to_map()
|
||||||
vm:update_map()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local get_forcefield_formspec = function(range)
|
local function set_forcefield_formspec(meta)
|
||||||
return "size[3,1.5]"..
|
local formspec
|
||||||
"field[1,0.5;2,1;range;"..S("Range")..";"..range.."]"..
|
if digilines_path then
|
||||||
"button[0,1;3,1;toggle;"..S("Enable/Disable").."]"
|
formspec = "size[5,3.25]"..
|
||||||
|
"field[0.3,3;5,1;channel;Digiline Channel;"..meta:get_string("channel").."]"
|
||||||
|
else
|
||||||
|
formspec = "size[5,2.25]"
|
||||||
|
end
|
||||||
|
formspec = formspec..
|
||||||
|
"field[0.3,0.5;2,1;range;"..S("Range")..";"..meta:get_int("range").."]"
|
||||||
|
-- The names for these toggle buttons are explicit about which
|
||||||
|
-- state they'll switch to, so that multiple presses (arising
|
||||||
|
-- from the ambiguity between lag and a missed press) only make
|
||||||
|
-- the single change that the user expects.
|
||||||
|
if meta:get_int("shape") == 0 then
|
||||||
|
formspec = formspec.."button[3,0.2;2,1;shape1;"..S("Sphere").."]"
|
||||||
|
else
|
||||||
|
formspec = formspec.."button[3,0.2;2,1;shape0;"..S("Cube").."]"
|
||||||
|
end
|
||||||
|
if meta:get_int("mesecon_mode") == 0 then
|
||||||
|
formspec = formspec.."button[0,1;5,1;mesecon_mode_1;"..S("Ignoring Mesecon Signal").."]"
|
||||||
|
else
|
||||||
|
formspec = formspec.."button[0,1;5,1;mesecon_mode_0;"..S("Controlled by Mesecon Signal").."]"
|
||||||
|
end
|
||||||
|
if meta:get_int("enabled") == 0 then
|
||||||
|
formspec = formspec.."button[0,1.75;5,1;enable;"..S("%s Disabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
|
||||||
|
else
|
||||||
|
formspec = formspec.."button[0,1.75;5,1;disable;"..S("%s Enabled"):format(S("%s Forcefield Emitter"):format("HV")).."]"
|
||||||
|
end
|
||||||
|
meta:set_string("formspec", formspec)
|
||||||
end
|
end
|
||||||
|
|
||||||
local forcefield_receive_fields = function(pos, formname, fields, sender)
|
local forcefield_receive_fields = function(pos, formname, fields, sender)
|
||||||
|
local player_name = sender:get_player_name()
|
||||||
|
if minetest.is_protected(pos, player_name) then
|
||||||
|
minetest.chat_send_player(player_name, "You are not allowed to edit this!")
|
||||||
|
minetest.record_protection_violation(pos, player_name)
|
||||||
|
return
|
||||||
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local range = tonumber(fields.range) or 0
|
local range = nil
|
||||||
|
if fields.range then
|
||||||
if fields.toggle then
|
range = tonumber(fields.range) or 0
|
||||||
if meta:get_int("enabled") == 1 then
|
|
||||||
meta:set_int("enabled", 0)
|
|
||||||
else
|
|
||||||
meta:set_int("enabled", 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Smallest field is 5. Anything less is asking for trouble.
|
-- Smallest field is 5. Anything less is asking for trouble.
|
||||||
-- Largest is 20. It is a matter of pratical node handling.
|
-- Largest is 20. It is a matter of pratical node handling.
|
||||||
-- At the maximim range updating the forcefield takes about 0.2s
|
-- At the maximim range updating the forcefield takes about 0.2s
|
||||||
range = math.max(range, 5)
|
range = math.max(range, 5)
|
||||||
range = math.min(range, 20)
|
range = math.min(range, 20)
|
||||||
|
if range == meta:get_int("range") then range = nil end
|
||||||
if meta:get_int("range") ~= range then
|
|
||||||
update_forcefield(pos, meta:get_int("range"), false)
|
|
||||||
meta:set_int("range", range)
|
|
||||||
meta:set_string("formspec", get_forcefield_formspec(range))
|
|
||||||
end
|
end
|
||||||
|
if fields.shape0 or fields.shape1 or range then
|
||||||
|
update_forcefield(pos, meta, false)
|
||||||
|
end
|
||||||
|
if range then meta:set_int("range", range) end
|
||||||
|
if fields.channel then meta:set_string("channel", fields.channel) end
|
||||||
|
if fields.shape0 then meta:set_int("shape", 0) end
|
||||||
|
if fields.shape1 then meta:set_int("shape", 1) end
|
||||||
|
if fields.enable then meta:set_int("enabled", 1) end
|
||||||
|
if fields.disable then meta:set_int("enabled", 0) end
|
||||||
|
if fields.mesecon_mode_0 then meta:set_int("mesecon_mode", 0) end
|
||||||
|
if fields.mesecon_mode_1 then meta:set_int("mesecon_mode", 1) end
|
||||||
|
set_forcefield_formspec(meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
local mesecons = {
|
local mesecons = {
|
||||||
effector = {
|
effector = {
|
||||||
action_on = function(pos, node)
|
action_on = function(pos, node)
|
||||||
minetest.get_meta(pos):set_int("enabled", 0)
|
minetest.get_meta(pos):set_int("mesecon_effect", 1)
|
||||||
end,
|
end,
|
||||||
action_off = function(pos, node)
|
action_off = function(pos, node)
|
||||||
minetest.get_meta(pos):set_int("enabled", 1)
|
minetest.get_meta(pos):set_int("mesecon_effect", 0)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local digiline_def = {
|
||||||
|
receptor = {action = function() end},
|
||||||
|
effector = {
|
||||||
|
action = function(pos, node, channel, msg)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if channel ~= meta:get_string("channel") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local msgt = type(msg)
|
||||||
|
if msgt == "string" then
|
||||||
|
local smsg = msg:lower()
|
||||||
|
msg = {}
|
||||||
|
if smsg == "get" then
|
||||||
|
msg.command = "get"
|
||||||
|
elseif smsg == "off" then
|
||||||
|
msg.command = "off"
|
||||||
|
elseif smsg == "on" then
|
||||||
|
msg.command = "on"
|
||||||
|
elseif smsg == "toggle" then
|
||||||
|
msg.command = "toggle"
|
||||||
|
elseif smsg:sub(1, 5) == "range" then
|
||||||
|
msg.command = "range"
|
||||||
|
msg.value = tonumber(smsg:sub(7))
|
||||||
|
elseif smsg:sub(1, 5) == "shape" then
|
||||||
|
msg.command = "shape"
|
||||||
|
msg.value = smsg:sub(7):lower()
|
||||||
|
msg.value = tonumber(msg.value) or msg.value
|
||||||
|
end
|
||||||
|
elseif msgt ~= "table" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if msg.command == "get" then
|
||||||
|
digilines.receptor_send(pos, digilines.rules.default, channel, {
|
||||||
|
enabled = meta:get_int("enabled"),
|
||||||
|
range = meta:get_int("range"),
|
||||||
|
shape = meta:get_int("shape")
|
||||||
|
})
|
||||||
|
return
|
||||||
|
elseif msg.command == "off" then
|
||||||
|
meta:set_int("enabled", 0)
|
||||||
|
elseif msg.command == "on" then
|
||||||
|
meta:set_int("enabled", 1)
|
||||||
|
elseif msg.command == "toggle" then
|
||||||
|
local onn = meta:get_int("enabled")
|
||||||
|
onn = 1-onn -- Mirror onn with pivot 0.5, so switch between 1 and 0.
|
||||||
|
meta:set_int("enabled", onn)
|
||||||
|
elseif msg.command == "range" then
|
||||||
|
if type(msg.value) ~= "number" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
msg.value = math.max(msg.value, 5)
|
||||||
|
msg.value = math.min(msg.value, 20)
|
||||||
|
update_forcefield(pos, meta, false)
|
||||||
|
meta:set_int("range", msg.value)
|
||||||
|
elseif msg.command == "shape" then
|
||||||
|
local valuet = type(msg.value)
|
||||||
|
if valuet == "string" then
|
||||||
|
if msg.value == "sphere" then
|
||||||
|
msg.value = 0
|
||||||
|
elseif msg.value == "cube" then
|
||||||
|
msg.value = 1
|
||||||
|
end
|
||||||
|
elseif valuet ~= "number" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not msg.value then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
update_forcefield(pos, meta, false)
|
||||||
|
meta:set_int("shape", msg.value)
|
||||||
|
else
|
||||||
|
return
|
||||||
|
end
|
||||||
|
set_forcefield_formspec(meta)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local function run(pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local eu_input = meta:get_int("HV_EU_input")
|
||||||
|
local enabled = meta:get_int("enabled") ~= 0 and
|
||||||
|
(meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0)
|
||||||
|
local machine_name = S("%s Forcefield Emitter"):format("HV")
|
||||||
|
|
||||||
|
local range = meta:get_int("range")
|
||||||
|
local power_requirement
|
||||||
|
if meta:get_int("shape") == 0 then
|
||||||
|
power_requirement = math.floor(4 * math.pi * range * range)
|
||||||
|
else
|
||||||
|
power_requirement = 24 * range * range
|
||||||
|
end
|
||||||
|
power_requirement = power_requirement * forcefield_power_drain
|
||||||
|
|
||||||
|
if not enabled then
|
||||||
|
if node.name == "technic:forcefield_emitter_on" then
|
||||||
|
update_forcefield(pos, meta, false)
|
||||||
|
technic.swap_node(pos, "technic:forcefield_emitter_off")
|
||||||
|
meta:set_string("infotext", S("%s Disabled"):format(machine_name))
|
||||||
|
end
|
||||||
|
meta:set_int("HV_EU_demand", 0)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
meta:set_int("HV_EU_demand", power_requirement)
|
||||||
|
if eu_input < power_requirement then
|
||||||
|
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
||||||
|
if node.name == "technic:forcefield_emitter_on" then
|
||||||
|
update_forcefield(pos, meta, false)
|
||||||
|
technic.swap_node(pos, "technic:forcefield_emitter_off")
|
||||||
|
end
|
||||||
|
elseif eu_input >= power_requirement then
|
||||||
|
if node.name == "technic:forcefield_emitter_off" then
|
||||||
|
technic.swap_node(pos, "technic:forcefield_emitter_on")
|
||||||
|
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
||||||
|
end
|
||||||
|
update_forcefield(pos, meta, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node("technic:forcefield_emitter_off", {
|
minetest.register_node("technic:forcefield_emitter_off", {
|
||||||
description = S("Forcefield Emitter"),
|
description = S("%s Forcefield Emitter"):format("HV"),
|
||||||
tiles = {"technic_forcefield_emitter_off.png"},
|
tiles = {
|
||||||
groups = {cracky = 1},
|
"technic_forcefield_emitter_off.png",
|
||||||
|
"technic_machine_bottom.png"..cable_entry,
|
||||||
|
"technic_forcefield_emitter_off.png",
|
||||||
|
"technic_forcefield_emitter_off.png",
|
||||||
|
"technic_forcefield_emitter_off.png",
|
||||||
|
"technic_forcefield_emitter_off.png"
|
||||||
|
},
|
||||||
|
groups = {cracky = 1, technic_machine = 1, technic_hv = 1},
|
||||||
on_receive_fields = forcefield_receive_fields,
|
on_receive_fields = forcefield_receive_fields,
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -115,37 +300,59 @@ minetest.register_node("technic:forcefield_emitter_off", {
|
||||||
meta:set_int("HV_EU_demand", 0)
|
meta:set_int("HV_EU_demand", 0)
|
||||||
meta:set_int("range", 10)
|
meta:set_int("range", 10)
|
||||||
meta:set_int("enabled", 0)
|
meta:set_int("enabled", 0)
|
||||||
meta:set_string("formspec", get_forcefield_formspec(10))
|
meta:set_int("mesecon_mode", 0)
|
||||||
meta:set_string("infotext", S("Forcefield Emitter"))
|
meta:set_int("mesecon_effect", 0)
|
||||||
|
if digilines_path then
|
||||||
|
meta:set_string("channel", "forcefield"..minetest.pos_to_string(pos))
|
||||||
|
end
|
||||||
|
meta:set_string("infotext", S("%s Forcefield Emitter"):format("HV"))
|
||||||
|
set_forcefield_formspec(meta)
|
||||||
end,
|
end,
|
||||||
mesecons = mesecons
|
mesecons = mesecons,
|
||||||
|
digiline = digiline_def,
|
||||||
|
technic_run = run,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("technic:forcefield_emitter_on", {
|
minetest.register_node("technic:forcefield_emitter_on", {
|
||||||
description = S("Forcefield Emitter"),
|
description = S("%s Forcefield Emitter"):format("HV"),
|
||||||
tiles = {"technic_forcefield_emitter_on.png"},
|
tiles = {
|
||||||
groups = {cracky = 1, not_in_creative_inventory=1},
|
"technic_forcefield_emitter_on.png",
|
||||||
|
"technic_machine_bottom.png"..cable_entry,
|
||||||
|
"technic_forcefield_emitter_on.png",
|
||||||
|
"technic_forcefield_emitter_on.png",
|
||||||
|
"technic_forcefield_emitter_on.png",
|
||||||
|
"technic_forcefield_emitter_on.png"
|
||||||
|
},
|
||||||
|
groups = {cracky = 1, technic_machine = 1, technic_hv = 1,
|
||||||
|
not_in_creative_inventory=1},
|
||||||
drop = "technic:forcefield_emitter_off",
|
drop = "technic:forcefield_emitter_off",
|
||||||
on_receive_fields = forcefield_receive_fields,
|
on_receive_fields = forcefield_receive_fields,
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local range = meta:get_int("range")
|
|
||||||
meta:set_string("formspec", get_forcefield_formspec(range))
|
|
||||||
end,
|
|
||||||
on_destruct = function(pos)
|
on_destruct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
update_forcefield(pos, meta:get_int("range"), false)
|
update_forcefield(pos, meta, false)
|
||||||
|
end,
|
||||||
|
mesecons = mesecons,
|
||||||
|
digiline = digiline_def,
|
||||||
|
technic_run = run,
|
||||||
|
technic_on_disable = function (pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
update_forcefield(pos, meta, false)
|
||||||
|
technic.swap_node(pos, "technic:forcefield_emitter_off")
|
||||||
|
end,
|
||||||
|
on_blast = function(pos, intensity)
|
||||||
|
minetest.dig_node(pos)
|
||||||
|
return {"technic:forcefield_emitter_off"}
|
||||||
end,
|
end,
|
||||||
mesecons = mesecons
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("technic:forcefield", {
|
minetest.register_node("technic:forcefield", {
|
||||||
description = S("Forcefield"),
|
description = S("%s Forcefield"):format("HV"),
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
drawtype = "glasslike",
|
drawtype = "glasslike",
|
||||||
groups = {not_in_creative_inventory=1, unbreakable=1},
|
groups = {not_in_creative_inventory=1},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
light_source = 15,
|
light_source = default.LIGHT_MAX,
|
||||||
|
diggable = false,
|
||||||
drop = '',
|
drop = '',
|
||||||
tiles = {{
|
tiles = {{
|
||||||
name = "technic_forcefield_animated.png",
|
name = "technic_forcefield_animated.png",
|
||||||
|
@ -156,53 +363,14 @@ minetest.register_node("technic:forcefield", {
|
||||||
length = 1.0,
|
length = 1.0,
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
|
on_blast = function(pos, intensity)
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:forcefield_emitter_on", "technic:forcefield_emitter_off"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local eu_input = meta:get_int("HV_EU_input")
|
|
||||||
local eu_demand = meta:get_int("HV_EU_demand")
|
|
||||||
local enabled = meta:get_int("enabled")
|
|
||||||
local machine_name = S("Forcefield Emitter")
|
|
||||||
-- Power off automatically if no longer connected to a switching station
|
|
||||||
technic.switching_station_timeout_count(pos, "HV")
|
|
||||||
|
|
||||||
local power_requirement = math.floor(
|
|
||||||
4 * math.pi * math.pow(meta:get_int("range"), 2)
|
|
||||||
) * forcefield_power_drain
|
|
||||||
|
|
||||||
if meta:get_int("enabled") == 0 then
|
|
||||||
if node.name == "technic:forcefield_emitter_on" then
|
|
||||||
meta:set_int("HV_EU_demand", 0)
|
|
||||||
update_forcefield(pos, meta:get_int("range"), false)
|
|
||||||
hacky_swap_node(pos, "technic:forcefield_emitter_off")
|
|
||||||
meta:set_string("infotext", S("%s Disabled"):format(machine_name))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
elseif eu_input < power_requirement then
|
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
|
||||||
if node.name == "technic:forcefield_emitter_on" then
|
|
||||||
update_forcefield(pos, meta:get_int("range"), false)
|
|
||||||
hacky_swap_node(pos, "technic:forcefield_emitter_off")
|
|
||||||
end
|
|
||||||
elseif eu_input >= power_requirement then
|
|
||||||
if node.name == "technic:forcefield_emitter_off" then
|
|
||||||
hacky_swap_node(pos, "technic:forcefield_emitter_on")
|
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
|
||||||
end
|
|
||||||
update_forcefield(pos, meta:get_int("range"), true)
|
|
||||||
end
|
|
||||||
meta:set_int("HV_EU_demand", power_requirement)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
if minetest.get_modpath("mesecons_mvps") then
|
if minetest.get_modpath("mesecons_mvps") then
|
||||||
mesecon:register_mvps_stopper("technic:forcefield")
|
mesecon.register_mvps_stopper("technic:forcefield")
|
||||||
end
|
end
|
||||||
-- TODO: Register a stopper for frames
|
|
||||||
|
|
||||||
technic.register_machine("HV", "technic:forcefield_emitter_on", technic.receiver)
|
technic.register_machine("HV", "technic:forcefield_emitter_on", technic.receiver)
|
||||||
technic.register_machine("HV", "technic:forcefield_emitter_off", technic.receiver)
|
technic.register_machine("HV", "technic:forcefield_emitter_off", technic.receiver)
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
|
|
||||||
minetest.register_alias("hv_generator", "technic:hv_generator")
|
minetest.register_alias("hv_generator", "technic:hv_generator")
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:hv_generator',
|
output = 'technic:hv_generator',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:mv_generator', 'technic:stainless_steel_ingot'},
|
{'technic:carbon_plate', 'technic:mv_generator', 'technic:composite_plate'},
|
||||||
{'pipeworks:tube_000000', 'technic:hv_transformer', 'pipeworks:tube_000000'},
|
{'pipeworks:tube_1', 'technic:hv_transformer', 'pipeworks:tube_1'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_generator({tier="HV", supply=1200})
|
technic.register_generator({tier="HV", tube=1, supply=1200})
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,16 @@ technic.register_tier("HV", "High Voltage")
|
||||||
|
|
||||||
local path = technic.modpath.."/machines/HV"
|
local path = technic.modpath.."/machines/HV"
|
||||||
|
|
||||||
|
-- Wiring stuff
|
||||||
dofile(path.."/cables.lua")
|
dofile(path.."/cables.lua")
|
||||||
dofile(path.."/quarry.lua")
|
|
||||||
dofile(path.."/forcefield.lua")
|
|
||||||
dofile(path.."/battery_box.lua")
|
dofile(path.."/battery_box.lua")
|
||||||
|
|
||||||
|
-- Generators
|
||||||
dofile(path.."/solar_array.lua")
|
dofile(path.."/solar_array.lua")
|
||||||
dofile(path.."/nuclear_reactor.lua")
|
dofile(path.."/nuclear_reactor.lua")
|
||||||
dofile(path.."/generator.lua")
|
dofile(path.."/generator.lua")
|
||||||
|
|
||||||
|
-- Machines
|
||||||
|
dofile(path.."/quarry.lua")
|
||||||
|
dofile(path.."/forcefield.lua")
|
||||||
|
|
||||||
|
|
|
@ -1,258 +1,482 @@
|
||||||
-- The enriched uranium rod driven EU generator.
|
--[[
|
||||||
-- A very large and advanced machine providing vast amounts of power.
|
The enriched uranium rod driven EU generator.
|
||||||
-- Very efficient but also expensive to run as it needs uranium. (10000EU 86400 ticks (24h))
|
A very large and advanced machine providing vast amounts of power.
|
||||||
-- Provides HV EUs that can be down converted as needed.
|
Very efficient but also expensive to run as it needs uranium.
|
||||||
--
|
Provides 10000 HV EUs for one week (only counted when loaded).
|
||||||
-- The nuclear reactor core needs water and a protective shield to work.
|
|
||||||
-- This is checked now and then and if the machine is tampered with... BOOM!
|
|
||||||
|
|
||||||
local burn_ticks = 7 * 24 * 60 * 60 -- (seconds).
|
The nuclear reactor core requires a casing of water and a protective
|
||||||
|
shield to work. This is checked now and then and if the casing is not
|
||||||
|
intact the reactor will melt down!
|
||||||
|
--]]
|
||||||
|
|
||||||
|
local burn_ticks = 7 * 24 * 60 * 60 -- Seconds
|
||||||
local power_supply = 100000 -- EUs
|
local power_supply = 100000 -- EUs
|
||||||
local fuel_type = "technic:uranium_fuel" -- The reactor burns this stuff
|
local fuel_type = "technic:uranium_fuel" -- The reactor burns this
|
||||||
|
local digiline_meltdown = technic.config:get_bool("enable_nuclear_reactor_digiline_selfdestruct")
|
||||||
|
local digiline_remote_path = minetest.get_modpath("digiline_remote")
|
||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
-- FIXME: recipe must make more sense like a rod recepticle, steam chamber, HV generator?
|
local reactor_desc = S("@1 Nuclear Reactor Core", S("HV"))
|
||||||
|
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||||
|
|
||||||
|
-- FIXME: Recipe should make more sense like a rod recepticle, steam chamber, HV generator?
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:hv_nuclear_reactor_core',
|
output = 'technic:hv_nuclear_reactor_core',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
{'technic:carbon_plate', 'default:obsidian_glass', 'technic:carbon_plate'},
|
||||||
{'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
|
{'technic:composite_plate', 'technic:machine_casing', 'technic:composite_plate'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
local generator_formspec =
|
local function make_reactor_formspec(meta)
|
||||||
"invsize[8,9;]"..
|
local f = "size[8,9]"..
|
||||||
"label[0,0;"..S("Nuclear Reactor Rod Compartment").."]"..
|
"label[0,0;"..S("Nuclear Reactor Rod Compartment").."]"..
|
||||||
"list[current_name;src;2,1;3,2;]"..
|
"list[current_name;src;2,1;3,2;]"..
|
||||||
"list[current_player;main;0,5;8,4;]"
|
"list[current_player;main;0,5;8,4;]"..
|
||||||
|
"listring[]"..
|
||||||
-- "Boxy sphere"
|
"button[5.5,1.5;2,1;start;Start]"..
|
||||||
local nodebox = {
|
"checkbox[5.5,2.5;autostart;automatic Start;"..meta:get_string("autostart").."]"
|
||||||
{ -0.353, -0.353, -0.353, 0.353, 0.353, 0.353 }, -- Box
|
if not digiline_remote_path then
|
||||||
{ -0.495, -0.064, -0.064, 0.495, 0.064, 0.064 }, -- Circle +-x
|
return f
|
||||||
{ -0.483, -0.128, -0.128, 0.483, 0.128, 0.128 },
|
|
||||||
{ -0.462, -0.191, -0.191, 0.462, 0.191, 0.191 },
|
|
||||||
{ -0.433, -0.249, -0.249, 0.433, 0.249, 0.249 },
|
|
||||||
{ -0.397, -0.303, -0.303, 0.397, 0.303, 0.303 },
|
|
||||||
{ -0.305, -0.396, -0.305, 0.305, 0.396, 0.305 }, -- Circle +-y
|
|
||||||
{ -0.250, -0.432, -0.250, 0.250, 0.432, 0.250 },
|
|
||||||
{ -0.191, -0.461, -0.191, 0.191, 0.461, 0.191 },
|
|
||||||
{ -0.130, -0.482, -0.130, 0.130, 0.482, 0.130 },
|
|
||||||
{ -0.066, -0.495, -0.066, 0.066, 0.495, 0.066 },
|
|
||||||
{ -0.064, -0.064, -0.495, 0.064, 0.064, 0.495 }, -- Circle +-z
|
|
||||||
{ -0.128, -0.128, -0.483, 0.128, 0.128, 0.483 },
|
|
||||||
{ -0.191, -0.191, -0.462, 0.191, 0.191, 0.462 },
|
|
||||||
{ -0.249, -0.249, -0.433, 0.249, 0.249, 0.433 },
|
|
||||||
{ -0.303, -0.303, -0.397, 0.303, 0.303, 0.397 },
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.register_node("technic:hv_nuclear_reactor_core", {
|
|
||||||
description = S("Nuclear Reactor Core"),
|
|
||||||
tiles = {"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
|
||||||
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
|
||||||
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png"},
|
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
drawtype="nodebox",
|
|
||||||
paramtype = "light",
|
|
||||||
stack_max = 1,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = nodebox
|
|
||||||
},
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Nuclear Reactor Core"))
|
|
||||||
meta:set_int("HV_EU_supply", 0)
|
|
||||||
-- Signal to the switching station that this device burns some
|
|
||||||
-- sort of fuel and needs special handling
|
|
||||||
meta:set_int("HV_EU_from_fuel", 1)
|
|
||||||
meta:set_int("burn_time", 0)
|
|
||||||
meta:set_string("formspec", generator_formspec)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("src", 6)
|
|
||||||
end,
|
|
||||||
can_dig = function(pos, player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
end,
|
local digiline_enabled = meta:get_string("enable_digiline")
|
||||||
})
|
f = f.."checkbox[0.5,2.8;enable_digiline;Enable Digiline;"..digiline_enabled.."]"
|
||||||
|
if digiline_enabled ~= "true" then
|
||||||
minetest.register_node("technic:hv_nuclear_reactor_core_active", {
|
return f
|
||||||
tiles = {"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
|
||||||
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
|
||||||
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png"},
|
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
drop="technic:hv_nuclear_reactor_core",
|
|
||||||
drawtype="nodebox",
|
|
||||||
light_source = 15,
|
|
||||||
paramtype = "light",
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = nodebox
|
|
||||||
},
|
|
||||||
can_dig = function(pos, player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
end,
|
return f..
|
||||||
})
|
"button_exit[4.6,3.69;2,1;save;Save]"..
|
||||||
|
"field[1,4;4,1;remote_channel;Digiline Remote Channel;${remote_channel}]"
|
||||||
|
end
|
||||||
|
|
||||||
local check_reactor_structure = function(pos)
|
local SS_OFF = 0
|
||||||
-- The reactor consists of a 9x9x9 cube structure
|
local SS_DANGER = 1
|
||||||
-- A cross section through the middle:
|
local SS_CLEAR = 2
|
||||||
-- CCCC CCCC
|
|
||||||
-- CBBB BBBC
|
|
||||||
-- CBSS SSBC
|
|
||||||
-- CBSWWWSBC
|
|
||||||
-- CBSW#WSBC
|
|
||||||
-- CBSW|WSBC
|
|
||||||
-- CBSS|SSBC
|
|
||||||
-- CBBB|BBBC
|
|
||||||
-- CCCC|CCCC
|
|
||||||
-- C = Concrete, B = Blast resistant concrete, S = Stainless Steel,
|
|
||||||
-- W = water node, # = reactor core, | = HV cable
|
|
||||||
-- The man-hole and the HV cable is only in the middle
|
|
||||||
-- The man-hole is optional
|
|
||||||
|
|
||||||
|
local reactor_siren = {}
|
||||||
|
local function siren_set_state(pos, state)
|
||||||
|
local hpos = minetest.hash_node_position(pos)
|
||||||
|
local siren = reactor_siren[hpos]
|
||||||
|
if not siren then
|
||||||
|
if state == SS_OFF then return end
|
||||||
|
siren = {state=SS_OFF}
|
||||||
|
reactor_siren[hpos] = siren
|
||||||
|
end
|
||||||
|
if state == SS_DANGER and siren.state ~= SS_DANGER then
|
||||||
|
if siren.handle then minetest.sound_stop(siren.handle) end
|
||||||
|
siren.handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_danger_loop",
|
||||||
|
{pos=pos, gain=1.5, loop=true, max_hear_distance=48})
|
||||||
|
siren.state = SS_DANGER
|
||||||
|
elseif state == SS_CLEAR then
|
||||||
|
if siren.handle then minetest.sound_stop(siren.handle) end
|
||||||
|
local clear_handle = minetest.sound_play("technic_hv_nuclear_reactor_siren_clear",
|
||||||
|
{pos=pos, gain=1.5, loop=false, max_hear_distance=48})
|
||||||
|
siren.handle = clear_handle
|
||||||
|
siren.state = SS_CLEAR
|
||||||
|
minetest.after(10, function()
|
||||||
|
if siren.handle ~= clear_handle then return end
|
||||||
|
minetest.sound_stop(clear_handle)
|
||||||
|
if reactor_siren[hpos] == siren then
|
||||||
|
reactor_siren[hpos] = nil
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
elseif state == SS_OFF and siren.state ~= SS_OFF then
|
||||||
|
if siren.handle then minetest.sound_stop(siren.handle) end
|
||||||
|
reactor_siren[hpos] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function siren_danger(pos, meta)
|
||||||
|
meta:set_int("siren", 1)
|
||||||
|
siren_set_state(pos, SS_DANGER)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function siren_clear(pos, meta)
|
||||||
|
if meta:get_int("siren") ~= 0 then
|
||||||
|
siren_set_state(pos, SS_CLEAR)
|
||||||
|
meta:set_int("siren", 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[
|
||||||
|
The standard reactor structure consists of a 9x9x9 cube. A cross
|
||||||
|
section through the middle:
|
||||||
|
|
||||||
|
CCCC CCCC
|
||||||
|
CBBB BBBC
|
||||||
|
CBLL LLBC
|
||||||
|
CBLWWWLBC
|
||||||
|
CBLW#WLBC
|
||||||
|
CBLW|WLBC
|
||||||
|
CBLL|LLBC
|
||||||
|
CBBB|BBBC
|
||||||
|
CCCC|CCCC
|
||||||
|
C = Concrete, B = Blast-resistant concrete, L = Lead,
|
||||||
|
W = water node, # = reactor core, | = HV cable
|
||||||
|
|
||||||
|
The man-hole is optional (but necessary for refueling).
|
||||||
|
|
||||||
|
For the reactor to operate and not melt down, it insists on the inner
|
||||||
|
7x7x7 portion (from the core out to the blast-resistant concrete)
|
||||||
|
being intact. Intactness only depends on the number of nodes of the
|
||||||
|
right type in each layer. The water layer must have water in all but
|
||||||
|
at most one node; the steel and blast-resistant concrete layers must
|
||||||
|
have the right material in all but at most two nodes. The permitted
|
||||||
|
gaps are meant for the cable and man-hole, but can actually be anywhere
|
||||||
|
and contain anything. For the reactor to be useful, a cable must
|
||||||
|
connect to the core, but it can go in any direction.
|
||||||
|
|
||||||
|
The outer concrete layer of the standard structure is not required
|
||||||
|
for the reactor to operate. It is noted here because it used to
|
||||||
|
be mandatory, and for historical reasons (that it predates the
|
||||||
|
implementation of radiation) it needs to continue being adequate
|
||||||
|
shielding of legacy reactors. If it ever ceases to be adequate
|
||||||
|
shielding for new reactors, legacy ones should be grandfathered.
|
||||||
|
|
||||||
|
For legacy reasons, if the reactor has a stainless steel layer instead
|
||||||
|
of a lead layer it will be converted to a lead layer.
|
||||||
|
--]]
|
||||||
|
local function reactor_structure_badness(pos)
|
||||||
local vm = VoxelManip()
|
local vm = VoxelManip()
|
||||||
local pos1 = vector.subtract(pos, 4)
|
local pos1 = vector.subtract(pos, 3)
|
||||||
local pos2 = vector.add(pos, 4)
|
local pos2 = vector.add(pos, 3)
|
||||||
local MinEdge, MaxEdge = vm:read_from_map(pos1, pos2)
|
local MinEdge, MaxEdge = vm:read_from_map(pos1, pos2)
|
||||||
local data = vm:get_data()
|
local data = vm:get_data()
|
||||||
local area = VoxelArea:new({MinEdge=MinEdge, MaxEdge=MaxEdge})
|
local area = VoxelArea:new({MinEdge=MinEdge, MaxEdge=MaxEdge})
|
||||||
|
|
||||||
local c_concrete = minetest.get_content_id("technic:concrete")
|
|
||||||
local c_blast_concrete = minetest.get_content_id("technic:blast_resistant_concrete")
|
local c_blast_concrete = minetest.get_content_id("technic:blast_resistant_concrete")
|
||||||
local c_stainless_steel = minetest.get_content_id("technic:stainless_steel_block")
|
local c_lead = minetest.get_content_id("technic:lead_block")
|
||||||
|
local c_steel = minetest.get_content_id("technic:stainless_steel_block")
|
||||||
local c_water_source = minetest.get_content_id("default:water_source")
|
local c_water_source = minetest.get_content_id("default:water_source")
|
||||||
local c_water_flowing = minetest.get_content_id("default:water_flowing")
|
local c_water_flowing = minetest.get_content_id("default:water_flowing")
|
||||||
|
|
||||||
local concretelayer, blastlayer, steellayer, waterlayer = 0, 0, 0, 0
|
local blast_layer, steel_layer, lead_layer, water_layer = 0, 0, 0, 0
|
||||||
|
|
||||||
for z = pos1.z, pos2.z do
|
for z = pos1.z, pos2.z do
|
||||||
for y = pos1.y, pos2.y do
|
for y = pos1.y, pos2.y do
|
||||||
for x = pos1.x, pos2.x do
|
for x = pos1.x, pos2.x do
|
||||||
-- If the position is in the outer layer
|
local cid = data[area:index(x, y, z)]
|
||||||
if x == pos1.x or x == pos2.x or
|
if x == pos1.x or x == pos2.x or
|
||||||
y == pos1.y or y == pos2.y or
|
y == pos1.y or y == pos2.y or
|
||||||
z == pos1.z or z == pos2.z then
|
z == pos1.z or z == pos2.z then
|
||||||
if data[area:index(x, y, z)] == c_concrete then
|
if cid == c_blast_concrete then
|
||||||
concretelayer = concretelayer + 1
|
blast_layer = blast_layer + 1
|
||||||
end
|
end
|
||||||
elseif x == pos1.x+1 or x == pos2.x-1 or
|
elseif x == pos1.x+1 or x == pos2.x-1 or
|
||||||
y == pos1.y+1 or y == pos2.y-1 or
|
y == pos1.y+1 or y == pos2.y-1 or
|
||||||
z == pos1.z+1 or z == pos2.z-1 then
|
z == pos1.z+1 or z == pos2.z-1 then
|
||||||
if data[area:index(x, y, z)] == c_blast_concrete then
|
if cid == c_lead then
|
||||||
blastlayer = blastlayer + 1
|
lead_layer = lead_layer + 1
|
||||||
|
elseif cid == c_steel then
|
||||||
|
steel_layer = steel_layer + 1
|
||||||
end
|
end
|
||||||
elseif x == pos1.x+2 or x == pos2.x-2 or
|
elseif x == pos1.x+2 or x == pos2.x-2 or
|
||||||
y == pos1.y+2 or y == pos2.y-2 or
|
y == pos1.y+2 or y == pos2.y-2 or
|
||||||
z == pos1.z+2 or z == pos2.z-2 then
|
z == pos1.z+2 or z == pos2.z-2 then
|
||||||
if data[area:index(x, y, z)] == c_stainless_steel then
|
|
||||||
steellayer = steellayer + 1
|
|
||||||
end
|
|
||||||
elseif x == pos1.x+3 or x == pos2.x-3 or
|
|
||||||
y == pos1.y+3 or y == pos2.y-3 or
|
|
||||||
z == pos1.z+3 or z == pos2.z-3 then
|
|
||||||
local cid = data[area:index(x, y, z)]
|
|
||||||
if cid == c_water_source or cid == c_water_flowing then
|
if cid == c_water_source or cid == c_water_flowing then
|
||||||
waterlayer = waterlayer + 1
|
water_layer = water_layer + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if waterlayer >= 25 and
|
|
||||||
steellayer >= 96 and
|
if steel_layer >= 96 then
|
||||||
blastlayer >= 216 and
|
for z = pos1.z+1, pos2.z-1 do
|
||||||
concretelayer >= 384 then
|
for y = pos1.y+1, pos2.y-1 do
|
||||||
return true
|
for x = pos1.x+1, pos2.x-1 do
|
||||||
|
local vi = area:index(x, y, z)
|
||||||
|
if x == pos1.x+1 or x == pos2.x-1 or
|
||||||
|
y == pos1.y+1 or y == pos2.y-1 or
|
||||||
|
z == pos1.z+1 or z == pos2.z-1 then
|
||||||
|
if data[vi] == c_steel then
|
||||||
|
data[vi] = c_lead
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vm:set_data(data)
|
||||||
|
vm:write_to_map()
|
||||||
|
lead_layer = steel_layer
|
||||||
|
end
|
||||||
|
|
||||||
|
if water_layer > 25 then water_layer = 25 end
|
||||||
|
if lead_layer > 96 then lead_layer = 96 end
|
||||||
|
if blast_layer > 216 then blast_layer = 216 end
|
||||||
|
return (25 - water_layer) + (96 - lead_layer) + (216 - blast_layer)
|
||||||
end
|
end
|
||||||
|
|
||||||
local explode_reactor = function(pos)
|
|
||||||
print("A reactor exploded at "..minetest.pos_to_string(pos))
|
local function melt_down_reactor(pos)
|
||||||
|
minetest.log("action", "A reactor melted down at "..minetest.pos_to_string(pos))
|
||||||
|
minetest.set_node(pos, {name = "technic:corium_source"})
|
||||||
end
|
end
|
||||||
|
|
||||||
local function damage_nearby_players(pos)
|
|
||||||
local objs = minetest.get_objects_inside_radius(pos, 4)
|
|
||||||
for _, o in pairs(objs) do
|
|
||||||
if o:is_player() then
|
|
||||||
o:set_hp(math.max(o:get_hp() - 2, 0))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_abm({
|
local function start_reactor(pos, meta)
|
||||||
nodenames = {"technic:hv_nuclear_reactor_core", "technic:hv_nuclear_reactor_core_active"},
|
if minetest.get_node(pos).name ~= "technic:hv_nuclear_reactor_core" then
|
||||||
interval = 1,
|
return false
|
||||||
chance = 1,
|
end
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local machine_name = S("Nuclear Reactor Core")
|
|
||||||
local burn_time = meta:get_int("burn_time") or 0
|
|
||||||
|
|
||||||
if burn_time >= burn_ticks or burn_time == 0 then
|
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if not inv:is_empty("src") then
|
if inv:is_empty("src") then
|
||||||
local srclist = inv:get_list("src")
|
return false
|
||||||
|
end
|
||||||
|
local src_list = inv:get_list("src")
|
||||||
local correct_fuel_count = 0
|
local correct_fuel_count = 0
|
||||||
for _, srcstack in pairs(srclist) do
|
for _, src_stack in pairs(src_list) do
|
||||||
if srcstack then
|
if src_stack and src_stack:get_name() == fuel_type then
|
||||||
if srcstack:get_name() == fuel_type then
|
|
||||||
correct_fuel_count = correct_fuel_count + 1
|
correct_fuel_count = correct_fuel_count + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- Check that the reactor is complete and has the correct fuel
|
||||||
|
if correct_fuel_count ~= 6 or reactor_structure_badness(pos) ~= 0 then
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
-- Check that the reactor is complete as well
|
|
||||||
-- as the correct number of correct fuel
|
|
||||||
if correct_fuel_count == 6 and
|
|
||||||
check_reactor_structure(pos) then
|
|
||||||
meta:set_int("burn_time", 1)
|
meta:set_int("burn_time", 1)
|
||||||
hacky_swap_node(pos, "technic:hv_nuclear_reactor_core_active")
|
technic.swap_node(pos, "technic:hv_nuclear_reactor_core_active")
|
||||||
meta:set_int("HV_EU_supply", power_supply)
|
meta:set_int("HV_EU_supply", power_supply)
|
||||||
for idx, srcstack in pairs(srclist) do
|
for idx, src_stack in pairs(src_list) do
|
||||||
srcstack:take_item()
|
src_stack:take_item()
|
||||||
inv:set_stack("src", idx, srcstack)
|
inv:set_stack("src", idx, src_stack)
|
||||||
end
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
label = "Machines: reactor melt-down check",
|
||||||
|
nodenames = {"technic:hv_nuclear_reactor_core_active"},
|
||||||
|
interval = 4,
|
||||||
|
chance = 1,
|
||||||
|
action = function (pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local badness = reactor_structure_badness(pos)
|
||||||
|
local accum_badness = meta:get_int("structure_accumulated_badness")
|
||||||
|
if badness == 0 then
|
||||||
|
if accum_badness ~= 0 then
|
||||||
|
meta:set_int("structure_accumulated_badness", math.max(accum_badness - 4, 0))
|
||||||
|
siren_clear(pos, meta)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
siren_danger(pos, meta)
|
||||||
|
accum_badness = accum_badness + badness
|
||||||
|
if accum_badness >= 25 then
|
||||||
|
melt_down_reactor(pos)
|
||||||
|
else
|
||||||
|
meta:set_int("structure_accumulated_badness", accum_badness)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local function run(pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local burn_time = meta:get_int("burn_time") or 0
|
||||||
|
if burn_time >= burn_ticks or burn_time == 0 then
|
||||||
|
if digiline_remote_path and meta:get_int("HV_EU_supply") == power_supply then
|
||||||
|
digiline_remote.send_to_node(pos, meta:get_string("remote_channel"),
|
||||||
|
"fuel used", 6, true)
|
||||||
|
end
|
||||||
|
if meta:get_string("autostart") == "true" then
|
||||||
|
if start_reactor(pos, meta) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
meta:set_int("HV_EU_supply", 0)
|
meta:set_int("HV_EU_supply", 0)
|
||||||
meta:set_int("burn_time", 0)
|
meta:set_int("burn_time", 0)
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
meta:set_string("infotext", S("%s Idle"):format(reactor_desc))
|
||||||
hacky_swap_node(pos, "technic:hv_nuclear_reactor_core")
|
technic.swap_node(pos, "technic:hv_nuclear_reactor_core")
|
||||||
|
meta:set_int("structure_accumulated_badness", 0)
|
||||||
|
siren_clear(pos, meta)
|
||||||
elseif burn_time > 0 then
|
elseif burn_time > 0 then
|
||||||
damage_nearby_players(pos)
|
|
||||||
if not check_reactor_structure(pos) then
|
|
||||||
explode_reactor(pos)
|
|
||||||
end
|
|
||||||
burn_time = burn_time + 1
|
burn_time = burn_time + 1
|
||||||
meta:set_int("burn_time", burn_time)
|
meta:set_int("burn_time", burn_time)
|
||||||
local percent = math.floor(burn_time / burn_ticks * 100)
|
local percent = math.floor(burn_time / burn_ticks * 100)
|
||||||
meta:set_string("infotext", machine_name.." ("..percent.."%)")
|
meta:set_string("infotext", reactor_desc.." ("..percent.."%)")
|
||||||
meta:set_int("HV_EU_supply", power_supply)
|
meta:set_int("HV_EU_supply", power_supply)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local nuclear_reactor_receive_fields = function(pos, formname, fields, sender)
|
||||||
|
local player_name = sender:get_player_name()
|
||||||
|
if minetest.is_protected(pos, player_name) then
|
||||||
|
minetest.chat_send_player(player_name, "You are not allowed to edit this!")
|
||||||
|
minetest.record_protection_violation(pos, player_name)
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local update_formspec = false
|
||||||
|
if fields.remote_channel then
|
||||||
|
meta:set_string("remote_channel", fields.remote_channel)
|
||||||
|
end
|
||||||
|
if fields.start then
|
||||||
|
local b = start_reactor(pos, meta)
|
||||||
|
if b then
|
||||||
|
minetest.chat_send_player(player_name, "Start successful")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(player_name, "Error")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if fields.autostart then
|
||||||
|
meta:set_string("autostart", fields.autostart)
|
||||||
|
update_formspec = true
|
||||||
|
end
|
||||||
|
if fields.enable_digiline then
|
||||||
|
meta:set_string("enable_digiline", fields.enable_digiline)
|
||||||
|
update_formspec = true
|
||||||
|
end
|
||||||
|
if update_formspec then
|
||||||
|
meta:set_string("formspec", make_reactor_formspec(meta))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local digiline_remote_def = function(pos, channel, msg)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if meta:get_string("enable_digiline") ~= "true" or
|
||||||
|
channel ~= meta:get_string("remote_channel") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- Convert string messages to tables:
|
||||||
|
local msgt = type(msg)
|
||||||
|
if msgt == "string" then
|
||||||
|
local smsg = msg:lower()
|
||||||
|
msg = {}
|
||||||
|
if smsg == "get" then
|
||||||
|
msg.command = "get"
|
||||||
|
elseif smsg:sub(1, 13) == "self_destruct" then
|
||||||
|
msg.command = "self_destruct"
|
||||||
|
msg.timer = tonumber(smsg:sub(15)) or 0
|
||||||
|
elseif smsg == "start" then
|
||||||
|
msg.command = "start"
|
||||||
|
end
|
||||||
|
elseif msgt ~= "table" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if msg.command == "get" then
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local invtable = {}
|
||||||
|
for i = 1, 6 do
|
||||||
|
local stack = inv:get_stack("src", i)
|
||||||
|
if stack:is_empty() then
|
||||||
|
invtable[i] = 0
|
||||||
|
elseif stack:get_name() == fuel_type then
|
||||||
|
invtable[i] = stack:get_count()
|
||||||
|
else
|
||||||
|
invtable[i] = -stack:get_count()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
digiline_remote.send_to_node(pos, channel, {
|
||||||
|
burn_time = meta:get_int("burn_time"),
|
||||||
|
enabled = meta:get_int("HV_EU_supply") == power_supply,
|
||||||
|
siren = meta:get_int("siren") == 1,
|
||||||
|
structure_accumulated_badness = meta:get_int("structure_accumulated_badness"),
|
||||||
|
rods = invtable
|
||||||
|
}, 6, true)
|
||||||
|
elseif digiline_meltdown and msg.command == "self_destruct" and
|
||||||
|
minetest.get_node(pos).name == "technic:hv_nuclear_reactor_core_active" then
|
||||||
|
if msg.timer ~= 0 and type(msg.timer) == "number" then
|
||||||
|
siren_danger(pos, meta)
|
||||||
|
minetest.after(msg.timer, melt_down_reactor, pos)
|
||||||
|
else
|
||||||
|
melt_down_reactor(pos)
|
||||||
|
end
|
||||||
|
elseif msg.command == "start" then
|
||||||
|
local b = start_reactor(pos, meta)
|
||||||
|
if b then
|
||||||
|
digiline_remote.send_to_node(pos, channel, "Start successful", 6, true)
|
||||||
|
else
|
||||||
|
digiline_remote.send_to_node(pos, channel, "Error", 6, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:hv_nuclear_reactor_core", {
|
||||||
|
description = reactor_desc,
|
||||||
|
tiles = {
|
||||||
|
"technic_hv_nuclear_reactor_core.png",
|
||||||
|
"technic_hv_nuclear_reactor_core.png"..cable_entry
|
||||||
|
},
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "technic_reactor.obj",
|
||||||
|
groups = {cracky = 1, technic_machine = 1, technic_hv = 1, digiline_remote_receive = 1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
stack_max = 1,
|
||||||
|
on_receive_fields = nuclear_reactor_receive_fields,
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", reactor_desc)
|
||||||
|
meta:set_string("formspec", make_reactor_formspec(meta))
|
||||||
|
if digiline_remote_path then
|
||||||
|
meta:set_string("remote_channel",
|
||||||
|
"nucelear_reactor"..minetest.pos_to_string(pos))
|
||||||
|
end
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size("src", 6)
|
||||||
|
end,
|
||||||
|
_on_digiline_remote_receive = digiline_remote_def,
|
||||||
|
can_dig = technic.machine_can_dig,
|
||||||
|
on_destruct = function(pos) siren_set_state(pos, SS_OFF) end,
|
||||||
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||||
|
technic_run = run,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("technic:hv_nuclear_reactor_core_active", {
|
||||||
|
tiles = {
|
||||||
|
"technic_hv_nuclear_reactor_core.png",
|
||||||
|
"technic_hv_nuclear_reactor_core.png"..cable_entry
|
||||||
|
},
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "technic_reactor.obj",
|
||||||
|
groups = {cracky = 1, technic_machine = 1, technic_hv = 1, radioactive = 4,
|
||||||
|
not_in_creative_inventory = 1, digiline_remote_receive = 1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
drop = "technic:hv_nuclear_reactor_core",
|
||||||
|
light_source = 14,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
on_receive_fields = nuclear_reactor_receive_fields,
|
||||||
|
_on_digiline_remote_receive = digiline_remote_def,
|
||||||
|
can_dig = technic.machine_can_dig,
|
||||||
|
after_dig_node = melt_down_reactor,
|
||||||
|
on_destruct = function(pos) siren_set_state(pos, SS_OFF) end,
|
||||||
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||||
|
technic_run = run,
|
||||||
|
technic_on_disable = function(pos, node)
|
||||||
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
timer:start(1)
|
||||||
|
end,
|
||||||
|
on_timer = function(pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
|
-- Connected back?
|
||||||
|
if meta:get_int("HV_EU_timeout") > 0 then return false end
|
||||||
|
|
||||||
|
local burn_time = meta:get_int("burn_time") or 0
|
||||||
|
|
||||||
|
if burn_time >= burn_ticks or burn_time == 0 then
|
||||||
|
meta:set_int("HV_EU_supply", 0)
|
||||||
|
meta:set_int("burn_time", 0)
|
||||||
|
technic.swap_node(pos, "technic:hv_nuclear_reactor_core")
|
||||||
|
meta:set_int("structure_accumulated_badness", 0)
|
||||||
|
siren_clear(pos, meta)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
meta:set_int("burn_time", burn_time + 1)
|
||||||
|
return true
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("HV", "technic:hv_nuclear_reactor_core", technic.producer)
|
technic.register_machine("HV", "technic:hv_nuclear_reactor_core", technic.producer)
|
||||||
|
|
|
@ -1,203 +1,274 @@
|
||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
|
local tube_entry = "^pipeworks_tube_connection_metallic.png"
|
||||||
|
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
recipe = {
|
recipe = {
|
||||||
{"default:steelblock", "pipeworks:filter", "default:steelblock"},
|
{"technic:carbon_plate", "pipeworks:filter", "technic:composite_plate"},
|
||||||
{"default:steelblock", "technic:motor", "default:steelblock"},
|
{"basic_materials:motor", "technic:machine_casing", "technic:diamond_drill_head"},
|
||||||
{"default:steelblock", "technic:diamond_drill_head", "default:steelblock"}},
|
{"technic:carbon_steel_block", "technic:hv_cable", "technic:carbon_steel_block"}},
|
||||||
output = "technic:quarry",
|
output = "technic:quarry",
|
||||||
})
|
})
|
||||||
|
|
||||||
local quarry_dig_above_nodes = 3 -- How far above the quarry we will dig nodes
|
local quarry_dig_above_nodes = 3 -- How far above the quarry we will dig nodes
|
||||||
local quarry_max_depth = 100
|
local quarry_max_depth = 100
|
||||||
|
local quarry_demand = 10000
|
||||||
|
local quarry_eject_dir = vector.new(0, 1, 0)
|
||||||
|
|
||||||
local function get_quarry_formspec(size)
|
local function set_quarry_formspec(meta)
|
||||||
return "size[3,1.5]"..
|
local radius = meta:get_int("size")
|
||||||
"field[1,0.5;2,1;size;Radius;"..size.."]"..
|
local formspec = "size[6,4.3]"..
|
||||||
"button[0,1;3,1;toggle;"..S("Enable/Disable").."]"
|
"list[context;cache;0,1;4,3;]"..
|
||||||
|
"item_image[4.8,0;1,1;technic:quarry]"..
|
||||||
|
"label[0,0.2;"..S("%s Quarry"):format("HV").."]"..
|
||||||
|
"field[4.3,3.5;2,1;size;"..S("Radius:")..";"..radius.."]"
|
||||||
|
if meta:get_int("enabled") == 0 then
|
||||||
|
formspec = formspec.."button[4,1;2,1;enable;"..S("Disabled").."]"
|
||||||
|
else
|
||||||
|
formspec = formspec.."button[4,1;2,1;disable;"..S("Enabled").."]"
|
||||||
|
end
|
||||||
|
local diameter = radius*2 + 1
|
||||||
|
local nd = meta:get_int("dug")
|
||||||
|
local rel_y = quarry_dig_above_nodes - math.floor(nd / (diameter*diameter))
|
||||||
|
formspec = formspec.."label[0,4;"..minetest.formspec_escape(
|
||||||
|
nd == 0 and S("Digging not started") or
|
||||||
|
(rel_y < -quarry_max_depth and S("Digging finished") or
|
||||||
|
(meta:get_int("purge_on") == 1 and S("Purging cache") or
|
||||||
|
S("Digging %d m "..(rel_y > 0 and "above" or "below").." machine")
|
||||||
|
:format(math.abs(rel_y))))
|
||||||
|
).."]"
|
||||||
|
formspec = formspec.."button[4,2;2,1;restart;"..S("Restart").."]"
|
||||||
|
meta:set_string("formspec", formspec)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_quarry_demand(meta)
|
||||||
|
local radius = meta:get_int("size")
|
||||||
|
local diameter = radius*2 + 1
|
||||||
|
local machine_name = S("%s Quarry"):format("HV")
|
||||||
|
if meta:get_int("enabled") == 0 or meta:get_int("purge_on") == 1 then
|
||||||
|
meta:set_string("infotext", S(meta:get_int("purge_on") == 1 and "%s purging cache" or "%s Disabled"):format(machine_name))
|
||||||
|
meta:set_int("HV_EU_demand", 0)
|
||||||
|
elseif meta:get_int("dug") == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then
|
||||||
|
meta:set_string("infotext", S("%s Finished"):format(machine_name))
|
||||||
|
meta:set_int("HV_EU_demand", 0)
|
||||||
|
else
|
||||||
|
meta:set_string("infotext", S(meta:get_int("HV_EU_input") >= quarry_demand and "%s Active" or "%s Unpowered"):format(machine_name))
|
||||||
|
meta:set_int("HV_EU_demand", quarry_demand)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function quarry_receive_fields(pos, formname, fields, sender)
|
local function quarry_receive_fields(pos, formname, fields, sender)
|
||||||
local meta = minetest.get_meta(pos)
|
local player_name = sender:get_player_name()
|
||||||
local size = tonumber(fields.size)
|
if minetest.is_protected(pos, player_name) then
|
||||||
|
minetest.chat_send_player(player_name, "You are not allowed to edit this!")
|
||||||
if fields.toggle then
|
minetest.record_protection_violation(pos, player_name)
|
||||||
if meta:get_int("enabled") == 0 then
|
|
||||||
meta:set_int("enabled", 1)
|
|
||||||
else
|
|
||||||
meta:set_int("enabled", 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Smallest size is 2. Anything less is asking for trouble.
|
|
||||||
-- Largest is 8. It is a matter of pratical node handling.
|
|
||||||
size = math.max(size, 2)
|
|
||||||
size = math.min(size, 8)
|
|
||||||
|
|
||||||
if meta:get_int("size") ~= size then
|
|
||||||
meta:set_int("size", size)
|
|
||||||
meta:set_string("formspec", get_quarry_formspec(size))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_quarry_center(pos, size)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local back_dir = minetest.facedir_to_dir(node.param2)
|
|
||||||
local relative_center = vector.multiply(back_dir, size + 1)
|
|
||||||
local center = vector.add(pos, relative_center)
|
|
||||||
return center
|
|
||||||
end
|
|
||||||
|
|
||||||
local function gen_next_digpos(center, digpos, size)
|
|
||||||
digpos.x = digpos.x + 1
|
|
||||||
if digpos.x > center.x + size then
|
|
||||||
digpos.x = center.x - size
|
|
||||||
digpos.z = digpos.z + 1
|
|
||||||
end
|
|
||||||
if digpos.z > center.z + size then
|
|
||||||
digpos.x = center.x - size
|
|
||||||
digpos.z = center.z - size
|
|
||||||
digpos.y = digpos.y - 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function find_next_digpos(data, area, center, dig_y, size)
|
|
||||||
local c_air = minetest.get_content_id("air")
|
|
||||||
|
|
||||||
for y = center.y + quarry_dig_above_nodes, dig_y - 1, -1 do
|
|
||||||
for z = center.z - size, center.z + size do
|
|
||||||
for x = center.x - size, center.x + size do
|
|
||||||
if data[area:index(x, y, z)] ~= c_air then
|
|
||||||
return vector.new(x, y, z)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function quarry_dig(pos, center, size)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local drops = {}
|
|
||||||
local dig_y = meta:get_int("dig_y")
|
|
||||||
local owner = meta:get_int("owner")
|
|
||||||
|
|
||||||
local vm = VoxelManip()
|
|
||||||
local p1 = vector.new(
|
|
||||||
center.x - size,
|
|
||||||
center.y + quarry_dig_above_nodes,
|
|
||||||
center.z - size)
|
|
||||||
local p2 = vector.new(
|
|
||||||
center.x + size,
|
|
||||||
dig_y - 1, -- One node lower in case we have finished the current layer
|
|
||||||
center.z + size)
|
|
||||||
local e1, e2 = vm:read_from_map(p1, p2)
|
|
||||||
local area = VoxelArea:new({MinEdge=e1, MaxEdge=e2})
|
|
||||||
local data = vm:get_data()
|
|
||||||
|
|
||||||
local digpos = find_next_digpos(data, area, center, dig_y, size)
|
|
||||||
|
|
||||||
if digpos then
|
|
||||||
if digpos.y < pos.y - quarry_max_depth then
|
|
||||||
meta:set_int("dig_y", digpos.y)
|
|
||||||
return drops
|
|
||||||
end
|
|
||||||
if minetest.is_protected and minetest.is_protected(digpos, owner) then
|
|
||||||
meta:set_int("enabled", 0)
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
dig_y = digpos.y
|
local meta = minetest.get_meta(pos)
|
||||||
local node = minetest.get_node(digpos)
|
if fields.size and string.find(fields.size, "^[0-9]+$") then
|
||||||
drops = minetest.get_node_drops(node.name, "")
|
local size = tonumber(fields.size)
|
||||||
minetest.dig_node(digpos)
|
if size >= 2 and size <= 8 and size ~= meta:get_int("size") then
|
||||||
if minetest.get_node(digpos).name == node.name then
|
meta:set_int("size", size)
|
||||||
-- We tried to dig something undigable like a
|
meta:set_int("dug", 0)
|
||||||
-- filled chest. Notice that we check for a node
|
|
||||||
-- change, not for air. This is so that we get drops
|
|
||||||
-- from things like concrete posts with platforms,
|
|
||||||
-- which turn into regular concrete posts when dug.
|
|
||||||
drops = {}
|
|
||||||
end
|
end
|
||||||
elseif not (dig_y < pos.y - quarry_max_depth) then
|
|
||||||
dig_y = dig_y - 16
|
|
||||||
end
|
end
|
||||||
|
if fields.enable then meta:set_int("enabled", 1) end
|
||||||
meta:set_int("dig_y", dig_y)
|
if fields.disable then meta:set_int("enabled", 0) end
|
||||||
return drops
|
if fields.restart then
|
||||||
|
meta:set_int("dug", 0)
|
||||||
|
meta:set_int("purge_on", 1)
|
||||||
|
end
|
||||||
|
set_quarry_formspec(meta)
|
||||||
|
set_quarry_demand(meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function send_items(items, pos, node)
|
local function quarry_handle_purge(pos)
|
||||||
for _, item in pairs(items) do
|
local meta = minetest.get_meta(pos)
|
||||||
local tube_item = tube_item(vector.new(pos), item)
|
local inv = meta:get_inventory()
|
||||||
tube_item:get_luaentity().start_pos = vector.new(pos)
|
local i = 0
|
||||||
tube_item:setvelocity(vector.new(0, 1, 0))
|
for _,stack in ipairs(inv:get_list("cache")) do
|
||||||
tube_item:setacceleration({x=0, y=0, z=0})
|
i = i + 1
|
||||||
|
if stack then
|
||||||
|
local item = stack:to_table()
|
||||||
|
if item then
|
||||||
|
technic.tube_inject_item(pos, pos, quarry_eject_dir, item)
|
||||||
|
stack:clear()
|
||||||
|
inv:set_stack("cache", i, stack)
|
||||||
|
break
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if inv:is_empty("cache") then
|
||||||
|
meta:set_int("purge_on", 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function quarry_run(pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
-- initialize cache for the case we load an older world
|
||||||
|
inv:set_size("cache", 12)
|
||||||
|
-- toss a coin whether we do an automatic purge. Chance 1:200
|
||||||
|
local purge_rand = math.random()
|
||||||
|
if purge_rand <= 0.005 then
|
||||||
|
meta:set_int("purge_on", 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
if meta:get_int("enabled") and meta:get_int("HV_EU_input") >= quarry_demand and meta:get_int("purge_on") == 0 then
|
||||||
|
local pdir = minetest.facedir_to_dir(node.param2)
|
||||||
|
if pdir.y ~= 0 then
|
||||||
|
-- faces up or down, not valid, otherwise depth-check would run endless and hang up the server
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local qdir = pdir.x == 1 and vector.new(0,0,-1) or
|
||||||
|
(pdir.z == -1 and vector.new(-1,0,0) or
|
||||||
|
(pdir.x == -1 and vector.new(0,0,1) or
|
||||||
|
vector.new(1,0,0)))
|
||||||
|
local radius = meta:get_int("size")
|
||||||
|
local diameter = radius*2 + 1
|
||||||
|
local startpos = vector.add(vector.add(vector.add(pos,
|
||||||
|
vector.new(0, quarry_dig_above_nodes, 0)),
|
||||||
|
pdir),
|
||||||
|
vector.multiply(qdir, -radius))
|
||||||
|
local owner = meta:get_string("owner")
|
||||||
|
local nd = meta:get_int("dug")
|
||||||
|
while nd < diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) do
|
||||||
|
local ry = math.floor(nd / (diameter*diameter))
|
||||||
|
local ndl = nd % (diameter*diameter)
|
||||||
|
if ry % 2 == 1 then
|
||||||
|
ndl = diameter*diameter - 1 - ndl
|
||||||
|
end
|
||||||
|
local rq = math.floor(ndl / diameter)
|
||||||
|
local rp = ndl % diameter
|
||||||
|
if rq % 2 == 1 then rp = diameter - 1 - rp end
|
||||||
|
local digpos = vector.add(vector.add(vector.add(startpos,
|
||||||
|
vector.new(0, -ry, 0)),
|
||||||
|
vector.multiply(pdir, rp)),
|
||||||
|
vector.multiply(qdir, rq))
|
||||||
|
local can_dig = true
|
||||||
|
if can_dig and minetest.is_protected and minetest.is_protected(digpos, owner) then
|
||||||
|
can_dig = false
|
||||||
|
end
|
||||||
|
local dignode
|
||||||
|
if can_dig then
|
||||||
|
dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos)
|
||||||
|
local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false}
|
||||||
|
-- doors mod among other thing does NOT like a nil digger...
|
||||||
|
local fakedigger = pipeworks.create_fake_player({
|
||||||
|
name = owner
|
||||||
|
})
|
||||||
|
if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, fakedigger)) then
|
||||||
|
can_dig = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if can_dig then
|
||||||
|
for ay = startpos.y, digpos.y+1, -1 do
|
||||||
|
local checkpos = {x=digpos.x, y=ay, z=digpos.z}
|
||||||
|
local checknode = technic.get_or_load_node(checkpos) or minetest.get_node(checkpos)
|
||||||
|
if checknode.name ~= "air" then
|
||||||
|
can_dig = false
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
nd = nd + 1
|
||||||
|
if can_dig then
|
||||||
|
minetest.remove_node(digpos)
|
||||||
|
local drops = minetest.get_node_drops(dignode.name, "")
|
||||||
|
for _, dropped_item in ipairs(drops) do
|
||||||
|
local left = inv:add_item("cache", dropped_item)
|
||||||
|
while not left:is_empty() do
|
||||||
|
meta:set_int("purge_on", 1)
|
||||||
|
quarry_handle_purge(pos)
|
||||||
|
left = inv:add_item("cache", left)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if nd == diameter*diameter * (quarry_dig_above_nodes+1+quarry_max_depth) then
|
||||||
|
-- if a quarry is finished, we enable purge mode
|
||||||
|
meta:set_int("purge_on", 1)
|
||||||
|
end
|
||||||
|
meta:set_int("dug", nd)
|
||||||
|
else
|
||||||
|
-- if a quarry is disabled or has no power, we enable purge mode
|
||||||
|
meta:set_int("purge_on", 1)
|
||||||
|
end
|
||||||
|
-- if something triggered a purge, we handle it
|
||||||
|
if meta:get_int("purge_on") == 1 then
|
||||||
|
quarry_handle_purge(pos)
|
||||||
|
end
|
||||||
|
set_quarry_formspec(meta)
|
||||||
|
set_quarry_demand(meta)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function send_move_error(player)
|
||||||
|
minetest.chat_send_player(player:get_player_name(),
|
||||||
|
S("Manually taking/removing from cache by hand is not possible. "..
|
||||||
|
"If you can't wait, restart or disable the quarry to start automatic purge."))
|
||||||
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("technic:quarry", {
|
minetest.register_node("technic:quarry", {
|
||||||
description = S("Quarry"),
|
description = S("%s Quarry"):format("HV"),
|
||||||
tiles = {"default_steel_block.png", "default_steel_block.png",
|
tiles = {
|
||||||
"default_steel_block.png", "default_steel_block.png",
|
"technic_carbon_steel_block.png"..tube_entry,
|
||||||
"default_steel_block.png^default_tool_mesepick.png", "default_steel_block.png"},
|
"technic_carbon_steel_block.png"..cable_entry,
|
||||||
|
"technic_carbon_steel_block.png"..cable_entry,
|
||||||
|
"technic_carbon_steel_block.png"..cable_entry,
|
||||||
|
"technic_carbon_steel_block.png^default_tool_mesepick.png",
|
||||||
|
"technic_carbon_steel_block.png"..cable_entry
|
||||||
|
},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=2, tubedevice=1},
|
groups = {cracky=2, tubedevice=1, technic_machine=1, technic_hv=1},
|
||||||
|
connect_sides = {"bottom", "front", "left", "right"},
|
||||||
tube = {
|
tube = {
|
||||||
connect_sides = {top = 1},
|
connect_sides = {top = 1},
|
||||||
|
-- lower priority than other tubes, so that quarries will prefer any
|
||||||
|
-- other tube to another quarry, which could lead to server freezes
|
||||||
|
-- in certain quarry placements (2x2 for example would never eject)
|
||||||
|
priority = 10,
|
||||||
|
can_go = function(pos, node, velocity, stack)
|
||||||
|
-- always eject the same, even if items came in another way
|
||||||
|
-- this further mitigates loops and generally avoids random sideway movement
|
||||||
|
-- that can be expected in certain quarry placements
|
||||||
|
return { quarry_eject_dir }
|
||||||
|
end
|
||||||
},
|
},
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local size = 4
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("infotext", S("Quarry"))
|
meta:set_string("infotext", S("%s Quarry"):format("HV"))
|
||||||
meta:set_string("formspec", get_quarry_formspec(4))
|
meta:set_int("size", 4)
|
||||||
meta:set_int("size", size)
|
set_quarry_formspec(meta)
|
||||||
meta:set_int("dig_y", pos.y)
|
set_quarry_demand(meta)
|
||||||
end,
|
end,
|
||||||
after_place_node = function(pos, placer, itemstack)
|
after_place_node = function(pos, placer, itemstack)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("owner", placer:get_player_name())
|
meta:set_string("owner", placer:get_player_name())
|
||||||
tube_scanforobjects(pos)
|
pipeworks.scan_for_tube_objects(pos)
|
||||||
end,
|
end,
|
||||||
after_dig_node = tube_scanforobjects,
|
can_dig = function(pos,player)
|
||||||
|
local meta = minetest.get_meta(pos);
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
return inv:is_empty("cache")
|
||||||
|
end,
|
||||||
|
after_dig_node = pipeworks.scan_for_tube_objects,
|
||||||
on_receive_fields = quarry_receive_fields,
|
on_receive_fields = quarry_receive_fields,
|
||||||
})
|
technic_run = quarry_run,
|
||||||
|
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
minetest.register_abm({
|
return send_move_error(player)
|
||||||
nodenames = {"technic:quarry"},
|
end,
|
||||||
interval = 1,
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
chance = 1,
|
return send_move_error(player)
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
end,
|
||||||
local meta = minetest.get_meta(pos)
|
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
local size = meta:get_int("size")
|
return send_move_error(player)
|
||||||
local eu_input = meta:get_int("HV_EU_input")
|
|
||||||
local demand = 10000
|
|
||||||
local center = get_quarry_center(pos, size)
|
|
||||||
local dig_y = meta:get_int("dig_y")
|
|
||||||
local machine_name = S("Quarry")
|
|
||||||
|
|
||||||
technic.switching_station_timeout_count(pos, "HV")
|
|
||||||
|
|
||||||
if meta:get_int("enabled") == 0 then
|
|
||||||
meta:set_string("infotext", S("%s Disabled"):format(machine_name))
|
|
||||||
meta:set_int("HV_EU_demand", 0)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if eu_input < demand then
|
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
|
||||||
elseif eu_input >= demand then
|
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
|
||||||
|
|
||||||
local items = quarry_dig(pos, center, size)
|
|
||||||
send_items(items, pos, node)
|
|
||||||
|
|
||||||
if dig_y < pos.y - quarry_max_depth then
|
|
||||||
meta:set_string("infotext", S("%s Finished"):format(machine_name))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
meta:set_int("HV_EU_demand", demand)
|
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("HV", "technic:quarry", technic.receiver)
|
technic.register_machine("HV", "technic:quarry", technic.receiver)
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@ minetest.register_craft({
|
||||||
output = 'technic:solar_array_hv 1',
|
output = 'technic:solar_array_hv 1',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:solar_array_mv', 'technic:solar_array_mv', 'technic:solar_array_mv'},
|
{'technic:solar_array_mv', 'technic:solar_array_mv', 'technic:solar_array_mv'},
|
||||||
{'default:steel_ingot', 'technic:hv_transformer', 'default:steel_ingot'},
|
{'technic:carbon_plate', 'technic:hv_transformer', 'technic:composite_plate'},
|
||||||
{'', 'technic:hv_cable0', ''},
|
{'', 'technic:hv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,10 @@ minetest.register_craft({
|
||||||
output = 'technic:lv_alloy_furnace',
|
output = 'technic:lv_alloy_furnace',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:brick', 'default:brick', 'default:brick'},
|
{'default:brick', 'default:brick', 'default:brick'},
|
||||||
{'default:brick', '', 'default:brick'},
|
{'default:brick', 'technic:machine_casing', 'default:brick'},
|
||||||
{'default:steel_ingot', 'default:copper_ingot', 'default:steel_ingot'},
|
{'default:brick', 'technic:lv_cable', 'default:brick'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_alloy_furnace({tier="LV", cook_time=6, demand={300}})
|
technic.register_alloy_furnace({tier = "LV", speed = 1, demand = {300}})
|
||||||
|
|
||||||
|
|
|
@ -1,43 +1,17 @@
|
||||||
-- LV Battery box and some other nodes...
|
-- LV Battery box
|
||||||
|
|
||||||
technic.register_power_tool("technic:battery", 10000)
|
|
||||||
technic.register_power_tool("technic:red_energy_crystal", 100000)
|
|
||||||
technic.register_power_tool("technic:green_energy_crystal", 250000)
|
|
||||||
technic.register_power_tool("technic:blue_energy_crystal", 500000)
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'technic:battery',
|
|
||||||
recipe = {
|
|
||||||
{'group:wood', 'default:copper_ingot', 'group:wood'},
|
|
||||||
{'group:wood', 'moreores:tin_ingot', 'group:wood'},
|
|
||||||
{'group:wood', 'default:copper_ingot', 'group:wood'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_tool("technic:battery", {
|
|
||||||
description = "RE Battery",
|
|
||||||
inventory_image = "technic_battery.png",
|
|
||||||
tool_capabilities = {
|
|
||||||
charge = 0,
|
|
||||||
max_drop_level = 0,
|
|
||||||
groupcaps = {
|
|
||||||
fleshy = {times={}, uses=10000, maxlevel=0}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:lv_battery_box0',
|
output = 'technic:lv_battery_box0',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:battery', 'group:wood', 'technic:battery'},
|
{'group:wood', 'group:wood', 'group:wood'},
|
||||||
{'technic:battery', 'default:copper_ingot', 'technic:battery'},
|
{'technic:battery', 'technic:machine_casing', 'technic:battery'},
|
||||||
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
|
{'technic:battery', 'technic:lv_cable', 'technic:battery'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_battery_box({
|
technic.register_battery_box({
|
||||||
tier = "LV",
|
tier = "LV",
|
||||||
max_charge = 50000,
|
max_charge = 40000,
|
||||||
charge_rate = 1000,
|
charge_rate = 1000,
|
||||||
discharge_rate = 4000,
|
discharge_rate = 4000,
|
||||||
charge_step = 500,
|
charge_step = 500,
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
|
|
||||||
minetest.register_alias("lv_cable", "technic:lv_cable0")
|
minetest.register_alias("lv_cable", "technic:lv_cable")
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:lv_cable0 6',
|
output = 'technic:lv_cable 6',
|
||||||
recipe = {
|
recipe = {
|
||||||
|
{'default:paper', 'default:paper', 'default:paper'},
|
||||||
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
|
{'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'},
|
||||||
|
{'default:paper', 'default:paper', 'default:paper'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,255 +0,0 @@
|
||||||
-- Technic CNC v1.0 by kpoppel
|
|
||||||
-- Based on the NonCubic Blocks MOD v1.4 by yves_de_beck
|
|
||||||
|
|
||||||
-- Idea:
|
|
||||||
-- Somehow have a tabbed/paged panel if the number of shapes should expand
|
|
||||||
-- beyond what is available in the panel today.
|
|
||||||
-- I could imagine some form of API allowing modders to come with their own node
|
|
||||||
-- box definitions and easily stuff it in the this machine for production.
|
|
||||||
|
|
||||||
local S = technic.getter
|
|
||||||
|
|
||||||
local shape = {}
|
|
||||||
local onesize_products = {
|
|
||||||
slope = 2,
|
|
||||||
slope_edge = 1,
|
|
||||||
slope_inner_edge = 1,
|
|
||||||
pyramid = 2,
|
|
||||||
spike = 1,
|
|
||||||
cylinder = 2,
|
|
||||||
sphere = 1,
|
|
||||||
stick = 8,
|
|
||||||
slope_upsdown = 2,
|
|
||||||
slope_edge_upsdown = 1,
|
|
||||||
slope_inner_edge_upsdown = 1,
|
|
||||||
cylinder_horizontal = 2,
|
|
||||||
slope_lying = 2,
|
|
||||||
onecurvededge = 1,
|
|
||||||
twocurvededge = 1,
|
|
||||||
}
|
|
||||||
local twosize_products = {
|
|
||||||
element_straight = 4,
|
|
||||||
element_end = 2,
|
|
||||||
element_cross = 1,
|
|
||||||
element_t = 1,
|
|
||||||
element_edge = 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
local cnc_formspec =
|
|
||||||
"invsize[9,11;]"..
|
|
||||||
"label[1,0;Choose Milling Program:]"..
|
|
||||||
"image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]"..
|
|
||||||
"image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]"..
|
|
||||||
"image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]"..
|
|
||||||
"image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]"..
|
|
||||||
"image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]"..
|
|
||||||
"image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]"..
|
|
||||||
"image_button[7,0.5;1,1;technic_cnc_sphere.png;sphere; ]"..
|
|
||||||
"image_button[8,0.5;1,1;technic_cnc_stick.png;stick; ]"..
|
|
||||||
|
|
||||||
"image_button[1,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]"..
|
|
||||||
"image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]"..
|
|
||||||
"image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]"..
|
|
||||||
"image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]"..
|
|
||||||
|
|
||||||
"image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]"..
|
|
||||||
"image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]"..
|
|
||||||
"image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]"..
|
|
||||||
|
|
||||||
"label[1,3.5;Slim Elements half / normal height:]"..
|
|
||||||
|
|
||||||
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]"..
|
|
||||||
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]"..
|
|
||||||
"image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]"..
|
|
||||||
"image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]"..
|
|
||||||
"image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]"..
|
|
||||||
"image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]"..
|
|
||||||
"image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
|
|
||||||
|
|
||||||
"label[0, 5.5;In:]"..
|
|
||||||
"list[current_name;src;0.5,5.5;1,1;]"..
|
|
||||||
"label[4, 5.5;Out:]"..
|
|
||||||
"list[current_name;dst;5,5.5;4,1;]"..
|
|
||||||
|
|
||||||
"list[current_player;main;0,7;8,4;]"
|
|
||||||
|
|
||||||
local size = 1;
|
|
||||||
|
|
||||||
-- The form handler is declared here because we need it in both the inactive and active modes
|
|
||||||
-- in order to be able to change programs wile it is running.
|
|
||||||
local function form_handler(pos, formname, fields, sender)
|
|
||||||
-- REGISTER MILLING PROGRAMS AND OUTPUTS:
|
|
||||||
------------------------------------------
|
|
||||||
-- Program for half/full size
|
|
||||||
if fields["full"] then
|
|
||||||
size = 1
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if fields["half"] then
|
|
||||||
size = 2
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Resolve the node name and the number of items to make
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local inputstack = inv:get_stack("src", 1)
|
|
||||||
local inputname = inputstack:get_name()
|
|
||||||
local multiplier = 0
|
|
||||||
for k, _ in pairs(fields) do
|
|
||||||
-- Set a multipier for the half/full size capable blocks
|
|
||||||
if twosize_products[k] ~= nil then
|
|
||||||
multiplier = size * twosize_products[k]
|
|
||||||
else
|
|
||||||
multiplier = onesize_products[k]
|
|
||||||
end
|
|
||||||
|
|
||||||
if onesize_products[k] ~= nil or twosize_products[k] ~= nil then
|
|
||||||
meta:set_float( "cnc_multiplier", multiplier)
|
|
||||||
meta:set_string("cnc_user", sender:get_player_name())
|
|
||||||
end
|
|
||||||
|
|
||||||
if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then
|
|
||||||
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k)
|
|
||||||
--print(inputname .. "_technic_cnc_" .. k)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
|
|
||||||
if twosize_products[k] ~= nil and size==1 then
|
|
||||||
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k .. "_double")
|
|
||||||
--print(inputname .. "_technic_cnc_" .. k .. "_double")
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- The actual block inactive state
|
|
||||||
minetest.register_node("technic:cnc", {
|
|
||||||
description = S("CNC Machine"),
|
|
||||||
tiles = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
|
|
||||||
"technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front.png"},
|
|
||||||
drawtype = "nodebox",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
groups = {cracky=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("CNC Machine"))
|
|
||||||
meta:set_float("technic_power_machine", 1)
|
|
||||||
meta:set_string("formspec", cnc_formspec)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("src", 1)
|
|
||||||
inv:set_size("dst", 4)
|
|
||||||
end,
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
on_receive_fields = form_handler,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Active state block
|
|
||||||
minetest.register_node("technic:cnc_active", {
|
|
||||||
description = S("CNC Machine"),
|
|
||||||
tiles = {"technic_cnc_top_active.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
|
|
||||||
"technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front_active.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
on_receive_fields = form_handler,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Action code performing the transformation
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:cnc","technic:cnc_active"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local eu_input = meta:get_int("LV_EU_input")
|
|
||||||
local machine_name = S("CNC Machine")
|
|
||||||
local machine_node = "technic:cnc"
|
|
||||||
local demand = 450
|
|
||||||
|
|
||||||
-- Setup meta data if it does not exist. state is used as an indicator of this
|
|
||||||
if not eu_input then
|
|
||||||
meta:set_int("LV_EU_demand", demand)
|
|
||||||
meta:set_int("LV_EU_input", 0)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Power off automatically if no longer connected to a switching station
|
|
||||||
technic.switching_station_timeout_count(pos, "LV")
|
|
||||||
|
|
||||||
|
|
||||||
local result = meta:get_string("cnc_product")
|
|
||||||
if inv:is_empty("src") or
|
|
||||||
(not minetest.registered_nodes[result]) or
|
|
||||||
(not inv:room_for_item("dst", result)) then
|
|
||||||
hacky_swap_node(pos, machine_node)
|
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
|
||||||
meta:set_string("cnc_product", "")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if eu_input < demand then
|
|
||||||
hacky_swap_node(pos, machine_node)
|
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
|
||||||
elseif eu_input >= demand then
|
|
||||||
hacky_swap_node(pos, machine_node.."_active")
|
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
|
||||||
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
|
||||||
if meta:get_int("src_time") >= 3 then -- 3 ticks per output
|
|
||||||
meta:set_int("src_time", 0)
|
|
||||||
srcstack = inv:get_stack("src", 1)
|
|
||||||
srcstack:take_item()
|
|
||||||
inv:set_stack("src", 1, srcstack)
|
|
||||||
inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
meta:set_int("LV_EU_demand", demand)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:cnc", technic.receiver)
|
|
||||||
technic.register_machine("LV", "technic:cnc_active", technic.receiver)
|
|
||||||
|
|
||||||
-------------------------
|
|
||||||
-- CNC Machine Recipe
|
|
||||||
-------------------------
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'technic:cnc',
|
|
||||||
recipe = {
|
|
||||||
{'default:glass', 'technic:diamond_drill_head', 'default:glass'},
|
|
||||||
{'technic:control_logic_unit', 'technic:motor', 'default:steel_ingot'},
|
|
||||||
{'default:steel_ingot', 'default:copper_ingot', 'default:steel_ingot'},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
|
@ -1,356 +0,0 @@
|
||||||
-- API for the technic CNC machine
|
|
||||||
-- Again code is adapted from the NonCubic Blocks MOD v1.4 by yves_de_beck
|
|
||||||
|
|
||||||
local S = technic.getter
|
|
||||||
|
|
||||||
technic.cnc = {}
|
|
||||||
|
|
||||||
technic.cnc.detail_level = 16
|
|
||||||
|
|
||||||
-- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES:
|
|
||||||
------------------------------------------------------
|
|
||||||
local function cnc_sphere()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
local sehne
|
|
||||||
for i = 1, detail - 1 do
|
|
||||||
sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2))
|
|
||||||
nodebox[i]={-sehne, (i/detail) - 0.5, -sehne, sehne, (i/detail)+(1/detail)-0.5, sehne}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_cylinder_horizontal()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
local sehne
|
|
||||||
for i = 1, detail - 1 do
|
|
||||||
sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2))
|
|
||||||
nodebox[i]={-0.5, (i/detail)-0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, sehne}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_cylinder()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
local sehne
|
|
||||||
for i = 1, detail - 1 do
|
|
||||||
sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2))
|
|
||||||
nodebox[i]={(i/detail) - 0.5, -0.5, -sehne, (i/detail)+(1/detail)-0.5, 0.5, sehne}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_twocurvededge()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level * 2
|
|
||||||
local sehne
|
|
||||||
for i = (detail / 2) - 1, detail - 1 do
|
|
||||||
sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2))
|
|
||||||
nodebox[i]={-sehne, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_onecurvededge()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level * 2
|
|
||||||
local sehne
|
|
||||||
for i = (detail / 2) - 1, detail - 1 do
|
|
||||||
sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2))
|
|
||||||
nodebox[i]={-0.5, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_spike()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail - 1 do
|
|
||||||
nodebox[i+1] = {(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5,
|
|
||||||
0.5-(i/detail/2), (i/detail)-0.5+(1/detail), 0.5-(i/detail/2)}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_pyramid()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level / 2
|
|
||||||
for i = 0, detail - 1 do
|
|
||||||
nodebox[i+1] = {(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail/2)-0.5+(1/detail), 0.5-(i/detail/2)}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope_inner_edge_upsdown()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {0.5-(i/detail)-(1/detail), (i/detail)-0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
nodebox[i+detail+1] = {-0.5, (i/detail)-0.5, 0.5-(i/detail)-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope_edge_upsdown()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {(-1*(i/detail))+0.5-(1/detail), (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope_inner_edge()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {(i/detail)-0.5, -0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
nodebox[i+detail+1] = {-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope_edge()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {(i/detail)-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope_upsdown()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {-0.5, (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope_lying()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {(i/detail)-0.5, -0.5, (i/detail)-0.5, (i/detail)-0.5+(1/detail), 0.5 , 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cnc_slope()
|
|
||||||
local nodebox = {}
|
|
||||||
local detail = technic.cnc.detail_level
|
|
||||||
for i = 0, detail-1 do
|
|
||||||
nodebox[i+1] = {-0.5, (i/detail)-0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
|
|
||||||
end
|
|
||||||
return nodebox
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Define slope boxes for the various nodes
|
|
||||||
-------------------------------------------
|
|
||||||
technic.cnc.programs = {
|
|
||||||
{suffix = "technic_cnc_stick",
|
|
||||||
nodebox = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
|
|
||||||
desc = S("Stick")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_end_double",
|
|
||||||
nodebox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
|
|
||||||
desc = S("Element End Double")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_cross_double",
|
|
||||||
nodebox = {
|
|
||||||
{0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
|
|
||||||
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
|
|
||||||
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
|
|
||||||
desc = S("Element Cross Double")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_t_double",
|
|
||||||
nodebox = {
|
|
||||||
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
|
|
||||||
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
|
|
||||||
{0.3, -0.5, -0.3, 0.5, 0.5, 0.3}},
|
|
||||||
desc = S("Element T Double")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_edge_double",
|
|
||||||
nodebox = {
|
|
||||||
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
|
|
||||||
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
|
|
||||||
desc = S("Element Edge Double")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_straight_double",
|
|
||||||
nodebox = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
|
|
||||||
desc = S("Element Straight Double")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_end",
|
|
||||||
nodebox = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
|
|
||||||
desc = S("Element End")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_cross",
|
|
||||||
nodebox = {
|
|
||||||
{0.3, -0.5, -0.3, 0.5, 0, 0.3},
|
|
||||||
{-0.3, -0.5, -0.5, 0.3, 0, 0.5},
|
|
||||||
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
|
|
||||||
desc = S("Element Cross")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_t",
|
|
||||||
nodebox = {
|
|
||||||
{-0.3, -0.5, -0.5, 0.3, 0, 0.3},
|
|
||||||
{-0.5, -0.5, -0.3, -0.3, 0, 0.3},
|
|
||||||
{0.3, -0.5, -0.3, 0.5, 0, 0.3}},
|
|
||||||
desc = S("Element T")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_edge",
|
|
||||||
nodebox = {
|
|
||||||
{-0.3, -0.5, -0.5, 0.3, 0, 0.3},
|
|
||||||
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
|
|
||||||
desc = S("Element Edge")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_element_straight",
|
|
||||||
nodebox = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
|
|
||||||
desc = S("Element Straight")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_sphere",
|
|
||||||
nodebox = cnc_sphere(),
|
|
||||||
desc = S("Sphere")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_cylinder_horizontal",
|
|
||||||
nodebox = cnc_cylinder_horizontal(),
|
|
||||||
desc = S("Horizontal Cylinder")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_cylinder",
|
|
||||||
nodebox = cnc_cylinder(),
|
|
||||||
desc = S("Cylinder")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_twocurvededge",
|
|
||||||
nodebox = cnc_twocurvededge(),
|
|
||||||
desc = S("Two Curved Edge Block")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_onecurvededge",
|
|
||||||
nodebox = cnc_onecurvededge(),
|
|
||||||
desc = S("One Curved Edge Block")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_spike",
|
|
||||||
nodebox = cnc_spike(),
|
|
||||||
desc = S("Spike")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_pyramid",
|
|
||||||
nodebox = cnc_pyramid(),
|
|
||||||
desc = S("Pyramid")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope_inner_edge_upsdown",
|
|
||||||
nodebox = cnc_slope_inner_edge_upsdown(),
|
|
||||||
desc = S("Slope Upside Down Inner Edge")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope_edge_upsdown",
|
|
||||||
nodebox = cnc_slope_edge_upsdown(),
|
|
||||||
desc = S("Slope Upside Down Edge")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope_inner_edge",
|
|
||||||
nodebox = cnc_slope_inner_edge(),
|
|
||||||
desc = S("Slope Inner Edge")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope_edge",
|
|
||||||
nodebox = cnc_slope_edge(),
|
|
||||||
desc = S("Slope Edge")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope_upsdown",
|
|
||||||
nodebox = cnc_slope_upsdown(),
|
|
||||||
desc = S("Slope Upside Down")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope_lying",
|
|
||||||
nodebox = cnc_slope_lying(),
|
|
||||||
desc = S("Slope Lying")},
|
|
||||||
|
|
||||||
{suffix = "technic_cnc_slope",
|
|
||||||
nodebox = cnc_slope(),
|
|
||||||
desc = S("Slope")},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Allow disabling certain programs for some node. Default is allowing all types for all nodes
|
|
||||||
technic.cnc.programs_disable = {
|
|
||||||
-- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick
|
|
||||||
-- ...
|
|
||||||
["default:dirt"] = {"technic_cnc_sphere", "technic_cnc_slope_upsdown", "technic_cnc_edge",
|
|
||||||
"technic_cnc_inner_edge", "technic_cnc_slope_edge_upsdown",
|
|
||||||
"technic_cnc_slope_inner_edge_upsdown", "technic_cnc_stick",
|
|
||||||
"technic_cnc_cylinder_horizontal"}
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Generic function for registering all the different node types
|
|
||||||
function technic.cnc.register_program(recipeitem, suffix, nodebox, groups, images, description)
|
|
||||||
minetest.register_node(":"..recipeitem.."_"..suffix, {
|
|
||||||
description = description,
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
walkable = true,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = nodebox
|
|
||||||
},
|
|
||||||
groups = groups,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- function to iterate over all the programs the CNC machine knows
|
|
||||||
function technic.cnc.register_all(recipeitem, groups, images, description)
|
|
||||||
for _, data in ipairs(technic.cnc.programs) do
|
|
||||||
-- Disable node creation for disabled node types for some material
|
|
||||||
local do_register = true
|
|
||||||
if technic.cnc.programs_disable[recipeitem] ~= nil then
|
|
||||||
for __, disable in ipairs(technic.cnc.programs_disable[recipeitem]) do
|
|
||||||
if disable == data.suffix then
|
|
||||||
do_register = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Create the node if it passes the test
|
|
||||||
if do_register then
|
|
||||||
technic.cnc.register_program(recipeitem, data.suffix, data.nodebox, groups, images, description.." "..data.desc)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- REGISTER NEW TECHNIC_CNC_API's PART 2: technic.cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
|
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
function technic.cnc.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_sphere, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
|
|
||||||
|
|
||||||
technic.cnc.register_slope(recipeitem, groups, images, desc_slope)
|
|
||||||
technic.cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying)
|
|
||||||
technic.cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown)
|
|
||||||
technic.cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge)
|
|
||||||
technic.cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge)
|
|
||||||
technic.cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge)
|
|
||||||
technic.cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge)
|
|
||||||
technic.cnc.register_pyramid(recipeitem, groups, images, desc_pyramid)
|
|
||||||
technic.cnc.register_spike(recipeitem, groups, images, desc_spike)
|
|
||||||
technic.cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
|
|
||||||
technic.cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
|
|
||||||
technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
|
|
||||||
technic.cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
|
|
||||||
technic.cnc.register_sphere(recipeitem, groups, images, desc_sphere)
|
|
||||||
technic.cnc.register_element_straight(recipeitem, groups, images, desc_element_straight)
|
|
||||||
technic.cnc.register_element_edge(recipeitem, groups, images, desc_element_edge)
|
|
||||||
technic.cnc.register_element_t(recipeitem, groups, images, desc_element_t)
|
|
||||||
technic.cnc.register_element_cross(recipeitem, groups, images, desc_element_cross)
|
|
||||||
technic.cnc.register_element_end(recipeitem, groups, images, desc_element_end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz)
|
|
||||||
------------------------------------------------------------------------------------------------------------
|
|
||||||
function technic.cnc.register_stick_etc(recipeitem, groups, images, desc_stick)
|
|
||||||
technic.cnc.register_stick(recipeitem, groups, images, desc_stick)
|
|
||||||
end
|
|
||||||
|
|
||||||
function technic.cnc.register_elements(recipeitem, groups, images, desc_element_straight_double, desc_element_edge_double, desc_element_t_double, desc_element_cross_double, desc_element_end_double)
|
|
||||||
technic.cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double)
|
|
||||||
technic.cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double)
|
|
||||||
technic.cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double)
|
|
||||||
technic.cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double)
|
|
||||||
technic.cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double)
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
-- REGISTER MATERIALS AND PROPERTIES FOR NONCUBIC ELEMENTS:
|
|
||||||
-----------------------------------------------------------
|
|
||||||
|
|
||||||
local S = technic.getter
|
|
||||||
|
|
||||||
-- DIRT
|
|
||||||
-------
|
|
||||||
technic.cnc.register_all("default:dirt",
|
|
||||||
{snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
|
|
||||||
{"default_grass.png", "default_dirt.png", "default_grass.png"},
|
|
||||||
S("Dirt"))
|
|
||||||
technic.cnc.programs_disable["default:dirt"] = {"technic_cnc_sphere", "technic_cnc_slope_upsdown",
|
|
||||||
"technic_cnc_edge", "technic_cnc_inner_edge",
|
|
||||||
"technic_cnc_slope_edge_upsdown", "technic_cnc_slope_inner_edge_upsdown",
|
|
||||||
"technic_cnc_stick", "technic_cnc_cylinder_horizontal"}
|
|
||||||
|
|
||||||
-- TREE
|
|
||||||
-------
|
|
||||||
technic.cnc.register_all("default:tree",
|
|
||||||
{snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
|
|
||||||
{"default_tree.png"},
|
|
||||||
S("Wooden"))
|
|
||||||
|
|
||||||
-- WOOD
|
|
||||||
-------
|
|
||||||
technic.cnc.register_all("default:wood",
|
|
||||||
{snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
|
|
||||||
{"default_wood.png"},
|
|
||||||
S("Wooden"))
|
|
||||||
-- STONE
|
|
||||||
--------
|
|
||||||
technic.cnc.register_all("default:stone",
|
|
||||||
{cracky=3, not_in_creative_inventory=1},
|
|
||||||
{"default_stone.png"},
|
|
||||||
S("Stone"))
|
|
||||||
-- COBBLE
|
|
||||||
---------
|
|
||||||
technic.cnc.register_all("default:cobble",
|
|
||||||
{cracky=3, not_in_creative_inventory=1},
|
|
||||||
{"default_cobble.png"},
|
|
||||||
S("Cobble"))
|
|
||||||
-- BRICK
|
|
||||||
--------
|
|
||||||
technic.cnc.register_all("default:brick",
|
|
||||||
{cracky=3, not_in_creative_inventory=1},
|
|
||||||
{"default_brick.png"},
|
|
||||||
S("Brick"))
|
|
||||||
|
|
||||||
-- SANDSTONE
|
|
||||||
------------
|
|
||||||
technic.cnc.register_all("default:sandstone",
|
|
||||||
{crumbly=2, cracky=2, not_in_creative_inventory=1},
|
|
||||||
{"default_sandstone.png"},
|
|
||||||
S("Sandstone"))
|
|
||||||
|
|
||||||
-- LEAVES
|
|
||||||
---------
|
|
||||||
technic.cnc.register_all("default:leaves",
|
|
||||||
{snappy=2, choppy=2, oddly_breakable_by_hand=3, not_in_creative_inventory=1},
|
|
||||||
{"default_leaves.png"},
|
|
||||||
S("Leaves"))
|
|
||||||
-- TREE
|
|
||||||
-------
|
|
||||||
technic.cnc.register_all("default:tree",
|
|
||||||
{snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, wood=1, not_in_creative_inventory=1},
|
|
||||||
{"default_tree.png"},
|
|
||||||
S("Tree"))
|
|
||||||
-- STEEL
|
|
||||||
--------
|
|
||||||
technic.cnc.register_all("default:steel",
|
|
||||||
{snappy=1, bendy=2, cracky=1, melty=2, level=2, not_in_creative_inventory=1},
|
|
||||||
{"default_steel_block.png"},
|
|
||||||
S("Steel"))
|
|
||||||
|
|
|
@ -1,183 +0,0 @@
|
||||||
|
|
||||||
-- Coal driven alloy furnace. This uses no EUs:
|
|
||||||
|
|
||||||
local S = technic.getter
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'technic:coal_alloy_furnace',
|
|
||||||
recipe = {
|
|
||||||
{'default:brick', 'default:brick', 'default:brick'},
|
|
||||||
{'default:brick', '', 'default:brick'},
|
|
||||||
{'default:brick', 'default:brick', 'default:brick'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:coal_alloy_furnace", {
|
|
||||||
description = S("Coal Alloy Furnace"),
|
|
||||||
tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
|
|
||||||
"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.env:get_meta(pos)
|
|
||||||
meta:set_string("formspec", coal_alloy_furnace_formspec)
|
|
||||||
meta:set_string("infotext", S("Coal Alloy Furnace"))
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("fuel", 1)
|
|
||||||
inv:set_size("src", 1)
|
|
||||||
inv:set_size("src2", 1)
|
|
||||||
inv:set_size("dst", 4)
|
|
||||||
end,
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.env:get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:coal_alloy_furnace_active", {
|
|
||||||
description = "Alloy Furnace",
|
|
||||||
tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
|
|
||||||
"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
light_source = 8,
|
|
||||||
drop = "technic:coal_alloy_furnace",
|
|
||||||
groups = {cracky=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.env:get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not (inv:is_empty("fuel") or inv:is_empty("dst") or
|
|
||||||
inv:is_empty("src") or inv:is_empty("src2")) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:coal_alloy_furnace", "technic:coal_alloy_furnace_active"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local recipe = nil
|
|
||||||
local machine_name = S("Coal Alloy Furnace")
|
|
||||||
local formspec =
|
|
||||||
"size[8,9]"..
|
|
||||||
"label[0,0;"..machine_name.."]"..
|
|
||||||
"image[2,2;1,1;default_furnace_fire_bg.png]"..
|
|
||||||
"list[current_name;fuel;2,3;1,1;]"..
|
|
||||||
"list[current_name;src;2,1;1,1;]"..
|
|
||||||
"list[current_name;src2;3,1;1,1;]"..
|
|
||||||
"list[current_name;dst;5,1;2,2;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]"
|
|
||||||
|
|
||||||
for i, name in pairs({
|
|
||||||
"fuel_totaltime",
|
|
||||||
"fuel_time",
|
|
||||||
"src_totaltime",
|
|
||||||
"src_time"}) do
|
|
||||||
if not meta:get_float(name) then
|
|
||||||
meta:set_float(name, 0.0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Get what to cook if anything
|
|
||||||
local srcstack = inv:get_stack("src", 1)
|
|
||||||
local src2stack = inv:get_stack("src2", 1)
|
|
||||||
local recipe = technic.get_alloy_recipe(srcstack, src2stack)
|
|
||||||
if srcstack:get_name() > src2stack:get_name() then
|
|
||||||
local temp = srcstack
|
|
||||||
srcstack = src2stack
|
|
||||||
src2stack = temp
|
|
||||||
end
|
|
||||||
|
|
||||||
local was_active = false
|
|
||||||
|
|
||||||
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
|
||||||
was_active = true
|
|
||||||
meta:set_int("fuel_time", meta:get_int("fuel_time") + 1)
|
|
||||||
if recipe then
|
|
||||||
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
|
||||||
if meta:get_int("src_time") == 6 then
|
|
||||||
-- check if there's room for output in "dst" list
|
|
||||||
local dst_stack = ItemStack(recipe.output)
|
|
||||||
if inv:room_for_item("dst", dst_stack) then
|
|
||||||
srcstack:take_item(recipe.input[1].count)
|
|
||||||
inv:set_stack("src", 1, srcstack)
|
|
||||||
src2stack:take_item(recipe.input[2].count)
|
|
||||||
inv:set_stack("src2", 1, src2stack)
|
|
||||||
inv:add_item("dst", dst_stack)
|
|
||||||
end
|
|
||||||
meta:set_int("src_time", 0)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
meta:set_int("src_time", 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
|
||||||
local percent = math.floor(meta:get_float("fuel_time") /
|
|
||||||
meta:get_float("fuel_totaltime") * 100)
|
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..percent.."%)")
|
|
||||||
hacky_swap_node(pos, "technic:coal_alloy_furnace_active")
|
|
||||||
meta:set_string("formspec",
|
|
||||||
"size[8,9]"..
|
|
||||||
"label[0,0;"..machine_name.."]"..
|
|
||||||
"image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
|
||||||
(100 - percent)..":default_furnace_fire_fg.png]"..
|
|
||||||
"list[current_name;fuel;2,3;1,1;]"..
|
|
||||||
"list[current_name;src;2,1;1,1;]"..
|
|
||||||
"list[current_name;src2;3,1;1,1;]"..
|
|
||||||
"list[current_name;dst;5,1;2,2;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- FIXME: Make this look more like the electrical version.
|
|
||||||
-- This code refetches the recipe to see if it can be done again after the iteration
|
|
||||||
srcstack = inv:get_stack("src", 1)
|
|
||||||
srcstack = inv:get_stack("src2", 1)
|
|
||||||
local recipe = technic.get_alloy_recipe(srcstack, src2stack)
|
|
||||||
|
|
||||||
if recipe then
|
|
||||||
if was_active then
|
|
||||||
meta:set_string("infotext", "Furnace is empty")
|
|
||||||
hacky_swap_node(pos, "technic:coal_alloy_furnace")
|
|
||||||
meta:set_string("formspec", formspec)
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Next take a hard look at the fuel situation
|
|
||||||
local fuel = nil
|
|
||||||
local fuellist = inv:get_list("fuel")
|
|
||||||
|
|
||||||
if fuellist then
|
|
||||||
fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
|
||||||
end
|
|
||||||
|
|
||||||
if fuel.time <= 0 then
|
|
||||||
meta:set_string("infotext", S("%s Out Of Fuel"):format(machine_name))
|
|
||||||
hacky_swap_node(pos, "technic:coal_alloy_furnace")
|
|
||||||
meta:set_string("formspec", formspec)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
meta:set_string("fuel_totaltime", fuel.time)
|
|
||||||
meta:set_string("fuel_time", 0)
|
|
||||||
|
|
||||||
local stack = inv:get_stack("fuel", 1)
|
|
||||||
stack:take_item()
|
|
||||||
inv:set_stack("fuel", 1, stack)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
|
@ -1,170 +1,17 @@
|
||||||
|
|
||||||
technic.compressor_recipes = {}
|
minetest.register_alias("compressor", "technic:lv_compressor")
|
||||||
|
|
||||||
local S = technic.getter
|
|
||||||
|
|
||||||
technic.register_compressor_recipe = function(src, src_count, dst, dst_count)
|
|
||||||
technic.compressor_recipes[src] = {src_count = src_count, dst_name = dst, dst_count = dst_count}
|
|
||||||
if unified_inventory then
|
|
||||||
unified_inventory.register_craft({
|
|
||||||
type = "compressing",
|
|
||||||
output = dst.." "..dst_count,
|
|
||||||
items = {src.." "..src_count},
|
|
||||||
width = 0,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
technic.get_compressor_recipe = function(item)
|
|
||||||
if technic.compressor_recipes[item.name] and
|
|
||||||
item.count >= technic.compressor_recipes[item.name].src_count then
|
|
||||||
return technic.compressor_recipes[item.name]
|
|
||||||
else
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
technic.register_compressor_recipe("default:snowblock", 1, "default:ice", 1)
|
|
||||||
technic.register_compressor_recipe("default:sand", 1, "default:sandstone", 1)
|
|
||||||
technic.register_compressor_recipe("default:desert_sand", 1, "default:desert_stone", 1)
|
|
||||||
technic.register_compressor_recipe("technic:mixed_metal_ingot", 1, "technic:composite_plate", 1)
|
|
||||||
technic.register_compressor_recipe("default:copper_ingot", 5, "technic:copper_plate", 1)
|
|
||||||
technic.register_compressor_recipe("technic:coal_dust", 4, "technic:graphite", 1)
|
|
||||||
technic.register_compressor_recipe("technic:carbon_cloth", 1, "technic:carbon_plate", 1)
|
|
||||||
technic.register_compressor_recipe("technic:enriched_uranium", 4, "technic:uranium_fuel", 1)
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_alias("compressor", "technic:compressor")
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:compressor',
|
output = 'technic:lv_compressor',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stone', 'default:stone', 'default:stone'},
|
{'default:stone', 'basic_materials:motor', 'default:stone'},
|
||||||
{'mesecons:piston', 'technic:motor', 'mesecons:piston'},
|
{'mesecons:piston', 'technic:machine_casing', 'mesecons:piston'},
|
||||||
{'default:stone', 'technic:lv_cable0', 'default:stone'},
|
{'basic_materials:silver_wire', 'technic:lv_cable', 'basic_materials:silver_wire'},
|
||||||
}
|
},
|
||||||
|
replacements = {
|
||||||
|
{"basic_materials:silver_wire", "basic_materials:empty_spool"},
|
||||||
|
{"basic_materials:silver_wire", "basic_materials:empty_spool"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
local compressor_formspec =
|
technic.register_compressor({tier = "LV", demand = {300}, speed = 1})
|
||||||
"invsize[8,9;]"..
|
|
||||||
"label[0,0;"..S("Compressor").."]"..
|
|
||||||
"list[current_name;src;3,1;1,1;]"..
|
|
||||||
"list[current_name;dst;5,1;2,2;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]"
|
|
||||||
|
|
||||||
minetest.register_node("technic:compressor", {
|
|
||||||
description = S("Compressor"),
|
|
||||||
tiles = {"technic_compressor_top.png", "technic_compressor_bottom.png",
|
|
||||||
"technic_compressor_side.png", "technic_compressor_side.png",
|
|
||||||
"technic_compressor_back.png", "technic_compressor_front.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Compressor"))
|
|
||||||
meta:set_string("formspec", compressor_formspec)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("src", 1)
|
|
||||||
inv:set_size("dst", 4)
|
|
||||||
end,
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:compressor_active", {
|
|
||||||
description = S("Compressor"),
|
|
||||||
tiles = {"technic_compressor_top.png", "technic_compressor_bottom.png",
|
|
||||||
"technic_compressor_side.png", "technic_compressor_side.png",
|
|
||||||
"technic_compressor_back.png", "technic_compressor_front_active.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:compressor","technic:compressor_active"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local eu_input = meta:get_int("LV_EU_input")
|
|
||||||
local machine_name = S("Compressor")
|
|
||||||
local machine_node = "technic:compressor"
|
|
||||||
local demand = 300
|
|
||||||
|
|
||||||
-- Setup meta data if it does not exist.
|
|
||||||
if not eu_input then
|
|
||||||
meta:set_int("LV_EU_demand", demand)
|
|
||||||
meta:set_int("LV_EU_input", 0)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Power off automatically if no longer connected to a switching station
|
|
||||||
technic.switching_station_timeout_count(pos, "LV")
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local empty = inv:is_empty("src")
|
|
||||||
local srcstack = inv:get_stack("src", 1)
|
|
||||||
local src_item, recipe, result = nil, nil, nil
|
|
||||||
|
|
||||||
if srcstack then
|
|
||||||
src_item = srcstack:to_table()
|
|
||||||
end
|
|
||||||
if src_item then
|
|
||||||
recipe = technic.get_compressor_recipe(src_item)
|
|
||||||
end
|
|
||||||
if recipe then
|
|
||||||
result = {name=recipe.dst_name, count=recipe.dst_count}
|
|
||||||
end
|
|
||||||
if empty or (not result) or
|
|
||||||
(not inv:room_for_item("dst", result)) then
|
|
||||||
hacky_swap_node(pos, machine_node)
|
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
|
||||||
meta:set_int("LV_EU_demand", 0)
|
|
||||||
meta:set_int("src_time", 0)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if eu_input < demand then
|
|
||||||
hacky_swap_node(pos, machine_node)
|
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
|
||||||
elseif eu_input >= demand then
|
|
||||||
hacky_swap_node(pos, machine_node.."_active")
|
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
|
||||||
|
|
||||||
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
|
||||||
if meta:get_int("src_time") >= 4 then
|
|
||||||
meta:set_int("src_time", 0)
|
|
||||||
srcstack:take_item(recipe.src_count)
|
|
||||||
inv:set_stack("src", 1, srcstack)
|
|
||||||
inv:add_item("dst", result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
meta:set_int("LV_EU_demand", demand)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:compressor", technic.receiver)
|
|
||||||
technic.register_machine("LV", "technic:compressor_active", technic.receiver)
|
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@ minetest.register_craft({
|
||||||
output = 'technic:electric_furnace',
|
output = 'technic:electric_furnace',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:cobble', 'default:cobble', 'default:cobble'},
|
{'default:cobble', 'default:cobble', 'default:cobble'},
|
||||||
{'default:cobble', '', 'default:cobble'},
|
{'default:cobble', 'technic:machine_casing', 'default:cobble'},
|
||||||
{'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
|
{'default:cobble', 'technic:lv_cable', 'default:cobble'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,178 +1,13 @@
|
||||||
|
|
||||||
technic.extractor_recipes ={}
|
minetest.register_alias("extractor", "technic:lv_extractor")
|
||||||
|
|
||||||
local S = technic.getter
|
|
||||||
|
|
||||||
technic.register_extractor_recipe = function(src, src_count, dst, dst_count)
|
|
||||||
technic.extractor_recipes[src] = {src_count = src_count, dst_name = dst, dst_count = dst_count}
|
|
||||||
if unified_inventory then
|
|
||||||
unified_inventory.register_craft({
|
|
||||||
type = "extracting",
|
|
||||||
output = dst.." "..dst_count,
|
|
||||||
items = {src.." "..src_count},
|
|
||||||
width = 0,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Receive an ItemStack of result by an ItemStack input
|
|
||||||
technic.get_extractor_recipe = function(item)
|
|
||||||
if technic.extractor_recipes[item.name] and
|
|
||||||
item.count >= technic.extractor_recipes[item.name].src_count then
|
|
||||||
return technic.extractor_recipes[item.name]
|
|
||||||
else
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
technic.register_extractor_recipe("technic:coal_dust", 1, "dye:black", 2)
|
|
||||||
technic.register_extractor_recipe("default:cactus", 1, "dye:green", 2)
|
|
||||||
technic.register_extractor_recipe("default:dry_shrub", 1, "dye:brown", 2)
|
|
||||||
technic.register_extractor_recipe("flowers:geranium", 1, "dye:blue", 2)
|
|
||||||
technic.register_extractor_recipe("flowers:dandelion_white", 1, "dye:white", 2)
|
|
||||||
technic.register_extractor_recipe("flowers:dandelion_yellow", 1, "dye:yellow", 2)
|
|
||||||
technic.register_extractor_recipe("flowers:tulip", 1, "dye:orange", 2)
|
|
||||||
technic.register_extractor_recipe("flowers:rose", 1, "dye:red", 2)
|
|
||||||
technic.register_extractor_recipe("flowers:viola", 1, "dye:violet", 2)
|
|
||||||
technic.register_extractor_recipe("technic:raw_latex", 1, "technic:rubber", 3)
|
|
||||||
technic.register_extractor_recipe("moretrees:rubber_tree_trunk_empty", 1, "technic:rubber", 1)
|
|
||||||
technic.register_extractor_recipe("moretrees:rubber_tree_trunk", 1, "technic:rubber", 1)
|
|
||||||
technic.register_extractor_recipe("technic:uranium", 5, "technic:enriched_uranium", 1)
|
|
||||||
|
|
||||||
minetest.register_alias("extractor", "technic:extractor")
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:extractor',
|
output = 'technic:lv_extractor',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:treetap', 'technic:motor', 'technic:treetap'},
|
{'technic:treetap', 'basic_materials:motor', 'technic:treetap'},
|
||||||
{'technic:treetap', 'technic:lv_cable0', 'technic:treetap'},
|
{'technic:treetap', 'technic:machine_casing', 'technic:treetap'},
|
||||||
{'', '', ''},
|
{'', 'technic:lv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
local extractor_formspec =
|
technic.register_extractor({tier = "LV", demand = {300}, speed = 1})
|
||||||
"invsize[8,9;]"..
|
|
||||||
"label[0,0;"..S("Extractor").."]"..
|
|
||||||
"list[current_name;src;3,1;1,1;]"..
|
|
||||||
"list[current_name;dst;5,1;2,2;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]"
|
|
||||||
|
|
||||||
minetest.register_node("technic:extractor", {
|
|
||||||
description = S("Extractor"),
|
|
||||||
tiles = {"technic_lv_grinder_top.png", "technic_lv_grinder_bottom.png", "technic_lv_grinder_side.png",
|
|
||||||
"technic_lv_grinder_side.png", "technic_lv_grinder_side.png", "technic_lv_grinder_front.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Extractor"))
|
|
||||||
meta:set_string("formspec", extractor_formspec)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("src", 1)
|
|
||||||
inv:set_size("dst", 4)
|
|
||||||
end,
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:extractor_active", {
|
|
||||||
description = S("Extractor"),
|
|
||||||
tiles = {"technic_lv_grinder_top.png", "technic_lv_grinder_bottom.png",
|
|
||||||
"technic_lv_grinder_side.png", "technic_lv_grinder_side.png",
|
|
||||||
"technic_lv_grinder_side.png", "technic_lv_grinder_front_active.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") or not inv:is_empty("dst") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:extractor", "technic:extractor_active"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
-- The machine will automatically shut down if disconnected from power in some fashion.
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local srcstack = inv:get_stack("src", 1)
|
|
||||||
local eu_input = meta:get_int("LV_EU_input")
|
|
||||||
|
|
||||||
-- Machine information
|
|
||||||
local machine_name = S("Extractor")
|
|
||||||
local machine_node = "technic:extractor"
|
|
||||||
local demand = 300
|
|
||||||
|
|
||||||
-- Setup meta data if it does not exist.
|
|
||||||
if not eu_input then
|
|
||||||
meta:set_int("LV_EU_demand", demand)
|
|
||||||
meta:set_int("LV_EU_input", 0)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Power off automatically if no longer connected to a switching station
|
|
||||||
technic.switching_station_timeout_count(pos, "LV")
|
|
||||||
|
|
||||||
if srcstack then
|
|
||||||
src_item = srcstack:to_table()
|
|
||||||
end
|
|
||||||
if src_item then
|
|
||||||
recipe = technic.get_extractor_recipe(src_item)
|
|
||||||
end
|
|
||||||
if recipe then
|
|
||||||
result = {name=recipe.dst_name, count=recipe.dst_count}
|
|
||||||
end
|
|
||||||
if inv:is_empty("src") or (not recipe) or (not result) or
|
|
||||||
(not inv:room_for_item("dst", result)) then
|
|
||||||
hacky_swap_node(pos, machine_node)
|
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
|
||||||
meta:set_int("LV_EU_demand", 0)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if eu_input < demand then
|
|
||||||
-- unpowered - go idle
|
|
||||||
hacky_swap_node(pos, machine_node)
|
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
|
||||||
elseif eu_input >= demand then
|
|
||||||
-- Powered
|
|
||||||
hacky_swap_node(pos, machine_node.."_active")
|
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
|
||||||
|
|
||||||
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
|
||||||
if meta:get_int("src_time") >= 4 then -- 4 ticks per output
|
|
||||||
meta:set_int("src_time", 0)
|
|
||||||
srcstack:take_item(recipe.src_count)
|
|
||||||
inv:set_stack("src", 1, srcstack)
|
|
||||||
inv:add_item("dst", result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
meta:set_int("LV_EU_demand", demand)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:extractor", technic.receiver)
|
|
||||||
technic.register_machine("LV", "technic:extractor_active", technic.receiver)
|
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,9 @@ minetest.register_alias("lv_generator", "technic:lv_generator")
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:lv_generator',
|
output = 'technic:lv_generator',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stone', 'default:stone', 'default:stone'},
|
{'default:stone', 'default:furnace', 'default:stone'},
|
||||||
{'default:stone', '', 'default:stone'},
|
{'default:stone', 'technic:machine_casing', 'default:stone'},
|
||||||
{'default:stone', 'default:copper_ingot', 'default:stone'},
|
{'default:stone', 'technic:lv_cable', 'default:stone'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -10,47 +10,18 @@ local S = technic.getter
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:geothermal',
|
output = 'technic:geothermal',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stone', 'default:stone', 'default:stone'},
|
{'technic:granite', 'default:diamond', 'technic:granite'},
|
||||||
{'default:copper_ingot', 'default:diamond', 'default:copper_ingot'},
|
{'basic_materials:copper_wire', 'technic:machine_casing', 'basic_materials:copper_wire'},
|
||||||
{'default:stone', 'default:copper_ingot', 'default:stone'},
|
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
|
||||||
}
|
},
|
||||||
|
replacements = {
|
||||||
|
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
|
||||||
|
{"basic_materials:copper_wire", "basic_materials:empty_spool"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("technic:geothermal", {
|
minetest.register_craftitem("technic:geothermal", {
|
||||||
description = S("Geothermal Generator"),
|
description = S("Geothermal %s Generator"):format("LV"),
|
||||||
})
|
|
||||||
|
|
||||||
local geothermal_formspec =
|
|
||||||
"invsize[8,4;]"..
|
|
||||||
"label[0,0;"..S("Geothermal Generator").."]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]"
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("technic:geothermal", {
|
|
||||||
description = S("Geothermal Generator"),
|
|
||||||
tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
|
|
||||||
"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Geothermal Generator"))
|
|
||||||
meta:set_int("LV_EU_supply", 0)
|
|
||||||
meta:set_string("formspec", geothermal_formspec)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:geothermal_active", {
|
|
||||||
description = S("Geothermal Generator"),
|
|
||||||
tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
|
|
||||||
"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
drop = "technic:geothermal",
|
|
||||||
})
|
})
|
||||||
|
|
||||||
local check_node_around = function(pos)
|
local check_node_around = function(pos)
|
||||||
|
@ -60,11 +31,7 @@ local check_node_around = function(pos)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
local run = function(pos, node)
|
||||||
nodenames = {"technic:geothermal","technic:geothermal_active"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local water_nodes = 0
|
local water_nodes = 0
|
||||||
local lava_nodes = 0
|
local lava_nodes = 0
|
||||||
|
@ -102,20 +69,47 @@ minetest.register_abm({
|
||||||
meta:set_int("LV_EU_supply", eu_supply)
|
meta:set_int("LV_EU_supply", eu_supply)
|
||||||
end
|
end
|
||||||
|
|
||||||
meta:set_string("formspec",
|
meta:set_string("infotext",
|
||||||
"invsize[8,4;]"..
|
S("Geothermal %s Generator"):format("LV").." ("..production_level.."%)")
|
||||||
"label[0,0;"..S("Geothermal Generator").."]"..
|
|
||||||
"label[4,0;"..S("Production at %d%%"):format(production_level).."]")
|
|
||||||
|
|
||||||
if production_level > 0 and minetest.get_node(pos).name == "technic:geothermal" then
|
if production_level > 0 and minetest.get_node(pos).name == "technic:geothermal" then
|
||||||
hacky_swap_node (pos, "technic:geothermal_active")
|
technic.swap_node (pos, "technic:geothermal_active")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if production_level == 0 then
|
if production_level == 0 then
|
||||||
hacky_swap_node(pos, "technic:geothermal")
|
technic.swap_node(pos, "technic:geothermal")
|
||||||
meta:set_int("LV_EU_supply", 0)
|
meta:set_int("LV_EU_supply", 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:geothermal", {
|
||||||
|
description = S("Geothermal %s Generator"):format("LV"),
|
||||||
|
tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
|
||||||
|
"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_lv=1},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", S("Geothermal %s Generator"):format("LV"))
|
||||||
|
meta:set_int("LV_EU_supply", 0)
|
||||||
|
end,
|
||||||
|
technic_run = run,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("technic:geothermal_active", {
|
||||||
|
description = S("Geothermal %s Generator"):format("LV"),
|
||||||
|
tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
|
||||||
|
"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_lv=1, not_in_creative_inventory=1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
drop = "technic:geothermal",
|
||||||
|
technic_run = run,
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:geothermal", technic.producer)
|
technic.register_machine("LV", "technic:geothermal", technic.producer)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
|
|
||||||
minetest.register_alias("grinder", "technic:grinder")
|
minetest.register_alias("grinder", "technic:lv_grinder")
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:grinder',
|
output = 'technic:lv_grinder',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:desert_stone', 'default:desert_stone', 'default:desert_stone'},
|
|
||||||
{'default:desert_stone', 'default:diamond', 'default:desert_stone'},
|
{'default:desert_stone', 'default:diamond', 'default:desert_stone'},
|
||||||
{'default:stone', 'moreores:copper_ingot', 'default:stone'},
|
{'default:desert_stone', 'technic:machine_casing', 'default:desert_stone'},
|
||||||
|
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -3,20 +3,22 @@ technic.register_tier("LV", "Low Voltage")
|
||||||
|
|
||||||
local path = technic.modpath.."/machines/LV"
|
local path = technic.modpath.."/machines/LV"
|
||||||
|
|
||||||
|
-- Wiring stuff
|
||||||
dofile(path.."/cables.lua")
|
dofile(path.."/cables.lua")
|
||||||
dofile(path.."/battery_box.lua")
|
dofile(path.."/battery_box.lua")
|
||||||
dofile(path.."/alloy_furnace.lua")
|
|
||||||
dofile(path.."/coal_alloy_furnace.lua")
|
-- Generators
|
||||||
dofile(path.."/solar_panel.lua")
|
dofile(path.."/solar_panel.lua")
|
||||||
dofile(path.."/solar_array.lua")
|
dofile(path.."/solar_array.lua")
|
||||||
dofile(path.."/geothermal.lua")
|
dofile(path.."/geothermal.lua")
|
||||||
dofile(path.."/water_mill.lua")
|
dofile(path.."/water_mill.lua")
|
||||||
dofile(path.."/generator.lua")
|
dofile(path.."/generator.lua")
|
||||||
|
|
||||||
|
-- Machines
|
||||||
|
dofile(path.."/alloy_furnace.lua")
|
||||||
dofile(path.."/electric_furnace.lua")
|
dofile(path.."/electric_furnace.lua")
|
||||||
dofile(path.."/music_player.lua")
|
|
||||||
dofile(path.."/grinder.lua")
|
dofile(path.."/grinder.lua")
|
||||||
dofile(path.."/cnc.lua")
|
|
||||||
dofile(path.."/cnc_api.lua")
|
|
||||||
dofile(path.."/cnc_nodes.lua")
|
|
||||||
dofile(path.."/extractor.lua")
|
dofile(path.."/extractor.lua")
|
||||||
dofile(path.."/compressor.lua")
|
dofile(path.."/compressor.lua")
|
||||||
|
|
||||||
|
dofile(path.."/music_player.lua")
|
||||||
|
|
|
@ -7,100 +7,29 @@ minetest.register_alias("music_player", "technic:music_player")
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:music_player',
|
output = 'technic:music_player',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood', 'group:wood', 'group:wood'},
|
{'technic:chromium_ingot', 'default:diamond', 'technic:chromium_ingot'},
|
||||||
{'default:diamond', 'default:diamond', 'default:diamond'},
|
{'default:diamond', 'technic:machine_casing', 'default:diamond'},
|
||||||
{'default:stone', 'default:copper_ingot', 'default:stone'},
|
{'default:mossycobble', 'technic:lv_cable', 'default:mossycobble'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
local music_player_formspec =
|
local music_handles = {}
|
||||||
"invsize[8,9;]"..
|
|
||||||
"label[0,0;"..S("Music Player").."]"..
|
|
||||||
"button[4,1;1,1;track1;1]"..
|
|
||||||
"button[5,1;1,1;track2;2]"..
|
|
||||||
"button[6,1;1,1;track3;3]"..
|
|
||||||
"button[4,2;1,1;track4;4]"..
|
|
||||||
"button[5,2;1,1;track5;5]"..
|
|
||||||
"button[6,2;1,1;track6;6]"..
|
|
||||||
"button[4,3;1,1;track7;7]"..
|
|
||||||
"button[5,3;1,1;track8;8]"..
|
|
||||||
"button[6,3;1,1;track9;9]"..
|
|
||||||
"button[4,4;1,2;play;Play]"..
|
|
||||||
"button[6,4;1,2;stop;Stop]"..
|
|
||||||
"label[4,0;Current track --]"
|
|
||||||
|
|
||||||
minetest.register_node("technic:music_player", {
|
local function play_track(pos, track)
|
||||||
description = S("Music Player"),
|
return minetest.sound_play("technic_track"..tostring(track),
|
||||||
tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png",
|
{pos = pos, gain = 1.0, loop = true, max_hear_distance = 72,})
|
||||||
"technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"},
|
end
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Music Player"))
|
|
||||||
meta:set_int("active", 0)
|
|
||||||
meta:set_int("current_track", 1)
|
|
||||||
meta:set_string("formspec", music_player_formspec)
|
|
||||||
end,
|
|
||||||
on_receive_fields = function(pos, formanme, fields, sender)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local music_handle = meta:get_int("music_handle")
|
|
||||||
local current_track = meta:get_int("current_track")
|
|
||||||
if fields.track1 then current_track = 1 end
|
|
||||||
if fields.track2 then current_track = 2 end
|
|
||||||
if fields.track3 then current_track = 3 end
|
|
||||||
if fields.track4 then current_track = 4 end
|
|
||||||
if fields.track5 then current_track = 5 end
|
|
||||||
if fields.track6 then current_track = 6 end
|
|
||||||
if fields.track7 then current_track = 7 end
|
|
||||||
if fields.track8 then current_track = 8 end
|
|
||||||
if fields.track9 then current_track = 9 end
|
|
||||||
meta:set_int("current_track", current_track)
|
|
||||||
meta:set_string("formspec",
|
|
||||||
"invsize[8,9;]"..
|
|
||||||
"label[0,0;"..S("Music Player").."]"..
|
|
||||||
"button[4,1;1,1;track1;1]"..
|
|
||||||
"button[5,1;1,1;track2;2]"..
|
|
||||||
"button[6,1;1,1;track3;3]"..
|
|
||||||
"button[4,2;1,1;track4;4]"..
|
|
||||||
"button[5,2;1,1;track5;5]"..
|
|
||||||
"button[6,2;1,1;track6;6]"..
|
|
||||||
"button[4,3;1,1;track7;7]"..
|
|
||||||
"button[5,3;1,1;track8;8]"..
|
|
||||||
"button[6,3;1,1;track9;9]"..
|
|
||||||
"button[4,4;1,2;play;Play]"..
|
|
||||||
"button[6,4;1,2;stop;Stop]"..
|
|
||||||
"label[4,0;Current track "
|
|
||||||
..current_track.."]")
|
|
||||||
if fields.play then
|
|
||||||
if music_handle then
|
|
||||||
minetest.sound_stop(music_handle)
|
|
||||||
end
|
|
||||||
meta:set_int("active", 1)
|
|
||||||
end
|
|
||||||
if fields.stop then
|
|
||||||
meta:set_int("active", 0)
|
|
||||||
if music_handle then
|
|
||||||
minetest.sound_stop(music_handle)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
meta:set_int("music_handle", music_handle)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
local run = function(pos, node)
|
||||||
nodenames = {"technic:music_player"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local eu_input = meta:get_int("LV_EU_input")
|
local eu_input = meta:get_int("LV_EU_input")
|
||||||
local machine_name = S("Music Player")
|
local machine_name = S("%s Music Player"):format("LV")
|
||||||
local machine_node = "technic:music_player"
|
local machine_node = "technic:music_player"
|
||||||
local demand = 150
|
local demand = 150
|
||||||
|
|
||||||
local music_handle = meta:get_int("music_handle")
|
|
||||||
local current_track = meta:get_int("current_track")
|
local current_track = meta:get_int("current_track")
|
||||||
|
local pos_hash = minetest.hash_node_position(pos)
|
||||||
|
local music_handle = music_handles[pos_hash]
|
||||||
|
|
||||||
-- Setup meta data if it does not exist.
|
-- Setup meta data if it does not exist.
|
||||||
if not eu_input then
|
if not eu_input then
|
||||||
|
@ -109,15 +38,9 @@ minetest.register_abm({
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Power off automatically if no longer connected to a switching station
|
|
||||||
technic.switching_station_timeout_count(pos, "LV")
|
|
||||||
|
|
||||||
if meta:get_int("active") == 0 then
|
if meta:get_int("active") == 0 then
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
||||||
meta:set_int("LV_EU_demand", 0)
|
meta:set_int("LV_EU_demand", 0)
|
||||||
if music_handle then
|
|
||||||
minetest.sound_stop(music_handle)
|
|
||||||
end
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -125,15 +48,84 @@ minetest.register_abm({
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
||||||
if music_handle then
|
if music_handle then
|
||||||
minetest.sound_stop(music_handle)
|
minetest.sound_stop(music_handle)
|
||||||
|
music_handle = nil
|
||||||
end
|
end
|
||||||
elseif eu_input >= demand then
|
elseif eu_input >= demand then
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
||||||
music_handle = minetest.sound_play("technic_track"..current_track,
|
if not music_handle then
|
||||||
{pos = pos, gain = 1.0, loop = true, max_hear_distance = 72,})
|
music_handle = play_track(pos, current_track)
|
||||||
meta:set_int("music_handle", music_handle)
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
music_handles[pos_hash] = music_handle
|
||||||
meta:set_int("LV_EU_demand", demand)
|
meta:set_int("LV_EU_demand", demand)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function stop_player(pos, node)
|
||||||
|
local pos_hash = minetest.hash_node_position(pos)
|
||||||
|
local music_handle = music_handles[pos_hash]
|
||||||
|
if music_handle then
|
||||||
|
minetest.sound_stop(music_handle)
|
||||||
|
music_handles[pos_hash] = nil
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_display(meta)
|
||||||
|
meta:set_string("formspec",
|
||||||
|
"size[4,4.5]"..
|
||||||
|
"item_image[0,0;1,1;technic:music_player]"..
|
||||||
|
"label[1,0;"..S("%s Music Player"):format("LV").."]"..
|
||||||
|
"button[0,1;1,1;track1;1]"..
|
||||||
|
"button[1,1;1,1;track2;2]"..
|
||||||
|
"button[2,1;1,1;track3;3]"..
|
||||||
|
"button[0,2;1,1;track4;4]"..
|
||||||
|
"button[1,2;1,1;track5;5]"..
|
||||||
|
"button[2,2;1,1;track6;6]"..
|
||||||
|
"button[0,3;1,1;track7;7]"..
|
||||||
|
"button[1,3;1,1;track8;8]"..
|
||||||
|
"button[2,3;1,1;track9;9]"..
|
||||||
|
"button[3,1;1,1;stop;Stop]"..
|
||||||
|
"label[0,4;"..minetest.formspec_escape(
|
||||||
|
meta:get_int("active") == 0 and
|
||||||
|
S("Stopped") or
|
||||||
|
S("Current track %s"):format(meta:get_int("current_track"))).."]")
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:music_player", {
|
||||||
|
description = S("%s Music Player"):format("LV"),
|
||||||
|
tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png",
|
||||||
|
"technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"},
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_lv=1},
|
||||||
|
connect_sides = {"bottom"},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", S("%s Music Player"):format("LV"))
|
||||||
|
set_display(meta)
|
||||||
|
end,
|
||||||
|
on_receive_fields = function(pos, formanme, fields, sender)
|
||||||
|
local new_track = nil
|
||||||
|
if fields.stop then new_track = 0 end
|
||||||
|
if fields.track1 then new_track = 1 end
|
||||||
|
if fields.track2 then new_track = 2 end
|
||||||
|
if fields.track3 then new_track = 3 end
|
||||||
|
if fields.track4 then new_track = 4 end
|
||||||
|
if fields.track5 then new_track = 5 end
|
||||||
|
if fields.track6 then new_track = 6 end
|
||||||
|
if fields.track7 then new_track = 7 end
|
||||||
|
if fields.track8 then new_track = 8 end
|
||||||
|
if fields.track9 then new_track = 9 end
|
||||||
|
if new_track then
|
||||||
|
stop_player(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_int("active", new_track == 0 and 0 or 1)
|
||||||
|
meta:set_int("current_track", new_track)
|
||||||
|
set_display(meta)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_destruct = stop_player,
|
||||||
|
technic_run = run,
|
||||||
|
technic_on_disable = stop_player,
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:music_player", technic.receiver)
|
technic.register_machine("LV", "technic:music_player", technic.receiver)
|
||||||
|
|
|
@ -9,8 +9,8 @@ minetest.register_craft({
|
||||||
output = 'technic:solar_array_lv 1',
|
output = 'technic:solar_array_lv 1',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:solar_panel', 'technic:solar_panel', 'technic:solar_panel'},
|
{'technic:solar_panel', 'technic:solar_panel', 'technic:solar_panel'},
|
||||||
{'default:steel_ingot', 'technic:lv_transformer', 'default:steel_ingot'},
|
{'technic:carbon_steel_ingot', 'technic:lv_transformer', 'technic:carbon_steel_ingot'},
|
||||||
{'', 'technic:lv_cable0', ''},
|
{'', 'technic:lv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -4,51 +4,26 @@
|
||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
minetest.register_node("technic:solar_panel", {
|
|
||||||
tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png",
|
|
||||||
"technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"},
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
description = S("Solar Panel"),
|
|
||||||
active = false,
|
|
||||||
drawtype = "nodebox",
|
|
||||||
paramtype = "light",
|
|
||||||
is_ground_content = true,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
|
||||||
},
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_int("LV_EU_supply", 0)
|
|
||||||
meta:set_string("infotext", S("Solar Panel"))
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:solar_panel',
|
output = 'technic:solar_panel',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'},
|
{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'},
|
||||||
{'default:steel_ingot', 'technic:lv_cable0', 'default:steel_ingot'},
|
{'basic_materials:silver_wire', 'technic:lv_cable', 'mesecons_materials:glue'},
|
||||||
|
},
|
||||||
}
|
replacements = { {"basic_materials:silver_wire", "basic_materials:empty_spool"}, },
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:solar_panel"},
|
local run = function(pos, node)
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
-- The action here is to make the solar panel prodice power
|
-- The action here is to make the solar panel prodice power
|
||||||
-- Power is dependent on the light level and the height above ground
|
-- Power is dependent on the light level and the height above ground
|
||||||
-- 130m and above is optimal as it would be above cloud level.
|
|
||||||
-- Height gives 1/4 of the effect, light 3/4. Max. effect is 26EU.
|
|
||||||
-- There are many ways to cheat by using other light sources like lamps.
|
-- There are many ways to cheat by using other light sources like lamps.
|
||||||
-- As there is no way to determine if light is sunlight that is just a shame.
|
-- As there is no way to determine if light is sunlight that is just a shame.
|
||||||
-- To take care of some of it solar panels do not work outside daylight hours or if
|
-- To take care of some of it solar panels do not work outside daylight hours or if
|
||||||
-- built below -10m
|
-- built below 0m
|
||||||
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
|
local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||||
local machine_name = S("Solar Panel")
|
local machine_name = S("Small Solar %s Generator"):format("LV")
|
||||||
|
|
||||||
local light = minetest.get_node_light(pos1, nil)
|
local light = minetest.get_node_light(pos1, nil)
|
||||||
local time_of_day = minetest.get_timeofday()
|
local time_of_day = minetest.get_timeofday()
|
||||||
|
@ -60,13 +35,37 @@ minetest.register_abm({
|
||||||
local charge_to_give = math.floor((light + pos1.y) * 3)
|
local charge_to_give = math.floor((light + pos1.y) * 3)
|
||||||
charge_to_give = math.max(charge_to_give, 0)
|
charge_to_give = math.max(charge_to_give, 0)
|
||||||
charge_to_give = math.min(charge_to_give, 200)
|
charge_to_give = math.min(charge_to_give, 200)
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..charge_to_give.."EU)")
|
meta:set_string("infotext", S("@1 Active (@2)", machine_name,
|
||||||
|
technic.EU_string(charge_to_give)))
|
||||||
meta:set_int("LV_EU_supply", charge_to_give)
|
meta:set_int("LV_EU_supply", charge_to_give)
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
||||||
meta:set_int("LV_EU_supply", 0)
|
meta:set_int("LV_EU_supply", 0)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:solar_panel", {
|
||||||
|
tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png",
|
||||||
|
"technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"},
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_lv=1},
|
||||||
|
connect_sides = {"bottom"},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
description = S("Small Solar %s Generator"):format("LV"),
|
||||||
|
active = false,
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
is_ground_content = true,
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||||
|
},
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_int("LV_EU_supply", 0)
|
||||||
|
meta:set_string("infotext", S("Small Solar %s Generator"):format("LV"))
|
||||||
end,
|
end,
|
||||||
|
technic_run = run,
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:solar_panel", technic.producer)
|
technic.register_machine("LV", "technic:solar_panel", technic.producer)
|
||||||
|
|
|
@ -1,67 +1,37 @@
|
||||||
-- A water mill produces LV EUs by exploiting flowing water across it
|
-- A water mill produces LV EUs by exploiting flowing water across it
|
||||||
-- It is a LV EU supplyer and fairly low yield (max 120EUs)
|
-- It is a LV EU supplier and fairly low yield (max 180EUs)
|
||||||
-- It is a little under half as good as the thermal generator.
|
-- It is a little over half as good as the thermal generator.
|
||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
|
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||||
|
|
||||||
minetest.register_alias("water_mill", "technic:water_mill")
|
minetest.register_alias("water_mill", "technic:water_mill")
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:water_mill',
|
output = 'technic:water_mill',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:stone', 'default:stone', 'default:stone'},
|
{'technic:marble', 'default:diamond', 'technic:marble'},
|
||||||
{'group:wood', 'default:diamond', 'group:wood'},
|
{'group:wood', 'technic:machine_casing', 'group:wood'},
|
||||||
{'default:stone', 'default:copper_ingot', 'default:stone'},
|
{'technic:marble', 'technic:lv_cable', 'technic:marble'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("technic:water_mill", {
|
|
||||||
description = S("Water Mill"),
|
|
||||||
tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png",
|
|
||||||
"technic_water_mill_side.png", "technic_water_mill_side.png",
|
|
||||||
"technic_water_mill_side.png", "technic_water_mill_side.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Water Mill"))
|
|
||||||
meta:set_int("LV_EU_supply", 0)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:water_mill_active", {
|
|
||||||
description = S("Water Mill"),
|
|
||||||
tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png",
|
|
||||||
"technic_water_mill_side.png", "technic_water_mill_side.png",
|
|
||||||
"technic_water_mill_side.png", "technic_water_mill_side.png"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
drop = "technic:water_mill",
|
|
||||||
})
|
|
||||||
|
|
||||||
local function check_node_around_mill(pos)
|
local function check_node_around_mill(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
if node.name == "default:water_flowing" or
|
if node.name == "default:water_flowing"
|
||||||
node.name == "default:water_source" then
|
or node.name == "default:river_water_flowing" then
|
||||||
return true
|
return node.param2 -- returns approx. water flow, if any
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
local run = function(pos, node)
|
||||||
nodenames = {"technic:water_mill", "technic:water_mill_active"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local water_nodes = 0
|
local water_flow = 0
|
||||||
local lava_nodes = 0
|
|
||||||
local production_level = 0
|
local production_level = 0
|
||||||
local eu_supply = 0
|
local eu_supply = 0
|
||||||
|
local max_output = 4 * 45 -- keeping it around 180, little more than previous 150 :)
|
||||||
|
|
||||||
local positions = {
|
local positions = {
|
||||||
{x=pos.x+1, y=pos.y, z=pos.z},
|
{x=pos.x+1, y=pos.y, z=pos.z},
|
||||||
|
@ -73,30 +43,65 @@ minetest.register_abm({
|
||||||
for _, p in pairs(positions) do
|
for _, p in pairs(positions) do
|
||||||
local check = check_node_around_mill(p)
|
local check = check_node_around_mill(p)
|
||||||
if check then
|
if check then
|
||||||
water_nodes = water_nodes + 1
|
water_flow = water_flow + check
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
production_level = 25 * water_nodes
|
eu_supply = math.min(4 * water_flow, max_output)
|
||||||
eu_supply = 30 * water_nodes
|
production_level = math.floor(100 * eu_supply / max_output)
|
||||||
|
|
||||||
if production_level > 0 then
|
|
||||||
meta:set_int("LV_EU_supply", eu_supply)
|
meta:set_int("LV_EU_supply", eu_supply)
|
||||||
end
|
|
||||||
|
|
||||||
meta:set_string("infotext",
|
meta:set_string("infotext",
|
||||||
S("Water Mill").." ("..production_level.."%)")
|
S("Hydro %s Generator"):format("LV").." ("..production_level.."%)")
|
||||||
|
|
||||||
if production_level > 0 and
|
if production_level > 0 and
|
||||||
minetest.get_node(pos).name == "technic:water_mill" then
|
minetest.get_node(pos).name == "technic:water_mill" then
|
||||||
hacky_swap_node (pos, "technic:water_mill_active")
|
technic.swap_node (pos, "technic:water_mill_active")
|
||||||
meta:set_int("LV_EU_supply", 0)
|
meta:set_int("LV_EU_supply", 0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if production_level == 0 then
|
if production_level == 0 then
|
||||||
hacky_swap_node(pos, "technic:water_mill")
|
technic.swap_node(pos, "technic:water_mill")
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:water_mill", {
|
||||||
|
description = S("Hydro %s Generator"):format("LV"),
|
||||||
|
tiles = {
|
||||||
|
"technic_water_mill_top.png",
|
||||||
|
"technic_machine_bottom.png"..cable_entry,
|
||||||
|
"technic_water_mill_side.png",
|
||||||
|
"technic_water_mill_side.png",
|
||||||
|
"technic_water_mill_side.png",
|
||||||
|
"technic_water_mill_side.png"
|
||||||
|
},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_lv=1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", S("Hydro %s Generator"):format("LV"))
|
||||||
|
meta:set_int("LV_EU_supply", 0)
|
||||||
|
end,
|
||||||
|
technic_run = run,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("technic:water_mill_active", {
|
||||||
|
description = S("Hydro %s Generator"):format("LV"),
|
||||||
|
tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png",
|
||||||
|
"technic_water_mill_side.png", "technic_water_mill_side.png",
|
||||||
|
"technic_water_mill_side.png", "technic_water_mill_side.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_lv=1, not_in_creative_inventory=1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
drop = "technic:water_mill",
|
||||||
|
technic_run = run,
|
||||||
|
technic_disabled_machine_name = "technic:water_mill",
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("LV", "technic:water_mill", technic.producer)
|
technic.register_machine("LV", "technic:water_mill", technic.producer)
|
||||||
|
|
|
@ -4,11 +4,11 @@ minetest.register_craft({
|
||||||
output = 'technic:mv_alloy_furnace',
|
output = 'technic:mv_alloy_furnace',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:lv_alloy_furnace', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:lv_alloy_furnace', 'technic:stainless_steel_ingot'},
|
||||||
{'pipeworks:tube_000000', 'technic:mv_transformer', 'pipeworks:tube_000000'},
|
{'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:mv_cable0', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
technic.register_alloy_furnace({tier="MV", cook_time=4, upgrade=1, tube=1, demand={3000, 2000, 1000}})
|
technic.register_alloy_furnace({tier = "MV", speed = 1.5, upgrade = 1, tube = 1, demand = {3000, 2000, 1000}})
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,18 @@ minetest.register_craft({
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:lv_battery_box0', 'technic:lv_battery_box0', 'technic:lv_battery_box0'},
|
{'technic:lv_battery_box0', 'technic:lv_battery_box0', 'technic:lv_battery_box0'},
|
||||||
{'technic:lv_battery_box0', 'technic:mv_transformer', 'technic:lv_battery_box0'},
|
{'technic:lv_battery_box0', 'technic:mv_transformer', 'technic:lv_battery_box0'},
|
||||||
{'', 'technic:mv_cable0', ''},
|
{'', 'technic:mv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_battery_box({
|
technic.register_battery_box({
|
||||||
tier = "MV",
|
tier = "MV",
|
||||||
max_charge = 300000,
|
max_charge = 200000,
|
||||||
charge_rate = 20000,
|
charge_rate = 20000,
|
||||||
discharge_rate = 80000,
|
discharge_rate = 80000,
|
||||||
charge_step = 2000,
|
charge_step = 2000,
|
||||||
discharge_step = 8000,
|
discharge_step = 8000,
|
||||||
|
upgrade = 1,
|
||||||
|
tube = 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
|
|
||||||
minetest.register_alias("mv_cable", "technic:mv_cable0")
|
minetest.register_alias("mv_cable", "technic:mv_cable")
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:mv_cable0 3',
|
output = 'technic:mv_cable 3',
|
||||||
recipe ={
|
recipe ={
|
||||||
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
|
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
|
||||||
{'technic:lv_cable0', 'technic:lv_cable0', 'technic:lv_cable0'},
|
{'technic:lv_cable', 'technic:lv_cable', 'technic:lv_cable'},
|
||||||
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
|
{'technic:rubber', 'technic:rubber', 'technic:rubber'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
16
technic/machines/MV/centrifuge.lua
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "technic:mv_centrifuge",
|
||||||
|
recipe = {
|
||||||
|
{"basic_materials:motor", "technic:copper_plate", "technic:diamond_drill_head"},
|
||||||
|
{"technic:copper_plate", "technic:machine_casing", "technic:copper_plate" },
|
||||||
|
{"pipeworks:one_way_tube", "technic:mv_cable", "pipeworks:mese_filter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
technic.register_centrifuge({
|
||||||
|
tier = "MV",
|
||||||
|
demand = { 8000, 7000, 6000 },
|
||||||
|
speed = 2,
|
||||||
|
upgrade = 1,
|
||||||
|
tube = 1,
|
||||||
|
})
|
12
technic/machines/MV/compressor.lua
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
-- MV compressor
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'technic:mv_compressor',
|
||||||
|
recipe = {
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:lv_compressor', 'technic:stainless_steel_ingot'},
|
||||||
|
{'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'},
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
technic.register_compressor({tier = "MV", demand = {800, 600, 400}, speed = 2, upgrade = 1, tube = 1})
|
|
@ -9,8 +9,8 @@ minetest.register_craft({
|
||||||
output = 'technic:mv_electric_furnace',
|
output = 'technic:mv_electric_furnace',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:lv_electric_furnace', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:lv_electric_furnace', 'technic:stainless_steel_ingot'},
|
||||||
{'pipeworks:tube_000000', 'technic:mv_transformer', 'pipeworks:tube_000000'},
|
{'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:mv_cable0', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
12
technic/machines/MV/extractor.lua
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
-- MV extractor
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'technic:mv_extractor',
|
||||||
|
recipe = {
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:lv_extractor', 'technic:stainless_steel_ingot'},
|
||||||
|
{'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'},
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
technic.register_extractor({tier = "MV", demand = {800, 600, 400}, speed = 2, upgrade = 1, tube = 1})
|
12
technic/machines/MV/freezer.lua
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
-- MV freezer
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'technic:mv_freezer',
|
||||||
|
recipe = {
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'},
|
||||||
|
{'pipeworks:pipe_1_empty', 'technic:mv_transformer', 'pipeworks:pipe_1_empty'},
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
technic.register_freezer({tier = "MV", demand = {800, 600, 400}, speed = 0.5, upgrade = 1, tube = 1})
|
|
@ -1,14 +1,13 @@
|
||||||
|
|
||||||
minetest.register_alias("generator_mv", "technic:generator_mv")
|
minetest.register_alias("generator_mv", "technic:generator_mv")
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:mv_generator',
|
output = 'technic:mv_generator',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:lv_generator', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:lv_generator', 'technic:stainless_steel_ingot'},
|
||||||
{'pipeworks:tube_000000', 'technic:mv_transformer', 'pipeworks:tube_000000'},
|
{'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_generator({tier="MV", supply=600})
|
technic.register_generator({tier="MV", tube=1, supply=600})
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@ minetest.register_craft({
|
||||||
output = 'technic:mv_grinder',
|
output = 'technic:mv_grinder',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:lv_grinder', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:lv_grinder', 'technic:stainless_steel_ingot'},
|
||||||
{'pipeworks:tube_000000', 'technic:mv_transformer', 'pipeworks:tube_000000'},
|
{'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:mv_cable0', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
105
technic/machines/MV/hydro_turbine.lua
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
-- A Hydro Turbine produces MV EUs by exploiting flowing water across it
|
||||||
|
-- It is a MV EU supplier and fairly high yield (max 1800EUs)
|
||||||
|
|
||||||
|
local S = technic.getter
|
||||||
|
|
||||||
|
local cable_entry = "^technic_cable_connection_overlay.png"
|
||||||
|
|
||||||
|
minetest.register_alias("hydro_turbine", "technic:hydro_turbine")
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'technic:hydro_turbine',
|
||||||
|
recipe = {
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:water_mill', 'technic:stainless_steel_ingot'},
|
||||||
|
{'technic:water_mill', 'technic:mv_transformer', 'technic:water_mill'},
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local function get_water_flow(pos)
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
if minetest.get_item_group(node.name, "water") == 3 and string.find(node.name, "flowing") then
|
||||||
|
return node.param2 -- returns approx. water flow, if any
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- 10 times better than LV hydro because of 2 extra water mills and 4 stainless steel, a transformer and whatnot ;P.
|
||||||
|
-- Man hydro turbines are tough and long lasting. So, give it some value :)
|
||||||
|
local run = function(pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local water_flow = 0
|
||||||
|
local production_level = 0
|
||||||
|
local eu_supply = 0
|
||||||
|
local max_output = 40 * 45 -- Generates 1800EU/s
|
||||||
|
|
||||||
|
local positions = {
|
||||||
|
{x=pos.x+1, y=pos.y, z=pos.z},
|
||||||
|
{x=pos.x-1, y=pos.y, z=pos.z},
|
||||||
|
{x=pos.x, y=pos.y, z=pos.z+1},
|
||||||
|
{x=pos.x, y=pos.y, z=pos.z-1},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, p in pairs(positions) do
|
||||||
|
water_flow = water_flow + get_water_flow(p)
|
||||||
|
end
|
||||||
|
|
||||||
|
eu_supply = math.min(40 * water_flow, max_output)
|
||||||
|
production_level = math.floor(100 * eu_supply / max_output)
|
||||||
|
|
||||||
|
meta:set_int("MV_EU_supply", eu_supply)
|
||||||
|
|
||||||
|
meta:set_string("infotext",
|
||||||
|
S("Hydro %s Generator"):format("MV").." ("..production_level.."%)")
|
||||||
|
if production_level > 0 and
|
||||||
|
minetest.get_node(pos).name == "technic:hydro_turbine" then
|
||||||
|
technic.swap_node(pos, "technic:hydro_turbine_active")
|
||||||
|
meta:set_int("MV_EU_supply", 0)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if production_level == 0 then
|
||||||
|
technic.swap_node(pos, "technic:hydro_turbine")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:hydro_turbine", {
|
||||||
|
description = S("Hydro %s Generator"):format("MV"),
|
||||||
|
tiles = {
|
||||||
|
"technic_hydro_turbine_top.png",
|
||||||
|
"technic_machine_bottom.png"..cable_entry,
|
||||||
|
"technic_hydro_turbine_side.png",
|
||||||
|
"technic_hydro_turbine_side.png",
|
||||||
|
"technic_hydro_turbine_side.png",
|
||||||
|
"technic_hydro_turbine_side.png"
|
||||||
|
},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_mv=1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", S("Hydro %s Generator"):format("MV"))
|
||||||
|
meta:set_int("MV_EU_supply", 0)
|
||||||
|
end,
|
||||||
|
technic_run = run,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("technic:hydro_turbine_active", {
|
||||||
|
description = S("Hydro %s Generator"):format("MV"),
|
||||||
|
tiles = {"technic_hydro_turbine_top_active.png", "technic_machine_bottom.png",
|
||||||
|
"technic_hydro_turbine_side.png", "technic_hydro_turbine_side.png",
|
||||||
|
"technic_hydro_turbine_side.png", "technic_hydro_turbine_side.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_mv=1, not_in_creative_inventory=1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
drop = "technic:hydro_turbine",
|
||||||
|
technic_run = run,
|
||||||
|
technic_disabled_machine_name = "technic:hydro_turbine",
|
||||||
|
})
|
||||||
|
|
||||||
|
technic.register_machine("MV", "technic:hydro_turbine", technic.producer)
|
||||||
|
technic.register_machine("MV", "technic:hydro_turbine_active", technic.producer)
|
|
@ -3,20 +3,33 @@ technic.register_tier("MV", "Medium Voltage")
|
||||||
|
|
||||||
local path = technic.modpath.."/machines/MV"
|
local path = technic.modpath.."/machines/MV"
|
||||||
|
|
||||||
dofile(path.."/alloy_furnace.lua")
|
-- Wiring stuff
|
||||||
dofile(path.."/battery_box.lua")
|
|
||||||
dofile(path.."/cables.lua")
|
dofile(path.."/cables.lua")
|
||||||
dofile(path.."/electric_furnace.lua")
|
dofile(path.."/battery_box.lua")
|
||||||
dofile(path.."/grinder.lua")
|
|
||||||
dofile(path.."/solar_array.lua")
|
-- Generators
|
||||||
dofile(path.."/tool_workshop.lua")
|
|
||||||
if technic.config:get_bool("enable_wind_mill") then
|
if technic.config:get_bool("enable_wind_mill") then
|
||||||
dofile(path.."/wind_mill.lua")
|
dofile(path.."/wind_mill.lua")
|
||||||
end
|
end
|
||||||
dofile(path.."/generator.lua")
|
dofile(path.."/generator.lua")
|
||||||
|
dofile(path.."/solar_array.lua")
|
||||||
|
dofile(path.."/hydro_turbine.lua")
|
||||||
|
|
||||||
|
-- Machines
|
||||||
|
dofile(path.."/alloy_furnace.lua")
|
||||||
|
dofile(path.."/electric_furnace.lua")
|
||||||
|
dofile(path.."/grinder.lua")
|
||||||
|
dofile(path.."/extractor.lua")
|
||||||
|
dofile(path.."/compressor.lua")
|
||||||
|
dofile(path.."/centrifuge.lua")
|
||||||
|
|
||||||
|
dofile(path.."/tool_workshop.lua")
|
||||||
|
|
||||||
|
dofile(path.."/freezer.lua")
|
||||||
|
|
||||||
-- The power radiator supplies appliances with inductive coupled power:
|
-- The power radiator supplies appliances with inductive coupled power:
|
||||||
-- Lighting and associated textures is taken directly from VanessaE's homedecor and made electric.
|
-- Lighting and associated textures is taken directly from VanessaE's homedecor and made electric.
|
||||||
dofile(path.."/power_radiator.lua")
|
-- This is currently useless, slow, and mostly copied
|
||||||
dofile(path.."/lighting.lua")
|
--dofile(path.."/power_radiator.lua")
|
||||||
|
--dofile(path.."/lighting.lua")
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,16 @@
|
||||||
|
|
||||||
local power_radius = 12
|
local power_radius = 12
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'technic:power_radiator 1',
|
||||||
|
recipe = {
|
||||||
|
{'technic:stainless_steel_ingot', 'technic:mv_transformer', 'technic:stainless_steel_ingot'},
|
||||||
|
{'technic:copper_coil', 'technic:machine_casing', 'technic:copper_coil'},
|
||||||
|
{'technic:rubber', 'technic:mv_cable', 'technic:rubber'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
-- API for inductive powered nodes:
|
-- API for inductive powered nodes:
|
||||||
-- Use the functions below to set the corresponding callbacks
|
-- Use the functions below to set the corresponding callbacks
|
||||||
|
@ -43,7 +53,7 @@ end
|
||||||
technic.inductive_on_punch_off = function(pos, eu_charge, swapnode)
|
technic.inductive_on_punch_off = function(pos, eu_charge, swapnode)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if meta:get_string("has_supply") ~= "" then
|
if meta:get_string("has_supply") ~= "" then
|
||||||
hacky_swap_node(pos, swapnode)
|
technic.swap_node(pos, swapnode)
|
||||||
meta:set_int("active", 1)
|
meta:set_int("active", 1)
|
||||||
meta:set_int("EU_charge",eu_charge)
|
meta:set_int("EU_charge",eu_charge)
|
||||||
--print("-----------")
|
--print("-----------")
|
||||||
|
@ -56,7 +66,7 @@ end
|
||||||
|
|
||||||
technic.inductive_on_punch_on = function(pos, eu_charge, swapnode)
|
technic.inductive_on_punch_on = function(pos, eu_charge, swapnode)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
hacky_swap_node(pos, swapnode)
|
technic.swap_node(pos, swapnode)
|
||||||
meta:set_int("active", 0)
|
meta:set_int("active", 0)
|
||||||
meta:set_int("EU_charge",eu_charge)
|
meta:set_int("EU_charge",eu_charge)
|
||||||
--print("-----------")
|
--print("-----------")
|
||||||
|
@ -82,7 +92,7 @@ local shutdown_inductive_appliances = function(pos)
|
||||||
local nodename = minetest.get_node(pos1).name
|
local nodename = minetest.get_node(pos1).name
|
||||||
-- Swap the node and make sure it is off and unpowered
|
-- Swap the node and make sure it is off and unpowered
|
||||||
if string.sub(nodename, -7) == "_active" then
|
if string.sub(nodename, -7) == "_active" then
|
||||||
hacky_swap_node(pos1, string.sub(nodename, 1, -8))
|
technic.swap_node(pos1, string.sub(nodename, 1, -8))
|
||||||
meta1:set_int("active", 0)
|
meta1:set_int("active", 0)
|
||||||
meta1:set_int("EU_charge", 0)
|
meta1:set_int("EU_charge", 0)
|
||||||
end
|
end
|
||||||
|
@ -108,7 +118,7 @@ local toggle_on_off_inductive_appliances = function(pos, node, puncher)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("technic:power_radiator", {
|
minetest.register_node("technic:power_radiator", {
|
||||||
description = "Power Radiator",
|
description = "MV Power Radiator",
|
||||||
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||||
"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
|
"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
|
||||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
||||||
|
@ -124,7 +134,7 @@ minetest.register_node("technic:power_radiator", {
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_int("MV_EU_demand",1) -- Demand on the primary side when idle
|
meta:set_int("MV_EU_demand",1) -- Demand on the primary side when idle
|
||||||
meta:set_int("connected_EU_demand",0) -- Potential demand of connected appliances
|
meta:set_int("connected_EU_demand",0) -- Potential demand of connected appliances
|
||||||
meta:set_string("infotext", "Power Radiator")
|
meta:set_string("infotext", "MV Power Radiator")
|
||||||
end,
|
end,
|
||||||
on_dig = function(pos, node, digger)
|
on_dig = function(pos, node, digger)
|
||||||
shutdown_inductive_appliances(pos)
|
shutdown_inductive_appliances(pos)
|
||||||
|
@ -135,21 +145,13 @@ minetest.register_node("technic:power_radiator", {
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'technic:power_radiator 1',
|
|
||||||
recipe = {
|
|
||||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
|
||||||
{'technic:copper_coil', 'technic:mv_transformer', 'technic:copper_coil'},
|
|
||||||
{'technic:rubber', 'technic:mv_cable0', 'technic:rubber'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
|
label = "Machines: run power radiator",
|
||||||
nodenames = {"technic:power_radiator"},
|
nodenames = {"technic:power_radiator"},
|
||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local eu_input = meta:get_int("MV_EU_input")
|
local eu_input = meta:get_int("MV_EU_input")
|
||||||
local eu_demand = meta:get_int("MV_EU_demand")
|
local eu_demand = meta:get_int("MV_EU_demand")
|
||||||
|
|
||||||
|
@ -158,7 +160,7 @@ minetest.register_abm({
|
||||||
|
|
||||||
if eu_input == 0 then
|
if eu_input == 0 then
|
||||||
-- No power
|
-- No power
|
||||||
meta:set_string("infotext", "Power Radiator is unpowered");
|
meta:set_string("infotext", "MV Power Radiator is unpowered");
|
||||||
-- meta:set_int("active", 1) -- used for setting textures someday maybe
|
-- meta:set_int("active", 1) -- used for setting textures someday maybe
|
||||||
shutdown_inductive_appliances(pos)
|
shutdown_inductive_appliances(pos)
|
||||||
meta:set_int("connected_EU_demand", 0)
|
meta:set_int("connected_EU_demand", 0)
|
||||||
|
@ -201,7 +203,7 @@ minetest.register_abm({
|
||||||
-- The appliance has power from this node. Spend power if it is on.
|
-- The appliance has power from this node. Spend power if it is on.
|
||||||
used_charge = used_charge + math.floor(meta1:get_int("EU_charge") / eff_factor)
|
used_charge = used_charge + math.floor(meta1:get_int("EU_charge") / eff_factor)
|
||||||
end
|
end
|
||||||
meta:set_string("infotext", "Power Radiator is powered ("
|
meta:set_string("infotext", "MV Power Radiator is powered ("
|
||||||
..math.floor(used_charge / max_charge * 100)
|
..math.floor(used_charge / max_charge * 100)
|
||||||
.."% of maximum power)");
|
.."% of maximum power)");
|
||||||
if used_charge == 0 then
|
if used_charge == 0 then
|
||||||
|
|
|
@ -3,10 +3,12 @@ minetest.register_craft({
|
||||||
output = 'technic:solar_array_mv 1',
|
output = 'technic:solar_array_mv 1',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:solar_array_lv', 'technic:solar_array_lv', 'technic:solar_array_lv'},
|
{'technic:solar_array_lv', 'technic:solar_array_lv', 'technic:solar_array_lv'},
|
||||||
{'default:steel_ingot', 'technic:mv_transformer', 'default:steel_ingot'},
|
{'technic:carbon_steel_ingot', 'technic:mv_transformer', 'technic:carbon_steel_ingot'},
|
||||||
{'', 'technic:mv_cable0', ''},
|
{'', 'technic:mv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_solar_array({tier="MV", power=30})
|
technic.register_solar_array({tier="MV", power=30})
|
||||||
|
|
||||||
|
-- compatibility alias for upgrading from old versions of technic
|
||||||
|
minetest.register_alias("technic:solar_panel_mv", "technic:solar_array_mv")
|
||||||
|
|
|
@ -5,87 +5,122 @@ minetest.register_alias("tool_workshop", "technic:tool_workshop")
|
||||||
|
|
||||||
local S = technic.getter
|
local S = technic.getter
|
||||||
|
|
||||||
|
local tube_entry = "^pipeworks_tube_connection_wooden.png"
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:tool_workshop',
|
output = 'technic:tool_workshop',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'group:wood', 'group:wood', 'group:wood'},
|
|
||||||
{'group:wood', 'default:diamond', 'group:wood'},
|
{'group:wood', 'default:diamond', 'group:wood'},
|
||||||
{'default:stone', 'default:copper_ingot', 'default:stone'},
|
{'mesecons_pistons:piston_sticky_off', 'technic:machine_casing', 'technic:carbon_cloth'},
|
||||||
|
{'default:obsidian', 'technic:mv_cable', 'default:obsidian'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local workshop_demand = {5000, 3500, 2000}
|
||||||
|
|
||||||
local workshop_formspec =
|
local workshop_formspec =
|
||||||
"invsize[8,9;]"..
|
"size[8,9;]"..
|
||||||
"list[current_name;src;3,1;1,1;]"..
|
"list[current_name;src;3,1;1,1;]"..
|
||||||
"label[0,0;"..S("Tool Workshop").."]"..
|
"label[0,0;"..S("%s Tool Workshop"):format("MV").."]"..
|
||||||
"list[current_player;main;0,5;8,4;]"
|
"list[current_name;upgrade1;1,3;1,1;]"..
|
||||||
|
"list[current_name;upgrade2;2,3;1,1;]"..
|
||||||
|
"label[1,4;"..S("Upgrade Slots").."]"..
|
||||||
|
"list[current_player;main;0,5;8,4;]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;src]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;upgrade1]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;upgrade2]"..
|
||||||
|
"listring[current_player;main]"
|
||||||
|
|
||||||
minetest.register_node("technic:tool_workshop", {
|
local run = function(pos, node)
|
||||||
description = S("Tool Workshop"),
|
|
||||||
tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
|
|
||||||
"technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Tool Workshop"))
|
|
||||||
meta:set_string("formspec", workshop_formspec)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("src", 1)
|
|
||||||
end,
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if not inv:is_empty("src") then
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
S("Machine cannot be removed because it is not empty"))
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:tool_workshop"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local eu_input = meta:get_int("MV_EU_input")
|
local eu_input = meta:get_int("MV_EU_input")
|
||||||
local machine_name = S("Tool Workshop")
|
local machine_name = S("%s Tool Workshop"):format("MV")
|
||||||
local machine_node = "technic:tool_workshop"
|
local machine_node = "technic:tool_workshop"
|
||||||
local demand = 5000
|
|
||||||
|
|
||||||
-- Setup meta data if it does not exist.
|
-- Setup meta data if it does not exist.
|
||||||
if not eu_input then
|
if not eu_input then
|
||||||
meta:set_int("MV_EU_demand", demand)
|
meta:set_int("MV_EU_demand", workshop_demand[1])
|
||||||
meta:set_int("MV_EU_input", 0)
|
meta:set_int("MV_EU_input", 0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Power off automatically if no longer connected to a switching station
|
local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
|
||||||
technic.switching_station_timeout_count(pos, "MV")
|
|
||||||
|
|
||||||
srcstack = inv:get_stack("src", 1)
|
local repairable = false
|
||||||
if inv:is_empty("src") or
|
local srcstack = inv:get_stack("src", 1)
|
||||||
srcstack:get_wear() == 0 or
|
if not srcstack:is_empty() then
|
||||||
srcstack:get_name() == "technic:water_can" or
|
local itemdef = minetest.registered_items[srcstack:get_name()]
|
||||||
srcstack:get_name() == "technic:lava_can" then
|
if itemdef and
|
||||||
|
(not itemdef.wear_represents or
|
||||||
|
itemdef.wear_represents == "mechanical_wear") and
|
||||||
|
srcstack:get_wear() ~= 0 then
|
||||||
|
repairable = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity)
|
||||||
|
if not repairable then
|
||||||
|
technic.send_items(pos, x_velocity, z_velocity, "src")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
if not repairable then
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
||||||
meta:set_int("MV_EU_demand", 0)
|
meta:set_int("MV_EU_demand", 0)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if eu_input < demand then
|
if eu_input < workshop_demand[EU_upgrade+1] then
|
||||||
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
||||||
elseif eu_input >= demand then
|
elseif eu_input >= workshop_demand[EU_upgrade+1] then
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
||||||
srcstack:add_wear(-1000)
|
srcstack:add_wear(-1000)
|
||||||
inv:set_stack("src", 1, srcstack)
|
inv:set_stack("src", 1, srcstack)
|
||||||
end
|
end
|
||||||
meta:set_int("MV_EU_demand", demand)
|
meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:tool_workshop", {
|
||||||
|
description = S("%s Tool Workshop"):format("MV"),
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = {
|
||||||
|
"technic_workshop_top.png"..tube_entry,
|
||||||
|
"technic_machine_bottom.png"..tube_entry,
|
||||||
|
"technic_workshop_side.png"..tube_entry,
|
||||||
|
"technic_workshop_side.png"..tube_entry,
|
||||||
|
"technic_workshop_side.png"..tube_entry,
|
||||||
|
"technic_workshop_side.png"
|
||||||
|
},
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
technic_machine=1, technic_mv=1, tubedevice=1, tubedevice_receiver=1},
|
||||||
|
connect_sides = {"bottom", "back", "left", "right"},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("infotext", S("%s Tool Workshop"):format("MV"))
|
||||||
|
meta:set_string("formspec", workshop_formspec)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size("src", 1)
|
||||||
|
inv:set_size("upgrade1", 1)
|
||||||
|
inv:set_size("upgrade2", 1)
|
||||||
|
end,
|
||||||
|
can_dig = technic.machine_can_dig,
|
||||||
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
|
tube = {
|
||||||
|
can_insert = function (pos, node, stack, direction)
|
||||||
|
return minetest.get_meta(pos):get_inventory():room_for_item("src", stack)
|
||||||
|
end,
|
||||||
|
insert_object = function (pos, node, stack, direction)
|
||||||
|
return minetest.get_meta(pos):get_inventory():add_item("src", stack)
|
||||||
|
end,
|
||||||
|
connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
|
||||||
|
},
|
||||||
|
technic_run = run,
|
||||||
|
after_place_node = pipeworks.after_place,
|
||||||
|
after_dig_node = technic.machine_after_dig_node
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("MV", "technic:tool_workshop", technic.receiver)
|
technic.register_machine("MV", "technic:tool_workshop", technic.receiver)
|
||||||
|
|
|
@ -4,36 +4,74 @@ local S = technic.getter
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:wind_mill_frame 5',
|
output = 'technic:wind_mill_frame 5',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
{'technic:carbon_steel_ingot', '', 'technic:carbon_steel_ingot'},
|
||||||
{'', 'default:steel_ingot', ''},
|
{'', 'technic:carbon_steel_ingot', ''},
|
||||||
{'default:steel_ingot', '', 'default:steel_ingot'},
|
{'technic:carbon_steel_ingot', '', 'technic:carbon_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'technic:wind_mill',
|
output = 'technic:wind_mill',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'', 'default:steel_ingot', ''},
|
{'', 'basic_materials:motor', ''},
|
||||||
{'default:steel_ingot', 'technic:motor', 'default:steel_ingot'},
|
{'technic:carbon_steel_ingot', 'technic:carbon_steel_block', 'technic:carbon_steel_ingot'},
|
||||||
{'', 'default:steelblock', ''},
|
{'', 'technic:mv_cable', ''},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("technic:wind_mill_frame", {
|
minetest.register_node("technic:wind_mill_frame", {
|
||||||
description = S("Wind Mill Frame"),
|
description = S("Wind Mill Frame"),
|
||||||
drawtype = "glasslike_framed",
|
drawtype = "glasslike_framed",
|
||||||
tiles = {"default_steel_block.png", "default_glass.png"},
|
tiles = {"technic_carbon_steel_block.png", "default_glass.png"},
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
groups = {cracky=3},
|
groups = {cracky=3},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local function check_wind_mill(pos)
|
||||||
|
if pos.y < 30 then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
pos = {x=pos.x, y=pos.y, z=pos.z}
|
||||||
|
for i = 1, 20 do
|
||||||
|
pos.y = pos.y - 1
|
||||||
|
local node = minetest.get_node_or_nil(pos)
|
||||||
|
if not node then
|
||||||
|
-- we reached CONTENT_IGNORE, we can assume, that nothing changed
|
||||||
|
-- as the user will have to load the block to change it
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if node.name ~= "technic:wind_mill_frame" then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local run = function(pos, node)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local machine_name = S("Wind %s Generator"):format("MV")
|
||||||
|
|
||||||
|
local check = check_wind_mill(pos)
|
||||||
|
if check == false then
|
||||||
|
meta:set_int("MV_EU_supply", 0)
|
||||||
|
meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name))
|
||||||
|
elseif check == true then
|
||||||
|
local power = math.min(pos.y * 100, 5000)
|
||||||
|
meta:set_int("MV_EU_supply", power)
|
||||||
|
meta:set_string("infotext", S("@1 (@2)", machine_name,
|
||||||
|
technic.EU_string(power)))
|
||||||
|
end
|
||||||
|
-- check == nil: assume nothing has changed
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node("technic:wind_mill", {
|
minetest.register_node("technic:wind_mill", {
|
||||||
description = S("Wind Mill"),
|
description = S("Wind %s Generator"):format("MV"),
|
||||||
tiles = {"default_steel_block.png"},
|
tiles = {"technic_carbon_steel_block.png"},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=1},
|
groups = {cracky=1, technic_machine=1, technic_mv=1},
|
||||||
|
connect_sides = {"top", "bottom", "back", "left", "right"},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
@ -48,43 +86,10 @@ minetest.register_node("technic:wind_mill", {
|
||||||
},
|
},
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("infotext", S("Wind Mill"))
|
meta:set_string("infotext", S("Wind %s Generator"):format("MV"))
|
||||||
meta:set_int("MV_EU_supply", 0)
|
meta:set_int("MV_EU_supply", 0)
|
||||||
end,
|
end,
|
||||||
})
|
technic_run = run,
|
||||||
|
|
||||||
local function check_wind_mill(pos)
|
|
||||||
if pos.y < 30 then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
for i = 1, 20 do
|
|
||||||
local node = minetest.get_node({x=pos.x, y=pos.y-i, z=pos.z})
|
|
||||||
if node.name ~= "technic:wind_mill_frame" then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"technic:wind_mill"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local machine_name = S("Wind Mill")
|
|
||||||
local power = math.min(pos.y * 100, 5000)
|
|
||||||
|
|
||||||
if not check_wind_mill(pos) then
|
|
||||||
meta:set_int("MV_EU_supply", 0)
|
|
||||||
meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name))
|
|
||||||
return
|
|
||||||
else
|
|
||||||
meta:set_int("MV_EU_supply", power)
|
|
||||||
end
|
|
||||||
|
|
||||||
meta:set_string("infotext", machine_name.." ("..power.."EU)")
|
|
||||||
end
|
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("MV", "technic:wind_mill", technic.producer)
|
technic.register_machine("MV", "technic:wind_mill", technic.producer)
|
||||||
|
|
|
@ -8,6 +8,7 @@ dofile(path.."/MV/init.lua")
|
||||||
dofile(path.."/HV/init.lua")
|
dofile(path.."/HV/init.lua")
|
||||||
|
|
||||||
dofile(path.."/switching_station.lua")
|
dofile(path.."/switching_station.lua")
|
||||||
|
dofile(path.."/power_monitor.lua")
|
||||||
dofile(path.."/supply_converter.lua")
|
dofile(path.."/supply_converter.lua")
|
||||||
|
|
||||||
dofile(path.."/other/init.lua")
|
dofile(path.."/other/init.lua")
|
||||||
|
|
109
technic/machines/other/anchor.lua
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
local S = technic.getter
|
||||||
|
|
||||||
|
local desc = S("Administrative World Anchor")
|
||||||
|
|
||||||
|
local function compute_forceload_positions(pos, meta)
|
||||||
|
local radius = meta:get_int("radius")
|
||||||
|
local minpos = vector.subtract(pos, vector.new(radius, radius, radius))
|
||||||
|
local maxpos = vector.add(pos, vector.new(radius, radius, radius))
|
||||||
|
local minbpos = {}
|
||||||
|
local maxbpos = {}
|
||||||
|
for _, coord in ipairs({"x","y","z"}) do
|
||||||
|
minbpos[coord] = math.floor(minpos[coord] / 16) * 16
|
||||||
|
maxbpos[coord] = math.floor(maxpos[coord] / 16) * 16
|
||||||
|
end
|
||||||
|
local flposes = {}
|
||||||
|
for x = minbpos.x, maxbpos.x, 16 do
|
||||||
|
for y = minbpos.y, maxbpos.y, 16 do
|
||||||
|
for z = minbpos.z, maxbpos.z, 16 do
|
||||||
|
table.insert(flposes, vector.new(x, y, z))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return flposes
|
||||||
|
end
|
||||||
|
|
||||||
|
local function currently_forceloaded_positions(meta)
|
||||||
|
local ser = meta:get_string("forceloaded")
|
||||||
|
return ser == "" and {} or minetest.deserialize(ser)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function forceload_off(meta)
|
||||||
|
local flposes = currently_forceloaded_positions(meta)
|
||||||
|
meta:set_string("forceloaded", "")
|
||||||
|
for _, p in ipairs(flposes) do
|
||||||
|
minetest.forceload_free_block(p)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function forceload_on(pos, meta)
|
||||||
|
local want_flposes = compute_forceload_positions(pos, meta)
|
||||||
|
local have_flposes = {}
|
||||||
|
for _, p in ipairs(want_flposes) do
|
||||||
|
if minetest.forceload_block(p) then
|
||||||
|
table.insert(have_flposes, p)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
meta:set_string("forceloaded", #have_flposes == 0 and "" or minetest.serialize(have_flposes))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_display(pos, meta)
|
||||||
|
meta:set_string("infotext", S(meta:get_int("enabled") ~= 0 and "%s Enabled" or "%s Disabled"):format(desc))
|
||||||
|
meta:set_string("formspec",
|
||||||
|
"size[5,3.5]"..
|
||||||
|
"item_image[0,0;1,1;technic:admin_anchor]"..
|
||||||
|
"label[1,0;"..minetest.formspec_escape(desc).."]"..
|
||||||
|
"label[0,1;"..minetest.formspec_escape(S("Owner:").." "..meta:get_string("owner")).."]"..
|
||||||
|
(meta:get_int("locked") == 0 and
|
||||||
|
"button[3,1;2,1;lock;"..minetest.formspec_escape(S("Unlocked")).."]" or
|
||||||
|
"button[3,1;2,1;unlock;"..minetest.formspec_escape(S("Locked")).."]")..
|
||||||
|
"field[0.25,2.3;1,1;radius;"..minetest.formspec_escape(S("Radius:"))..";"..meta:get_int("radius").."]"..
|
||||||
|
(meta:get_int("enabled") == 0 and
|
||||||
|
"button[3,2;2,1;enable;"..minetest.formspec_escape(S("Disabled")).."]" or
|
||||||
|
"button[3,2;2,1;disable;"..minetest.formspec_escape(S("Enabled")).."]")..
|
||||||
|
"label[0,3;"..minetest.formspec_escape(S("Keeping %d/%d map blocks loaded"):format(#currently_forceloaded_positions(meta), #compute_forceload_positions(pos, meta))).."]")
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("technic:admin_anchor", {
|
||||||
|
description = desc,
|
||||||
|
drawtype = "normal",
|
||||||
|
tiles = {"technic_admin_anchor.png"},
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=3, not_in_creative_inventory=1},
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
after_place_node = function (pos, placer)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if placer and placer:is_player() then
|
||||||
|
meta:set_string("owner", placer:get_player_name())
|
||||||
|
end
|
||||||
|
set_display(pos, meta)
|
||||||
|
end,
|
||||||
|
can_dig = function (pos, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
return meta:get_int("locked") == 0 or (player and player:is_player() and player:get_player_name() == meta:get_string("owner"))
|
||||||
|
end,
|
||||||
|
on_destruct = function (pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
forceload_off(meta)
|
||||||
|
end,
|
||||||
|
on_receive_fields = function (pos, formname, fields, sender)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if (meta:get_int("locked") ~= 0 or fields.lock) and
|
||||||
|
not (sender and sender:is_player() and
|
||||||
|
sender:get_player_name() == meta:get_string("owner")) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if fields.unlock then meta:set_int("locked", 0) end
|
||||||
|
if fields.lock then meta:set_int("locked", 1) end
|
||||||
|
if fields.disable or fields.enable or fields.radius then
|
||||||
|
forceload_off(meta)
|
||||||
|
if fields.disable then meta:set_int("enabled", 0) end
|
||||||
|
if fields.enable then meta:set_int("enabled", 1) end
|
||||||
|
if fields.radius and string.find(fields.radius, "^[0-9]+$") and tonumber(fields.radius) < 256 then meta:set_int("radius", fields.radius) end
|
||||||
|
if meta:get_int("enabled") ~= 0 then
|
||||||
|
forceload_on(pos, meta)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set_display(pos, meta)
|
||||||
|
end,
|
||||||
|
})
|
178
technic/machines/other/coal_alloy_furnace.lua
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
|
||||||
|
-- Fuel driven alloy furnace. This uses no EUs:
|
||||||
|
|
||||||
|
local S = technic.getter
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'technic:coal_alloy_furnace',
|
||||||
|
recipe = {
|
||||||
|
{'default:brick', 'default:brick', 'default:brick'},
|
||||||
|
{'default:brick', '', 'default:brick'},
|
||||||
|
{'default:brick', 'default:brick', 'default:brick'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local machine_name = S("Fuel-Fired Alloy Furnace")
|
||||||
|
local formspec =
|
||||||
|
"size[8,9]"..
|
||||||
|
"label[0,0;"..machine_name.."]"..
|
||||||
|
"image[2,2;1,1;default_furnace_fire_bg.png]"..
|
||||||
|
"list[current_name;fuel;2,3;1,1;]"..
|
||||||
|
"list[current_name;src;2,1;2,1;]"..
|
||||||
|
"list[current_name;dst;5,1;2,2;]"..
|
||||||
|
"list[current_player;main;0,5;8,4;]"..
|
||||||
|
"listring[current_name;dst]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;src]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;fuel]"..
|
||||||
|
"listring[current_player;main]"
|
||||||
|
|
||||||
|
minetest.register_node("technic:coal_alloy_furnace", {
|
||||||
|
description = machine_name,
|
||||||
|
tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png",
|
||||||
|
"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png",
|
||||||
|
"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {cracky=2},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", formspec)
|
||||||
|
meta:set_string("infotext", machine_name)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size("fuel", 1)
|
||||||
|
inv:set_size("src", 2)
|
||||||
|
inv:set_size("dst", 4)
|
||||||
|
end,
|
||||||
|
can_dig = technic.machine_can_dig,
|
||||||
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("technic:coal_alloy_furnace_active", {
|
||||||
|
description = machine_name,
|
||||||
|
tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png",
|
||||||
|
"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png",
|
||||||
|
"technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
light_source = 8,
|
||||||
|
drop = "technic:coal_alloy_furnace",
|
||||||
|
groups = {cracky=2, not_in_creative_inventory=1},
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
can_dig = technic.machine_can_dig,
|
||||||
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
label = "Machines: run coal alloy furnace",
|
||||||
|
nodenames = {"technic:coal_alloy_furnace", "technic:coal_alloy_furnace_active"},
|
||||||
|
interval = 1,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
|
||||||
|
if inv:get_size("src") == 1 then -- Old furnace -> convert it
|
||||||
|
inv:set_size("src", 2)
|
||||||
|
inv:set_stack("src", 2, inv:get_stack("src2", 1))
|
||||||
|
inv:set_size("src2", 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local recipe = nil
|
||||||
|
|
||||||
|
for i, name in pairs({
|
||||||
|
"fuel_totaltime",
|
||||||
|
"fuel_time",
|
||||||
|
"src_totaltime",
|
||||||
|
"src_time"}) do
|
||||||
|
if not meta:get_float(name) then
|
||||||
|
meta:set_float(name, 0.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Get what to cook if anything
|
||||||
|
local result = technic.get_recipe("alloy", inv:get_list("src"))
|
||||||
|
|
||||||
|
local was_active = false
|
||||||
|
|
||||||
|
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
||||||
|
was_active = true
|
||||||
|
meta:set_int("fuel_time", meta:get_int("fuel_time") + 1)
|
||||||
|
if result then
|
||||||
|
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
||||||
|
if meta:get_int("src_time") >= result.time then
|
||||||
|
meta:set_int("src_time", 0)
|
||||||
|
local result_stack = ItemStack(result.output)
|
||||||
|
if inv:room_for_item("dst", result_stack) then
|
||||||
|
inv:set_list("src", result.new_input)
|
||||||
|
inv:add_item("dst", result_stack)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
meta:set_int("src_time", 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
|
||||||
|
local percent = math.floor(meta:get_float("fuel_time") /
|
||||||
|
meta:get_float("fuel_totaltime") * 100)
|
||||||
|
meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..percent.."%)")
|
||||||
|
technic.swap_node(pos, "technic:coal_alloy_furnace_active")
|
||||||
|
meta:set_string("formspec",
|
||||||
|
"size[8,9]"..
|
||||||
|
"label[0,0;"..machine_name.."]"..
|
||||||
|
"image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||||
|
(100 - percent)..":default_furnace_fire_fg.png]"..
|
||||||
|
"list[current_name;fuel;2,3;1,1;]"..
|
||||||
|
"list[current_name;src;2,1;2,1;]"..
|
||||||
|
"list[current_name;dst;5,1;2,2;]"..
|
||||||
|
"list[current_player;main;0,5;8,4;]"..
|
||||||
|
"listring[current_name;dst]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;src]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
"listring[current_name;fuel]"..
|
||||||
|
"listring[current_player;main]")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local recipe = technic.get_recipe("alloy", inv:get_list("src"))
|
||||||
|
|
||||||
|
if not recipe then
|
||||||
|
if was_active then
|
||||||
|
meta:set_string("infotext", S("%s is empty"):format(machine_name))
|
||||||
|
technic.swap_node(pos, "technic:coal_alloy_furnace")
|
||||||
|
meta:set_string("formspec", formspec)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Next take a hard look at the fuel situation
|
||||||
|
local fuel = nil
|
||||||
|
local afterfuel
|
||||||
|
local fuellist = inv:get_list("fuel")
|
||||||
|
|
||||||
|
if fuellist then
|
||||||
|
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||||
|
end
|
||||||
|
|
||||||
|
if fuel.time <= 0 then
|
||||||
|
meta:set_string("infotext", S("%s Out Of Fuel"):format(machine_name))
|
||||||
|
technic.swap_node(pos, "technic:coal_alloy_furnace")
|
||||||
|
meta:set_string("formspec", formspec)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
meta:set_string("fuel_totaltime", fuel.time)
|
||||||
|
meta:set_string("fuel_time", 0)
|
||||||
|
|
||||||
|
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
5
technic/machines/other/coal_furnace.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
local S = technic.getter
|
||||||
|
|
||||||
|
if minetest.registered_nodes["default:furnace"].description == "Furnace" then
|
||||||
|
minetest.override_item("default:furnace", { description = S("Fuel-Fired Furnace") })
|
||||||
|
end
|
|
@ -1,4 +1,70 @@
|
||||||
|
|
||||||
|
local S = technic.getter
|
||||||
|
|
||||||
|
local function deploy_node(inv, slot_name, pos, node, machine_node)
|
||||||
|
if node.param2 > 3 then return end
|
||||||
|
if node.name ~= "air" then
|
||||||
|
if node.name == "ignore" or
|
||||||
|
node.name == "default:lava_source" or
|
||||||
|
node.name == "default:lava_flowing" or
|
||||||
|
node.name == "default:water_source" or
|
||||||
|
node.name == "default:water_flowing" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local drops = minetest.get_node_drops(node.name, "")
|
||||||
|
local remove_to = false
|
||||||
|
for i, item in ipairs(drops) do
|
||||||
|
if not inv:room_for_item(slot_name, item) then
|
||||||
|
remove_to = i - 1
|
||||||
|
break
|
||||||
|
end
|
||||||
|
inv:add_item(slot_name, item)
|
||||||
|
end
|
||||||
|
if remove_to then
|
||||||
|
for i = 1, remove_to do
|
||||||
|
inv:remove_item(slot_name, drops[i])
|
||||||
|
end
|
||||||
|
else
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not inv:is_empty(slot_name) then
|
||||||
|
local stack = inv:get_list(slot_name)[1]
|
||||||
|
local def = stack:get_definition()
|
||||||
|
if def.type == "node" then
|
||||||
|
minetest.set_node(pos, {
|
||||||
|
name = stack:get_name(),
|
||||||
|
param2 = machine_node.param2
|
||||||
|
})
|
||||||
|
stack:take_item()
|
||||||
|
inv:set_stack(slot_name, 1, stack)
|
||||||
|
elseif def.type == "craft" then
|
||||||
|
if def.on_place then
|
||||||
|
-- Use pcall to avoid nil placer errors.
|
||||||
|
-- TODO: Do without pcall.
|
||||||
|
local ok, stk = pcall(def.on_place, stack, nil, {
|
||||||
|
-- Fake pointed_thing
|
||||||
|
type = "node",
|
||||||
|
above = pos,
|
||||||
|
under = {x=pos.x, y=pos.y-1, z=pos.z},
|
||||||
|
})
|
||||||
|
if ok then
|
||||||
|
inv:set_stack(slot_name, 1, stk or stack)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.item_place_object(stack, nil, {
|
||||||
|
-- Fake pointed_thing
|
||||||
|
type = "node",
|
||||||
|
above = pos,
|
||||||
|
under = pos,
|
||||||
|
})
|
||||||
|
inv:set_stack(slot_name, 1, nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = 'technic:constructor_mk1_off 1',
|
output = 'technic:constructor_mk1_off 1',
|
||||||
|
@ -19,326 +85,115 @@ minetest.register_craft({
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
mk1_on = function(pos, node)
|
local function make_on(mark, length)
|
||||||
|
return function(pos, node)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local pos1={}
|
local dir = vector.new()
|
||||||
pos1.x=pos.x
|
if node.param2 == 3 then dir.x = 1 end
|
||||||
pos1.y=pos.y
|
if node.param2 == 2 then dir.z = 1 end
|
||||||
pos1.z=pos.z
|
if node.param2 == 1 then dir.x = -1 end
|
||||||
if node.param2==3 then pos1.x=pos1.x+1 end
|
if node.param2 == 0 then dir.z = -1 end
|
||||||
if node.param2==2 then pos1.z=pos1.z+1 end
|
|
||||||
if node.param2==1 then pos1.x=pos1.x-1 end
|
|
||||||
if node.param2==0 then pos1.z=pos1.z-1 end
|
|
||||||
|
|
||||||
if node.name == "technic:constructor_mk1_off" then
|
local place_pos = vector.new(pos)
|
||||||
hacky_swap_node(pos,"technic:constructor_mk1_on")
|
|
||||||
nodeupdate(pos)
|
if node.name == "technic:constructor_mk"..mark.."_off" then
|
||||||
local node1=minetest.get_node(pos1)
|
technic.swap_node(pos, "technic:constructor_mk"..mark.."_on")
|
||||||
deploy_node (inv,"slot1",pos1,node1,node)
|
minetest.check_for_falling(pos)
|
||||||
|
for i = 1, length do
|
||||||
|
place_pos = vector.add(place_pos, dir)
|
||||||
|
local place_node = minetest.get_node(place_pos)
|
||||||
|
deploy_node(inv, "slot"..i, place_pos, place_node, node)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
mk1_off = function(pos, node)
|
local function make_off(mark)
|
||||||
if node.name == "technic:constructor_mk1_on" then
|
return function(pos, node)
|
||||||
hacky_swap_node(pos,"technic:constructor_mk1_off")
|
if node.name == "technic:constructor_mk"..mark.."_on" then
|
||||||
nodeupdate(pos)
|
technic.swap_node(pos,"technic:constructor_mk"..mark.."_off")
|
||||||
|
minetest.check_for_falling(pos)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function allow_inventory_put(pos, listname, index, stack, player)
|
||||||
|
if stack and minetest.get_item_group(stack:get_name(), "technic_constructor") == 1 then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return technic.machine_inventory_put(pos, listname, index, stack, player)
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node("technic:constructor_mk1_off", {
|
local function make_constructor(mark, length)
|
||||||
description = "Constructor MK1",
|
minetest.register_node("technic:constructor_mk"..mark.."_off", {
|
||||||
tile_images = {"technic_constructor_mk1_top_off.png","technic_constructor_mk1_bottom_off.png","technic_constructor_mk1_side2_off.png","technic_constructor_mk1_side1_off.png",
|
description = S("Constructor Mk%d"):format(mark),
|
||||||
"technic_constructor_back.png","technic_constructor_front_off.png"},
|
tiles = {"technic_constructor_mk"..mark.."_top_off.png",
|
||||||
is_ground_content = true,
|
"technic_constructor_mk"..mark.."_bottom_off.png",
|
||||||
|
"technic_constructor_mk"..mark.."_side2_off.png",
|
||||||
|
"technic_constructor_mk"..mark.."_side1_off.png",
|
||||||
|
"technic_constructor_back.png",
|
||||||
|
"technic_constructor_front_off.png"},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2},
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
mesecons= {effector={action_on=mk1_on}},
|
mesecon = 2, technic_constructor = 1},
|
||||||
|
mesecons = {effector = {action_on = make_on(mark, length)}},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec",
|
local formspec = "size[8,9;]"..
|
||||||
"invsize[8,9;]"..
|
"label[0,0;"..S("Constructor Mk%d"):format(mark).."]"..
|
||||||
"label[0,0;Constructor MK1]"..
|
"list[current_player;main;0,5;8,4;]"
|
||||||
"label[5,0;Slot 1]"..
|
for i = 1, length do
|
||||||
"list[current_name;slot1;6,0;1,1;]"..
|
formspec = formspec
|
||||||
"list[current_player;main;0,5;8,4;]")
|
.."label[5,"..(i - 1)..";"..S("Slot %d"):format(i).."]"
|
||||||
meta:set_string("infotext", "Constructor MK1")
|
.."list[current_name;slot"..i
|
||||||
local inv = meta:get_inventory()
|
..";6,"..(i - 1)..";1,1;]"
|
||||||
inv:set_size("slot1", 1)
|
|
||||||
end,
|
|
||||||
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
return inv:is_empty("slot1")
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:constructor_mk1_on", {
|
|
||||||
description = "Constructor MK1",
|
|
||||||
tile_images = {"technic_constructor_mk1_top_on.png","technic_constructor_mk1_bottom_on.png","technic_constructor_mk1_side2_on.png","technic_constructor_mk1_side1_on.png",
|
|
||||||
"technic_constructor_back.png","technic_constructor_front_on.png"},
|
|
||||||
is_ground_content = true,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon = 2,not_in_creative_inventory=1},
|
|
||||||
mesecons= {effector={action_off=mk1_off}},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
--Constructor MK2
|
|
||||||
|
|
||||||
mk2_on = function(pos, node)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local pos1={}
|
|
||||||
local pos2={}
|
|
||||||
pos1.x=pos.x
|
|
||||||
pos1.y=pos.y
|
|
||||||
pos1.z=pos.z
|
|
||||||
pos2.x=pos.x
|
|
||||||
pos2.y=pos.y
|
|
||||||
pos2.z=pos.z
|
|
||||||
if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 end
|
|
||||||
if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 end
|
|
||||||
if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 end
|
|
||||||
if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 end
|
|
||||||
|
|
||||||
if node.name == "technic:constructor_mk2_off" then
|
|
||||||
hacky_swap_node(pos,"technic:constructor_mk2_on")
|
|
||||||
nodeupdate(pos)
|
|
||||||
local node1=minetest.get_node(pos1)
|
|
||||||
deploy_node (inv,"slot1",pos1,node1,node)
|
|
||||||
local node1=minetest.get_node(pos2)
|
|
||||||
deploy_node (inv,"slot2",pos2,node1,node)
|
|
||||||
end
|
end
|
||||||
end
|
meta:set_string("formspec", formspec)
|
||||||
|
meta:set_string("infotext", S("Constructor Mk%d"):format(mark))
|
||||||
mk2_off = function(pos, node)
|
local inv = meta:get_inventory()
|
||||||
if node.name == "technic:constructor_mk2_on" then
|
for i = 1, length do
|
||||||
hacky_swap_node(pos,"technic:constructor_mk2_off")
|
inv:set_size("slot"..i, 1)
|
||||||
nodeupdate(pos)
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node("technic:constructor_mk2_off", {
|
|
||||||
description = "Constructor MK2",
|
|
||||||
tile_images = {"technic_constructor_mk2_top_off.png","technic_constructor_mk2_bottom_off.png","technic_constructor_mk2_side2_off.png","technic_constructor_mk2_side1_off.png",
|
|
||||||
"technic_constructor_back.png","technic_constructor_front_off.png"},
|
|
||||||
is_ground_content = true,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2},
|
|
||||||
mesecons= {effector={action_on=mk2_on}},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("formspec",
|
|
||||||
"invsize[8,9;]"..
|
|
||||||
"label[0,0;Constructor MK2]"..
|
|
||||||
"label[5,0;Slot 1]"..
|
|
||||||
"list[current_name;slot1;6,0;1,1;]"..
|
|
||||||
"label[5,1;Slot 2]"..
|
|
||||||
"list[current_name;slot2;6,1;1,1;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]")
|
|
||||||
meta:set_string("infotext", "Constructor MK2")
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("slot1", 1)
|
|
||||||
inv:set_size("slot2", 1)
|
|
||||||
end,
|
end,
|
||||||
|
can_dig = function(pos, player)
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false then return false end
|
for i = 1, length do
|
||||||
|
if not inv:is_empty("slot"..i) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
})
|
allow_metadata_inventory_put = allow_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
minetest.register_node("technic:constructor_mk2_on", {
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||||
description = "Constructor MK2",
|
on_rotate = screwdriver.rotate_simple
|
||||||
tile_images = {"technic_constructor_mk2_top_on.png","technic_constructor_mk2_bottom_on.png","technic_constructor_mk2_side2_on.png","technic_constructor_mk2_side1_on.png",
|
|
||||||
"technic_constructor_back.png","technic_constructor_front_on.png"},
|
|
||||||
is_ground_content = true,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2, not_in_creative_inventory=1},
|
|
||||||
mesecons= {effector={action_off=mk2_off}},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
-- Constructor MK3
|
|
||||||
mk3_on = function(pos, node)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
|
|
||||||
local pos1={}
|
|
||||||
local pos2={}
|
|
||||||
local pos3={}
|
|
||||||
local pos4={}
|
|
||||||
|
|
||||||
pos1.x=pos.x
|
|
||||||
pos1.y=pos.y
|
|
||||||
pos1.z=pos.z
|
|
||||||
|
|
||||||
pos2.x=pos.x
|
|
||||||
pos2.y=pos.y
|
|
||||||
pos2.z=pos.z
|
|
||||||
|
|
||||||
pos3.x=pos.x
|
|
||||||
pos3.y=pos.y
|
|
||||||
pos3.z=pos.z
|
|
||||||
|
|
||||||
pos4.x=pos.x
|
|
||||||
pos4.y=pos.y
|
|
||||||
pos4.z=pos.z
|
|
||||||
|
|
||||||
if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 pos3.x=pos3.x+3 pos4.x=pos4.x+4 end
|
|
||||||
if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 pos3.z=pos3.z+3 pos4.z=pos4.z+4 end
|
|
||||||
if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 pos3.x=pos3.x-3 pos4.x=pos4.x-4 end
|
|
||||||
if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 pos3.z=pos3.z-3 pos4.z=pos4.z-4 end
|
|
||||||
|
|
||||||
if node.name == "technic:constructor_mk3_off" then
|
|
||||||
hacky_swap_node(pos,"technic:constructor_mk3_on")
|
|
||||||
nodeupdate(pos)
|
|
||||||
local node1=minetest.get_node(pos1)
|
|
||||||
deploy_node (inv,"slot1",pos1,node1,node)
|
|
||||||
local node1=minetest.get_node(pos2)
|
|
||||||
deploy_node (inv,"slot2",pos2,node1,node)
|
|
||||||
local node1=minetest.get_node(pos3)
|
|
||||||
deploy_node (inv,"slot3",pos3,node1,node)
|
|
||||||
local node1=minetest.get_node(pos4)
|
|
||||||
deploy_node (inv,"slot4",pos4,node1,node)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mk3_off = function(pos, node)
|
|
||||||
if node.name == "technic:constructor_mk3_on" then
|
|
||||||
hacky_swap_node(pos,"technic:constructor_mk3_off")
|
|
||||||
nodeupdate(pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node("technic:constructor_mk3_off", {
|
|
||||||
description = "Constructor MK3",
|
|
||||||
tile_images = {"technic_constructor_mk3_top_off.png","technic_constructor_mk3_bottom_off.png","technic_constructor_mk3_side2_off.png","technic_constructor_mk3_side1_off.png",
|
|
||||||
"technic_constructor_back.png","technic_constructor_front_off.png"},
|
|
||||||
is_ground_content = true,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2},
|
|
||||||
mesecons= {effector={action_on=mk3_on}},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("formspec",
|
|
||||||
"invsize[8,9;]"..
|
|
||||||
"label[0,0;Constructor MK2]"..
|
|
||||||
"label[5,0;Slot 1]"..
|
|
||||||
"list[current_name;slot1;6,0;1,1;]"..
|
|
||||||
"label[5,1;Slot 2]"..
|
|
||||||
"list[current_name;slot2;6,1;1,1;]"..
|
|
||||||
"label[5,2;Slot 3]"..
|
|
||||||
"list[current_name;slot3;6,2;1,1;]"..
|
|
||||||
"label[5,3;Slot 4]"..
|
|
||||||
"list[current_name;slot4;6,3;1,1;]"..
|
|
||||||
"list[current_player;main;0,5;8,4;]")
|
|
||||||
meta:set_string("infotext", "Constructor MK3")
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("slot1", 1)
|
|
||||||
inv:set_size("slot2", 1)
|
|
||||||
inv:set_size("slot3", 1)
|
|
||||||
inv:set_size("slot4", 1)
|
|
||||||
|
|
||||||
end,
|
|
||||||
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false or inv:is_empty("slot3")==false or inv:is_empty("slot4")==false then return false end
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("technic:constructor_mk3_on", {
|
|
||||||
description = "Constructor MK3",
|
|
||||||
tile_images = {"technic_constructor_mk3_top_on.png","technic_constructor_mk3_bottom_on.png","technic_constructor_mk3_side2_on.png","technic_constructor_mk3_side1_on.png",
|
|
||||||
"technic_constructor_back.png","technic_constructor_front_on.png"},
|
|
||||||
is_ground_content = true,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,not_in_creative_inventory=1},
|
|
||||||
mesecons= {effector={action_off=mk3_off}},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
deploy_node =function (inv, slot_name, pos1, node1, node)
|
|
||||||
if node1.name == "air" then
|
|
||||||
if not inv:is_empty(slot_name) then
|
|
||||||
stack1=inv:get_list(slot_name)
|
|
||||||
local def = stack1[1]:get_definition()
|
|
||||||
if def.type == "node" then
|
|
||||||
node_to_be_placed={name=stack1[1]:get_name(), param1=0, param2=node.param2}
|
|
||||||
minetest.set_node(pos1,node_to_be_placed)
|
|
||||||
stack1[1]:take_item()
|
|
||||||
inv:set_stack(slot_name, 1, stack1[1])
|
|
||||||
elseif def.type == "craft" then
|
|
||||||
if def.on_place then
|
|
||||||
-- print("deploy_node: item has on_place. trying...")
|
|
||||||
local ok, stk = pcall(def.on_place, stack1[1], nil, {
|
|
||||||
-- Fake pointed_thing
|
|
||||||
type = "node",
|
|
||||||
above = pos1,
|
|
||||||
under = { x=pos1.x, y=pos1.y-1, z=pos1.z },
|
|
||||||
})
|
})
|
||||||
if ok then
|
|
||||||
-- print("deploy_node: on_place succeeded!")
|
|
||||||
inv:set_stack(slot_name, 1, stk or stack1[1])
|
|
||||||
return
|
|
||||||
-- else
|
|
||||||
-- print("deploy_node: WARNING: error while running on_place: "..tostring(stk))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
minetest.item_place_object(stack1[1], nil, {
|
|
||||||
-- Fake pointed_thing
|
|
||||||
type = "node",
|
|
||||||
above = pos1,
|
|
||||||
under = pos1,
|
|
||||||
})
|
|
||||||
inv:set_stack(slot_name, 1, nil)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if node1.name == "ignore" or
|
|
||||||
node1.name == "default:lava_source" or
|
|
||||||
node1.name == "default:lava_flowing" or
|
|
||||||
node1.name == "default:water_source" or
|
|
||||||
node1.name == "default:water_flowing"
|
|
||||||
then return end
|
|
||||||
if inv:room_for_item(slot_name,node1) then
|
|
||||||
local def = minetest.registered_nodes[node1.name]
|
|
||||||
if not def then return end
|
|
||||||
local drop = def.drop or node1.name
|
|
||||||
if type(drop) == "table" then
|
|
||||||
local pr = PseudoRandom(math.random())
|
|
||||||
local c = 0
|
|
||||||
local loop = 0 -- Prevent infinite loop
|
|
||||||
while (c < (drop.max_items or 1)) and (loop < 1000) do
|
|
||||||
local i = math.floor(pr:next(1, #drop.items))
|
|
||||||
if pr:next(1, drop.items[i].rarity or 1) == 1 then
|
|
||||||
for _,item in ipairs(drop.items[i].items) do
|
|
||||||
inv:add_item(slot_name,item)
|
|
||||||
end
|
|
||||||
c = c + 1
|
|
||||||
end
|
|
||||||
loop = loop + 1
|
|
||||||
end
|
|
||||||
minetest.remove_node(pos1)
|
|
||||||
elseif type(drop) == "string" then
|
|
||||||
inv:add_item(slot_name,drop)
|
|
||||||
minetest.remove_node(pos1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
minetest.register_node("technic:constructor_mk"..mark.."_on", {
|
||||||
|
tiles = {"technic_constructor_mk"..mark.."_top_on.png",
|
||||||
|
"technic_constructor_mk"..mark.."_bottom_on.png",
|
||||||
|
"technic_constructor_mk"..mark.."_side2_on.png",
|
||||||
|
"technic_constructor_mk"..mark.."_side1_on.png",
|
||||||
|
"technic_constructor_back.png",
|
||||||
|
"technic_constructor_front_on.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
drop = "technic:constructor_mk"..mark.."_off",
|
||||||
|
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||||
|
mesecon=2, not_in_creative_inventory=1, technic_constructor=1},
|
||||||
|
mesecons= {effector = {action_off = make_off(mark)}},
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
allow_metadata_inventory_put = allow_inventory_put,
|
||||||
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
||||||
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
||||||
|
on_rotate = false
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
make_constructor(1, 1)
|
||||||
|
make_constructor(2, 2)
|
||||||
|
make_constructor(3, 4)
|
||||||
|
|
||||||
|
|
|
@ -3,4 +3,13 @@ local path = technic.modpath.."/machines/other"
|
||||||
-- mesecons and tubes related
|
-- mesecons and tubes related
|
||||||
dofile(path.."/injector.lua")
|
dofile(path.."/injector.lua")
|
||||||
dofile(path.."/constructor.lua")
|
dofile(path.."/constructor.lua")
|
||||||
dofile(path.."/frames.lua")
|
|
||||||
|
if technic.config:get_bool("enable_frames") and minetest.get_modpath("mesecons_mvps") ~= nil then
|
||||||
|
dofile(path.."/frames.lua")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Coal-powered machines
|
||||||
|
dofile(path.."/coal_alloy_furnace.lua")
|
||||||
|
dofile(path.."/coal_furnace.lua")
|
||||||
|
|
||||||
|
dofile(path.."/anchor.lua")
|
||||||
|
|