Compare commits

..

296 Commits
1.21 ... 1.19.2

Author SHA1 Message Date
33a1145bc5
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-06-01 20:16:50 +07:00
29daea9bce
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-06-01 20:16:37 +07:00
ecb8a8ecd0
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-06-01 20:16:27 +07:00
c83476225d
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-06-01 20:16:05 +07:00
9f9a140432
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-05-31 16:50:12 +07:00
69172b58e6
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-05-31 16:50:00 +07:00
f0846a7b3a
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-05-31 16:49:47 +07:00
f8277e55c3
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-05-31 16:49:35 +07:00
9366267a63
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-05-31 16:37:57 +07:00
57c1644ccc
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-05-31 16:37:46 +07:00
e9f4b22cb8
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-05-31 16:37:34 +07:00
49dd781a82
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-05-31 16:37:18 +07:00
a2465b0dc2
Post merge fixes for 1.19.2 2024-05-31 12:40:02 +07:00
ed8faa11a5
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-05-31 12:35:45 +07:00
eeb5d3ba73
Post merge fixes for 1.19.3 2024-05-31 12:21:29 +07:00
0f355150a2
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-05-31 12:12:22 +07:00
baeef3816f
Post merge fixes for 1.19.4 2024-05-31 11:33:44 +07:00
9264e24c42
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-05-31 11:25:01 +07:00
65dbeeeb4f
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-05-31 11:22:02 +07:00
f6138671d2
How does CAR is for 1.20.2 on 1.20.1 branch 2024-05-31 11:19:15 +07:00
34b60be434
Post merge fixes for 1.20.1 2024-05-31 11:13:53 +07:00
6153c2e972
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-05-31 11:10:20 +07:00
433fec51b2
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-22 19:06:59 +07:00
0b91f54863
dum 2024-01-22 19:06:47 +07:00
d75c6e2016
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-22 14:28:53 +07:00
5fde1376b9
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-22 14:28:45 +07:00
b6ef6c5e8e
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-22 14:28:36 +07:00
376e548cec
Revert "what"
This reverts commit 87e64a102a.
2024-01-22 14:28:21 +07:00
4244a226e5
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-22 14:03:37 +07:00
2e427f05b1
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-22 14:03:26 +07:00
5829dc8e5a
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-22 14:03:14 +07:00
653ecedafb
Proper backport "allow vanilla servers on otm modded clients" 2024-01-22 14:02:21 +07:00
e8d5c96147
Post merge fixes for 1.19.2 2024-01-22 13:12:43 +07:00
cc3d7535fc
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-22 12:58:23 +07:00
53b9a7ec02
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-22 12:57:19 +07:00
5f6fb9c731
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-22 12:51:17 +07:00
87e64a102a
what 2024-01-22 11:45:56 +07:00
0b7e54b4ef
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-22 11:45:00 +07:00
f0dba4ccc3
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-22 11:39:06 +07:00
854339fdbb
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-14 00:29:23 +07:00
b4c4410432
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-14 00:29:16 +07:00
5eb78b6e9c
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-14 00:29:10 +07:00
b35dfaeacd
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-14 00:29:02 +07:00
327963f4e5
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-13 12:18:26 +07:00
b4ae0bb6ae
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-13 12:18:19 +07:00
6e143e072d
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-13 12:18:01 +07:00
6a2eb3dec2
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-13 12:17:56 +07:00
5fd6df3447
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-13 12:05:08 +07:00
4d26cffbc8
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-13 12:05:02 +07:00
410ba675ea
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-13 12:04:57 +07:00
ce94d22212
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-13 12:04:52 +07:00
829c4e68ef
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-13 12:02:45 +07:00
d9b18ddaa6
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-13 12:02:37 +07:00
fccf97c4c8
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-13 12:02:30 +07:00
21b84651a8
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-13 12:02:26 +07:00
fb3e556523
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-13 11:51:03 +07:00
c3373bca30
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-13 11:50:57 +07:00
55c975f1e8
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-13 11:50:50 +07:00
80917f7d12
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-13 11:50:42 +07:00
65914a9d03
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-13 11:43:16 +07:00
c652f8d6d4
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-13 11:43:07 +07:00
07bc48887e
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-13 11:42:59 +07:00
12b10ee6fe
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-13 11:42:52 +07:00
e5c67d2085
Post merge fixes for 1.19.2 2024-01-12 21:53:53 +07:00
a045791714
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-12 21:38:26 +07:00
46bc642385
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-12 21:33:14 +07:00
9e72d73bfd
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-12 21:25:13 +07:00
a88549f17f
Post merge fixes for 1.20.1 2024-01-12 21:21:07 +07:00
5552be70d5
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-12 21:17:44 +07:00
d4dc6b09c3
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-09 18:26:02 +07:00
c210e9f842
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-09 18:25:57 +07:00
d29f68fc4e
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-09 18:25:53 +07:00
cb386d39f5
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-09 18:25:48 +07:00
6d007f4a27
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-09 17:54:38 +07:00
55e6a4cb19
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-09 17:54:32 +07:00
6bbe2f2750
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-09 17:54:25 +07:00
22c3c22081
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-09 17:54:17 +07:00
558e40bf58
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-09 13:53:56 +07:00
d38df3d927
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-09 13:53:47 +07:00
562e6c509f
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-09 13:53:39 +07:00
0da77bc453
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-09 13:53:32 +07:00
c9d56f9204
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-09 13:45:09 +07:00
5645d5f56f
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-09 13:44:41 +07:00
4a606b8d36
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-09 13:43:24 +07:00
f2aade3a8e
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-09 13:42:01 +07:00
46820a311f
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-09 13:41:17 +07:00
48a756ea93
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-08 21:51:31 +07:00
abd6a93fd4
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-08 21:51:23 +07:00
19b4942c90
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-08 21:51:15 +07:00
3743a3402d
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-08 21:51:08 +07:00
f4c9f9d057
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-08 21:42:26 +07:00
c17e0aac04
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-08 21:42:16 +07:00
d88801d8bf
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-08 21:41:59 +07:00
055b9cc489
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-08 21:41:51 +07:00
241f13914d
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-08 14:16:39 +07:00
f1df27d5d7
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-08 14:16:31 +07:00
640f62d63b
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-08 14:16:23 +07:00
c0a7559d3d
whut 2024-01-08 14:15:23 +07:00
f115f1f4a7
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-08 14:14:16 +07:00
44183a45a8
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-08 14:14:06 +07:00
c88023470f
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-08 14:13:57 +07:00
d3423a6160
Post merge fixes for 1.20.1 2024-01-08 14:13:43 +07:00
55c0be74d3
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-08 14:13:04 +07:00
abe3681ecc
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-07 12:08:35 +07:00
667dcf6b58
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-07 12:08:02 +07:00
a59fe8c256
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-07 12:07:43 +07:00
9d9b19da9d
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-07 12:07:19 +07:00
8430e2bf79
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-07 11:49:41 +07:00
eb460d04ec
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-07 11:49:34 +07:00
6dce3a37e6
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-07 11:49:27 +07:00
652acf3ce1
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-07 11:49:20 +07:00
f2afd5b350
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-06 16:45:41 +07:00
9dbf40f170
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-06 16:45:33 +07:00
6eb3700f88
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-06 16:45:27 +07:00
101e57756a
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-06 16:45:21 +07:00
fdb2a4f15f
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-06 11:43:17 +07:00
f165c0fbdc
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-06 11:43:06 +07:00
0695f613d3
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-06 11:42:56 +07:00
67dbcde6dc
Post merge fixes for 1.20.1 2024-01-06 11:41:44 +07:00
3f5339ac9f
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-06 11:39:04 +07:00
1967373a9d
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-06 11:38:17 +07:00
04ce837b02
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-06 11:38:03 +07:00
b4c994f02f
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-06 11:37:34 +07:00
d8b71adf1a
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-05 23:52:40 +07:00
a1f29021c6
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-05 23:52:30 +07:00
ef997ca1fe
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-05 23:52:21 +07:00
8007c1757e
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-05 23:52:11 +07:00
02ed016bf9
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-05 23:07:58 +07:00
f3f8155027
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-05 23:07:48 +07:00
7e6a150ab7
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-05 23:07:42 +07:00
8aafa38c27
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-05 23:07:36 +07:00
59d69367dc
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-05 22:59:54 +07:00
8097551fd3
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-05 22:59:47 +07:00
cc164f669d
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-05 22:59:40 +07:00
e51ba7015a
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-05 22:59:33 +07:00
c1a224f677
Post merge fixes for 1.19.2 2024-01-05 22:23:38 +07:00
1efa604578
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-05 22:20:37 +07:00
9fe99e92f7
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-05 22:20:24 +07:00
ee624f1b3f
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-05 22:20:16 +07:00
1d0e24095a
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-05 22:20:09 +07:00
c4b686d621
Post merge fixes for 1.19.2 2024-01-05 22:19:34 +07:00
185e70c93a
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-05 22:17:34 +07:00
8f8fd8c8de
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-05 22:14:21 +07:00
2b884739f4
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-05 22:13:57 +07:00
a7d405b5ea
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-05 22:13:36 +07:00
dd331e0881
Post merge fixes for 1.19.3 2024-01-05 22:02:17 +07:00
a4b3d2ba8a
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-05 21:55:45 +07:00
74183f0982
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-05 21:47:04 +07:00
8ee5e94a78
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-05 21:42:09 +07:00
5f337b1d1f
Post merge fixes for 1.19.2 2024-01-04 21:01:04 +07:00
53ee56fdd5
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-04 20:53:02 +07:00
d10ce72a0e
Post merge fixes for 1.19.3 2024-01-04 20:41:32 +07:00
cae867cb4d
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-04 20:29:05 +07:00
76c4c3e6a2
Post merge fixes for 1.19.4 2024-01-04 20:23:11 +07:00
a68c08ecf8
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-04 20:18:14 +07:00
f9dcf43cc4
Fix compilation error 2024-01-04 20:12:29 +07:00
42fe77e6b4
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-04 20:10:11 +07:00
b86a982245
Downgrade worldedit 2024-01-02 20:38:03 +07:00
39ed6ccc06
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-02 20:37:16 +07:00
0f14c3eaa0
Downgrade worldedit 2024-01-02 20:35:50 +07:00
9e9c4168d6
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-02 20:35:23 +07:00
bc59853f4e
Downgrade worldedit 2024-01-02 20:34:35 +07:00
9b80162a03
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-02 20:34:06 +07:00
b28e180704
Downgrade worldedit 2024-01-02 20:33:42 +07:00
2deaef94aa
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-02 20:33:11 +07:00
b0ca9320ca
Merge branch '1.19.3' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.2 2024-01-02 18:09:16 +07:00
2ae5166a01
Merge branch '1.19.4' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.3 2024-01-02 18:08:55 +07:00
cac468685e
Merge branch '1.20.1' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.19.4 2024-01-02 18:08:37 +07:00
78ac178526
Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1 2024-01-02 18:08:11 +07:00
824b63b012
Update matrix symbol name in coremod injector 2024-01-02 16:28:26 +07:00
d06f3b5856
Merge branch '1.19.3' into 1.19.2 2024-01-02 15:29:46 +07:00
37ce7343d4
Fix damage type names 2024-01-02 15:29:40 +07:00
a8121bf81b
Merge branch '1.19.3' into 1.19.2 2024-01-02 15:16:33 +07:00
0944e55141
Merge branch '1.19.4' into 1.19.3 2024-01-02 15:16:33 +07:00
c98562f2cb
Merge branch '1.20.1' into 1.19.4 2024-01-02 15:16:32 +07:00
92f2680feb
Use appropriate texture for status effect background 2024-01-02 15:16:28 +07:00
eec2f99188
Merge branch '1.19.3' into 1.19.2 2024-01-02 15:05:26 +07:00
783c2bde34
Merge branch '1.19.4' into 1.19.3 2024-01-02 15:05:26 +07:00
b8f98f0e9e
Merge branch '1.20.1' into 1.19.4 2024-01-02 15:05:25 +07:00
077e82064b
Merge branch '1.20.2' into 1.20.1 2024-01-02 15:05:25 +07:00
5e73687068
Fix crash in CreativeMenuItemComparator 2024-01-02 14:55:47 +07:00
b763a7d1be
Fix item icons not being rendered correctly for 1.19.2 2024-01-02 14:48:32 +07:00
5f60ae1896
Merge branch '1.19.3' into 1.19.2 2024-01-02 14:39:05 +07:00
cae417b3b4
Fix item icons not being rendered correctly 2024-01-02 14:38:58 +07:00
fd831c74ea
Merge branch '1.19.3' into 1.19.2 2024-01-02 14:19:27 +07:00
8d42686cc5
Merge branch '1.19.4' into 1.19.3 2024-01-02 14:19:26 +07:00
62cc823e29
Merge branch '1.20.1' into 1.19.4 2024-01-02 14:19:25 +07:00
c821fa76a6
Merge branch '1.20.2' into 1.20.1 2024-01-02 14:19:25 +07:00
672123850b
Merge branch '1.19.3' into 1.19.2 2024-01-02 13:53:58 +07:00
57cc9730f8
Merge branch '1.19.4' into 1.19.3 2024-01-02 13:53:50 +07:00
1d68f32b19
Fix multiplayer RecipeSerializer.codec
# Conflicts:
#	build.gradle.kts
2024-01-02 13:53:33 +07:00
d710b23223
Fix multiplayer RecipeSerializer.codec 2024-01-02 13:51:58 +07:00
5971db9a24
Register item color handlers and decorators only on client 2024-01-02 13:40:48 +07:00
ccb5914bb2
Merge branch '1.19.3' into 1.19.2 2024-01-02 12:26:49 +07:00
6b6f9f8062
Merge branch '1.19.4' into 1.19.3 2024-01-02 12:26:48 +07:00
6e4bf4e7ec
Merge branch '1.20.2' into 1.20.1 2024-01-02 12:26:47 +07:00
ae544e8844
Merge branch '1.20.1' into 1.19.4 2024-01-02 12:26:47 +07:00
03ea3a3a5c
Merge branch '1.19.3' into 1.19.2 2024-01-02 12:22:26 +07:00
3819e5c49b
Merge branch '1.19.4' into 1.19.3 2024-01-02 12:22:22 +07:00
d96a0e1a63
Merge branch '1.20.1' into 1.19.4 2024-01-02 12:22:14 +07:00
5b45cf7d0a
Merge branch '1.20.2' into 1.20.1 2024-01-02 12:22:08 +07:00
4e1a40279b
Merge branch '1.19.3' into 1.19.2 2024-01-02 12:10:55 +07:00
ea448788c5
Merge branch '1.19.4' into 1.19.3 2024-01-02 12:10:51 +07:00
37e7f42587
add missing import 2024-01-02 12:10:43 +07:00
99cefc2ffc
Merge branch '1.19.3' into 1.19.2 2024-01-02 12:01:58 +07:00
34a9bfd48a
Merge branch '1.19.4' into 1.19.3 2024-01-02 12:01:48 +07:00
7f15ae6a3a
Merge branch '1.20.1' into 1.19.4 2024-01-02 12:01:30 +07:00
edea36a8a6
Merge branch '1.20.2' into 1.20.1 2024-01-02 12:00:12 +07:00
477f9c3a67
Re-enable JEI and Jade 2024-01-02 11:35:45 +07:00
f183e2a008
Some logic fixups to creative menus 2024-01-02 11:35:15 +07:00
2220a7039f
Make mod actually run 2024-01-02 11:31:41 +07:00
fa67353eae
Add one more workaround for old creative tabs 2024-01-02 11:18:24 +07:00
da901cee87
Make mod compile against 1.19.2 2024-01-02 11:07:50 +07:00
c1d6f7c061
More backporting 2024-01-02 01:09:49 +07:00
1fa988e5fd
More backporting 2024-01-02 01:03:09 +07:00
11e66d50a4
Make main source set compile against 1.19.2 2024-01-02 00:56:27 +07:00
e00f79c736
More backporting 2024-01-02 00:33:01 +07:00
09f4db3fa9
More backporting 2024-01-02 00:24:18 +07:00
3fc9435259
Some backporting 2024-01-01 23:45:19 +07:00
d24a72d435
Downgrade dependencies 2024-01-01 23:11:41 +07:00
9956aa1ba4
Merge branch '1.19.3' into 1.19.2 2024-01-01 23:06:05 +07:00
036de121c7
Revert "DBot — Сегодня, в 7:53"
This reverts commit 8abb4e1598.

Revert "бакпорт изменений curios под смачный пердёж"

This reverts commit 1cbf73cdfd.

Revert "помогите"

This reverts commit b97e18ca5f.

Revert "DBotThePony — Сегодня, в 17:11"

This reverts commit 0da87980f7.

Revert "android health bar + 1px wider energy bar"

This reverts commit cbaf89d4a7.

Revert "Resolve conflicts between 1.19.3 code and 1.19.2 code"

This reverts commit 006cbc75e3.

Revert "Add missing import"

This reverts commit 275e340243.

Revert "Multi packet mattery registry sync"

This reverts commit 3dcaed64cd.

Revert "Increase (de)compress buffer sizes"

This reverts commit 04a5e87fec.

Revert "Compress matter registry packet"

This reverts commit 36c14be025.

Revert "Payload may not be larger than 1048576 bytes"

This reverts commit 26a064fbe2.
2024-01-01 23:05:36 +07:00
20469a14dd
:wine: 2024-01-01 22:53:51 +07:00
8a891e6ffb
Merge branch '1.19.4' into 1.19.3 2024-01-01 22:44:09 +07:00
ad76b4cabc
Fix tooltips being wrongly positioned 2024-01-01 22:41:58 +07:00
9cf66e443e
Fix items being rendered with 1 pixel offset 2024-01-01 22:24:15 +07:00
2506f0fe0e
Fix missed translatable contents 2024-01-01 22:17:23 +07:00
2aa084290b
Make mod compile against 1.19.3 2024-01-01 22:15:32 +07:00
b9f6b65900
Make main source set compile against 1.19.3 2024-01-01 22:12:39 +07:00
41ce2841b1
More backporting 2024-01-01 22:04:53 +07:00
a5ba27cf63
More backporting 2024-01-01 22:04:26 +07:00
7b415fbce3
More backporting 2024-01-01 22:01:57 +07:00
2a117a540e
More backporting 2024-01-01 21:07:43 +07:00
df15bd2f69
More backporting 2024-01-01 17:55:27 +07:00
3dab053420
Merge branch '1.19.4' into 1.19.3 2024-01-01 17:31:45 +07:00
7258e1e4d3
Merge branch '1.20.1' into 1.19.4 2024-01-01 17:31:35 +07:00
34ef50f6ee
Merge branch '1.20.2' into 1.20.1 2024-01-01 17:31:29 +07:00
4c5c2362ce
Merge branch '1.20.2' into 1.20.1 2024-01-01 17:29:28 +07:00
0a5ae54614
Some backporting 2024-01-01 17:18:57 +07:00
45dd3e5c4b
Downgrade dependencies 2024-01-01 17:02:19 +07:00
5ad9d49537
Merge branch '1.20.1' into 1.19.4 2024-01-01 16:51:04 +07:00
54fa8a252e
Merge branch '1.20.2' into 1.20.1 2024-01-01 16:51:04 +07:00
4e3ca82fc7
Destroy cables on piston push instead of block 2024-01-01 16:43:11 +07:00
d84af00876
Merge branch '1.20.1' into 1.19.4 2024-01-01 16:41:39 +07:00
a9cb2db3b4
Merge branch '1.20.2' into 1.20.1 2024-01-01 16:38:01 +07:00
454e4f6a63
Merge branch '1.20.1' into 1.19.4 2024-01-01 15:47:43 +07:00
6dbd942626
Merge branch 'master' into 1.19.4 2024-01-01 15:47:20 +07:00
748a232569
Merge branch 'master' into 1.20.1 2024-01-01 15:45:06 +07:00
da4c1108c2
Fix slot panel quick move display 2024-01-01 14:45:37 +07:00
c4bcab44e4
Merge branch '1.20.1' into 1.19.4 2024-01-01 14:24:59 +07:00
8e469c309d
Make datagen run? 2024-01-01 14:23:28 +07:00
f3bf84a7a2
Make mod compile against 1.19.4 2024-01-01 12:19:07 +07:00
b6643a6dd3
Make main source set compile against 1.19.4 2024-01-01 12:10:02 +07:00
31268e33ef
Merge branch 'master' into 1.19.4 2024-01-01 12:01:33 +07:00
86c426a504
Merge branch 'master' into 1.20.1 2024-01-01 11:45:14 +07:00
afe7d698c8
More backporting 2024-01-01 11:39:30 +07:00
0bcc078fe9
More backporting 2024-01-01 11:19:20 +07:00
e3e02dbad2
More backporting 2024-01-01 03:28:59 +07:00
e563b85946
Some backporting 2024-01-01 03:22:05 +07:00
cc82146f0a
Remove import 2024-01-01 03:00:55 +07:00
f4ec4c9066
Merge branch '1.20.1' into 1.19.4 2024-01-01 02:57:10 +07:00
108b49bedb
Merge branch 'master' into 1.20.1 2024-01-01 02:55:55 +07:00
1a5a9a6303
Use curseforge curios version 2024-01-01 01:59:34 +07:00
bf46ac0647
Downgrade dependencies 2024-01-01 01:54:17 +07:00
71850b38e5
Merge branch 'master' into 1.20.1 2024-01-01 00:58:18 +07:00
796f29127f
Merge branch 'master' into 1.20.1 2024-01-01 00:13:22 +07:00
8c43a3ec6d
Merge branch 'master' into 1.20.1 2023-12-31 23:18:46 +07:00
477e782c7c
*french disappointment* 2023-12-31 22:44:28 +07:00
65cf8bf9df
Fixes to data loading 2023-12-31 22:43:02 +07:00
e5a982ae13
Caused by: java.lang.invoke.LambdaConversionException: Invalid receiver type int; not a subtype of implementation type class java.lang.Integer 2023-12-31 22:25:55 +07:00
f942093e4f
Don't embed condition json by default 2023-12-31 22:23:16 +07:00
5d15611f84
Update mods.toml 2023-12-31 22:20:48 +07:00
1803d687ab
Make mod compile against 1.20.1 2023-12-31 22:18:43 +07:00
347be35184
Make main source set compile 2023-12-31 22:08:15 +07:00
aa0a283e06
More backporting 2023-12-31 21:40:54 +07:00
98fcacc9a8
More backporting 2023-12-31 21:14:32 +07:00
422ae92303
More backporting 2023-12-31 21:02:52 +07:00
7683cacc29
More backporting 2023-12-31 20:42:20 +07:00
520112df77
Backport MCriterionTrigger to 1.20.1 2023-12-31 20:29:57 +07:00
5453c8c793
Merge branch 'master' into 1.20.1 2023-12-31 20:25:03 +07:00
3c5ea937a5
More backporting 2023-12-31 18:23:07 +07:00
f16483d7c0
Some recipe backporting 2023-12-31 17:46:56 +07:00
8072a7b135
Don't check for "chunk send" status because it is already sent during event fire 2023-12-31 17:08:45 +07:00
44c6d0c0cf
Merge branch 'master' into 1.20.1 2023-12-31 17:02:21 +07:00
27dce0bd31
Downgrade dependencies 2023-12-31 12:54:59 +07:00
8abb4e1598
DBot — Сегодня, в 7:53
Замени в коде parallelstream на stream
2023-06-11 08:00:48 +03:00
1cbf73cdfd
бакпорт изменений curios под смачный пердёж 2023-06-09 21:51:08 +03:00
b97e18ca5f
помогите 2023-06-07 10:05:54 +03:00
0da87980f7
DBotThePony — Сегодня, в 17:11
ах да
ты просил визуалку брони наноботов
так тыж сделал полоску хп, можно туда и наноботов влепить
:Pogomega:
2023-06-07 09:09:09 +03:00
cbaf89d4a7
android health bar + 1px wider energy bar 2023-06-07 09:07:16 +03:00
006cbc75e3
Resolve conflicts between 1.19.3 code and 1.19.2 code 2023-05-02 23:30:34 +07:00
275e340243
Add missing import 2023-05-02 23:26:28 +07:00
3dcaed64cd
Multi packet mattery registry sync 2023-05-02 23:20:06 +07:00
04a5e87fec
Increase (de)compress buffer sizes 2023-05-02 23:20:05 +07:00
36c14be025
Compress matter registry packet
# Conflicts:
#	src/main/kotlin/ru/dbotthepony/mc/otm/core/Ext.kt
#	src/main/kotlin/ru/dbotthepony/mc/otm/matter/IMatterValue.kt
#	src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt
2023-05-02 23:20:05 +07:00
26a064fbe2
Payload may not be larger than 1048576 bytes
# Conflicts:
#	src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt
2023-05-02 23:17:19 +07:00
1510 changed files with 25888 additions and 43533 deletions

2
.gitignore vendored
View File

@ -31,5 +31,3 @@ logs/
forge*changelog.txt forge*changelog.txt
shapegen_output.java shapegen_output.java
/runs
/.kotlin

View File

@ -1,17 +1,18 @@
# Overdrive That Matters # Overdrive That Matters
Minecraft tech-oriented mod with science fiction style, about matter, and energy, combined. Minecraft mod with science fiction style, about matter, and energy, combined.
### Required mods ### Required mods
* [Kotlin for Forge](https://www.curseforge.com/minecraft/mc-mods/kotlin-for-forge) or have Kotlin standard library in classpath (at least 2.0.0 is required) * [Kotlin for Forge](https://www.curseforge.com/minecraft/mc-mods/kotlin-for-forge) or have Kotlin standard library in classpath (at least 1.8.0 is required)
### Recommended mods ### Recommended mods
* [Ferrite Core](https://www.curseforge.com/minecraft/mc-mods/ferritecore), reduces memory usage * [Ferrite Core](https://www.curseforge.com/minecraft/mc-mods/ferritecore), reduces memory usage
* In case of Overdrive That Matters, ***greatly*** reduces JVM heap bloat caused by model data being duplicated * In case of Overdrive That Matters, ***greatly*** reduces JVM heap bloat caused by model data being duplicated
* Better Random
* Particle Collider, reduces world join time
### Mods with special compatibility code ### Mods with special compatibility code
@ -44,9 +45,9 @@ to avoid bloating git history with generated blobs.
## License ## License
Unless otherwise stated in [NOTICE](NOTICE.md), assets in mod are licensed under **2-Clause BSD** Unless otherwise stated in [NOTICE](NOTICE.md), material in mod is licensed under **2-Clause BSD**
Copyright 2021-Present DBotThePony, GearShocky, YuRaNnNzZZ, Overdrive That Matters Contributors Copyright 2021-Present DBotThePony, GearShocky, Overdrive That Matters Contributors
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

View File

@ -4,7 +4,6 @@ import java.util.Date
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream
import org.gradle.kotlin.dsl.accessors.runtime.addDependencyTo import org.gradle.kotlin.dsl.accessors.runtime.addDependencyTo
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
val mod_version: String by project val mod_version: String by project
val mc_version: String by project val mc_version: String by project
@ -13,15 +12,13 @@ val mod_id: String by project
val handle_deps: String by project val handle_deps: String by project
val use_commit_hash_in_version: String by project val use_commit_hash_in_version: String by project
val handleDeps = handle_deps.toBoolean() val handleDeps = handle_deps.toBoolean()
val caffeine_cache_version: String by project
plugins { plugins {
java java
kotlin kotlin
idea
`maven-publish` `maven-publish`
id("net.neoforged.gradle.userdev") id("net.minecraftforge.gradle")
id("net.neoforged.gradle.mixin") id("org.spongepowered.mixin")
} }
data class GitInfo(val version: String, val tag: String, val buildNumber: String) { data class GitInfo(val version: String, val tag: String, val buildNumber: String) {
@ -93,13 +90,13 @@ fun getCommitVersion(): GitInfo? {
return null return null
} }
java.toolchain.languageVersion.set(JavaLanguageVersion.of(21)) java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))
println("Targeting Java ${java.toolchain.languageVersion.get()}") println("Targeting Java ${java.toolchain.languageVersion.get()}")
tasks.withType(KotlinCompile::class.java) { tasks.withType(KotlinCompile::class.java) {
compilerOptions { kotlinOptions {
freeCompilerArgs = listOf("-Xjvm-default=all") freeCompilerArgs = listOf("-Xjvm-default=all")
jvmTarget.set(JvmTarget.JVM_21) jvmTarget = java.toolchain.languageVersion.get().toString()
} }
} }
@ -110,9 +107,7 @@ tasks.withType(JavaCompile::class.java) {
sourceSets { sourceSets {
create("data") { create("data") {
compileClasspath += sourceSets["main"].output compileClasspath += sourceSets["main"].output
compileClasspath += sourceSets["main"].compileClasspath
runtimeClasspath += sourceSets["main"].output runtimeClasspath += sourceSets["main"].output
runtimeClasspath += sourceSets["main"].runtimeClasspath
} }
this["main"].resources { this["main"].resources {
@ -123,7 +118,6 @@ sourceSets {
tasks.test { tasks.test {
useJUnitPlatform() useJUnitPlatform()
maxHeapSize = "4G"
} }
configurations { configurations {
@ -138,16 +132,13 @@ dependencies {
val mixin_version: String by project val mixin_version: String by project
val kommons_version: String by project val kommons_version: String by project
implementation("net.neoforged:neoforge:$forge_version") minecraft("net.minecraftforge:forge:$mc_version-$forge_version")
testImplementation("org.junit.jupiter:junit-jupiter:${jupiter_version}") testImplementation("org.junit.jupiter:junit-jupiter:${jupiter_version}")
implementation("thedarkcolour:kotlinforforge-neoforge:$kotlin_for_forge_version") implementation("thedarkcolour:kotlinforforge:$kotlin_for_forge_version")
jarJar(implementation("com.github.ben-manes.caffeine:caffeine:[$caffeine_cache_version,)")!!) jarJar("ru.dbotthepony.kommons:kommons-mc:[$kommons_version,)") { setTransitive(false) }
implementation("ru.dbotthepony.kommons:kommons-mc:[$kommons_version,)") { setTransitive(false) }
jarJar(implementation("ru.dbotthepony.kommons:kommons:[$kommons_version,)") { setTransitive(false) })
jarJar(implementation("ru.dbotthepony.kommons:kommons-gson:[$kommons_version,)") { setTransitive(false) })
jarJar(implementation("ru.dbotthepony.kommons:kommons-guava:[$kommons_version,)") { setTransitive(false) })
compileOnly("yalter.mousetweaks:MouseTweaks:2.23:api") compileOnly("yalter.mousetweaks:MouseTweaks:2.23:api")
annotationProcessor("org.spongepowered:mixin:${mixin_version}:processor") annotationProcessor("org.spongepowered:mixin:${mixin_version}:processor")
@ -159,83 +150,74 @@ dependencies {
val configured_id: String by project val configured_id: String by project
val curios_version: String by project val curios_version: String by project
val jei_mc_version: String by project val jei_mc_version: String by project
val curios_mc_version: String by project
val resourceful_lib_id: String by project val resourceful_lib_id: String by project
val resourceful_config_id: String by project val resourceful_config_id: String by project
val botarium_id: String by project val botarium_id: String by project
val ad_astra_id: String by project val ad_astra_id: String by project
val worldedit_id: String by project val worldedit_id: String by project
val item_borders_id: String by project
val iceberg_id: String by project
val prism_lib_id: String by project
val cloth_config_version: String by project
val condensed_creative_version: String by project
val mekanism_version: String by project
compileOnly("top.theillusivec4.curios:curios-neoforge:${curios_version}+${curios_mc_version}") compileOnly(fg.deobf("curse.maven:curios-309927:${curios_version}"))
implementation("curse.maven:cosmetic-armor-reworked-237307:$cosmetic_armor_reworked_id") compileOnly(fg.deobf("curse.maven:cosmetic-armor-reworked-237307:$cosmetic_armor_reworked_id"))
compileOnly("mezz.jei:jei-${jei_mc_version}-common-api:${jei_version}") compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-common-api:${jei_version}"))
compileOnly("mezz.jei:jei-${jei_mc_version}-neoforge-api:${jei_version}") compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge-api:${jei_version}"))
runtimeOnly("mezz.jei:jei-${jei_mc_version}-neoforge:${jei_version}") runtimeOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge:${jei_version}"))
// runtimeOnly("ru.dbotthepony:particle-collider:0.4.5") // runtimeOnly(fg.deobf("ru.dbotthepony:particle-collider:0.4.5"))
implementation("curse.maven:jade-324717:${jade_id}") implementation(fg.deobf("curse.maven:jade-324717:${jade_id}"))
//runtimeOnly("curse.maven:configured-457570:${configured_id}") implementation(fg.deobf("curse.maven:spit-it-out-857141:4888738"))
//runtimeOnly(fg.deobf("curse.maven:configured-457570:${configured_id}"))
compileOnly("curse.maven:resourceful-lib-570073:${resourceful_lib_id}") compileOnly(fg.deobf("curse.maven:resourceful-lib-570073:${resourceful_lib_id}"))
compileOnly("curse.maven:resourceful-config-714059:${resourceful_config_id}") compileOnly(fg.deobf("curse.maven:resourceful-config-714059:${resourceful_config_id}"))
compileOnly("curse.maven:botarium-704113:${botarium_id}") compileOnly(fg.deobf("curse.maven:botarium-704113:${botarium_id}"))
compileOnly("curse.maven:ad-astra-635042:${ad_astra_id}") compileOnly(fg.deobf("curse.maven:ad-astra-635042:${ad_astra_id}"))
runtimeOnly("curse.maven:worldedit-225608:${worldedit_id}") // runtimeOnly(fg.deobf("curse.maven:worldedit-225608:${worldedit_id}"))
runtimeOnly("me.shedaniel.cloth:cloth-config-neoforge:${cloth_config_version}") // runtimeOnly(fg.deobf("curse.maven:worldedit-225608:${worldedit_fileid}"))
implementation("io.wispforest:condensed_creative-neoforge:${condensed_creative_version}") // runtimeOnly(fg.deobf("at.ridgo8.moreoverlays:MoreOverlays-updated:${more_overlays_version}"))
compileOnly("curse.maven:item-borders-513769:${item_borders_id}") // runtimeOnly(fg.deobf("curse.maven:cyclops-core-232758:4392602"))
// implementation("curse.maven:item-borders-513769:${item_borders_id}") // runtimeOnly(fg.deobf("curse.maven:integrated-dynamics-236307:4391535"))
// runtimeOnly("curse.maven:iceberg-520110:${iceberg_id}") // runtimeOnly(fg.deobf("curse.maven:integrated-crafting-287357:4391487"))
// runtimeOnly("curse.maven:prism-lib-638111:${prism_lib_id}") // runtimeOnly(fg.deobf("curse.maven:integrated-terminals-295910:4400924"))
// runtimeOnly(fg.deobf("curse.maven:common-capabilities-247007:4391468"))
// runtimeOnly("curse.maven:worldedit-225608:${worldedit_fileid}") // runtimeOnly(fg.deobf("curse.maven:integrated-tunnels-251389:4344632"))
// runtimeOnly("at.ridgo8.moreoverlays:MoreOverlays-updated:${more_overlays_version}")
// runtimeOnly("curse.maven:cyclops-core-232758:4392602")
// runtimeOnly("curse.maven:integrated-dynamics-236307:4391535")
// runtimeOnly("curse.maven:integrated-crafting-287357:4391487")
// runtimeOnly("curse.maven:integrated-terminals-295910:4400924")
// runtimeOnly("curse.maven:common-capabilities-247007:4391468")
// runtimeOnly("curse.maven:integrated-tunnels-251389:4344632")
implementation("mekanism:Mekanism:${mc_version}-${mekanism_version}")
implementation("curse.maven:iron-chests-228756:5491156")
implementation("curse.maven:iron-shulker-boxes-314911:5491246")
} }
} }
configurations {
getByName("dataImplementation").extendsFrom(getByName("implementation"))
}
minecraft { minecraft {
accessTransformers { mappings("official", mc_version)
files("src/main/resources/META-INF/accesstransformer.cfg")
} copyIdeResources.set(true)
accessTransformer(file("src/main/resources/META-INF/accesstransformer.cfg"))
runs { runs {
configureEach { configureEach {
workingDirectory = project.file("run").absolutePath
// "SCAN": For mods scan. // "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events. // "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries. // "REGISTRYDUMP": For getting the contents of all registries.
systemProperty("forge.logging.markers", "REGISTRIES") property("forge.logging.markers", "REGISTRIES")
// Log4j console level // Log4j console level
systemProperty("forge.logging.console.level", "debug") property("forge.logging.console.level", "debug")
dependencies {
runtime("com.github.ben-manes.caffeine:caffeine:[$caffeine_cache_version,)")
}
} }
getByName("client") { create("client") {
mods {
create(mod_id) {
source(sourceSets["main"])
}
}
val usernameStream = FastByteArrayOutputStream() val usernameStream = FastByteArrayOutputStream()
val gotUsername = exec { val gotUsername = exec {
@ -248,32 +230,41 @@ minecraft {
val originalUsername = usernameStream.array.copyOfRange(0, usernameStream.length).toString(Charsets.UTF_8).trim() val originalUsername = usernameStream.array.copyOfRange(0, usernameStream.length).toString(Charsets.UTF_8).trim()
if (originalUsername.isNotEmpty()) { if (originalUsername.isNotEmpty()) {
programArguments.addAll("--username", originalUsername) args("--username", originalUsername)
} else { } else {
programArguments.addAll("--username", "Dev_${System.getProperty("user.name")}") args("--username", "Dev_${System.getProperty("user.name")}")
} }
} else { } else {
programArguments.addAll("--username", "Dev_${System.getProperty("user.name")}") args("--username", "Dev_${System.getProperty("user.name")}")
} }
} }
getByName("server") { create("server") {
programArguments.addAll("nogui") mods {
create(mod_id) {
source(sourceSets["main"])
}
}
args("nogui")
} }
getByName("data") { create("data") {
programArguments.addAll("--mod", mod_id, "--all", "--output", file("src/data/resources/").absolutePath, "--existing", file("src/main/resources/").absolutePath) args("--mod", mod_id, "--all", "--output", file("src/data/resources/"), "--existing", file("src/main/resources/"))
modSources(sourceSets["main"], sourceSets["data"]) mods {
create(mod_id) {
sources(sourceSets["main"], sourceSets["data"])
}
}
} }
} }
} }
mixin { mixin {
add(sourceSets.main.get(), "$mod_id.refmap.json")
config("$mod_id.mixins.json") config("$mod_id.mixins.json")
config("$mod_id.ironchest.mixins.json") config("$mod_id.ad_astra.mixins.json")
config("$mod_id.ironshulkerbox.mixins.json")
// config("$mod_id.ad_astra.mixins.json")
} }
repositories { repositories {
@ -287,6 +278,7 @@ repositories {
content { content {
includeGroup("yalter.mousetweaks") includeGroup("yalter.mousetweaks")
includeGroup("mekanism")
includeGroup("lain.mods.cos") includeGroup("lain.mods.cos")
includeGroup("at.ridgo8.moreoverlays") includeGroup("at.ridgo8.moreoverlays")
includeGroup("ru.dbotthepony") includeGroup("ru.dbotthepony")
@ -295,15 +287,6 @@ repositories {
} }
} }
maven(url = "https://maven.neoforged.net/releases") {
name = "Neoforge"
content {
includeGroup("net.neoforged.gradle")
includeGroup("net.neoforged")
}
}
maven { maven {
name = "Kotlin for Forge" name = "Kotlin for Forge"
url = uri("https://thedarkcolour.github.io/KotlinForForge/") url = uri("https://thedarkcolour.github.io/KotlinForForge/")
@ -325,37 +308,13 @@ repositories {
} }
maven { maven {
url = uri("https://maven.octo-studios.com/releases") url = uri("https://maven.theillusivec4.top/")
content { content {
includeGroup("top.theillusivec4.curios") includeGroup("top.theillusivec4.curios")
} }
} }
maven {
url = uri("https://maven.shedaniel.me/")
content {
includeGroup("me.shedaniel.cloth")
}
}
maven {
url = uri("https://maven.wispforest.io")
content {
includeGroup("io.wispforest")
}
}
maven {
url = uri("https://modmaven.dev/")
content {
includeGroup("mekanism")
}
}
// mavenCentral() // mavenCentral()
} }
@ -373,7 +332,10 @@ fun org.gradle.jvm.tasks.Jar.attachManifest() {
} }
} }
// Example configuration to allow publishing using the maven-publish plugin
// This is the preferred method to reobfuscate your jar file
tasks.jar.configure { tasks.jar.configure {
finalizedBy("reobfJar")
attachManifest() attachManifest()
archiveClassifier.set("slim") archiveClassifier.set("slim")
archiveVersion.set(gitVersion.jarName) archiveVersion.set(gitVersion.jarName)
@ -384,18 +346,15 @@ tasks.jarJar.configure {
archiveVersion.set(gitVersion.jarName) archiveVersion.set(gitVersion.jarName)
} }
tasks.assemble.configure {
dependsOn(tasks.jarJar)
}
tasks.withType(ProcessResources::class.java) { tasks.withType(ProcessResources::class.java) {
val replaceProperties = mapOf( val replaceProperties = mapOf(
"mc_version" to mc_version, "mc_version" to mc_version,
"mod_id" to mod_id,
"mod_version" to gitVersion.modVersion "mod_version" to gitVersion.modVersion
) )
inputs.properties(replaceProperties) inputs.properties(replaceProperties)
filesMatching(arrayListOf("META-INF/neoforge.mods.toml", "pack.mcmeta")) { filesMatching(arrayListOf("META-INF/mods.toml", "pack.mcmeta")) {
expand(replaceProperties) expand(replaceProperties)
} }
} }
@ -405,6 +364,12 @@ tasks {
archiveClassifier.set("sources") archiveClassifier.set("sources")
from(sourceSets.main.get().allSource) from(sourceSets.main.get().allSource)
} }
create("deobfJar", org.gradle.jvm.tasks.Jar::class.java) {
archiveClassifier.set("deobf")
from(sourceSets.main.get().output)
attachManifest()
}
} }
if (project.hasProperty("mavenUser") && project.hasProperty("mavenPassword") && project.hasProperty("mavenUrl")) { if (project.hasProperty("mavenUser") && project.hasProperty("mavenPassword") && project.hasProperty("mavenUrl")) {
@ -418,6 +383,7 @@ if (project.hasProperty("mavenUser") && project.hasProperty("mavenPassword") &&
// from(components["java"]) // from(components["java"])
artifact(tasks["jar"]) artifact(tasks["jar"])
artifact(tasks["sourceJar"]) artifact(tasks["sourceJar"])
artifact(tasks["deobfJar"])
version = gitVersion.publishVersion version = gitVersion.publishVersion
@ -446,10 +412,3 @@ if (project.hasProperty("mavenUser") && project.hasProperty("mavenPassword") &&
} }
} }
} }
idea {
module {
isDownloadSources = true
isDownloadJavadoc = true
}
}

View File

@ -1,72 +0,0 @@
const args = process.argv.slice(2)
if (args.length < 2) {
console.error('Usage: node base_with_mask.js <base_name> <mask_name> [subfolder]\n')
console.error('If subfolder specified, resulting file name will contain only color name\n')
console.error('Subfolder is relative to base texture path\n')
process.exit(2)
}
const fs = require('fs')
const {colorsWithWhite, rootFolder, splitName, getSize} = require('./include.js')
const child_process = require('child_process');
(async function() {
const baseTexture = args[0]
const maskTexture = args[1]
const subfolder = args[2] ?? ''
const fBase = `${rootFolder}${baseTexture}.png`
const fMask = `${rootFolder}${maskTexture}.png`
if (!fs.existsSync(fBase)) {
process.stderr.write(`${fBase} does not exist\n`)
process.exit(1)
}
if (!fs.existsSync(fMask)) {
process.stderr.write(`${fMask} does not exist\n`)
process.exit(1)
}
const [fileName, _, fullBaseFolder] = splitName(baseTexture)
const bSize = (await getSize(fBase))[2]
const mSize = (await getSize(fMask))[2]
if (subfolder !== '') {
fs.mkdirSync(`${fullBaseFolder}/${subfolder}`, {recursive: true})
}
if (bSize != mSize) {
process.stderr.write(`${fBase} has size of ${bSize}, ${fMask} has size of ${mSize}!\n`)
process.exit(3)
}
for (const [name, _, xc] of colorsWithWhite) {
const outputFilename = subfolder === '' ? `${fullBaseFolder}/${fileName}_${name}.png` : `${fullBaseFolder}/${subfolder}/${name}.png`
const magick = child_process.spawn('magick', [
'convert',
fBase,
'(',
fMask,
'-size', bSize,
xc,
'-channel', 'rgb',
'-compose', 'Multiply',
'-composite',
')',
'-compose', 'Over',
'-composite',
outputFilename])
magick.stdout.pipe(process.stdout)
magick.stderr.pipe(process.stderr)
}
})();

View File

@ -1,4 +0,0 @@
#!/bin/bash
node ./base_with_mask.js block/decorative/computer_base block/decorative/computer_base_mask computer_base
node ./base_with_mask.js block/decorative/computer_screen block/decorative/computer_screen_mask computer_screen

View File

@ -1,3 +0,0 @@
#!/bin/bash
node ./base_with_mask.js block/essence_storage block/essence_storage_mask essence_storage

View File

@ -1,76 +0,0 @@
const colors = [
['orange', [245, 116, 16]],
['magenta', [186, 63, 175]],
['light_blue', [59, 180, 219]],
['yellow', [252, 199, 36]],
['lime', [111, 187, 24]],
['pink', [243, 139, 170]],
['gray', [62, 66, 70]],
['light_gray', [140, 140, 131]],
['cyan', [22, 134, 145]],
['purple', [116, 38, 169]],
['blue', [51, 53, 155]],
['brown', [114, 71, 40]],
['green', [84, 109, 28]],
['red', [156, 37, 34]],
['black', [31, 31, 35]],
]
const white = ['white', [235, 235, 235]]
const colorsWithWhite = [...colors]
colorsWithWhite.push(white)
function addRgbString(values) {
for (const row of values) {
const rgb = row[1]
row.push(`xc:rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`)
}
}
addRgbString(colors)
addRgbString(colorsWithWhite)
const rootFolder = '../src/main/resources/assets/overdrive_that_matters/textures/'
const child_process = require('child_process')
process.stdout.setMaxListeners(900)
process.stderr.setMaxListeners(900)
async function getSize(path) {
const identify = child_process.spawn('magick', [
'identify',
path,
])
identify.stderr.pipe(process.stderr)
const chunks = []
identify.stdout.on('data', (a) => chunks.push(a))
await new Promise((resolve) => {
identify.on('close', () => resolve())
})
const chunk = chunks[0].toString('utf-8')
const size = chunk.match(/PNG ([0-9]+)x([0-9]+)/)
const width = parseInt(size[1])
const height = parseInt(size[2])
return [width, height, `${width}x${height}`]
}
function splitName(name) {
const splitted = name.split('/')
const fileName = splitted.pop()
const baseFolder = splitted.join('/')
const fullBaseFolder = `${rootFolder}${baseFolder}`
return [fileName, baseFolder, fullBaseFolder, fileName.indexOf('_white') == -1 ? colorsWithWhite : colors]
}
exports.colors = colors
exports.colorsWithWhite = colorsWithWhite
exports.rootFolder = rootFolder
exports.splitName = splitName
exports.getSize = getSize

View File

@ -1,5 +0,0 @@
#!/bin/bash
node ./base_with_mask.js block/matter_replicator_base block/matter_replicator_base_mask matter_replicator_base
node ./base_with_mask.js block/matter_replicator block/matter_replicator_mask matter_replicator

View File

@ -1,4 +0,0 @@
#!/bin/bash
node ./base_with_mask.js block/tritanium_anvil block/tritanium_anvil_mask tritanium_anvil
node ./base_with_mask.js block/tritanium_anvil_top block/tritanium_anvil_top_mask tritanium_anvil_top

View File

@ -1,5 +0,0 @@
#!/bin/bash
node ./base_with_mask.js block/decorative/tritanium_door_top block/decorative/tritanium_door_color_top
node ./base_with_mask.js block/decorative/tritanium_door_bottom block/decorative/tritanium_door_color_bottom

56
color_doors.js Normal file
View File

@ -0,0 +1,56 @@
'use strict';
const fs = require('fs')
const root_main = './src/main/resources/assets/overdrive_that_matters/textures/block/decorative/'
const child_process = require('child_process')
const colors = [
['orange', [245, 116, 16]],
['magenta', [186, 63, 175]],
['light_blue', [59, 180, 219]],
['yellow', [252, 199, 36]],
['lime', [111, 187, 24]],
['pink', [243, 139, 170]],
['gray', [62, 66, 70]],
['light_gray', [140, 140, 131]],
['cyan', [22, 134, 145]],
['purple', [116, 38, 169]],
['blue', [51, 53, 155]],
['brown', [114, 71, 40]],
['green', [84, 109, 28]],
['red', [156, 37, 34]],
['black', [31, 31, 35]],
['white', [235, 235, 235]],
]
process.stderr.setMaxListeners(40)
process.stdout.setMaxListeners(40);
(async function() {
for (const [base, overlay, nameBase] of [['tritanium_door_base_top', 'tritanium_door_color_top', 'tritanium_door_top'], ['tritanium_door_base_bottom', 'tritanium_door_color_bottom', 'tritanium_door_bottom']]) {
for (const [name, rgb] of colors) {
const magick = child_process.spawn('magick', [
'convert',
`${root_main}${base}.png`,
'(',
`${root_main}${overlay}.png`,
'-size', '16x16',
`xc:rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`,
'-channel', 'rgb',
'-compose', 'Multiply',
'-composite',
')',
'-compose', 'Over',
'-composite',
`${root_main}/${nameBase}_${name}.png`])
magick.stdout.pipe(process.stdout)
magick.stderr.pipe(process.stderr)
}
}
})()

View File

@ -6,44 +6,34 @@ kotlin.stdlib.default.dependency=false
org.gradle.vfs.watch=true org.gradle.vfs.watch=true
mod_id=overdrive_that_matters mod_id=overdrive_that_matters
mod_version=1.5 mod_version=1.4
use_commit_hash_in_version=true use_commit_hash_in_version=true
mc_version=1.21.1 mc_version=1.19.2
jei_mc_version=1.21.1 jei_mc_version=1.19.2
curios_mc_version=1.21 curios_mc_version=1.19.2
forge_gradle_version=7.0.153 forge_gradle_version=[6.0.14,6.2)
forge_version=21.1.21 forge_version=43.3.7
mixingradle_version=0.7.33 mixingradle_version=0.7.33
mixin_version=0.8.5 mixin_version=0.8.5
neogradle.subsystems.parchment.minecraftVersion=1.21.1 kommons_version=3.0.2
neogradle.subsystems.parchment.mappingsVersion=2024.11.17
kommons_version=3.9.1 jei_version=11.6.0.1018
caffeine_cache_version=3.1.5
jei_version=19.16.4.171
jupiter_version=5.9.2 jupiter_version=5.9.2
curios_version=9.0.5 curios_version=4985476
cosmetic_armor_reworked_id=5610814 cosmetic_armor_reworked_id=4016732
ad_astra_id=4594155 ad_astra_id=4643668
botarium_id=4594094 botarium_id=4306551
resourceful_lib_id=4598948 resourceful_lib_id=4477753
resourceful_config_id=4576455 resourceful_config_id=4444198
jade_id=5591256 jade_id=4914105
configured_id=4462894 configured_id=4462894
worldedit_id=5830452 worldedit_id=3922622
item_borders_id=5591010
iceberg_id=5750025
prism_lib_id=5625115
cloth_config_version=15.0.130
condensed_creative_version=3.4.1+1.21
mekanism_version=10.7.7.64
kotlin_for_forge_version=5.5.0 kotlin_for_forge_version=3.12.0
kotlin_version=2.0.10 kotlin_version=1.8.21
handle_deps=true handle_deps=true

Binary file not shown.

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000 networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

7
gradlew vendored
View File

@ -85,6 +85,9 @@ done
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@ -194,10 +197,6 @@ if "$cygwin" || "$msys" ; then
done done
fi fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command; # Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in # shell script including quotes and variable substitutions, so put them in

View File

@ -4,7 +4,6 @@ println("Running with Java ${System.getProperty("java.version")} on JVM: ${Syste
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
maven(url = "https://maven.neoforged.net/releases")
} }
} }
@ -15,12 +14,20 @@ plugins {
buildscript { buildscript {
repositories { repositories {
// These repositories are only for Gradle plugins, put any other repositories in the repository block further below // These repositories are only for Gradle plugins, put any other repositories in the repository block further below
maven(url = "https://maven.neoforged.net/releases") { maven(url = "https://maven.minecraftforge.net") {
name = "Neoforge" name = "Minecraft Forge"
content { content {
includeGroup("net.neoforged.gradle") includeGroup("net.minecraftforge.gradle")
includeGroup("net.neoforged") includeGroup("net.minecraftforge")
}
}
maven(url = "https://repo.spongepowered.org/repository/maven-public/") {
name = "Spongepowered"
content {
includeGroup("org.spongepowered")
} }
} }
@ -32,9 +39,9 @@ buildscript {
val forge_gradle_version: String by settings val forge_gradle_version: String by settings
val mixingradle_version: String by settings val mixingradle_version: String by settings
classpath(group = "net.neoforged.gradle", name = "userdev", version = forge_gradle_version) classpath(group = "net.minecraftforge.gradle", name = "ForgeGradle", version = forge_gradle_version)
classpath(group = "net.neoforged.gradle", name = "mixin", version = forge_gradle_version)
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}")
classpath("org.spongepowered:mixingradle:${mixingradle_version}")
classpath(group = "org.gradle.toolchains", name = "foojay-resolver", version = "0.5.0") classpath(group = "org.gradle.toolchains", name = "foojay-resolver", version = "0.5.0")
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,56 +0,0 @@
package ru.dbotthepony.mc.otm.datagen
import net.minecraft.data.worldgen.BootstrapContext
import net.minecraft.tags.DamageTypeTags
import net.minecraft.world.damagesource.DamageEffects
import net.minecraft.world.damagesource.DamageScaling
import net.minecraft.world.damagesource.DamageType
import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider
import ru.dbotthepony.mc.otm.registry.MDamageTypes
fun registerDamageTypes(context: BootstrapContext<DamageType>) {
context.register(MDamageTypes.EXOPACK_PROBE, DamageType("otm_exopack_probe", DamageScaling.NEVER, 4.0f))
context.register(MDamageTypes.BECOME_ANDROID, DamageType("otm_become_android", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.BECOME_HUMANE, DamageType("otm_become_humane", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.EVENT_HORIZON, DamageType("otm_event_horizon", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.HAWKING_RADIATION, DamageType("otm_hawking_radiation", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.EMP, DamageType("otm_emp", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.SHOCKWAVE, DamageType("otm_shockwave", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.PLASMA, DamageType("otm_plasma", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.COSMIC_RAYS, DamageType("otm_cosmic_rays", DamageScaling.NEVER, 0f))
context.register(MDamageTypes.EXPLOSIVE_HAMMER, DamageType("otm_explosive_hammer", DamageScaling.NEVER, 0.1f))
context.register(MDamageTypes.HAMMER_NAIL, DamageType("otm_hammer_nail", DamageScaling.NEVER, 0.1f))
context.register(MDamageTypes.ANDROID_DISCHARGE, DamageType("otm_android_discharge", DamageScaling.NEVER, 4.0f))
context.register(MDamageTypes.NOT_NORMAL_PILL, DamageType("otm_not_normal_pill", DamageScaling.NEVER, 0f, DamageEffects.DROWNING))
}
fun registerDamageTypeTags(provider: TagsProvider.Delegate<DamageType>) {
val ignoreArmor = provider.Appender(DamageTypeTags.BYPASSES_ARMOR)
val ignoreMagic = provider.Appender(DamageTypeTags.BYPASSES_ENCHANTMENTS)
val ignoreInvl = provider.Appender(DamageTypeTags.BYPASSES_INVULNERABILITY)
ignoreArmor
.add(MDamageTypes.EXOPACK_PROBE)
.add(MDamageTypes.BECOME_ANDROID)
.add(MDamageTypes.BECOME_HUMANE)
.add(MDamageTypes.EVENT_HORIZON)
.add(MDamageTypes.EMP)
.add(MDamageTypes.SHOCKWAVE)
.add(MDamageTypes.COSMIC_RAYS)
.add(MDamageTypes.ANDROID_DISCHARGE)
.add(MDamageTypes.NOT_NORMAL_PILL)
ignoreMagic
.add(MDamageTypes.EXOPACK_PROBE)
.add(MDamageTypes.BECOME_ANDROID)
.add(MDamageTypes.BECOME_HUMANE)
.add(MDamageTypes.COSMIC_RAYS)
.add(MDamageTypes.ANDROID_DISCHARGE)
.add(MDamageTypes.NOT_NORMAL_PILL)
ignoreInvl
.add(MDamageTypes.BECOME_HUMANE)
.add(MDamageTypes.BECOME_ANDROID)
.add(MDamageTypes.ANDROID_DISCHARGE)
.add(MDamageTypes.NOT_NORMAL_PILL)
}

View File

@ -1,8 +1,8 @@
package ru.dbotthepony.mc.otm.datagen package ru.dbotthepony.mc.otm.datagen
import net.minecraft.core.RegistrySetBuilder import net.minecraft.advancements.Advancement
import net.minecraft.core.registries.Registries import net.minecraft.core.Registry
import net.minecraft.resources.ResourceKey import net.minecraft.data.advancements.AdvancementProvider
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
@ -15,29 +15,28 @@ import net.minecraft.world.level.block.TrapDoorBlock
import net.minecraft.world.level.block.state.properties.DoorHingeSide import net.minecraft.world.level.block.state.properties.DoorHingeSide
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
import net.minecraft.world.level.block.state.properties.Half import net.minecraft.world.level.block.state.properties.Half
import net.neoforged.bus.api.SubscribeEvent import net.minecraftforge.client.model.generators.ModelFile
import net.neoforged.fml.common.EventBusSubscriber import net.minecraftforge.common.data.ExistingFileHelper
import net.neoforged.neoforge.client.model.generators.ModelFile import net.minecraftforge.eventbus.api.SubscribeEvent
import net.neoforged.neoforge.common.data.AdvancementProvider import net.minecraftforge.fml.common.Mod
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider import net.minecraftforge.data.event.GatherDataEvent
import net.neoforged.neoforge.data.event.GatherDataEvent import net.minecraftforge.registries.ForgeRegistries
import net.neoforged.neoforge.registries.NeoForgeRegistries
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.player.android.AndroidResearchDataProvider import ru.dbotthepony.mc.otm.android.AndroidResearchDataProvider
import ru.dbotthepony.mc.otm.util.ResourceLocation import ru.dbotthepony.mc.otm.block.*
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.datagen.blocks.BatteryBankProvider import ru.dbotthepony.mc.otm.datagen.blocks.BatteryBankProvider
import ru.dbotthepony.mc.otm.datagen.blocks.MatterBankProvider import ru.dbotthepony.mc.otm.datagen.blocks.MatterBankProvider
import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider
import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider
import ru.dbotthepony.mc.otm.datagen.lang.AddEnglishLanguage import ru.dbotthepony.mc.otm.datagen.lang.AddEnglishLanguage
import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.registry.*
import ru.dbotthepony.mc.otm.util.GJRAND64RandomSource import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.data.FlywheelMaterialDataProvider
import ru.dbotthepony.mc.otm.datagen.advancements.addAdvancements import ru.dbotthepony.mc.otm.datagen.advancements.addAdvancements
import ru.dbotthepony.mc.otm.datagen.advancements.addAndroidAdvancements import ru.dbotthepony.mc.otm.datagen.advancements.addAndroidAdvancements
import ru.dbotthepony.mc.otm.datagen.advancements.addMachineAdvancements
import ru.dbotthepony.mc.otm.datagen.blocks.addBlockModels import ru.dbotthepony.mc.otm.datagen.blocks.addBlockModels
import ru.dbotthepony.mc.otm.datagen.blocks.addBlockStates import ru.dbotthepony.mc.otm.datagen.blocks.addBlockStates
import ru.dbotthepony.mc.otm.datagen.blocks.addComplexBlockStates import ru.dbotthepony.mc.otm.datagen.blocks.addComplexBlockStates
@ -48,31 +47,19 @@ import ru.dbotthepony.mc.otm.datagen.loot.*
import ru.dbotthepony.mc.otm.datagen.loot.LootModifiers import ru.dbotthepony.mc.otm.datagen.loot.LootModifiers
import ru.dbotthepony.mc.otm.datagen.recipes.* import ru.dbotthepony.mc.otm.datagen.recipes.*
import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider
import ru.dbotthepony.mc.otm.datagen.tags.addConstructionTags
import ru.dbotthepony.mc.otm.datagen.tags.addDyeTags
import ru.dbotthepony.mc.otm.datagen.tags.addEquipmentTags
import ru.dbotthepony.mc.otm.datagen.tags.addMineableTags
import ru.dbotthepony.mc.otm.datagen.tags.addResourceTags
import ru.dbotthepony.mc.otm.datagen.tags.addStructureTags
import ru.dbotthepony.mc.otm.datagen.tags.addSuspiciousTags
import ru.dbotthepony.mc.otm.datagen.tags.addTags import ru.dbotthepony.mc.otm.datagen.tags.addTags
import ru.dbotthepony.mc.otm.matter.MatterDataProvider import ru.dbotthepony.mc.otm.matter.MatterDataProvider
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock
import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock
import java.util.function.Consumer
import kotlin.properties.Delegates import kotlin.properties.Delegates
internal fun modLocation(string: String) = ResourceLocation(DataGen.MOD_ID, string) internal fun modLocation(string: String) = ResourceLocation(DataGen.MOD_ID, string)
internal fun modLootTable(string: String) = ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation(DataGen.MOD_ID, string))
@EventBusSubscriber(modid = DataGen.MOD_ID, bus = EventBusSubscriber.Bus.MOD) @Mod.EventBusSubscriber(modid = DataGen.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
object DataGen { object DataGen {
const val MOD_ID = OverdriveThatMatters.MOD_ID const val MOD_ID = OverdriveThatMatters.MOD_ID
// for things which need to be random (e.g. UUIDs),
// so builds continue to be reproducible
val random = GJRAND64RandomSource(822393940230754753L, -2728812999467395658L)
var blockModelProvider: MatteryBlockModelProvider by WriteOnce() var blockModelProvider: MatteryBlockModelProvider by WriteOnce()
private set private set
var itemModelProvider: MatteryItemModelProvider by WriteOnce() var itemModelProvider: MatteryItemModelProvider by WriteOnce()
@ -91,19 +78,12 @@ object DataGen {
private set private set
var matterData: MatterDataProvider by WriteOnce() var matterData: MatterDataProvider by WriteOnce()
private set private set
var flywheelData: FlywheelMaterialDataProvider by WriteOnce()
private set
fun decorativeCubeAll(vararg blocks: Block) { fun decorativeCubeAll(vararg blocks: Block) {
blockModelProvider.decorativeCubeAll(*blocks) blockModelProvider.decorativeCubeAll(*blocks)
blockStateProvider.simpleBlockM(*blocks) blockStateProvider.simpleBlockM(*blocks)
} }
fun decorativeCubeAllCutout(vararg blocks: Block) {
blockModelProvider.decorativeCubeAllCutout(*blocks)
blockStateProvider.simpleBlockM(*blocks)
}
fun decorativeCubeAll(subdir: String, vararg blocks: Block) { fun decorativeCubeAll(subdir: String, vararg blocks: Block) {
blockModelProvider.decorativeCubeAll(subdir, *blocks) blockModelProvider.decorativeCubeAll(subdir, *blocks)
blockStateProvider.simpleBlockM(*blocks) blockStateProvider.simpleBlockM(*blocks)
@ -440,7 +420,7 @@ object DataGen {
} }
} }
fun decoratives(list: ColoredDecorativeBlock<*>) { fun decoratives(list: ColoredDecorativeBlock) {
for (block in list.blocks.values) { for (block in list.blocks.values) {
decorativeCubeAll(block) decorativeCubeAll(block)
} }
@ -450,7 +430,7 @@ object DataGen {
} }
} }
fun decoratives(list: DecorativeBlock<*>) { fun decoratives(list: DecorativeBlock) {
for (block in list.allBlocks.values) { for (block in list.allBlocks.values) {
decorativeCubeAll(block) decorativeCubeAll(block)
} }
@ -460,7 +440,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, list: ColoredDecorativeBlock<*>) { fun decoratives(subdir: String, list: ColoredDecorativeBlock) {
for (block in list.blocks.values) { for (block in list.blocks.values) {
decorativeCubeAll(subdir, block) decorativeCubeAll(subdir, block)
} }
@ -470,7 +450,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, list: DecorativeBlock<*>) { fun decoratives(subdir: String, list: DecorativeBlock) {
for (block in list.allBlocks.values) { for (block in list.allBlocks.values) {
decorativeCubeAll(subdir, block) decorativeCubeAll(subdir, block)
} }
@ -480,7 +460,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, suffix: String, list: ColoredDecorativeBlock<*>) { fun decoratives(subdir: String, suffix: String, list: ColoredDecorativeBlock) {
for (block in list.blocks.values) { for (block in list.blocks.values) {
decorativeCubeAll(subdir, suffix, block) decorativeCubeAll(subdir, suffix, block)
} }
@ -490,7 +470,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, suffix: String, list: DecorativeBlock<*>) { fun decoratives(subdir: String, suffix: String, list: DecorativeBlock) {
for (block in list.allBlocks.values) { for (block in list.allBlocks.values) {
decorativeCubeAll(subdir, suffix, block) decorativeCubeAll(subdir, suffix, block)
} }
@ -501,14 +481,15 @@ object DataGen {
} }
@SubscribeEvent @SubscribeEvent
@JvmStatic
@Suppress("unused") @Suppress("unused")
fun onGatherData(event: GatherDataEvent) { fun onGatherData(event: GatherDataEvent) {
val blockModelProvider = MatteryBlockModelProvider(event) val blockModelProvider = MatteryBlockModelProvider(event)
val blockStateProvider = MatteryBlockStateProvider(event) val blockStateProvider = MatteryBlockStateProvider(event)
val itemModelProvider = MatteryItemModelProvider(event) val itemModelProvider = MatteryItemModelProvider(event)
val lootTableProvider = LootTables(event) val lootTableProvider = LootTables(event.generator)
val recipeProvider = MatteryRecipeProvider(event) val recipeProvider = MatteryRecipeProvider(event.generator)
val lootModifier = LootModifiers(event) val lootModifier = LootModifiers(event.generator)
val languageProvider = MatteryLanguageProvider(event.generator) val languageProvider = MatteryLanguageProvider(event.generator)
val matterData = MatterDataProvider(event) val matterData = MatterDataProvider(event)
val researchProvider = AndroidResearchDataProvider(event).also { it.exec { addResearchData(it, languageProvider) } } val researchProvider = AndroidResearchDataProvider(event).also { it.exec { addResearchData(it, languageProvider) } }
@ -522,32 +503,24 @@ object DataGen {
this.languageProvider = languageProvider this.languageProvider = languageProvider
this.researchProvider = researchProvider this.researchProvider = researchProvider
this.matterData = matterData this.matterData = matterData
this.flywheelData = FlywheelMaterialDataProvider(event)
val tagsProvider = TagsProvider(event) val tagsProvider = TagsProvider(event)
val advancementProvider = object : AdvancementProvider(event.generator.packOutput, event.lookupProvider, event.existingFileHelper, listOf( val advancementProvider = object : AdvancementProvider(event.generator, event.existingFileHelper) {
AdvancementGenerator { registries, saver, existingFileHelper -> override fun registerAdvancements(consumer: Consumer<Advancement>, fileHelper: ExistingFileHelper) {
addAdvancements(saver, languageProvider) addAdvancements(consumer, languageProvider)
addAndroidAdvancements(saver, languageProvider) addAndroidAdvancements(consumer, languageProvider)
} }
)) {} }
addTags(tagsProvider) addTags(tagsProvider)
addSuspiciousTags(tagsProvider)
addConstructionTags(tagsProvider)
addResourceTags(tagsProvider)
addEquipmentTags(tagsProvider)
addMineableTags(tagsProvider)
addDyeTags(tagsProvider)
addStructureTags(tagsProvider)
event.generator.addProvider(event.includeClient(), blockModelProvider) event.generator.addProvider(event.includeClient(), blockModelProvider)
event.generator.addProvider(event.includeServer(), blockStateProvider) event.generator.addProvider(event.includeServer(), blockStateProvider)
event.generator.addProvider(event.includeClient(), itemModelProvider) event.generator.addProvider(event.includeClient(), itemModelProvider)
event.generator.addProvider(event.includeServer(), recipeProvider) event.generator.addProvider(event.includeServer(), recipeProvider)
DyeColor.entries.forEach { event.generator.addProvider(event.includeClient(), MatterBankProvider(event, it)) } DyeColor.values().forEach { event.generator.addProvider(event.includeClient(), MatterBankProvider(event, it)) }
event.generator.addProvider(event.includeClient(), MatterBankProvider(event, null)) event.generator.addProvider(event.includeClient(), MatterBankProvider(event, null))
DyeColor.entries.forEach { event.generator.addProvider(event.includeClient(), BatteryBankProvider(event, it)) } DyeColor.values().forEach { event.generator.addProvider(event.includeClient(), BatteryBankProvider(event, it)) }
event.generator.addProvider(event.includeClient(), BatteryBankProvider(event, null)) event.generator.addProvider(event.includeClient(), BatteryBankProvider(event, null))
event.generator.addProvider(event.includeServer(), lootTableProvider) event.generator.addProvider(event.includeServer(), lootTableProvider)
event.generator.addProvider(event.includeServer(), lootModifier) event.generator.addProvider(event.includeServer(), lootModifier)
@ -555,17 +528,6 @@ object DataGen {
event.generator.addProvider(event.includeServer(), researchProvider) event.generator.addProvider(event.includeServer(), researchProvider)
event.generator.addProvider(event.includeServer(), advancementProvider) event.generator.addProvider(event.includeServer(), advancementProvider)
event.generator.addProvider(event.includeServer(), matterData) event.generator.addProvider(event.includeServer(), matterData)
event.generator.addProvider(event.includeServer(), flywheelData)
val registrySetBuilder = RegistrySetBuilder()
.add(Registries.DAMAGE_TYPE, ::registerDamageTypes)
.add(Registries.CONFIGURED_FEATURE, ::registerConfiguredFeatures)
.add(Registries.PLACED_FEATURE, ::registerPlacedFeatures)
.add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ::registerBiomeModifiers)
event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator.packOutput, event.lookupProvider, registrySetBuilder, setOf(MOD_ID)))
registerDamageTypeTags(tagsProvider.damageTypes)
AddEnglishLanguage(languageProvider) AddEnglishLanguage(languageProvider)
AddRussianLanguage(languageProvider) AddRussianLanguage(languageProvider)
@ -575,7 +537,7 @@ object DataGen {
trapdoor(MBlocks.TRITANIUM_TRAPDOOR[null]!!, modLocation("block/decorative/tritanium_trapdoor")) trapdoor(MBlocks.TRITANIUM_TRAPDOOR[null]!!, modLocation("block/decorative/tritanium_trapdoor"))
for (color in DyeColor.entries) for (color in DyeColor.values())
trapdoor(MBlocks.TRITANIUM_TRAPDOOR[color]!!, modLocation("block/decorative/tritanium_trapdoor_${color.name.lowercase()}")) trapdoor(MBlocks.TRITANIUM_TRAPDOOR[color]!!, modLocation("block/decorative/tritanium_trapdoor_${color.name.lowercase()}"))
addBlockModels(blockModelProvider) addBlockModels(blockModelProvider)
@ -586,11 +548,6 @@ object DataGen {
addItemModels(itemModelProvider) addItemModels(itemModelProvider)
blockStateProvider.exec { addComplexBlockStates(blockStateProvider) } blockStateProvider.exec { addComplexBlockStates(blockStateProvider) }
addLootTables(lootTableProvider) addLootTables(lootTableProvider)
addMachineLoot(lootTableProvider)
addDecorativeLoot(lootTableProvider)
addAdvancementLoot(lootTableProvider)
addVaultLoot(lootTableProvider)
addEntityLoot(lootTableProvider)
addChestLootTables(lootTableProvider) addChestLootTables(lootTableProvider)
recipeProvider.exec { _, consumer -> recipeProvider.exec { _, consumer ->
@ -598,7 +555,6 @@ object DataGen {
addComponentRecipes(consumer) addComponentRecipes(consumer)
addStorageItemRecipes(consumer) addStorageItemRecipes(consumer)
addCraftingTableRecipes(consumer) addCraftingTableRecipes(consumer)
addMultiblockRecipes(consumer)
addBlastingRecipes(consumer) addBlastingRecipes(consumer)
addDecorativesRecipes(recipeProvider, consumer) addDecorativesRecipes(recipeProvider, consumer)
addMachineUpgradeRecipes(consumer) addMachineUpgradeRecipes(consumer)
@ -606,7 +562,6 @@ object DataGen {
addOreSmeltingRecipes(consumer) addOreSmeltingRecipes(consumer)
addPainterRecipes(consumer) addPainterRecipes(consumer)
addMatterEntanglerRecipes(consumer) addMatterEntanglerRecipes(consumer)
addSuspiciousRecipes(consumer)
} }
addPlatePressRecipes(recipeProvider) addPlatePressRecipes(recipeProvider)
@ -619,7 +574,6 @@ object DataGen {
languageProvider.registerProviders() languageProvider.registerProviders()
addMatterData(matterData) addMatterData(matterData)
addFlywheelMaterials(flywheelData)
tagsProvider.register() tagsProvider.register()
} }

View File

@ -1,24 +1,23 @@
package ru.dbotthepony.mc.otm.datagen package ru.dbotthepony.mc.otm.datagen
import net.minecraft.world.item.DyeColor
import net.minecraft.world.level.block.AnvilBlock import net.minecraft.world.level.block.AnvilBlock
import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.SlabBlock
import net.minecraft.world.level.block.StairBlock import net.minecraft.world.level.block.StairBlock
import net.minecraft.world.level.block.WallBlock import net.minecraft.world.level.block.WallBlock
import net.minecraft.world.level.block.state.properties.BlockStateProperties import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.neoforged.neoforge.client.model.generators.BlockModelBuilder import net.minecraftforge.client.model.generators.BlockModelBuilder
import net.neoforged.neoforge.client.model.generators.ConfiguredModel import net.minecraftforge.client.model.generators.ConfiguredModel
import net.neoforged.neoforge.client.model.generators.ModelFile import net.minecraftforge.client.model.generators.ModelFile
import ru.dbotthepony.mc.otm.util.get import ru.dbotthepony.mc.otm.core.get
import ru.dbotthepony.mc.otm.util.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.util.math.xRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider
import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider
import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import kotlin.properties.Delegates import kotlin.properties.Delegates
@ -35,42 +34,22 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
} }
DataGen.decorativeCubeAll(MBlocks.CARBON_FIBRE_BLOCK) DataGen.decorativeCubeAll(MBlocks.CARBON_FIBRE_BLOCK)
DataGen.decorativeCubeAllCutout(MBlocks.METAL_MESH)
DataGen.decoratives(MRegistry.TRITANIUM_BLOCK) DataGen.decoratives(MRegistry.TRITANIUM_BLOCK)
for (color in DyeColor.entries) { for (anvil in MBlocks.TRITANIUM_ANVIL) {
blockModelProvider.exec { blockStateProvider.exec {
blockModelProvider.withExistingParent("block/tritanium_anvil0_${color.name.lowercase()}", "${DataGen.MOD_ID}:block/tritanium_anvil0") blockStateProvider.getVariantBuilder(anvil).forAllStates {
.texture("3", modLocation("block/tritanium_anvil/${color.name.lowercase()}")) ConfiguredModel.builder()
.texture("particle", modLocation("block/tritanium_anvil/${color.name.lowercase()}")) .modelFile(blockStateProvider.models().getExistingFile(modLocation("block/${anvil.registryName!!.path}")))
} .rotationY(it[AnvilBlock.FACING].yRotationBlockstateNorth())
.build()
for (i in 1 until MBlocks.TRITANIUM_ANVIL_VARIANTS) {
blockModelProvider.exec {
blockModelProvider.withExistingParent("block/tritanium_anvil${i}_${color.name.lowercase()}", "${DataGen.MOD_ID}:block/tritanium_anvil$i")
.texture("2", modLocation("block/tritanium_anvil_top/${color.name.lowercase()}"))
.texture("3", modLocation("block/tritanium_anvil/${color.name.lowercase()}"))
.texture("particle", modLocation("block/tritanium_anvil/${color.name.lowercase()}"))
}
}
}
for (anvils in MBlocks.TRITANIUM_ANVIL.values) {
for (anvil in anvils) {
blockStateProvider.exec {
blockStateProvider.getVariantBuilder(anvil).forAllStates {
ConfiguredModel.builder()
.modelFile(blockStateProvider.models().getExistingFile(modLocation("block/${anvil.registryName!!.path}")))
.rotationY(it[AnvilBlock.FACING].yRotationBlockstateNorth())
.build()
}
} }
} }
} }
for ((color, block) in MRegistry.TRITANIUM_STAIRS.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_STAIRS.allBlocks) {
DataGen.decorativeStairs(block, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path) DataGen.decorativeStairs(block as StairBlock, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path)
} }
for ((color, block) in MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks) {
@ -98,7 +77,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.TRITANIUM_SLAB.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_SLAB.allBlocks) {
blockStateProvider.exec { blockStateProvider.exec {
blockStateProvider.slabBlock( blockStateProvider.slabBlock(
block, block as SlabBlock,
MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!,
modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path}") modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path}")
) )
@ -108,7 +87,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.FLOOR_TILES_SLAB.blocks) { for ((color, block) in MRegistry.FLOOR_TILES_SLAB.blocks) {
blockStateProvider.exec { blockStateProvider.exec {
blockStateProvider.slabBlock( blockStateProvider.slabBlock(
block, block as SlabBlock,
MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!, MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!,
modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path}") modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path}")
) )
@ -117,7 +96,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.FLOOR_TILES_STAIRS.blocks) { for ((color, block) in MRegistry.FLOOR_TILES_STAIRS.blocks) {
DataGen.decorativeStairs( DataGen.decorativeStairs(
block, block as StairBlock,
MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path, MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path,
MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path
) )
@ -125,7 +104,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.TRITANIUM_WALL.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_WALL.allBlocks) {
DataGen.decorativeWall( DataGen.decorativeWall(
block, block as WallBlock,
sideTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path, sideTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path,
topTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path topTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path
) )
@ -166,13 +145,8 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
"1" to "decorative/computer_screen", "1" to "decorative/computer_screen",
"particle" to "decorative/computer_base", "particle" to "decorative/computer_base",
)) ))
blockStateProvider.block(MRegistry.COMPUTER_TERMINAL.allBlocks.values)
blockModelProvider.colored("star_chair", mapOf( blockStateProvider.block(MRegistry.COMPUTER_TERMINAL.allBlocks.values)
"1" to "decorative/star_chair",
"2" to "powered_smoker_base",
))
blockStateProvider.block(MRegistry.STAR_CHAIR.allBlocks.values)
blockStateProvider.simpleBlockM(MBlocks.FLUID_TANK) blockStateProvider.simpleBlockM(MBlocks.FLUID_TANK)
@ -225,8 +199,8 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
} }
} }
DataGen.decorativeCubeAll(MBlocks.DANGER_STRIPE_BLOCK)
DataGen.decorativePillar(MBlocks.METAL_BEAM, "metal_beam_side", "metal_beam_top") DataGen.decorativePillar(MBlocks.METAL_BEAM, "metal_beam_side", "metal_beam_top")
blockModelProvider.decorativeCubeAll(MBlocks.METAL_BEAM_CENTER, "metal_beam_top")
var labLampOn: BlockModelBuilder? = null var labLampOn: BlockModelBuilder? = null
var labLampOff: BlockModelBuilder? = null var labLampOff: BlockModelBuilder? = null
@ -257,12 +231,9 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
itemModelProvider.block(MItems.LABORATORY_LAMP) itemModelProvider.block(MItems.LABORATORY_LAMP)
itemModelProvider.block(MItems.LABORATORY_LAMP_INVERTED, MItems.LABORATORY_LAMP.registryName!!.path + "_unlit") itemModelProvider.block(MItems.LABORATORY_LAMP_INVERTED, MItems.LABORATORY_LAMP.registryName!!.path + "_unlit")
itemModelProvider.block(MItems.DANGER_STRIPE_BLOCK, MItems.DANGER_STRIPE_BLOCK.registryName!!.path + "_0") itemModelProvider.block(MItems.DANGER_STRIPE_BLOCK)
itemModelProvider.block(MItems.METAL_BEAM) itemModelProvider.block(MItems.METAL_BEAM)
blockStateProvider.block(MBlocks.METAL_BEAM_CENTER)
itemModelProvider.block(MItems.METAL_BEAM_CENTER)
blockStateProvider.exec { blockStateProvider.exec {
blockStateProvider.getVariantBuilder(MBlocks.LABORATORY_LAMP).forAllStates { blockStateProvider.getVariantBuilder(MBlocks.LABORATORY_LAMP).forAllStates {
return@forAllStates ConfiguredModel.builder() return@forAllStates ConfiguredModel.builder()
@ -293,31 +264,17 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
} }
} }
MBlocks.TRITANIUM_STRIPED_BLOCK.entries.forEach { (c, it) -> DataGen.decorativeColumn(MBlocks.TRITANIUM_STRIPED_BLOCK, "tritanium_striped_block", "tritanium_block")
DataGen.decorativeColumn(it, "stripe/tritanium_striped_block_${c.name.lowercase()}", "tritanium_block") DataGen.decorativeStairs(MBlocks.TRITANIUM_STRIPED_STAIRS as StairBlock, "tritanium_striped_block", "tritanium_block")
} DataGen.decorativeWall(MBlocks.TRITANIUM_STRIPED_WALL as WallBlock, "tritanium_striped_block", "tritanium_block")
DataGen.decorativeSlab(MBlocks.TRITANIUM_STRIPED_SLAB as SlabBlock, MBlocks.TRITANIUM_STRIPED_BLOCK.registryName!!, "tritanium_striped_block", "tritanium_block")
MBlocks.TRITANIUM_STRIPED_STAIRS.entries.forEach { (c, it) -> itemModelProvider.block(MItems.TRITANIUM_STRIPED_STAIRS)
DataGen.decorativeStairs(it, "stripe/tritanium_striped_block_${c.name.lowercase()}", "tritanium_block") itemModelProvider.block(MItems.TRITANIUM_STRIPED_SLAB)
}
MBlocks.TRITANIUM_STRIPED_WALL.entries.forEach { (c, it) ->
DataGen.decorativeWall(it, "stripe/tritanium_striped_block_${c.name.lowercase()}", "tritanium_block")
}
MBlocks.TRITANIUM_STRIPED_SLAB.entries.forEach { (c, it) ->
DataGen.decorativeSlab(it, MBlocks.TRITANIUM_STRIPED_BLOCK[c]!!.registryName!!, "stripe/tritanium_striped_block_${c.name.lowercase()}", "tritanium_block")
}
itemModelProvider.blocks(MItems.TRITANIUM_STRIPED_STAIRS.values)
itemModelProvider.blocks(MItems.TRITANIUM_STRIPED_SLAB.values)
itemModelProvider.exec { itemModelProvider.exec {
MBlocks.TRITANIUM_STRIPED_WALL.entries.forEach { (c, it) -> itemModelProvider.withExistingParent(MItems.TRITANIUM_STRIPED_WALL.registryName!!.path, modLocation("block/wall_inventory"))
itemModelProvider.withExistingParent(it.registryName!!.path, modLocation("block/wall_inventory")) .texture("wall_side", modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/tritanium_striped_block"))
.texture("wall_side", modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/stripe/tritanium_striped_block_${c.name.lowercase()}")) .texture("wall", modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/tritanium_block"))
.texture("wall", modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/tritanium_block"))
}
} }
for ((color, glass) in MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks) { for ((color, glass) in MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks) {
@ -328,7 +285,6 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
} }
DataGen.bars(MBlocks.TRITANIUM_BARS, modLocation("block/decorative/tritanium_bars")) DataGen.bars(MBlocks.TRITANIUM_BARS, modLocation("block/decorative/tritanium_bars"))
DataGen.bars(MBlocks.METAL_RAILING, modLocation("block/decorative/metal_railing"))
blockStateProvider.block(MBlocks.ENGINE) blockStateProvider.block(MBlocks.ENGINE)
itemModelProvider.block(MItems.ENGINE) itemModelProvider.block(MItems.ENGINE)

View File

@ -1,15 +0,0 @@
package ru.dbotthepony.mc.otm.datagen
import net.neoforged.neoforge.common.Tags
import ru.dbotthepony.mc.otm.util.math.Decimal
import ru.dbotthepony.mc.otm.data.FlywheelMaterialDataProvider
import ru.dbotthepony.mc.otm.registry.MBlockTags
fun addFlywheelMaterials(provider: FlywheelMaterialDataProvider) {
provider.add(Tags.Blocks.STORAGE_BLOCKS_DIAMOND, Decimal(25_000_000))
provider.add(Tags.Blocks.STORAGE_BLOCKS_COPPER, Decimal(60_000_000))
provider.add(Tags.Blocks.STORAGE_BLOCKS_IRON, Decimal(50_000_000))
provider.add(Tags.Blocks.STORAGE_BLOCKS_GOLD, Decimal(300_000_000), momentumLossSpeed = Decimal("0.75"))
provider.add(Tags.Blocks.STORAGE_BLOCKS_NETHERITE, Decimal(1_250_000_000), momentumLossSpeed = Decimal.ONE_HALF)
provider.add(MBlockTags.TRITANIUM_BLOCKS, Decimal(225_000_000))
}

View File

@ -3,11 +3,12 @@ package ru.dbotthepony.mc.otm.datagen
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.util.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.matter.ComputeAction
import ru.dbotthepony.mc.otm.matter.MatterDataProvider import ru.dbotthepony.mc.otm.matter.MatterDataProvider
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
// general rule - anything plant or organic is much more complex than mineral // general rule - anything plant or organic is much more complex than mineral
// and anything mineral has much bigger matter value than complexity (just throw a lot of same molecules) // and anything mineral has much bigger matter value than complexity (just throw a lot of same molecules)
@ -16,10 +17,8 @@ fun addMatterData(provider: MatterDataProvider) {
provider.inherit(Items.CHIPPED_ANVIL, Items.ANVIL, 0.75) provider.inherit(Items.CHIPPED_ANVIL, Items.ANVIL, 0.75)
provider.inherit(Items.DAMAGED_ANVIL, Items.ANVIL, 0.5) provider.inherit(Items.DAMAGED_ANVIL, Items.ANVIL, 0.5)
for (anvils in MItems.TRITANIUM_ANVIL.values) { for (i in 1 until MItems.TRITANIUM_ANVIL.size) {
for (i in 1 until anvils.size) { provider.inherit(MItems.TRITANIUM_ANVIL[i], MItems.TRITANIUM_ANVIL[i - 1], 0.85)
provider.inherit(anvils[i], anvils[i - 1], 0.85)
}
} }
provider.inherit(Items.WATER_BUCKET, Items.BUCKET) { provider.inherit(Items.WATER_BUCKET, Items.BUCKET) {
@ -153,12 +152,12 @@ fun addMatterData(provider: MatterDataProvider) {
relative(Items.PACKED_ICE, 1.5, 1) relative(Items.PACKED_ICE, 1.5, 1)
// rocks // rocks
scope(Tags.Items.STONES, 1.1, 1.1) { scope(Tags.Items.STONE, 1.1, 1.1) {
equal(Tags.Items.COBBLESTONES) equal(Tags.Items.COBBLESTONE)
equal(Tags.Items.GRAVELS) equal(Tags.Items.GRAVEL)
equal(Items.FLINT) equal(Items.FLINT)
equal(Tags.Items.SANDS) equal(Tags.Items.SAND)
equal(Tags.Items.NETHERRACKS) equal(Tags.Items.NETHERRACK)
scope(1.4, 1.5) { scope(1.4, 1.5) {
equal(Items.BASALT) equal(Items.BASALT)
@ -186,7 +185,7 @@ fun addMatterData(provider: MatterDataProvider) {
relative(Items.REINFORCED_DEEPSLATE, 3, 1.4) relative(Items.REINFORCED_DEEPSLATE, 3, 1.4)
} }
relative(Tags.Items.OBSIDIANS, 10, 1.5) relative(Tags.Items.OBSIDIAN, 10, 1.5)
relative(Items.CRYING_OBSIDIAN, 14, 3) relative(Items.CRYING_OBSIDIAN, 14, 3)
} }
@ -222,7 +221,7 @@ fun addMatterData(provider: MatterDataProvider) {
// drops from mobs // drops from mobs
scope(Items.ROTTEN_FLESH, 8, 1.5) { scope(Items.ROTTEN_FLESH, 8, 1.5) {
equal(Items.INK_SAC) equal(Items.INK_SAC)
equal(Tags.Items.LEATHERS) equal(Tags.Items.LEATHER)
equal(Items.LEATHER) equal(Items.LEATHER)
relative(Items.RABBIT_FOOT, 1.1, 1.5) relative(Items.RABBIT_FOOT, 1.1, 1.5)
@ -232,15 +231,14 @@ fun addMatterData(provider: MatterDataProvider) {
relative(Tags.Items.BONES, 1, 1.25) relative(Tags.Items.BONES, 1, 1.25)
relative(Tags.Items.STRINGS, 0.8, 0.75) relative(Tags.Items.STRING, 0.8, 0.75)
relative(Items.COBWEB, 0.8, 0.75) relative(Items.COBWEB, 0.8, 0.75)
relative(Items.SPIDER_EYE, 0.8, 1.8) relative(Items.SPIDER_EYE, 0.8, 1.8)
relative(Tags.Items.SLIME_BALLS, 1, 1.4) relative(Tags.Items.SLIMEBALLS, 1, 1.4)
relative(Tags.Items.GUNPOWDERS, 0.85, 1.15) relative(Tags.Items.GUNPOWDER, 0.85, 1.15)
relative(Items.TURTLE_SCUTE, 1, 1.5) relative(Items.SCUTE, 1, 1.5)
relative(Items.ARMADILLO_SCUTE, 1, 1.8)
relative(Items.FEATHER, 0.7, 1.25) relative(Items.FEATHER, 0.7, 1.25)
relative(Items.EGG, 1.25, 4) relative(Items.EGG, 1.25, 4)
@ -263,7 +261,7 @@ fun addMatterData(provider: MatterDataProvider) {
relative(Items.SCULK_VEIN, 2.5, 24) relative(Items.SCULK_VEIN, 2.5, 24)
// planty // planty
scope(Items.SHORT_GRASS, 1.5, 2.5) { scope(Items.GRASS, 1.5, 2.5) {
equal(Items.SUNFLOWER) equal(Items.SUNFLOWER)
equal(Items.LILAC) equal(Items.LILAC)
equal(Items.ROSE_BUSH) equal(Items.ROSE_BUSH)
@ -437,6 +435,4 @@ fun addMatterData(provider: MatterDataProvider) {
} }
} }
} }
provider.inherit(MItems.IMPERFECT_BREAD, Items.BREAD, 1.5)
} }

View File

@ -2,18 +2,18 @@ package ru.dbotthepony.mc.otm.datagen
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.player.android.AndroidResearchDescriptions import ru.dbotthepony.mc.otm.android.AndroidResearchDescriptions
import ru.dbotthepony.mc.otm.player.android.AndroidResearchResults import ru.dbotthepony.mc.otm.android.AndroidResearchResults
import ru.dbotthepony.mc.otm.player.android.AndroidResearchType import ru.dbotthepony.mc.otm.android.AndroidResearchType
import ru.dbotthepony.mc.otm.client.render.ResearchIcons import ru.dbotthepony.mc.otm.client.render.ResearchIcons
import ru.dbotthepony.mc.otm.util.TextComponent import ru.dbotthepony.mc.otm.core.TextComponent
import ru.dbotthepony.mc.otm.util.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import java.util.LinkedList import java.util.LinkedList
import java.util.function.Consumer import java.util.function.Consumer

View File

@ -1,68 +1,44 @@
package ru.dbotthepony.mc.otm.datagen package ru.dbotthepony.mc.otm.datagen
import net.minecraft.resources.ResourceLocation
import net.minecraft.sounds.SoundEvent import net.minecraft.sounds.SoundEvent
import net.neoforged.neoforge.common.data.SoundDefinition import net.minecraftforge.common.data.SoundDefinition
import net.neoforged.neoforge.common.data.SoundDefinitionsProvider import net.minecraftforge.common.data.SoundDefinitionsProvider
import net.neoforged.neoforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents import ru.dbotthepony.mc.otm.registry.MSoundEvents
fun SoundDefinition.subtitle(value: SoundEvent): SoundDefinition { fun SoundDefinition.subtitle(value: SoundEvent): SoundDefinition {
return subtitle("otm.sound." + value.location.path) return subtitle("otm.sound." + value.location.path)
} }
class SoundDataProvider(event: GatherDataEvent) : SoundDefinitionsProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { class SoundDataProvider(event: GatherDataEvent) : SoundDefinitionsProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) {
override fun registerSounds() { override fun registerSounds() {
add( add(MSoundEvents.PLASMA_WEAPON_OVERHEAT,
MSoundEvents.PLASMA_WEAPON_OVERHEAT,
definition().subtitle("otm.sound.plasma_weapon_overheat") definition().subtitle("otm.sound.plasma_weapon_overheat")
.with(SoundDefinition.Sound.sound(modLocation("item/plasma_weapon_overheat"), SoundDefinition.SoundType.SOUND))) .with(SoundDefinition.Sound.sound(modLocation("item/plasma_weapon_overheat"), SoundDefinition.SoundType.SOUND)))
add( add(MSoundEvents.PLAYER_BECOME_ANDROID,
MSoundEvents.PLAYER_BECOME_ANDROID,
definition().subtitle("otm.sound.player_become_android") definition().subtitle("otm.sound.player_become_android")
.with(SoundDefinition.Sound.sound(modLocation("player_become_android"), SoundDefinition.SoundType.SOUND))) .with(SoundDefinition.Sound.sound(modLocation("player_become_android"), SoundDefinition.SoundType.SOUND)))
add( add(MSoundEvents.RIFLE_SHOT,
MSoundEvents.RIFLE_SHOT,
definition().subtitle("otm.sound.rifle_shot") definition().subtitle("otm.sound.rifle_shot")
.with(SoundDefinition.Sound.sound(modLocation("item/rifle_shot"), SoundDefinition.SoundType.SOUND))) .with(SoundDefinition.Sound.sound(modLocation("item/rifle_shot"), SoundDefinition.SoundType.SOUND)))
simple(MSoundEvents.CARGO_CRATE_OPEN) simple(MSoundEvents.CARGO_CRATE_OPEN)
add( add(MSoundEvents.ANDROID_JUMP_BOOST,
MSoundEvents.ANDROID_JUMP_BOOST,
definition().subtitle("otm.sound.android.jump_boost") definition().subtitle("otm.sound.android.jump_boost")
.with(SoundDefinition.Sound.sound(modLocation("android/jump_boost"), SoundDefinition.SoundType.SOUND))) .with(SoundDefinition.Sound.sound(modLocation("android/jump_boost"), SoundDefinition.SoundType.SOUND)))
add( add(MSoundEvents.ANDROID_SHOCKWAVE,
MSoundEvents.ANDROID_SHOCKWAVE,
definition().subtitle("otm.sound.android.shockwave") definition().subtitle("otm.sound.android.shockwave")
.with(SoundDefinition.Sound.sound(modLocation("android/shockwave"), SoundDefinition.SoundType.SOUND))) .with(SoundDefinition.Sound.sound(modLocation("android/shockwave"), SoundDefinition.SoundType.SOUND)))
add( add(MSoundEvents.ANDROID_PROJ_PARRY,
MSoundEvents.BLACK_HOLE,
definition().subtitle("otm.sound.black_hole")
.with(SoundDefinition.Sound.sound(modLocation("singularity/amb_singularity"), SoundDefinition.SoundType.SOUND)
.attenuationDistance(32)
.stream()
))
add(
MSoundEvents.LOADER_AMBIENT,
definition().subtitle("otm.sound.entity.loader.loader_ambient")
.with(
SoundDefinition.Sound.sound(modLocation("entity/loader/loader_ambient"), SoundDefinition.SoundType.SOUND)
.attenuationDistance(32)
.stream(),
SoundDefinition.Sound.sound(modLocation("entity/loader/loader_ambient2"), SoundDefinition.SoundType.SOUND)
.attenuationDistance(32)
.stream()
))
add(
MSoundEvents.ANDROID_PROJ_PARRY,
definition().subtitle("otm.sound.android.projectile_parry") definition().subtitle("otm.sound.android.projectile_parry")
.with(SoundDefinition.Sound.sound(modLocation("android/punch_projectile"), SoundDefinition.SoundType.SOUND))) .with(SoundDefinition.Sound.sound(modLocation("android/punch_projectile"), SoundDefinition.SoundType.SOUND))
)
} }
private inline fun add(value: SoundEvent, block: SoundDefinition.() -> Unit) { private inline fun add(value: SoundEvent, block: SoundDefinition.() -> Unit) {

View File

@ -1,199 +0,0 @@
package ru.dbotthepony.mc.otm.datagen
import net.minecraft.core.HolderSet
import net.minecraft.core.registries.Registries
import net.minecraft.data.worldgen.BootstrapContext
import net.minecraft.resources.ResourceKey
import net.minecraft.tags.BiomeTags
import net.minecraft.tags.BlockTags
import net.minecraft.util.valueproviders.ClampedNormalFloat
import net.minecraft.util.valueproviders.ClampedNormalInt
import net.minecraft.util.valueproviders.ConstantFloat
import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.level.levelgen.GenerationStep
import net.minecraft.world.level.levelgen.VerticalAnchor
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature
import net.minecraft.world.level.levelgen.feature.Feature
import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration
import net.minecraft.world.level.levelgen.heightproviders.VeryBiasedToBottomHeight
import net.minecraft.world.level.levelgen.placement.CountPlacement
import net.minecraft.world.level.levelgen.placement.HeightRangePlacement
import net.minecraft.world.level.levelgen.placement.InSquarePlacement
import net.minecraft.world.level.levelgen.placement.PlacedFeature
import net.minecraft.world.level.levelgen.placement.RarityFilter
import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest
import net.neoforged.neoforge.common.world.BiomeModifier
import net.neoforged.neoforge.registries.NeoForgeRegistries
import ru.dbotthepony.mc.otm.util.math.Decimal
import ru.dbotthepony.mc.otm.data.world.EllipsoidPlacement
import ru.dbotthepony.mc.otm.data.world.StandardDeviationHeightProvider
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.data.MWorldGenFeatures
import ru.dbotthepony.mc.otm.server.world.feature.BlackHolePlacerFeature
private object ConfiguredFeatures {
val TRITANIUM_ORE = key("tritanium_ore")
val DILITHIUM = key("dilithium")
val BLACK_HOLE = key("black_hole")
private fun key(name: String): ResourceKey<ConfiguredFeature<*, *>> {
return ResourceKey.create(Registries.CONFIGURED_FEATURE, modLocation(name))
}
}
fun registerConfiguredFeatures(context: BootstrapContext<ConfiguredFeature<*, *>>) {
val stone = TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES)
val deepslate = TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES)
run {
val target = listOf(
OreConfiguration.target(stone, MBlocks.TRITANIUM_ORE.defaultBlockState()),
OreConfiguration.target(deepslate, MBlocks.DEEPSLATE_TRITANIUM_ORE.defaultBlockState()),
)
context.register(ConfiguredFeatures.TRITANIUM_ORE, ConfiguredFeature(Feature.ORE, OreConfiguration(target, 9)))
}
run {
val target = listOf(
OreConfiguration.target(stone, MBlocks.DILITHIUM_ORE.defaultBlockState()),
OreConfiguration.target(deepslate, MBlocks.DEEPSLATE_DILITHIUM_ORE.defaultBlockState()),
)
context.register(ConfiguredFeatures.DILITHIUM, ConfiguredFeature(Feature.ORE, OreConfiguration(target, 3)))
}
context.register(ConfiguredFeatures.BLACK_HOLE, ConfiguredFeature(
MWorldGenFeatures.BLACK_HOLE_PLACER,
BlackHolePlacerFeature.Config(Decimal("0.25"), Decimal(1))))
}
private object PlacedFeatures {
val NORMAL_TRITANIUM = key("normal_tritanium")
val DEEP_TRITANIUM = key("deep_tritanium")
val CLOUD_TITANIUM = key("cloud_tritanium")
val DILITHIUM = key("dilithium")
val BLACK_HOLE = key("black_hole")
private fun key(name: String): ResourceKey<PlacedFeature> {
return ResourceKey.create(Registries.PLACED_FEATURE, modLocation(name))
}
}
fun registerPlacedFeatures(context: BootstrapContext<PlacedFeature>) {
val configured = context.lookup(Registries.CONFIGURED_FEATURE)
run {
val ore = configured.getOrThrow(ConfiguredFeatures.TRITANIUM_ORE)
context.register(PlacedFeatures.NORMAL_TRITANIUM, PlacedFeature(
ore,
listOf(
CountPlacement.of(UniformInt.of(2, 6)),
InSquarePlacement.spread(),
HeightRangePlacement.of(StandardDeviationHeightProvider(VerticalAnchor.absolute(10), 15.0))
)
))
context.register(PlacedFeatures.DEEP_TRITANIUM, PlacedFeature(
ore,
listOf(
CountPlacement.of(UniformInt.of(4, 8)),
InSquarePlacement.spread(),
HeightRangePlacement.of(VeryBiasedToBottomHeight.of(VerticalAnchor.aboveBottom(4), VerticalAnchor.absolute(0), 16))
)
))
context.register(PlacedFeatures.CLOUD_TITANIUM, PlacedFeature(
ore,
listOf(
RarityFilter.onAverageOnceEvery(16),
InSquarePlacement.spread(),
HeightRangePlacement.of(StandardDeviationHeightProvider(VerticalAnchor.absolute(10), 15.0)),
EllipsoidPlacement(
x = ClampedNormalInt.of(0f, 6f, Int.MIN_VALUE, Int.MAX_VALUE),
y = ClampedNormalInt.of(0f, 12f, Int.MIN_VALUE, Int.MAX_VALUE),
z = ClampedNormalInt.of(0f, 6f, Int.MIN_VALUE, Int.MAX_VALUE),
count = ClampedNormalInt.of(60f, 60f, 40, 160),
xLength = ClampedNormalFloat.of(11f, 4f, 6f, 14f),
yLength = ClampedNormalFloat.of(11f, 4f, 6f, 14f),
zLength = ClampedNormalFloat.of(11f, 4f, 6f, 14f),
)
)
))
}
run {
val ore = configured.getOrThrow(ConfiguredFeatures.DILITHIUM)
context.register(PlacedFeatures.DILITHIUM, PlacedFeature(
ore,
listOf(
RarityFilter.onAverageOnceEvery(12),
InSquarePlacement.spread(),
HeightRangePlacement.of(StandardDeviationHeightProvider(VerticalAnchor.absolute(0), 15.0)),
EllipsoidPlacement(
x = ClampedNormalInt.of(0f, 8f, Int.MIN_VALUE, Int.MAX_VALUE),
y = ClampedNormalInt.of(0f, 20f, Int.MIN_VALUE, Int.MAX_VALUE),
z = ClampedNormalInt.of(0f, 8f, Int.MIN_VALUE, Int.MAX_VALUE),
count = ClampedNormalInt.of(200f, 200f, 200, 600),
xLength = ClampedNormalFloat.of(11f, 4f, 8f, 14f),
// allow crystals to generate as far as standard deviation allows
// to increase chance for player to discover crystal vein
yLength = ConstantFloat.of(60f),
zLength = ClampedNormalFloat.of(11f, 4f, 8f, 14f),
)
)
))
}
val blackHole = configured.getOrThrow(ConfiguredFeatures.BLACK_HOLE)
context.register(PlacedFeatures.BLACK_HOLE, PlacedFeature(
blackHole,
listOf(
RarityFilter.onAverageOnceEvery(1000),
InSquarePlacement.spread(),
HeightRangePlacement.uniform(VerticalAnchor.absolute(64), VerticalAnchor.absolute(128))
)
))
}
private object BiomeModifiers {
val ORES = key("ores")
val BLACK_HOLE = key("black_hole")
private fun key(name: String): ResourceKey<BiomeModifier> {
return ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, modLocation(name))
}
}
fun registerBiomeModifiers(context: BootstrapContext<BiomeModifier>) {
val placed = context.lookup(Registries.PLACED_FEATURE)
val biomes = context.lookup(Registries.BIOME)
context.register(
BiomeModifiers.ORES,
net.neoforged.neoforge.common.world.BiomeModifiers.AddFeaturesBiomeModifier(
biomes.getOrThrow(BiomeTags.IS_OVERWORLD),
HolderSet.direct(
placed.getOrThrow(PlacedFeatures.NORMAL_TRITANIUM),
placed.getOrThrow(PlacedFeatures.DEEP_TRITANIUM),
placed.getOrThrow(PlacedFeatures.CLOUD_TITANIUM),
placed.getOrThrow(PlacedFeatures.DILITHIUM),
),
GenerationStep.Decoration.UNDERGROUND_ORES
)
)
context.register(
BiomeModifiers.BLACK_HOLE,
net.neoforged.neoforge.common.world.BiomeModifiers.AddFeaturesBiomeModifier(
biomes.getOrThrow(BiomeTags.IS_OVERWORLD),
HolderSet.direct(
placed.getOrThrow(PlacedFeatures.BLACK_HOLE)
),
GenerationStep.Decoration.SURFACE_STRUCTURES
)
)
}

View File

@ -1,22 +1,23 @@
package ru.dbotthepony.mc.otm.datagen.advancements package ru.dbotthepony.mc.otm.datagen.advancements
import net.minecraft.advancements.AdvancementHolder
import net.minecraft.advancements.AdvancementRewards import net.minecraft.advancements.AdvancementRewards
import net.minecraft.advancements.AdvancementRequirements.Strategy import net.minecraft.advancements.FrameType
import net.minecraft.advancements.AdvancementType import net.minecraft.advancements.RequirementsStrategy
import net.minecraft.advancements.critereon.InventoryChangeTrigger import net.minecraft.advancements.critereon.InventoryChangeTrigger
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.server.triggers.BlackHoleTrigger import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger
import ru.dbotthepony.mc.otm.server.triggers.NailedEntityTrigger import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger
import java.util.function.Consumer import java.util.function.Consumer
typealias Strategy = RequirementsStrategy
fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLanguageProvider) { fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLanguageProvider) {
val translation = lang.MultiBuilder("otm.advancements.regular") val translation = lang.MultiBuilder("otm.advancements.regular")
@ -105,7 +106,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("energy_sword.desc", "Wield a High-Frequency Blade, a melee weapon intended to slice Creepers into creep-cakes") { description = translation.add("energy_sword.desc", "Wield a High-Frequency Blade, a melee weapon intended to slice Creepers into creep-cakes") {
russian("Получите высокочастотный клинок, оружие ближнего боя предназначенное для нарезания Криперов на крипо-тортики") russian("Получите высокочастотный клинок, оружие ближнего боя предназначенное для нарезания Криперов на крипо-тортики")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("has_item", criterion(MItems.ENERGY_SWORD)) .addCriterion("has_item", criterion(MItems.ENERGY_SWORD))
.save(serializer, modLocation("regular/energy_sword")) .save(serializer, modLocation("regular/energy_sword"))
@ -120,7 +121,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("quantum_battery.desc", "Put together a Quantum Battery, powered by Ender technologies") { description = translation.add("quantum_battery.desc", "Put together a Quantum Battery, powered by Ender technologies") {
russian("Создайте квантовый аккумулятор, пропитанную технологиями Края") russian("Создайте квантовый аккумулятор, пропитанную технологиями Края")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.rewards(AdvancementRewards.Builder.experience(50)) .rewards(AdvancementRewards.Builder.experience(50))
.requirements(Strategy.OR) .requirements(Strategy.OR)
@ -138,7 +139,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("zpm_battery.desc", "Find Zero Point Module, something from different multiverse of ours, created using technologies lost in time in all possible multiverses") { description = translation.add("zpm_battery.desc", "Find Zero Point Module, something from different multiverse of ours, created using technologies lost in time in all possible multiverses") {
russian("Найдите модуль нулевой точки, вещь из другой мультивселенной, созданная с использованием технологий, потерянных во времени во всех возможных мультивслеленных") russian("Найдите модуль нулевой точки, вещь из другой мультивселенной, созданная с использованием технологий, потерянных во времени во всех возможных мультивслеленных")
}, },
frameType = AdvancementType.CHALLENGE, frameType = FrameType.CHALLENGE,
hidden = true hidden = true
) )
.rewards(AdvancementRewards.Builder.experience(800)) .rewards(AdvancementRewards.Builder.experience(800))
@ -330,12 +331,10 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
} }
.save(serializer, modLocation("regular/industrial_glass")) .save(serializer, modLocation("regular/industrial_glass"))
CraftEntry( CraftEntry(MItems.FLUID_TANK, "Liquid Packaging",
MItems.FLUID_TANK, "Liquid Packaging",
russianName = "Упаковка для жидкостей").make(serializer, glass, translation) russianName = "Упаковка для жидкостей").make(serializer, glass, translation)
CraftEntry( CraftEntry(MItems.FLUID_CAPSULE, "Liquid Canning",
MItems.FLUID_CAPSULE, "Liquid Canning",
russianName = "Банка для жидкостей").make(serializer, glass, translation) russianName = "Банка для жидкостей").make(serializer, glass, translation)
AdvancementBuilder() AdvancementBuilder()
@ -348,7 +347,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("industrial_glass2.desc", "Paint Industrial Glass all possible colors") { description = translation.add("industrial_glass2.desc", "Paint Industrial Glass all possible colors") {
russian("Покрасьте промышленное стекло во все возможные цвета") russian("Покрасьте промышленное стекло во все возможные цвета")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.requirements(Strategy.AND) .requirements(Strategy.AND)
.also { advancement -> .also { advancement ->
@ -400,7 +399,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("cargo_crate_minecart2.desc", "Have all color variants of Minecarts with Cargo Crates") { description = translation.add("cargo_crate_minecart2.desc", "Have all color variants of Minecarts with Cargo Crates") {
russian("Создайте все варианты покрасок вагонеток с грузовыми Ящиками") russian("Создайте все варианты покрасок вагонеток с грузовыми Ящиками")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.requirements(Strategy.AND) .requirements(Strategy.AND)
.also { advancement -> .also { advancement ->
@ -418,7 +417,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("cargo_crate2.desc", "Craft all color variants of Cargo Crates") { description = translation.add("cargo_crate2.desc", "Craft all color variants of Cargo Crates") {
russian("Покрасьте грузовые ящики во все возможные цвета") russian("Покрасьте грузовые ящики во все возможные цвета")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.requirements(Strategy.AND) .requirements(Strategy.AND)
.also { advancement -> .also { advancement ->
@ -443,15 +442,15 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MRegistry.TRITANIUM_STAIRS.allItems.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STAIRS.allItems.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MRegistry.TRITANIUM_STRIPED_STAIRS.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STRIPED_STAIRS.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MItems.TRITANIUM_STRIPED_BLOCK.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MItems.TRITANIUM_STRIPED_BLOCK.also { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MItems.TRITANIUM_STRIPED_STAIRS.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MItems.TRITANIUM_STRIPED_STAIRS.also { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
} }
.save(serializer, modLocation("regular/tritanium_block")) .save(serializer, modLocation("regular/tritanium_block"))
AdvancementBuilder() AdvancementBuilder()
.parent(tritaniumBlock) .parent(tritaniumBlock)
.display( .display(
itemStack = ItemStack(MItems.TRITANIUM_STRIPED_BLOCK[DyeColor.YELLOW]!!), itemStack = ItemStack(MItems.TRITANIUM_STRIPED_BLOCK),
title = translation.add("striped_tritanium_block", "Old Fashion Color Touch") { title = translation.add("striped_tritanium_block", "Old Fashion Color Touch") {
russian("Старомодная цветовая отделка") russian("Старомодная цветовая отделка")
}, },
@ -460,10 +459,10 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
} }
) )
.requirements(Strategy.OR) .requirements(Strategy.OR)
.addCriterion("has_item", criterion(MItems.TRITANIUM_STRIPED_BLOCK[DyeColor.YELLOW]!!)) .addCriterion("has_item", criterion(MItems.TRITANIUM_STRIPED_BLOCK))
.addCriterion("has_item1", criterion(MItems.TRITANIUM_STRIPED_STAIRS[DyeColor.YELLOW]!!)) .addCriterion("has_item1", criterion(MItems.TRITANIUM_STRIPED_STAIRS))
.addCriterion("has_item2", criterion(MItems.TRITANIUM_STRIPED_SLAB[DyeColor.YELLOW]!!)) .addCriterion("has_item2", criterion(MItems.TRITANIUM_STRIPED_SLAB))
.addCriterion("has_item3", criterion(MItems.TRITANIUM_STRIPED_WALL[DyeColor.YELLOW]!!)) .addCriterion("has_item3", criterion(MItems.TRITANIUM_STRIPED_WALL))
.save(serializer, modLocation("regular/striped_tritanium_block")) .save(serializer, modLocation("regular/striped_tritanium_block"))
val colorTritaniumBlock = AdvancementBuilder() val colorTritaniumBlock = AdvancementBuilder()
@ -483,8 +482,8 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
MRegistry.TRITANIUM_STAIRS.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STAIRS.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MRegistry.TRITANIUM_STRIPED_STAIRS.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STRIPED_STAIRS.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MItems.TRITANIUM_STRIPED_BLOCK.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MItems.TRITANIUM_STRIPED_BLOCK.also { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MItems.TRITANIUM_STRIPED_STAIRS.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MItems.TRITANIUM_STRIPED_STAIRS.also { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
} }
.save(serializer, modLocation("regular/tritanium_block2")) .save(serializer, modLocation("regular/tritanium_block2"))
@ -498,9 +497,9 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("tritanium_block3.desc", "Craft all color variants of Tritanium Blocks") { description = translation.add("tritanium_block3.desc", "Craft all color variants of Tritanium Blocks") {
russian("Создайте все варианты покрасок тритановых Блоков") russian("Создайте все варианты покрасок тритановых Блоков")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.rewards(advancementLoot("tritanium_block3").addExperience(100)) .rewards(AdvancementRewards.Builder.loot(modLocation("tritanium_block3")).addExperience(100))
.requirements(Strategy.AND) .requirements(Strategy.AND)
.also { advancement -> .also { advancement ->
MRegistry.TRITANIUM_BLOCK.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_BLOCK.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
@ -517,14 +516,14 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("tritanium_block4.desc", "Craft ALL color variants of Tritanium Blocks including striped ones") { description = translation.add("tritanium_block4.desc", "Craft ALL color variants of Tritanium Blocks including striped ones") {
russian("Создайте АБСОЛЮТНО ВСЕ варианты покрасок тритановых блоков, включая с полосками") russian("Создайте АБСОЛЮТНО ВСЕ варианты покрасок тритановых блоков, включая с полосками")
}, },
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.rewards(advancementLoot("tritanium_block4").addExperience(400)) .rewards(AdvancementRewards.Builder.loot(modLocation("tritanium_block4")).addExperience(400))
.requirements(Strategy.AND) .requirements(Strategy.AND)
.also { advancement -> .also { advancement ->
MRegistry.TRITANIUM_BLOCK.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_BLOCK.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
MItems.TRITANIUM_STRIPED_BLOCK.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) } MItems.TRITANIUM_STRIPED_BLOCK.also { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
} }
.save(serializer, modLocation("regular/tritanium_block4")) .save(serializer, modLocation("regular/tritanium_block4"))
@ -540,10 +539,10 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
}, },
) )
.requirements(Strategy.OR) .requirements(Strategy.OR)
.also { .addCriterion("pill1", criterion(MItems.PILL_ANDROID))
for ((i, item) in MItems.PILLS.withIndex()) .addCriterion("pill2", criterion(MItems.PILL_HEAL))
it.addCriterion("pill$i", criterion(item)) .addCriterion("pill3", criterion(MItems.PILL_HUMANE))
} .addCriterion("pill4", criterion(MItems.PILL_OBLIVION))
.save(serializer, modLocation("regular/pill")) .save(serializer, modLocation("regular/pill"))
AdvancementBuilder() AdvancementBuilder()
@ -556,15 +555,15 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
description = translation.add("all_pills.desc", "Find all possible pill types") { description = translation.add("all_pills.desc", "Find all possible pill types") {
russian("Найдите всевозможные варианты пилюль") russian("Найдите всевозможные варианты пилюль")
}, },
frameType = AdvancementType.CHALLENGE, frameType = FrameType.CHALLENGE,
hidden = true hidden = true
) )
.rewards(AdvancementRewards.Builder.experience(200)) .rewards(AdvancementRewards.Builder.experience(200))
.requirements(Strategy.AND) .requirements(Strategy.AND)
.also { .addCriterion("pill1", criterion(MItems.PILL_ANDROID))
for ((i, item) in MItems.PILLS.withIndex()) .addCriterion("pill2", criterion(MItems.PILL_HEAL))
it.addCriterion("pill$i", criterion(item)) .addCriterion("pill3", criterion(MItems.PILL_HUMANE))
} .addCriterion("pill4", criterion(MItems.PILL_OBLIVION))
.save(serializer, modLocation("regular/all_pills")) .save(serializer, modLocation("regular/all_pills"))
val essenceCapsule = AdvancementBuilder() val essenceCapsule = AdvancementBuilder()
@ -597,7 +596,6 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
.addCriterion("damage", NailedEntityTrigger.Instance().criterion()) .addCriterion("damage", NailedEntityTrigger.Instance().criterion())
.save(serializer, modLocation("regular/explosive_hammer")) .save(serializer, modLocation("regular/explosive_hammer"))
CraftEntry( CraftEntry(MItems.ESSENCE_STORAGE.values, "Did not Forget to Remember",
MItems.ESSENCE_STORAGE.values, "Did not Forget to Remember", russianName = "Не забыл запомнить").make(serializer, essenceCapsule, translation)
russianName = "Не забыл запомнить").make(serializer, essenceCapsule, translation)
} }

View File

@ -1,9 +1,7 @@
package ru.dbotthepony.mc.otm.datagen.advancements package ru.dbotthepony.mc.otm.datagen.advancements
import net.minecraft.advancements.AdvancementHolder
import net.minecraft.advancements.AdvancementRequirements.Strategy
import net.minecraft.advancements.AdvancementRewards import net.minecraft.advancements.AdvancementRewards
import net.minecraft.advancements.AdvancementType import net.minecraft.advancements.FrameType
import net.minecraft.advancements.critereon.EntityPredicate import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.advancements.critereon.MinMaxBounds.Doubles import net.minecraft.advancements.critereon.MinMaxBounds.Doubles
@ -13,22 +11,22 @@ import net.minecraft.world.item.Items
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.server.triggers.AndroidBatteryTrigger import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger
import ru.dbotthepony.mc.otm.server.triggers.AndroidResearchTrigger import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger
import ru.dbotthepony.mc.otm.server.triggers.AndroidTravelUnderwater import ru.dbotthepony.mc.otm.triggers.AndroidTravelUnderwater
import ru.dbotthepony.mc.otm.server.triggers.BecomeAndroidDeathTrigger import ru.dbotthepony.mc.otm.triggers.BecomeAndroidDeathTrigger
import ru.dbotthepony.mc.otm.server.triggers.BecomeAndroidSleepTrigger import ru.dbotthepony.mc.otm.triggers.BecomeAndroidSleepTrigger
import ru.dbotthepony.mc.otm.server.triggers.BecomeAndroidTrigger import ru.dbotthepony.mc.otm.triggers.BecomeAndroidTrigger
import ru.dbotthepony.mc.otm.server.triggers.BecomeHumaneTrigger import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger
import ru.dbotthepony.mc.otm.server.triggers.EnderTeleporterFallDeathTrigger import ru.dbotthepony.mc.otm.triggers.EnderTeleporterFallDeathTrigger
import ru.dbotthepony.mc.otm.server.triggers.FallDampenersSaveTrigger import ru.dbotthepony.mc.otm.triggers.FallDampenersSaveTrigger
import ru.dbotthepony.mc.otm.server.triggers.KillAsAndroidTrigger import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger
import ru.dbotthepony.mc.otm.server.triggers.NanobotsArmorTrigger import ru.dbotthepony.mc.otm.triggers.NanobotsArmorTrigger
import ru.dbotthepony.mc.otm.server.triggers.ShockwaveDamageMobTrigger import ru.dbotthepony.mc.otm.triggers.ShockwaveDamageMobTrigger
import ru.dbotthepony.mc.otm.server.triggers.ShockwaveTrigger import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger
import java.util.* import java.util.*
import java.util.function.Consumer import java.util.function.Consumer
@ -62,7 +60,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
russian("Используйте модуль нулевой точки как внутренний источник питания. Теперь только вечность будет вашим злейшим врагом") russian("Используйте модуль нулевой точки как внутренний источник питания. Теперь только вечность будет вашим злейшим врагом")
}, },
hidden = true, hidden = true,
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.addCriterion("item", AndroidBatteryTrigger.Instance(ItemPredicate.Builder.item().of(MItems.ZPM_BATTERY).build()).criterion()) .addCriterion("item", AndroidBatteryTrigger.Instance(ItemPredicate.Builder.item().of(MItems.ZPM_BATTERY).build()).criterion())
.save(serializer, modLocation("android/zpm")) .save(serializer, modLocation("android/zpm"))
@ -78,7 +76,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
russian("Используйте Квантовый Аккумулятор как внутренний источник питания, можно даже подключить другой конец к Реактору Распада") russian("Используйте Квантовый Аккумулятор как внутренний источник питания, можно даже подключить другой конец к Реактору Распада")
}, },
hidden = true, hidden = true,
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.requirements(Strategy.OR) .requirements(Strategy.OR)
.addCriterion("item0", AndroidBatteryTrigger.Instance(ItemPredicate.Builder.item().of(MItems.QUANTUM_BATTERY).build()).criterion()) .addCriterion("item0", AndroidBatteryTrigger.Instance(ItemPredicate.Builder.item().of(MItems.QUANTUM_BATTERY).build()).criterion())
@ -126,7 +124,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
russian("Вновь обретите плоть после своей жизни как набор гаек и болтов, но вот чего-то всё равно не хватает, что было при вас с самого начала...") russian("Вновь обретите плоть после своей жизни как набор гаек и болтов, но вот чего-то всё равно не хватает, что было при вас с самого начала...")
}, },
hidden = true, hidden = true,
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("become_humane", BecomeHumaneTrigger.criterion) .addCriterion("become_humane", BecomeHumaneTrigger.criterion)
.save(serializer, modLocation("android/become_humane")) .save(serializer, modLocation("android/become_humane"))
@ -213,7 +211,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
russian("Дайте наноботам поглотить 5 сердец урона, не отключившись насовсем") russian("Дайте наноботам поглотить 5 сердец урона, не отключившись насовсем")
}, },
hidden = true, hidden = true,
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("damage", NanobotsArmorTrigger.Instance(Doubles.atLeast(10.0)).criterion()) .addCriterion("damage", NanobotsArmorTrigger.Instance(Doubles.atLeast(10.0)).criterion())
.save(serializer, modLocation("android/nanobots_armor_deflect")) .save(serializer, modLocation("android/nanobots_armor_deflect"))
@ -229,7 +227,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
russian("Дайте наноботам поглотить 10 сердец урона, не отключившись насовсем") russian("Дайте наноботам поглотить 10 сердец урона, не отключившись насовсем")
}, },
hidden = true, hidden = true,
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.addCriterion("damage", NanobotsArmorTrigger.Instance(Doubles.atLeast(20.0)).criterion()) .addCriterion("damage", NanobotsArmorTrigger.Instance(Doubles.atLeast(20.0)).criterion())
.save(serializer, modLocation("android/nanobots_armor_deflect2")) .save(serializer, modLocation("android/nanobots_armor_deflect2"))
@ -244,7 +242,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("fall_dampeners_save.desc", "Survive fall that would have otherwise be fatal without Fall Dampeners") { description = translation.add("fall_dampeners_save.desc", "Survive fall that would have otherwise be fatal without Fall Dampeners") {
russian("Выживите после падения, которое было бы фатальным без поглотителей инерции") russian("Выживите после падения, которое было бы фатальным без поглотителей инерции")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("saved", FallDampenersSaveTrigger.criterion) .addCriterion("saved", FallDampenersSaveTrigger.criterion)
.save(serializer, modLocation("android/fall_dampeners_save")) .save(serializer, modLocation("android/fall_dampeners_save"))
@ -259,7 +257,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("ender_teleport_fall_death.desc", "Fall to your demise moments after Teleporting as Android") { description = translation.add("ender_teleport_fall_death.desc", "Fall to your demise moments after Teleporting as Android") {
russian("Разбейтесь насмерть через мгновения после телепортации за андроида") russian("Разбейтесь насмерть через мгновения после телепортации за андроида")
}, },
frameType = AdvancementType.GOAL, frameType = FrameType.GOAL,
hidden = true hidden = true
) )
.addCriterion("death", EnderTeleporterFallDeathTrigger.criterion) .addCriterion("death", EnderTeleporterFallDeathTrigger.criterion)
@ -289,7 +287,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("regen_all.desc", "Max out Nanobots Regeneration research") { description = translation.add("regen_all.desc", "Max out Nanobots Regeneration research") {
russian("Полностью исследуйте регенерацию наноботов за андроида") russian("Полностью исследуйте регенерацию наноботов за андроида")
}, },
frameType = AdvancementType.GOAL, frameType = FrameType.GOAL,
) )
.addCriterion("regen0", AndroidResearchTrigger.Instance(modLocation(MNames.NANOBOTS_REGENERATION_1)).criterion()) .addCriterion("regen0", AndroidResearchTrigger.Instance(modLocation(MNames.NANOBOTS_REGENERATION_1)).criterion())
.addCriterion("regen1", AndroidResearchTrigger.Instance(modLocation(MNames.NANOBOTS_REGENERATION_2)).criterion()) .addCriterion("regen1", AndroidResearchTrigger.Instance(modLocation(MNames.NANOBOTS_REGENERATION_2)).criterion())
@ -307,7 +305,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("research_all.desc", "Research everything as Android (that don't block or get blocked by any other research)") { description = translation.add("research_all.desc", "Research everything as Android (that don't block or get blocked by any other research)") {
russian("Исследуйте все технологии за андроида (которые не блокируют и не блокируются другими технологиями)") russian("Исследуйте все технологии за андроида (которые не блокируют и не блокируются другими технологиями)")
}, },
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.rewards(AdvancementRewards.Builder.experience(400).addLootTable(modLocation("research_all_android"))) .rewards(AdvancementRewards.Builder.experience(400).addLootTable(modLocation("research_all_android")))
.also { advancement -> .also { advancement ->
@ -343,7 +341,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("shockwave_warden.desc", "Hurt Warden using Shockwave ability") { description = translation.add("shockwave_warden.desc", "Hurt Warden using Shockwave ability") {
russian("Нанесите хранителю урон используя ударную волну") russian("Нанесите хранителю урон используя ударную волну")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("shockwave_warden", ShockwaveDamageMobTrigger.Instance(Optional.of(EntityPredicate.Builder.entity().of(EntityType.WARDEN).build().wrap())).criterion()) .addCriterion("shockwave_warden", ShockwaveDamageMobTrigger.Instance(Optional.of(EntityPredicate.Builder.entity().of(EntityType.WARDEN).build().wrap())).criterion())
.save(serializer, modLocation("android/shockwave_warden")) .save(serializer, modLocation("android/shockwave_warden"))
@ -358,7 +356,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("wither.desc", "Defeat The Wither as Android. The Wither was surely confused over kind of thing you are") { description = translation.add("wither.desc", "Defeat The Wither as Android. The Wither was surely confused over kind of thing you are") {
russian("Победите Иссушителя будучи андроидом. Наверняка Иссушитель был ошеломлён таким раскладом дел") russian("Победите Иссушителя будучи андроидом. Наверняка Иссушитель был ошеломлён таким раскладом дел")
}, },
frameType = AdvancementType.GOAL, frameType = FrameType.GOAL,
hidden = true hidden = true
) )
.addCriterion("kill_wither", KillAsAndroidTrigger.Instance( .addCriterion("kill_wither", KillAsAndroidTrigger.Instance(
@ -376,7 +374,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("travel_underwater.desc", "Travel at least 200 meters underwater as Android without Air Bags research. This reminds us of someone...") { description = translation.add("travel_underwater.desc", "Travel at least 200 meters underwater as Android without Air Bags research. This reminds us of someone...") {
russian("Преодолейте как минимум 200 метров под водой будучи андроидом без исследования воздушных мешков. Кого-то это нам напоминает...") russian("Преодолейте как минимум 200 метров под водой будучи андроидом без исследования воздушных мешков. Кого-то это нам напоминает...")
}, },
frameType = AdvancementType.GOAL, frameType = FrameType.GOAL,
hidden = true hidden = true
) )
.addCriterion("travel", AndroidTravelUnderwater.Instance(200.0).criterion()) .addCriterion("travel", AndroidTravelUnderwater.Instance(200.0).criterion())
@ -392,7 +390,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("travel_underwater2.desc", "Travel at least 1046 meters underwater as Android without Air Bags research, like someone else did so") { description = translation.add("travel_underwater2.desc", "Travel at least 1046 meters underwater as Android without Air Bags research, like someone else did so") {
russian("Преодолейте как минимум 1046 метров под водой будучи андроидом без исследования воздушных мешков, прям как тот, кто так однажды так и сделал") russian("Преодолейте как минимум 1046 метров под водой будучи андроидом без исследования воздушных мешков, прям как тот, кто так однажды так и сделал")
}, },
frameType = AdvancementType.CHALLENGE, frameType = FrameType.CHALLENGE,
hidden = true hidden = true
) )
.addCriterion("travel", AndroidTravelUnderwater.Instance(1046.0).criterion()) .addCriterion("travel", AndroidTravelUnderwater.Instance(1046.0).criterion())
@ -408,7 +406,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("elder_guardian.desc", "Slay Elder Guardian as Android without Air Bags researched") { description = translation.add("elder_guardian.desc", "Slay Elder Guardian as Android without Air Bags researched") {
russian("Победите Древнего стража будучи андроидом без исследования воздушных мешков") russian("Победите Древнего стража будучи андроидом без исследования воздушных мешков")
}, },
frameType = AdvancementType.CHALLENGE, frameType = FrameType.CHALLENGE,
hidden = true hidden = true
) )
.addCriterion("kill_elder_guardian", KillAsAndroidTrigger.Instance( .addCriterion("kill_elder_guardian", KillAsAndroidTrigger.Instance(

View File

@ -1,19 +1,18 @@
package ru.dbotthepony.mc.otm.datagen.advancements package ru.dbotthepony.mc.otm.datagen.advancements
import net.minecraft.advancements.AdvancementHolder import net.minecraft.advancements.FrameType
import net.minecraft.advancements.AdvancementType
import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.server.triggers.ExopackBatterySlotTrigger import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger
import ru.dbotthepony.mc.otm.server.triggers.ExopackGainedCraftingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger
import ru.dbotthepony.mc.otm.server.triggers.ExopackGainedEnderAccessTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedEnderAccessTrigger
import ru.dbotthepony.mc.otm.server.triggers.ExopackGainedSmeltingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger
import ru.dbotthepony.mc.otm.server.triggers.ExopackObtainedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger
import ru.dbotthepony.mc.otm.server.triggers.ExopackSlotsExpandedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger
import java.util.function.Consumer import java.util.function.Consumer
fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLanguageProvider, root: AdvancementHolder, zpm: AdvancementHolder) { fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLanguageProvider, root: AdvancementHolder, zpm: AdvancementHolder) {
@ -30,7 +29,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("zpm_battery.desc", "Use Zero Point Module as power source in Exopack") { description = translation.add("zpm_battery.desc", "Use Zero Point Module as power source in Exopack") {
russian("Используйте модуль нулевой точки как источник питания в Экзопаке") russian("Используйте модуль нулевой точки как источник питания в Экзопаке")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("zpm_battery", ExopackBatterySlotTrigger.Instance(ItemPredicate.Builder.item().of(MItems.ZPM_BATTERY).build()).criterion()) .addCriterion("zpm_battery", ExopackBatterySlotTrigger.Instance(ItemPredicate.Builder.item().of(MItems.ZPM_BATTERY).build()).criterion())
.save(serializer, modLocation("exopack/zpm_battery")) .save(serializer, modLocation("exopack/zpm_battery"))
@ -45,7 +44,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("obtained.desc", "Obtain an Exopack, a mysterious, semi-present, light as a feather, stuff storage on your back") { description = translation.add("obtained.desc", "Obtain an Exopack, a mysterious, semi-present, light as a feather, stuff storage on your back") {
russian("Получите Экзопак, загадочное, полу-присутствующее, лёгкое как пёрышко, хранилище штуковин на вашей спине") russian("Получите Экзопак, загадочное, полу-присутствующее, лёгкое как пёрышко, хранилище штуковин на вашей спине")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("obtained", ExopackObtainedTrigger.criterion) .addCriterion("obtained", ExopackObtainedTrigger.criterion)
.save(serializer, modLocation("exopack/obtained")) .save(serializer, modLocation("exopack/obtained"))
@ -148,7 +147,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("size3.desc", "Reach 108 slots in your Exopack storage") { description = translation.add("size3.desc", "Reach 108 slots in your Exopack storage") {
russian("Достигните 108 слотов хранилища Экзопака") russian("Достигните 108 слотов хранилища Экзопака")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("size3", ExopackSlotsExpandedTrigger.Instance(minTotal = 108).criterion()) .addCriterion("size3", ExopackSlotsExpandedTrigger.Instance(minTotal = 108).criterion())
.save(serializer, modLocation("exopack/size3")) .save(serializer, modLocation("exopack/size3"))
@ -164,7 +163,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("size4.desc", "Reach 432 slots in your Exopack storage. You could fit a house in there") { description = translation.add("size4.desc", "Reach 432 slots in your Exopack storage. You could fit a house in there") {
russian("Достигните 432 слотов хранилища Экзопака. Туда можно уже впихнуть целый дом") russian("Достигните 432 слотов хранилища Экзопака. Туда можно уже впихнуть целый дом")
}, },
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.addCriterion("size4", ExopackSlotsExpandedTrigger.Instance(minTotal = 432).criterion()) .addCriterion("size4", ExopackSlotsExpandedTrigger.Instance(minTotal = 432).criterion())
.save(serializer, modLocation("exopack/size4")) .save(serializer, modLocation("exopack/size4"))
@ -180,7 +179,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("size5.desc", "Reach 1728 slots in your Exopack storage. Why would you need to go any bigger?!") { description = translation.add("size5.desc", "Reach 1728 slots in your Exopack storage. Why would you need to go any bigger?!") {
russian("Достигните 1728 слотов хранилища Экзопака. Куда вам столько?!") russian("Достигните 1728 слотов хранилища Экзопака. Куда вам столько?!")
}, },
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.addCriterion("size5", ExopackSlotsExpandedTrigger.Instance(minTotal = 1728).criterion()) .addCriterion("size5", ExopackSlotsExpandedTrigger.Instance(minTotal = 1728).criterion())
.save(serializer, modLocation("exopack/size5")) .save(serializer, modLocation("exopack/size5"))
@ -224,7 +223,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("once2.desc", "Upgrade your Exopack storage with 54 slots using one module") { description = translation.add("once2.desc", "Upgrade your Exopack storage with 54 slots using one module") {
russian("Улучшите хранилище Экзопака модулем на 54 слотов") russian("Улучшите хранилище Экзопака модулем на 54 слотов")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("once2", ExopackSlotsExpandedTrigger.Instance(minGained = 54).criterion()) .addCriterion("once2", ExopackSlotsExpandedTrigger.Instance(minGained = 54).criterion())
.save(serializer, modLocation("exopack/once2")) .save(serializer, modLocation("exopack/once2"))
@ -240,7 +239,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("once3.desc", "Upgrade your Exopack storage with 90 slots using one module") { description = translation.add("once3.desc", "Upgrade your Exopack storage with 90 slots using one module") {
russian("Улучшите хранилище Экзопака модулем на 90 слотов") russian("Улучшите хранилище Экзопака модулем на 90 слотов")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("once3", ExopackSlotsExpandedTrigger.Instance(minGained = 90).criterion()) .addCriterion("once3", ExopackSlotsExpandedTrigger.Instance(minGained = 90).criterion())
.save(serializer, modLocation("exopack/once3")) .save(serializer, modLocation("exopack/once3"))
@ -256,7 +255,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("once4.desc", "Upgrade your Exopack storage with 150 slots using one module. After you open one, tens meters long racks roll out of it!") { description = translation.add("once4.desc", "Upgrade your Exopack storage with 150 slots using one module. After you open one, tens meters long racks roll out of it!") {
russian("Улучшите хранилище Экзопака модулем на 150 слотов. Открой один - и покатились стеллажи на десятки метров!") russian("Улучшите хранилище Экзопака модулем на 150 слотов. Открой один - и покатились стеллажи на десятки метров!")
}, },
frameType = AdvancementType.CHALLENGE frameType = FrameType.CHALLENGE
) )
.addCriterion("once4", ExopackSlotsExpandedTrigger.Instance(minGained = 150).criterion()) .addCriterion("once4", ExopackSlotsExpandedTrigger.Instance(minGained = 150).criterion())
.save(serializer, modLocation("exopack/once4")) .save(serializer, modLocation("exopack/once4"))

View File

@ -1,53 +1,29 @@
package ru.dbotthepony.mc.otm.datagen.advancements package ru.dbotthepony.mc.otm.datagen.advancements
import net.minecraft.advancements.Advancement import net.minecraft.advancements.Advancement
import net.minecraft.advancements.AdvancementHolder import net.minecraft.advancements.CriterionTriggerInstance
import net.minecraft.advancements.AdvancementRewards
import net.minecraft.advancements.AdvancementType
import net.minecraft.advancements.Criterion
import net.minecraft.advancements.DisplayInfo import net.minecraft.advancements.DisplayInfo
import net.minecraft.advancements.critereon.ContextAwarePredicate import net.minecraft.advancements.FrameType
import net.minecraft.advancements.critereon.EntityPredicate import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.advancements.critereon.InventoryChangeTrigger import net.minecraft.advancements.critereon.InventoryChangeTrigger
import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.core.registries.Registries
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.TagKey import net.minecraft.tags.TagKey
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import ru.dbotthepony.mc.otm.util.TextComponent import ru.dbotthepony.mc.otm.core.TextComponent
import ru.dbotthepony.mc.otm.datagen.modLocation
import java.util.function.Consumer import java.util.function.Consumer
fun AdvancementBuilder(): Advancement.Builder = Advancement.Builder.advancement() fun AdvancementBuilder(): Advancement.Builder = Advancement.Builder.advancement()
fun Advancement.Builder.save(serializer: Consumer<AdvancementHolder>, name: ResourceLocation): AdvancementHolder {
val built = build(name)
serializer.accept(built)
return built
}
fun advancementLoot(location: ResourceLocation): AdvancementRewards.Builder {
return AdvancementRewards.Builder.loot(ResourceKey.create(Registries.LOOT_TABLE, location))
}
fun advancementLoot(location: String): AdvancementRewards.Builder {
return advancementLoot(modLocation(location))
}
fun AdvancementRewards.Builder.addLootTable(location: ResourceLocation): AdvancementRewards.Builder {
return addLootTable(ResourceKey.create(Registries.LOOT_TABLE, location))
}
fun DisplayInfo( fun DisplayInfo(
itemStack: ItemStack, itemStack: ItemStack,
title: Component = TextComponent("undefined"), title: Component = TextComponent("undefined"),
description: Component = TextComponent("undefined"), description: Component = TextComponent("undefined"),
background: ResourceLocation? = null, background: ResourceLocation? = null,
frameType: AdvancementType = AdvancementType.TASK, frameType: FrameType = FrameType.TASK,
showToast: Boolean = true, showToast: Boolean = true,
announceChat: Boolean = true, announceChat: Boolean = true,
hidden: Boolean = false, hidden: Boolean = false,
@ -71,7 +47,7 @@ fun Advancement.Builder.display(
title: Component = TextComponent("undefined"), title: Component = TextComponent("undefined"),
description: Component = TextComponent("undefined"), description: Component = TextComponent("undefined"),
background: ResourceLocation? = null, background: ResourceLocation? = null,
frameType: AdvancementType = AdvancementType.TASK, frameType: FrameType = FrameType.TASK,
showToast: Boolean = true, showToast: Boolean = true,
announceChat: Boolean = true, announceChat: Boolean = true,
hidden: Boolean = false, hidden: Boolean = false,
@ -81,7 +57,7 @@ fun predicate(tag: TagKey<Item>): ItemPredicate {
return ItemPredicate.Builder.item().of(tag).build() return ItemPredicate.Builder.item().of(tag).build()
} }
fun criterion(tag: TagKey<Item>): Criterion<*> { fun criterion(tag: TagKey<Item>): CriterionTriggerInstance {
return InventoryChangeTrigger.TriggerInstance.hasItems(predicate(tag)) return InventoryChangeTrigger.TriggerInstance.hasItems(predicate(tag))
} }
@ -89,8 +65,10 @@ fun predicate(item: ItemLike): ItemPredicate {
return ItemPredicate.Builder.item().of(item).build() return ItemPredicate.Builder.item().of(item).build()
} }
fun criterion(item: ItemLike): Criterion<*> { fun criterion(item: ItemLike): CriterionTriggerInstance {
return InventoryChangeTrigger.TriggerInstance.hasItems(predicate(item)) return InventoryChangeTrigger.TriggerInstance.hasItems(predicate(item))
} }
fun EntityPredicate.wrap(): ContextAwarePredicate = EntityPredicate.wrap(this) fun EntityPredicate.wrap(): EntityPredicate.Composite = EntityPredicate.Composite.wrap(this)
fun Advancement.Builder.save(advancement: Consumer<Advancement>, name: ResourceLocation) = save(advancement, name.toString())

View File

@ -1,21 +1,23 @@
package ru.dbotthepony.mc.otm.datagen.advancements package ru.dbotthepony.mc.otm.datagen.advancements
import net.minecraft.advancements.AdvancementHolder import net.minecraft.advancements.Advancement
import net.minecraft.advancements.AdvancementRequirements import net.minecraft.advancements.FrameType
import net.minecraft.advancements.AdvancementType import net.minecraft.advancements.RequirementsStrategy
import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import ru.dbotthepony.mc.otm.util.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.util.key import ru.dbotthepony.mc.otm.core.key
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.server.triggers.TakeItemOutOfReplicatorTrigger import ru.dbotthepony.mc.otm.triggers.TakeItemOutOfReplicatorTrigger
import java.util.function.Consumer import java.util.function.Consumer
typealias AdvancementHolder = Advancement
data class CraftEntry( data class CraftEntry(
val item: Collection<Item>, val item: Collection<Item>,
val englishName: String, val englishName: String,
@ -59,7 +61,7 @@ data class CraftEntry(
it.addCriterion(i.toString(), criterion(item)) it.addCriterion(i.toString(), criterion(item))
} }
} }
.requirements(AdvancementRequirements.Strategy.OR) .requirements(RequirementsStrategy.OR)
.save(serializer, modLocation("machines/$path")) .save(serializer, modLocation("machines/$path"))
} }
} }
@ -82,7 +84,7 @@ fun addMachineAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
for ((i, v) in MItems.CHEMICAL_GENERATOR.values.withIndex()) for ((i, v) in MItems.CHEMICAL_GENERATOR.values.withIndex())
it.addCriterion("has_machine_$i", criterion(v)) it.addCriterion("has_machine_$i", criterion(v))
} }
.requirements(AdvancementRequirements.Strategy.OR) .requirements(RequirementsStrategy.OR)
.save(serializer, modLocation("machines/chemical_generator")) .save(serializer, modLocation("machines/chemical_generator"))
val press = AdvancementBuilder() val press = AdvancementBuilder()
@ -100,48 +102,36 @@ fun addMachineAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
for ((i, m) in MItems.TWIN_PLATE_PRESS.values.withIndex()) for ((i, m) in MItems.TWIN_PLATE_PRESS.values.withIndex())
it.addCriterion(i.toString(), criterion(m)) it.addCriterion(i.toString(), criterion(m))
} }
.requirements(AdvancementRequirements.Strategy.OR) .requirements(RequirementsStrategy.OR)
.save(serializer, modLocation("machines/plate_press")) .save(serializer, modLocation("machines/plate_press"))
CraftEntry( CraftEntry(MItems.ENERGY_SERVO.values, "Power Goes In, Powered Things Go Out",
MItems.ENERGY_SERVO.values, "Power Goes In, Powered Things Go Out",
russianName = "Энергия на вход, электроинструмент на выход").make(serializer, press, translation) russianName = "Энергия на вход, электроинструмент на выход").make(serializer, press, translation)
val scanner = CraftEntry( val scanner = CraftEntry(MItems.MATTER_SCANNER.values, "Scanning Things that Matter",
MItems.MATTER_SCANNER.values, "Scanning Things that Matter",
russianName = "Сканируем вещи которые материальны") russianName = "Сканируем вещи которые материальны")
val decomposer = CraftEntry( val decomposer = CraftEntry(MItems.MATTER_DECOMPOSER.values, "Decaying the Atoms", "Keep your limbs outside of the working chamber at all times",
MItems.MATTER_DECOMPOSER.values, "Decaying the Atoms", "Keep your limbs outside of the working chamber at all times",
russianName = "Разлагаем атомы", russianSuffix = "Во всех ситуациях держите свои конечности вне рабочей камеры") russianName = "Разлагаем атомы", russianSuffix = "Во всех ситуациях держите свои конечности вне рабочей камеры")
val panel = CraftEntry( val panel = CraftEntry(MItems.MATTER_PANEL.values, "Indexing the Library",
MItems.MATTER_PANEL.values, "Indexing the Library",
russianName = "Индексируем библиотеку") russianName = "Индексируем библиотеку")
val replicator = CraftEntry( val replicator = CraftEntry(MItems.MATTER_REPLICATOR.values, "Cook with (Im)Perfection", "Now let's bake some perfect bread",
MItems.MATTER_REPLICATOR.values, "Cook with (Im)Perfection", "Now let's bake some perfect bread",
russianName = "Повар с (не) идеальностями", russianSuffix = "А теперь давайте выпечем немного идеального хлеба") russianName = "Повар с (не) идеальностями", russianSuffix = "А теперь давайте выпечем немного идеального хлеба")
val bottler = CraftEntry( val bottler = CraftEntry(MItems.MATTER_BOTTLER.values, "Transfusing Pure Matter", "For those who loved to play with water in their childhood",
MItems.MATTER_BOTTLER.values, "Transfusing Pure Matter", "For those who loved to play with water in their childhood",
russianName = "Переливаем чистую материю", russianSuffix = "Для тех, кто любил играться в воде в детстве") russianName = "Переливаем чистую материю", russianSuffix = "Для тех, кто любил играться в воде в детстве")
val recycler = CraftEntry( val recycler = CraftEntry(MItems.MATTER_RECYCLER.values, "Refine and Redefine", "This is what waste recycling should look like",
MItems.MATTER_RECYCLER.values, "Refine and Redefine", "This is what waste recycling should look like",
russianName = "Переработка и перегонка", russianSuffix = "Вот он, пик переработки отходов") russianName = "Переработка и перегонка", russianSuffix = "Вот он, пик переработки отходов")
val capacitor = CraftEntry( val capacitor = CraftEntry(MItems.MATTER_CAPACITOR_BANK.values, "Modular Matter Tank",
MItems.MATTER_CAPACITOR_BANK.values, "Modular Matter Tank",
russianName = "Модульный бак материи") russianName = "Модульный бак материи")
val counter = CraftEntry( val counter = CraftEntry(MItems.ENERGY_COUNTER.values, "Visualize Power Burn",
MItems.ENERGY_COUNTER.values, "Visualize Power Burn",
russianName = "Визуализация сжигания энергии") russianName = "Визуализация сжигания энергии")
val battery = CraftEntry( val battery = CraftEntry(MItems.BATTERY_BANK.values, "Batteries Not Included", "By all means avoid the urge to hammer incompatible batteries into the power bus.",
MItems.BATTERY_BANK.values, "Batteries Not Included", "By all means avoid the urge to hammer incompatible batteries into the power bus.",
russianName = "Батарейки в комплект не входят", russianSuffix = "Пожалуйста, воздержитесь от вбивания кувалдой несовместимых батарей в энергетическую шину.") russianName = "Батарейки в комплект не входят", russianSuffix = "Пожалуйста, воздержитесь от вбивания кувалдой несовместимых батарей в энергетическую шину.")
val pattern = CraftEntry( val pattern = CraftEntry(MItems.PATTERN_STORAGE, "Digital Knowledge Library",
MItems.PATTERN_STORAGE, "Digital Knowledge Library",
russianName = "Цифровая библиотека знаний") russianName = "Цифровая библиотека знаний")
val reconstructor = CraftEntry( val reconstructor = CraftEntry(MItems.MATTER_RECONSTRUCTOR.values, "Flipping Hourglass",
MItems.MATTER_RECONSTRUCTOR.values, "Flipping Hourglass",
russianName = "Переворачиваем песочные часы") russianName = "Переворачиваем песочные часы")
decomposer.make(serializer, press, translation).also { decomposer.make(serializer, press, translation).also {
@ -160,10 +150,9 @@ fun addMachineAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
description = translation.add("replicate_something.desc", "Replicate something using Matter Replicator. If you replicated some food, be first to taste it among your company") { description = translation.add("replicate_something.desc", "Replicate something using Matter Replicator. If you replicated some food, be first to taste it among your company") {
russian("Среплицируйте что либо используя репликатор материи. Если это еда, то не стесняйтесь быть первым, кто попробует её на вкус среди вашей компании") russian("Среплицируйте что либо используя репликатор материи. Если это еда, то не стесняйтесь быть первым, кто попробует её на вкус среди вашей компании")
}, },
frameType = AdvancementType.GOAL frameType = FrameType.GOAL
) )
.addCriterion("replicate_something", TakeItemOutOfReplicatorTrigger.Instance(ItemPredicate.Builder.item().of( .addCriterion("replicate_something", TakeItemOutOfReplicatorTrigger.Instance(ItemPredicate.Builder.item().of(MItems.MATTER_DUST).build(), true).criterion())
MItems.MATTER_DUST).build(), true).criterion())
.save(serializer, modLocation("machines/replicate_something")) .save(serializer, modLocation("machines/replicate_something"))
AdvancementBuilder() AdvancementBuilder()
@ -178,8 +167,7 @@ fun addMachineAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
russian("Наблюдайте неудачный результат репликации, где ваш заказ рассыпался в материальную труху") russian("Наблюдайте неудачный результат репликации, где ваш заказ рассыпался в материальную труху")
}, },
) )
.addCriterion("replicate_failure", TakeItemOutOfReplicatorTrigger.Instance(ItemPredicate.Builder.item().of( .addCriterion("replicate_failure", TakeItemOutOfReplicatorTrigger.Instance(ItemPredicate.Builder.item().of(MItems.MATTER_DUST).build()).criterion())
MItems.MATTER_DUST).build()).criterion())
.save(serializer, modLocation("machines/replicate_failure")) .save(serializer, modLocation("machines/replicate_failure"))
} }
@ -195,48 +183,33 @@ fun addMachineAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
battery.make(serializer, it, translation) battery.make(serializer, it, translation)
} }
val station = CraftEntry( val station = CraftEntry(MItems.ANDROID_STATION.values, "Android Home Page",
MItems.ANDROID_STATION.values, "Android Home Page",
russianName = "Домашняя страница андроидов", russianName = "Домашняя страница андроидов",
russianSuffix = "Только пользоваться этим устройством могут вёдра с болтами", russianSuffix = "Только пользоваться этим устройством могут вёдра с болтами",
englishSuffix = "Except only buckets of bolts can use this thing") englishSuffix = "Except only buckets of bolts can use this thing")
val charger = CraftEntry( val charger = CraftEntry(MItems.ANDROID_CHARGER.values, "Android Home Router",
MItems.ANDROID_CHARGER.values, "Android Home Router",
russianName = "Домашняя страница андроидов") russianName = "Домашняя страница андроидов")
station.make(serializer, press, translation).also { station.make(serializer, press, translation).also {
charger.make(serializer, it, translation) charger.make(serializer, it, translation)
} }
CraftEntry( CraftEntry(MItems.COBBLESTONE_GENERATOR.values, "Cobblestone: Infinity + 1",
MItems.COBBLESTONE_GENERATOR.values, "Cobblestone: Infinity + 1",
russianName = "Булыжник: бесконечность + 1", russianName = "Булыжник: бесконечность + 1",
russianSuffix = "Смотрите, чтоб он не просыпался во все сундуки", russianSuffix = "Смотрите, чтоб он не просыпался во все сундуки",
englishSuffix = "Watch for not to spill it over all your chests").make(serializer, press, translation) englishSuffix = "Watch for not to spill it over all your chests").make(serializer, press, translation)
.also { CraftEntry(MItems.POWERED_FURNACE.values, "One Big Resistor",
CraftEntry( russianName = "Один большой резистор",
MItems.INFINITE_WATER_SOURCE, "We Got A Leak!", russianSuffix = "Каждый элемент электрической цепи способен испускать свет и тепло, единожды.",
russianName = "У нас утечка!", englishSuffix = "Any electrical element can emit light and heat, once.")
russianSuffix = "Как это вообще возможно!?",
englishSuffix = "How is that even possible!?")
.make(serializer, it, translation)
}
CraftEntry(
MItems.POWERED_FURNACE.values, "One Big Resistor",
russianName = "Один большой резистор",
russianSuffix = "Каждый элемент электрической цепи способен испускать свет и тепло, единожды.",
englishSuffix = "Any electrical element can emit light and heat, once.")
.make(serializer, press, translation) .make(serializer, press, translation)
.also { .also {
CraftEntry( CraftEntry(MItems.POWERED_BLAST_FURNACE.values, "Big Microwave Oven",
MItems.POWERED_BLAST_FURNACE.values, "Big Microwave Oven", russianName = "Большая микроволновая печь").make(serializer, it, translation)
russianName = "Большая микроволновая печь").make(serializer, it, translation)
CraftEntry( CraftEntry(MItems.POWERED_SMOKER.values, "Small Microwave Oven",
MItems.POWERED_SMOKER.values, "Small Microwave Oven", russianName = "Маленькая микроволновая печь").make(serializer, it, translation)
russianName = "Маленькая микроволновая печь").make(serializer, it, translation)
} }
} }

View File

@ -2,15 +2,15 @@ package ru.dbotthepony.mc.otm.datagen.blocks
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.neoforged.neoforge.client.model.generators.BlockStateProvider import net.minecraftforge.client.model.generators.BlockStateProvider
import net.neoforged.neoforge.client.model.generators.ConfiguredModel import net.minecraftforge.client.model.generators.ConfiguredModel
import net.neoforged.neoforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.util.get import ru.dbotthepony.mc.otm.core.get
import ru.dbotthepony.mc.otm.util.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
private fun nothingOrNumber(input: Int): String { private fun nothingOrNumber(input: Int): String {
if (input == 0) if (input == 0)
@ -19,7 +19,7 @@ private fun nothingOrNumber(input: Int): String {
return (input - 1).toString() return (input - 1).toString()
} }
open class BatteryBankProvider(event: GatherDataEvent, val color: DyeColor?) : BlockStateProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { open class BatteryBankProvider(event: GatherDataEvent, val color: DyeColor?) : BlockStateProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) {
protected var block = "battery_bank" protected var block = "battery_bank"
protected var batteryPath = "block/battery/battery" protected var batteryPath = "block/battery/battery"
protected var registry: Block = MBlocks.BATTERY_BANK[color]!! protected var registry: Block = MBlocks.BATTERY_BANK[color]!!

View File

@ -1,8 +1,7 @@
package ru.dbotthepony.mc.otm.datagen.blocks package ru.dbotthepony.mc.otm.datagen.blocks
import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
fun addBlockModels(provider: MatteryBlockModelProvider) { fun addBlockModels(provider: MatteryBlockModelProvider) {
with(provider) { with(provider) {
@ -11,45 +10,10 @@ fun addBlockModels(provider: MatteryBlockModelProvider) {
resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE) resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE)
resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK) resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK)
resourceCubeAll(MBlocks.WITHERED_STEEL_BLOCK) cable("crude_energy_cable", "block/power_cable_0")
cable("regular_energy_cable", "block/power_cable_1")
resourceCubeAll(MBlocks.DILITHIUM_ORE) cable("advanced_energy_cable", "block/power_cable_2")
resourceCubeAll(MBlocks.DEEPSLATE_DILITHIUM_ORE) cable("superconductor_energy_cable", "block/power_cable_3")
resourceCubeAll(MBlocks.DILITHIUM_CRYSTAL_BLOCK)
provider.exec {
provider.cubeAll("reinforced_redstone_lamp", modLocation("block/reinforced_redstone_lamp"))
provider.cubeAll("reinforced_redstone_lamp_on", modLocation("block/reinforced_redstone_lamp_on"))
}
cubeAll(MBlocks.FLYWHEEL_HOUSING)
column(MBlocks.FLYWHEEL_BEARING, "block/flywheel_bearing","block/flywheel_bearing_top")
column(MBlocks.FLYWHEEL_SHAFT, "block/flywheel_shaft","block/flywheel_shaft_top")
orientable(MBlocks.FLYWHEEL_BATTERY,"block/flywheel_housing","block/flywheel_controller")
column(MBlocks.GENERATOR_BLOCK, "block/generator_block","block/generator_block_top")
cubeAllFramed("modular_frame", "block/modular_frame")
cubeAllFramed("heavy_modular_frame", "block/heavy_modular_frame")
cubeAll(MBlocks.ENERGY_INPUT_INTERFACE)
cubeAll(MBlocks.ENERGY_OUTPUT_INTERFACE)
cubeAll(MBlocks.TRITANIUM_HULL)
orientable(MBlocks.MATTER_INPUT_HATCH,"block/tritanium_hull","block/matter_input_hatch")
orientable(MBlocks.MATTER_OUTPUT_HATCH,"block/tritanium_hull","block/matter_output_hatch")
orientable(MBlocks.ENERGY_INPUT_HATCH,"block/tritanium_hull","block/energy_input_hatch")
orientable(MBlocks.ENERGY_OUTPUT_HATCH,"block/tritanium_hull","block/energy_output_hatch")
orientable(MBlocks.ITEM_INPUT_HATCH,"block/tritanium_hull","block/item_input_hatch")
orientable(MBlocks.ITEM_OUTPUT_HATCH,"block/tritanium_hull","block/item_output_hatch")
cable("crude_energy_cable", "block/power_cable_0", powered = true)
cable("regular_energy_cable", "block/power_cable_1", powered = true)
cable("advanced_energy_cable", "block/power_cable_2", powered = true)
cable("superconductor_energy_cable", "block/power_cable_3", powered = true)
cable("matter_cable", "block/matter_cable", thin = true)
cable("storage_cable", "block/storage_cable") cable("storage_cable", "block/storage_cable")
colored(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) colored(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle"))
@ -84,8 +48,8 @@ fun addBlockModels(provider: MatteryBlockModelProvider) {
coloredMachineCombined("matter_decomposer", listOf("texture", "particle")) coloredMachineCombined("matter_decomposer", listOf("texture", "particle"))
coloredMachineCombined("matter_recycler", listOf("0", "particle")) coloredMachineCombined("matter_recycler", listOf("0", "particle"))
colored("matter_replicator", "_idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) colored("matter_replicator", "_idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_offline"))
colored("matter_replicator", "_error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) colored("matter_replicator", "_error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_halted"))
colored("matter_replicator", "_working", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) colored("matter_replicator", "_working", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator"))
colored("powered_smoker", "_idle", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_0", "particle" to "powered_smoker_base")) colored("powered_smoker", "_idle", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_0", "particle" to "powered_smoker_base"))

View File

@ -2,26 +2,23 @@ package ru.dbotthepony.mc.otm.datagen.blocks
import net.minecraft.world.level.block.state.properties.BlockStateProperties import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
import net.neoforged.neoforge.client.model.generators.ConfiguredModel import net.minecraftforge.client.model.generators.ConfiguredModel
import ru.dbotthepony.mc.otm.block.CableBlock import ru.dbotthepony.mc.otm.block.CableBlock
import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock
import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock
import ru.dbotthepony.mc.otm.block.tech.AndroidChargerBlock import ru.dbotthepony.mc.otm.block.tech.AndroidChargerBlock
import ru.dbotthepony.mc.otm.block.tech.EssenceStorageBlock import ru.dbotthepony.mc.otm.block.tech.EssenceStorageBlock
import ru.dbotthepony.mc.otm.util.ResourceLocation import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.util.get import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateSouth
import ru.dbotthepony.mc.otm.util.math.xRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.math.xRotationBlockstateSouth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateSouth
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateSouth
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import java.util.ArrayList
fun addBlockStates(provider: MatteryBlockStateProvider) { fun addBlockStates(provider: MatteryBlockStateProvider) {
provider.block(MBlocks.BLACK_HOLE) provider.block(MBlocks.BLACK_HOLE)
@ -31,24 +28,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
provider.ore(MBlocks.TRITANIUM_ORE) provider.ore(MBlocks.TRITANIUM_ORE)
provider.ore(MBlocks.TRITANIUM_RAW_BLOCK) provider.ore(MBlocks.TRITANIUM_RAW_BLOCK)
provider.block(MBlocks.TRITANIUM_INGOT_BLOCK) provider.block(MBlocks.TRITANIUM_INGOT_BLOCK)
provider.block(MBlocks.METAL_MESH)
provider.block(MBlocks.WITHERED_STEEL_BLOCK)
provider.exec {
provider.getVariantBuilder(MBlocks.ROFLITE_ALLOY_BLOCK).forAllStates {
val side1 = modLocation("block/resource/roflite_alloy_1")
val side2 = modLocation("block/resource/roflite_alloy_2")
val top = modLocation("block/resource/roflite_alloy_top")
val a = provider.models().cube(MBlocks.ROFLITE_ALLOY_BLOCK.registryName!!.path, top, top, side1, side1, side2, side2).texture("particle", side1)
val b = provider.models().cube("${MBlocks.ROFLITE_ALLOY_BLOCK.registryName!!.path}_b", top, top, side2, side2, side1, side1).texture("particle", side2)
return@forAllStates arrayOf(ConfiguredModel.builder().modelFile(a).buildLast(), ConfiguredModel.builder().modelFile(b).buildLast())
}
}
provider.ore(MBlocks.DILITHIUM_ORE)
provider.ore(MBlocks.DEEPSLATE_DILITHIUM_ORE)
provider.block(MBlocks.DILITHIUM_CRYSTAL_BLOCK)
provider.block(MBlocks.CHEMICAL_GENERATOR.values) provider.block(MBlocks.CHEMICAL_GENERATOR.values)
provider.block(MBlocks.MATTER_SCANNER.values) provider.block(MBlocks.MATTER_SCANNER.values)
@ -118,7 +98,6 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
provider.block(MBlocks.MATTER_DECOMPOSER.values) provider.block(MBlocks.MATTER_DECOMPOSER.values)
provider.block(MBlocks.MATTER_REPLICATOR.values) provider.block(MBlocks.MATTER_REPLICATOR.values)
provider.block(MBlocks.MATTER_ENTANGLER)
provider.block(MBlocks.PLATE_PRESS.values) provider.block(MBlocks.PLATE_PRESS.values)
provider.block(MBlocks.TWIN_PLATE_PRESS.values) provider.block(MBlocks.TWIN_PLATE_PRESS.values)
provider.block(MBlocks.GRAVITATION_STABILIZER) provider.block(MBlocks.GRAVITATION_STABILIZER)
@ -135,34 +114,9 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
provider.block(MBlocks.ENERGY_SERVO.values) provider.block(MBlocks.ENERGY_SERVO.values)
provider.block(MBlocks.COBBLESTONE_GENERATOR.values) provider.block(MBlocks.COBBLESTONE_GENERATOR.values)
provider.block(MBlocks.DRIVE_RACK)
provider.block(MBlocks.PAINTER) provider.block(MBlocks.PAINTER)
provider.block(MBlocks.INFINITE_WATER_SOURCE) provider.block(MBlocks.INFINITE_WATER_SOURCE)
provider.exec {
provider.getVariantBuilder(MBlocks.REDSTONE_LAMP_INVERTED)
.forAllStates {
ConfiguredModel.builder()
.modelFile(provider.models().getExistingFile(ResourceLocation("minecraft", "redstone_lamp${if (it[BlockStateProperties.LIT]) "" else "_on"}")))
.build()
}
provider.getVariantBuilder(MBlocks.REINFORCED_REDSTONE_LAMP)
.forAllStates {
ConfiguredModel.builder()
.modelFile(provider.models().getExistingFile(modLocation("reinforced_redstone_lamp${if (it[BlockStateProperties.LIT]) "_on" else ""}")))
.build()
}
provider.getVariantBuilder(MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED)
.forAllStates {
ConfiguredModel.builder()
.modelFile(provider.models().getExistingFile(modLocation("reinforced_redstone_lamp${if (it[BlockStateProperties.LIT]) "" else "_on"}")))
.build()
}
}
provider.exec { provider.exec {
for (block in MBlocks.ESSENCE_STORAGE.values) { for (block in MBlocks.ESSENCE_STORAGE.values) {
provider.getVariantBuilder(block).forAllStates { provider.getVariantBuilder(block).forAllStates {
@ -293,84 +247,12 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
.rotationY(dir.front.yRotationBlockstateSouth()) .rotationY(dir.front.yRotationBlockstateSouth())
.addModel() .addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true) .condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.condition(BlockStateProperties.POWERED, false)
.end()
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_connection_powered")))
.rotationX(dir.front.xRotationBlockstateSouth())
.rotationY(dir.front.yRotationBlockstateSouth())
.addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.condition(BlockStateProperties.POWERED, true)
.end() .end()
} }
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_core"))) part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_core")))
.addModel().condition(BlockStateProperties.POWERED, false).end() .addModel().end()
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_core_powered")))
.addModel().condition(BlockStateProperties.POWERED, true).end()
} }
} }
provider.getVariantBuilder(MBlocks.METAL_JUNK).forAllStates {
val generated = ArrayList<ConfiguredModel>()
for (suffix in arrayOf("_a", "_b", "_c", "_d")) {
val model = provider.models().cubeAll("block/metal_junk$suffix", modLocation("block/decorative/metal_junk$suffix"))
generated.add(with(ConfiguredModel.builder()) {
modelFile(model)
return@with buildLast()
})
generated.add(with(ConfiguredModel.builder()) {
modelFile(model)
rotationY(180)
return@with buildLast()
})
}
return@forAllStates generated.toTypedArray()
}
provider.getVariantBuilder(MBlocks.DANGER_STRIPE_BLOCK).forAllStates {
val generated = ArrayList<ConfiguredModel>()
for (suffix in arrayOf("_0", "_1")) {
generated.add(with(ConfiguredModel.builder()) {
modelFile(provider.models().cubeAll("block/danger_stripe_block$suffix", modLocation("block/decorative/danger_stripe_block$suffix")))
return@with buildLast()
})
}
return@forAllStates generated.toTypedArray()
}
} }
provider.block(MBlocks.TRITANIUM_HULL)
provider.block(MBlocks.FLYWHEEL_HOUSING)
provider.block(MBlocks.FLYWHEEL_BEARING)
provider.block(MBlocks.FLYWHEEL_SHAFT)
provider.block(MBlocks.FLYWHEEL_BATTERY)
provider.block(MBlocks.GENERATOR_BLOCK)
provider.block(MBlocks.MODULAR_FRAME)
provider.block(MBlocks.HEAVY_MODULAR_FRAME)
provider.block(MBlocks.ENERGY_INPUT_INTERFACE)
provider.block(MBlocks.ENERGY_OUTPUT_INTERFACE)
provider.block(MBlocks.ENERGY_INPUT_HATCH)
provider.block(MBlocks.ENERGY_OUTPUT_HATCH)
provider.block(MBlocks.MATTER_INPUT_HATCH)
provider.block(MBlocks.MATTER_OUTPUT_HATCH)
provider.block(MBlocks.ITEM_INPUT_HATCH)
provider.block(MBlocks.ITEM_OUTPUT_HATCH)
} }

View File

@ -5,11 +5,11 @@ import ru.dbotthepony.mc.otm.block.tech.EnergyCounterBlock
import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.block.matter.PatternStorageBlock import ru.dbotthepony.mc.otm.block.matter.PatternStorageBlock
import ru.dbotthepony.mc.otm.block.storage.DriveViewerBlock import ru.dbotthepony.mc.otm.block.storage.DriveViewerBlock
import ru.dbotthepony.mc.otm.util.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
fun addComplexBlockStates(provider: MatteryBlockStateProvider) { fun addComplexBlockStates(provider: MatteryBlockStateProvider) {
for (block in MBlocks.DRIVE_VIEWER.values) { for (block in MBlocks.DRIVE_VIEWER.values) {

View File

@ -5,15 +5,15 @@ import net.minecraft.resources.ResourceLocation
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.RotatedPillarBlock import net.minecraft.world.level.block.RotatedPillarBlock
import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.BlockState
import net.neoforged.neoforge.client.model.generators.BlockStateProvider import net.minecraftforge.client.model.generators.BlockStateProvider
import net.neoforged.neoforge.client.model.generators.ConfiguredModel import net.minecraftforge.client.model.generators.ConfiguredModel
import net.neoforged.neoforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.util.getValueNullable import ru.dbotthepony.mc.otm.core.getValueNullable
import ru.dbotthepony.mc.otm.util.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.util.math.xRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.math.yRotationBlockstateNorth import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import java.util.* import java.util.*
@ -49,7 +49,7 @@ private fun initialTransform(it: BlockState, modelPath: String, builder: Configu
return modelPath return modelPath
} }
class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) {
private val callbacks = LinkedList<() -> Unit>() private val callbacks = LinkedList<() -> Unit>()
fun exec(lambda: () -> Unit): MatteryBlockStateProvider { fun exec(lambda: () -> Unit): MatteryBlockStateProvider {

View File

@ -1,10 +1,9 @@
package ru.dbotthepony.mc.otm.datagen.items package ru.dbotthepony.mc.otm.datagen.items
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import ru.dbotthepony.mc.otm.util.ResourceLocation import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
fun addItemModels(provider: MatteryItemModelProvider) { fun addItemModels(provider: MatteryItemModelProvider) {
@ -21,36 +20,22 @@ fun addItemModels(provider: MatteryItemModelProvider) {
} }
provider.block(MItems.CARBON_FIBRE_BLOCK) provider.block(MItems.CARBON_FIBRE_BLOCK)
provider.block(MItems.METAL_JUNK, MItems.METAL_JUNK.registryName!!.path + "_a") provider.block(MItems.METAL_JUNK)
provider.block(MItems.METAL_MESH) provider.block(MItems.METAL_MESH)
provider.generatedTranslucent(MItems.TRITANIUM_BARS, modLocation("block/decorative/tritanium_bars")) provider.generatedTranslucent(MItems.TRITANIUM_BARS, modLocation("block/decorative/tritanium_bars"))
provider.generatedTranslucent(MItems.METAL_RAILING, modLocation("block/decorative/metal_railing")) provider.block(MItems.DEEPSLATE_TRITANIUM_ORE)
provider.blocks(MItems.TRITANIUM_STRIPED_BLOCK.values) provider.block(MItems.TRITANIUM_ORE)
provider.block(MItems.TRITANIUM_STRIPED_BLOCK)
provider.block(MItems.TRITANIUM_RAW_BLOCK)
provider.block(MItems.TRITANIUM_INGOT_BLOCK)
provider.coloredWithBaseBlock(MItems.ITEM_MONITOR, "item_monitor") provider.coloredWithBaseBlock(MItems.ITEM_MONITOR, "item_monitor")
provider.block(MItems.PHANTOM_ATTRACTOR) provider.block(MItems.PHANTOM_ATTRACTOR)
provider.block(MItems.HOLO_SIGN) provider.block(MItems.HOLO_SIGN)
provider.block(MItems.TRITANIUM_ORE)
provider.block(MItems.DEEPSLATE_TRITANIUM_ORE)
provider.block(MItems.TRITANIUM_RAW_BLOCK)
provider.block(MItems.TRITANIUM_INGOT_BLOCK)
provider.block(MItems.WITHERED_STEEL_BLOCK)
provider.block(MItems.ROFLITE_ALLOY_BLOCK)
provider.block(MItems.DILITHIUM_ORE)
provider.block(MItems.DEEPSLATE_DILITHIUM_ORE)
provider.block(MItems.DILITHIUM_CRYSTAL_BLOCK)
provider.withExistingParent(MItems.REDSTONE_LAMP_INVERTED, ResourceLocation("minecraft", "block/redstone_lamp_on"))
provider.withExistingParent(MItems.REINFORCED_REDSTONE_LAMP, modLocation("block/reinforced_redstone_lamp"))
provider.withExistingParent(MItems.REINFORCED_REDSTONE_LAMP_INVERTED, modLocation("block/reinforced_redstone_lamp_on"))
MRegistry.VENT.allItems.values.forEach(provider::block) MRegistry.VENT.allItems.values.forEach(provider::block)
MRegistry.VENT_ALTERNATIVE.allItems.values.forEach(provider::block) MRegistry.VENT_ALTERNATIVE.allItems.values.forEach(provider::block)
MRegistry.TRITANIUM_BLOCK.allItems.values.forEach(provider::block) MRegistry.TRITANIUM_BLOCK.allItems.values.forEach(provider::block)
MRegistry.COMPUTER_TERMINAL.allItems.values.forEach(provider::block) MRegistry.COMPUTER_TERMINAL.allItems.values.forEach(provider::block)
MRegistry.STAR_CHAIR.allItems.values.forEach(provider::block)
MRegistry.INDUSTRIAL_GLASS.allItems.values.forEach(provider::block) MRegistry.INDUSTRIAL_GLASS.allItems.values.forEach(provider::block)
for (block in MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems) { for (block in MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems) {
@ -69,10 +54,7 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.generated(MItems.PILL_HUMANE) provider.generated(MItems.PILL_HUMANE)
provider.generated(MItems.PILL_OBLIVION) provider.generated(MItems.PILL_OBLIVION)
provider.generated(MItems.PILL_HEAL) provider.generated(MItems.PILL_HEAL)
provider.generated(MItems.PILL_NOT_NORMAL)
provider.generated(MItems.NUTRIENT_PASTE) provider.generated(MItems.NUTRIENT_PASTE)
provider.generated(MItems.IMPERFECT_BREAD)
provider.generated(MItems.REDSTONE_INTERACTOR)
provider.generated(MItems.ESSENCE_DRIVE) provider.generated(MItems.ESSENCE_DRIVE)
provider.generated(MItems.ESSENCE_CAPSULE) provider.generated(MItems.ESSENCE_CAPSULE)
@ -97,48 +79,26 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.generated(MItems.ExopackUpgrades.SMELTING_UPGRADE) provider.generated(MItems.ExopackUpgrades.SMELTING_UPGRADE)
provider.generated(MItems.ExopackUpgrades.ENDER_UPGRADE) provider.generated(MItems.ExopackUpgrades.ENDER_UPGRADE)
provider.resource(MItems.TRITANIUM_DUST) provider.component(MItems.TRITANIUM_DUST)
provider.resource(MItems.TRITANIUM_INGOT) provider.component(MItems.TRITANIUM_INGOT)
provider.resource(MItems.TRITANIUM_NUGGET) provider.component(MItems.TRITANIUM_NUGGET)
provider.resource(MItems.TRITANIUM_ORE_CLUMP) provider.resource(MItems.TRITANIUM_ORE_CLUMP)
provider.resource(MItems.DILITHIUM_CRYSTAL)
provider.resource(MItems.WITHERED_STEEL)
provider.resource(MItems.ROFLITE_ALLOY_INGOT)
provider.generated(MItems.EXOPACK_PROBE) provider.generated(MItems.EXOPACK_PROBE)
provider.handheld(MItems.TRITANIUM_TOOLS) provider.handheld(MItems.TRITANIUM_TOOLS)
provider.armorColored(MItems.TRITANIUM_ARMOR) provider.armorColored(MItems.TRITANIUM_ARMOR)
provider.armorWithTrims(MItems.SIMPLE_TRITANIUM_ARMOR) provider.generated(MItems.SIMPLE_TRITANIUM_ARMOR)
provider.handheld(MItems.CHEST_UPGRADER) provider.handheld(MItems.CHEST_UPGRADER)
provider.exec { provider.generatedTiered(MItems.BATTERIES, "battery_tier")
val path = MItems.CONFIGURATOR.registryName!!.path
val ready = provider.withExistingParent("${path}_ready", MatteryItemModelProvider.HANDHELD)
.texture("layer0", modLocation("item/${path}_ready"))
provider.withExistingParent(path, MatteryItemModelProvider.HANDHELD)
.texture("layer0", modLocation("item/$path"))
.override().predicate(modLocation("has_configuration_saved"), 1f).model(ready).end()
}
provider.generated(MItems.BREAD_MONSTER_SPAWN_EGG, modLocation("item/egg/bread_monster"))
provider.generated(MItems.LOADER_SPAWN_EGG, modLocation("item/egg/loader"))
provider.capacitorWithGauge(MItems.BATTERY_CRUDE, 10, "battery_gauge_", modLocation("item/battery_tier0"))
provider.capacitorWithGauge(MItems.BATTERY_BASIC, 10, "battery_gauge_", modLocation("item/battery_tier1"))
provider.capacitorWithGauge(MItems.BATTERY_NORMAL, 10, "battery_gauge_", modLocation("item/battery_tier2"))
provider.capacitorWithGauge(MItems.BATTERY_DENSE, 10, "battery_gauge_", modLocation("item/battery_tier3"))
provider.capacitorWithGauge(MItems.BATTERY_CAPACITOR, 10, "battery_gauge_", modLocation("item/battery_tier4"))
provider.generated(MItems.BATTERY_CREATIVE) provider.generated(MItems.BATTERY_CREATIVE)
provider.capacitorWithGauge(MItems.PROCEDURAL_BATTERY, 9, "battery_procedural_gauge_", modLocation("item/battery_procedural")) provider.generated(MItems.PROCEDURAL_BATTERY, modLocation("item/battery_procedural"))
provider.capacitorWithGauge(MItems.MATTER_CAPACITOR_BASIC, 8, "matter_capacitor_gauge_", modLocation("item/matter_capacitor_tier1")) provider.generated(MItems.MATTER_CAPACITOR_BASIC, modLocation("item/matter_capacitor_tier1"))
provider.capacitorWithGauge(MItems.MATTER_CAPACITOR_NORMAL, 8, "matter_capacitor_gauge_", modLocation("item/matter_capacitor_tier2")) provider.generated(MItems.MATTER_CAPACITOR_NORMAL, modLocation("item/matter_capacitor_tier2"))
provider.capacitorWithGauge(MItems.MATTER_CAPACITOR_DENSE, 8, "matter_capacitor_gauge_", modLocation("item/matter_capacitor_tier3")) provider.generated(MItems.MATTER_CAPACITOR_DENSE, modLocation("item/matter_capacitor_tier3"))
provider.generated(MItems.MATTER_CAPACITOR_CREATIVE) provider.generated(MItems.MATTER_CAPACITOR_CREATIVE)
provider.generated(MItems.MachineUpgrades.Basic.BLANK, modLocation("item/machine_upgrade_tier1")) provider.generated(MItems.MachineUpgrades.Basic.BLANK, modLocation("item/machine_upgrade_tier1"))
@ -186,20 +146,13 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.upgrade(MItems.MachineUpgrades.Creative.MATTER_STORAGE_FLAT_SMALL, "matter", "creative") provider.upgrade(MItems.MachineUpgrades.Creative.MATTER_STORAGE_FLAT_SMALL, "matter", "creative")
provider.capacitorWithGauge(MItems.QUANTUM_BATTERY, 10, "battery_gauge_") provider.generated(MItems.QUANTUM_BATTERY)
provider.capacitorWithGauge(MItems.QUANTUM_CAPACITOR, 10, "battery_gauge_") provider.generated(MItems.QUANTUM_CAPACITOR)
provider.generated(MItems.QUANTUM_BATTERY_CREATIVE) provider.generated(MItems.QUANTUM_BATTERY_CREATIVE)
provider.generated(MItems.PATTERN_DRIVE_NORMAL, modLocation("item/pattern_drive_tier1"))
provider.generated(MItems.PATTERN_DRIVE_DOUBLE, modLocation("item/pattern_drive_tier2"))
provider.generated(MItems.PATTERN_DRIVE_TRIPLE, modLocation("item/pattern_drive_tier3"))
provider.generated(MItems.PATTERN_DRIVE_QUAD, modLocation("item/pattern_drive_tier4"))
provider.generated(MItems.PATTERN_DRIVE_CREATIVE) provider.generated(MItems.PATTERN_DRIVE_CREATIVE)
provider.generated(MItems.PATTERN_DRIVE_CREATIVE2) provider.generated(MItems.PATTERN_DRIVE_CREATIVE2)
provider.withExistingParent(MItems.GOLD_DISK, MItems.PATTERN_DRIVE_CREATIVE.registryName!!)
provider.generated(MItems.MATTER_DUST) provider.generated(MItems.MATTER_DUST)
provider.generated(MItems.TRITANIUM_DOOR.values) provider.generated(MItems.TRITANIUM_DOOR.values)
@ -207,7 +160,7 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.block(MItems.TRITANIUM_TRAPDOOR[null]!!, "tritanium_trapdoor_bottom") provider.block(MItems.TRITANIUM_TRAPDOOR[null]!!, "tritanium_trapdoor_bottom")
for (color in DyeColor.entries) for (color in DyeColor.values())
provider.block(MItems.TRITANIUM_TRAPDOOR[color]!!, "tritanium_trapdoor_${color.name.lowercase()}_bottom") provider.block(MItems.TRITANIUM_TRAPDOOR[color]!!, "tritanium_trapdoor_${color.name.lowercase()}_bottom")
for (item in MRegistry.CARGO_CRATES.allItems.values) for (item in MRegistry.CARGO_CRATES.allItems.values)
@ -218,7 +171,6 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.coloredWithBaseBlock(MItems.MATTER_BOTTLER, "matter_bottler", "_idle") provider.coloredWithBaseBlock(MItems.MATTER_BOTTLER, "matter_bottler", "_idle")
provider.coloredWithBaseBlock(MItems.MATTER_SCANNER, "matter_scanner", "_idle") provider.coloredWithBaseBlock(MItems.MATTER_SCANNER, "matter_scanner", "_idle")
provider.coloredWithBaseBlock(MItems.MATTER_REPLICATOR, "matter_replicator", "_idle") provider.coloredWithBaseBlock(MItems.MATTER_REPLICATOR, "matter_replicator", "_idle")
provider.block(MItems.MATTER_ENTANGLER, "matter_entangler_idle")
provider.coloredWithBaseBlock(MItems.DRIVE_VIEWER, "drive_viewer", "_idle") provider.coloredWithBaseBlock(MItems.DRIVE_VIEWER, "drive_viewer", "_idle")
provider.coloredWithBaseBlock(MItems.MATTER_DECOMPOSER, "matter_decomposer", "_idle") provider.coloredWithBaseBlock(MItems.MATTER_DECOMPOSER, "matter_decomposer", "_idle")
provider.coloredWithBaseBlock(MItems.ENERGY_SERVO, "energy_servo") provider.coloredWithBaseBlock(MItems.ENERGY_SERVO, "energy_servo")
@ -245,7 +197,7 @@ fun addItemModels(provider: MatteryItemModelProvider) {
.end() .end()
} }
for (dye in DyeColor.entries) { for (dye in DyeColor.values()) {
provider.exec { provider.exec {
provider.withExistingParent("android_charger_${dye.name.lowercase()}", modLocation("item/android_charger")).texture("0", modLocation("block/android_charger/${dye.name.lowercase()}")) provider.withExistingParent("android_charger_${dye.name.lowercase()}", modLocation("item/android_charger")).texture("0", modLocation("block/android_charger/${dye.name.lowercase()}"))
provider.withExistingParent("matter_panel_${dye.name.lowercase()}", modLocation("item/matter_panel")).texture("texture", modLocation("block/matter_panel/${dye.name.lowercase()}")) provider.withExistingParent("matter_panel_${dye.name.lowercase()}", modLocation("item/matter_panel")).texture("texture", modLocation("block/matter_panel/${dye.name.lowercase()}"))
@ -261,34 +213,11 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.block(MItems.STORAGE_IMPORTER) provider.block(MItems.STORAGE_IMPORTER)
provider.block(MItems.STORAGE_EXPORTER) provider.block(MItems.STORAGE_EXPORTER)
provider.block(MItems.FLYWHEEL_HOUSING) for (item in MItems.TRITANIUM_ANVIL) {
provider.block(MItems.FLYWHEEL_BEARING) provider.block(item)
provider.block(MItems.FLYWHEEL_SHAFT) }
provider.block(MItems.FLYWHEEL_BATTERY)
provider.block(MItems.TRITANIUM_HULL)
provider.block(MItems.GENERATOR_BLOCK)
provider.block(MItems.ENERGY_INPUT_INTERFACE)
provider.block(MItems.ENERGY_OUTPUT_INTERFACE)
provider.block(MItems.ENERGY_INPUT_HATCH)
provider.block(MItems.ENERGY_OUTPUT_HATCH)
provider.block(MItems.MATTER_INPUT_HATCH)
provider.block(MItems.MATTER_OUTPUT_HATCH)
provider.block(MItems.ITEM_INPUT_HATCH)
provider.block(MItems.ITEM_OUTPUT_HATCH)
provider.block(MItems.MODULAR_FRAME)
provider.block(MItems.HEAVY_MODULAR_FRAME)
MItems.TRITANIUM_ANVIL.values.forEach { provider.blocks(it) }
for ((color, item) in MItems.CARGO_CRATE_MINECARTS) { for ((color, item) in MItems.CARGO_CRATE_MINECARTS) {
provider.generated(item) provider.generated(item)
} }
MItems.SUSPICIOUS_FOODS.ITEMS.forEach { provider.inherit(it, it.mimicking()) }
} }

View File

@ -6,16 +6,15 @@ import net.minecraft.server.packs.PackType
import net.minecraft.world.item.ArmorItem import net.minecraft.world.item.ArmorItem
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.neoforged.neoforge.client.model.generators.ItemModelProvider import net.minecraftforge.client.model.generators.ItemModelProvider
import net.neoforged.neoforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.util.ResourceLocation import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import java.util.LinkedList import java.util.LinkedList
class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) {
private val callbacks = LinkedList<() -> Unit>() private val callbacks = LinkedList<() -> Unit>()
fun exec(func: () -> Unit): MatteryItemModelProvider { fun exec(func: () -> Unit): MatteryItemModelProvider {
@ -32,14 +31,8 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event
fun block(item: Item) = exec { withExistingParent(item.registryName!!.path, modLocation("block/${item.registryName!!.path}")) } fun block(item: Item) = exec { withExistingParent(item.registryName!!.path, modLocation("block/${item.registryName!!.path}")) }
fun block(item: Item, path: String) = exec { withExistingParent(item.registryName!!.path, modLocation("block/$path")) } fun block(item: Item, path: String) = exec { withExistingParent(item.registryName!!.path, modLocation("block/$path")) }
fun withExistingParent(item: Item, path: ResourceLocation) = exec { withExistingParent(item.registryName!!.path, path) }
fun inherit(item: Item, parent: Item) {
exec { withExistingParent(item.registryName!!.path, parent.registryName!!) }
}
fun coloredWithBaseBlock(items: Map<DyeColor?, Item>, path: String) { fun coloredWithBaseBlock(items: Map<DyeColor?, Item>, path: String) {
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
block(items[color]!!, path + "_${color.name.lowercase()}") block(items[color]!!, path + "_${color.name.lowercase()}")
} }
@ -47,7 +40,7 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event
} }
fun coloredWithBaseBlock(items: Map<DyeColor?, Item>, path: String, suffix: String) { fun coloredWithBaseBlock(items: Map<DyeColor?, Item>, path: String, suffix: String) {
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
block(items[color]!!, path + "_${color.name.lowercase()}$suffix") block(items[color]!!, path + "_${color.name.lowercase()}$suffix")
} }
@ -106,29 +99,6 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event
} }
} }
fun armorWithTrims(item: Item, texture: ResourceLocation) = exec {
val mainModel = withExistingParent(item.registryName!!.path, GENERATED).texture("layer0", texture)
if (item is ArmorItem) {
for ((i, material) in ARMOR_TRIM_MATERIALS.withIndex()) {
val trimLocation = ResourceLocation.withDefaultNamespace("trims/items/${item.type.getName()}_trim_${material}")
existingFileHelper.trackGenerated(trimLocation, PackType.CLIENT_RESOURCES, ".png", "textures")
val overrideModel = withExistingParent("${item.registryName!!.path}_${material}_trim", GENERATED)
.texture("layer0", texture)
.texture("layer1", trimLocation)
mainModel.override()
.predicate(ItemModelGenerators.TRIM_TYPE_PREDICATE_ID, (i + 1).toFloat() / ARMOR_TRIM_MATERIALS.size.toFloat())
.model(overrideModel)
.end()
}
}
}
fun armorWithTrims(vararg items: Item) = items.forEach { armorWithTrims(it, modLocation("item/${it.registryName!!.path}")) }
fun armorWithTrims(items: Collection<Item>) = items.forEach { armorWithTrims(it, modLocation("item/${it.registryName!!.path}")) }
fun armorColored(item: Item) = exec { fun armorColored(item: Item) = exec {
withExistingParent(item.registryName!!.path, GENERATED) withExistingParent(item.registryName!!.path, GENERATED)
.texture("layer0", modLocation("item/${item.registryName!!.path}_base")) .texture("layer0", modLocation("item/${item.registryName!!.path}_base"))
@ -143,33 +113,6 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event
.texture("layer1", modLocation("item/machine_upgrade_icon_$upgradeType")) .texture("layer1", modLocation("item/machine_upgrade_icon_$upgradeType"))
} }
fun capacitorWithGauge(item: Item, fillTextures: Int, gaugePrefix: String, baseTexture: ResourceLocation? = null) = exec {
val path = item.registryName!!.path
val texture = baseTexture ?: modLocation("item/$path")
val empty = withExistingParent("${path}_empty", GENERATED)
.texture("layer0", texture)
val basic = withExistingParent(path, GENERATED)
.texture("layer0", texture)
.texture("layer1", modLocation("item/${gaugePrefix}$fillTextures"))
.override()
.predicate(modLocation("capacitor_gauge"), 0f)
.model(empty)
.end()
for (i in 1 .. fillTextures) {
val model = withExistingParent("${path}_fill_$i", GENERATED)
.texture("layer0", texture)
.texture("layer1", modLocation("item/${gaugePrefix}$i"))
basic.override()
.predicate(modLocation("capacitor_gauge"), i.toFloat() / fillTextures.toFloat())
.model(model)
.end()
}
}
companion object { companion object {
val ARMOR_TRIM_MATERIALS = listOf("quartz", "iron", "netherite", "redstone", "copper", "gold", "emerald", "diamond", "lapis", "amethyst") val ARMOR_TRIM_MATERIALS = listOf("quartz", "iron", "netherite", "redstone", "copper", "gold", "emerald", "diamond", "lapis", "amethyst")
val GENERATED = ResourceLocation("minecraft", "item/generated") val GENERATED = ResourceLocation("minecraft", "item/generated")

View File

@ -1,12 +1,6 @@
package ru.dbotthepony.mc.otm.datagen.lang package ru.dbotthepony.mc.otm.datagen.lang
import ru.dbotthepony.mc.otm.config.CablesConfig
import ru.dbotthepony.mc.otm.registry.* import ru.dbotthepony.mc.otm.registry.*
import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.game.MEntityTypes
import ru.dbotthepony.mc.otm.registry.game.MItems
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents
private fun decoratives(provider: MatteryLanguageProvider) { private fun decoratives(provider: MatteryLanguageProvider) {
with(provider.englishColors) { with(provider.englishColors) {
@ -14,7 +8,6 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MRegistry.VENT_ALTERNATIVE, "%s Alternative Vent") add(MRegistry.VENT_ALTERNATIVE, "%s Alternative Vent")
add(MRegistry.COMPUTER_TERMINAL, "%s Computer Terminal") add(MRegistry.COMPUTER_TERMINAL, "%s Computer Terminal")
add(MRegistry.STAR_CHAIR, "%s Star Chair")
add(MRegistry.TRITANIUM_BLOCK, "%s Tritanium Block") add(MRegistry.TRITANIUM_BLOCK, "%s Tritanium Block")
add(MRegistry.TRITANIUM_STAIRS, "%s Tritanium Stairs") add(MRegistry.TRITANIUM_STAIRS, "%s Tritanium Stairs")
add(MRegistry.TRITANIUM_SLAB, "%s Tritanium Slab") add(MRegistry.TRITANIUM_SLAB, "%s Tritanium Slab")
@ -32,7 +25,7 @@ private fun decoratives(provider: MatteryLanguageProvider) {
} }
with (provider.english) { with (provider.english) {
for ((color, name) in provider.englishColors.mapped) { for ((color, name) in provider.englishColors.dyeClassMapped) {
add(MItems.CARGO_CRATE_MINECARTS[color]!!, "Minecart with $name Cargo Crate") add(MItems.CARGO_CRATE_MINECARTS[color]!!, "Minecart with $name Cargo Crate")
add(MEntityTypes.CARGO_CRATE_MINECARTS[color]!!, "Minecart with $name Cargo Crate") add(MEntityTypes.CARGO_CRATE_MINECARTS[color]!!, "Minecart with $name Cargo Crate")
@ -49,8 +42,6 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description0", "High blast resistance door with redstone latch...") add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description0", "High blast resistance door with redstone latch...")
add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description1", "...feeling safe now?") add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description1", "...feeling safe now?")
add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description2", "This one is painted $name") add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description2", "This one is painted $name")
add(MBlocks.GRILL[color]!!, "$name Briefcase Grill")
} }
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "Tritanium Pressure Plate") add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "Tritanium Pressure Plate")
@ -58,27 +49,12 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description1", "High blast resistance") add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description1", "High blast resistance")
} }
with(provider.englishColors) {
addIntermediate(MBlocks.TRITANIUM_STRIPED_BLOCK, "Tritanium %s Striped Block")
addIntermediate(MBlocks.TRITANIUM_STRIPED_STAIRS, "Tritanium %s Striped Stairs")
addIntermediate(MBlocks.TRITANIUM_STRIPED_SLAB, "Tritanium %s Striped Slab")
addIntermediate(MBlocks.TRITANIUM_STRIPED_WALL, "Tritanium %s Striped Wall")
}
with(provider.english) { with(provider.english) {
misc("computer_terminal_tooltip", "Can be used as Redstone button, except it sends signal to block behind it, not under")
misc("computer_terminal_tooltip1", "To setup how long it sends redstone signal, interact with it while sneaking")
misc("decorative", "Decorative")
add(MItems.CARGO_CRATE_MINECARTS[null]!!, "Minecart with Cargo Crate") add(MItems.CARGO_CRATE_MINECARTS[null]!!, "Minecart with Cargo Crate")
add(MEntityTypes.CARGO_CRATE_MINECARTS[null]!!, "Minecart with Cargo Crate") add(MEntityTypes.CARGO_CRATE_MINECARTS[null]!!, "Minecart with Cargo Crate")
add(MBlocks.GRILL[null]!!, "Briefcase Grill")
add(MRegistry.CARGO_CRATES.block, "Cargo Crate") add(MRegistry.CARGO_CRATES.block, "Cargo Crate")
add(MRegistry.COMPUTER_TERMINAL.block, "Computer Terminal") add(MRegistry.COMPUTER_TERMINAL.block, "Computer Terminal")
add(MRegistry.STAR_CHAIR.block, "Star Chair")
add(MRegistry.STAR_CHAIR.block, "desc", "For extensive stargazing.")
add(MRegistry.TRITANIUM_BLOCK.block, "Tritanium Block") add(MRegistry.TRITANIUM_BLOCK.block, "Tritanium Block")
add(MRegistry.TRITANIUM_STAIRS.block, "Tritanium Stairs") add(MRegistry.TRITANIUM_STAIRS.block, "Tritanium Stairs")
add(MRegistry.TRITANIUM_SLAB.block, "Tritanium Slab") add(MRegistry.TRITANIUM_SLAB.block, "Tritanium Slab")
@ -92,11 +68,12 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MRegistry.VENT.block, "Vent") add(MRegistry.VENT.block, "Vent")
add(MRegistry.VENT_ALTERNATIVE.block, "Alternative Vent") add(MRegistry.VENT_ALTERNATIVE.block, "Alternative Vent")
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.englishColors.mapped[base]!! val baseName = provider.englishColors.dyeClassMapped[base]!!
val stripeName = provider.englishColors.mapped[stripe]!! val stripeName = provider.englishColors.dyeClassMapped[stripe]!!
add(block, "$baseName Colored $stripeName Striped Tritanium Block") add(block, "$baseName Colored $stripeName Striped Tritanium Block")
} }
@ -104,8 +81,8 @@ private fun decoratives(provider: MatteryLanguageProvider) {
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_STAIRS.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_STAIRS.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.englishColors.mapped[base]!! val baseName = provider.englishColors.dyeClassMapped[base]!!
val stripeName = provider.englishColors.mapped[stripe]!! val stripeName = provider.englishColors.dyeClassMapped[stripe]!!
add(block, "$baseName Colored $stripeName Striped Tritanium Stairs") add(block, "$baseName Colored $stripeName Striped Tritanium Stairs")
} }
@ -113,8 +90,8 @@ private fun decoratives(provider: MatteryLanguageProvider) {
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_SLAB.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_SLAB.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.englishColors.mapped[base]!! val baseName = provider.englishColors.dyeClassMapped[base]!!
val stripeName = provider.englishColors.mapped[stripe]!! val stripeName = provider.englishColors.dyeClassMapped[stripe]!!
add(block, "$baseName Colored $stripeName Striped Tritanium Slab") add(block, "$baseName Colored $stripeName Striped Tritanium Slab")
} }
@ -122,8 +99,8 @@ private fun decoratives(provider: MatteryLanguageProvider) {
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_WALL.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_WALL.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.englishColors.mapped[base]!! val baseName = provider.englishColors.dyeClassMapped[base]!!
val stripeName = provider.englishColors.mapped[stripe]!! val stripeName = provider.englishColors.dyeClassMapped[stripe]!!
add(block, "$baseName Colored $stripeName Striped Tritanium Wall") add(block, "$baseName Colored $stripeName Striped Tritanium Wall")
} }
@ -135,9 +112,6 @@ private fun sounds(provider: MatteryLanguageProvider) {
sound("rifle_shot", "Plasma rifle fires") sound("rifle_shot", "Plasma rifle fires")
sound("plasma_weapon_overheat", "Plasma weapon overheats") sound("plasma_weapon_overheat", "Plasma weapon overheats")
sound("player_become_android", "Player became android") sound("player_become_android", "Player became android")
sound("projectile_parry", "Projectile parried")
sound("jump_boost", "Jump boost")
sound("shockwave", "Landing shockwave")
sound(MSoundEvents.CARGO_CRATE_OPEN, "Cargo crate opened") sound(MSoundEvents.CARGO_CRATE_OPEN, "Cargo crate opened")
} }
@ -145,19 +119,6 @@ private fun sounds(provider: MatteryLanguageProvider) {
private fun misc(provider: MatteryLanguageProvider) { private fun misc(provider: MatteryLanguageProvider) {
with(provider.english) { with(provider.english) {
misc("misc.inert", "Inert")
misc("misc.yes", "Yes")
misc("misc.no", "No")
misc("pwr_alert1", "[%s]")
misc("pwr_alert2", "PWR: ALERT")
misc("pwr_alert3", "WARNING ERROR:")
misc("pwr_alert4", "system_crash_log")
// Error 06E has occurred at 0027F:C0082E2270273 in VXE VMMXDE
// Error <Code> has occurred at <Server Block>:<RAM Address> in <Register?>
misc("pwr_alert5", "Error %s has occurred at %s:%s in %s")
gui("double_processing", "Processes two items at once") gui("double_processing", "Processes two items at once")
misc("painted.black", "Painted Black") misc("painted.black", "Painted Black")
@ -188,16 +149,8 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("needs_no_power", "Requires no power to operate") misc("needs_no_power", "Requires no power to operate")
gui("lock_holo_screen", "Lock contents") gui("lock_holo_screen", "Lock contents")
gui("lock_holo_screen.unlocked", "Unlock contents")
gui("lock_holo_screen.tip", "Locking and unlocking contents is only possible in creative.\nWhen locked, text boundaries are removed.") gui("lock_holo_screen.tip", "Locking and unlocking contents is only possible in creative.\nWhen locked, text boundaries are removed.")
gui("holo_screen.resize_text", "Resize text automatically")
gui("holo_screen.do_not_resize_text", "Do not resize text")
gui("abc", "ABC")
gui("use_standard_font", "Use standard font")
gui("use_small_font", "Use small font")
gui("ticks", "Ticks") gui("ticks", "Ticks")
gui("power_cost_per_use", "Power cost per use: %s") gui("power_cost_per_use", "Power cost per use: %s")
@ -276,8 +229,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("suffix.exa", "%s E%s") misc("suffix.exa", "%s E%s")
misc("suffix.zetta", "%s Z%s") misc("suffix.zetta", "%s Z%s")
misc("suffix.yotta", "%s Y%s") misc("suffix.yotta", "%s Y%s")
misc("suffix.ronna", "%s R%s")
misc("suffix.quetta", "%s Q%s")
misc("suffix.deci", "%s d%s") misc("suffix.deci", "%s d%s")
misc("suffix.centi", "%s c%s") misc("suffix.centi", "%s c%s")
@ -299,8 +250,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("suffix_concise.exa", "%sE") misc("suffix_concise.exa", "%sE")
misc("suffix_concise.zetta", "%sZ") misc("suffix_concise.zetta", "%sZ")
misc("suffix_concise.yotta", "%sY") misc("suffix_concise.yotta", "%sY")
misc("suffix_concise.ronna", "%sR")
misc("suffix_concise.quetta", "%sQ")
misc("suffix_concise.deci", "%sd") misc("suffix_concise.deci", "%sd")
misc("suffix_concise.centi", "%sc") misc("suffix_concise.centi", "%sc")
@ -321,9 +270,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("suffix_raw.exa", "E") misc("suffix_raw.exa", "E")
misc("suffix_raw.zetta", "Z") misc("suffix_raw.zetta", "Z")
misc("suffix_raw.yotta", "Y") misc("suffix_raw.yotta", "Y")
misc("suffix_raw.ronna", "R")
misc("suffix_raw.quetta", "Q")
misc("suffix_raw.deci", "d") misc("suffix_raw.deci", "d")
misc("suffix_raw.centi", "c") misc("suffix_raw.centi", "c")
misc("suffix_raw.milli", "m") misc("suffix_raw.milli", "m")
@ -381,13 +327,9 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("pill.oblivion", "Items and Experience spent on research is fully refunded.") misc("pill.oblivion", "Items and Experience spent on research is fully refunded.")
misc("pill.message_oblivion", "All android features are removed and all research refunded.") misc("pill.message_oblivion", "All android features are removed and all research refunded.")
misc("pill.heal", "Provides 8 seconds of Regeneration III.") misc("pill.heal", "Instantly restores 4 hearts upon ingestion, provides 2 min Absorption V and 8 seconds Regeneration III.")
misc("pill.heal_android", "Does nothing to androids.") misc("pill.heal_android", "Does nothing to androids.")
misc("pill.not_normal", "Instantly kills fleshy creatures upon ingestion")
misc("pill.suspicious_food.desc", "On closer inspection, this food doesn't seem right...")
misc("pill.suspicious_food", "Suspicious %s")
misc("pill.message", "Nothing happened, but you feel... exhausted?.. Maybe get rest.") misc("pill.message", "Nothing happened, but you feel... exhausted?.. Maybe get rest.")
misc("pill.message_finish", "§kONE OF US ONE OF US ONE OF US") misc("pill.message_finish", "§kONE OF US ONE OF US ONE OF US")
@ -403,14 +345,9 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("power.burn_time", "Burn time left: %s ticks") gui("power.burn_time", "Burn time left: %s ticks")
gui("progress_widget", "Progress: %s%%") gui("progress_widget", "Progress: %s%%")
gui("progress_widget_ticks", "Progress: %d / %d (%s%%)") gui("progress_widget_stuck", "The machine can not work, check configuration")
gui("fuel_widget", "Fuel: %s%%")
gui("fuel_widget_ticks", "Fuel: %d / %d (%s%%)")
gui("progress_stuck", "The machine can not work, check configuration")
gui("total_raw", "Total:") gui("total_raw", "Total:")
gui("total", "Total: %s")
gui("total_approx", "Total: ~%s")
gui("matter.percentage_level", "Matter level: %s%%") gui("matter.percentage_level", "Matter level: %s%%")
gui("matter.format", "Matter: %s") gui("matter.format", "Matter: %s")
@ -418,11 +355,6 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("matter.format_and_complexity2", "%s (%s) / Complexity: %s (%s)") gui("matter.format_and_complexity2", "%s (%s) / Complexity: %s (%s)")
gui("matter.name", "MtU") gui("matter.name", "MtU")
gui("flywheel.top", "When used as flywheel core:")
gui("flywheel.storage", "* Storage: %s")
gui("flywheel.receive_efficiency", "* Wind up efficiency: %s")
gui("flywheel.momentum_loss_speed", "* Momentum loss speed factor: %s")
gui("filter.is_whitelist", "Is Whitelist") gui("filter.is_whitelist", "Is Whitelist")
gui("filter.match_nbt", "Match NBT") gui("filter.match_nbt", "Match NBT")
gui("filter.match_tag", "Match Tag") gui("filter.match_tag", "Match Tag")
@ -446,7 +378,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("android_station.research.low_power", "Android Station is low on power! Can't research!") misc("android_station.research.low_power", "Android Station is low on power! Can't research!")
misc("android_station.research.researched", "Researched!") misc("android_station.research.researched", "Researched!")
misc("android_station.research.can_be_researched", "Ready to research!") misc("android_station.research.can_be_researched", "Ready to research!")
misc("android_station.research.can_not_afford", "Missing required items!")
misc("android_station.research.can_not_be_researched", "Can't research!") misc("android_station.research.can_not_be_researched", "Can't research!")
misc("android_station.research.xp_cost", "Experience cost: %s levels") misc("android_station.research.xp_cost", "Experience cost: %s levels")
misc("android_station.research.item", "Requires %s x%s") misc("android_station.research.item", "Requires %s x%s")
@ -482,8 +413,6 @@ private fun death(provider: MatteryLanguageProvider) {
death("otm_emp", "%1\$s electronics' fried") death("otm_emp", "%1\$s electronics' fried")
death("otm_cosmic_rays", "%1\$s electronics' got scrambled by cosmic radiation") death("otm_cosmic_rays", "%1\$s electronics' got scrambled by cosmic radiation")
death("otm_android_discharge", "%1\$s ran out of power") death("otm_android_discharge", "%1\$s ran out of power")
death("otm_not_normal_pill", "%1\$s took meds")
death("otm_not_normal_pill.item", "%1\$s took %2\$s")
death("otm_become_android.player", "%1\$s lost their humanity whilst %2\$s tried to reason with them") death("otm_become_android.player", "%1\$s lost their humanity whilst %2\$s tried to reason with them")
death("otm_become_humane.player", "%1\$s gained their humanity whilst %2\$s tried to reason with them") death("otm_become_humane.player", "%1\$s gained their humanity whilst %2\$s tried to reason with them")
@ -547,41 +476,10 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.MATTER_ENTANGLER, "Matter Entangler") add(MBlocks.MATTER_ENTANGLER, "Matter Entangler")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.CRUDE]!!, "Crude Energy Cable")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.REGULAR]!!, "Energy Cable")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.ADVANCED]!!, "Advanced Energy Cable")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.SUPERCONDUCTOR]!!, "Superconductive Energy Cable")
addBlock(MBlocks.DRIVE_VIEWER.values, "Drive Viewer") addBlock(MBlocks.DRIVE_VIEWER.values, "Drive Viewer")
add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point") add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point")
add(MBlocks.BLACK_HOLE_GENERATOR, "Matter Acceleration Power Generator")
add(MBlocks.FLYWHEEL_SHAFT, "Flywheel Shaft")
add(MBlocks.FLYWHEEL_SHAFT, "desc", "Placed between bearings, safe for decoration")
add(MBlocks.FLYWHEEL_BEARING, "Flywheel Bearing")
add(MBlocks.FLYWHEEL_BEARING, "desc", "Replaces top and bottom housing blocks in the center, safe for decoration")
add(MBlocks.FLYWHEEL_BATTERY, "Flywheel Controller")
add(MBlocks.FLYWHEEL_BATTERY, "desc", "Multiblock controller, requires housing, bearing, shaft, generator and core material of choice")
add(MBlocks.FLYWHEEL_BATTERY, "desc2", "Can have arbitrary height, with bottom limit of 4 blocks tall")
add(MBlocks.FLYWHEEL_BATTERY, "desc3", "Built as rectangular shape, with base surface of 5 by 5 blocks")
add(MBlocks.FLYWHEEL_BATTERY, "desc4", "Uses Energy *Interface*s as I/O ports, which must be put at same level as generator blocks inside structure,")
add(MBlocks.FLYWHEEL_BATTERY, "desc5", "replacing housing blocks")
add(MBlocks.FLYWHEEL_BATTERY, "desc6", "Important: must replace housing block in wall in middle at same level where flywheel material start,")
add(MBlocks.FLYWHEEL_BATTERY, "desc7", "in other words, controller is put one block above absolute bottom of structure")
add(MBlocks.FLYWHEEL_HOUSING, "Flywheel Housing")
add(MBlocks.FLYWHEEL_HOUSING, "desc", "5xNx5 multiblock casing, safe for decoration")
add(MBlocks.GENERATOR_BLOCK, "Generator Block")
add(MBlocks.GENERATOR_BLOCK, "desc", "Part of a multiblock, safe for decoration")
add(MBlocks.MODULAR_FRAME, "Modular Frame")
add(MBlocks.HEAVY_MODULAR_FRAME, "Heavy Modular Frame")
add(MBlocks.ENERGY_INPUT_INTERFACE, "Energy Input Interface")
add(MBlocks.ENERGY_OUTPUT_INTERFACE, "Energy Output Interface")
add(MBlocks.ENERGY_INPUT_HATCH, "Energy Input Hatch") add(MBlocks.ENERGY_INPUT_HATCH, "Energy Input Hatch")
add(MBlocks.ITEM_INPUT_HATCH, "Item Input Hatch") add(MBlocks.ITEM_INPUT_HATCH, "Item Input Hatch")
@ -590,13 +488,6 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.ITEM_OUTPUT_HATCH, "Item Output Hatch") add(MBlocks.ITEM_OUTPUT_HATCH, "Item Output Hatch")
add(MBlocks.MATTER_OUTPUT_HATCH, "Matter Output Hatch") add(MBlocks.MATTER_OUTPUT_HATCH, "Matter Output Hatch")
add(MBlocks.BLACK_HOLE_GENERATOR, "Matter Acceleration Power Generator")
add(MBlocks.TRITANIUM_HULL, "Tritanium Hull")
add(MBlocks.TRITANIUM_HULL, "desc", "A sturdy part of a multiblock, safe for decoration")
add(MBlocks.MATTER_INJECTOR, "Matter Injector")
add(MBlocks.ANTIMATTER_INJECTOR, "Antimatter Injector")
add(MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR, "High Energy Particle Collector")
addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Cobblestone Generator") addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Cobblestone Generator")
add(MBlocks.INFINITE_WATER_SOURCE, "Infinite Water Source") add(MBlocks.INFINITE_WATER_SOURCE, "Infinite Water Source")
add(MBlocks.INFINITE_WATER_SOURCE, "desc", "Pushes water into all neighbour blocks") add(MBlocks.INFINITE_WATER_SOURCE, "desc", "Pushes water into all neighbour blocks")
@ -618,11 +509,9 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.HOLO_SIGN, "desc", "Multi-line, colored and glowing, text sign") add(MBlocks.HOLO_SIGN, "desc", "Multi-line, colored and glowing, text sign")
add(MBlocks.TRITANIUM_INGOT_BLOCK, "Tritanium Plating Block") add(MBlocks.TRITANIUM_INGOT_BLOCK, "Tritanium Plating Block")
add(MBlocks.WITHERED_STEEL_BLOCK, "Withered Steel Block")
add(MBlocks.ROFLITE_ALLOY_BLOCK, "Roflite Alloy Block")
addBlock(MBlocks.ENERGY_COUNTER.values, "Energy Counter") addBlock(MBlocks.ENERGY_COUNTER.values, "Energy Counter")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc", "Restricts energy flow direction;") addBlock(MBlocks.ENERGY_COUNTER.values, "desc", "Restricts energy flow;")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc2", "Allows to limit energy throughput;") addBlock(MBlocks.ENERGY_COUNTER.values, "desc2", "Allows to limit energy throughput;")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc3", "Collects statistics of passed energy;") addBlock(MBlocks.ENERGY_COUNTER.values, "desc3", "Collects statistics of passed energy;")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc4", "Displays flow activity on its monitor") addBlock(MBlocks.ENERGY_COUNTER.values, "desc4", "Displays flow activity on its monitor")
@ -630,9 +519,6 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.ENERGY_COUNTER[null]!!, "facing", "Input facing: %s") add(MBlocks.ENERGY_COUNTER[null]!!, "facing", "Input facing: %s")
add(MBlocks.ENERGY_COUNTER[null]!!, "switch", "Switch input facing") add(MBlocks.ENERGY_COUNTER[null]!!, "switch", "Switch input facing")
add(MBlocks.ENERGY_COUNTER[null]!!, "limit", "I/O Limit. -1 means no limit") add(MBlocks.ENERGY_COUNTER[null]!!, "limit", "I/O Limit. -1 means no limit")
add(MBlocks.ENERGY_COUNTER[null]!!, "display_this", "Display this information on block's screen")
add(MBlocks.ENERGY_COUNTER[null]!!, "do_pull", "Pull energy from input side and push to output")
add(MBlocks.ENERGY_COUNTER[null]!!, "dont_pull", "Don't pull energy")
addBlock(MBlocks.CHEMICAL_GENERATOR.values, "Chemical Generator") addBlock(MBlocks.CHEMICAL_GENERATOR.values, "Chemical Generator")
addBlock(MBlocks.CHEMICAL_GENERATOR.values, "desc", "Generates power by burning solid fuels") addBlock(MBlocks.CHEMICAL_GENERATOR.values, "desc", "Generates power by burning solid fuels")
@ -655,16 +541,16 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.CARBON_FIBRE_BLOCK, "Carbon Fibre Block") add(MBlocks.CARBON_FIBRE_BLOCK, "Carbon Fibre Block")
add(MBlocks.METAL_JUNK, "Metal Junk Block") add(MBlocks.METAL_JUNK, "Metal Junk Block")
add(MBlocks.METAL_JUNK, "desc", "Useless junk, or is it?") add(MBlocks.METAL_JUNK, "desc", "Useless junk, or is it?")
add(MBlocks.METAL_MESH, "Metal Grate") add(MBlocks.METAL_MESH, "Metal Mesh")
add(MBlocks.TRITANIUM_STRIPED_BLOCK, "Tritanium Striped Block")
add(MBlocks.TRITANIUM_STRIPED_STAIRS, "Tritanium Striped Stairs")
add(MBlocks.TRITANIUM_STRIPED_SLAB, "Tritanium Striped Slab")
add(MBlocks.TRITANIUM_STRIPED_WALL, "Tritanium Striped Wall")
add(MBlocks.TRITANIUM_ORE, "Tritanium Ore") add(MBlocks.TRITANIUM_ORE, "Tritanium Ore")
add(MBlocks.DEEPSLATE_TRITANIUM_ORE, "Deepslate Tritanium Ore") add(MBlocks.DEEPSLATE_TRITANIUM_ORE, "Deepslate Tritanium Ore")
add(MBlocks.TRITANIUM_RAW_BLOCK, "Raw Tritanium Block") add(MBlocks.TRITANIUM_RAW_BLOCK, "Raw Tritanium Block")
add(MBlocks.DILITHIUM_ORE, "Dilithium Ore")
add(MBlocks.DEEPSLATE_DILITHIUM_ORE, "Deepslate Dilithium Ore")
add(MBlocks.DILITHIUM_CRYSTAL_BLOCK, "Dilithium Crystal Block")
add(MBlocks.STORAGE_CABLE, "Storage Cable") add(MBlocks.STORAGE_CABLE, "Storage Cable")
addBlock(MBlocks.STORAGE_POWER_SUPPLIER.values, "Storage Power Supplier") addBlock(MBlocks.STORAGE_POWER_SUPPLIER.values, "Storage Power Supplier")
add(MBlocks.STORAGE_BUS, "Storage Bus") add(MBlocks.STORAGE_BUS, "Storage Bus")
@ -680,16 +566,11 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.PHANTOM_ATTRACTOR, "Phantom Attractor") add(MBlocks.PHANTOM_ATTRACTOR, "Phantom Attractor")
add(MBlocks.PHANTOM_ATTRACTOR, "desc", "Attracts Phantoms when it is night time") add(MBlocks.PHANTOM_ATTRACTOR, "desc", "Attracts Phantoms when it is night time")
add(MBlocks.REDSTONE_LAMP_INVERTED, "Redstone Lamp (Inverted signal)")
add(MBlocks.REINFORCED_REDSTONE_LAMP, "Reinforced Redstone Lamp")
add(MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED, "Reinforced Redstone Lamp (Inverted signal)")
add(MBlocks.LABORATORY_LAMP, "Laboratory Lamp") add(MBlocks.LABORATORY_LAMP, "Laboratory Lamp")
add(MBlocks.LABORATORY_LAMP, "description", "Provides directional light with redstone switch") add(MBlocks.LABORATORY_LAMP, "description", "Provides directional light with redstone switch")
add(MBlocks.LABORATORY_LAMP_INVERTED, "Laboratory Lamp (Inverted signal)") add(MBlocks.LABORATORY_LAMP_INVERTED, "Laboratory Lamp (Inverted Signal)")
add(MBlocks.DANGER_STRIPE_BLOCK, "Danger Stripes") add(MBlocks.DANGER_STRIPE_BLOCK, "Danger Stripes")
add(MBlocks.METAL_BEAM, "Metal Beam") add(MBlocks.METAL_BEAM, "Metal Beam")
add(MBlocks.METAL_BEAM_CENTER, "Metal Beam (Center)")
add(MBlocks.TRITANIUM_DOOR[null]!!, "Tritanium Door") add(MBlocks.TRITANIUM_DOOR[null]!!, "Tritanium Door")
add(MBlocks.TRITANIUM_DOOR[null]!!, "description0", "High blast resistance door with redstone latch...") add(MBlocks.TRITANIUM_DOOR[null]!!, "description0", "High blast resistance door with redstone latch...")
@ -700,27 +581,14 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.TRITANIUM_TRAPDOOR[null]!!, "description1", "...feeling safe now?") add(MBlocks.TRITANIUM_TRAPDOOR[null]!!, "description1", "...feeling safe now?")
add(MBlocks.TRITANIUM_BARS, "Tritanium Bars") add(MBlocks.TRITANIUM_BARS, "Tritanium Bars")
add(MBlocks.METAL_RAILING, "Metal Railing")
for ((color, blocks) in MBlocks.TRITANIUM_ANVIL.entries) { for (block in MBlocks.TRITANIUM_ANVIL)
if (color == null) { add(block, "Tritanium Anvil")
for (block in blocks)
add(block, "Tritanium Anvil")
} else {
for (block in blocks)
add(block, "${provider.englishColors.mapped[color]} Tritanium Anvil")
}
}
} }
} }
private fun items(provider: MatteryLanguageProvider) { private fun items(provider: MatteryLanguageProvider) {
with(provider.english) { with(provider.english) {
add(MItems.REDSTONE_INTERACTOR, "Redstone Key")
add(MItems.REDSTONE_INTERACTOR, "desc", "Allows to 'send' redstone signal out of any block")
add(MItems.REDSTONE_INTERACTOR, "desc1", "In other words, allows to temporarily activate redstone mechanisms, such as opening Iron Doors")
add(MItems.REDSTONE_INTERACTOR, "desc2", "Use while sneaking to set redstone timer")
add(MItems.PROCEDURAL_BATTERY, "Mythical Battery") add(MItems.PROCEDURAL_BATTERY, "Mythical Battery")
add(MItems.PROCEDURAL_BATTERY, "desc", "These batteries are found in dungeons with randomized stats") add(MItems.PROCEDURAL_BATTERY, "desc", "These batteries are found in dungeons with randomized stats")
@ -752,7 +620,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ESSENCE_SERVO, "desc2", "Can be used as a tool to pump essence manually") add(MItems.ESSENCE_SERVO, "desc2", "Can be used as a tool to pump essence manually")
add(MItems.NUTRIENT_PASTE, "Nutrient Paste") add(MItems.NUTRIENT_PASTE, "Nutrient Paste")
add(MItems.IMPERFECT_BREAD, "Imperfect Bread")
add(MItems.FLUID_CAPSULE, "Fluid Capsule") add(MItems.FLUID_CAPSULE, "Fluid Capsule")
add(MItems.FLUID_CAPSULE, "named", "Fluid Capsule (%s)") add(MItems.FLUID_CAPSULE, "named", "Fluid Capsule (%s)")
@ -784,8 +651,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.TRITANIUM_SHEARS, "Tritanium Shears") add(MItems.TRITANIUM_SHEARS, "Tritanium Shears")
add(MItems.TRITANIUM_SHIELD, "Tritanium Shield") add(MItems.TRITANIUM_SHIELD, "Tritanium Shield")
add(MItems.WITHERED_STEEL_SWORD, "Withered Steel Sword")
add(MItems.TRITANIUM_HELMET, "Tritanium Helmet") add(MItems.TRITANIUM_HELMET, "Tritanium Helmet")
add(MItems.TRITANIUM_CHESTPLATE, "Tritanium Chestplate") add(MItems.TRITANIUM_CHESTPLATE, "Tritanium Chestplate")
add(MItems.TRITANIUM_PANTS, "Tritanium Leggings") add(MItems.TRITANIUM_PANTS, "Tritanium Leggings")
@ -798,24 +663,16 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.TRITANIUM_DUST, "Tritanium Dust") add(MItems.TRITANIUM_DUST, "Tritanium Dust")
add(MItems.TRITANIUM_INGOT, "Tritanium Ingot") add(MItems.TRITANIUM_INGOT, "Tritanium Ingot")
add(MItems.DILITHIUM_CRYSTAL, "Dilithium Crystal")
add(MItems.WITHERED_STEEL, "Withered Steel Ingot")
add(MItems.ROFLITE_ALLOY_INGOT, "Roflite Alloy Ingot")
add(MItems.TRITANIUM_NUGGET, "Tritanium Nugget") add(MItems.TRITANIUM_NUGGET, "Tritanium Nugget")
add(MItems.MATTER_IO_PORT, "Matter IO Port") add(MItems.MATTER_IO_PORT, "Matter IO Port")
add(MItems.MATTER_TRANSFORM_MATRIX, "Matter Transformation Matrix") add(MItems.MATTER_TRANSFORM_MATRIX, "Matter Transformation Matrix")
add(MItems.ANTIMATTER_TRANSFORM_MATRIX, "Antimatter Transformation Matrix")
add(MItems.ANTIMATTER_TRANSFORM_MATRIX, "desc", "Can be found in The End cities")
add(MItems.ENERGY_BUS, "Energy Bus") add(MItems.ENERGY_BUS, "Energy Bus")
add(MItems.ELECTRIC_PARTS, "Electric Parts") add(MItems.ELECTRIC_PARTS, "Electric Parts")
add(MItems.ELECTRIC_PARTS, "desc", "Capacitors, resistors, diodes, jumpers...")
add(MItems.MECHANICAL_PARTS, "Mechanical Parts")
add(MItems.MECHANICAL_PARTS, "desc", "Bearings, gears, fittings, axial shafts...")
add(MItems.MACHINE_FRAME, "Machine Frame") add(MItems.MACHINE_FRAME, "Machine Frame")
add(MItems.TRITANIUM_PLATE, "Tritanium Plate") add(MItems.TRITANIUM_PLATE, "Tritanium Plate")
add(MItems.IRON_PLATE, "Iron Plate") add(MItems.IRON_PLATE, "Iron Plate")
add(MItems.GOLD_PLATE, "Gold Plate") add(MItems.GOLD_PLATE, "Gold Plate")
add(MItems.COPPER_WIRING, "Copper Wiring") add(MItems.COPPER_WIRING, "Copper Wiring")
add(MItems.GOLD_WIRING, "Gold Wiring") add(MItems.GOLD_WIRING, "Gold Wiring")
add(MItems.PORTABLE_CONDENSATION_DRIVE_CASING, "Portable Condensation Drive Casing") add(MItems.PORTABLE_CONDENSATION_DRIVE_CASING, "Portable Condensation Drive Casing")
add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE_CASING, "Portable Dense Condensation Drive Casing") add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE_CASING, "Portable Dense Condensation Drive Casing")
@ -830,20 +687,16 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.MIRROR, "desc", "I can clearly see my own reflection in this mirror") add(MItems.MIRROR, "desc", "I can clearly see my own reflection in this mirror")
add(MItems.REINFORCED_TRITANIUM_PLATE, "Reinforced Tritanium Plate") add(MItems.REINFORCED_TRITANIUM_PLATE, "Reinforced Tritanium Plate")
add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "An armor plate, reinforced to withstand great kinetic forces") add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "An armor plate, reinforced to withstand great kinetic forces")
add(MItems.REINFORCED_IRON_PLATE, "Reinforced Iron Plate")
add(MItems.REINFORCED_IRON_PLATE, "desc", "A sturdier and more durable Iron Plate")
add(MItems.ARMOR_ASSEMBLY, "Armor assembly")
add(MItems.CARBON_MESH, "Carbon Mesh") add(MItems.CARBON_MESH, "Carbon Mesh")
add(MItems.DISPLAY_SCREEN, "Display Screen")
add(MItems.GRAVITATIONAL_DISRUPTOR, "Spacetime Equalizer") add(MItems.GRAVITATIONAL_DISRUPTOR, "Spacetime Equalizer")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description", "Once within close proximity of massive spacetime dilation anomaly, equalizes spacetime in it's radius") add(MItems.GRAVITATIONAL_DISRUPTOR, "desc", "Once within close proximity of massive spacetime dilation anomaly, equalizes spacetime in it's radius")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description2", "Allows collapse of singularities") add(MItems.GRAVITATIONAL_DISRUPTOR, "desc2", "Allows collapse of singularities")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description3", "Doesn't destroy any of mass singularity had acquired, which result in violent explosion of matter!") add(MItems.GRAVITATIONAL_DISRUPTOR, "desc3", "Doesn't destroy any of mass singularity had acquired, which result in violent explosion of matter!")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description4", "The explosion %s be contained by %s. Do not even attempt to contain it.") add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4", "The explosion %s be contained by %s. Do not even attempt to contain it.")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description4_clarification", "can not") add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4_clarification", "can not")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description4_clarification2", "anything") add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4_clarification2", "anything")
add(MItems.MATTER_DUST, "Matter Dust") add(MItems.MATTER_DUST, "Matter Dust")
add(MItems.MATTER_DUST, "desc", "This item is product of failed decomposition or replication attempt") add(MItems.MATTER_DUST, "desc", "This item is product of failed decomposition or replication attempt")
@ -854,7 +707,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.PILL_HUMANE, "Humane Pill") add(MItems.PILL_HUMANE, "Humane Pill")
add(MItems.PILL_OBLIVION, "Android Factory Reset Pill") add(MItems.PILL_OBLIVION, "Android Factory Reset Pill")
add(MItems.PILL_HEAL, "Medical Pill") add(MItems.PILL_HEAL, "Medical Pill")
add(MItems.PILL_NOT_NORMAL, "Not/Normal Pill")
add(MItems.MATTER_CAPACITOR_PARTS, "Matter Capacitor Parts") add(MItems.MATTER_CAPACITOR_PARTS, "Matter Capacitor Parts")
add(MItems.MATTER_CAPACITOR_BASIC, "Basic Matter Capacitor") add(MItems.MATTER_CAPACITOR_BASIC, "Basic Matter Capacitor")
@ -868,24 +720,13 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ENERGY_SWORD, "desc3", "Always strikes surrounding enemies with full damage if empowered") add(MItems.ENERGY_SWORD, "desc3", "Always strikes surrounding enemies with full damage if empowered")
add(MItems.ENERGY_SWORD, "desc4", "Does not benefit from Sweeping Edge enchantment") add(MItems.ENERGY_SWORD, "desc4", "Does not benefit from Sweeping Edge enchantment")
add(MItems.FALLING_SUN, "◄ Falling Sun ►")
add(MItems.FALLING_SUN, "desc", "Prototype weapon, needs power to operate")
add(MItems.FALLING_SUN, "desc2", "Deals extra damage to androids when empowered")
add(MItems.FALLING_SUN, "desc3", "Always strikes surrounding enemies with full damage if empowered")
add(MItems.FALLING_SUN, "desc4", "Does not benefit from Sweeping Edge enchantment")
add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive") add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive")
add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive") add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive")
add(MItems.PLASMA_RIFLE, "Plasma Repeater")
add(MItems.TRITANIUM_ORE_CLUMP, "Raw Tritanium") add(MItems.TRITANIUM_ORE_CLUMP, "Raw Tritanium")
add(MItems.PATTERN_DRIVE_NORMAL, "Pattern Drive") add(MItems.PATTERN_DRIVE_NORMAL, "Pattern Drive")
add(MItems.PATTERN_DRIVE_DOUBLE, "Double-Level Pattern Drive")
add(MItems.PATTERN_DRIVE_TRIPLE, "Triple-Level Pattern Drive")
add(MItems.PATTERN_DRIVE_QUAD, "Quad-Level Pattern Drive")
add(MItems.PATTERN_DRIVE_CREATIVE, "Creative Pattern Drive") add(MItems.PATTERN_DRIVE_CREATIVE, "Creative Pattern Drive")
add(MItems.GOLD_DISK, "Gold Disk")
add(MItems.GOLD_DISK, "single_item", "Gold Disk (%s)")
add(MItems.PATTERN_DRIVE_CREATIVE2, "Omni-Present Pattern Drive") add(MItems.PATTERN_DRIVE_CREATIVE2, "Omni-Present Pattern Drive")
add(MItems.PATTERN_DRIVE_CREATIVE2, "description1", "Creative-only item") add(MItems.PATTERN_DRIVE_CREATIVE2, "description1", "Creative-only item")
add(MItems.PATTERN_DRIVE_CREATIVE2, "description2", "Holds pattern for every item that have matter value") add(MItems.PATTERN_DRIVE_CREATIVE2, "description2", "Holds pattern for every item that have matter value")
@ -935,18 +776,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.CHEST_UPGRADER, "Crate-r") add(MItems.CHEST_UPGRADER, "Crate-r")
add(MItems.CHEST_UPGRADER, "desc", "Replaces placed chests and barrels with cargo crates while keeping storage contents") add(MItems.CHEST_UPGRADER, "desc", "Replaces placed chests and barrels with cargo crates while keeping storage contents")
add(MItems.CHEST_UPGRADER, "desc2", "Hold desired crates in the opposite hand") add(MItems.CHEST_UPGRADER, "desc2", "Hold desired crates in the opposite hand")
add(MItems.CONFIGURATOR, "Configurator")
add(MItems.CONFIGURATOR, "desc", "Copies configuration from one block to another")
add(MItems.CONFIGURATOR, "desc2", "Sneak-use on block to copy, use to paste")
add(MItems.CONFIGURATOR, "desc3", "Use on air while sneaking to clear saved configuration")
add(MItems.CONFIGURATOR, "desc_saved", "Saved configuration for: %s")
add(MItems.BREAD_MONSTER_SPAWN_EGG, "Bread Monster Spawn Egg")
add(MEntityTypes.BREAD_MONSTER, "Bread Monster")
add(MItems.LOADER_SPAWN_EGG, "Loader Spawn Egg")
add(MEntityTypes.LOADER, "Loader")
} }
} }
@ -989,71 +818,6 @@ private fun androidFeatures(provider: MatteryLanguageProvider) {
private fun gui(provider: MatteryLanguageProvider) { private fun gui(provider: MatteryLanguageProvider) {
with(provider.english) { with(provider.english) {
gui("quickmove_from.restock", "Restock from storage")
gui("quickmove_from.restock_with_move", "Quickstack from storage")
gui("quickmove_from.move", "Take all")
gui("quickmove_to.restock", "Restock to storage")
gui("quickmove_to.restock_with_move", "Quickstack to storage")
gui("quickmove_to.move", "Deposit all")
gui("quickmove.exchange", "Smart exchange with storage")
gui("quickmove.exchange.desc", "Filtered slots get restocked, everything else gets quickstacked from Exopack")
gui("quickmove_hint", "Right click to show all variants")
gui("exopack.accept_wireless_charge", "Accept wireless charging")
gui("exopack.dont_accept_wireless_charge", "Do not accept wireless charging")
gui("charge_androids", "Charge Androids")
gui("dont_charge_androids", "Do not charge Androids")
gui("charge_exopacks", "Charge Exopacks")
gui("dont_charge_exopacks", "Do not charge Exopacks")
gui("multiblock.formed", "Multiblock is formed: %s")
gui("flywheel.current_loss_t", "Current energy loss per tick:")
gui("flywheel.current_loss_s", "Current energy loss per second:")
gui("flywheel.core_material", "Core material:")
gui("flywheel.core_material_count", "(Core block count: %s)")
gui("flow_direction_set", "Flow direction set to %s")
gui("tick_timer_set", "Timer set to %s ticks")
gui("config_copied", "Copied configuration for %s")
gui("config_pasted", "Applied saved configuration")
gui("config_cleared", "Configuration cleared")
gui("config_missing", "No configuration to apply")
gui("black_hole_generator.help0", "Generates energy using angular momentum of Singularities")
gui("black_hole_generator.help1", "The stronger gravity Singularity has, the more power is generated!")
gui("black_hole_generator.help2", "Using Spacetime Normalizers will reduce gravitation strength of Singularity, which will reduce power output.")
gui("black_hole_generator.help3", "This machine is the only 'safe' way of disposing Singularities, by draining them dry by continuously injecting antimatter until Singularity lose all its mass")
gui("black_hole_generator.injection_rate.mode", "Injection rate")
gui("black_hole_generator.injection_rate.desc", "Amount of MtU injected each tick, from either injectors (or both)")
gui("black_hole_generator.target_mass.mode", "Target mass")
gui("black_hole_generator.sustain.mode", "Sustain")
gui("black_hole_generator.sustain.desc", "Keep Singularity's mass at target level, injecting matter or antimatter when necessary")
gui("black_hole_generator.matter_only.mode", "Inject matter only")
gui("black_hole_generator.matter_only.desc", "Only inject matter into singularity. Way less power generated, but mass of Singularity will increase over time, as well as power output")
gui("black_hole_generator.antimatter_only.mode", "Inject antimatter only")
gui("black_hole_generator.antimatter_only.desc", "Only inject antimatter into singularity. Way more power generated, but mass of Singularity will decrease over time, as well as power output")
gui("draw_multiblock_guide", "Draw building guide")
gui("ago", "%s ago")
gui("time.short.5s", "5s")
gui("time.short.15s", "15s")
gui("time.short.1m", "1m")
gui("time.short.10m", "10m")
gui("time.short.1h", "1h")
gui("time.short.6h", "6h")
gui("time.short.24h", "24h")
gui("part_of_multiblock", "Part of multiblock structure, useless on its own") gui("part_of_multiblock", "Part of multiblock structure, useless on its own")
gui("quicksearch", "Quick search...") gui("quicksearch", "Quick search...")
@ -1190,9 +954,7 @@ private fun gui(provider: MatteryLanguageProvider) {
gui("matter_panel.complexity", "Total complexity: %s") gui("matter_panel.complexity", "Total complexity: %s")
gui("experience", "%s experience points") gui("experience", "%s experience points")
gui("experience_with_limit", "%s / %s experience points")
gui("experience_levels", "%s experience levels") gui("experience_levels", "%s experience levels")
gui("experience_levels_with_limit", "%s / %s experience levels")
gui("experience.store", "Store %s experience levels") gui("experience.store", "Store %s experience levels")
gui("experience.store_all", "Store all experience levels") gui("experience.store_all", "Store all experience levels")
@ -1233,13 +995,6 @@ private fun jade(provider: MatteryLanguageProvider) {
} }
} }
private fun maps(provider: MatteryLanguageProvider) {
with(provider.english) {
map("laboratory", "Laboratory Map")
map("wreckage", "Wreckage Map")
}
}
fun AddEnglishLanguage(provider: MatteryLanguageProvider) { fun AddEnglishLanguage(provider: MatteryLanguageProvider) {
decoratives(provider) decoratives(provider)
sounds(provider) sounds(provider)
@ -1256,8 +1011,6 @@ fun AddEnglishLanguage(provider: MatteryLanguageProvider) {
jade(provider) jade(provider)
maps(provider)
with(provider.english) { with(provider.english) {
add("itemGroup.otm", "Overdrive That Matters") add("itemGroup.otm", "Overdrive That Matters")
add("itemGroup.otm_decorative", "Overdrive That Matters Decorative") add("itemGroup.otm_decorative", "Overdrive That Matters Decorative")

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.mc.otm.datagen.lang package ru.dbotthepony.mc.otm.datagen.lang
import com.google.common.collect.ImmutableList
import com.google.common.collect.ImmutableMap import com.google.common.collect.ImmutableMap
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
@ -12,12 +13,14 @@ import net.minecraft.world.entity.EntityType
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.enchantment.Enchantment
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.neoforged.neoforge.common.data.LanguageProvider import net.minecraftforge.common.data.LanguageProvider
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.player.android.AndroidFeatureType import ru.dbotthepony.mc.otm.android.AndroidFeatureType
import ru.dbotthepony.mc.otm.player.android.AndroidResearchType import ru.dbotthepony.mc.otm.android.AndroidResearch
import ru.dbotthepony.mc.otm.util.TranslatableComponent import ru.dbotthepony.mc.otm.android.AndroidResearchType
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock
@ -36,7 +39,7 @@ private fun researchString(key: AndroidResearchType): String {
} }
class MatteryLanguageProvider(private val gen: DataGenerator) { class MatteryLanguageProvider(private val gen: DataGenerator) {
private inner class Slave(language: String) : LanguageProvider(gen.packOutput, OverdriveThatMatters.MOD_ID, language) { private inner class Slave(language: String) : LanguageProvider(gen, OverdriveThatMatters.MOD_ID, language) {
override fun addTranslations() {} override fun addTranslations() {}
} }
@ -85,6 +88,7 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
fun addItem(key: Collection<Item>, value: String) = key.forEach { add(it, value) } fun addItem(key: Collection<Item>, value: String) = key.forEach { add(it, value) }
fun add(key: Item, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value) fun add(key: Item, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value)
fun add(key: ItemStack, value: String) = slave.add(key, value) fun add(key: ItemStack, value: String) = slave.add(key, value)
fun add(key: Enchantment, value: String) = slave.add(key, value)
fun add(key: MobEffect, value: String) = slave.add(key, value) fun add(key: MobEffect, value: String) = slave.add(key, value)
fun add(key: EntityType<*>, value: String) = slave.add(key, value) fun add(key: EntityType<*>, value: String) = slave.add(key, value)
@ -107,8 +111,6 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
fun jade(key: String, value: String) = slave.add("otm.jade.$key", value) fun jade(key: String, value: String) = slave.add("otm.jade.$key", value)
fun jadeloc(key: String, value: String) = slave.add("config.jade.plugin_${DataGen.MOD_ID}.$key", value) fun jadeloc(key: String, value: String) = slave.add("config.jade.plugin_${DataGen.MOD_ID}.$key", value)
fun map(key: String, value: String) = slave.add("filled_map.otm_$key", value)
inner class Prepended(path: String) { inner class Prepended(path: String) {
val path = "$path." val path = "$path."
constructor(vararg path: String) : this(path.joinToString(".")) constructor(vararg path: String) : this(path.joinToString("."))
@ -123,7 +125,6 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
inner class Colors( inner class Colors(
language: String, language: String,
val lowercaseIntermediate: Boolean,
val white: String, val white: String,
val orange: String, val orange: String,
@ -144,7 +145,86 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
) { ) {
val slave: LanguageProvider = slaves.computeIfAbsent(language, ::Slave) val slave: LanguageProvider = slaves.computeIfAbsent(language, ::Slave)
val mapped: Map<DyeColor, String> = ImmutableMap.builder<DyeColor, String>() val list: List<String> = ImmutableList.builder<String>()
.add(white)
.add(orange)
.add(magenta)
.add(lightBlue)
.add(yellow)
.add(lime)
.add(pink)
.add(gray)
.add(lightGray)
.add(cyan)
.add(purple)
.add(blue)
.add(brown)
.add(green)
.add(red)
.add(black)
.build()
val pairList: List<Pair<String, String>> = ImmutableList.builder<Pair<String, String>>()
.add("white" to white)
.add("orange" to orange)
.add("magenta" to magenta)
.add("light_blue" to lightBlue)
.add("yellow" to yellow)
.add("lime" to lime)
.add("pink" to pink)
.add("gray" to gray)
.add("light_gray" to lightGray)
.add("cyan" to cyan)
.add("purple" to purple)
.add("blue" to blue)
.add("brown" to brown)
.add("green" to green)
.add("red" to red)
.add("black" to black)
.build()
val mapped: Map<String, String> = ImmutableMap.builder<String, String>()
.put("white", white)
.put("orange", orange)
.put("magenta", magenta)
.put("lightBlue", lightBlue)
.put("light_blue", lightBlue)
.put("yellow", yellow)
.put("lime", lime)
.put("pink", pink)
.put("gray", gray)
.put("lightGray", lightGray)
.put("light_gray", lightGray)
.put("cyan", cyan)
.put("purple", purple)
.put("blue", blue)
.put("brown", brown)
.put("green", green)
.put("red", red)
.put("black", black)
.put("WHITE", white)
.put("ORANGE", orange)
.put("MAGENTA", magenta)
.put("LIGHTBLUE", lightBlue)
.put("LIGHT_BLUE", lightBlue)
.put("YELLOW", yellow)
.put("LIME", lime)
.put("PINK", pink)
.put("GRAY", gray)
.put("LIGHTGRAY", lightGray)
.put("LIGHT_GRAY", lightGray)
.put("CYAN", cyan)
.put("PURPLE", purple)
.put("BLUE", blue)
.put("BROWN", brown)
.put("GREEN", green)
.put("RED", red)
.put("BLACK", black)
.build()
val dyeClassMapped: Map<DyeColor, String> = ImmutableMap.builder<DyeColor, String>()
.put(DyeColor.WHITE, white) .put(DyeColor.WHITE, white)
.put(DyeColor.ORANGE, orange) .put(DyeColor.ORANGE, orange)
.put(DyeColor.MAGENTA, magenta) .put(DyeColor.MAGENTA, magenta)
@ -163,30 +243,37 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
.put(DyeColor.BLACK, black) .put(DyeColor.BLACK, black)
.build() .build()
fun add(list: ColoredDecorativeBlock<*>, toFormat: String) { val dyeClassPairs: List<Pair<DyeColor, String>> = ImmutableList.builder<Pair<DyeColor, String>>()
for ((color, target) in mapped) { .add(DyeColor.WHITE to white)
.add(DyeColor.ORANGE to orange)
.add(DyeColor.MAGENTA to magenta)
.add(DyeColor.LIGHT_BLUE to lightBlue)
.add(DyeColor.YELLOW to yellow)
.add(DyeColor.LIME to lime)
.add(DyeColor.PINK to pink)
.add(DyeColor.GRAY to gray)
.add(DyeColor.LIGHT_GRAY to lightGray)
.add(DyeColor.CYAN to cyan)
.add(DyeColor.PURPLE to purple)
.add(DyeColor.BLUE to blue)
.add(DyeColor.BROWN to brown)
.add(DyeColor.GREEN to green)
.add(DyeColor.RED to red)
.add(DyeColor.BLACK to black)
.build()
fun add(list: ColoredDecorativeBlock, toFormat: String) {
for ((color, target) in dyeClassPairs) {
slave.add(list.blocks[color]!!, toFormat.format(target)) slave.add(list.blocks[color]!!, toFormat.format(target))
} }
} }
fun forEach(consumer: (color: DyeColor, name: String) -> Unit) { fun forEach(consumer: (color: DyeColor, name: String) -> Unit) {
for ((a, b) in mapped) { for ((a, b) in dyeClassPairs) {
consumer.invoke(a, b) consumer.invoke(a, b)
} }
} }
fun add(map: Map<in DyeColor, Block>, toFormat: String) {
for ((color, block) in map) {
slave.add(block, toFormat.format(mapped[color]!!))
}
}
fun addIntermediate(map: Map<in DyeColor, Block>, toFormat: String) {
for ((color, block) in map) {
slave.add(block, toFormat.format(if (lowercaseIntermediate) mapped[color]!!.lowercase() else mapped[color]!!))
}
}
fun add( fun add(
whiteBlock: Block, whiteBlock: Block,
orangeBlock: Block, orangeBlock: Block,
@ -264,7 +351,7 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
} }
} }
val englishColors = Colors("en_us", lowercaseIntermediate = false, val englishColors = Colors("en_us",
"White", "White",
"Orange", "Orange",
"Magenta", "Magenta",
@ -283,18 +370,18 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
"Black", "Black",
) )
val russianColors = Colors("ru_ru", lowercaseIntermediate = true, val russianColors = Colors("ru_ru",
"Белый", "Белый",
"Оранжевый", "Оранжевый",
"Пурпурный", "Маджентовый",
"Голубой", "Светло Синий",
"Жёлтый", "Жёлтый",
"Лаймовый", "Лаймовый",
"Розовый", "Розовый",
"Серый", "Серый",
"Светло-серый", "Светло Серый",
"Бирюзовый", "Циановый",
"Фиолетовый", "Пурпурный",
"Синий", "Синий",
"Коричневый", "Коричневый",
"Зелёный", "Зелёный",

View File

@ -1,61 +1,49 @@
package ru.dbotthepony.mc.otm.datagen.lang package ru.dbotthepony.mc.otm.datagen.lang
import ru.dbotthepony.mc.otm.config.CablesConfig import net.minecraft.world.item.DyeColor
import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.game.MEntityTypes import ru.dbotthepony.mc.otm.registry.MEntityTypes
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents import ru.dbotthepony.mc.otm.registry.MSoundEvents
private const val HIGH_BLAST_RESISTANCE = "Высокая взрывоустойчивость" private const val HIGH_BLAST_RESISTANCE = "Высокая взрывоустойчивость"
private const val HIGH_BLAST_RESISTANCE_DOOR = "Взрывоустойчивая дверь с засовом красного камня..." private const val HIGH_BLAST_RESISTANCE_DOOR = "Взрывоустойчивая дверь с засовом красного камня..."
private const val FEELING_SAFE_NOW = "...ощущаете ли вы себя теперь в безопасности?" private const val FEELING_SAFE_NOW = "...ощущаете ли вы себя теперь в безопасности?"
private fun decoratives(provider: MatteryLanguageProvider) { private fun decoratives(provider: MatteryLanguageProvider) {
with(provider.russianColors) {
add(MRegistry.VENT, "%s вентиляция")
add(MRegistry.VENT_ALTERNATIVE, "%s альтернативная вентиляция")
add(MRegistry.TRITANIUM_BLOCK, "%s тритановый блок")
add(MRegistry.COMPUTER_TERMINAL, "%s компьютерный терминал")
add(MRegistry.TRITANIUM_STAIRS, "%s тритановые ступеньки")
add(MRegistry.TRITANIUM_SLAB, "%s тритановая плита")
add(MRegistry.TRITANIUM_WALL, "%s тритановая ограда")
add(MRegistry.FLOOR_TILES, "%s керамическая плитка")
add(MRegistry.FLOOR_TILES_STAIRS, "%s ступеньки из керамической плитки")
add(MRegistry.FLOOR_TILES_SLAB, "%s плита из керамической плитки")
add(MRegistry.UNREFINED_FLOOR_TILES, "Необработанная %s кирамическая Плитка")
add(MRegistry.INDUSTRIAL_GLASS, "%s окрашенное промышленное стекло")
add(MRegistry.INDUSTRIAL_GLASS_PANE, "%s окрашенная промышленная стеклянная панель")
add(MRegistry.CARGO_CRATES, "%s грузовой ящик")
add(MRegistry.DECORATIVE_CRATE, "%s блок контейнера")
}
with (provider.russian) { with (provider.russian) {
for (block in MBlocks.TRITANIUM_ANVIL[null]!!) for ((color, name) in provider.russianColors.dyeClassMapped) {
add(block, "Тритановая наковальня") add(MItems.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $name грузовым ящиком")
add(MEntityTypes.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $name грузовым ящиком")
for ((color, name) in provider.russianColors.mapped) { add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "$name тритановая нажимная пластина")
val nameF = name.replace("ый", "ая").replace("ой", "ая").replace("ий", "яя")
add(MRegistry.VENT.getBlock(color), "$nameF вентиляция")
add(MRegistry.VENT_ALTERNATIVE.getBlock(color), "$nameF альтернативная вентиляция")
for (block in MBlocks.TRITANIUM_ANVIL[color]!!) {
add(block, "$nameF тритановая наковальня")
}
val nameMul = name.replace("ый", "ые").replace("ой", "ые").replace("ий", "ие")
add(MRegistry.TRITANIUM_BLOCK.getBlock(color), "$name тритановый блок")
add(MRegistry.COMPUTER_TERMINAL.getBlock(color), "$name компьютерный терминал")
add(MRegistry.STAR_CHAIR.getBlock(color), "$name звезданутый стул")
add(MRegistry.STAR_CHAIR.getBlock(color), "desc", "Для длительного наблюдения за звёздами.")
add(MRegistry.TRITANIUM_STAIRS.getBlock(color), "$name тритановые ступеньки")
add(MRegistry.TRITANIUM_SLAB.getBlock(color), "$nameF тритановая плита")
add(MRegistry.TRITANIUM_WALL.getBlock(color), "$nameF тритановая ограда")
add(MRegistry.FLOOR_TILES.getBlock(color), "$nameF керамическая плитка")
add(MRegistry.FLOOR_TILES_STAIRS.getBlock(color), "$nameMul ступеньки из керамической плитки")
add(MRegistry.FLOOR_TILES_SLAB.getBlock(color), "$nameF плита из керамической плитки")
add(MRegistry.UNREFINED_FLOOR_TILES.getBlock(color), "Необработанная ${nameF.lowercase()} керамическая плитка")
val nameN = name.replace("ый", "ое").replace("ой", "ое").replace("ий", "ее")
add(MRegistry.INDUSTRIAL_GLASS.getBlock(color), "$nameN окрашенное промышленное стекло")
add(MRegistry.INDUSTRIAL_GLASS_PANE.getBlock(color), "$nameF окрашенная промышленная стеклянная панель")
add(MRegistry.CARGO_CRATES.getBlock(color), "$name грузовой ящик")
add(MRegistry.DECORATIVE_CRATE.getBlock(color), "$name блок контейнера")
val nameAdj = name.replace("ый", "ым").replace("ой", "ым").replace("ий", "им").lowercase()
add(MItems.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $nameAdj грузовым ящиком")
add(MEntityTypes.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $nameAdj грузовым ящиком")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "$nameF тритановая нажимная пластина")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "description0", "Активируется только при наступлении игрока на неё") add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "description0", "Активируется только при наступлении игрока на неё")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "description1", HIGH_BLAST_RESISTANCE) add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "description1", HIGH_BLAST_RESISTANCE)
add(MBlocks.TRITANIUM_DOOR[color]!!, "$nameF тритановая дверь") add(MBlocks.TRITANIUM_DOOR[color]!!, "$name тритановая дверь")
add(MBlocks.TRITANIUM_DOOR[color]!!, "description0", HIGH_BLAST_RESISTANCE_DOOR) add(MBlocks.TRITANIUM_DOOR[color]!!, "description0", HIGH_BLAST_RESISTANCE_DOOR)
add(MBlocks.TRITANIUM_DOOR[color]!!, "description1", FEELING_SAFE_NOW) add(MBlocks.TRITANIUM_DOOR[color]!!, "description1", FEELING_SAFE_NOW)
add(MBlocks.TRITANIUM_DOOR[color]!!, "description2", "Данный вариант выкрашен в $name") add(MBlocks.TRITANIUM_DOOR[color]!!, "description2", "Данный вариант выкрашен в $name")
@ -64,26 +52,19 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description0", HIGH_BLAST_RESISTANCE_DOOR) add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description0", HIGH_BLAST_RESISTANCE_DOOR)
add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description1", FEELING_SAFE_NOW) add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description1", FEELING_SAFE_NOW)
add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description2", "Данный вариант выкрашен в $name") add(MBlocks.TRITANIUM_TRAPDOOR[color]!!, "description2", "Данный вариант выкрашен в $name")
add(MBlocks.GRILL[color]!!, "$name мангал-дипломат")
} }
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "Тритановая нажимная пластина") add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "Тритановая нажимная пластина")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description0", "Активируется только при наступлении игрока на неё") add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description0", "Активируется только при наступлении игрока на неё")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description1", HIGH_BLAST_RESISTANCE) add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description1", HIGH_BLAST_RESISTANCE)
}
misc("computer_terminal_tooltip", "Может быть использован как кнопка, с оговоркой что он посылает сигнал блоку сзади, а не под ним") with(provider.russian) {
misc("computer_terminal_tooltip1", "Для настройки таймера взаимодействуйте будучи крадясь")
misc("decorative", "Элемент декора")
add(MBlocks.GRILL[null]!!, "Мангал-дипломат")
add(MItems.CARGO_CRATE_MINECARTS[null]!!, "Вагонетка с грузовым ящиком") add(MItems.CARGO_CRATE_MINECARTS[null]!!, "Вагонетка с грузовым ящиком")
add(MEntityTypes.CARGO_CRATE_MINECARTS[null]!!, "Вагонетка с грузовым ящиком") add(MEntityTypes.CARGO_CRATE_MINECARTS[null]!!, "Вагонетка с грузовым ящиком")
add(MRegistry.CARGO_CRATES.block, "Грузовой ящик") add(MRegistry.CARGO_CRATES.block, "Грузовой ящик")
add(MRegistry.COMPUTER_TERMINAL.block, "Компьютерный терминал") add(MRegistry.COMPUTER_TERMINAL.block, "Компьютерный терминал")
add(MRegistry.STAR_CHAIR.block, "Звезданутый стул")
add(MRegistry.TRITANIUM_BLOCK.block, "Тритановый блок") add(MRegistry.TRITANIUM_BLOCK.block, "Тритановый блок")
add(MRegistry.TRITANIUM_STAIRS.block, "Тритановые ступеньки") add(MRegistry.TRITANIUM_STAIRS.block, "Тритановые ступеньки")
add(MRegistry.TRITANIUM_SLAB.block, "Тритановая плита") add(MRegistry.TRITANIUM_SLAB.block, "Тритановая плита")
@ -95,51 +76,42 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MRegistry.DECORATIVE_CRATE.block, "Ржавый грузовой контейнер") add(MRegistry.DECORATIVE_CRATE.block, "Ржавый грузовой контейнер")
add(MRegistry.VENT.block, "Вентиляция") add(MRegistry.VENT.block, "Вентиляция")
add(MRegistry.VENT_ALTERNATIVE.block, "Альтернативная вентиляция") add(MRegistry.VENT_ALTERNATIVE.block, "Альтернаятивная вентиляция")
for ((color, name) in provider.russianColors.mapped) {
val stripeName = name.replace("ый", "ой").replace("ий", "ей").lowercase()
add(MBlocks.TRITANIUM_STRIPED_BLOCK[color]!!, "Тритановый блок с $stripeName полоской")
add(MBlocks.TRITANIUM_STRIPED_STAIRS[color]!!, "Тритановые ступеньки с $stripeName полоской")
add(MBlocks.TRITANIUM_STRIPED_SLAB[color]!!, "Тритановая плита с $stripeName полоской")
add(MBlocks.TRITANIUM_STRIPED_WALL[color]!!, "Тритановая ограда с $stripeName полоской")
}
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!! val baseName = provider.russianColors.dyeClassMapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase() val stripeName = provider.russianColors.dyeClassMapped[stripe]!!
add(block, "$baseName тритановый блок c $stripeName полоской") add(block, "$baseName-окрашенный $stripeName-ополосаченный тритановый блок")
} }
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_STAIRS.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_STAIRS.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!.replace("ый", "ые").replace("ой", "ые").replace("ий", "ие") val baseName = provider.russianColors.dyeClassMapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase() val stripeName = provider.russianColors.dyeClassMapped[stripe]!!
add(block, "$baseName тритановые ступеньки c $stripeName полоской") add(block, "$baseName-окрашенные $stripeName-ополосаченные тритановые ступеньки")
} }
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_SLAB.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_SLAB.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!.replace("ый", "ая").replace("ой", "ые").replace("ий", "яя") val baseName = provider.russianColors.dyeClassMapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase() val stripeName = provider.russianColors.dyeClassMapped[stripe]!!
add(block, "$baseName тритановая плита c $stripeName полоской") add(block, "$baseName-окрашенная $stripeName-ополосаченная тритановая Плита")
} }
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_WALL.blocksWithColor) { for ((block, colors) in MRegistry.TRITANIUM_STRIPED_WALL.blocksWithColor) {
val (base, stripe) = colors val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!.replace("ый", "ая").replace("ой", "ая").replace("ий", "яя") val baseName = provider.russianColors.dyeClassMapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase() val stripeName = provider.russianColors.dyeClassMapped[stripe]!!
add(block, "$baseName тритановая ограда c $stripeName полоской") add(block, "$baseName-окрашенная $stripeName-ополосаченная тритановая ограда")
} }
} }
} }
@ -149,9 +121,6 @@ private fun sounds(provider: MatteryLanguageProvider) {
sound("rifle_shot", "Выстрел плазменной винтовки") sound("rifle_shot", "Выстрел плазменной винтовки")
sound("plasma_weapon_overheat", "Плазменное оружие перегрелось") sound("plasma_weapon_overheat", "Плазменное оружие перегрелось")
sound("player_become_android", "Игрок превратился в андроида") sound("player_become_android", "Игрок превратился в андроида")
sound("projectile_parry", "Снаряд парирован")
sound("jump_boost", "Усиленный прыжок")
sound("shockwave", "Ударная волна от приземления")
sound(MSoundEvents.CARGO_CRATE_OPEN, "Открыт грузовой ящик") sound(MSoundEvents.CARGO_CRATE_OPEN, "Открыт грузовой ящик")
} }
@ -159,15 +128,6 @@ private fun sounds(provider: MatteryLanguageProvider) {
private fun misc(provider: MatteryLanguageProvider) { private fun misc(provider: MatteryLanguageProvider) {
with(provider.russian) { with(provider.russian) {
misc("misc.inert", "Инертен")
misc("misc.yes", "Да")
misc("misc.no", "Нет")
misc("pwr_alert2", "ПТН: ВНИМАНИЕ")
misc("pwr_alert3", "ПРЕДУПРЕЖДЕНИЕ ОБ ОШИБКЕ:")
misc("pwr_alert5", "Ошибка %s была обнаружена по адресу %s:%s в %s")
gui("double_processing", "Обрабатывает два предмета одновременно") gui("double_processing", "Обрабатывает два предмета одновременно")
misc("painted.black", "Окрашено в чёрный") misc("painted.black", "Окрашено в чёрный")
@ -198,16 +158,8 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("needs_no_power", "Не требует энергии для работы") misc("needs_no_power", "Не требует энергии для работы")
gui("lock_holo_screen", "Заблокировать содержимое") gui("lock_holo_screen", "Заблокировать содержимое")
gui("lock_holo_screen.unlocked", "Разблокировать содержимое")
gui("lock_holo_screen.tip", "Блокировка и разблокировка содержимого возможна только в режиме творчества.\nКогда заблокировано, границы ввода текста отключены.") gui("lock_holo_screen.tip", "Блокировка и разблокировка содержимого возможна только в режиме творчества.\nКогда заблокировано, границы ввода текста отключены.")
gui("holo_screen.resize_text", "Изменять размер текста автоматически")
gui("holo_screen.do_not_resize_text", "Не менять размер текста")
gui("abc", "АБВ")
gui("use_standard_font", "Использовать стандартный шрифт")
gui("use_small_font", "Использовать уменьшенный шрифт")
gui("ticks", "Тиков") gui("ticks", "Тиков")
gui("power_cost_per_use", "Энергии на операцию: %s") gui("power_cost_per_use", "Энергии на операцию: %s")
@ -286,8 +238,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("suffix.exa", "%s Э%s") misc("suffix.exa", "%s Э%s")
misc("suffix.zetta", "%s З%s") misc("suffix.zetta", "%s З%s")
misc("suffix.yotta", "%s И%s") misc("suffix.yotta", "%s И%s")
misc("suffix.ronna", "%s Рн%s")
misc("suffix.quetta", "%s Кв%s")
misc("suffix.deci", "%s д%s") misc("suffix.deci", "%s д%s")
misc("suffix.centi", "%s с%s") misc("suffix.centi", "%s с%s")
@ -309,9 +259,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("suffix_concise.exa", "%sЭ") misc("suffix_concise.exa", "%sЭ")
misc("suffix_concise.zetta", "%sЗ") misc("suffix_concise.zetta", "%sЗ")
misc("suffix_concise.yotta", "%sИ") misc("suffix_concise.yotta", "%sИ")
misc("suffix_concise.ronna", "%sРн")
misc("suffix_concise.quetta", "%sКв")
misc("suffix_concise.deci", "%sд") misc("suffix_concise.deci", "%sд")
misc("suffix_concise.centi", "%sс") misc("suffix_concise.centi", "%sс")
misc("suffix_concise.milli", "%sм") misc("suffix_concise.milli", "%sм")
@ -331,9 +278,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("suffix_raw.exa", "Э") misc("suffix_raw.exa", "Э")
misc("suffix_raw.zetta", "З") misc("suffix_raw.zetta", "З")
misc("suffix_raw.yotta", "И") misc("suffix_raw.yotta", "И")
misc("suffix_raw.ronna", "Рн")
misc("suffix_raw.quetta", "Кв")
misc("suffix_raw.deci", "д") misc("suffix_raw.deci", "д")
misc("suffix_raw.centi", "с") misc("suffix_raw.centi", "с")
misc("suffix_raw.milli", "м") misc("suffix_raw.milli", "м")
@ -390,13 +334,9 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("pill.oblivion", "Предметы и Очки опыта, потраченные на исследования полностью возвращаются.") misc("pill.oblivion", "Предметы и Очки опыта, потраченные на исследования полностью возвращаются.")
misc("pill.message_oblivion", "Все возможности андроида были удалены, а потраченные на исследования предметы и опыт возвращены.") misc("pill.message_oblivion", "Все возможности андроида были удалены, а потраченные на исследования предметы и опыт возвращены.")
misc("pill.heal", "Даёт регенерацию III на 8 секунд.") misc("pill.heal", "Мгновенно восполняет 4 сердца при употреблении, а так же даёт на 2 минуты поглощение V и на 8 секунд регенерацию III.")
misc("pill.heal_android", "Не действует на андроидов.") misc("pill.heal_android", "Не действует на андроидов.")
misc("pill.not_normal", "Мгновенно убивает существ из плоти")
misc("pill.suspicious_food.desc", "При более тщательном рассмотрении данная пища выглядит подозрительно...")
misc("pill.suspicious_food", "Подозрительный %s")
misc("pill.message", "Ничего не произошло, но вы чувствуете... себя уставшим?.. Возможно надо отдохнуть.") misc("pill.message", "Ничего не произошло, но вы чувствуете... себя уставшим?.. Возможно надо отдохнуть.")
misc("pill.message_finish", "§kОДИН ИЗ НАС ОДИН ИЗ НАС ОДИН ИЗ НАС ОДИН ИЗ НАС ОДИН ИЗ НАС") misc("pill.message_finish", "§kОДИН ИЗ НАС ОДИН ИЗ НАС ОДИН ИЗ НАС ОДИН ИЗ НАС ОДИН ИЗ НАС")
@ -413,8 +353,6 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("progress_widget_stuck", "Это устройство не может продолжить работу, проверьте конфигурацию") gui("progress_widget_stuck", "Это устройство не может продолжить работу, проверьте конфигурацию")
gui("total_raw", "Всего:") gui("total_raw", "Всего:")
gui("total", "Всего: %s")
gui("total_approx", "Всего примерно: %s")
gui("matter.percentage_level", "Уровень материи: %s%%") gui("matter.percentage_level", "Уровень материи: %s%%")
gui("matter.format", "Материя: %s") gui("matter.format", "Материя: %s")
@ -422,11 +360,6 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("matter.format_and_complexity2", "%s (%s) / Сложность: %s (%s)") gui("matter.format_and_complexity2", "%s (%s) / Сложность: %s (%s)")
gui("matter.name", "МтЕд") gui("matter.name", "МтЕд")
gui("flywheel.top", "Как материал сердечника маховой батареи:")
gui("flywheel.storage", "* Хранилище: %s")
gui("flywheel.receive_efficiency", "* КПД раскрутки: %s")
gui("flywheel.momentum_loss_speed", "* Фактор потери накопленной скорости: %s")
gui("filter.is_whitelist", "Белый список") gui("filter.is_whitelist", "Белый список")
gui("filter.match_nbt", "Сравнивать NBT") gui("filter.match_nbt", "Сравнивать NBT")
gui("filter.match_tag", "Сравнить Теги") gui("filter.match_tag", "Сравнить Теги")
@ -450,7 +383,6 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("android_station.research.low_power", "Мало питания у станции андроидов! Исследования недоступны!") misc("android_station.research.low_power", "Мало питания у станции андроидов! Исследования недоступны!")
misc("android_station.research.researched", "Исследовано!") misc("android_station.research.researched", "Исследовано!")
misc("android_station.research.can_be_researched", "Готово к исследованию!") misc("android_station.research.can_be_researched", "Готово к исследованию!")
misc("android_station.research.can_not_afford", "Не хватает предметов!")
misc("android_station.research.can_not_be_researched", "Нельзя исследовать!") misc("android_station.research.can_not_be_researched", "Нельзя исследовать!")
misc("android_station.research.xp_cost", "Требуется %s уровней Опыта") misc("android_station.research.xp_cost", "Требуется %s уровней Опыта")
misc("android_station.research.item", "Требует %s %s шт.") misc("android_station.research.item", "Требует %s %s шт.")
@ -486,8 +418,6 @@ private fun death(provider: MatteryLanguageProvider) {
death("otm_emp", "Электроника %1\$s перегорела") death("otm_emp", "Электроника %1\$s перегорела")
death("otm_cosmic_rays", "Электроника %1\$s была ошеломлена космическим излучением") death("otm_cosmic_rays", "Электроника %1\$s была ошеломлена космическим излучением")
death("otm_android_discharge", "В аккумуляторах %1\$s закончился заряд") death("otm_android_discharge", "В аккумуляторах %1\$s закончился заряд")
death("otm_not_normal_pill", "%1\$s принял таблетки")
death("otm_not_normal_pill.item", "%1\$s принял %2\$s")
death("otm_become_android.player", "%1\$s потерял свою человечность, когда %2\$s пытался образумить их") death("otm_become_android.player", "%1\$s потерял свою человечность, когда %2\$s пытался образумить их")
death("otm_become_humane.player", "%1\$s восстановил свою человечность, когда %2\$s пытался образумить их") death("otm_become_humane.player", "%1\$s восстановил свою человечность, когда %2\$s пытался образумить их")
@ -551,43 +481,12 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.MATTER_ENTANGLER, "Квантовый запутыватель материи") add(MBlocks.MATTER_ENTANGLER, "Квантовый запутыватель материи")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.CRUDE]!!, "Самобытный энергетический кабель")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.REGULAR]!!, "Энергетический кабель")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.ADVANCED]!!, "Улучшенный энергетический кабель")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.SUPERCONDUCTOR]!!, "Сверхпроводящий энергетический кабель")
addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Генератор булыжника") addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Генератор булыжника")
add(MBlocks.INFINITE_WATER_SOURCE, "Неиссякаемый источник воды") add(MBlocks.INFINITE_WATER_SOURCE, "Неиссякаемый источник воды")
add(MBlocks.INFINITE_WATER_SOURCE, "desc", "Выталкивает воду в соседние блоки автоматически") add(MBlocks.INFINITE_WATER_SOURCE, "desc", "Выталкивает воду в соседние блоки автоматически")
add(MBlocks.BLACK_HOLE, "Локализированная сингулярная точка аномального искажения пространства-времени") add(MBlocks.BLACK_HOLE, "Локализированная сингулярная точка аномального искажения пространства-времени")
add(MBlocks.BLACK_HOLE_GENERATOR, "Генератор энергии ускорением материи")
add(MBlocks.FLYWHEEL_SHAFT, "Маховый вал")
add(MBlocks.FLYWHEEL_SHAFT, "desc", "Устанавливается между подшипников")
add(MBlocks.FLYWHEEL_BEARING, "Маховый подшипник")
add(MBlocks.FLYWHEEL_BEARING, "desc", "Заменяет центральный блок корпуса сверху и снизу")
add(MBlocks.FLYWHEEL_BATTERY, "Блок управления маховым хранилищем энергии")
add(MBlocks.FLYWHEEL_BATTERY, "desc", "Мультиблок, который требует подшипники, корпус, вал, блоки генераторов и ядро из материала на ваше усмотрение")
add(MBlocks.FLYWHEEL_BATTERY, "desc2", "Имеет неограниченную высоту, с нижним порогом в 4 блока")
add(MBlocks.FLYWHEEL_BATTERY, "desc3", "Строится как параллелепипед с основной в 5 на 5 блоков")
add(MBlocks.FLYWHEEL_BATTERY, "desc4", "Использует энергетические *интерфейсы* как порты ввода вывода, и они должны быть установлены на том же")
add(MBlocks.FLYWHEEL_BATTERY, "desc5", "уровне, что и блоки генераторов")
add(MBlocks.FLYWHEEL_BATTERY, "desc6", "Важно: должен быть установлен в стене по середине на том же уровне, где находится ядро,")
add(MBlocks.FLYWHEEL_BATTERY, "desc7", "иначе говоря, он заменяет блок корпуса на высоте одного блока относительно 'пола' структуры")
add(MBlocks.FLYWHEEL_HOUSING, "Корпус махового хранилища энергии")
add(MBlocks.FLYWHEEL_HOUSING, "desc", "Мультиблок структура с размерностью 5xNx5")
add(MBlocks.GENERATOR_BLOCK, "Генераторный блок")
add(MBlocks.GENERATOR_BLOCK, "desc", "Часть мультиблока, безопасна в качестве декорации")
add(MBlocks.MODULAR_FRAME, "Модульный каркас")
add(MBlocks.HEAVY_MODULAR_FRAME, "Тяжёлый модульный каркас")
add(MBlocks.ENERGY_INPUT_INTERFACE, "Входной энергетический интерфейс")
add(MBlocks.ENERGY_OUTPUT_INTERFACE, "Выходной энергетический интерфейс")
add(MBlocks.ENERGY_INPUT_HATCH, "Входной энергетический клапан") add(MBlocks.ENERGY_INPUT_HATCH, "Входной энергетический клапан")
add(MBlocks.ITEM_INPUT_HATCH, "Входной предметный клапан") add(MBlocks.ITEM_INPUT_HATCH, "Входной предметный клапан")
@ -596,13 +495,6 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.ITEM_OUTPUT_HATCH, "Выходной предметный клапан") add(MBlocks.ITEM_OUTPUT_HATCH, "Выходной предметный клапан")
add(MBlocks.MATTER_OUTPUT_HATCH, "Выходной клапан материи") add(MBlocks.MATTER_OUTPUT_HATCH, "Выходной клапан материи")
add(MBlocks.BLACK_HOLE_GENERATOR, "Генератор энергии ускорением материи")
add(MBlocks.TRITANIUM_HULL, "Тритановый корпус")
add(MBlocks.TRITANIUM_HULL, "desc", "Прочная часть мультиблока, безопасна в качестве декорации")
add(MBlocks.MATTER_INJECTOR, "Инжектор материи")
add(MBlocks.ANTIMATTER_INJECTOR, "Инжектор анти-материи")
add(MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR, "Коллектор высокоэнергичных частиц")
add(MBlocks.DEV_CHEST, "Сундук разработчика") add(MBlocks.DEV_CHEST, "Сундук разработчика")
add(MBlocks.DEV_CHEST, "desc", "Хранит все предметы, которые есть в игре") add(MBlocks.DEV_CHEST, "desc", "Хранит все предметы, которые есть в игре")
add(MBlocks.PAINTER, "Стол маляра") add(MBlocks.PAINTER, "Стол маляра")
@ -622,8 +514,6 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.HOLO_SIGN, "desc", "Многострочная, крашеная и светящееся, табличка") add(MBlocks.HOLO_SIGN, "desc", "Многострочная, крашеная и светящееся, табличка")
add(MBlocks.TRITANIUM_INGOT_BLOCK, "Блок слитков тритана") add(MBlocks.TRITANIUM_INGOT_BLOCK, "Блок слитков тритана")
add(MBlocks.WITHERED_STEEL_BLOCK, "Блок иссушенной стали")
add(MBlocks.ROFLITE_ALLOY_BLOCK, "Блок рофлитового сплава")
addBlock(MBlocks.ENERGY_COUNTER.values, "Счётчик энергии") addBlock(MBlocks.ENERGY_COUNTER.values, "Счётчик энергии")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc", "Ограничивает направление передачи энергии;") addBlock(MBlocks.ENERGY_COUNTER.values, "desc", "Ограничивает направление передачи энергии;")
@ -631,12 +521,9 @@ private fun blocks(provider: MatteryLanguageProvider) {
addBlock(MBlocks.ENERGY_COUNTER.values, "desc3", "Собирает статистику о переданной через себя энергии;") addBlock(MBlocks.ENERGY_COUNTER.values, "desc3", "Собирает статистику о переданной через себя энергии;")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc4", "Отображает текущую активность передачи энергии на своём экране") addBlock(MBlocks.ENERGY_COUNTER.values, "desc4", "Отображает текущую активность передачи энергии на своём экране")
add(MBlocks.ENERGY_COUNTER[null]!!, "facing", "Сторона входа: %s") add(MBlocks.ENERGY_COUNTER[null]!!, "Facing", "сторона входа: %s")
add(MBlocks.ENERGY_COUNTER[null]!!, "switch", "Сменить сторону входа") add(MBlocks.ENERGY_COUNTER[null]!!, "Switch", "сменить сторону входа")
add(MBlocks.ENERGY_COUNTER[null]!!, "limit", "Лимит ввода/вывода. -1 для отключения лимитов") add(MBlocks.ENERGY_COUNTER[null]!!, "Limit", "лимит ввода/вывода. -1 для отключения лимитов")
add(MBlocks.ENERGY_COUNTER[null]!!, "display_this", "Отображать эти данные на экране блока")
add(MBlocks.ENERGY_COUNTER[null]!!, "do_pull", "Забирать энергию на входе и выталкивать её на выходе")
add(MBlocks.ENERGY_COUNTER[null]!!, "dont_pull", "Не забирать энергию на входе")
addBlock(MBlocks.CHEMICAL_GENERATOR.values, "Химический генератор") addBlock(MBlocks.CHEMICAL_GENERATOR.values, "Химический генератор")
addBlock(MBlocks.CHEMICAL_GENERATOR.values, "desc", "Генерирует энергию сжигая твёрдое топливо") addBlock(MBlocks.CHEMICAL_GENERATOR.values, "desc", "Генерирует энергию сжигая твёрдое топливо")
@ -654,19 +541,20 @@ private fun blocks(provider: MatteryLanguageProvider) {
addBlock(MBlocks.POWERED_SMOKER.values, "desc", "Позволяет обрабатывать рецепты коптильни используя энергию") addBlock(MBlocks.POWERED_SMOKER.values, "desc", "Позволяет обрабатывать рецепты коптильни используя энергию")
addBlock(MBlocks.ENERGY_SERVO.values, "Энергетическая помпа") addBlock(MBlocks.ENERGY_SERVO.values, "Энергетическая помпа")
addBlock(MBlocks.ENERGY_SERVO.values, "desc", "Заряжает, разряжает и передаёт энергию между предметами") addBlock(MBlocks.ENERGY_SERVO.values, "desc", "заряжает, разряжает и передаёт энергию между предметами")
add(MBlocks.CARBON_FIBRE_BLOCK, "Блок углеродных трубок") add(MBlocks.CARBON_FIBRE_BLOCK, "Блок углеродных трубок")
add(MBlocks.METAL_MESH, "Металлическая решётка") add(MBlocks.METAL_MESH, "Блок металлической сетки")
add(MBlocks.METAL_JUNK, "Металлический хлам") add(MBlocks.METAL_JUNK, "Металлический хлам")
add(MBlocks.METAL_JUNK, "desc", "Бесполезный хлам, или нет?") add(MBlocks.METAL_JUNK, "desc", "Бесполезный хлам, или нет?")
add(MBlocks.TRITANIUM_STRIPED_BLOCK, "Тритановый блок с полоской")
add(MBlocks.TRITANIUM_STRIPED_STAIRS, "Тритановые ступеньки с полоской")
add(MBlocks.TRITANIUM_STRIPED_SLAB, "Тритановая плита с полоской")
add(MBlocks.TRITANIUM_STRIPED_WALL, "Тритановая ограда с полоской")
add(MBlocks.TRITANIUM_ORE, "Тритановая руда") add(MBlocks.TRITANIUM_ORE, "Тритановая руда")
add(MBlocks.DILITHIUM_ORE, "Дилитевая руда")
add(MBlocks.DEEPSLATE_TRITANIUM_ORE, "Тританоносный глубинный сланец") add(MBlocks.DEEPSLATE_TRITANIUM_ORE, "Тританоносный глубинный сланец")
add(MBlocks.DEEPSLATE_DILITHIUM_ORE, "Глубинный сланец со вкраплением дилития")
add(MBlocks.TRITANIUM_RAW_BLOCK, "Блок рудного тритана") add(MBlocks.TRITANIUM_RAW_BLOCK, "Блок рудного тритана")
add(MBlocks.DILITHIUM_CRYSTAL_BLOCK, "Блок кристалла дилития")
add(MBlocks.STORAGE_CABLE, "Кабель хранилища") add(MBlocks.STORAGE_CABLE, "Кабель хранилища")
addBlock(MBlocks.STORAGE_POWER_SUPPLIER.values, "Подстанция сети хранилища") addBlock(MBlocks.STORAGE_POWER_SUPPLIER.values, "Подстанция сети хранилища")
@ -676,23 +564,18 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.GRAVITATION_STABILIZER, "Стабилизатор пространства-времени") add(MBlocks.GRAVITATION_STABILIZER, "Стабилизатор пространства-времени")
add(MBlocks.GRAVITATION_STABILIZER_LENS, "Линза стабилизатора пространства-времени") add(MBlocks.GRAVITATION_STABILIZER_LENS, "Линза стабилизатора пространства-времени")
add(MBlocks.GRAVITATION_STABILIZER, "desc", "Уменьшает искажение пространства-времени сингулярностей") add(MBlocks.GRAVITATION_STABILIZER, "Desc", "Уменьшает искажение пространства-времени сингулярностей")
add(MBlocks.GRAVITATION_STABILIZER, "desc2", "Имейте ввиду, что несколько стабилизаторов создают экспоненциальный эффект") add(MBlocks.GRAVITATION_STABILIZER, "Desc2", "Имейте ввиду, что несколько стабилизаторов создают экспоненциальный эффект")
add(MBlocks.GRAVITATION_STABILIZER, "desc3", "Слишком слабое искажение пространства-времени приведёт к быстрому 'испарению' сингулярности!") add(MBlocks.GRAVITATION_STABILIZER, "Desc3", "Слишком слабое искажение пространства-времени приведёт к быстрому 'испарению' сингулярности!")
add(MBlocks.PHANTOM_ATTRACTOR, "Приманщик фантомов") add(MBlocks.PHANTOM_ATTRACTOR, "Приманщик фантомов")
add(MBlocks.PHANTOM_ATTRACTOR, "desc", "Приманивает фантомов в ночное время") add(MBlocks.PHANTOM_ATTRACTOR, "Desc", "приманивает фантомов в ночное время")
add(MBlocks.REDSTONE_LAMP_INVERTED, "Лампа (инвертированный сигнал)")
add(MBlocks.REINFORCED_REDSTONE_LAMP, "Укреплённая лампа")
add(MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED, "Укреплённая лампа (инвертированный сигнал)")
add(MBlocks.LABORATORY_LAMP, "Лабораторная лампа") add(MBlocks.LABORATORY_LAMP, "Лабораторная лампа")
add(MBlocks.LABORATORY_LAMP, "description", "Освещает на несколько блоков в направлении своей лампы, с переключателем красного камня") add(MBlocks.LABORATORY_LAMP, "Description", "освещает на несколько блоков в направлении своей лампы, с переключателем красного камня")
add(MBlocks.LABORATORY_LAMP_INVERTED, "Лабораторная лампа (инвентированный сигнал)") add(MBlocks.LABORATORY_LAMP_INVERTED, "Лабораторная лампа (инвентированный сигнал)")
add(MBlocks.DANGER_STRIPE_BLOCK, "Полоски 'опасность'") add(MBlocks.DANGER_STRIPE_BLOCK, "Полоски 'опасность'")
add(MBlocks.METAL_BEAM, "Металлическая опора") add(MBlocks.METAL_BEAM, "Металлическая опора")
add(MBlocks.METAL_BEAM_CENTER, "Металлическая опора (середина)")
add(MBlocks.TRITANIUM_DOOR[null]!!, "Тритановая дверь") add(MBlocks.TRITANIUM_DOOR[null]!!, "Тритановая дверь")
add(MBlocks.TRITANIUM_DOOR[null]!!, "description0", "Взрывоустойчивая дверь с засовом красного камня...") add(MBlocks.TRITANIUM_DOOR[null]!!, "description0", "Взрывоустойчивая дверь с засовом красного камня...")
@ -703,17 +586,14 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.TRITANIUM_TRAPDOOR[null]!!, "description1", FEELING_SAFE_NOW) add(MBlocks.TRITANIUM_TRAPDOOR[null]!!, "description1", FEELING_SAFE_NOW)
add(MBlocks.TRITANIUM_BARS, "Тритановая решётка") add(MBlocks.TRITANIUM_BARS, "Тритановая решётка")
add(MBlocks.METAL_RAILING, "Металлические перила")
for (block in MBlocks.TRITANIUM_ANVIL)
add(block, "Тритановая наковальня")
} }
} }
private fun items(provider: MatteryLanguageProvider) { private fun items(provider: MatteryLanguageProvider) {
with(provider.russian) { with(provider.russian) {
add(MItems.REDSTONE_INTERACTOR, "Ключ красного камня")
add(MItems.REDSTONE_INTERACTOR, "desc", "'Посылает' сигнал красного камня из блока, с которым взаимодействует")
add(MItems.REDSTONE_INTERACTOR, "desc1", "Другими словами, позволяет активировать механизмы красного камня, такие как железные двери")
add(MItems.REDSTONE_INTERACTOR, "desc2", "Для настройки таймера используйте будучи крадясь")
add(MItems.PROCEDURAL_BATTERY, "Загадочный аккумулятор") add(MItems.PROCEDURAL_BATTERY, "Загадочный аккумулятор")
add(MItems.PROCEDURAL_BATTERY, "desc", "Данные аккумуляторы можно найти в подземельях, со случайными характеристиками") add(MItems.PROCEDURAL_BATTERY, "desc", "Данные аккумуляторы можно найти в подземельях, со случайными характеристиками")
@ -745,7 +625,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ESSENCE_SERVO, "desc2", "Может использоваться как инструмент для ручной перекачки эссенции") add(MItems.ESSENCE_SERVO, "desc2", "Может использоваться как инструмент для ручной перекачки эссенции")
add(MItems.NUTRIENT_PASTE, "Питательная паста") add(MItems.NUTRIENT_PASTE, "Питательная паста")
add(MItems.IMPERFECT_BREAD, "Несовершенный хлеб")
add(MItems.FLUID_CAPSULE, "Жидкостная капсула") add(MItems.FLUID_CAPSULE, "Жидкостная капсула")
add(MItems.FLUID_CAPSULE, "named", "Жидкостная капсула (%s)") add(MItems.FLUID_CAPSULE, "named", "Жидкостная капсула (%s)")
@ -766,7 +645,7 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.BATTERY_CREATIVE, "Творческий аккумулятор") add(MItems.BATTERY_CREATIVE, "Творческий аккумулятор")
add(MItems.QUANTUM_BATTERY, "Квантовый аккумулятор") add(MItems.QUANTUM_BATTERY, "Квантовый аккумулятор")
add(MItems.QUANTUM_CAPACITOR, "Квантовый аккумулятор-конденсатор") add(MItems.QUANTUM_CAPACITOR, "Квантовый аккумулятор-накопитель")
add(MItems.QUANTUM_BATTERY_CREATIVE, "Творческий квантовый аккумулятор") add(MItems.QUANTUM_BATTERY_CREATIVE, "Творческий квантовый аккумулятор")
add(MItems.TRITANIUM_SWORD, "Тритановый меч") add(MItems.TRITANIUM_SWORD, "Тритановый меч")
@ -777,8 +656,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.TRITANIUM_SHEARS, "Тритановые ножницы") add(MItems.TRITANIUM_SHEARS, "Тритановые ножницы")
add(MItems.TRITANIUM_SHIELD, "Тритановый щит") add(MItems.TRITANIUM_SHIELD, "Тритановый щит")
add(MItems.WITHERED_STEEL_SWORD, "Меч из иссушенной стали")
add(MItems.TRITANIUM_HELMET, "Тритановый шлем") add(MItems.TRITANIUM_HELMET, "Тритановый шлем")
add(MItems.TRITANIUM_CHESTPLATE, "Тритановый нагрудник") add(MItems.TRITANIUM_CHESTPLATE, "Тритановый нагрудник")
add(MItems.TRITANIUM_PANTS, "Тритановые поножи") add(MItems.TRITANIUM_PANTS, "Тритановые поножи")
@ -791,19 +668,11 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.TRITANIUM_DUST, "Тритановая пыль") add(MItems.TRITANIUM_DUST, "Тритановая пыль")
add(MItems.TRITANIUM_INGOT, "Тритановый слиток") add(MItems.TRITANIUM_INGOT, "Тритановый слиток")
add(MItems.DILITHIUM_CRYSTAL, "Дилитевый кристалл")
add(MItems.WITHERED_STEEL, "Слиток иссушенной стали")
add(MItems.ROFLITE_ALLOY_INGOT, "Слиток рофлитового сплава")
add(MItems.TRITANIUM_NUGGET, "Тритановый самородок") add(MItems.TRITANIUM_NUGGET, "Тритановый самородок")
add(MItems.MATTER_IO_PORT, "Порт ввода/вывода материи") add(MItems.MATTER_IO_PORT, "Порт ввода/вывода материи")
add(MItems.MATTER_TRANSFORM_MATRIX, "Матрица преобразования материи") add(MItems.MATTER_TRANSFORM_MATRIX, "Матрица преобразования материи")
add(MItems.ANTIMATTER_TRANSFORM_MATRIX, "Матрица преобразования антиматерии")
add(MItems.ANTIMATTER_TRANSFORM_MATRIX, "desc", "Могут быть найдены в городах Края")
add(MItems.ENERGY_BUS, "Шина питания") add(MItems.ENERGY_BUS, "Шина питания")
add(MItems.ELECTRIC_PARTS, "Электрические части") add(MItems.ELECTRIC_PARTS, "Электрические части")
add(MItems.ELECTRIC_PARTS, "desc", "Конденсаторы, резисторы, диоды, перемычки...")
add(MItems.MECHANICAL_PARTS, "Механические части")
add(MItems.MECHANICAL_PARTS, "desc", "Подшипники, шестерёнки, муфты, осевые валы...")
add(MItems.MACHINE_FRAME, "Каркас механизма") add(MItems.MACHINE_FRAME, "Каркас механизма")
add(MItems.TRITANIUM_PLATE, "Тритановая пластина") add(MItems.TRITANIUM_PLATE, "Тритановая пластина")
add(MItems.IRON_PLATE, "Железная пластина") add(MItems.IRON_PLATE, "Железная пластина")
@ -820,14 +689,10 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ELECTROMOTOR, "Электромотор") add(MItems.ELECTROMOTOR, "Электромотор")
add(MItems.MIRROR_COMPOUND, "Набор выплавки зеркала") add(MItems.MIRROR_COMPOUND, "Набор выплавки зеркала")
add(MItems.MIRROR, "Зеркало") add(MItems.MIRROR, "Зеркало")
add(MItems.MIRROR, "desc", "Я могу очень отчётливо видеть своё отражение в этом зеркале") add(MItems.MIRROR, "description", "Я могу очень отчётливо видеть своё отражение в этом зеркале")
add(MItems.REINFORCED_TRITANIUM_PLATE, "Укреплённая тритановая пластина") add(MItems.REINFORCED_TRITANIUM_PLATE, "Укреплённая тритановая пластина")
add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "Бронированная пластина, усиленная чтобы выдержать большие кинетические силы") add(MItems.REINFORCED_TRITANIUM_PLATE, "description", "Бронированная пластина, усиленная что бы выдержать большие кинетические силы")
add(MItems.REINFORCED_IRON_PLATE, "Укреплённая железная пластина")
add(MItems.REINFORCED_IRON_PLATE, "desc", "Более надёжная и прочная железная пластина")
add(MItems.ARMOR_ASSEMBLY, "Стройка брони")
add(MItems.CARBON_MESH, "Углеродная сетка") add(MItems.CARBON_MESH, "Углеродная сетка")
add(MItems.DISPLAY_SCREEN, "Экран дисплея")
add(MItems.GRAVITATIONAL_DISRUPTOR, "Маяк уравнения пространства-времени") add(MItems.GRAVITATIONAL_DISRUPTOR, "Маяк уравнения пространства-времени")
@ -847,7 +712,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.PILL_HUMANE, "Пилюля человечности") add(MItems.PILL_HUMANE, "Пилюля человечности")
add(MItems.PILL_OBLIVION, "Пилюля сброса андроида до заводских настроек") add(MItems.PILL_OBLIVION, "Пилюля сброса андроида до заводских настроек")
add(MItems.PILL_HEAL, "Медицинская пилюля") add(MItems.PILL_HEAL, "Медицинская пилюля")
add(MItems.PILL_NOT_NORMAL, "Не/Нормальная пилюля")
add(MItems.MATTER_CAPACITOR_PARTS, "Части накопителя материи") add(MItems.MATTER_CAPACITOR_PARTS, "Части накопителя материи")
add(MItems.MATTER_CAPACITOR_BASIC, "Простой накопитель материи") add(MItems.MATTER_CAPACITOR_BASIC, "Простой накопитель материи")
@ -861,24 +725,13 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ENERGY_SWORD, "desc3", "Всегда наносит полный урон по площади если имеет заряд") add(MItems.ENERGY_SWORD, "desc3", "Всегда наносит полный урон по площади если имеет заряд")
add(MItems.ENERGY_SWORD, "desc4", "Зачарование 'Разящий клинок' не имеет никакого эффекта на данном оружии") add(MItems.ENERGY_SWORD, "desc4", "Зачарование 'Разящий клинок' не имеет никакого эффекта на данном оружии")
add(MItems.FALLING_SUN, "◄ Падающее Солнце ►")
add(MItems.FALLING_SUN, "desc", "Прототип,требует энергию для работы")
add(MItems.FALLING_SUN, "desc2", "Наносит дополнительный урон андроидам если имеет заряд")
add(MItems.FALLING_SUN, "desc3", "Всегда наносит полный урон по площади если имеет заряд")
add(MItems.FALLING_SUN, "desc4", "Зачарование 'Разящий клинок' не имеет никакого эффекта на данном оружии")
add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive") add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive")
add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive") add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive")
add(MItems.PLASMA_RIFLE, "Плазменная винтовка")
add(MItems.TRITANIUM_ORE_CLUMP, "Рудный тритан") add(MItems.TRITANIUM_ORE_CLUMP, "Рудный тритан")
add(MItems.PATTERN_DRIVE_NORMAL, "Диск шаблонов") add(MItems.PATTERN_DRIVE_NORMAL, "Диск шаблонов")
add(MItems.PATTERN_DRIVE_DOUBLE, "Двухуровневый диск шаблонов")
add(MItems.PATTERN_DRIVE_TRIPLE, "Трёхуровневый диск шаблонов")
add(MItems.PATTERN_DRIVE_QUAD, "Четырёхуровневый диск шаблонов")
add(MItems.PATTERN_DRIVE_CREATIVE, "Творческий диск шаблонов") add(MItems.PATTERN_DRIVE_CREATIVE, "Творческий диск шаблонов")
add(MItems.GOLD_DISK, "Золотой диск")
add(MItems.GOLD_DISK, "single_item", "Золотой диск (%s)")
add(MItems.PATTERN_DRIVE_CREATIVE2, "Вездесущий диск шаблонов") add(MItems.PATTERN_DRIVE_CREATIVE2, "Вездесущий диск шаблонов")
add(MItems.PATTERN_DRIVE_CREATIVE2, "description1", "Предмет режима творчества") add(MItems.PATTERN_DRIVE_CREATIVE2, "description1", "Предмет режима творчества")
add(MItems.PATTERN_DRIVE_CREATIVE2, "description2", "Содержит в себе шаблоны всех предметов, которые имеют значение материи") add(MItems.PATTERN_DRIVE_CREATIVE2, "description2", "Содержит в себе шаблоны всех предметов, которые имеют значение материи")
@ -928,18 +781,6 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.CHEST_UPGRADER, "Ящикатор") add(MItems.CHEST_UPGRADER, "Ящикатор")
add(MItems.CHEST_UPGRADER, "desc", "Заменяет установленные сундуки и бочки грузовыми ящиками с сохранением содержимого") add(MItems.CHEST_UPGRADER, "desc", "Заменяет установленные сундуки и бочки грузовыми ящиками с сохранением содержимого")
add(MItems.CHEST_UPGRADER, "desc2", "Удерживайте необходимые ящики в противоположной руке") add(MItems.CHEST_UPGRADER, "desc2", "Удерживайте необходимые ящики в противоположной руке")
add(MItems.CONFIGURATOR, "Конфигуратор")
add(MItems.CONFIGURATOR, "desc", "Копирует настройки между блоками")
add(MItems.CONFIGURATOR, "desc2", "Использование крадясь на блоке копирует настройки, простое использование применяет")
add(MItems.CONFIGURATOR, "desc3", "Используйте крадясь на воздухе для очистки")
add(MItems.CONFIGURATOR, "desc_saved", "Сохранены настройки для: %s")
add(MItems.BREAD_MONSTER_SPAWN_EGG, "Яйцо призыва хлебного монстра")
add(MEntityTypes.BREAD_MONSTER, "Хлебный монстр")
add(MItems.LOADER_SPAWN_EGG, "Яйцо призыва погрузчика")
add(MEntityTypes.LOADER, "Погрузчик")
} }
} }
@ -982,70 +823,6 @@ private fun androidFeatures(provider: MatteryLanguageProvider) {
private fun gui(provider: MatteryLanguageProvider) { private fun gui(provider: MatteryLanguageProvider) {
with(provider.russian) { with(provider.russian) {
gui("quickmove_from.restock", "Быстрое пополнение из хранилища")
gui("quickmove_from.restock_with_move", "Быстрое складирование из хранилища")
gui("quickmove_from.move", "Взять всё")
gui("quickmove_to.restock", "Быстрое пополнение в хранилище")
gui("quickmove_to.restock_with_move", "Быстрое складирование в хранилище")
gui("quickmove_to.move", "Переместить всё")
gui("quickmove.exchange", "Умный обмен с хранилищем")
gui("quickmove.exchange.desc", "Слоты с фильтрами заполняются до максимума, всё остальное быстро складируется из экзопака")
gui("quickmove_hint", "Правый клик чтоб увидеть все варианты")
gui("exopack.accept_wireless_charge", "Принимать заряд от беспроводных зарядников")
gui("exopack.dont_accept_wireless_charge", "Не принимать заряд от беспроводных зарядников")
gui("charge_androids", "Заряжать андроидов")
gui("dont_charge_androids", "Не заряжать андроидов")
gui("charge_exopacks", "Заряжать экзопаки")
gui("dont_charge_exopacks", "Не заряжать экзопаки")
gui("multiblock.formed", "Мультиблок сформирован: %s")
gui("flywheel.current_loss_t", "Текущая потеря энергии в тик:")
gui("flywheel.current_loss_s", "Текущая потеря энергии в секунду:")
gui("flywheel.core_material", "Материал сердечника:")
gui("flywheel.core_material_count", "(Используется блоков сердечника: %s)")
gui("flow_direction_set", "Направление потока установлено на %s")
gui("tick_timer_set", "Таймер установлен на %s тиков")
gui("config_copied", "Скопированы настройки для %s")
gui("config_pasted", "Настройки применены")
gui("config_cleared", "Настройки очищены")
gui("config_missing", "Нет настроек для применения")
gui("black_hole_generator.help0", "Генерирует электричество используя угловое ускорение сингулярностей")
gui("black_hole_generator.help1", "Чем сильнее гравитационное поле сингулярности, тем больше генерация!")
gui("black_hole_generator.help2", "Использование стабилизаторов пространства-времени ослабляет гравитационное поле, снижая генерацию")
gui("black_hole_generator.help3", "Данный генератор единственный способ 'безопасно' избавиться от сингулярности, полностью лишив её накопленной массы в режиме подпитки антиматерией")
gui("black_hole_generator.injection_rate.mode", "Скорость подпитки")
gui("black_hole_generator.target_mass.mode", "Целевая масса")
gui("black_hole_generator.sustain.mode", "Поддерживать массу")
gui("black_hole_generator.sustain.desc", "Поддерживать массу сингулярности на заданном значении, подпитывая материей или антиматерией по мере необходимости")
gui("black_hole_generator.matter_only.mode", "Подпитка материей")
gui("black_hole_generator.matter_only.desc", "Подпитывать только материей, существенно снизив генерацию энергии, но увеличивая массу сингулярности, а так же дальнейшую выработку энергии")
gui("black_hole_generator.antimatter_only.mode", "Подпитка антиматерией")
gui("black_hole_generator.antimatter_only.desc", "Подпитывать только антиматерией, существенно увеличив генерацию энергии, но уменьшая массу сингулярности, а так же дальнейшую выработку энергии")
gui("draw_multiblock_guide", "Отображать помощника постройки")
gui("ago", "%s тому назад")
gui("time.short.5s", "5с")
gui("time.short.15s", "15с")
gui("time.short.1m", "")
gui("time.short.10m", "10м")
gui("time.short.1h", "")
gui("time.short.6h", "")
gui("time.short.24h", "24ч")
gui("part_of_multiblock", "Часть мультиблока, бесполезен сам по себе") gui("part_of_multiblock", "Часть мультиблока, бесполезен сам по себе")
gui("quicksearch", "Быстрый поиск...") gui("quicksearch", "Быстрый поиск...")
@ -1179,9 +956,7 @@ private fun gui(provider: MatteryLanguageProvider) {
gui("matter_panel.complexity", "Общая сложность: %s") gui("matter_panel.complexity", "Общая сложность: %s")
gui("experience", "%s очков опыта") gui("experience", "%s очков опыта")
gui("experience_with_limit", "%s / %s очков опыта")
gui("experience_levels", "%s уровней опыта") gui("experience_levels", "%s уровней опыта")
gui("experience_levels_with_limit", "%s / %s уровней опыта")
gui("experience.store", "Передать %s уровней опыта") gui("experience.store", "Передать %s уровней опыта")
gui("experience.store_all", "Передать все уровни опыта") gui("experience.store_all", "Передать все уровни опыта")
@ -1219,13 +994,6 @@ private fun jade(provider: MatteryLanguageProvider) {
} }
} }
private fun maps(provider: MatteryLanguageProvider) {
with(provider.russian) {
map("laboratory", "Карта лаборатории")
map("wreckage", "Карта кораблекрушения")
}
}
fun AddRussianLanguage(provider: MatteryLanguageProvider) { fun AddRussianLanguage(provider: MatteryLanguageProvider) {
decoratives(provider) decoratives(provider)
blocks(provider) blocks(provider)
@ -1238,5 +1006,4 @@ fun AddRussianLanguage(provider: MatteryLanguageProvider) {
death(provider) death(provider)
androidFeatures(provider) androidFeatures(provider)
jade(provider) jade(provider)
maps(provider)
} }

View File

@ -1,53 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.world.item.Items
import net.minecraft.world.level.storage.loot.entries.LootItem
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import ru.dbotthepony.mc.otm.datagen.modLootTable
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addAdvancementLoot(lootTables: LootTables) {
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLootTable("research_all_android")) {
lootPool {
add(LootItem.lootTableItem(MItems.ExopackUpgrades.INVENTORY_UPGRADE_HUGE))
}
}
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLootTable("tritanium_block3")) {
lootPool { item(Items.WHITE_DYE) { setCount(8) } }
lootPool { item(Items.ORANGE_DYE) { setCount(8) } }
lootPool { item(Items.MAGENTA_DYE) { setCount(8) } }
lootPool { item(Items.LIGHT_BLUE_DYE) { setCount(8) } }
lootPool { item(Items.YELLOW_DYE) { setCount(8) } }
lootPool { item(Items.LIME_DYE) { setCount(8) } }
lootPool { item(Items.PINK_DYE) { setCount(8) } }
lootPool { item(Items.GRAY_DYE) { setCount(8) } }
lootPool { item(Items.LIGHT_GRAY_DYE) { setCount(8) } }
lootPool { item(Items.CYAN_DYE) { setCount(8) } }
lootPool { item(Items.PURPLE_DYE) { setCount(8) } }
lootPool { item(Items.BLUE_DYE) { setCount(8) } }
lootPool { item(Items.BROWN_DYE) { setCount(8) } }
lootPool { item(Items.GREEN_DYE) { setCount(8) } }
lootPool { item(Items.RED_DYE) { setCount(8) } }
lootPool { item(Items.BLACK_DYE) { setCount(8) } }
}
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLootTable("tritanium_block4")) {
lootPool { item(Items.WHITE_DYE) { setCount(64) } }
lootPool { item(Items.ORANGE_DYE) { setCount(64) } }
lootPool { item(Items.MAGENTA_DYE) { setCount(64) } }
lootPool { item(Items.LIGHT_BLUE_DYE) { setCount(64) } }
lootPool { item(Items.YELLOW_DYE) { setCount(64) } }
lootPool { item(Items.LIME_DYE) { setCount(64) } }
lootPool { item(Items.PINK_DYE) { setCount(64) } }
lootPool { item(Items.GRAY_DYE) { setCount(64) } }
lootPool { item(Items.LIGHT_GRAY_DYE) { setCount(64) } }
lootPool { item(Items.CYAN_DYE) { setCount(64) } }
lootPool { item(Items.PURPLE_DYE) { setCount(64) } }
lootPool { item(Items.BLUE_DYE) { setCount(64) } }
lootPool { item(Items.BROWN_DYE) { setCount(64) } }
lootPool { item(Items.GREEN_DYE) { setCount(64) } }
lootPool { item(Items.RED_DYE) { setCount(64) } }
lootPool { item(Items.BLACK_DYE) { setCount(64) } }
}
}

View File

@ -1,88 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.MRegistry
fun addDecorativeLoot(lootTables: LootTables) {
lootTables.dropsSelf(MRegistry.DECORATIVE_CRATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.COMPUTER_TERMINAL.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.STAR_CHAIR.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.CARGO_CRATES.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_BLOCK.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_WALL.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STAIRS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MRegistry.TRITANIUM_SLAB.allBlocks.values)
lootTables.dropsSelf(MRegistry.VENT.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.VENT_ALTERNATIVE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.FLOOR_TILES.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.UNREFINED_FLOOR_TILES.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_BLOCK.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.FLOOR_TILES_STAIRS.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MRegistry.FLOOR_TILES_SLAB.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.CARBON_FIBRE_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.METAL_MESH) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.METAL_RAILING) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.METAL_JUNK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_RAW_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_BLOCK.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_WALL.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_STAIRS.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MBlocks.TRITANIUM_STRIPED_SLAB.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.LABORATORY_LAMP) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.LABORATORY_LAMP_INVERTED) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.DANGER_STRIPE_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.METAL_BEAM) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_INGOT_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_BARS) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.WITHERED_STEEL_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_HULL) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.GENERATOR_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.MODULAR_FRAME) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.HEAVY_MODULAR_FRAME) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.FLYWHEEL_SHAFT) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.FLYWHEEL_HOUSING) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.FLYWHEEL_BEARING) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.ENGINE) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.REDSTONE_LAMP_INVERTED) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.REINFORCED_REDSTONE_LAMP) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED) { condition(ExplosionCondition.survivesExplosion()) }
MBlocks.TRITANIUM_ANVIL.values.forEach { it.forEach { lootTables.dropsSelf(it) { condition(ExplosionCondition.survivesExplosion()) } } }
for (door in MBlocks.TRITANIUM_TRAPDOOR.values)
lootTables.dropsSelf(door) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
for (door in MBlocks.TRITANIUM_DOOR.values) {
lootTables.block(door) {
item(door) {
blockStateCondition(door) {
this[BlockStateProperties.DOUBLE_BLOCK_HALF] = DoubleBlockHalf.LOWER
}
}
condition(ExplosionCondition.survivesExplosion())
}
}
}

View File

@ -1,32 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.world.level.storage.loot.functions.SetComponentsFunction
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import ru.dbotthepony.mc.otm.datagen.modLootTable
import ru.dbotthepony.mc.otm.registry.game.MDataComponentTypes
import ru.dbotthepony.mc.otm.registry.game.MEntityTypes
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addEntityLoot(loot: LootTables) {
loot.builder(LootContextParamSets.ENTITY, modLootTable("entities/loader")) {
lootPool {
item(MItems.MECHANICAL_PARTS) {
setCount(1, 3)
setWeight(7)
}
item(MItems.ELECTRIC_PARTS) {
setCount(1, 1)
setWeight(1)
}
setRolls(1)
}
}
loot.builder(LootContextParamSets.ENTITY, MEntityTypes.BREAD_MONSTER.defaultLootTable) {
lootPool {
item(MItems.IMPERFECT_BREAD) {
apply(SetComponentsFunction.setComponent(MDataComponentTypes.INERT, true))
}
}
}
}

View File

@ -1,9 +1,9 @@
package ru.dbotthepony.mc.otm.datagen.loot package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.data.DataGenerator
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
import net.neoforged.neoforge.common.data.GlobalLootModifierProvider import net.minecraftforge.common.data.GlobalLootModifierProvider
import net.neoforged.neoforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.data.loot.LootPoolAppender import ru.dbotthepony.mc.otm.data.loot.LootPoolAppender
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import java.util.Arrays import java.util.Arrays
@ -51,7 +51,7 @@ fun PlainLootAppender(
vararg items: Pair<ItemStack, Double> vararg items: Pair<ItemStack, Double>
) = PlainLootAppender(conditions, Arrays.stream(items)) ) = PlainLootAppender(conditions, Arrays.stream(items))
class LootModifiers(generator: GatherDataEvent) : GlobalLootModifierProvider(generator.generator.packOutput, generator.lookupProvider, DataGen.MOD_ID) { class LootModifiers(generator: DataGenerator) : GlobalLootModifierProvider(generator, DataGen.MOD_ID) {
private val lambdas = ArrayList<(LootModifiers) -> Unit>() private val lambdas = ArrayList<(LootModifiers) -> Unit>()
fun lambda(lambda: (LootModifiers) -> Unit) { fun lambda(lambda: (LootModifiers) -> Unit) {

View File

@ -1,30 +1,22 @@
package ru.dbotthepony.mc.otm.datagen.loot package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.util.valueproviders.UniformInt import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.EntityType
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items
import net.minecraft.world.level.storage.loot.BuiltInLootTables import net.minecraft.world.level.storage.loot.BuiltInLootTables
import net.minecraft.world.level.storage.loot.LootTable
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
import net.neoforged.neoforge.common.loot.AddTableLootModifier import net.minecraftforge.common.loot.LootTableIdCondition
import net.neoforged.neoforge.common.loot.LootTableIdCondition import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.util.ResourceLocation import ru.dbotthepony.mc.otm.data.UniformDecimal
import ru.dbotthepony.mc.otm.util.math.Decimal
import ru.dbotthepony.mc.otm.data.world.UniformDecimal
import ru.dbotthepony.mc.otm.data.condition.ChanceWithPlaytimeCondition import ru.dbotthepony.mc.otm.data.condition.ChanceWithPlaytimeCondition
import ru.dbotthepony.mc.otm.data.condition.HasExoPackCondition import ru.dbotthepony.mc.otm.data.condition.HasExoPackCondition
import ru.dbotthepony.mc.otm.data.condition.ItemInInventoryCondition import ru.dbotthepony.mc.otm.data.condition.ItemInInventoryCondition
import ru.dbotthepony.mc.otm.data.condition.KilledByRealPlayerOrIndirectly import ru.dbotthepony.mc.otm.data.condition.KilledByRealPlayerOrIndirectly
import ru.dbotthepony.mc.otm.data.loot.LootPoolAppender import ru.dbotthepony.mc.otm.data.loot.LootPoolAppender
import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.datagen.modLootTable
import ru.dbotthepony.mc.otm.item.ProceduralBatteryItem import ru.dbotthepony.mc.otm.item.ProceduralBatteryItem
import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem
import ru.dbotthepony.mc.otm.item.matter.GoldDiskItem import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.game.MItems
@Suppress("FunctionName") @Suppress("FunctionName")
fun LootTableIdCondition(location: String): LootItemCondition { fun LootTableIdCondition(location: String): LootItemCondition {
@ -36,11 +28,6 @@ fun LootTableIdCondition(location: ResourceLocation): LootItemCondition {
return LootTableIdCondition.Builder(location).build() return LootTableIdCondition.Builder(location).build()
} }
@Suppress("FunctionName")
fun LootTableIdCondition(location: ResourceKey<LootTable>): LootItemCondition {
return LootTableIdCondition.Builder(location.location()).build()
}
fun addLootModifiers(it: LootModifiers) { fun addLootModifiers(it: LootModifiers) {
it.add("dungeon_exopack", LootPoolAppender( it.add("dungeon_exopack", LootPoolAppender(
arrayOf(LootTableIdCondition(BuiltInLootTables.SIMPLE_DUNGEON)), arrayOf(LootTableIdCondition(BuiltInLootTables.SIMPLE_DUNGEON)),
@ -69,11 +56,6 @@ fun addLootModifiers(it: LootModifiers) {
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(4, 10))) apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(4, 10)))
}, },
singleItem(MItems.GOLD_DISK) {
chanceCondition(0.1)
apply(GoldDiskItem.patterns(DataGen.random, MItems.IMPERFECT_BREAD))
},
singleItem(MItems.PROCEDURAL_BATTERY) { singleItem(MItems.PROCEDURAL_BATTERY) {
chanceCondition(0.15) chanceCondition(0.15)
@ -130,11 +112,6 @@ fun addLootModifiers(it: LootModifiers) {
chanceCondition(0.1) chanceCondition(0.1)
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(27, 56), UniformInt.of(2, 6))) apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(27, 56), UniformInt.of(2, 6)))
}, },
singleItem(MItems.GOLD_DISK) {
chanceCondition(0.15)
apply(GoldDiskItem.patterns(DataGen.random, Items.ENDER_PEARL))
},
)) ))
it.add("dungeon_pill", PlainLootAppender( it.add("dungeon_pill", PlainLootAppender(
@ -142,7 +119,6 @@ fun addLootModifiers(it: LootModifiers) {
ItemStack(MItems.PILL_ANDROID, 1) to 0.1, ItemStack(MItems.PILL_ANDROID, 1) to 0.1,
ItemStack(MItems.PILL_HEAL, 2) to 0.5, ItemStack(MItems.PILL_HEAL, 2) to 0.5,
ItemStack(MItems.PILL_HEAL, 1) to 0.75, ItemStack(MItems.PILL_HEAL, 1) to 0.75,
ItemStack(MItems.PILL_NOT_NORMAL, 3) to 0.25,
)) ))
it.add("mineshaft_pill", PlainLootAppender( it.add("mineshaft_pill", PlainLootAppender(
@ -150,7 +126,6 @@ fun addLootModifiers(it: LootModifiers) {
ItemStack(MItems.PILL_ANDROID, 1) to 0.04, ItemStack(MItems.PILL_ANDROID, 1) to 0.04,
ItemStack(MItems.PILL_HEAL, 2) to 0.1, ItemStack(MItems.PILL_HEAL, 2) to 0.1,
ItemStack(MItems.PILL_HEAL, 1) to 0.4, ItemStack(MItems.PILL_HEAL, 1) to 0.4,
ItemStack(MItems.PILL_NOT_NORMAL, 3) to 0.25,
)) ))
it.add("mineshaft_nutrient_paste", PlainLootAppender( it.add("mineshaft_nutrient_paste", PlainLootAppender(
@ -164,13 +139,11 @@ fun addLootModifiers(it: LootModifiers) {
arrayOf(LootTableIdCondition(BuiltInLootTables.DESERT_PYRAMID)), arrayOf(LootTableIdCondition(BuiltInLootTables.DESERT_PYRAMID)),
ItemStack(MItems.PILL_ANDROID, 1) to 0.15, ItemStack(MItems.PILL_ANDROID, 1) to 0.15,
ItemStack(MItems.PILL_HEAL, 1) to 0.3, ItemStack(MItems.PILL_HEAL, 1) to 0.3,
ItemStack(MItems.PILL_NOT_NORMAL, 3) to 0.25,
)) ))
it.add("jungle_temple_pill", PlainLootAppender( it.add("jungle_temple_pill", PlainLootAppender(
arrayOf(LootTableIdCondition(BuiltInLootTables.JUNGLE_TEMPLE)), arrayOf(LootTableIdCondition(BuiltInLootTables.JUNGLE_TEMPLE)),
ItemStack(MItems.PILL_ANDROID, 1) to 0.5, ItemStack(MItems.PILL_ANDROID, 1) to 0.5
ItemStack(MItems.PILL_NOT_NORMAL, 8) to 0.2,
)) ))
it.add("end_city_modifications", PlainLootAppender( it.add("end_city_modifications", PlainLootAppender(
@ -178,8 +151,7 @@ fun addLootModifiers(it: LootModifiers) {
ItemStack(MItems.PILL_ANDROID, 1) to 0.15, ItemStack(MItems.PILL_ANDROID, 1) to 0.15,
ItemStack(MItems.PILL_HUMANE, 1) to 0.3, ItemStack(MItems.PILL_HUMANE, 1) to 0.3,
ItemStack(MItems.PILL_OBLIVION, 1) to 0.5, ItemStack(MItems.PILL_OBLIVION, 1) to 0.5,
ItemStack(MItems.ZPM_BATTERY, 1) to 0.004, ItemStack(MItems.ZPM_BATTERY, 1) to 0.005,
ItemStack(MItems.ANTIMATTER_TRANSFORM_MATRIX, 1) to 0.5,
)) ))
it.add("shipwreck_supply_pill", PlainLootAppender( it.add("shipwreck_supply_pill", PlainLootAppender(
@ -189,7 +161,6 @@ fun addLootModifiers(it: LootModifiers) {
ItemStack(MItems.PILL_HEAL, 1) to 0.6, ItemStack(MItems.PILL_HEAL, 1) to 0.6,
ItemStack(MItems.PILL_HEAL, 1) to 0.6, ItemStack(MItems.PILL_HEAL, 1) to 0.6,
ItemStack(MItems.PILL_HEAL, 1) to 0.6, ItemStack(MItems.PILL_HEAL, 1) to 0.6,
ItemStack(MItems.PILL_NOT_NORMAL, 4) to 0.25,
)) ))
it.add("shipwreck_supply_nutrient_paste", PlainLootAppender( it.add("shipwreck_supply_nutrient_paste", PlainLootAppender(
@ -217,16 +188,6 @@ fun addLootModifiers(it: LootModifiers) {
ItemStack(MItems.EXOPACK_PROBE) ItemStack(MItems.EXOPACK_PROBE)
)) ))
it.add("withered_skeleton_steel_drop", PlainLootAppender(
arrayOf(
LootTableIdCondition(EntityType.WITHER_SKELETON.defaultLootTable),
KilledByRealPlayerOrIndirectly
),
ItemStack(MItems.WITHERED_STEEL, 1) to 0.15,
ItemStack(MItems.WITHERED_STEEL, 2) to 0.1
))
it.add("wither_exosuit_upgrades", BasicLootAppender( it.add("wither_exosuit_upgrades", BasicLootAppender(
arrayOf( arrayOf(
LootTableIdCondition(EntityType.WITHER.defaultLootTable), LootTableIdCondition(EntityType.WITHER.defaultLootTable),
@ -242,29 +203,4 @@ fun addLootModifiers(it: LootModifiers) {
), ),
ItemStack(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON), ItemStack(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON),
)) ))
it.add("trials/matter_dust", AddTableLootModifier(
arrayOf(LootTableIdCondition(BuiltInLootTables.TRIAL_CHAMBERS_REWARD)),
modLootTable("trials/matter_dust")
))
it.add("trials/pill", AddTableLootModifier(
arrayOf(LootTableIdCondition(BuiltInLootTables.TRIAL_CHAMBERS_REWARD)),
modLootTable("trials/pill")
))
it.add("trials/exosuit", AddTableLootModifier(
arrayOf(LootTableIdCondition(BuiltInLootTables.TRIAL_CHAMBERS_REWARD)),
modLootTable("trials/exosuit")
))
it.add("trials/battery", AddTableLootModifier(
arrayOf(LootTableIdCondition(BuiltInLootTables.TRIAL_CHAMBERS_REWARD)),
modLootTable("trials/battery")
))
it.add("trials/zpm_battery", AddTableLootModifier(
arrayOf(LootTableIdCondition(BuiltInLootTables.TRIAL_CHAMBERS_REWARD_OMINOUS)),
modLootTable("trials/zpm_battery")
))
} }

View File

@ -3,15 +3,13 @@
package ru.dbotthepony.mc.otm.datagen.loot package ru.dbotthepony.mc.otm.datagen.loot
import com.mojang.datafixers.util.Pair
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap
import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction
import net.minecraft.advancements.critereon.StatePropertiesPredicate import net.minecraft.advancements.critereon.StatePropertiesPredicate
import net.minecraft.core.HolderLookup import net.minecraft.data.DataGenerator
import net.minecraft.core.WritableRegistry
import net.minecraft.data.loot.LootTableProvider import net.minecraft.data.loot.LootTableProvider
import net.minecraft.data.loot.LootTableSubProvider import net.minecraft.resources.ResourceLocation
import net.minecraft.resources.ResourceKey
import net.minecraft.util.ProblemReporter
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.SlabBlock
@ -21,40 +19,43 @@ import net.minecraft.world.level.storage.loot.LootTable
import net.minecraft.world.level.storage.loot.ValidationContext import net.minecraft.world.level.storage.loot.ValidationContext
import net.minecraft.world.level.storage.loot.entries.LootItem import net.minecraft.world.level.storage.loot.entries.LootItem
import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer
import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue import net.minecraft.world.level.storage.loot.providers.number.ConstantValue
import net.neoforged.neoforge.data.event.GatherDataEvent import ru.dbotthepony.mc.otm.core.stream
import ru.dbotthepony.kommons.collect.stream
import ru.dbotthepony.mc.otm.data.loot.CopyTileNbtFunction import ru.dbotthepony.mc.otm.data.loot.CopyTileNbtFunction
import java.util.concurrent.CompletableFuture import java.util.function.BiConsumer
import java.util.function.Consumer
import java.util.function.Supplier
class LootTables(generator: GatherDataEvent) : LootTableProvider(generator.generator.packOutput, setOf() /* because we don't fucking validate you fuck */, listOf() /* because we attach everything after class is constructed duh */, generator.lookupProvider) { data class NbtCopy(val source: String, val destination: String, val strategy: CopyNbtFunction.MergeStrategy = CopyNbtFunction.MergeStrategy.REPLACE)
private val providersTable = Reference2ObjectArrayMap<LootContextParamSet, HashMap<ResourceKey<LootTable>, () -> LootTable.Builder>>()
val registry: CompletableFuture<HolderLookup.Provider> = generator.lookupProvider
fun builder(context: LootContextParamSet, id: ResourceKey<LootTable>, provider: LootTable.Builder.() -> Unit) { fun TileNbtCopy(source: String, strategy: CopyNbtFunction.MergeStrategy = CopyNbtFunction.MergeStrategy.REPLACE): NbtCopy {
return NbtCopy(source, "BlockEntityTag.$source", strategy)
}
class LootTables(generator: DataGenerator) : LootTableProvider(generator) {
private val providersTable = Reference2ObjectArrayMap<LootContextParamSet, HashMap<ResourceLocation, () -> LootTable.Builder>>()
fun builder(context: LootContextParamSet, id: ResourceLocation, provider: LootTable.Builder.() -> Unit) {
provider(context, id) { provider(context, id) {
LootTable.lootTable().also(provider) LootTable.lootTable().also(provider)
} }
} }
fun builder(block: Block, provider: LootPool.Builder.() -> Unit) { fun provider(context: LootContextParamSet, id: ResourceLocation, provider: () -> LootTable.Builder) {
singleLootPool(LootContextParamSets.BLOCK, block.lootTable, provider)
}
fun provider(context: LootContextParamSet, id: ResourceKey<LootTable>, provider: () -> LootTable.Builder) {
check(providersTable check(providersTable
.computeIfAbsent(context, Reference2ObjectFunction { HashMap() }) .computeIfAbsent(context, Reference2ObjectFunction { HashMap() })
.put(id, provider) == null) { "Duplicate loot pool entry for $id" } .put(id, provider) == null) { "Duplicate loot pool entry for $id" }
} }
override fun getTables(): List<SubProviderEntry> { override fun getTables(): List<Pair<Supplier<Consumer<BiConsumer<ResourceLocation, LootTable.Builder>>>, LootContextParamSet>> {
return providersTable.entries.stream().map { entry -> return providersTable.entries.stream().map { entry ->
SubProviderEntry({ Pair.of(Supplier<Consumer<BiConsumer<ResourceLocation, LootTable.Builder>>> {
LootTableSubProvider { Consumer {
for ((id, callback) in entry.value) { for ((id, callback) in entry.value) {
it.accept(id, callback.invoke()) it.accept(id, callback.invoke())
} }
@ -63,11 +64,7 @@ class LootTables(generator: GatherDataEvent) : LootTableProvider(generator.gener
}.toList() }.toList()
} }
override fun validate( override fun validate(map: MutableMap<ResourceLocation, LootTable>, validationtracker: ValidationContext) {}
writableregistry: WritableRegistry<LootTable>,
validationtracker: ValidationContext,
`problemreporter$collector`: ProblemReporter.Collector
) {}
fun createSlabItemTable(block: Block, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) { fun createSlabItemTable(block: Block, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) {
builder(LootContextParamSets.BLOCK, block.lootTable) { builder(LootContextParamSets.BLOCK, block.lootTable) {
@ -104,10 +101,9 @@ class LootTables(generator: GatherDataEvent) : LootTableProvider(generator.gener
} }
} }
fun singleLootPool(context: LootContextParamSet, id: ResourceKey<LootTable>, block: LootPool.Builder.() -> Unit) { fun singleLootPool(context: LootContextParamSet, id: ResourceLocation, block: LootPool.Builder.() -> Unit) {
builder(context, id) { builder(context, id) {
withPool(LootPool.lootPool().also(block)) withPool(LootPool.lootPool().also(block))
setRandomSequence(id.location())
} }
} }

View File

@ -1,18 +1,14 @@
package ru.dbotthepony.mc.otm.datagen.loot package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraft.world.level.storage.loot.entries.LootItem
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import ru.dbotthepony.mc.otm.util.math.Decimal import net.minecraft.world.level.storage.loot.providers.number.ConstantValue
import ru.dbotthepony.mc.otm.data.world.UniformDecimal import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.datagen.modLootTable import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.item.ProceduralBatteryItem
import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem
import ru.dbotthepony.mc.otm.item.matter.MatterDustItem
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addChestLootTables(loot: LootTables) { fun addChestLootTables(loot: LootTables) {
loot.builder(LootContextParamSets.CHEST, modLootTable("food_box")) { loot.builder(LootContextParamSets.CHEST, modLocation("food_box")) {
lootPool { lootPool {
item(Items.PACKED_ICE) { setCount(minimal = 1, maximal = 3) } item(Items.PACKED_ICE) { setCount(minimal = 1, maximal = 3) }
item(MItems.NUTRIENT_PASTE) { setCount(minimal = 1, maximal = 2) } item(MItems.NUTRIENT_PASTE) { setCount(minimal = 1, maximal = 2) }
@ -21,106 +17,4 @@ fun addChestLootTables(loot: LootTables) {
setRolls(3) setRolls(3)
} }
} }
loot.builder(LootContextParamSets.CHEST, modLootTable("salvage_crate")) {
lootPool {
item(MItems.MECHANICAL_PARTS) { setCount(minimal = 2, maximal = 3) }
item(MItems.IRON_PLATE) { setCount(minimal = 2, maximal = 3) }
item(MItems.ELECTRIC_PARTS) { setCount(minimal = 2, maximal = 3) }
item(MItems.MECHANICAL_PARTS) { setCount(minimal = 2, maximal = 3) }
item(MItems.CIRCUIT_PLATING) { setCount(minimal = 1, maximal = 3) }
item(MItems.METAL_JUNK) { setCount(minimal = 3, maximal = 5) }
item(Items.COPPER_INGOT) { setCount(minimal = 1, maximal = 3) }
item(Items.EXPOSED_COPPER) { setCount(minimal = 1, maximal = 2) }
item(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL) {
chanceCondition(0.1)
setWeight(1)
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(1, 9), UniformInt.of(0, 3)))
}
setRolls(7)
}
}
loot.builder(LootContextParamSets.CHEST, modLootTable("frigate_cargo")) {
lootPool {
item(Items.IRON_INGOT) {
setCount(minimal = 1, maximal = 3)
setWeight(3)
}
item(Items.GOLD_INGOT) { setCount(minimal = 1, maximal = 3) }
item(Items.EMERALD) { setCount(minimal = 1, maximal = 3) }
item(MItems.TRITANIUM_INGOT) { setCount(minimal = 1, maximal = 3) }
item(MItems.MECHANICAL_PARTS) {
setCount(minimal = 2, maximal = 3)
setWeight(2)
}
item(MItems.CIRCUIT_PLATING) { setCount(minimal = 2, maximal = 3) }
item(MItems.ENERGY_BUS) { setCount(minimal = 0, maximal = 2) }
item(MItems.ROFLITE_ALLOY_INGOT) { setCount(minimal = 0, maximal = 3) }
item(MItems.WITHERED_STEEL) { setCount(minimal = 0, maximal = 3) }
item(Items.SADDLE) { setCount(minimal = 0, maximal = 1) }
item(Items.DIAMOND) { setCount(minimal = 0, maximal = 3) }
item(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL) {
chanceCondition(0.2)
setWeight(3)
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(1, 9), UniformInt.of(0, 3)))
}
item(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL) {
chanceCondition(0.1)
setWeight(2)
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(9, 18), UniformInt.of(0, 3)))
}
item(MItems.PROCEDURAL_BATTERY) {
chanceCondition(0.05)
setWeight(1)
apply(
ProceduralBatteryItem.Randomizer(
maxBatteryLevel = UniformDecimal(Decimal(10_000_000), Decimal(50_000_000)),
batteryLevel = UniformDecimal(Decimal(0), Decimal(25_000_000)),
maxInput = UniformDecimal(Decimal(1_000), Decimal(5_000)),
))
}
item(MItems.ZPM_BATTERY) {
chanceCondition(0.001)
setWeight(1)
}
item(MItems.MATTER_DUST) {
chanceCondition(0.1)
setWeight(4)
apply(MatterDustItem.Randomizer(UniformDecimal(Decimal(100), Decimal(2_500))))
}
setRolls(12)
}
}
loot.builder(LootContextParamSets.CHEST, modLootTable("laboratory/supply")) {
lootPool {
item(Items.BREAD) { setCount(minimal = 2, maximal = 3) }
item(Items.HONEY_BOTTLE) { setCount(minimal = 1, maximal = 2) }
item(MItems.NUTRIENT_PASTE) { setCount(minimal = 2, maximal = 3) }
item(Items.SNOWBALL) { setCount(minimal = 1, maximal = 5) }
item(Items.PACKED_ICE) { setCount(minimal = 2, maximal = 3) }
setRolls(7)
}
}
loot.builder(LootContextParamSets.CHEST, modLootTable("laboratory/reward")) {
lootPool {
item(MItems.NUTRIENT_PASTE) { setCount(minimal = 2, maximal = 3) }
setRolls(5)
}
}
} }

View File

@ -1,61 +1,176 @@
package ru.dbotthepony.mc.otm.datagen.loot package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.advancements.critereon.EnchantmentPredicate import net.minecraft.world.item.Items
import net.minecraft.advancements.critereon.ItemEnchantmentsPredicate import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
import net.minecraft.advancements.critereon.ItemSubPredicates
import net.minecraft.advancements.critereon.MinMaxBounds
import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.item.enchantment.Enchantments
import net.minecraft.world.level.ItemLike
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.storage.loot.entries.AlternativesEntry
import net.minecraft.world.level.storage.loot.entries.LootItem import net.minecraft.world.level.storage.loot.entries.LootItem
import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition
import net.minecraft.world.level.storage.loot.predicates.MatchTool import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.util.lookupOrThrow import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.data.loot.Int2NumberProvider import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.game.MItems
private fun ore(lootTables: LootTables, ore: Block, clump: ItemLike, count: Int = 1) {
lootTables.builder(ore) {
add(AlternativesEntry.alternatives(
LootItem.lootTableItem(ore).also {
it.condition(MatchTool.toolMatches(
ItemPredicate.Builder.item().withSubPredicate(
ItemSubPredicates.ENCHANTMENTS,
ItemEnchantmentsPredicate.enchantments(listOf(EnchantmentPredicate(
lootTables.registry.get().lookupOrThrow(Enchantments.SILK_TOUCH), MinMaxBounds.Ints.atLeast(1)
)))
)
))
},
LootItem.lootTableItem(clump).also {
if (count != 1)
it.apply(SetItemCountFunction.setCount(Int2NumberProvider(UniformInt.of(1, count))))
it.apply(ApplyBonusCount.addOreBonusCount(lootTables.registry.get().lookupOrThrow(Enchantments.FORTUNE)))
it.condition(ExplosionCondition.survivesExplosion())
}
))
}
}
fun addLootTables(lootTables: LootTables) { fun addLootTables(lootTables: LootTables) {
lootTables.dropsSelf(MBlocks.MATTER_CABLE) { condition(ExplosionCondition.survivesExplosion()) } lootTables.dropsSelf(MRegistry.DECORATIVE_CRATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.ENERGY_CABLES.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.COMPUTER_TERMINAL.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.CARGO_CRATES.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_BLOCK.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_WALL.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STAIRS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MRegistry.TRITANIUM_SLAB.allBlocks.values)
lootTables.dropsSelf(MRegistry.VENT.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.VENT_ALTERNATIVE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.FLOOR_TILES.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.UNREFINED_FLOOR_TILES.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_BLOCK.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.FLOOR_TILES_STAIRS.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MRegistry.FLOOR_TILES_SLAB.blocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.CARBON_FIBRE_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.METAL_MESH) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_RAW_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_WALL) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_STAIRS) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.createSlabItemTable(MBlocks.TRITANIUM_STRIPED_SLAB) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.MATTER_CABLE) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.GRAVITATION_STABILIZER) lootTables.dropsSelf(MBlocks.GRAVITATION_STABILIZER)
lootTables.dropsOther(MBlocks.GRAVITATION_STABILIZER_LENS, MBlocks.GRAVITATION_STABILIZER) lootTables.dropsOther(MBlocks.GRAVITATION_STABILIZER_LENS, MBlocks.GRAVITATION_STABILIZER)
ore(lootTables, MBlocks.TRITANIUM_ORE, MItems.TRITANIUM_ORE_CLUMP) lootTables.dropsSelf(MBlocks.LABORATORY_LAMP) { condition(ExplosionCondition.survivesExplosion()) }
ore(lootTables, MBlocks.DEEPSLATE_TRITANIUM_ORE, MItems.TRITANIUM_ORE_CLUMP) lootTables.dropsSelf(MBlocks.LABORATORY_LAMP_INVERTED) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.DANGER_STRIPE_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.METAL_BEAM) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_INGOT_BLOCK) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.TRITANIUM_BARS) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MBlocks.ENERGY_CABLES.values) { condition(ExplosionCondition.survivesExplosion()) }
ore(lootTables, MBlocks.DILITHIUM_ORE, MItems.DILITHIUM_CRYSTAL, 2) lootTables.dropsSelf(MBlocks.INFINITE_WATER_SOURCE) { condition(ExplosionCondition.survivesExplosion()) }
ore(lootTables, MBlocks.DEEPSLATE_DILITHIUM_ORE, MItems.DILITHIUM_CRYSTAL, 2)
lootTables.dropsSelf(MBlocks.ENGINE) { condition(ExplosionCondition.survivesExplosion()) }
for (block in MBlocks.TRITANIUM_ANVIL)
lootTables.dropsSelf(block) { condition(ExplosionCondition.survivesExplosion()) }
for (door in MBlocks.TRITANIUM_TRAPDOOR.values)
lootTables.dropsSelf(door) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.dropsSelf(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.block(MBlocks.PHANTOM_ATTRACTOR) {
item(MBlocks.PHANTOM_ATTRACTOR) {
blockStateCondition(MBlocks.PHANTOM_ATTRACTOR) {
this[BlockStateProperties.DOUBLE_BLOCK_HALF] = DoubleBlockHalf.LOWER
}
}
condition(ExplosionCondition.survivesExplosion())
}
for (door in MBlocks.TRITANIUM_DOOR.values) {
lootTables.block(door) {
item(door) {
blockStateCondition(door) {
this[BlockStateProperties.DOUBLE_BLOCK_HALF] = DoubleBlockHalf.LOWER
}
}
condition(ExplosionCondition.survivesExplosion())
}
}
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("research_all_android")) {
lootPool {
add(LootItem.lootTableItem(MItems.ExopackUpgrades.INVENTORY_UPGRADE_HUGE))
}
}
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("tritanium_block3")) {
lootPool { item(Items.WHITE_DYE) { setCount(8) } }
lootPool { item(Items.ORANGE_DYE) { setCount(8) } }
lootPool { item(Items.MAGENTA_DYE) { setCount(8) } }
lootPool { item(Items.LIGHT_BLUE_DYE) { setCount(8) } }
lootPool { item(Items.YELLOW_DYE) { setCount(8) } }
lootPool { item(Items.LIME_DYE) { setCount(8) } }
lootPool { item(Items.PINK_DYE) { setCount(8) } }
lootPool { item(Items.GRAY_DYE) { setCount(8) } }
lootPool { item(Items.LIGHT_GRAY_DYE) { setCount(8) } }
lootPool { item(Items.CYAN_DYE) { setCount(8) } }
lootPool { item(Items.PURPLE_DYE) { setCount(8) } }
lootPool { item(Items.BLUE_DYE) { setCount(8) } }
lootPool { item(Items.BROWN_DYE) { setCount(8) } }
lootPool { item(Items.GREEN_DYE) { setCount(8) } }
lootPool { item(Items.RED_DYE) { setCount(8) } }
lootPool { item(Items.BLACK_DYE) { setCount(8) } }
}
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("tritanium_block4")) {
lootPool { item(Items.WHITE_DYE) { setCount(64) } }
lootPool { item(Items.ORANGE_DYE) { setCount(64) } }
lootPool { item(Items.MAGENTA_DYE) { setCount(64) } }
lootPool { item(Items.LIGHT_BLUE_DYE) { setCount(64) } }
lootPool { item(Items.YELLOW_DYE) { setCount(64) } }
lootPool { item(Items.LIME_DYE) { setCount(64) } }
lootPool { item(Items.PINK_DYE) { setCount(64) } }
lootPool { item(Items.GRAY_DYE) { setCount(64) } }
lootPool { item(Items.LIGHT_GRAY_DYE) { setCount(64) } }
lootPool { item(Items.CYAN_DYE) { setCount(64) } }
lootPool { item(Items.PURPLE_DYE) { setCount(64) } }
lootPool { item(Items.BLUE_DYE) { setCount(64) } }
lootPool { item(Items.BROWN_DYE) { setCount(64) } }
lootPool { item(Items.GREEN_DYE) { setCount(64) } }
lootPool { item(Items.RED_DYE) { setCount(64) } }
lootPool { item(Items.BLACK_DYE) { setCount(64) } }
}
lootTables.tile(MBlocks.COBBLESTONE_GENERATOR.values)
lootTables.tile(MBlocks.ESSENCE_STORAGE.values)
lootTables.tile(MBlocks.MATTER_RECONSTRUCTOR.values)
lootTables.tile(MBlocks.FLUID_TANK)
lootTables.tile(MBlocks.PAINTER)
lootTables.tile(MBlocks.MATTER_ENTANGLER)
lootTables.tile(MBlocks.ENERGY_SERVO.values)
lootTables.tile(MBlocks.ENERGY_COUNTER.values)
lootTables.tile(MBlocks.CHEMICAL_GENERATOR.values)
lootTables.tile(MBlocks.HOLO_SIGN, "isLocked")
lootTables.tile(MBlocks.STORAGE_CABLE)
lootTables.tile(MBlocks.ANDROID_STATION.values)
lootTables.tile(MBlocks.ANDROID_CHARGER.values)
lootTables.tile(MBlocks.BATTERY_BANK.values)
lootTables.tile(MBlocks.DRIVE_VIEWER.values)
lootTables.tile(MBlocks.STORAGE_BUS)
lootTables.tile(MBlocks.STORAGE_IMPORTER)
lootTables.tile(MBlocks.STORAGE_EXPORTER)
lootTables.tile(MBlocks.STORAGE_POWER_SUPPLIER.values)
lootTables.tile(MBlocks.DRIVE_RACK)
lootTables.tile(MBlocks.MATTER_DECOMPOSER.values)
lootTables.tile(MBlocks.MATTER_REPLICATOR.values)
lootTables.tile(MBlocks.MATTER_RECYCLER.values)
lootTables.tile(MBlocks.MATTER_SCANNER.values)
lootTables.tile(MBlocks.PLATE_PRESS.values)
lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values)
lootTables.tile(MBlocks.POWERED_FURNACE.values)
lootTables.tile(MBlocks.POWERED_SMOKER.values)
lootTables.tile(MBlocks.POWERED_BLAST_FURNACE.values)
lootTables.tile(MBlocks.MATTER_PANEL.values)
lootTables.tile(MBlocks.PATTERN_STORAGE)
lootTables.tile(MBlocks.MATTER_CAPACITOR_BANK.values)
lootTables.tile(MBlocks.MATTER_BOTTLER.values)
lootTables.tile(MBlocks.BLACK_HOLE_GENERATOR)
lootTables.tile(MBlocks.ITEM_INPUT_HATCH)
lootTables.tile(MBlocks.ITEM_OUTPUT_HATCH)
} }

View File

@ -1,82 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition
import ru.dbotthepony.mc.otm.registry.game.MBlocks
fun addMachineLoot(lootTables: LootTables) {
lootTables.block(MBlocks.PHANTOM_ATTRACTOR) {
item(MBlocks.PHANTOM_ATTRACTOR) {
blockStateCondition(MBlocks.PHANTOM_ATTRACTOR) {
this[BlockStateProperties.DOUBLE_BLOCK_HALF] = DoubleBlockHalf.LOWER
}
}
condition(ExplosionCondition.survivesExplosion())
}
lootTables.dropsSelf(MBlocks.INFINITE_WATER_SOURCE) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.tile(MBlocks.COBBLESTONE_GENERATOR.values)
lootTables.tile(MBlocks.ESSENCE_STORAGE.values)
lootTables.tile(MBlocks.MATTER_RECONSTRUCTOR.values)
lootTables.tile(MBlocks.FLUID_TANK)
lootTables.tile(MBlocks.PAINTER)
lootTables.tile(MBlocks.MATTER_ENTANGLER)
lootTables.tile(MBlocks.GRILL.values)
lootTables.tile(MBlocks.ENERGY_SERVO.values)
lootTables.tile(MBlocks.ENERGY_COUNTER.values)
lootTables.tile(MBlocks.CHEMICAL_GENERATOR.values)
lootTables.tile(MBlocks.HOLO_SIGN, "isLocked")
lootTables.tile(MBlocks.STORAGE_CABLE)
lootTables.tile(MBlocks.ANDROID_STATION.values)
lootTables.tile(MBlocks.ANDROID_CHARGER.values)
lootTables.tile(MBlocks.BATTERY_BANK.values)
lootTables.tile(MBlocks.DRIVE_VIEWER.values)
lootTables.tile(MBlocks.STORAGE_BUS)
lootTables.tile(MBlocks.STORAGE_IMPORTER)
lootTables.tile(MBlocks.STORAGE_EXPORTER)
lootTables.tile(MBlocks.STORAGE_POWER_SUPPLIER.values)
lootTables.tile(MBlocks.DRIVE_RACK)
lootTables.tile(MBlocks.MATTER_DECOMPOSER.values)
lootTables.tile(MBlocks.MATTER_REPLICATOR.values)
lootTables.tile(MBlocks.MATTER_RECYCLER.values)
lootTables.tile(MBlocks.MATTER_SCANNER.values)
lootTables.tile(MBlocks.PLATE_PRESS.values)
lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values)
lootTables.tile(MBlocks.POWERED_FURNACE.values)
lootTables.tile(MBlocks.POWERED_SMOKER.values)
lootTables.tile(MBlocks.POWERED_BLAST_FURNACE.values)
lootTables.tile(MBlocks.MATTER_PANEL.values)
lootTables.tile(MBlocks.PATTERN_STORAGE)
lootTables.tile(MBlocks.MATTER_CAPACITOR_BANK.values)
lootTables.tile(MBlocks.MATTER_BOTTLER.values)
lootTables.tile(MBlocks.BLACK_HOLE_GENERATOR)
lootTables.tile(MBlocks.FLYWHEEL_BATTERY)
lootTables.dropsSelf(listOf(
MBlocks.MATTER_INJECTOR,
MBlocks.ANTIMATTER_INJECTOR,
MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR
)) { condition(ExplosionCondition.survivesExplosion()) }
lootTables.tile(MBlocks.ITEM_INPUT_HATCH)
lootTables.tile(MBlocks.ITEM_OUTPUT_HATCH)
lootTables.tile(MBlocks.ENERGY_INPUT_HATCH)
lootTables.tile(MBlocks.ENERGY_OUTPUT_HATCH)
lootTables.tile(MBlocks.MATTER_INPUT_HATCH)
lootTables.tile(MBlocks.MATTER_OUTPUT_HATCH)
lootTables.tile(MBlocks.ENERGY_INPUT_INTERFACE)
lootTables.tile(MBlocks.ENERGY_OUTPUT_INTERFACE)
}

View File

@ -1,70 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.loot
import net.minecraft.util.valueproviders.UniformInt
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
import ru.dbotthepony.mc.otm.util.math.Decimal
import ru.dbotthepony.mc.otm.data.world.UniformDecimal
import ru.dbotthepony.mc.otm.datagen.modLootTable
import ru.dbotthepony.mc.otm.item.ProceduralBatteryItem
import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem
import ru.dbotthepony.mc.otm.item.matter.MatterDustItem
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addVaultLoot(lootTables: LootTables) {
lootTables.builder(LootContextParamSets.VAULT, modLootTable("trials/matter_dust")) {
lootPool { item(MItems.MATTER_DUST) {
chanceCondition(0.2)
setWeight(4)
apply(MatterDustItem.Randomizer(UniformDecimal(Decimal(100), Decimal(2_500))))
} }
}
lootTables.builder(LootContextParamSets.VAULT, modLootTable("trials/pill")) {
lootPool { item(MItems.PILL_ANDROID) {
chanceCondition(0.1)
setWeight(1)
} }
lootPool { item(MItems.PILL_HEAL) {
chanceCondition(0.5)
setWeight(2)
setCount(2, 5)
} }
}
lootTables.builder(LootContextParamSets.VAULT, modLootTable("trials/exosuit")) {
lootPool { item(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL) {
chanceCondition(0.2)
setWeight(2)
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(1, 9), UniformInt.of(0, 3)))
} }
lootPool { item(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL) {
chanceCondition(0.1)
setWeight(1)
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(9, 18), UniformInt.of(0, 3)))
} }
}
lootTables.builder(LootContextParamSets.VAULT, modLootTable("trials/battery")) {
lootPool { item(MItems.PROCEDURAL_BATTERY) {
chanceCondition(0.05)
setWeight(1)
apply(
ProceduralBatteryItem.Randomizer(
maxBatteryLevel = UniformDecimal(Decimal(10_000_000), Decimal(50_000_000)),
batteryLevel = UniformDecimal(Decimal(0), Decimal(25_000_000)),
maxInput = UniformDecimal(Decimal(1_000), Decimal(5_000)),
))
} }
}
lootTables.builder(LootContextParamSets.VAULT, modLootTable("trials/zpm_battery")) {
lootPool { item(MItems.ZPM_BATTERY) {
chanceCondition(0.001)
setWeight(1)
} }
}
}

View File

@ -2,15 +2,14 @@ package ru.dbotthepony.mc.otm.datagen.models
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.WaterloggedTransparentBlock import net.minecraftforge.client.model.generators.BlockModelProvider
import net.neoforged.neoforge.client.model.generators.BlockModelProvider import net.minecraftforge.data.event.GatherDataEvent
import net.neoforged.neoforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import java.util.LinkedList import java.util.LinkedList
class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) {
private val callbacks = LinkedList<(MatteryBlockModelProvider) -> Unit>() private val callbacks = LinkedList<(MatteryBlockModelProvider) -> Unit>()
fun exec(callback: (MatteryBlockModelProvider) -> Unit) { fun exec(callback: (MatteryBlockModelProvider) -> Unit) {
@ -27,30 +26,6 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
return "Block Models: $modid" return "Block Models: $modid"
} }
fun cubeAll(vararg blocks: Block) {
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, modLocation("block/${block.registryName!!.path}"))
}
}
}
fun cubeAllCutout(vararg blocks: Block) {
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, modLocation("block/${block.registryName!!.path}")).renderType("cutout_mipped")
}
}
}
fun cubeAllFramed(modelName: String, textureName: String) {
exec {
withExistingParent(modelName, modLocation("block/frame_block"))
.texture("texture", textureName)
.renderType("cutout_mipped")
}
}
fun decorativeGlassAll(blocks: Collection<Block>) { fun decorativeGlassAll(blocks: Collection<Block>) {
for (block in blocks) { for (block in blocks) {
exec { exec {
@ -75,13 +50,6 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
} }
} }
fun decorativeCubeAllCutout(vararg blocks: Block) {
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, modLocation("block/decorative/${block.registryName!!.path}")).renderType("cutout_mipped")
}
}
}
fun decorativeCubeAll(subdir: String, vararg blocks: Block) { fun decorativeCubeAll(subdir: String, vararg blocks: Block) {
for (block in blocks) { for (block in blocks) {
exec { exec {
@ -112,20 +80,14 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
} }
} }
fun column(block: Block, side: String, end: String) { fun column(block: Block, end: String, side: String) {
exec { exec {
cubeColumn(block.registryName!!.path, modLocation(side), modLocation(end)) cubeColumn(block.registryName!!.path, modLocation(end), modLocation(side))
} }
} }
fun orientable(block: Block, side: String, front: String) { fun decorativeColumn(it: Block, end: String, side: String) {
exec { column(it, "block/decorative/$end", "block/decorative/$side")
orientable(block.registryName!!.path, modLocation(side), modLocation(front), modLocation(side))
}
}
fun decorativeColumn(it: Block, side: String, end: String) {
column(it, "block/decorative/$side", "block/decorative/$end")
} }
fun resourceCubeAll(vararg blocks: Block) { fun resourceCubeAll(vararg blocks: Block) {
@ -137,7 +99,7 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
} }
fun colored(modelName: String, suffix: String, textureKeys: Map<String, String>) { fun colored(modelName: String, suffix: String, textureKeys: Map<String, String>) {
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
exec { exec {
val model = withExistingParent(modelName + "_${color.name.lowercase()}$suffix", modLocation(modelName + suffix)) val model = withExistingParent(modelName + "_${color.name.lowercase()}$suffix", modLocation(modelName + suffix))
@ -181,28 +143,16 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
} }
} }
fun cable(modelName: String, textureName: String, thin: Boolean = false, powered: Boolean = false) { fun cable(modelName: String, textureName: String) {
val baseName = if (thin) "base_cable_thin" else "base_cable"
exec { exec {
withExistingParent("block/${modelName}_core", modLocation("block/${baseName}_core")) withExistingParent("block/${modelName}_core", modLocation("block/base_cable_core"))
.texture("0", textureName) .texture("0", textureName)
withExistingParent("block/${modelName}_connection", modLocation("block/${baseName}_connection")) withExistingParent("block/${modelName}_connection", modLocation("block/base_cable_connection"))
.texture("0", textureName) .texture("0", textureName)
withExistingParent("item/${modelName}", modLocation("item/${baseName}")) withExistingParent("item/${modelName}", modLocation("item/base_cable"))
.texture("0", textureName) .texture("0", textureName)
} }
if (powered && !thin) {
exec {
withExistingParent("block/${modelName}_core_powered", modLocation("block/${baseName}_core_powered"))
.texture("0", textureName)
withExistingParent("block/${modelName}_connection_powered", modLocation("block/${baseName}_connection_powered"))
.texture("0", textureName)
}
}
} }
} }

View File

@ -1,22 +1,20 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
fun addComponentRecipes(consumer: RecipeOutput) { fun addComponentRecipes(consumer: RecipeOutput) {
// Обычный рецепт // Обычный рецепт
MatteryRecipe(MItems.BASIC_CONTROL_CIRCUIT, count = 3, category = RecipeCategory.MISC) MatteryRecipe(MItems.BASIC_CONTROL_CIRCUIT, count = 3)
.row(MItemTags.COPPER_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.COPPER_WIRES)
.row(MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING) .row(MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING)
.unlockedBy(MItemTags.COPPER_WIRES) .unlockedBy(MItemTags.COPPER_WIRES)
.build(consumer) .build(consumer)
// ручной рецепт // ручной рецепт
MatteryRecipe(MItems.BASIC_CONTROL_CIRCUIT, category = RecipeCategory.MISC) MatteryRecipe(MItems.BASIC_CONTROL_CIRCUIT)
.rowB(Tags.Items.DUSTS_REDSTONE) .rowB(Tags.Items.DUSTS_REDSTONE)
.rowB(MItemTags.COPPER_WIRES) .rowB(MItemTags.COPPER_WIRES)
.rowB(ItemTags.WOODEN_SLABS) .rowB(ItemTags.WOODEN_SLABS)
@ -24,14 +22,14 @@ fun addComponentRecipes(consumer: RecipeOutput) {
.unlockedBy(Tags.Items.DUSTS_REDSTONE) .unlockedBy(Tags.Items.DUSTS_REDSTONE)
.build(consumer, "alt") .build(consumer, "alt")
MatteryRecipe(MItems.ADVANCED_CONTROL_CIRCUIT, count = 3, category = RecipeCategory.MISC) MatteryRecipe(MItems.ADVANCED_CONTROL_CIRCUIT, count = 3)
.row(MItemTags.COPPER_WIRES, Tags.Items.GEMS_QUARTZ, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, Tags.Items.GEMS_QUARTZ, MItemTags.COPPER_WIRES)
.row(MItemTags.GOLD_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.GOLD_WIRES)
.row(MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING) .row(MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING, MItems.CIRCUIT_PLATING)
.unlockedBy(MItemTags.GOLD_WIRES) .unlockedBy(MItemTags.GOLD_WIRES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MACHINE_FRAME, category = RecipeCategory.MISC) MatteryRecipe(MItems.MACHINE_FRAME)
.row(MItemTags.HARDENED_GLASS, MItemTags.BASIC_CIRCUIT, MItemTags.HARDENED_GLASS) .row(MItemTags.HARDENED_GLASS, MItemTags.BASIC_CIRCUIT, MItemTags.HARDENED_GLASS)
.row(MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES, MItems.ELECTRIC_PARTS) .row(MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES, MItems.ELECTRIC_PARTS)
.rowAC(MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES) .rowAC(MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES)
@ -40,21 +38,21 @@ fun addComponentRecipes(consumer: RecipeOutput) {
.unlockedBy(MItems.ELECTRIC_PARTS) .unlockedBy(MItems.ELECTRIC_PARTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.GOLD_WIRING, count = 8, category = RecipeCategory.MISC) MatteryRecipe(MItems.GOLD_WIRING, count = 8)
.rowB(Tags.Items.INGOTS_GOLD) .rowB(Tags.Items.INGOTS_GOLD)
.row(Tags.Items.INGOTS_GOLD, Tags.Items.RODS_WOODEN, Tags.Items.INGOTS_GOLD) .row(Tags.Items.INGOTS_GOLD, Tags.Items.RODS_WOODEN, Tags.Items.INGOTS_GOLD)
.rowB(Tags.Items.INGOTS_GOLD) .rowB(Tags.Items.INGOTS_GOLD)
.unlockedBy(Tags.Items.INGOTS_GOLD) .unlockedBy(Tags.Items.INGOTS_GOLD)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.COPPER_WIRING, count = 8, category = RecipeCategory.MISC) MatteryRecipe(MItems.COPPER_WIRING, count = 8)
.rowB(Tags.Items.INGOTS_COPPER) .rowB(Tags.Items.INGOTS_COPPER)
.row(Tags.Items.INGOTS_COPPER, Tags.Items.RODS_WOODEN, Tags.Items.INGOTS_COPPER) .row(Tags.Items.INGOTS_COPPER, Tags.Items.RODS_WOODEN, Tags.Items.INGOTS_COPPER)
.rowB(Tags.Items.INGOTS_COPPER) .rowB(Tags.Items.INGOTS_COPPER)
.unlockedBy(Tags.Items.INGOTS_COPPER) .unlockedBy(Tags.Items.INGOTS_COPPER)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.ENERGY_BUS, count = 2, category = RecipeCategory.MISC) MatteryRecipe(MItems.ENERGY_BUS, count = 2)
.rowAB(Tags.Items.DUSTS_REDSTONE, MItems.ELECTRIC_PARTS) .rowAB(Tags.Items.DUSTS_REDSTONE, MItems.ELECTRIC_PARTS)
.row(MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES)
.rowBC(MItems.ELECTRIC_PARTS, Tags.Items.DUSTS_REDSTONE) .rowBC(MItems.ELECTRIC_PARTS, Tags.Items.DUSTS_REDSTONE)
@ -63,47 +61,30 @@ fun addComponentRecipes(consumer: RecipeOutput) {
.unlockedBy(Tags.Items.DUSTS_REDSTONE) .unlockedBy(Tags.Items.DUSTS_REDSTONE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MATTER_IO_PORT, category = RecipeCategory.MISC) MatteryRecipe(MItems.MATTER_IO_PORT)
.rowB(MItems.MATTER_CABLE) .rowB(MItems.MATTER_CABLE)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.BASIC_CIRCUIT, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItemTags.BASIC_CIRCUIT, MItemTags.TRITANIUM_PLATES)
.rowB(MItems.MATTER_CABLE) .rowB(MItems.MATTER_CABLE)
.unlockedBy(MItems.MATTER_CABLE) .unlockedBy(MItems.MATTER_CABLE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MATTER_TRANSFORM_MATRIX, category = RecipeCategory.MISC) MatteryRecipe(MItems.MATTER_TRANSFORM_MATRIX)
.row(MItemTags.DILITHIUM_GEMS, MItems.MATTER_CABLE, MItemTags.DILITHIUM_GEMS) .row(Tags.Items.ENDER_PEARLS, MItems.MATTER_CABLE, Tags.Items.ENDER_PEARLS)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.ADVANCED_CIRCUIT, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItemTags.ADVANCED_CIRCUIT, MItemTags.TRITANIUM_PLATES)
.rowB(MItems.MATTER_CABLE) .rowB(MItems.MATTER_CABLE)
.unlockedBy(MItems.MATTER_CABLE) .unlockedBy(MItems.MATTER_CABLE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MATTER_CAPACITOR_PARTS, count = 3, category = RecipeCategory.MISC) MatteryRecipe(MItems.MATTER_CAPACITOR_PARTS, count = 3)
.row(MItemTags.IRON_PLATES, MItemTags.HARDENED_GLASS_PANES, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItemTags.HARDENED_GLASS_PANES, MItemTags.IRON_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.HARDENED_GLASS_PANES, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItemTags.HARDENED_GLASS_PANES, MItemTags.TRITANIUM_PLATES)
.rowB(MItemTags.HARDENED_GLASS_PANES) .rowB(MItemTags.HARDENED_GLASS_PANES)
.unlockedBy(MItems.MATTER_CABLE) .unlockedBy(MItems.MATTER_CABLE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.ELECTRIC_PARTS, count = 4, category = RecipeCategory.MISC) MatteryRecipe(MItems.ELECTRIC_PARTS, count = 4)
.row(Tags.Items.DUSTS_REDSTONE, MItemTags.COPPER_WIRES, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, MItemTags.COPPER_WIRES, Tags.Items.DUSTS_REDSTONE)
.row(Tags.Items.NUGGETS_GOLD, Tags.Items.NUGGETS_IRON, Tags.Items.NUGGETS_GOLD) .row(Tags.Items.NUGGETS_GOLD, Tags.Items.NUGGETS_IRON, Tags.Items.NUGGETS_GOLD)
.row(Tags.Items.DUSTS_REDSTONE, MItemTags.COPPER_WIRES, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, MItemTags.COPPER_WIRES, Tags.Items.DUSTS_REDSTONE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MECHANICAL_PARTS, count = 4, category = RecipeCategory.MISC)
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.INGOTS_IRON, MItemTags.TRITANIUM_INGOTS)
.build(consumer)
MatteryRecipe(MItems.ELECTROMOTOR, category = RecipeCategory.MISC)
.rowB(MItems.ELECTRIC_PARTS)
.row(MItems.ELECTROMAGNET, MItems.MECHANICAL_PARTS, MItems.ELECTROMAGNET)
.row(MItemTags.COPPER_WIRES, MItems.MECHANICAL_PARTS, MItemTags.COPPER_WIRES)
.unlockedBy(MItems.ELECTROMAGNET)
.build(consumer)
MatteryRecipe(MItems.DISPLAY_SCREEN, 3)
.row(MItemTags.IRON_PLATES, Tags.Items.DUSTS_GLOWSTONE, Tags.Items.GLASS_PANES_COLORLESS)
.row(MItemTags.IRON_PLATES, Tags.Items.DUSTS_REDSTONE, Tags.Items.GLASS_PANES_COLORLESS)
.row(MItemTags.IRON_PLATES, Tags.Items.DUSTS_GLOWSTONE, Tags.Items.GLASS_PANES_COLORLESS)
.build(consumer)
} }

View File

@ -1,39 +1,36 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.data.recipes.SimpleCookingRecipeBuilder import net.minecraft.data.recipes.SimpleCookingRecipeBuilder
import net.minecraft.util.valueproviders.ConstantFloat import net.minecraft.util.valueproviders.ConstantFloat
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
private fun RecipeOutput.addRecyclingRecipe(inputs: Collection<ItemLike>, result: Item, name: String) { private fun RecipeOutput.addRecyclingRecipe(inputs: Collection<ItemLike>, result: Item, name: String) {
val inputStacks = inputs.map(::ItemStack) val inputStacks = inputs.map(::ItemStack)
SimpleCookingRecipeBuilder.smelting( SimpleCookingRecipeBuilder.smelting(
Ingredient.of(inputStacks.stream()), Ingredient.of(inputStacks.stream()),
RecipeCategory.MISC, result, 0f, 200 result, 0f, 200
).also { r -> inputs.forEach { r.unlockedBy(it) } }.save(this, modLocation("smelting/${name}")) ).also { r -> inputs.forEach { r.unlockedBy(it) } }.save(this, modLocation("smelting/${name}"))
SimpleCookingRecipeBuilder.blasting( SimpleCookingRecipeBuilder.blasting(
Ingredient.of(inputStacks.stream()), Ingredient.of(inputStacks.stream()),
RecipeCategory.MISC, result, 0f, 100 result, 0f, 100
).also { r -> inputs.forEach { r.unlockedBy(it) } }.save(this, modLocation("blasting/${name}")) ).also { r -> inputs.forEach { r.unlockedBy(it) } }.save(this, modLocation("blasting/${name}"))
} }
fun addBlastingRecipes(consumer: RecipeOutput) { fun addBlastingRecipes(consumer: RecipeOutput) {
SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItems.MIRROR_COMPOUND), RecipeCategory.MISC, MItems.MIRROR, 0.1f, 100).unlockedBy( SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItems.MIRROR_COMPOUND), MItems.MIRROR, 0.1f, 100).unlockedBy(
MItems.MIRROR_COMPOUND).save(consumer) MItems.MIRROR_COMPOUND).save(consumer)
SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_PLATES), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 0f, 100).unlockedBy( SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_PLATES), MItems.TRITANIUM_INGOT, 0f, 100).unlockedBy(
MItemTags.TRITANIUM_PLATES).save(consumer, modLocation("tritanium_ingot_from_plates")) MItemTags.TRITANIUM_PLATES).save(consumer, modLocation("tritanium_ingot_from_plates"))
SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_PLATES), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 0f, 50).unlockedBy( SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_PLATES), MItems.TRITANIUM_INGOT, 0f, 50).unlockedBy(
MItemTags.TRITANIUM_PLATES).save(consumer, modLocation("tritanium_ingot_from_plates_blasting")) MItemTags.TRITANIUM_PLATES).save(consumer, modLocation("tritanium_ingot_from_plates_blasting"))
consumer.addRecyclingRecipe(MItems.TRITANIUM_TOOLS, MItems.TRITANIUM_NUGGET, "tritanium_nugget_from_tools") consumer.addRecyclingRecipe(MItems.TRITANIUM_TOOLS, MItems.TRITANIUM_NUGGET, "tritanium_nugget_from_tools")
@ -41,21 +38,17 @@ fun addBlastingRecipes(consumer: RecipeOutput) {
} }
fun addOreSmeltingRecipes(consumer: RecipeOutput) { fun addOreSmeltingRecipes(consumer: RecipeOutput) {
SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_ORES), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 1f, 200).unlockedBy(MItemTags.TRITANIUM_ORES).save(consumer, modLocation("smelting/tritanium_ingot_from_ore_block")) SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_ORES), MItems.TRITANIUM_INGOT, 1f, 200).unlockedBy(MItemTags.TRITANIUM_ORES).save(consumer, modLocation("smelting/tritanium_ingot_from_ore_block"))
SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_ORES), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 1f, 100).unlockedBy(MItemTags.TRITANIUM_ORES).save(consumer, modLocation("blasting/tritanium_ingot_from_ore_block")) SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_ORES), MItems.TRITANIUM_INGOT, 1f, 100).unlockedBy(MItemTags.TRITANIUM_ORES).save(consumer, modLocation("blasting/tritanium_ingot_from_ore_block"))
SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_ORE_CLUMPS), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 1f, 200).unlockedBy(MItemTags.TRITANIUM_ORE_CLUMPS).save(consumer, modLocation("smelting/tritanium_ingot_from_raw_ore")) SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_ORE_CLUMPS), MItems.TRITANIUM_INGOT, 1f, 200).unlockedBy(MItemTags.TRITANIUM_ORE_CLUMPS).save(consumer, modLocation("smelting/tritanium_ingot_from_raw_ore"))
SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_ORE_CLUMPS), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 1f, 100).unlockedBy(MItemTags.TRITANIUM_ORE_CLUMPS).save(consumer, modLocation("blasting/tritanium_ingot_from_raw_ore")) SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_ORE_CLUMPS), MItems.TRITANIUM_INGOT, 1f, 100).unlockedBy(MItemTags.TRITANIUM_ORE_CLUMPS).save(consumer, modLocation("blasting/tritanium_ingot_from_raw_ore"))
SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_DUSTS), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 0f, 200).unlockedBy(MItemTags.TRITANIUM_DUSTS).save(consumer, modLocation("smelting/tritanium_ingot_from_dust")) SimpleCookingRecipeBuilder.smelting(Ingredient.of(MItemTags.TRITANIUM_DUSTS), MItems.TRITANIUM_INGOT, 0f, 200).unlockedBy(MItemTags.TRITANIUM_DUSTS).save(consumer, modLocation("smelting/tritanium_ingot_from_dust"))
SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_DUSTS), RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 0f, 100).unlockedBy(MItemTags.TRITANIUM_DUSTS).save(consumer, modLocation("blasting/tritanium_ingot_from_dust")) SimpleCookingRecipeBuilder.blasting(Ingredient.of(MItemTags.TRITANIUM_DUSTS), MItems.TRITANIUM_INGOT, 0f, 100).unlockedBy(MItemTags.TRITANIUM_DUSTS).save(consumer, modLocation("blasting/tritanium_ingot_from_dust"))
} }
fun addMicrowaveRecipes(provider: MatteryRecipeProvider) { fun addMicrowaveRecipes(provider: MatteryRecipeProvider) {
provider.microwave("pattern_drive_normal_erase", Ingredient.of(MItems.PATTERN_DRIVE_NORMAL), Ingredient.of(MItems.PATTERN_DRIVE_NORMAL), workTicks = 30 * 20, experience = ConstantFloat.of(0f))
for (drive in listOf(MItems.PATTERN_DRIVE_NORMAL, MItems.PATTERN_DRIVE_DOUBLE, MItems.PATTERN_DRIVE_TRIPLE, MItems.PATTERN_DRIVE_QUAD)) {
provider.microwave("${drive.registryName!!.path}_erase", Ingredient.of(drive), Ingredient.of(drive), workTicks = 30 * 20, experience = ConstantFloat.of(0f))
}
} }

View File

@ -1,110 +1,65 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.core.component.DataComponents
import net.minecraft.data.recipes.RecipeCategory
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.data.recipes.ShapelessRecipeBuilder import net.minecraft.data.recipes.ShapelessRecipeBuilder
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import net.neoforged.neoforge.common.conditions.NotCondition
import net.neoforged.neoforge.common.conditions.TagEmptyCondition
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
import ru.dbotthepony.mc.otm.config.CablesConfig import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.util.ResourceLocation
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
fun addCraftingTableRecipes(consumer: RecipeOutput) { fun addCraftingTableRecipes(consumer: RecipeOutput) {
val machinesCategory = RecipeCategory.DECORATIONS MatteryRecipe(MRegistry.CARGO_CRATES.item)
MatteryRecipe(MRegistry.CARGO_CRATES.item, category = RecipeCategory.DECORATIONS)
.row(MItemTags.TRITANIUM_PLATES, multiIngredient(Tags.Items.CHESTS_WOODEN, Tags.Items.BARRELS_WOODEN), MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, multiIngredient(Tags.Items.CHESTS_WOODEN, Tags.Items.BARRELS_WOODEN), MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItemTags.TRITANIUM_PLATES) .unlockedBy(MItemTags.TRITANIUM_PLATES)
.unlockedBy(Tags.Items.CHESTS) .unlockedBy(Tags.Items.CHESTS)
.build(consumer) .build(consumer)
for ((dye, crate) in MRegistry.CARGO_CRATES.blocks) { for ((dye, crate) in MRegistry.CARGO_CRATES.blocks) {
ShapelessRecipeBuilder(RecipeCategory.DECORATIONS, crate, 1) ShapelessRecipeBuilder(crate, 1)
.requires(Ingredient.of(MRegistry.CARGO_CRATES.allItems.entries.stream().filter { it.key != dye }.map { ItemStack(it.value) })) .requires(Ingredient.of(MRegistry.CARGO_CRATES.allItems.entries.stream().filter { it.key != dye }.map { ItemStack(it.value) }))
.requires(dye.tag) .requires(dye.tag)
.unlockedBy(MRegistry.CARGO_CRATES.allItems.entries.stream().filter { it.key != dye }.map { it.value }) .unlockedBy(MRegistry.CARGO_CRATES.allItems.entries.stream().filter { it.key != dye }.map { it.value })
.save(consumer, "${crate.registryName}_alt") .save(consumer, "${crate.registryName}_alt")
} }
ShapelessRecipeBuilder(MItems.TRITANIUM_INGOT_BLOCK, 1)
.requires(Ingredient.of(MItemTags.TRITANIUM_INGOTS), 9)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.save(consumer)
ShapelessRecipeBuilder(MItems.TRITANIUM_INGOT, 9)
.requires(Ingredient.of(MItemTags.TRITANIUM_INGOTS_STORAGE))
.unlockedBy(MItemTags.TRITANIUM_INGOTS_STORAGE)
.save(consumer, modLocation("tritanium_ingot_from_storage"))
MItems.ENERGY_COUNTER.values.forEach { MItems.ENERGY_COUNTER.values.forEach {
ShapelessRecipeBuilder(machinesCategory, it, 1) ShapelessRecipeBuilder(it, 1)
.requires(it) .requires(it)
.unlockedBy(it) .unlockedBy(it)
.save(consumer, modLocation("${it.registryName!!.path}_reset")) .save(consumer, modLocation("${it.registryName!!.path}_reset"))
} }
ShapelessRecipeBuilder(machinesCategory, MItems.HOLO_SIGN, 1) ShapelessRecipeBuilder(MItems.HOLO_SIGN, 1)
.requires(MItems.HOLO_SIGN) .requires(MItems.HOLO_SIGN)
.unlockedBy(MItems.HOLO_SIGN) .unlockedBy(MItems.HOLO_SIGN)
.save(consumer, modLocation("holo_sign_reset")) .save(consumer, modLocation("holo_sign_reset"))
MatteryRecipe(MBlocks.DRIVE_VIEWER[null]!!, category = machinesCategory) MatteryRecipe(MBlocks.ENERGY_COUNTER[null]!!)
.rowBC(MItems.DISPLAY_SCREEN, Tags.Items.GLASS_PANES)
.row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES)
.row(MItemTags.BASIC_CIRCUIT, MItems.MATTER_IO_PORT, MItemTags.BASIC_CIRCUIT)
.unlockedBy(MItems.MATTER_IO_PORT)
.build(consumer)
MatteryRecipe(MBlocks.MATTER_BOTTLER[null]!!, category = machinesCategory)
.row(MItems.MATTER_CAPACITOR_PARTS, MItems.MATTER_IO_PORT, MItems.MATTER_CAPACITOR_PARTS)
.row(Tags.Items.GLASS_BLOCKS, MItems.MACHINE_FRAME, Tags.Items.GLASS_BLOCKS)
.rowAC(MItems.MATTER_CABLE, MItems.MATTER_CABLE)
.unlockedBy(MItems.MATTER_CAPACITOR_PARTS)
.unlockedBy(MItems.MATTER_IO_PORT)
.build(consumer)
MatteryRecipe(MBlocks.MATTER_DECOMPOSER[null]!!, category = machinesCategory)
.row(MItems.MATTER_TRANSFORM_MATRIX, MItemTags.BASIC_CIRCUIT, MItems.MATTER_IO_PORT)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.row(MItems.MATTER_CABLE, MItems.MATTER_CAPACITOR_PARTS, MItems.MATTER_CABLE)
.unlockedBy(MItems.MATTER_CAPACITOR_PARTS)
.unlockedBy(MItems.MATTER_IO_PORT)
.build(consumer)
MatteryRecipe(MBlocks.MATTER_PANEL[null]!!, category = machinesCategory)
.row(MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES, Tags.Items.GLASS_PANES)
.row(MItems.MATTER_CABLE, MItems.DISPLAY_SCREEN, Tags.Items.GLASS_PANES)
.row(MItemTags.ADVANCED_CIRCUIT, MItemTags.TRITANIUM_PLATES, Tags.Items.GLASS_PANES)
.unlockedBy(Tags.Items.GLASS_BLOCKS)
.build(consumer)
MatteryRecipe(MBlocks.MATTER_REPLICATOR[null]!!, category = machinesCategory)
.row(MItems.MATTER_IO_PORT, MItemTags.ADVANCED_CIRCUIT, MItems.MATTER_TRANSFORM_MATRIX)
.row(Tags.Items.GEMS_DIAMOND, MItems.MACHINE_FRAME, Tags.Items.GEMS_DIAMOND)
.row(MItems.MATTER_CABLE, MItems.MATTER_CAPACITOR_PARTS, MItems.MATTER_CABLE)
.unlockedBy(MItems.MATTER_CAPACITOR_PARTS)
.unlockedBy(MItems.MATTER_IO_PORT)
.unlockedBy(MItems.MATTER_TRANSFORM_MATRIX)
.build(consumer)
MatteryRecipe(MBlocks.PATTERN_STORAGE, category = machinesCategory)
.row(Tags.Items.GLASS_BLOCKS, Tags.Items.GLASS_BLOCKS, Tags.Items.GLASS_BLOCKS)
.row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES)
.row(MItems.MATTER_CABLE, MItemTags.BASIC_CIRCUIT, MItems.MATTER_CABLE)
.unlockedBy(MItemTags.IRON_PLATES)
.build(consumer)
MatteryRecipe(MBlocks.ENERGY_COUNTER[null]!!, category = machinesCategory)
.row(MItemTags.TRITANIUM_PLATES, MItems.ENERGY_BUS, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ENERGY_BUS, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.BASIC_CIRCUIT, MItems.DISPLAY_SCREEN, MItemTags.HARDENED_GLASS_PANES) .row(MItemTags.BASIC_CIRCUIT, Tags.Items.DUSTS_GLOWSTONE, MItemTags.HARDENED_GLASS_PANES_COLORLESS)
.row(MItemTags.TRITANIUM_PLATES, MItems.ENERGY_BUS, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ENERGY_BUS, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.ENERGY_BUS) .unlockedBy(MItems.ENERGY_BUS)
.build(consumer) .build(consumer)
MatteryRecipe(MBlocks.TWIN_PLATE_PRESS[null]!!, category = machinesCategory) MatteryRecipe(MBlocks.TWIN_PLATE_PRESS[null]!!)
.rowAC(MItems.ELECTROMOTOR, MItems.ELECTROMOTOR) .rowAC(MItems.ELECTROMOTOR, MItems.ELECTROMOTOR)
.row(MItemTags.PISTONS, MItems.MACHINE_FRAME, MItemTags.PISTONS) .row(MItemTags.PISTONS, MItems.MACHINE_FRAME, MItemTags.PISTONS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
@ -112,14 +67,14 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.build(consumer) .build(consumer)
for ((color, item) in MItems.PLATE_PRESS) { for ((color, item) in MItems.PLATE_PRESS) {
MatteryRecipe(MBlocks.TWIN_PLATE_PRESS[color]!!, category = machinesCategory) MatteryRecipe(MBlocks.TWIN_PLATE_PRESS[color]!!)
.setUpgradeSource(item) .setUpgradeSource(item)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents) .addUpgradeOps(UpgradeRecipe.All)
.rowA(item) .rowA(item)
.build(consumer, "plate_press_migration/${color?.name?.lowercase() ?: "default"}") .build(consumer, "plate_press_migration/${color?.name?.lowercase() ?: "default"}")
} }
MatteryRecipe(MBlocks.CHEMICAL_GENERATOR[null]!!, category = machinesCategory) MatteryRecipe(MBlocks.CHEMICAL_GENERATOR[null]!!)
.rowB(MItems.ENERGY_BUS) .rowB(MItems.ENERGY_BUS)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.FURNACES, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.FURNACES, MItemTags.TRITANIUM_INGOTS)
.rowAC(MItems.ELECTRIC_PARTS, MItems.ELECTRIC_PARTS) .rowAC(MItems.ELECTRIC_PARTS, MItems.ELECTRIC_PARTS)
@ -127,50 +82,15 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.unlockedBy(MItems.ENERGY_BUS) .unlockedBy(MItems.ENERGY_BUS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.PATTERN_DRIVE_NORMAL, category = machinesCategory) MatteryRecipe(MItems.PATTERN_DRIVE_NORMAL)
.row(Tags.Items.DUSTS_GLOWSTONE, MItemTags.CARBON_PLATES, Tags.Items.DUSTS_GLOWSTONE) .rowAC(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.DILITHIUM_GEMS, MItemTags.ADVANCED_CIRCUIT, MItemTags.DILITHIUM_GEMS) .row(MItemTags.ADVANCED_CIRCUIT, MItemTags.TRITANIUM_PLATES, MItemTags.ADVANCED_CIRCUIT)
.row(Tags.Items.DUSTS_GLOWSTONE, Tags.Items.GEMS_DIAMOND, Tags.Items.DUSTS_GLOWSTONE) .rowAC(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT)
.unlockedBy(MItemTags.DILITHIUM_GEMS) .unlockedBy(MItemTags.ADVANCED_CIRCUIT)
.build(consumer)
MatteryRecipe(MItems.PATTERN_DRIVE_DOUBLE, category = machinesCategory)
.setUpgradeSource(MItems.PATTERN_DRIVE_NORMAL)
.addUpgradeOps(UpgradeRecipe.MergePatterns)
.rowB(MItemTags.DILITHIUM_GEMS)
.row(MItems.PATTERN_DRIVE_NORMAL, MItemTags.ADVANCED_CIRCUIT, MItems.PATTERN_DRIVE_NORMAL)
.rowB(MItemTags.DILITHIUM_GEMS)
.unlockedBy(MItems.PATTERN_DRIVE_NORMAL)
.build(consumer)
MatteryRecipe(MItems.PATTERN_DRIVE_TRIPLE, category = machinesCategory)
.setUpgradeSource(MItems.PATTERN_DRIVE_DOUBLE)
.addUpgradeOps(UpgradeRecipe.MergePatterns)
.row(Tags.Items.DUSTS_GLOWSTONE, MItemTags.DILITHIUM_GEMS, Tags.Items.DUSTS_GLOWSTONE)
.row(MItems.PATTERN_DRIVE_DOUBLE, MItemTags.ADVANCED_CIRCUIT, MItems.PATTERN_DRIVE_DOUBLE)
.row(Tags.Items.DUSTS_GLOWSTONE, MItemTags.DILITHIUM_GEMS, Tags.Items.DUSTS_GLOWSTONE)
.unlockedBy(MItems.PATTERN_DRIVE_DOUBLE)
.build(consumer)
MatteryRecipe(MItems.PATTERN_DRIVE_QUAD, category = machinesCategory)
.setUpgradeSource(MItems.PATTERN_DRIVE_TRIPLE)
.addUpgradeOps(UpgradeRecipe.MergePatterns)
.row(MItemTags.DILITHIUM_GEMS, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.DILITHIUM_GEMS)
.row(MItems.PATTERN_DRIVE_TRIPLE, MItemTags.ADVANCED_CIRCUIT, MItems.PATTERN_DRIVE_TRIPLE)
.row(MItemTags.DILITHIUM_GEMS, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.DILITHIUM_GEMS)
.unlockedBy(MItems.PATTERN_DRIVE_TRIPLE)
.build(consumer)
MatteryRecipe(MItems.MATTER_CABLE, count = 16, category = machinesCategory)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES)
.row(Items.REDSTONE, MItemTags.COPPER_WIRES, Items.REDSTONE)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItemTags.COPPER_WIRES)
.build(consumer) .build(consumer)
// Машины // Машины
MatteryRecipe(MItems.MATTER_RECYCLER[null]!!, category = machinesCategory) MatteryRecipe(MItems.MATTER_RECYCLER[null]!!)
.row(MItems.MATTER_CAPACITOR_PARTS, Items.HOPPER, MItemTags.BASIC_CIRCUIT) .row(MItems.MATTER_CAPACITOR_PARTS, Items.HOPPER, MItemTags.BASIC_CIRCUIT)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE) .row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE)
@ -178,21 +98,21 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.build(consumer) .build(consumer)
// Блоки // Блоки
MatteryRecipe(MItems.MATTER_CAPACITOR_BANK[null]!!, category = machinesCategory) MatteryRecipe(MItems.MATTER_CAPACITOR_BANK[null]!!)
.row(Tags.Items.GLASS_BLOCKS, MItemTags.IRON_PLATES, Tags.Items.GLASS_BLOCKS) .row(Tags.Items.GLASS, MItemTags.IRON_PLATES, Tags.Items.GLASS)
.row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES)
.row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE) .row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE)
.unlockedBy(MItems.MATTER_CABLE) .unlockedBy(MItems.MATTER_CABLE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.BATTERY_BANK[null]!!, category = machinesCategory) MatteryRecipe(MItems.BATTERY_BANK[null]!!)
.row(Tags.Items.GLASS_BLOCKS, MItemTags.IRON_PLATES, Tags.Items.GLASS_BLOCKS) .row(Tags.Items.GLASS, MItemTags.IRON_PLATES, Tags.Items.GLASS)
.row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES)
.row(MItems.ELECTRIC_PARTS, MItems.ENERGY_BUS, MItems.ELECTRIC_PARTS) .row(MItems.ELECTRIC_PARTS, MItems.ENERGY_BUS, MItems.ELECTRIC_PARTS)
.unlockedBy(MItems.ENERGY_BUS) .unlockedBy(MItems.ENERGY_BUS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.GRAVITATION_STABILIZER, category = machinesCategory) MatteryRecipe(MItems.GRAVITATION_STABILIZER)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.GRAVITATION_FIELD_SENSOR, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.ADVANCED_CIRCUIT, MItems.GRAVITATION_FIELD_SENSOR, MItemTags.ADVANCED_CIRCUIT)
.row(MItems.MATTER_TRANSFORM_MATRIX, MItems.MACHINE_FRAME, MItems.MATTER_TRANSFORM_MATRIX) .row(MItems.MATTER_TRANSFORM_MATRIX, MItems.MACHINE_FRAME, MItems.MATTER_TRANSFORM_MATRIX)
.row(MItemTags.TRITANIUM_PLATES, MItems.GRAVITATION_FIELD_LIMITER, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.GRAVITATION_FIELD_LIMITER, MItemTags.TRITANIUM_PLATES)
@ -200,7 +120,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.unlockedBy(MItems.GRAVITATION_FIELD_SENSOR) .unlockedBy(MItems.GRAVITATION_FIELD_SENSOR)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.PORTABLE_GRAVITATION_STABILIZER, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.PORTABLE_GRAVITATION_STABILIZER)
.rowB(MItemTags.TRITANIUM_PLATES) .rowB(MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.GRAVITATION_FIELD_SENSOR, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.GRAVITATION_FIELD_SENSOR, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.GRAVITATION_FIELD_LIMITER, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.GRAVITATION_FIELD_LIMITER, MItemTags.TRITANIUM_PLATES)
@ -208,230 +128,242 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.unlockedBy(MItems.GRAVITATION_FIELD_SENSOR) .unlockedBy(MItems.GRAVITATION_FIELD_SENSOR)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.GRAVITATION_FIELD_SENSOR, category = RecipeCategory.MISC) MatteryRecipe(MItems.GRAVITATION_FIELD_SENSOR)
.rowB(MItemTags.BASIC_CIRCUIT) .rowB(MItemTags.BASIC_CIRCUIT)
.row(MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES)
.rowB(MItemTags.IRON_PLATES) .rowB(MItemTags.IRON_PLATES)
.unlockedBy(MItems.ELECTROMAGNET) .unlockedBy(MItems.ELECTROMAGNET)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.GRAVITATION_FIELD_LIMITER, category = RecipeCategory.MISC) MatteryRecipe(MItems.GRAVITATION_FIELD_LIMITER)
.row(Tags.Items.ENDER_PEARLS, MItemTags.ADVANCED_CIRCUIT, Tags.Items.ENDER_PEARLS) .row(Tags.Items.ENDER_PEARLS, MItemTags.ADVANCED_CIRCUIT, Tags.Items.ENDER_PEARLS)
.row(MItemTags.GOLD_WIRES, MItems.QUANTUM_TRANSCEIVER, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, MItems.QUANTUM_TRANSCEIVER, MItemTags.GOLD_WIRES)
.rowB(MItemTags.TRITANIUM_PLATES) .rowB(MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.QUANTUM_TRANSCEIVER) .unlockedBy(MItems.QUANTUM_TRANSCEIVER)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.BLACK_HOLE_SCANNER, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.BLACK_HOLE_SCANNER)
.row(MItemTags.IRON_PLATES, MItems.DISPLAY_SCREEN, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, Tags.Items.GLASS_PANES_COLORLESS, MItemTags.IRON_PLATES)
.row(MItemTags.GOLD_WIRES, MItems.GRAVITATION_FIELD_SENSOR, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.GOLD_WIRES, MItems.GRAVITATION_FIELD_SENSOR, MItemTags.ADVANCED_CIRCUIT)
.rowAC(Tags.Items.DUSTS_GLOWSTONE, MItemTags.TRITANIUM_PLATES) .rowAC(Tags.Items.DUSTS_GLOWSTONE, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.GRAVITATION_FIELD_SENSOR) .unlockedBy(MItems.GRAVITATION_FIELD_SENSOR)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.PHANTOM_ATTRACTOR, category = machinesCategory) MatteryRecipe(MItems.PHANTOM_ATTRACTOR)
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.GLASS_BLOCKS_COLORLESS, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, Tags.Items.GLASS_COLORLESS, Tags.Items.DUSTS_REDSTONE)
.row(MItemTags.TRITANIUM_PLATES, MItems.QUANTUM_TRANSCEIVER, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.QUANTUM_TRANSCEIVER, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, ItemTags.BEDS, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, ItemTags.BEDS, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.QUANTUM_TRANSCEIVER) .unlockedBy(MItems.QUANTUM_TRANSCEIVER)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.QUANTUM_TRANSCEIVER, 2, category = RecipeCategory.MISC) MatteryRecipe(MItems.QUANTUM_TRANSCEIVER, 2)
.rowAC(MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES) .rowAC(MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES)
.row(MItemTags.GOLD_WIRES, Tags.Items.ENDER_PEARLS, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, Tags.Items.ENDER_PEARLS, MItemTags.GOLD_WIRES)
.row(MItemTags.GOLD_WIRES, MItems.ELECTROMAGNET, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, MItems.ELECTROMAGNET, MItemTags.GOLD_WIRES)
.unlockedBy(Tags.Items.ENDER_PEARLS) .unlockedBy(Tags.Items.ENDER_PEARLS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.ELECTROMAGNET, category = RecipeCategory.MISC) MatteryRecipe(MItems.ELECTROMAGNET)
.row(MItemTags.COPPER_WIRES, Tags.Items.INGOTS_IRON, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, Tags.Items.INGOTS_IRON, MItemTags.COPPER_WIRES)
.unlockedBy(Tags.Items.INGOTS_IRON) .unlockedBy(Tags.Items.INGOTS_IRON)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.ENERGY_SERVO[null]!!, category = RecipeCategory.MISC) MatteryRecipe(MItems.ELECTROMOTOR)
.rowB(MItems.ELECTROMAGNET)
.row(MItems.ELECTROMAGNET, Tags.Items.INGOTS_IRON, MItems.ELECTROMAGNET)
.row(MItemTags.COPPER_WIRES, Tags.Items.INGOTS_IRON, MItemTags.COPPER_WIRES)
.unlockedBy(MItems.ELECTROMAGNET)
.build(consumer)
MatteryRecipe(MItems.ENERGY_SERVO[null]!!)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.ENERGY_BUS, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ENERGY_BUS, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.ENERGY_BUS) .unlockedBy(MItems.ENERGY_BUS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MIRROR_COMPOUND, 3, category = RecipeCategory.MISC) MatteryRecipe(MItems.MIRROR_COMPOUND, 3)
.row(Tags.Items.GLASS_PANES_COLORLESS, Tags.Items.GLASS_PANES_COLORLESS, Tags.Items.GLASS_PANES_COLORLESS) .row(Tags.Items.GLASS_PANES_COLORLESS, Tags.Items.GLASS_PANES_COLORLESS, Tags.Items.GLASS_PANES_COLORLESS)
.row(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES, MItemTags.IRON_PLATES)
.unlockedBy(MItemTags.IRON_PLATES) .unlockedBy(MItemTags.IRON_PLATES)
.unlockedBy(Tags.Items.GLASS_PANES_COLORLESS) .unlockedBy(Tags.Items.GLASS_PANES_COLORLESS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.REINFORCED_TRITANIUM_PLATE, category = RecipeCategory.MISC) MatteryRecipe(MItems.REINFORCED_TRITANIUM_PLATE)
.rowB(MItemTags.CARBON_PLATES) .rowB(MItemTags.CARBON_PLATES)
.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES) .row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES)
.rowB(MItemTags.CARBON_PLATES) .rowB(MItemTags.CARBON_PLATES)
.unlockedBy(MItemTags.TRITANIUM_PLATES) .unlockedBy(MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.REINFORCED_IRON_PLATE, category = RecipeCategory.MISC) MatteryRecipe(MItems.CARBON_FIBRE_BLOCK)
.rowB(MItemTags.CARBON_PLATES)
.row(MItemTags.CARBON_PLATES, MItemTags.IRON_PLATES, MItemTags.CARBON_PLATES)
.rowB(MItemTags.CARBON_PLATES)
.unlockedBy(MItemTags.IRON_PLATES)
.build(consumer)
MatteryRecipe(MItems.ARMOR_ASSEMBLY, category = RecipeCategory.MISC)
.row(MItemTags.CARBON_PLATES, MItemTags.IRON_PLATES, MItemTags.CARBON_PLATES)
.row(MItemTags.IRON_PLATES, Items.DIAMOND, MItemTags.IRON_PLATES)
.row(MItemTags.CARBON_PLATES, MItemTags.IRON_PLATES, MItemTags.CARBON_PLATES)
.unlockedBy(MItemTags.IRON_PLATES)
.unlockedBy(MItemTags.CARBON_PLATES)
.build(consumer)
MatteryRecipe(MItems.CARBON_FIBRE_BLOCK, category = RecipeCategory.BUILDING_BLOCKS)
.rowAB(MItemTags.CARBON_PLATES, MItemTags.CARBON_PLATES) .rowAB(MItemTags.CARBON_PLATES, MItemTags.CARBON_PLATES)
.rowAB(MItemTags.CARBON_PLATES, MItemTags.CARBON_PLATES) .rowAB(MItemTags.CARBON_PLATES, MItemTags.CARBON_PLATES)
.unlockedBy(MItemTags.CARBON_PLATES) .unlockedBy(MItemTags.CARBON_PLATES)
.build(consumer) .build(consumer)
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.CARBON_MESH, 4) ShapelessRecipeBuilder(MItems.CARBON_MESH, 4)
.requires(Ingredient.of(MItems.CARBON_FIBRE_BLOCK)) .requires(Ingredient.of(MItems.CARBON_FIBRE_BLOCK))
.unlockedBy(MItemTags.CARBON_PLATES) .unlockedBy(MItemTags.CARBON_PLATES)
.unlockedBy(MItems.CARBON_FIBRE_BLOCK) .unlockedBy(MItems.CARBON_FIBRE_BLOCK)
.save(consumer, modLocation("carbon_mesh_from_block")) .save(consumer, modLocation("carbon_mesh_from_block"))
// броня // броня
MatteryRecipe(MItems.TRITANIUM_HELMET, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.TRITANIUM_HELMET)
.setUpgradeSource(Items.LEATHER_HELMET) .setUpgradeSource(Items.LEATHER_HELMET)
.addUpgradeOps(UpgradeRecipe.CopyEnchantments) .addUpgradeOps(
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME)) UpgradeRecipe.Direct("display"),
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItems.ARMOR_ASSEMBLY, MItemTags.REINFORCED_TRITANIUM_PLATES) UpgradeRecipe.Direct("Enchantments"),
)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_HELMET, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_HELMET, MItemTags.REINFORCED_TRITANIUM_PLATES)
.unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES) .unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_PANTS, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.TRITANIUM_PANTS)
.setUpgradeSource(Items.LEATHER_LEGGINGS) .setUpgradeSource(Items.LEATHER_LEGGINGS)
.addUpgradeOps(UpgradeRecipe.CopyEnchantments) .addUpgradeOps(
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME)) UpgradeRecipe.Direct("display"),
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItems.ARMOR_ASSEMBLY, MItemTags.REINFORCED_TRITANIUM_PLATES) UpgradeRecipe.Direct("Enchantments"),
)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_LEGGINGS, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_LEGGINGS, MItemTags.REINFORCED_TRITANIUM_PLATES)
.rowAC(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES) .rowAC(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES) .unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_CHESTPLATE, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.TRITANIUM_CHESTPLATE)
.setUpgradeSource(Items.LEATHER_CHESTPLATE) .setUpgradeSource(Items.LEATHER_CHESTPLATE)
.addUpgradeOps(UpgradeRecipe.CopyEnchantments) .addUpgradeOps(
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME)) UpgradeRecipe.Direct("display"),
UpgradeRecipe.Direct("Enchantments"),
)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_CHESTPLATE, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_CHESTPLATE, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItems.ARMOR_ASSEMBLY, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES) .unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_BOOTS, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.TRITANIUM_BOOTS)
.setUpgradeSource(Items.LEATHER_BOOTS) .setUpgradeSource(Items.LEATHER_BOOTS)
.addUpgradeOps(UpgradeRecipe.CopyEnchantments) .addUpgradeOps(
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME)) UpgradeRecipe.Direct("display"),
UpgradeRecipe.Direct("Enchantments"),
)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_BOOTS, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_BOOTS, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItems.ARMOR_ASSEMBLY, MItemTags.REINFORCED_TRITANIUM_PLATES) .rowAC(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES) .unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// простая броня // простая броня
MatteryRecipe(MItems.SIMPLE_TRITANIUM_HELMET, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.SIMPLE_TRITANIUM_HELMET)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.SIMPLE_TRITANIUM_PANTS, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.SIMPLE_TRITANIUM_PANTS)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.SIMPLE_TRITANIUM_CHESTPLATE, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.SIMPLE_TRITANIUM_CHESTPLATE)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.SIMPLE_TRITANIUM_BOOTS, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.SIMPLE_TRITANIUM_BOOTS)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
// станция андроида // станция андроида
MatteryRecipe(MItems.ANDROID_STATION[null]!!, category = machinesCategory) MatteryRecipe(MItems.ANDROID_STATION[null]!!)
.row(MItems.ELECTRIC_PARTS, MItems.QUANTUM_TRANSCEIVER, MItems.ELECTRIC_PARTS) .row(MItems.ELECTRIC_PARTS, MItems.QUANTUM_TRANSCEIVER, MItems.ELECTRIC_PARTS)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// беспроводной зарядник андроидов // беспроводной зарядник андроидов
MatteryRecipe(MItems.ANDROID_CHARGER[null]!!, category = machinesCategory) MatteryRecipe(MItems.ANDROID_CHARGER[null]!!)
.row(MItems.ELECTRIC_PARTS, MItems.QUANTUM_TRANSCEIVER, MItems.ELECTRIC_PARTS) .row(MItems.ELECTRIC_PARTS, MItems.QUANTUM_TRANSCEIVER, MItems.ELECTRIC_PARTS)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// апгрейд на сетку крафта // апгрейд на сетку крафта
MatteryRecipe(MItems.ExopackUpgrades.CRAFTING_UPGRADE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.ExopackUpgrades.CRAFTING_UPGRADE)
.row(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.CRAFTING_TABLES, MItems.QUANTUM_TRANSCEIVER, MItemTags.CRAFTING_TABLES) .row(MItemTags.CRAFTING_TABLES, MItems.QUANTUM_TRANSCEIVER, MItemTags.CRAFTING_TABLES)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// апгрейд на переплавку // апгрейд на переплавку
MatteryRecipe(MItems.ExopackUpgrades.SMELTING_UPGRADE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.ExopackUpgrades.SMELTING_UPGRADE)
.row(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT)
.row(Items.FURNACE, MItems.QUANTUM_TRANSCEIVER, Items.FURNACE) .row(Items.FURNACE, MItems.QUANTUM_TRANSCEIVER, Items.FURNACE)
.row(MItemTags.TRITANIUM_PLATES, Items.FURNACE, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, Items.FURNACE, MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// апгрейд на эндер сундук // апгрейд на эндер сундук
MatteryRecipe(MItems.ExopackUpgrades.ENDER_UPGRADE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.ExopackUpgrades.ENDER_UPGRADE)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.ELECTROMAGNET, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.ADVANCED_CIRCUIT, MItems.ELECTROMAGNET, MItemTags.ADVANCED_CIRCUIT)
.row(MItems.ELECTROMAGNET, Items.ENDER_CHEST, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, Items.ENDER_CHEST, MItems.ELECTROMAGNET)
.row(MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// генератор коблы // генератор коблы
MatteryRecipe(MItems.COBBLESTONE_GENERATOR[null]!!, category = machinesCategory) MatteryRecipe(MItems.COBBLESTONE_GENERATOR[null]!!)
.row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.TRITANIUM_PICKAXE, MItemTags.HARDENED_GLASS_COLORLESS) .row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.TRITANIUM_PICKAXE, MItemTags.HARDENED_GLASS_COLORLESS)
.row(Items.LAVA_BUCKET, Items.HOPPER, Items.WATER_BUCKET) .row(Items.LAVA_BUCKET, Items.HOPPER, Items.WATER_BUCKET)
.rowB(Tags.Items.CHESTS) .rowB(Tags.Items.CHESTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_SHEARS, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.TRITANIUM_SHEARS)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.rowA(MItemTags.TRITANIUM_INGOTS) .rowA(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_SHIELD, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.TRITANIUM_SHIELD)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.SHIELD, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.SHIELD, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES) .row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
.rowB(MItemTags.REINFORCED_TRITANIUM_PLATES) .rowB(MItemTags.REINFORCED_TRITANIUM_PLATES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.ESSENCE_STORAGE[null]!!, category = machinesCategory) ShapelessRecipeBuilder(MItems.TRITANIUM_NUGGET, 9)
.requires(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_NUGGETS)
.save(consumer)
ShapelessRecipeBuilder(MItems.TRITANIUM_INGOT, 1)
.requires(Ingredient.of(MItemTags.TRITANIUM_NUGGETS), 9)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_NUGGETS)
.save(consumer, modLocation("ingot_from_nuggets"))
MatteryRecipe(MItems.ESSENCE_STORAGE[null]!!)
.row(MItems.MATTER_CAPACITOR_PARTS, Items.ENDER_EYE, MItemTags.ADVANCED_CIRCUIT) .row(MItems.MATTER_CAPACITOR_PARTS, Items.ENDER_EYE, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.GOLD_WIRES, MItemTags.HARDENED_GLASS, MItemTags.HARDENED_GLASS) .row(MItemTags.GOLD_WIRES, MItemTags.HARDENED_GLASS, MItemTags.HARDENED_GLASS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.ESSENCE_SERVO, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.ESSENCE_SERVO)
.row(MItemTags.TRITANIUM_PLATES, MItems.QUANTUM_TRANSCEIVER, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.QUANTUM_TRANSCEIVER, MItemTags.TRITANIUM_PLATES)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.build(consumer) .build(consumer)
for ((dye, item) in MItems.MATTER_REPLICATOR) { for ((dye, item) in MItems.MATTER_REPLICATOR) {
MatteryRecipe(MItems.MATTER_RECONSTRUCTOR[dye]!!, category = machinesCategory) MatteryRecipe(MItems.MATTER_RECONSTRUCTOR[dye]!!)
.setUpgradeSource(item) .setUpgradeSource(item)
.addUpgradeOps( .addUpgradeOps(
UpgradeRecipe.CopyTileComponent(MatteryBlockEntity.ENERGY_KEY, "energy"), UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.ENERGY_KEY}", "BlockEntityTag.energy"),
UpgradeRecipe.CopyTileComponent(MatteryBlockEntity.MATTER_STORAGE_KEY, "matter"), UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.MATTER_STORAGE_KEY}", "BlockEntityTag.matter"),
) )
.row(MItemTags.ADVANCED_CIRCUIT, Tags.Items.GEMS_EMERALD, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.ADVANCED_CIRCUIT, Tags.Items.GEMS_EMERALD, MItemTags.ADVANCED_CIRCUIT)
.row(MItems.ELECTRIC_PARTS, item, MItems.ELECTRIC_PARTS) .row(MItems.ELECTRIC_PARTS, item, MItems.ELECTRIC_PARTS)
@ -439,13 +371,13 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.build(consumer) .build(consumer)
} }
MatteryRecipe(MItems.MATTER_SCANNER[null]!!, category = machinesCategory) MatteryRecipe(MItems.MATTER_SCANNER[null]!!)
.row(MItems.MIRROR, MItems.MATTER_TRANSFORM_MATRIX, MItems.MIRROR) .row(MItems.MIRROR, MItems.MATTER_TRANSFORM_MATRIX, MItems.MIRROR)
.row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.MACHINE_FRAME, MItemTags.HARDENED_GLASS_COLORLESS) .row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.MACHINE_FRAME, MItemTags.HARDENED_GLASS_COLORLESS)
.row(MItems.MATTER_CABLE, MItemTags.ADVANCED_CIRCUIT, MItems.MATTER_CABLE) .row(MItems.MATTER_CABLE, MItemTags.ADVANCED_CIRCUIT, MItems.MATTER_CABLE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.FLUID_CAPSULE, category = RecipeCategory.TOOLS, count = 8) MatteryRecipe(MItems.FLUID_CAPSULE, count = 8)
.row(MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS) .row(MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS)
.rowB(MItemTags.HARDENED_GLASS_PANES) .rowB(MItemTags.HARDENED_GLASS_PANES)
.row(MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS) .row(MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS)
@ -453,7 +385,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.unlockedBy(MItemTags.TRITANIUM_NUGGETS) .unlockedBy(MItemTags.TRITANIUM_NUGGETS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.FLUID_TANK, category = RecipeCategory.DECORATIONS) MatteryRecipe(MItems.FLUID_TANK)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.HARDENED_GLASS_PANES, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.HARDENED_GLASS_PANES, MItemTags.TRITANIUM_INGOTS)
.rowAC(MItemTags.HARDENED_GLASS_PANES, MItemTags.HARDENED_GLASS_PANES) .rowAC(MItemTags.HARDENED_GLASS_PANES, MItemTags.HARDENED_GLASS_PANES)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.HARDENED_GLASS_PANES, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.HARDENED_GLASS_PANES, MItemTags.TRITANIUM_INGOTS)
@ -461,136 +393,42 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.EXPLOSIVE_HAMMER, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.EXPLOSIVE_HAMMER)
.rowB(Tags.Items.INGOTS_IRON) .rowB(Tags.Items.INGOTS_IRON)
.rowAB(Tags.Items.INGOTS_IRON, Tags.Items.RODS_WOODEN) .rowAB(Tags.Items.INGOTS_IRON, Tags.Items.RODS_WOODEN)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(Items.FLINT_AND_STEEL) .unlockedBy(Items.FLINT_AND_STEEL)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.POWERED_FURNACE[null]!!, category = machinesCategory) MatteryRecipe(MItems.POWERED_FURNACE[null]!!)
.row(Items.FURNACE, MItems.MACHINE_FRAME, Items.FURNACE) .row(Items.FURNACE, MItems.MACHINE_FRAME, Items.FURNACE)
.unlockedBy(MItems.MACHINE_FRAME) .unlockedBy(MItems.MACHINE_FRAME)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.POWERED_SMOKER[null]!!, category = machinesCategory) MatteryRecipe(MItems.POWERED_SMOKER[null]!!)
.rowAC(Items.FURNACE, Items.FURNACE) .rowAC(Items.FURNACE, Items.FURNACE)
.row(MItems.ELECTROMAGNET, MItems.MACHINE_FRAME, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, MItems.MACHINE_FRAME, MItems.ELECTROMAGNET)
.unlockedBy(MItems.MACHINE_FRAME) .unlockedBy(MItems.MACHINE_FRAME)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.POWERED_BLAST_FURNACE[null]!!, category = machinesCategory) MatteryRecipe(MItems.POWERED_BLAST_FURNACE[null]!!)
.row(MItems.ELECTROMAGNET, Items.FURNACE, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, Items.FURNACE, MItems.ELECTROMAGNET)
.row(MItems.ELECTROMAGNET, MItems.MACHINE_FRAME, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, MItems.MACHINE_FRAME, MItems.ELECTROMAGNET)
.row(MItems.ELECTROMAGNET, Items.FURNACE, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, Items.FURNACE, MItems.ELECTROMAGNET)
.unlockedBy(MItems.MACHINE_FRAME) .unlockedBy(MItems.MACHINE_FRAME)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.INFINITE_WATER_SOURCE, category = machinesCategory) MatteryRecipe(MItems.INFINITE_WATER_SOURCE)
.row(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES, MItemTags.IRON_PLATES)
.rowAC(Items.WATER_BUCKET, Items.WATER_BUCKET) .rowAC(Items.WATER_BUCKET, Items.WATER_BUCKET)
.row(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES, MItemTags.IRON_PLATES)
.unlockedBy(Items.WATER_BUCKET) .unlockedBy(Items.WATER_BUCKET)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.PAINTER, category = machinesCategory) MatteryRecipe(MItems.PAINTER)
.row(Items.BRUSH, Items.BUCKET, Items.BUCKET) .row(Tags.Items.RODS_WOODEN, Items.BUCKET, Items.BUCKET)
.row(MItemTags.IRON_PLATES, Items.BUCKET, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, Items.BUCKET, MItemTags.IRON_PLATES)
.row(MItemTags.IRON_PLATES, MItemTags.CRAFTING_TABLES, MItemTags.IRON_PLATES) .row(MItemTags.IRON_PLATES, MItemTags.CRAFTING_TABLES, MItemTags.IRON_PLATES)
.unlockedBy(Tags.Items.DYES) .unlockedBy(Tags.Items.DYES)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MATTER_ENTANGLER, category = machinesCategory)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.MATTER_TRANSFORM_MATRIX, MItemTags.ADVANCED_CIRCUIT)
.row(MItems.MATTER_CAPACITOR_PARTS, MItems.MACHINE_FRAME, MItems.MATTER_IO_PORT)
.row(MItemTags.DILITHIUM_GEMS, MItems.ANTIMATTER_TRANSFORM_MATRIX, MItemTags.DILITHIUM_GEMS)
.unlockedBy(MItems.ANTIMATTER_TRANSFORM_MATRIX)
.build(consumer)
MatteryRecipe(MItems.CHEST_UPGRADER, category = RecipeCategory.TOOLS)
.rowAC(Items.REDSTONE, Items.REDSTONE)
.row(MItemTags.TRITANIUM_PLATES, Items.ENDER_PEARL, MItemTags.TRITANIUM_PLATES)
.rowB(ItemTags.STONE_BUTTONS)
.unlockedBy(Tags.Items.CHESTS_WOODEN)
.unlockedBy(Tags.Items.BARRELS_WOODEN)
.unlockedBy(MItemTags.CARGO_CRATES)
.build(consumer)
MatteryRecipe(MItems.ENERGY_CABLES[CablesConfig.E.CRUDE]!!, category = machinesCategory, count = 8)
.row(Tags.Items.INGOTS_IRON, Items.REDSTONE, Tags.Items.INGOTS_IRON)
.unlockedBy(Items.REDSTONE)
.build(consumer)
MatteryRecipe(MItems.ENERGY_CABLES[CablesConfig.E.REGULAR]!!, category = machinesCategory, count = 16)
.row(MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES)
.row(MItemTags.IRON_PLATES, Items.REDSTONE, MItemTags.IRON_PLATES)
.row(MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES, MItemTags.COPPER_WIRES)
.build(consumer)
MatteryRecipe(MItems.ENERGY_CABLES[CablesConfig.E.ADVANCED]!!, category = machinesCategory, count = 16)
.row(MItemTags.GOLD_WIRES, MItemTags.COPPER_WIRES, MItemTags.GOLD_WIRES)
.row(MItemTags.TRITANIUM_PLATES, Items.REDSTONE, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.GOLD_WIRES, MItemTags.COPPER_WIRES, MItemTags.GOLD_WIRES)
.build(consumer)
MatteryRecipe(MItems.ENERGY_CABLES[CablesConfig.E.SUPERCONDUCTOR]!!, category = machinesCategory)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItems.ELECTROMAGNET, MItemTags.REINFORCED_TRITANIUM_PLATES)
.row(Tags.Items.INGOTS_GOLD, Tags.Items.INGOTS_GOLD, Tags.Items.INGOTS_GOLD)
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.BLUE_ICE, MItemTags.REINFORCED_TRITANIUM_PLATES)
.build(consumer)
val ironRod = ItemTags.create(ResourceLocation("c", "rods/iron"))
var condConsumer = consumer.withConditions(NotCondition(TagEmptyCondition(ironRod)))
for ((color, item) in MItems.GRILL) {
MatteryRecipe(item, category = RecipeCategory.DECORATIONS)
.rowB(color?.tag)
.row(Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_IRON)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.build(consumer)
MatteryRecipe(item, category = RecipeCategory.DECORATIONS)
.rowB(color?.tag)
.row(ironRod, ironRod, ironRod)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.build(condConsumer, "grill_alt_a/${color?.name?.lowercase() ?: "default"}")
MatteryRecipe(item, category = RecipeCategory.DECORATIONS)
.rowB(color?.tag)
.row(ironRod, ironRod, ironRod)
.rowB(MItemTags.TRITANIUM_PLATES)
.build(condConsumer, "grill_alt_b/${color?.name?.lowercase() ?: "default"}")
MatteryRecipe(item, category = RecipeCategory.DECORATIONS)
.rowB(color?.tag)
.row(Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_IRON)
.rowB(MItemTags.TRITANIUM_PLATES)
.build(consumer, "grill_alt_c/${color?.name?.lowercase() ?: "default"}")
}
MatteryRecipe(MItems.REDSTONE_INTERACTOR, category = RecipeCategory.TOOLS)
.rowAB(Items.LEVER, Tags.Items.NUGGETS_IRON)
.rowB(Tags.Items.DUSTS_REDSTONE)
.unlockedBy(Tags.Items.DUSTS_REDSTONE)
.build(consumer)
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, ItemStack(MItems.DILITHIUM_CRYSTAL_BLOCK))
.requires(MItems.DILITHIUM_CRYSTAL, 9)
.unlockedBy(MItems.DILITHIUM_CRYSTAL)
.unlockedBy(MItems.DILITHIUM_CRYSTAL_BLOCK)
.save(consumer, modLocation("dilithium_crystal/to_block"))
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ItemStack(MItems.DILITHIUM_CRYSTAL, 9))
.requires(MItems.DILITHIUM_CRYSTAL_BLOCK)
.unlockedBy(MItems.DILITHIUM_CRYSTAL)
.unlockedBy(MItems.DILITHIUM_CRYSTAL_BLOCK)
.save(consumer, modLocation("dilithium_crystal/from_block"))
MatteryRecipe(MItems.CONFIGURATOR, category = RecipeCategory.TOOLS)
.rowA(MItemTags.IRON_PLATES)
.row(Tags.Items.GLASS_PANES, Tags.Items.DUSTS_REDSTONE, MItems.DISPLAY_SCREEN)
.row(MItemTags.IRON_PLATES, MItemTags.BASIC_CIRCUIT, MItems.DILITHIUM_CRYSTAL)
.unlockedBy(MItems.DILITHIUM_CRYSTAL)
.unlockedBy(MItems.DISPLAY_SCREEN)
.build(consumer)
} }

View File

@ -1,22 +1,21 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.* import net.minecraft.data.recipes.*
import net.minecraft.tags.ItemTags
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
private fun stairs(base: ItemLike, result: ItemLike, consumer: RecipeOutput) { private fun stairs(base: ItemLike, result: ItemLike, consumer: RecipeOutput) {
MatteryRecipe(result, 4, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(result, 4)
.rowA(base) .rowA(base)
.rowAB(base, base) .rowAB(base, base)
.row(base, base, base) .row(base, base, base)
@ -25,14 +24,14 @@ private fun stairs(base: ItemLike, result: ItemLike, consumer: RecipeOutput) {
} }
private fun slab(base: ItemLike, result: ItemLike, consumer: RecipeOutput) { private fun slab(base: ItemLike, result: ItemLike, consumer: RecipeOutput) {
MatteryRecipe(result, 6, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(result, 6)
.row(base, base, base) .row(base, base, base)
.unlockedBy(base) .unlockedBy(base)
.build(consumer, modLocation("decorative/slabs/${base.asItem().registryName!!.path}")) .build(consumer, modLocation("decorative/slabs/${base.asItem().registryName!!.path}"))
} }
private fun wall(base: ItemLike, result: ItemLike, consumer: RecipeOutput) { private fun wall(base: ItemLike, result: ItemLike, consumer: RecipeOutput) {
MatteryRecipe(result, 6, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(result, 6)
.row(base, base, base) .row(base, base, base)
.row(base, base, base) .row(base, base, base)
.unlockedBy(base) .unlockedBy(base)
@ -41,7 +40,7 @@ private fun wall(base: ItemLike, result: ItemLike, consumer: RecipeOutput) {
private fun cut(base: ItemLike, result: ItemLike, amount: Int, consumer: RecipeOutput) { private fun cut(base: ItemLike, result: ItemLike, amount: Int, consumer: RecipeOutput) {
SingleItemRecipeBuilder SingleItemRecipeBuilder
.stonecutting(Ingredient.of(base), RecipeCategory.BUILDING_BLOCKS, result, amount) .stonecutting(Ingredient.of(base), result, amount)
.unlockedBy(base) .unlockedBy(base)
.save(consumer, modLocation("stonecutting/${result.asItem().registryName!!.path}_from_${base.asItem().registryName!!.path}")) .save(consumer, modLocation("stonecutting/${result.asItem().registryName!!.path}_from_${base.asItem().registryName!!.path}"))
} }
@ -72,7 +71,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.build(consumer, modLocation("decorative/floor_tiles/unrefined/${color.name.lowercase()}")) .build(consumer, modLocation("decorative/floor_tiles/unrefined/${color.name.lowercase()}"))
if (color != DyeColor.WHITE) if (color != DyeColor.WHITE)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, unrefinedItem, 8) ShapelessRecipeBuilder(unrefinedItem, 8)
.requires(Ingredient.of(MRegistry.UNREFINED_FLOOR_TILES.getItem(DyeColor.WHITE)), 8) .requires(Ingredient.of(MRegistry.UNREFINED_FLOOR_TILES.getItem(DyeColor.WHITE)), 8)
.requires(color.tag) .requires(color.tag)
.unlockedBy(MRegistry.UNREFINED_FLOOR_TILES.getItem(DyeColor.WHITE)) .unlockedBy(MRegistry.UNREFINED_FLOOR_TILES.getItem(DyeColor.WHITE))
@ -82,7 +81,6 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
for ((color, refinedItem) in MRegistry.FLOOR_TILES.items) { for ((color, refinedItem) in MRegistry.FLOOR_TILES.items) {
SimpleCookingRecipeBuilder.smelting( SimpleCookingRecipeBuilder.smelting(
Ingredient.of(MRegistry.UNREFINED_FLOOR_TILES.items[color]!!), Ingredient.of(MRegistry.UNREFINED_FLOOR_TILES.items[color]!!),
RecipeCategory.BUILDING_BLOCKS,
refinedItem, refinedItem,
0.15f, 0.15f,
100 100
@ -90,7 +88,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.save(consumer, modLocation("decorative/floor_tiles/refined/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/floor_tiles/refined/${color.name.lowercase()}"))
if (color != DyeColor.WHITE) if (color != DyeColor.WHITE)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, refinedItem, 8) ShapelessRecipeBuilder(refinedItem, 8)
.requires(Ingredient.of(MRegistry.FLOOR_TILES.getItem(DyeColor.WHITE)), 8) .requires(Ingredient.of(MRegistry.FLOOR_TILES.getItem(DyeColor.WHITE)), 8)
.requires(color.tag) .requires(color.tag)
.unlockedBy(MRegistry.FLOOR_TILES.getItem(DyeColor.WHITE)) .unlockedBy(MRegistry.FLOOR_TILES.getItem(DyeColor.WHITE))
@ -110,11 +108,9 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
wallWithCut(item, MRegistry.TRITANIUM_STRIPED_WALL.getItem(a, b), consumer) wallWithCut(item, MRegistry.TRITANIUM_STRIPED_WALL.getItem(a, b), consumer)
} }
for (color in DyeColor.entries) { stairsWithCut(MItems.TRITANIUM_STRIPED_BLOCK, MItems.TRITANIUM_STRIPED_STAIRS, consumer)
stairsWithCut(MItems.TRITANIUM_STRIPED_BLOCK[color]!!, MItems.TRITANIUM_STRIPED_STAIRS[color]!!, consumer) slabWithCut(MItems.TRITANIUM_STRIPED_BLOCK, MItems.TRITANIUM_STRIPED_SLAB, consumer)
slabWithCut(MItems.TRITANIUM_STRIPED_BLOCK[color]!!, MItems.TRITANIUM_STRIPED_SLAB[color]!!, consumer) wallWithCut(MItems.TRITANIUM_STRIPED_BLOCK, MItems.TRITANIUM_STRIPED_WALL, consumer)
wallWithCut(MItems.TRITANIUM_STRIPED_BLOCK[color]!!, MItems.TRITANIUM_STRIPED_WALL[color]!!, consumer)
}
for ((color, item) in MRegistry.FLOOR_TILES.items) { for ((color, item) in MRegistry.FLOOR_TILES.items) {
stairsWithCut(item, MRegistry.FLOOR_TILES_STAIRS.items[color]!!, consumer) stairsWithCut(item, MRegistry.FLOOR_TILES_STAIRS.items[color]!!, consumer)
@ -126,7 +122,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
val original = MRegistry.TRITANIUM_BLOCK.items[base]!! val original = MRegistry.TRITANIUM_BLOCK.items[base]!!
MatteryRecipe(item, 8, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(item, 8)
.row(original, original, original) .row(original, original, original)
.row(original, stripe.tag, original) .row(original, stripe.tag, original)
.row(original, original, original) .row(original, original, original)
@ -134,21 +130,21 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.build(consumer, modLocation("decorative/tritanium/striped/${base.name.lowercase()}_${stripe.name.lowercase()}")) .build(consumer, modLocation("decorative/tritanium/striped/${base.name.lowercase()}_${stripe.name.lowercase()}"))
} }
MatteryRecipe(MItems.DANGER_STRIPE_BLOCK, 24, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(MItems.DANGER_STRIPE_BLOCK, 24)
.rowAB(Tags.Items.DYES_YELLOW, Tags.Items.INGOTS_IRON) .rowAB(Tags.Items.DYES_YELLOW, Tags.Items.INGOTS_IRON)
.row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONES, Tags.Items.INGOTS_IRON) .row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONE, Tags.Items.INGOTS_IRON)
.rowBC(Tags.Items.INGOTS_IRON, Tags.Items.DYES_BLACK) .rowBC(Tags.Items.INGOTS_IRON, Tags.Items.DYES_BLACK)
.unlockedBy(Tags.Items.INGOTS_IRON) .unlockedBy(Tags.Items.INGOTS_IRON)
.unlockedBy(Tags.Items.DYES_BLACK) .unlockedBy(Tags.Items.DYES_BLACK)
.build(consumer, modLocation("decorative/danger_stripe")) .build(consumer, modLocation("decorative/danger_stripe"))
MatteryRecipe(MItems.METAL_BEAM, 24, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(MItems.METAL_BEAM, 24)
.rowB(Tags.Items.INGOTS_IRON) .rowB(Tags.Items.INGOTS_IRON)
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONES, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONE, MItemTags.TRITANIUM_INGOTS)
.rowB(Tags.Items.INGOTS_IRON) .rowB(Tags.Items.INGOTS_IRON)
.build(consumer, modLocation("decorative/metal_beam")) .build(consumer, modLocation("decorative/metal_beam"))
MatteryRecipe(MRegistry.VENT.item, 24, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(MRegistry.VENT.item, 24)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, Items.IRON_BARS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, Items.IRON_BARS, MItemTags.TRITANIUM_INGOTS)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
@ -156,7 +152,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.build(consumer, modLocation("decorative/vent/default")) .build(consumer, modLocation("decorative/vent/default"))
for ((color, item) in MRegistry.VENT.items) { for ((color, item) in MRegistry.VENT.items) {
MatteryRecipe(item, 8, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(item, 8)
.row(MRegistry.VENT.item, MRegistry.VENT.item, MRegistry.VENT.item) .row(MRegistry.VENT.item, MRegistry.VENT.item, MRegistry.VENT.item)
.row(MRegistry.VENT.item, color.tag, MRegistry.VENT.item) .row(MRegistry.VENT.item, color.tag, MRegistry.VENT.item)
.row(MRegistry.VENT.item, MRegistry.VENT.item, MRegistry.VENT.item) .row(MRegistry.VENT.item, MRegistry.VENT.item, MRegistry.VENT.item)
@ -168,29 +164,24 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
for ((color, item) in MRegistry.VENT_ALTERNATIVE.allItems) { for ((color, item) in MRegistry.VENT_ALTERNATIVE.allItems) {
val other = MRegistry.VENT.allItems[color]!! val other = MRegistry.VENT.allItems[color]!!
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, item, 1).requires(other) ShapelessRecipeBuilder(item, 1).requires(other)
.unlockedBy(item) .unlockedBy(item)
.save(consumer, modLocation("decorative/vent/to_alt/${color?.name?.lowercase() ?: "default"}")) .save(consumer, modLocation("decorative/vent/to_alt/${color?.name?.lowercase() ?: "default"}"))
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, other, 1).requires(item) ShapelessRecipeBuilder(other, 1).requires(item)
.unlockedBy(other) .unlockedBy(other)
.save(consumer, modLocation("decorative/vent/from_alt/${color?.name?.lowercase() ?: "default"}")) .save(consumer, modLocation("decorative/vent/from_alt/${color?.name?.lowercase() ?: "default"}"))
} }
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MItems.METAL_BEAM_CENTER, 1).requires(MItems.METAL_BEAM) MatteryRecipe(MRegistry.DECORATIVE_CRATE.item, 24)
.unlockedBy(MItems.METAL_BEAM)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MItems.METAL_BEAM, 1).requires(MItems.METAL_BEAM_CENTER)
.unlockedBy(MItems.METAL_BEAM_CENTER)
MatteryRecipe(MRegistry.DECORATIVE_CRATE.item, 24, category = RecipeCategory.BUILDING_BLOCKS)
.rowB(Tags.Items.INGOTS_IRON) .rowB(Tags.Items.INGOTS_IRON)
.row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONES, Tags.Items.INGOTS_IRON) .row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONE, Tags.Items.INGOTS_IRON)
.rowB(Tags.Items.INGOTS_IRON) .rowB(Tags.Items.INGOTS_IRON)
.unlockedBy(Tags.Items.INGOTS_IRON) .unlockedBy(Tags.Items.INGOTS_IRON)
.build(consumer, modLocation("decorative/crate/rusty")) .build(consumer, modLocation("decorative/crate/rusty"))
for ((color, crate) in MRegistry.DECORATIVE_CRATE.items) { for ((color, crate) in MRegistry.DECORATIVE_CRATE.items) {
MatteryRecipe(crate, 8, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(crate, 8)
.row(MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item) .row(MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item)
.row(MRegistry.DECORATIVE_CRATE.item, color.tag, MRegistry.DECORATIVE_CRATE.item) .row(MRegistry.DECORATIVE_CRATE.item, color.tag, MRegistry.DECORATIVE_CRATE.item)
.row(MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item) .row(MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item, MRegistry.DECORATIVE_CRATE.item)
@ -199,7 +190,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
} }
for ((color, item) in MRegistry.TRITANIUM_BLOCK.items) { for ((color, item) in MRegistry.TRITANIUM_BLOCK.items) {
MatteryRecipe(item, 8, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(item, 8)
.row(MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item) .row(MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item)
.row(MRegistry.TRITANIUM_BLOCK.item, color.tag, MRegistry.TRITANIUM_BLOCK.item) .row(MRegistry.TRITANIUM_BLOCK.item, color.tag, MRegistry.TRITANIUM_BLOCK.item)
.row(MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item) .row(MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item, MRegistry.TRITANIUM_BLOCK.item)
@ -208,14 +199,14 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.build(consumer, modLocation("decorative/tritanium/default/${color.name.lowercase()}")) .build(consumer, modLocation("decorative/tritanium/default/${color.name.lowercase()}"))
} }
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MRegistry.INDUSTRIAL_GLASS.item, 8) ShapelessRecipeBuilder(MRegistry.INDUSTRIAL_GLASS.item, 8)
.requires(Items.GLASS, 8) .requires(Items.GLASS, 8)
.requires(MItemTags.TRITANIUM_PLATES) .requires(MItemTags.TRITANIUM_PLATES)
.unlockedBy("has_plate", has(MItemTags.TRITANIUM_PLATES)) .unlockedBy("has_plate", has(MItemTags.TRITANIUM_PLATES))
.unlockedBy("has_glass", has(Items.GLASS)) .unlockedBy("has_glass", has(Items.GLASS))
.save(consumer, modLocation("decorative/industrial_glass/default")) .save(consumer, modLocation("decorative/industrial_glass/default"))
ShapedRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MRegistry.INDUSTRIAL_GLASS_PANE.item, 16) ShapedRecipeBuilder(MRegistry.INDUSTRIAL_GLASS_PANE.item, 16)
.define('#', MRegistry.INDUSTRIAL_GLASS.item) .define('#', MRegistry.INDUSTRIAL_GLASS.item)
.pattern("###").pattern("###") .pattern("###").pattern("###")
.unlockedBy("has_tritanium_glass", has(MRegistry.INDUSTRIAL_GLASS.item)) .unlockedBy("has_tritanium_glass", has(MRegistry.INDUSTRIAL_GLASS.item))
@ -240,155 +231,107 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
DyeColor.BLACK to Items.BLACK_STAINED_GLASS, DyeColor.BLACK to Items.BLACK_STAINED_GLASS,
) )
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
val item = MRegistry.INDUSTRIAL_GLASS.items[color]!! val item = MRegistry.INDUSTRIAL_GLASS.items[color]!!
val paneItem = MRegistry.INDUSTRIAL_GLASS_PANE.items[color]!! val paneItem = MRegistry.INDUSTRIAL_GLASS_PANE.items[color]!!
val mappedVanilla = mappingUpgradeVanilla[color]!! val mappedVanilla = mappingUpgradeVanilla[color]!!
// обычная покраска // обычная покраска
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, item, 8) ShapelessRecipeBuilder(item, 8)
.requires(MRegistry.INDUSTRIAL_GLASS.item, 8) .requires(MRegistry.INDUSTRIAL_GLASS.item, 8)
.requires(color.tag) .requires(color.tag)
.unlockedBy("has_tritanium_glass", has(MRegistry.INDUSTRIAL_GLASS.item)) .unlockedBy("has_tritanium_glass", has(MRegistry.INDUSTRIAL_GLASS.item))
.save(consumer, modLocation("decorative/industrial_glass/recolor/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/industrial_glass/recolor/${color.name.lowercase()}"))
// апгрейд ванильного крашенного стекла // апгрейд ванильного крашенного стекла
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, item, 8) ShapelessRecipeBuilder(item, 8)
.requires(mappedVanilla, 8) .requires(mappedVanilla, 8)
.requires(MItemTags.TRITANIUM_PLATES) .requires(MItemTags.TRITANIUM_PLATES)
.unlockedBy("has_plate", has(MItemTags.TRITANIUM_PLATES)) .unlockedBy("has_plate", has(MItemTags.TRITANIUM_PLATES))
.unlockedBy("has_colored_glass", has(mappedVanilla)) .unlockedBy("has_colored_glass", has(mappedVanilla))
.save(consumer, modLocation("decorative/industrial_glass/upgrade/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/industrial_glass/upgrade/${color.name.lowercase()}"))
ShapedRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, paneItem, 16) ShapedRecipeBuilder(paneItem, 16)
.define('#', item) .define('#', item)
.pattern("###").pattern("###") .pattern("###").pattern("###")
.unlockedBy("has_colored_tritanium_glass", has(paneItem)) .unlockedBy("has_colored_tritanium_glass", has(paneItem))
.save(consumer, modLocation("decorative/industrial_glass_pane/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/industrial_glass_pane/${color.name.lowercase()}"))
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, paneItem, 8) ShapelessRecipeBuilder(paneItem, 8)
.requires(MRegistry.INDUSTRIAL_GLASS_PANE.item, 8) .requires(MRegistry.INDUSTRIAL_GLASS_PANE.item, 8)
.requires(color.tag) .requires(color.tag)
.unlockedBy("has_tritanium_glass_pane", has(MRegistry.INDUSTRIAL_GLASS_PANE.item)) .unlockedBy("has_tritanium_glass_pane", has(MRegistry.INDUSTRIAL_GLASS_PANE.item))
.save(consumer, modLocation("decorative/industrial_glass_pane/recolor/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/industrial_glass_pane/recolor/${color.name.lowercase()}"))
} }
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MItems.REDSTONE_LAMP_INVERTED, 1) ShapelessRecipeBuilder(MItems.LABORATORY_LAMP, 1)
.requires(Items.REDSTONE_LAMP)
.unlockedBy(Items.REDSTONE_LAMP)
.save(consumer, modLocation("decorative/inverted_redstone_lamp"))
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, Items.REDSTONE_LAMP, 1)
.requires(MItems.REDSTONE_LAMP_INVERTED)
.unlockedBy(MItems.REDSTONE_LAMP_INVERTED)
.save(consumer, modLocation("decorative/inverted_redstone_lamp2"))
MatteryRecipe(MItems.REINFORCED_REDSTONE_LAMP, category = RecipeCategory.REDSTONE)
.row(MItemTags.TRITANIUM_PLATES, Items.REDSTONE_LAMP, MItemTags.TRITANIUM_PLATES)
.build(consumer, modLocation("decorative/reinforced_redstone_lamp"))
MatteryRecipe(MItems.REINFORCED_REDSTONE_LAMP_INVERTED, category = RecipeCategory.REDSTONE)
.row(MItemTags.TRITANIUM_PLATES, MItems.REDSTONE_LAMP_INVERTED, MItemTags.TRITANIUM_PLATES)
.build(consumer, modLocation("decorative/reinforced_redstone_lamp_inverted"))
MatteryRecipe(MItems.LABORATORY_LAMP, category = RecipeCategory.REDSTONE)
.row(MItemTags.IRON_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS, MItemTags.IRON_PLATES)
.row(MItems.MIRROR, Items.REDSTONE_LAMP, MItems.MIRROR)
.row(MItemTags.TRITANIUM_PLATES, Tags.Items.DUSTS_REDSTONE, MItemTags.TRITANIUM_PLATES)
.build(consumer, modLocation("decorative/lab_lamp"))
MatteryRecipe(MItems.LABORATORY_LAMP, category = RecipeCategory.REDSTONE)
.row(MItemTags.IRON_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS, MItemTags.IRON_PLATES)
.row(MItems.MIRROR, MItems.REINFORCED_REDSTONE_LAMP, MItems.MIRROR)
.rowB(Tags.Items.DUSTS_REDSTONE)
.build(consumer, modLocation("decorative/lab_lamp_alt"))
MatteryRecipe(MItems.LABORATORY_LAMP_INVERTED, category = RecipeCategory.REDSTONE)
.row(MItemTags.IRON_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS, MItemTags.IRON_PLATES)
.row(MItems.MIRROR, MItems.REINFORCED_REDSTONE_LAMP_INVERTED, MItems.MIRROR)
.rowB(Tags.Items.DUSTS_REDSTONE)
.build(consumer, modLocation("decorative/lab_lamp_inv_alt"))
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MItems.LABORATORY_LAMP, 1)
.requires(MItems.LABORATORY_LAMP_INVERTED) .requires(MItems.LABORATORY_LAMP_INVERTED)
.unlockedBy(MItems.LABORATORY_LAMP_INVERTED) .unlockedBy(MItems.LABORATORY_LAMP_INVERTED)
.save(consumer, MItems.LABORATORY_LAMP.registryName!!.toString() + "_inv") .save(consumer, MItems.LABORATORY_LAMP.registryName!!.toString() + "_inv")
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MItems.LABORATORY_LAMP_INVERTED, 1) ShapelessRecipeBuilder(MItems.LABORATORY_LAMP_INVERTED, 1)
.requires(MItems.LABORATORY_LAMP) .requires(MItems.LABORATORY_LAMP)
.unlockedBy(MItems.LABORATORY_LAMP) .unlockedBy(MItems.LABORATORY_LAMP)
.save(consumer, MItems.LABORATORY_LAMP_INVERTED.registryName!!.toString() + "_inv") .save(consumer, MItems.LABORATORY_LAMP_INVERTED.registryName!!.toString() + "_inv")
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MItems.REINFORCED_REDSTONE_LAMP, 1) MatteryRecipe(MBlocks.TRITANIUM_STRIPED_BLOCK, 24)
.requires(MItems.REINFORCED_REDSTONE_LAMP_INVERTED)
.unlockedBy(MItems.REINFORCED_REDSTONE_LAMP_INVERTED)
.save(consumer, MItems.REINFORCED_REDSTONE_LAMP_INVERTED.registryName!!.toString() + "_inv")
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MItems.REINFORCED_REDSTONE_LAMP_INVERTED, 1)
.requires(MItems.REINFORCED_REDSTONE_LAMP)
.unlockedBy(MItems.REINFORCED_REDSTONE_LAMP)
.save(consumer, MItems.REINFORCED_REDSTONE_LAMP.registryName!!.toString() + "_inv")
for (color in DyeColor.entries) {
MatteryRecipe(MBlocks.TRITANIUM_STRIPED_BLOCK[color]!!, 24, category = RecipeCategory.BUILDING_BLOCKS)
.rowB(MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONES, MItemTags.TRITANIUM_INGOTS)
.rowAB(color.tag, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(color.tag)
.build(consumer, modLocation("decorative/blocks/striped_default_${color.name.lowercase()}"))
}
MatteryRecipe(MRegistry.TRITANIUM_BLOCK.item, 24, category = RecipeCategory.BUILDING_BLOCKS)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONES, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONE, MItemTags.TRITANIUM_INGOTS)
.rowAB(Tags.Items.DYES_YELLOW, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(Tags.Items.DYES_YELLOW)
.build(consumer, modLocation("decorative/blocks/striped_default"))
MatteryRecipe(MRegistry.TRITANIUM_BLOCK.item, 24)
.rowB(MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONE, MItemTags.TRITANIUM_INGOTS)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer, modLocation("decorative/blocks/default")) .build(consumer, modLocation("decorative/blocks/default"))
MatteryRecipe(MBlocks.TRITANIUM_DOOR[null]!!, 3, category = RecipeCategory.REDSTONE) MatteryRecipe(MBlocks.TRITANIUM_DOOR[null]!!, 3)
.rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer, modLocation("decorative/doors/default")) .build(consumer, modLocation("decorative/doors/default"))
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, MItems.TRITANIUM_DOOR[color]!!, 1) ShapelessRecipeBuilder.shapeless(MItems.TRITANIUM_DOOR[color]!!, 1)
.requires(Ingredient.of(MItems.TRITANIUM_DOOR.entries.stream().filter { it.key != color }.map { ItemStack(it.value) })) .requires(Ingredient.of(MItems.TRITANIUM_DOOR.entries.stream().filter { it.key != color }.map { ItemStack(it.value) }))
.requires(color.tag) .requires(color.tag)
.unlockedBy(MItems.TRITANIUM_DOOR.entries.stream().filter { it.key != color }.map { it.value }) .unlockedBy(MItems.TRITANIUM_DOOR.entries.stream().filter { it.key != color }.map { it.value })
.save(consumer, modLocation("decorative/doors/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/doors/${color.name.lowercase()}"))
} }
MatteryRecipe(MBlocks.TRITANIUM_TRAPDOOR[null]!!, category = RecipeCategory.REDSTONE) MatteryRecipe(MBlocks.TRITANIUM_TRAPDOOR[null]!!)
.rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer, modLocation("decorative/trapdoors/default")) .build(consumer, modLocation("decorative/trapdoors/default"))
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, MItems.TRITANIUM_TRAPDOOR[color]!!, 1) ShapelessRecipeBuilder.shapeless(MItems.TRITANIUM_TRAPDOOR[color]!!, 1)
.requires(Ingredient.of(MItems.TRITANIUM_TRAPDOOR.entries.stream().filter { it.key != color }.map { ItemStack(it.value) })) .requires(Ingredient.of(MItems.TRITANIUM_TRAPDOOR.entries.stream().filter { it.key != color }.map { ItemStack(it.value) }))
.requires(color.tag) .requires(color.tag)
.unlockedBy(MItems.TRITANIUM_TRAPDOOR.entries.stream().filter { it.key != color }.map { it.value }) .unlockedBy(MItems.TRITANIUM_TRAPDOOR.entries.stream().filter { it.key != color }.map { it.value })
.save(consumer, modLocation("decorative/trapdoors/${color.name.lowercase()}")) .save(consumer, modLocation("decorative/trapdoors/${color.name.lowercase()}"))
} }
MatteryRecipe(MRegistry.TRITANIUM_PRESSURE_PLATE.item, category = RecipeCategory.REDSTONE) MatteryRecipe(MRegistry.TRITANIUM_PRESSURE_PLATE.item)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.BASIC_CIRCUIT, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItemTags.BASIC_CIRCUIT, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItemTags.TRITANIUM_PLATES) .unlockedBy(MItemTags.TRITANIUM_PLATES)
.build(consumer, modLocation("pressure_plates/default")) .build(consumer, modLocation("pressure_plates/default"))
for (dye in DyeColor.entries) { for (dye in DyeColor.values()) {
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MRegistry.TRITANIUM_PRESSURE_PLATE.getItem(dye), 1) ShapelessRecipeBuilder(MRegistry.TRITANIUM_PRESSURE_PLATE.getItem(dye), 1)
.requires(Ingredient.of(MRegistry.TRITANIUM_PRESSURE_PLATE.allItems.entries.stream().filter { it.key != dye }.map { ItemStack(it.value) })) .requires(Ingredient.of(MRegistry.TRITANIUM_PRESSURE_PLATE.allItems.entries.stream().filter { it.key != dye }.map { ItemStack(it.value) }))
.requires(dye.tag) .requires(dye.tag)
.unlockedBy(MItemTags.TRITANIUM_PLATES) .unlockedBy(MItemTags.TRITANIUM_PLATES)
.save(consumer, modLocation("pressure_plates/${dye.name.lowercase()}")) .save(consumer, modLocation("pressure_plates/${dye.name.lowercase()}"))
} }
MatteryRecipe(MItems.ENGINE, count = 9, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(MItems.ENGINE, count = 9)
.rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, Items.FLINT_AND_STEEL, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, Items.FLINT_AND_STEEL, MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, MItems.MATTER_CABLE, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItems.MATTER_CABLE, MItemTags.TRITANIUM_INGOTS)
@ -396,7 +339,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.unlockedBy(Items.FLINT_AND_STEEL) .unlockedBy(Items.FLINT_AND_STEEL)
.build(consumer, modLocation("decorative/engine")) .build(consumer, modLocation("decorative/engine"))
MatteryRecipe(MItems.METAL_MESH, count = 12, category = RecipeCategory.BUILDING_BLOCKS) MatteryRecipe(MItems.METAL_MESH, count = 12)
.row(Tags.Items.NUGGETS_IRON, Items.IRON_BARS, Tags.Items.NUGGETS_IRON) .row(Tags.Items.NUGGETS_IRON, Items.IRON_BARS, Tags.Items.NUGGETS_IRON)
.rowAC(Items.IRON_BARS, Items.IRON_BARS) .rowAC(Items.IRON_BARS, Items.IRON_BARS)
.row(Tags.Items.NUGGETS_IRON, Items.IRON_BARS, Tags.Items.NUGGETS_IRON) .row(Tags.Items.NUGGETS_IRON, Items.IRON_BARS, Tags.Items.NUGGETS_IRON)
@ -404,49 +347,28 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
.unlockedBy(Items.IRON_BARS) .unlockedBy(Items.IRON_BARS)
.build(consumer, modLocation("decorative/metal_mesh")) .build(consumer, modLocation("decorative/metal_mesh"))
MatteryRecipe(MItems.METAL_RAILING, count = 16, category = RecipeCategory.BUILDING_BLOCKS) // лампа
.row(MItems.METAL_MESH, MItems.METAL_MESH, MItems.METAL_MESH) MatteryRecipe(MItems.LABORATORY_LAMP)
.row(MItems.METAL_MESH, MItems.METAL_MESH, MItems.METAL_MESH) .row(MItemTags.IRON_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS, MItemTags.IRON_PLATES)
.unlockedBy(Items.IRON_BARS) .row(MItems.MIRROR, Items.GLOWSTONE, MItems.MIRROR)
.unlockedBy(Tags.Items.NUGGETS_IRON) .row(MItemTags.TRITANIUM_PLATES, Tags.Items.DUSTS_REDSTONE, MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.METAL_MESH) .build(consumer, modLocation("decorative/lamp"))
.build(consumer, modLocation("decorative/metal_railing"))
// Голо табличка // Голо табличка
MatteryRecipe(MItems.HOLO_SIGN, category = RecipeCategory.DECORATIONS) MatteryRecipe(MItems.HOLO_SIGN)
.row(MItemTags.BASIC_CIRCUIT, MItemTags.TRITANIUM_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS) .row(MItemTags.BASIC_CIRCUIT, MItemTags.TRITANIUM_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS)
.rowAB(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_GLOWSTONE) .rowAB(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_GLOWSTONE)
.rowBC(MItemTags.TRITANIUM_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS) .rowBC(MItemTags.TRITANIUM_PLATES, MItemTags.HARDENED_GLASS_PANES_COLORLESS)
.build(consumer, modLocation("decorative/holo_sign")) .build(consumer, modLocation("decorative/holo_sign"))
MatteryRecipe(MItems.TRITANIUM_BARS, category = RecipeCategory.DECORATIONS, count = 16) MatteryRecipe(MItems.TRITANIUM_BARS, count = 16)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.build(consumer, modLocation("decorative/tritanium_bars")) .build(consumer, modLocation("decorative/tritanium_bars"))
MatteryRecipe(MItems.TRITANIUM_ANVIL[null]!![0], category = RecipeCategory.DECORATIONS) MatteryRecipe(MItems.TRITANIUM_ANVIL[0])
.row(MItemTags.TRITANIUM_INGOTS_STORAGE, MItemTags.TRITANIUM_INGOTS_STORAGE, MItemTags.TRITANIUM_INGOTS_STORAGE) .row(MItemTags.TRITANIUM_INGOTS_STORAGE, MItemTags.TRITANIUM_INGOTS_STORAGE, MItemTags.TRITANIUM_INGOTS_STORAGE)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
for ((color, item) in MRegistry.COMPUTER_TERMINAL.allItems) {
val builder = MatteryRecipe(item, category = RecipeCategory.DECORATIONS)
if (color != null) {
builder.rowB(color.tag)
}
builder.row(MItemTags.TRITANIUM_PLATES, MItems.DISPLAY_SCREEN, MItemTags.HARDENED_GLASS_PANES_COLORLESS)
builder.rowB(MItemTags.BASIC_CIRCUIT)
builder.build(consumer)
}
for ((color, item) in MRegistry.STAR_CHAIR.allItems) {
MatteryRecipe(item, category = RecipeCategory.DECORATIONS)
.rowB(color?.tag)
.row(MItemTags.TRITANIUM_PLATES, ItemTags.WOOL, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES)
.build(consumer)
}
} }

View File

@ -1,34 +1,12 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.world.item.Item
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
private fun makeNormalRecipe(element: Item, result: Item): MatteryRecipe {
return MatteryRecipe(result, 1)
.row(MItemTags.COPPER_WIRES, Items.REDSTONE, MItemTags.COPPER_WIRES)
.row(MItemTags.CARBON_PLATES, element, MItemTags.CARBON_PLATES)
.rowB(MItems.ELECTRIC_PARTS)
.unlockedBy(MItemTags.IRON_PLATES)
.unlockedBy(MItems.ELECTRIC_PARTS)
.unlockedBy(element)
}
private fun makeAdvancedRecipe(element: Item, result: Item): MatteryRecipe {
return MatteryRecipe(result, 1)
.row(MItemTags.GOLD_WIRES, MItemTags.DILITHIUM_GEMS, MItemTags.GOLD_WIRES)
.row(MItemTags.TRITANIUM_PLATES, element, MItemTags.TRITANIUM_PLATES)
.row(MItems.ELECTRIC_PARTS, MItemTags.DILITHIUM_GEMS, MItems.ELECTRIC_PARTS)
.unlockedBy(MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.ELECTRIC_PARTS)
.unlockedBy(element)
}
fun addMachineUpgradeRecipes(consumer: RecipeOutput) { fun addMachineUpgradeRecipes(consumer: RecipeOutput) {
MatteryRecipe(MItems.MachineUpgrades.Basic.BLANK) MatteryRecipe(MItems.MachineUpgrades.Basic.BLANK, 4)
.rowB(Items.REDSTONE) .rowB(Items.REDSTONE)
.rowAC(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES) .rowAC(MItemTags.IRON_PLATES, MItemTags.IRON_PLATES)
.rowB(MItems.ELECTRIC_PARTS) .rowB(MItems.ELECTRIC_PARTS)
@ -36,43 +14,27 @@ fun addMachineUpgradeRecipes(consumer: RecipeOutput) {
.unlockedBy(MItems.ELECTRIC_PARTS) .unlockedBy(MItems.ELECTRIC_PARTS)
.build(consumer) .build(consumer)
makeNormalRecipe(MItems.MachineUpgrades.Basic.BLANK, MItems.MachineUpgrades.Normal.BLANK) MatteryRecipe(MItems.MachineUpgrades.Normal.BLANK, 4)
.row(MItemTags.COPPER_WIRES, Items.REDSTONE, MItemTags.COPPER_WIRES)
.row(MItemTags.IRON_PLATES, Items.REDSTONE, MItemTags.IRON_PLATES)
.rowB(MItems.ELECTRIC_PARTS)
.unlockedBy(MItemTags.IRON_PLATES)
.unlockedBy(MItems.ELECTRIC_PARTS)
.build(consumer) .build(consumer)
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.BLANK, MItems.MachineUpgrades.Advanced.BLANK) MatteryRecipe(MItems.MachineUpgrades.Advanced.BLANK, 4)
.row(MItemTags.GOLD_WIRES, Items.REDSTONE, MItemTags.GOLD_WIRES)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.COPPER_WIRES, MItemTags.TRITANIUM_PLATES)
.row(MItems.ELECTRIC_PARTS, Items.REDSTONE, MItems.ELECTRIC_PARTS)
.unlockedBy(MItemTags.TRITANIUM_PLATES)
.unlockedBy(MItems.ELECTRIC_PARTS)
.build(consumer) .build(consumer)
makeNormalRecipe(MItems.MachineUpgrades.Basic.SPEED, MItems.MachineUpgrades.Normal.SPEED)
.build(consumer, "upgrade")
makeNormalRecipe(MItems.MachineUpgrades.Basic.ENERGY_CONSUMPTION, MItems.MachineUpgrades.Normal.ENERGY_CONSUMPTION)
.build(consumer, "upgrade")
makeNormalRecipe(MItems.MachineUpgrades.Basic.FAILSAFE, MItems.MachineUpgrades.Normal.FAILSAFE)
.build(consumer, "upgrade")
makeNormalRecipe(MItems.MachineUpgrades.Basic.ENERGY_STORAGE, MItems.MachineUpgrades.Normal.ENERGY_STORAGE)
.build(consumer, "upgrade")
makeNormalRecipe(MItems.MachineUpgrades.Basic.MATTER_STORAGE, MItems.MachineUpgrades.Normal.MATTER_STORAGE)
.build(consumer, "upgrade")
makeNormalRecipe(MItems.MachineUpgrades.Basic.PROCESSING_ITEMS, MItems.MachineUpgrades.Normal.PROCESSING_ITEMS)
.build(consumer, "upgrade")
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.SPEED, MItems.MachineUpgrades.Advanced.SPEED)
.build(consumer, "upgrade")
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.ENERGY_CONSUMPTION, MItems.MachineUpgrades.Advanced.ENERGY_CONSUMPTION)
.build(consumer, "upgrade")
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.FAILSAFE, MItems.MachineUpgrades.Advanced.FAILSAFE)
.build(consumer, "upgrade")
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.ENERGY_STORAGE, MItems.MachineUpgrades.Advanced.ENERGY_STORAGE)
.build(consumer, "upgrade")
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.MATTER_STORAGE, MItems.MachineUpgrades.Advanced.MATTER_STORAGE)
.build(consumer, "upgrade")
makeAdvancedRecipe(MItems.MachineUpgrades.Normal.PROCESSING_ITEMS, MItems.MachineUpgrades.Advanced.PROCESSING_ITEMS)
.build(consumer, "upgrade")
for (tier in MItems.MachineUpgrades.CRAFTABLE_TIERS) { for (tier in MItems.MachineUpgrades.CRAFTABLE_TIERS) {
MatteryRecipe(tier.SPEED, 1) MatteryRecipe(tier.SPEED, 1)
.rowB(Items.REDSTONE) .rowB(Items.REDSTONE)
.row(Items.SUGAR, MItemTags.COPPER_WIRES, Items.SUGAR) .row(Items.SUGAR, MItemTags.COPPER_WIRES, Items.SUGAR)
.row(MItems.MECHANICAL_PARTS, tier.BLANK, MItems.MECHANICAL_PARTS) .rowB(tier.BLANK)
.unlockedBy(tier.BLANK) .unlockedBy(tier.BLANK)
.unlockedBy(MItemTags.COPPER_WIRES) .unlockedBy(MItemTags.COPPER_WIRES)
.build(consumer) .build(consumer)
@ -80,7 +42,7 @@ fun addMachineUpgradeRecipes(consumer: RecipeOutput) {
MatteryRecipe(tier.ENERGY_CONSUMPTION, 1) MatteryRecipe(tier.ENERGY_CONSUMPTION, 1)
.rowB(Items.REDSTONE) .rowB(Items.REDSTONE)
.row(MItemTags.COPPER_WIRES, MItemTags.GOLD_WIRES, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, MItemTags.GOLD_WIRES, MItemTags.COPPER_WIRES)
.row(MItems.ELECTRIC_PARTS, tier.BLANK, MItems.ELECTRIC_PARTS) .rowB(tier.BLANK)
.unlockedBy(tier.BLANK) .unlockedBy(tier.BLANK)
.unlockedBy(MItemTags.GOLD_WIRES) .unlockedBy(MItemTags.GOLD_WIRES)
.build(consumer) .build(consumer)
@ -88,7 +50,7 @@ fun addMachineUpgradeRecipes(consumer: RecipeOutput) {
MatteryRecipe(tier.FAILSAFE, 1) MatteryRecipe(tier.FAILSAFE, 1)
.rowB(MItems.ELECTRIC_PARTS) .rowB(MItems.ELECTRIC_PARTS)
.row(MItemTags.COPPER_WIRES, MItems.QUANTUM_TRANSCEIVER, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, MItems.QUANTUM_TRANSCEIVER, MItemTags.COPPER_WIRES)
.row(Tags.Items.DUSTS_GLOWSTONE, tier.BLANK, Tags.Items.DUSTS_GLOWSTONE) .rowB(tier.BLANK)
.unlockedBy(tier.BLANK) .unlockedBy(tier.BLANK)
.unlockedBy(MItems.QUANTUM_TRANSCEIVER) .unlockedBy(MItems.QUANTUM_TRANSCEIVER)
.build(consumer) .build(consumer)
@ -96,23 +58,23 @@ fun addMachineUpgradeRecipes(consumer: RecipeOutput) {
MatteryRecipe(tier.ENERGY_STORAGE, 1) MatteryRecipe(tier.ENERGY_STORAGE, 1)
.rowB(Items.REDSTONE) .rowB(Items.REDSTONE)
.row(Items.REDSTONE, MItems.ENERGY_BUS, Items.REDSTONE) .row(Items.REDSTONE, MItems.ENERGY_BUS, Items.REDSTONE)
.row(MItems.ELECTRIC_PARTS, tier.BLANK, MItems.ELECTRIC_PARTS) .rowB(tier.BLANK)
.unlockedBy(tier.BLANK) .unlockedBy(tier.BLANK)
.unlockedBy(MItems.ENERGY_BUS) .unlockedBy(MItems.ENERGY_BUS)
.build(consumer) .build(consumer)
MatteryRecipe(tier.MATTER_STORAGE, 1) MatteryRecipe(tier.MATTER_STORAGE, 1)
.rowB(MItemTags.HARDENED_GLASS) .rowB(Tags.Items.GLASS)
.row(MItemTags.HARDENED_GLASS, MItems.MATTER_CAPACITOR_PARTS, MItemTags.HARDENED_GLASS) .row(Tags.Items.GLASS, MItems.MATTER_CAPACITOR_PARTS, Tags.Items.GLASS)
.row(MItems.MATTER_CAPACITOR_PARTS, tier.BLANK, MItems.MATTER_CAPACITOR_PARTS) .rowB(tier.BLANK)
.unlockedBy(tier.BLANK) .unlockedBy(tier.BLANK)
.unlockedBy(MItems.MATTER_CAPACITOR_PARTS) .unlockedBy(MItems.MATTER_CAPACITOR_PARTS)
.build(consumer) .build(consumer)
MatteryRecipe(tier.PROCESSING_ITEMS, 1) MatteryRecipe(tier.PROCESSING_ITEMS, 1)
.rowB(MItems.MECHANICAL_PARTS) .rowB(MItems.ELECTRIC_PARTS)
.row(MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET)
.row(Tags.Items.ENDER_PEARLS, tier.BLANK, Tags.Items.ENDER_PEARLS) .rowB(tier.BLANK)
.unlockedBy(tier.BLANK) .unlockedBy(tier.BLANK)
.unlockedBy(MItems.ELECTROMAGNET) .unlockedBy(MItems.ELECTROMAGNET)
.build(consumer) .build(consumer)

View File

@ -1,85 +1,43 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.core.NonNullList
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.item.crafting.ShapedRecipePattern import net.minecraftforge.common.Tags
import net.neoforged.neoforge.common.Tags import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.util.math.Decimal
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.recipe.IngredientMatrix
import ru.dbotthepony.mc.otm.recipe.MatterEntanglerRecipe import ru.dbotthepony.mc.otm.recipe.MatterEntanglerRecipe
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import java.util.*
private fun pattern(
c00: Ingredient, c10: Ingredient, c20: Ingredient,
c01: Ingredient, c11: Ingredient, c21: Ingredient,
c02: Ingredient, c12: Ingredient, c22: Ingredient,
): ShapedRecipePattern {
val patternMap = linkedMapOf(
'A' to c00, 'B' to c10, 'C' to c20,
'D' to c01, 'E' to c11, 'F' to c21,
'G' to c02, 'K' to c12, 'M' to c22,
)
val pattern = listOf(
"ABC",
"DEF",
"GKM",
)
return ShapedRecipePattern(
3, 3,
NonNullList.copyOf(patternMap.values),
Optional.of(ShapedRecipePattern.Data(patternMap, pattern))
)
}
fun addMatterEntanglerRecipes(consumer: RecipeOutput) { fun addMatterEntanglerRecipes(consumer: RecipeOutput) {
consumer.accept( consumer.accept(
modLocation("quantum_capacitor"),
MatterEntanglerRecipe( MatterEntanglerRecipe(
pattern( modLocation("quantum_capacitor"),
Ingredient.of(MItems.ELECTRIC_PARTS), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(MItems.ELECTRIC_PARTS), IngredientMatrix.of(
Ingredient.of(MItems.BATTERY_CAPACITOR), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_CAPACITOR), listOf(Ingredient.of(MItems.ELECTRIC_PARTS), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(MItems.ELECTRIC_PARTS)),
Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), listOf(Ingredient.of(MItems.BATTERY_CAPACITOR), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_CAPACITOR)),
listOf(Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES)),
), ),
Decimal(40), Decimal(40),
400.0, 400.0,
ItemStack(MItems.QUANTUM_CAPACITOR, 2), ItemStack(MItems.QUANTUM_CAPACITOR, 2),
experience = 15f experience = 15f
).energetic() ).energetic().toFinished()
) )
consumer.accept( consumer.accept(
modLocation("quantum_battery"),
MatterEntanglerRecipe( MatterEntanglerRecipe(
pattern( modLocation("quantum_battery"),
Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE), IngredientMatrix.of(
Ingredient.of(MItems.BATTERY_DENSE), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_DENSE), listOf(Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE)),
Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), listOf(Ingredient.of(MItems.BATTERY_DENSE), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_DENSE)),
listOf(Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES)),
), ),
Decimal(120), Decimal(120),
600.0, 600.0,
ItemStack(MItems.QUANTUM_BATTERY, 2), ItemStack(MItems.QUANTUM_BATTERY, 2),
experience = 20f experience = 20f
).energetic() ).energetic().toFinished()
)
consumer.accept(
modLocation("antimatter_transform_matrix"),
MatterEntanglerRecipe(
ingredients = pattern(
Ingredient.of(Tags.Items.ENDER_PEARLS), Ingredient.of(MItemTags.DILITHIUM_GEMS), Ingredient.of(Tags.Items.ENDER_PEARLS),
Ingredient.of(Tags.Items.DUSTS_REDSTONE), Ingredient.of(MItems.MATTER_TRANSFORM_MATRIX), Ingredient.of(Tags.Items.DUSTS_REDSTONE),
Ingredient.of(Tags.Items.DUSTS_GLOWSTONE), Ingredient.of(MItemTags.DILITHIUM_GEMS), Ingredient.of(Tags.Items.DUSTS_GLOWSTONE),
),
matter = Decimal(600),
ticks = 2000.0,
result = ItemStack(MItems.ANTIMATTER_TRANSFORM_MATRIX, 1),
experience = 20f
).energetic()
) )
} }

View File

@ -1,25 +1,26 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import com.google.gson.JsonObject
import net.minecraft.advancements.Advancement import net.minecraft.advancements.Advancement
import net.minecraft.advancements.AdvancementHolder
import net.minecraft.advancements.Criterion import net.minecraft.advancements.Criterion
import net.minecraft.data.recipes.RecipeCategory import net.minecraft.advancements.CriterionTriggerInstance
import net.minecraft.data.recipes.RecipeOutput import net.minecraft.data.recipes.FinishedRecipe
import net.minecraft.data.recipes.ShapedRecipeBuilder import net.minecraft.data.recipes.ShapedRecipeBuilder
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.TagKey import net.minecraft.tags.TagKey
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.ShapedRecipe
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import net.neoforged.neoforge.common.conditions.ICondition
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.core.set
import ru.dbotthepony.mc.otm.core.toJsonStrict
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.recipe.EnergyContainerRecipe
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
import java.util.function.Consumer
private interface RecipeCell { private interface RecipeCell {
val value: Ingredient val value: Ingredient
@ -54,19 +55,27 @@ private data class RecipeRow(
val c: RecipeCell?, val c: RecipeCell?,
) )
private fun RecipeOutput.map(mapper: (FinishedRecipe) -> FinishedRecipe): RecipeOutput {
return object : RecipeOutput {
override fun accept(recipe: FinishedRecipe) {
this@map.accept(mapper(recipe))
}
}
}
/** /**
* [ShapedRecipeBuilder] that doesn't suck * [ShapedRecipeBuilder] that doesn't suck
*/ */
@Suppress("unused") @Suppress("unused")
class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: RecipeCategory = RecipeCategory.MISC) { class MatteryRecipe(val result: ItemLike, val count: Int = 1) {
private val rows = arrayOfNulls<RecipeRow>(3) private val rows = arrayOfNulls<RecipeRow>(3)
private var index = 0 private var index = 0
private val unlockedBy = ArrayList<Pair<String, Criterion<*>>>().also { private val unlockedBy = ArrayList<Pair<String, CriterionTriggerInstance>>().also {
it.add("has_result" to has(result)) it.add("has_result" to has(result))
} }
fun unlockedBy(name: String, trigger: Criterion<*>): MatteryRecipe { fun unlockedBy(name: String, trigger: CriterionTriggerInstance): MatteryRecipe {
unlockedBy.add(name to trigger) unlockedBy.add(name to trigger)
return this return this
} }
@ -128,7 +137,7 @@ class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: Reci
throw NoSuchElementException("No recipe rows were defined") throw NoSuchElementException("No recipe rows were defined")
} }
val builder = ShapedRecipeBuilder(category, result, count) val builder = ShapedRecipeBuilder(result, count)
val pairs = ArrayList<Pair<Char, RecipeCell>>() val pairs = ArrayList<Pair<Char, RecipeCell>>()
val iterator = charlist.iterator() val iterator = charlist.iterator()
@ -168,12 +177,22 @@ class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: Reci
return this return this
} }
private fun filter(): (ShapedRecipe) -> ShapedRecipe { private fun filter(): (FinishedRecipe) -> FinishedRecipe {
if (upgradeSource != null) { if (upgradeSource != null) {
check(copyPaths.isNotEmpty()) { "Defined upgrade recipe without nbt migration operations" } check(copyPaths.isNotEmpty()) { "Defined upgrade recipe without nbt migration operations" }
return { return {
UpgradeRecipe(it, copyPaths.map { upgradeSource!! to it }) object : FinishedRecipe by it {
override fun serializeRecipeData(pJson: JsonObject) {
pJson["parent"] = it.serializeRecipe()
pJson["copyPaths"] = UpgradeRecipe.COPY_PATHS_CODEC.toJsonStrict(copyPaths)
pJson["source"] = upgradeSource!!.toString()
}
override fun getType(): RecipeSerializer<*> {
return UpgradeRecipe.CODEC
}
}
} }
} }
@ -199,6 +218,16 @@ class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: Reci
buildRegular().save(consumer.map(filter()), name) buildRegular().save(consumer.map(filter()), name)
} }
fun buildEnergetic(consumer: RecipeOutput, name: String? = null) {
build(consumer.map {
object : FinishedRecipe by it {
override fun getType(): RecipeSerializer<*> {
return EnergyContainerRecipe.Companion
}
}
}, name)
}
fun row(): MatteryRecipe { fun row(): MatteryRecipe {
if (index == 3) { if (index == 3) {
throw IllegalStateException("Already have all rows defined") throw IllegalStateException("Already have all rows defined")

View File

@ -1,15 +1,12 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import com.google.common.collect.ImmutableList import net.minecraft.advancements.CriterionTriggerInstance
import net.minecraft.advancements.Advancement import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.advancements.AdvancementHolder
import net.minecraft.advancements.CriteriaTriggers
import net.minecraft.advancements.Criterion
import net.minecraft.advancements.critereon.InventoryChangeTrigger import net.minecraft.advancements.critereon.InventoryChangeTrigger
import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.advancements.critereon.ItemPredicate
import net.minecraft.advancements.critereon.MinMaxBounds import net.minecraft.advancements.critereon.MinMaxBounds
import net.minecraft.data.DataGenerator
import net.minecraft.data.recipes.RecipeBuilder import net.minecraft.data.recipes.RecipeBuilder
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.data.recipes.RecipeProvider import net.minecraft.data.recipes.RecipeProvider
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
@ -19,13 +16,8 @@ import net.minecraft.util.valueproviders.FloatProvider
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.ShapedRecipePattern
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import net.neoforged.neoforge.common.conditions.ICondition import ru.dbotthepony.mc.otm.core.registryName
import net.neoforged.neoforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.util.ResourceLocation
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.recipe.MicrowaveRecipe import ru.dbotthepony.mc.otm.recipe.MicrowaveRecipe
import ru.dbotthepony.mc.otm.recipe.PlatePressRecipe import ru.dbotthepony.mc.otm.recipe.PlatePressRecipe
@ -34,24 +26,26 @@ import java.util.stream.Stream
private typealias RecipeBuilderCallback = (MatteryRecipeProvider, consumer: RecipeOutput) -> Unit private typealias RecipeBuilderCallback = (MatteryRecipeProvider, consumer: RecipeOutput) -> Unit
fun has(p_176521_: MinMaxBounds.Ints, p_176522_: ItemLike): Criterion<InventoryChangeTrigger.TriggerInstance> { fun has(p_176521_: MinMaxBounds.Ints, p_176522_: ItemLike): CriterionTriggerInstance {
return inventoryTrigger(ItemPredicate.Builder.item().of(p_176522_).withCount(p_176521_).build()) return inventoryTrigger(ItemPredicate.Builder.item().of(p_176522_).withCount(p_176521_).build())
} }
fun has(p_125978_: ItemLike): Criterion<InventoryChangeTrigger.TriggerInstance> { fun has(p_125978_: ItemLike): CriterionTriggerInstance {
return inventoryTrigger(ItemPredicate.Builder.item().of(p_125978_).build()) return inventoryTrigger(ItemPredicate.Builder.item().of(p_125978_).build())
} }
fun has(p_125976_: TagKey<Item>): Criterion<InventoryChangeTrigger.TriggerInstance> { fun has(p_125976_: TagKey<Item>): CriterionTriggerInstance {
return inventoryTrigger(ItemPredicate.Builder.item().of(p_125976_).build()) return inventoryTrigger(ItemPredicate.Builder.item().of(p_125976_).build())
} }
fun inventoryTrigger(vararg p_126012_: ItemPredicate): Criterion<InventoryChangeTrigger.TriggerInstance> { fun inventoryTrigger(vararg p_126012_: ItemPredicate): CriterionTriggerInstance {
return CriteriaTriggers.INVENTORY_CHANGED.createCriterion(InventoryChangeTrigger.TriggerInstance( return InventoryChangeTrigger.TriggerInstance(
Optional.empty(), EntityPredicate.Composite.ANY,
InventoryChangeTrigger.TriggerInstance.Slots.ANY, MinMaxBounds.Ints.ANY,
ImmutableList.copyOf(p_126012_) MinMaxBounds.Ints.ANY,
)) MinMaxBounds.Ints.ANY,
p_126012_
)
} }
fun multiIngredient(vararg items: Any) : Ingredient { fun multiIngredient(vararg items: Any) : Ingredient {
@ -87,28 +81,7 @@ fun <T : RecipeBuilder> T.unlockedBy(item: TagKey<Item>): T {
return this return this
} }
fun <IN : Recipe<*>> RecipeOutput.map(mapper: (IN) -> Recipe<*>): RecipeOutput { class MatteryRecipeProvider(generatorIn: DataGenerator) : RecipeProvider(generatorIn) {
return object : RecipeOutput {
override fun advancement(): Advancement.Builder {
return this@map.advancement()
}
override fun accept(
id: ResourceLocation,
recipe: Recipe<*>,
advancement: AdvancementHolder?,
vararg conditions: ICondition?
) {
this@map.accept(id, mapper(recipe as IN), advancement, *conditions)
}
}
}
fun RecipeOutput.accept(id: ResourceLocation, recipe: Recipe<*>) {
accept(id, recipe, null)
}
class MatteryRecipeProvider(generatorIn: GatherDataEvent) : RecipeProvider(generatorIn.generator.packOutput, generatorIn.lookupProvider) {
private val callbacks = LinkedList<RecipeBuilderCallback>() private val callbacks = LinkedList<RecipeBuilderCallback>()
fun exec(callback: RecipeBuilderCallback): MatteryRecipeProvider { fun exec(callback: RecipeBuilderCallback): MatteryRecipeProvider {
@ -116,7 +89,7 @@ class MatteryRecipeProvider(generatorIn: GatherDataEvent) : RecipeProvider(gener
return this return this
} }
override fun buildRecipes(callback: RecipeOutput) { override fun buildCraftingRecipes(callback: RecipeOutput) {
for (lambda in callbacks) { for (lambda in callbacks) {
lambda(this, callback) lambda(this, callback)
} }
@ -124,25 +97,26 @@ class MatteryRecipeProvider(generatorIn: GatherDataEvent) : RecipeProvider(gener
fun plate(id: String, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) { fun plate(id: String, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) {
exec { _, consumer -> exec { _, consumer ->
consumer.accept(modLocation("plates/$id"), PlatePressRecipe( consumer.accept(PlatePressRecipe(
Ingredient.of(ItemTags.create(ResourceLocation("c", "ingots/$id"))), modLocation("plates/$id"),
Ingredient.of(ItemTags.create(ResourceLocation("c", "plates/$id"))), Ingredient.of(ItemTags.create(ResourceLocation("forge", "ingots/$id"))),
Ingredient.of(ItemTags.create(ResourceLocation("forge", "plates/$id"))),
count, count,
workTicks, workTicks,
experience = experience experience = experience
)) ).toFinished())
} }
} }
fun plate(id: String, ingredient: Ingredient, result: Ingredient, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) { fun plate(id: String, ingredient: Ingredient, result: Ingredient, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) {
exec { it, callback -> exec { it, callback ->
callback.accept(modLocation("plate_$id"), PlatePressRecipe(ingredient, result, count, workTicks, experience = experience)) callback.accept(PlatePressRecipe(modLocation("plates/$id"), ingredient, result, count, workTicks, experience = experience).toFinished())
} }
} }
fun microwave(id: String, ingredient: Ingredient, result: Ingredient, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) { fun microwave(id: String, ingredient: Ingredient, result: Ingredient, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) {
exec { it, callback -> exec { it, callback ->
callback.accept(modLocation("microwave/$id"), MicrowaveRecipe(ingredient, result, count, workTicks, experience = experience)) callback.accept(MicrowaveRecipe(modLocation("microwave/$id"), ingredient, result, count, workTicks, experience = experience).toFinished())
} }
} }
} }

View File

@ -1,187 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.data.recipes.ShapelessRecipeBuilder
import net.minecraft.world.item.ItemStack
import net.neoforged.neoforge.common.Tags
import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addMultiblockRecipes(consumer: RecipeOutput) {
val machinesCategory = RecipeCategory.DECORATIONS
// energy interface
MatteryRecipe(MItems.ENERGY_INPUT_INTERFACE, category = machinesCategory)
.rowB(MItems.ENERGY_BUS)
.row(MItems.ELECTRIC_PARTS, MItems.MACHINE_FRAME, MItems.ELECTRIC_PARTS)
.build(consumer)
ShapelessRecipeBuilder.shapeless(machinesCategory, ItemStack(MItems.ENERGY_INPUT_INTERFACE))
.requires(MItems.ENERGY_OUTPUT_INTERFACE)
.unlockedBy(MItems.ENERGY_OUTPUT_INTERFACE)
.unlockedBy(MItems.ENERGY_INPUT_INTERFACE)
.save(consumer, modLocation("energy_interface_to_input"))
MatteryRecipe(MItems.ENERGY_OUTPUT_INTERFACE, category = machinesCategory)
.row(MItems.ELECTRIC_PARTS, MItems.MACHINE_FRAME, MItems.ELECTRIC_PARTS)
.rowB(MItems.ENERGY_BUS)
.build(consumer)
ShapelessRecipeBuilder.shapeless(machinesCategory, ItemStack(MItems.ENERGY_OUTPUT_INTERFACE))
.requires(MItems.ENERGY_INPUT_INTERFACE)
.unlockedBy(MItems.ENERGY_OUTPUT_INTERFACE)
.unlockedBy(MItems.ENERGY_INPUT_INTERFACE)
.save(consumer, modLocation("energy_interface_to_output"))
// energy hatch
MatteryRecipe(MItems.ENERGY_INPUT_HATCH, category = machinesCategory)
.rowAC(MItemTags.GOLD_WIRES, MItemTags.GOLD_WIRES)
.row(MItems.ELECTRIC_PARTS, MItems.ENERGY_INPUT_INTERFACE, MItems.ELECTRIC_PARTS)
.row(Tags.Items.DUSTS_REDSTONE, MItemTags.DILITHIUM_GEMS, Tags.Items.DUSTS_REDSTONE)
.build(consumer)
MatteryRecipe(MItems.ENERGY_OUTPUT_HATCH, category = machinesCategory)
.row(Tags.Items.DUSTS_REDSTONE, MItemTags.DILITHIUM_GEMS, Tags.Items.DUSTS_REDSTONE)
.row(MItems.ELECTRIC_PARTS, MItems.ENERGY_OUTPUT_INTERFACE, MItems.ELECTRIC_PARTS)
.rowAC(MItemTags.GOLD_WIRES, MItemTags.GOLD_WIRES)
.build(consumer)
MatteryRecipe(MItems.ENERGY_INPUT_HATCH, category = machinesCategory)
.rowB(MItems.ENERGY_OUTPUT_HATCH)
.setUpgradeSource(MItems.ENERGY_OUTPUT_HATCH)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
.build(consumer, "from_output")
MatteryRecipe(MItems.ENERGY_OUTPUT_HATCH, category = machinesCategory)
.rowB(MItems.ENERGY_INPUT_HATCH)
.setUpgradeSource(MItems.ENERGY_INPUT_HATCH)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
.build(consumer, "from_input")
// item hatch
MatteryRecipe(MItems.ITEM_INPUT_HATCH, category = machinesCategory)
.rowB(MItemTags.BASIC_CIRCUIT)
.row(MItems.MECHANICAL_PARTS, MItemTags.CARGO_CRATES, MItems.MECHANICAL_PARTS)
.build(consumer)
MatteryRecipe(MItems.ITEM_OUTPUT_HATCH, category = machinesCategory)
.row(MItems.MECHANICAL_PARTS, MItemTags.CARGO_CRATES, MItems.MECHANICAL_PARTS)
.rowB(MItemTags.BASIC_CIRCUIT)
.build(consumer)
ShapelessRecipeBuilder.shapeless(machinesCategory, ItemStack(MItems.ITEM_INPUT_HATCH))
.requires(MItems.ITEM_OUTPUT_HATCH)
.unlockedBy(MItems.ITEM_INPUT_HATCH)
.unlockedBy(MItems.ITEM_OUTPUT_HATCH)
.save(consumer, modLocation("item_hatch_to_input"))
ShapelessRecipeBuilder.shapeless(machinesCategory, ItemStack(MItems.ITEM_OUTPUT_HATCH))
.requires(MItems.ITEM_INPUT_HATCH)
.unlockedBy(MItems.ITEM_INPUT_HATCH)
.unlockedBy(MItems.ITEM_OUTPUT_HATCH)
.save(consumer, modLocation("item_hatch_to_output"))
// matter hatch
MatteryRecipe(MItems.MATTER_INPUT_HATCH, category = machinesCategory)
.rowB(MItems.MATTER_IO_PORT)
.row(MItems.MECHANICAL_PARTS, MItems.MACHINE_FRAME, MItems.ELECTRIC_PARTS)
.rowAC(MItems.MATTER_CAPACITOR_PARTS, MItems.MATTER_CAPACITOR_PARTS)
.build(consumer)
MatteryRecipe(MItems.MATTER_OUTPUT_HATCH, category = machinesCategory)
.rowAC(MItems.MATTER_CAPACITOR_PARTS, MItems.MATTER_CAPACITOR_PARTS)
.row(MItems.MECHANICAL_PARTS, MItems.MACHINE_FRAME, MItems.ELECTRIC_PARTS)
.rowB(MItems.MATTER_IO_PORT)
.build(consumer)
MatteryRecipe(MItems.MATTER_INPUT_HATCH, category = machinesCategory)
.rowB(MItems.MATTER_OUTPUT_HATCH)
.setUpgradeSource(MItems.MATTER_OUTPUT_HATCH)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
.build(consumer, "from_output")
MatteryRecipe(MItems.MATTER_OUTPUT_HATCH, category = machinesCategory)
.rowB(MItems.MATTER_INPUT_HATCH)
.setUpgradeSource(MItems.MATTER_INPUT_HATCH)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
.build(consumer, "from_input")
// misc
MatteryRecipe(MItems.GENERATOR_BLOCK, category = machinesCategory)
.row(MItems.ELECTRIC_PARTS, MItems.ELECTROMOTOR, MItems.ELECTRIC_PARTS)
.row(MItems.ELECTROMOTOR, MItems.MACHINE_FRAME, MItems.ELECTROMOTOR)
.row(MItems.ELECTRIC_PARTS, MItems.ELECTROMOTOR, MItems.ELECTRIC_PARTS)
.build(consumer)
MatteryRecipe(MItems.MODULAR_FRAME, count = 4, category = machinesCategory)
.row(MItemTags.IRON_PLATES, Tags.Items.INGOTS_IRON, MItemTags.IRON_PLATES)
.rowAC(Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_IRON)
.row(MItemTags.IRON_PLATES, Tags.Items.INGOTS_IRON, MItemTags.IRON_PLATES)
.unlockedBy(MItemTags.IRON_PLATES)
.build(consumer)
MatteryRecipe(MItems.HEAVY_MODULAR_FRAME, count = 2, category = machinesCategory)
.row(MItems.WITHERED_STEEL, MItems.REINFORCED_IRON_PLATE, MItems.WITHERED_STEEL,)
.row(MItems.REINFORCED_IRON_PLATE, MItems.MODULAR_FRAME, MItems.REINFORCED_IRON_PLATE)
.row(MItems.WITHERED_STEEL, MItems.REINFORCED_IRON_PLATE, MItems.WITHERED_STEEL,)
.unlockedBy(MItems.MODULAR_FRAME)
.build(consumer)
// blackhole generator
MatteryRecipe(MItems.BLACK_HOLE_GENERATOR, category = machinesCategory)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.BLACK_HOLE_SCANNER, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.DILITHIUM_GEMS, MItems.MACHINE_FRAME, MItemTags.DILITHIUM_GEMS)
.row(MItems.MATTER_CAPACITOR_PARTS, Tags.Items.GEMS_DIAMOND, MItems.MATTER_CAPACITOR_PARTS)
.build(consumer)
MatteryRecipe(MItems.TRITANIUM_HULL, count = 2, category = machinesCategory)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.IRON_PLATES, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.IRON_PLATES, MItems.MODULAR_FRAME, MItemTags.IRON_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItemTags.IRON_PLATES, MItemTags.TRITANIUM_PLATES)
.build(consumer)
MatteryRecipe(MItems.MATTER_INJECTOR, category = machinesCategory)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.MATTER_TRANSFORM_MATRIX, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.DILITHIUM_GEMS, MItems.MACHINE_FRAME, MItemTags.DILITHIUM_GEMS)
.row(MItems.MATTER_IO_PORT, MItems.GRAVITATION_FIELD_SENSOR, MItems.MATTER_IO_PORT)
.build(consumer)
MatteryRecipe(MItems.ANTIMATTER_INJECTOR, category = machinesCategory)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.ANTIMATTER_TRANSFORM_MATRIX, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.DILITHIUM_GEMS, MItems.MACHINE_FRAME, MItemTags.DILITHIUM_GEMS)
.row(MItems.MATTER_IO_PORT, MItems.GRAVITATION_FIELD_SENSOR, MItems.MATTER_IO_PORT)
.build(consumer)
MatteryRecipe(MItems.HIGH_ENERGY_PARTICLE_COLLECTOR, category = machinesCategory)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.MECHANICAL_PARTS, MItemTags.ADVANCED_CIRCUIT)
.row(Tags.Items.GEMS_QUARTZ, MItems.MACHINE_FRAME, Tags.Items.GEMS_QUARTZ)
.row(MItemTags.DILITHIUM_GEMS, MItems.GRAVITATION_FIELD_LIMITER, MItemTags.DILITHIUM_GEMS)
.build(consumer)
// flywheel
MatteryRecipe(MItems.FLYWHEEL_SHAFT, category = machinesCategory)
.row(MItemTags.TRITANIUM_PLATES, MItems.MECHANICAL_PARTS, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.MECHANICAL_PARTS, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.MECHANICAL_PARTS, MItemTags.TRITANIUM_PLATES)
.build(consumer)
MatteryRecipe(MItems.FLYWHEEL_BEARING, category = machinesCategory)
.row(MItemTags.TRITANIUM_PLATES, MItems.MECHANICAL_PARTS, MItemTags.TRITANIUM_PLATES)
.row(MItems.MECHANICAL_PARTS, MItems.MECHANICAL_PARTS, MItems.MECHANICAL_PARTS)
.row(MItemTags.TRITANIUM_PLATES, MItems.MECHANICAL_PARTS, MItemTags.TRITANIUM_PLATES)
.build(consumer)
MatteryRecipe(MItems.FLYWHEEL_HOUSING, count = 4, category = machinesCategory)
.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES)
.row(MItemTags.TRITANIUM_PLATES, MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES)
.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.CARBON_PLATES)
.build(consumer)
MatteryRecipe(MItems.FLYWHEEL_BATTERY, category = machinesCategory)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.FLYWHEEL_HOUSING, MItemTags.ADVANCED_CIRCUIT)
.row(MItemTags.GOLD_WIRES, MItemTags.COPPER_WIRES, MItemTags.GOLD_WIRES)
.build(consumer)
}

View File

@ -1,51 +1,29 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import mekanism.api.recipes.basic.BasicPaintingRecipe
import mekanism.api.recipes.ingredients.creator.IngredientCreatorAccess
import mekanism.api.text.EnumColor
import mekanism.common.registries.MekanismChemicals
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.neoforged.fml.ModList import ru.dbotthepony.mc.otm.core.registryName
import net.neoforged.neoforge.common.conditions.ModLoadedCondition
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.recipe.PainterArmorDyeRecipe import ru.dbotthepony.mc.otm.recipe.PainterArmorDyeRecipe
import ru.dbotthepony.mc.otm.recipe.PainterRecipe import ru.dbotthepony.mc.otm.recipe.PainterRecipe
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.game.MBlocks
private val Item.recipeName get() = registryName!!.namespace + "/" + registryName!!.path private val Item.recipeName get() = registryName!!.namespace + "/" + registryName!!.path
private val isMekanismLoaded by lazy {
ModList.get().isLoaded("mekanism")
}
private fun generate(consumer: RecipeOutput, items: Map<out DyeColor?, Item>, amount: Int = 1) { private fun generate(consumer: RecipeOutput, items: Map<out DyeColor?, Item>, amount: Int = 1) {
for ((targetColor, targetItem) in items) { for ((targetColor, targetItem) in items) {
if (targetColor == null) continue if (targetColor == null) continue
consumer.accept(modLocation("painter/" + targetItem.recipeName), PainterRecipe( consumer.accept(PainterRecipe(
modLocation("painter/" + targetItem.recipeName),
Ingredient.of(items.entries.stream().filter { it.key != null && it.key != targetColor }.map { ItemStack(it.value) }), Ingredient.of(items.entries.stream().filter { it.key != null && it.key != targetColor }.map { ItemStack(it.value) }),
ItemStack(targetItem), ItemStack(targetItem),
mapOf(targetColor to amount, null to 15) mapOf(targetColor to amount)
)) ).toFinished())
if (isMekanismLoaded) {
addMekanismPaintRecipe(consumer,
modLocation("mekanism/painter/" + targetItem.recipeName),
Ingredient.of(items.entries.stream().filter { it.key != null && it.key != targetColor }.map { ItemStack(it.value) }),
ItemStack(targetItem),
targetColor,
amount
)
}
} }
} }
@ -58,71 +36,37 @@ private fun generate(consumer: RecipeOutput, default: Item, items: Map<out DyeCo
for ((k1, v1) in items) { for ((k1, v1) in items) {
if (k1 == null) continue if (k1 == null) continue
consumer.accept(modLocation("painter/" + default.recipeName + "/" + v1.recipeName), PainterRecipe( consumer.accept(PainterRecipe(
modLocation("painter/" + default.recipeName + "/" + v1.recipeName),
Ingredient.of(default), Ingredient.of(default),
ItemStack(v1), ItemStack(v1),
mapOf(k1 to amount) mapOf(k1 to amount)
)) ).toFinished())
if (isMekanismLoaded) {
addMekanismPaintRecipe(consumer,
modLocation("mekanism/painter/" + default.recipeName + "/" + v1.recipeName),
Ingredient.of(default),
ItemStack(v1),
k1,
amount
)
}
} }
} }
private fun cleaning(consumer: RecipeOutput, to: Item, from: Map<out DyeColor?, Item>, suffix: String = "") { private fun cleaning(consumer: RecipeOutput, to: Item, from: Map<out DyeColor?, Item>) {
cleaning(consumer, to, from.entries.stream().filter { it.key != null }.map { it.value }.toList(), suffix) consumer.accept(PainterRecipe(
} modLocation("painter/cleaning/" + to.recipeName),
Ingredient.of(from.entries.stream().filter { it.key != null }.map { ItemStack(it.value) }),
private fun cleaning(consumer: RecipeOutput, to: Item, from: Collection<Item>, suffix: String = "") {
consumer.accept(modLocation("painter/cleaning/" + to.recipeName + suffix), PainterRecipe(
Ingredient.of(from.stream().map { ItemStack(it) }),
ItemStack(to), ItemStack(to),
mapOf(null to 15) mapOf(null to 15)
)) ).toFinished())
} }
private fun striped(consumer: RecipeOutput, name: String, items: List<Pair<Item, Pair<DyeColor, DyeColor>>>, base: Map<DyeColor, Item>) { private fun striped(consumer: RecipeOutput, name: String, items: List<Pair<Item, Pair<DyeColor, DyeColor>>>, base: Map<DyeColor, Item>) {
for ((stripeItem, colors) in items) { for ((stripeItem, colors) in items) {
val (baseColor, stripe) = colors val (baseColor, stripe) = colors
consumer.accept(modLocation("painter/stripes_$name/${baseColor.getName()}/${stripe.getName()}"), PainterRecipe( consumer.accept(PainterRecipe(
modLocation("painter/stripes_$name/${baseColor.getName()}/${stripe.getName()}"),
Ingredient.of(base[baseColor]), Ingredient.of(base[baseColor]),
ItemStack(stripeItem), ItemStack(stripeItem),
setOf(stripe) setOf(stripe)
)) ).toFinished())
if (isMekanismLoaded) {
addMekanismPaintRecipe(consumer,
modLocation("mekanism/painter/stripes_$name/${baseColor.getName()}/${stripe.getName()}"),
Ingredient.of(base[baseColor]),
ItemStack(stripeItem),
stripe
)
}
} }
} }
private fun addMekanismPaintRecipe(consumer: RecipeOutput, location: ResourceLocation, input: Ingredient, output: ItemStack, dye: DyeColor, amount: Int = 1, dyeMul: Float = 0.125F) {
if (output.item.registryName?.namespace == "minecraft") return // mekanism already has painting recipes for vanilla
val color = EnumColor.entries.find{it.dyeColor == dye} ?: return
val pigment = MekanismChemicals.PIGMENT_COLOR_LOOKUP.get(color) ?: return
consumer.accept(location, BasicPaintingRecipe(
IngredientCreatorAccess.item().from(input),
IngredientCreatorAccess.chemicalStack().from(pigment, (256L * amount * dyeMul).toLong()),
output.copy(),
false
), null, ModLoadedCondition("mekanism"))
}
fun addPainterRecipes(consumer: RecipeOutput) { fun addPainterRecipes(consumer: RecipeOutput) {
generate(consumer, mapOf( generate(consumer, mapOf(
DyeColor.WHITE to Items.WHITE_WOOL, DyeColor.WHITE to Items.WHITE_WOOL,
@ -357,12 +301,7 @@ fun addPainterRecipes(consumer: RecipeOutput) {
generate(consumer, list[null]!!,list) generate(consumer, list[null]!!,list)
} }
for (i in 0 until MBlocks.TRITANIUM_ANVIL_VARIANTS) {
generate(consumer, MItems.TRITANIUM_ANVIL[null]!![i], DyeColor.entries.associateWith { MItems.TRITANIUM_ANVIL[it]!![i] })
}
generate(consumer, MRegistry.COMPUTER_TERMINAL.item, MRegistry.COMPUTER_TERMINAL.items) generate(consumer, MRegistry.COMPUTER_TERMINAL.item, MRegistry.COMPUTER_TERMINAL.items)
generate(consumer, MRegistry.STAR_CHAIR.item, MRegistry.STAR_CHAIR.items)
generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items) generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items)
generate(consumer, MRegistry.VENT_ALTERNATIVE.item, MRegistry.VENT_ALTERNATIVE.items) generate(consumer, MRegistry.VENT_ALTERNATIVE.item, MRegistry.VENT_ALTERNATIVE.items)
@ -378,47 +317,37 @@ fun addPainterRecipes(consumer: RecipeOutput) {
striped(consumer, "walls", MRegistry.TRITANIUM_STRIPED_WALL.itemsWithColor, MRegistry.TRITANIUM_WALL.items) striped(consumer, "walls", MRegistry.TRITANIUM_STRIPED_WALL.itemsWithColor, MRegistry.TRITANIUM_WALL.items)
striped(consumer, "slabs", MRegistry.TRITANIUM_STRIPED_SLAB.itemsWithColor, MRegistry.TRITANIUM_SLAB.items) striped(consumer, "slabs", MRegistry.TRITANIUM_STRIPED_SLAB.itemsWithColor, MRegistry.TRITANIUM_SLAB.items)
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
consumer.accept(modLocation("painter/armor_dye_" + color.getName().lowercase()), PainterArmorDyeRecipe(mapOf(color to 1))) consumer.accept(PainterArmorDyeRecipe(modLocation("painter/armor_dye_" + color.getName().lowercase()), mapOf(color to 1)).toFinished())
} }
consumer.accept(modLocation("painter/armor_clear_dye"), PainterArmorDyeRecipe(mapOf(null to 15))) consumer.accept(PainterArmorDyeRecipe(modLocation("painter/armor_clear_dye"), mapOf(null to 15)).toFinished())
generate(consumer, MItems.TRITANIUM_STRIPED_BLOCK) consumer.accept(PainterRecipe(
generate(consumer, MItems.TRITANIUM_STRIPED_STAIRS) modLocation("painter/tritanium_yellow_stripe"),
generate(consumer, MItems.TRITANIUM_STRIPED_SLAB) Ingredient.of(MRegistry.TRITANIUM_BLOCK.item),
generate(consumer, MItems.TRITANIUM_STRIPED_WALL) ItemStack(MItems.TRITANIUM_STRIPED_BLOCK),
mapOf(DyeColor.YELLOW to 1)
).toFinished())
cleaning(consumer, MRegistry.TRITANIUM_BLOCK.item, MItems.TRITANIUM_STRIPED_BLOCK.values, "_from_striped") consumer.accept(PainterRecipe(
cleaning(consumer, MRegistry.TRITANIUM_STAIRS.item, MItems.TRITANIUM_STRIPED_STAIRS.values, "_from_striped") modLocation("painter/tritanium_yellow_stripe_stairs"),
cleaning(consumer, MRegistry.TRITANIUM_SLAB.item, MItems.TRITANIUM_STRIPED_SLAB.values, "_from_striped") Ingredient.of(MRegistry.TRITANIUM_STAIRS.item),
cleaning(consumer, MRegistry.TRITANIUM_WALL.item, MItems.TRITANIUM_STRIPED_WALL.values, "_from_striped") ItemStack(MItems.TRITANIUM_STRIPED_STAIRS),
mapOf(DyeColor.YELLOW to 1)
).toFinished())
for (color in DyeColor.entries) { consumer.accept(PainterRecipe(
consumer.accept(modLocation("painter/tritanium_${color.name.lowercase()}_stripe"), PainterRecipe( modLocation("painter/tritanium_yellow_stripe_slab"),
Ingredient.of(MRegistry.TRITANIUM_BLOCK.item), Ingredient.of(MRegistry.TRITANIUM_SLAB.item),
ItemStack(MItems.TRITANIUM_STRIPED_BLOCK[color]!!), ItemStack(MItems.TRITANIUM_STRIPED_SLAB),
mapOf(color to 1) mapOf(DyeColor.YELLOW to 1)
)) ).toFinished())
consumer.accept(modLocation("painter/tritanium_${color.name.lowercase()}_stripe_stairs"), PainterRecipe( consumer.accept(PainterRecipe(
Ingredient.of(MRegistry.TRITANIUM_STAIRS.item), modLocation("painter/tritanium_yellow_stripe_wall"),
ItemStack(MItems.TRITANIUM_STRIPED_STAIRS[color]!!), Ingredient.of(MRegistry.TRITANIUM_WALL.item),
mapOf(color to 1) ItemStack(MItems.TRITANIUM_STRIPED_WALL),
)) mapOf(DyeColor.YELLOW to 1)
).toFinished())
consumer.accept(modLocation("painter/tritanium_${color.name.lowercase()}_stripe_slab"), PainterRecipe(
Ingredient.of(MRegistry.TRITANIUM_SLAB.item),
ItemStack(MItems.TRITANIUM_STRIPED_SLAB[color]!!),
mapOf(color to 1)
))
consumer.accept(modLocation("painter/tritanium_${color.name.lowercase()}_stripe_wall"), PainterRecipe(
Ingredient.of(MRegistry.TRITANIUM_WALL.item),
ItemStack(MItems.TRITANIUM_STRIPED_WALL[color]!!),
mapOf(color to 1)
))
}
generate(consumer, MItems.GRILL[null]!!, MItems.GRILL)
} }

View File

@ -3,12 +3,12 @@ package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.util.valueproviders.ConstantFloat import net.minecraft.util.valueproviders.ConstantFloat
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
fun addPlatePressRecipes(provider: MatteryRecipeProvider) { fun addPlatePressRecipes(provider: MatteryRecipeProvider) {
val baselineMetals = arrayOf("iron" to 0.2f, "silver" to 0.3f, "bronze" to 0.3f, "lead" to 0.3f, "constantan" to 0.4f, "brass" to 0.3f, "nickel" to 0.5f) val baselineMetals = arrayOf("iron" to 0.2f, "silver" to 0.3f, "bronze" to 0.3f, "lead" to 0.3f, "constantan" to 0.4f, "brass" to 0.3f)
val softMetals = arrayOf("gold" to 0.4f, "aluminum" to 0.3f, "aluminium" to 0.3f, "copper" to 0.2f, "electrum" to 0.4f, "zinc" to 0.3f) val softMetals = arrayOf("gold" to 0.4f, "aluminum" to 0.3f, "aluminium" to 0.3f, "copper" to 0.2f, "electrum" to 0.4f, "zinc" to 0.3f)
val hardMetals = arrayOf("tritanium" to 0.5f, "steel" to 0.5f, "tungsten" to 0.55f, "uranium" to 0.5f) val hardMetals = arrayOf("tritanium" to 0.5f, "steel" to 0.5f, "tungsten" to 0.55f, "uranium" to 0.5f)
@ -25,5 +25,5 @@ fun addPlatePressRecipes(provider: MatteryRecipeProvider) {
} }
provider.plate("carbon", result = Ingredient.of(MItemTags.CARBON_PLATES), ingredient = Ingredient.of(Items.COAL), workTicks = 140, experience = ConstantFloat.of(0.3f)) provider.plate("carbon", result = Ingredient.of(MItemTags.CARBON_PLATES), ingredient = Ingredient.of(Items.COAL), workTicks = 140, experience = ConstantFloat.of(0.3f))
provider.plate("circuit_plating", result = Ingredient.of(MItems.CIRCUIT_PLATING), ingredient = Ingredient.of(Tags.Items.SANDS), workTicks = 120, experience = ConstantFloat.of(0.2f)) provider.plate("circuit_plating", result = Ingredient.of(MItems.CIRCUIT_PLATING), ingredient = Ingredient.of(Tags.Items.SAND), workTicks = 120, experience = ConstantFloat.of(0.2f))
} }

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory import net.minecraft.data.recipes.FinishedRecipe
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.data.recipes.ShapelessRecipeBuilder import net.minecraft.data.recipes.ShapelessRecipeBuilder
import net.minecraft.tags.TagKey import net.minecraft.tags.TagKey
import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeColor
@ -10,15 +9,18 @@ import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.level.ItemLike import net.minecraft.world.level.ItemLike
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.util.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import java.util.function.Consumer
typealias RecipeOutput = Consumer<FinishedRecipe>
fun hammerRecipe(output: ItemLike, input: ItemLike, consumer: RecipeOutput) { fun hammerRecipe(output: ItemLike, input: ItemLike, consumer: RecipeOutput) {
ShapelessRecipeBuilder(RecipeCategory.MISC, output, 1) ShapelessRecipeBuilder(output, 1)
.requires(MItemTags.TOOLS_HAMMERS) .requires(MItemTags.TOOLS_HAMMERS)
.requires(input) .requires(input)
.unlockedBy(MItemTags.TOOLS_HAMMERS) .unlockedBy(MItemTags.TOOLS_HAMMERS)
@ -27,7 +29,7 @@ fun hammerRecipe(output: ItemLike, input: ItemLike, consumer: RecipeOutput) {
} }
fun hammerRecipe(output: ItemLike, input: TagKey<Item>, consumer: RecipeOutput) { fun hammerRecipe(output: ItemLike, input: TagKey<Item>, consumer: RecipeOutput) {
ShapelessRecipeBuilder(RecipeCategory.MISC, output, 1) ShapelessRecipeBuilder(output, 1)
.requires(MItemTags.TOOLS_HAMMERS) .requires(MItemTags.TOOLS_HAMMERS)
.requires(input) .requires(input)
.unlockedBy(MItemTags.TOOLS_HAMMERS) .unlockedBy(MItemTags.TOOLS_HAMMERS)
@ -36,81 +38,29 @@ fun hammerRecipe(output: ItemLike, input: TagKey<Item>, consumer: RecipeOutput)
} }
fun addShapelessRecipes(consumer: RecipeOutput) { fun addShapelessRecipes(consumer: RecipeOutput) {
for (color in DyeColor.entries) { for (color in DyeColor.values()) {
ShapelessRecipeBuilder(RecipeCategory.TRANSPORTATION, MItems.CARGO_CRATE_MINECARTS[color]!!, 1) ShapelessRecipeBuilder(MItems.CARGO_CRATE_MINECARTS[color]!!, 1)
.requires(Items.MINECART) .requires(Items.MINECART)
.requires(MRegistry.CARGO_CRATES.items[color]!!) .requires(MRegistry.CARGO_CRATES.items[color]!!)
.unlockedBy(Items.MINECART) .unlockedBy(Items.MINECART)
.unlockedBy(MRegistry.CARGO_CRATES.items[color]!!) .unlockedBy(MRegistry.CARGO_CRATES.items[color]!!)
.save(consumer) .save(consumer)
ShapelessRecipeBuilder(RecipeCategory.TRANSPORTATION, MItems.CARGO_CRATE_MINECARTS[color]!!, 1) ShapelessRecipeBuilder(MItems.CARGO_CRATE_MINECARTS[color]!!, 1)
.requires(Ingredient.of(MItems.CARGO_CRATE_MINECARTS.entries.stream().filter { it.key != color }.map { ItemStack(it.value) })) .requires(Ingredient.of(MItems.CARGO_CRATE_MINECARTS.entries.stream().filter { it.key != color }.map { ItemStack(it.value) }))
.requires(color.tag) .requires(color.tag)
.unlockedBy(MItems.CARGO_CRATE_MINECARTS.entries.stream().filter { it.key != color }.map { it.value }) .unlockedBy(MItems.CARGO_CRATE_MINECARTS.entries.stream().filter { it.key != color }.map { it.value })
.save(consumer, modLocation(MItems.CARGO_CRATE_MINECARTS[color]!!.registryName!!.path + "_alt")) .save(consumer, modLocation(MItems.CARGO_CRATE_MINECARTS[color]!!.registryName!!.path + "_alt"))
} }
ShapelessRecipeBuilder(RecipeCategory.TRANSPORTATION, MItems.CARGO_CRATE_MINECARTS[null]!!, 1) ShapelessRecipeBuilder(MItems.CARGO_CRATE_MINECARTS[null]!!, 1)
.requires(Items.MINECART) .requires(Items.MINECART)
.requires(MRegistry.CARGO_CRATES.item) .requires(MRegistry.CARGO_CRATES.item)
.unlockedBy(Items.MINECART) .unlockedBy(Items.MINECART)
.unlockedBy(MRegistry.CARGO_CRATES.item) .unlockedBy(MRegistry.CARGO_CRATES.item)
.save(consumer) .save(consumer)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MItems.TRITANIUM_INGOT_BLOCK, 1)
.requires(Ingredient.of(MItemTags.TRITANIUM_INGOTS), 9)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.save(consumer)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MItems.TRITANIUM_RAW_BLOCK, 1)
.requires(Ingredient.of(MItemTags.TRITANIUM_ORE_CLUMPS), 9)
.unlockedBy(MItemTags.TRITANIUM_ORE_CLUMPS)
.save(consumer)
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.TRITANIUM_ORE_CLUMP, 9)
.requires(Ingredient.of(MItemTags.RAW_TRITANIUM_STORAGE))
.unlockedBy(MItemTags.RAW_TRITANIUM_STORAGE)
.save(consumer, modLocation("raw_tritanium_from_storage"))
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 9)
.requires(Ingredient.of(MItemTags.TRITANIUM_INGOTS_STORAGE))
.unlockedBy(MItemTags.TRITANIUM_INGOTS_STORAGE)
.save(consumer, modLocation("tritanium_ingot_from_storage"))
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.TRITANIUM_NUGGET, 9)
.requires(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_NUGGETS)
.save(consumer)
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.TRITANIUM_INGOT, 1)
.requires(Ingredient.of(MItemTags.TRITANIUM_NUGGETS), 9)
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
.unlockedBy(MItemTags.TRITANIUM_NUGGETS)
.save(consumer, modLocation("ingot_from_nuggets"))
hammerRecipe(MItems.TRITANIUM_PLATE, MItemTags.TRITANIUM_INGOTS, consumer) hammerRecipe(MItems.TRITANIUM_PLATE, MItemTags.TRITANIUM_INGOTS, consumer)
hammerRecipe(MItems.IRON_PLATE, Tags.Items.INGOTS_IRON, consumer) hammerRecipe(MItems.IRON_PLATE, Tags.Items.INGOTS_IRON, consumer)
hammerRecipe(MItems.GOLD_PLATE, Tags.Items.INGOTS_GOLD, consumer) hammerRecipe(MItems.GOLD_PLATE, Tags.Items.INGOTS_GOLD, consumer)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MItems.WITHERED_STEEL_BLOCK, 1)
.requires(Ingredient.of(MItems.WITHERED_STEEL), 9)
.unlockedBy(MItems.WITHERED_STEEL)
.save(consumer)
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.WITHERED_STEEL, 9)
.requires(Ingredient.of(MItems.WITHERED_STEEL_BLOCK))
.unlockedBy(MItems.WITHERED_STEEL_BLOCK)
.save(consumer)
ShapelessRecipeBuilder(RecipeCategory.BUILDING_BLOCKS, MItems.ROFLITE_ALLOY_BLOCK, 1)
.requires(Ingredient.of(MItems.ROFLITE_ALLOY_INGOT), 9)
.unlockedBy(MItems.ROFLITE_ALLOY_INGOT)
.save(consumer)
ShapelessRecipeBuilder(RecipeCategory.MISC, MItems.ROFLITE_ALLOY_INGOT, 9)
.requires(Ingredient.of(MItems.ROFLITE_ALLOY_BLOCK))
.unlockedBy(MItems.ROFLITE_ALLOY_BLOCK)
.save(consumer)
} }

View File

@ -1,22 +1,20 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory import net.minecraftforge.common.Tags
import net.minecraft.data.recipes.RecipeOutput
import net.neoforged.neoforge.common.Tags
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
fun addStorageItemRecipes(consumer: RecipeOutput) { fun addStorageItemRecipes(consumer: RecipeOutput) {
// простые батарейки // простые батарейки
MatteryRecipe(MItems.BATTERY_CRUDE, category = RecipeCategory.MISC) MatteryRecipe(MItems.BATTERY_CRUDE)
.rowB(Tags.Items.DUSTS_REDSTONE) .rowB(Tags.Items.DUSTS_REDSTONE)
.rowB(Tags.Items.CROPS_POTATO) .rowB(Tags.Items.CROPS_POTATO)
.rowB(Tags.Items.INGOTS_IRON) .rowB(Tags.Items.INGOTS_IRON)
.unlockedBy(Tags.Items.CROPS_POTATO) .unlockedBy(Tags.Items.CROPS_POTATO)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.BATTERY_BASIC, category = RecipeCategory.MISC) MatteryRecipe(MItems.BATTERY_BASIC)
.rowAC(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE) .rowAC(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE)
.rowB(MItems.ELECTRIC_PARTS) .rowB(MItems.ELECTRIC_PARTS)
.rowB(MItemTags.IRON_PLATES) .rowB(MItemTags.IRON_PLATES)
@ -24,48 +22,48 @@ fun addStorageItemRecipes(consumer: RecipeOutput) {
.unlockedBy(MItems.ELECTRIC_PARTS) .unlockedBy(MItems.ELECTRIC_PARTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.BATTERY_NORMAL, category = RecipeCategory.MISC) MatteryRecipe(MItems.BATTERY_NORMAL)
.setUpgradeSource(MItems.BATTERY_BASIC) .setUpgradeSource(MItems.BATTERY_BASIC)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents) .addUpgradeOps(UpgradeRecipe.All)
.rowB(MItems.ELECTRIC_PARTS) .rowB(MItems.ELECTRIC_PARTS)
.row(MItemTags.COPPER_WIRES, MItems.BATTERY_BASIC, MItemTags.COPPER_WIRES) .row(MItemTags.COPPER_WIRES, MItems.BATTERY_BASIC, MItemTags.COPPER_WIRES)
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.BATTERY_DENSE, category = RecipeCategory.MISC) MatteryRecipe(MItems.BATTERY_DENSE)
.setUpgradeSource(MItems.BATTERY_NORMAL) .setUpgradeSource(MItems.BATTERY_NORMAL)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents) .addUpgradeOps(UpgradeRecipe.All)
.row(Tags.Items.DUSTS_REDSTONE, MItems.ENERGY_BUS, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, MItems.ENERGY_BUS, Tags.Items.DUSTS_REDSTONE)
.row(MItemTags.GOLD_WIRES, MItems.BATTERY_NORMAL, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, MItems.BATTERY_NORMAL, MItemTags.GOLD_WIRES)
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.BATTERY_CAPACITOR, category = RecipeCategory.MISC) MatteryRecipe(MItems.BATTERY_CAPACITOR)
.setUpgradeSource(MItems.BATTERY_NORMAL) .setUpgradeSource(MItems.BATTERY_NORMAL)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents) .addUpgradeOps(UpgradeRecipe.All)
.row(Tags.Items.DUSTS_REDSTONE, MItems.ENERGY_BUS, Tags.Items.DUSTS_REDSTONE) .row(Tags.Items.DUSTS_REDSTONE, MItems.ENERGY_BUS, Tags.Items.DUSTS_REDSTONE)
.row(MItemTags.GOLD_WIRES, MItems.BATTERY_NORMAL, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, MItems.BATTERY_NORMAL, MItemTags.GOLD_WIRES)
.row(MItemTags.GOLD_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.GOLD_WIRES) .row(MItemTags.GOLD_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.GOLD_WIRES)
.build(consumer) .build(consumer)
// накопители материи // накопители материи
MatteryRecipe(MItems.MATTER_CAPACITOR_BASIC, category = RecipeCategory.MISC) MatteryRecipe(MItems.MATTER_CAPACITOR_BASIC)
.row(MItemTags.IRON_PLATES, MItems.MATTER_CAPACITOR_PARTS, MItemTags.HARDENED_GLASS) .row(MItemTags.IRON_PLATES, MItems.MATTER_CAPACITOR_PARTS, MItemTags.HARDENED_GLASS)
.unlockedBy(MItems.MATTER_CAPACITOR_PARTS) .unlockedBy(MItems.MATTER_CAPACITOR_PARTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MATTER_CAPACITOR_NORMAL, category = RecipeCategory.MISC) MatteryRecipe(MItems.MATTER_CAPACITOR_NORMAL)
.setUpgradeSource(MItems.MATTER_CAPACITOR_BASIC) .setUpgradeSource(MItems.MATTER_CAPACITOR_BASIC)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents) .addUpgradeOps(UpgradeRecipe.All)
.rowB(MItems.MATTER_CAPACITOR_PARTS) .rowB(MItems.MATTER_CAPACITOR_PARTS)
.row(MItemTags.TRITANIUM_PLATES, MItems.MATTER_CAPACITOR_BASIC, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MATTER_CAPACITOR_BASIC, MItemTags.TRITANIUM_PLATES)
.rowB(Tags.Items.GEMS_DIAMOND) .rowB(Tags.Items.GEMS_DIAMOND)
.unlockedBy(MItems.MATTER_CAPACITOR_BASIC) .unlockedBy(MItems.MATTER_CAPACITOR_BASIC)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.MATTER_CAPACITOR_DENSE, category = RecipeCategory.MISC) MatteryRecipe(MItems.MATTER_CAPACITOR_DENSE)
.setUpgradeSource(MItems.MATTER_CAPACITOR_NORMAL) .setUpgradeSource(MItems.MATTER_CAPACITOR_NORMAL)
.addUpgradeOps(UpgradeRecipe.CopyAllComponents) .addUpgradeOps(UpgradeRecipe.All)
.row(MItems.MATTER_CAPACITOR_PARTS, MItemTags.HARDENED_GLASS, MItems.MATTER_CAPACITOR_PARTS) .row(MItems.MATTER_CAPACITOR_PARTS, MItemTags.HARDENED_GLASS, MItems.MATTER_CAPACITOR_PARTS)
.row(MItemTags.TRITANIUM_PLATES, MItems.MATTER_CAPACITOR_NORMAL, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.MATTER_CAPACITOR_NORMAL, MItemTags.TRITANIUM_PLATES)
.rowAC(Tags.Items.ENDER_PEARLS, Tags.Items.ENDER_PEARLS) .rowAC(Tags.Items.ENDER_PEARLS, Tags.Items.ENDER_PEARLS)

View File

@ -1,54 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory
import net.minecraft.data.recipes.RecipeOutput
import net.minecraft.data.recipes.ShapelessRecipeBuilder
import net.minecraft.data.recipes.SimpleCookingRecipeBuilder
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient
import net.neoforged.neoforge.common.Tags
import ru.dbotthepony.mc.otm.util.registryName
import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addSuspiciousRecipes(consumer: RecipeOutput) {
for (item in MItems.SUSPICIOUS_FOODS.ITEMS) {
if (item.defaultMaxStackSize == 1) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, ItemStack(item))
.requires(item.mimicking())
.unlockedBy(MItems.PILL_NOT_NORMAL)
.requires(MItems.PILL_NOT_NORMAL)
.save(consumer)
} else {
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, ItemStack(item, 8))
.requires(item.mimicking(), 8)
.unlockedBy(MItems.PILL_NOT_NORMAL)
.requires(MItems.PILL_NOT_NORMAL)
.save(consumer)
}
}
MatteryRecipe(MItems.SUSPICIOUS_FOODS.GOLDEN_CARROT, 8, RecipeCategory.FOOD)
.row(MItems.SUSPICIOUS_FOODS.CARROT, MItems.SUSPICIOUS_FOODS.CARROT, MItems.SUSPICIOUS_FOODS.CARROT)
.row(MItems.SUSPICIOUS_FOODS.CARROT, Tags.Items.NUGGETS_GOLD, MItems.SUSPICIOUS_FOODS.CARROT)
.row(MItems.SUSPICIOUS_FOODS.CARROT, MItems.SUSPICIOUS_FOODS.CARROT, MItems.SUSPICIOUS_FOODS.CARROT)
.unlockedBy(MItems.SUSPICIOUS_FOODS.CARROT)
.build(consumer, "upgrade")
val cooking = listOf(
MItems.SUSPICIOUS_FOODS.POTATO to MItems.SUSPICIOUS_FOODS.BAKED_POTATO,
MItems.SUSPICIOUS_FOODS.BEEF to MItems.SUSPICIOUS_FOODS.COOKED_BEEF,
MItems.SUSPICIOUS_FOODS.CHICKEN to MItems.SUSPICIOUS_FOODS.COOKED_CHICKEN,
MItems.SUSPICIOUS_FOODS.COD to MItems.SUSPICIOUS_FOODS.COOKED_COD,
MItems.SUSPICIOUS_FOODS.MUTTON to MItems.SUSPICIOUS_FOODS.COOKED_MUTTON,
MItems.SUSPICIOUS_FOODS.PORKCHOP to MItems.SUSPICIOUS_FOODS.COOKED_PORKCHOP,
MItems.SUSPICIOUS_FOODS.RABBIT to MItems.SUSPICIOUS_FOODS.COOKED_RABBIT,
MItems.SUSPICIOUS_FOODS.SALMON to MItems.SUSPICIOUS_FOODS.COOKED_SALMON,
)
for ((source, target) in cooking) {
SimpleCookingRecipeBuilder.smelting(Ingredient.of(source), RecipeCategory.FOOD, target, 0.1f, 200).unlockedBy(source).save(consumer, modLocation("cooking_${source.registryName!!.path}"))
SimpleCookingRecipeBuilder.smoking(Ingredient.of(source), RecipeCategory.FOOD, target, 0.1f, 100).unlockedBy(source).save(consumer, modLocation("smoking_${source.registryName!!.path}"))
SimpleCookingRecipeBuilder.campfireCooking(Ingredient.of(source), RecipeCategory.FOOD, target, 0.1f, 600).unlockedBy(source).save(consumer, modLocation("campfire_cooking_${source.registryName!!.path}"))
}
}

View File

@ -1,68 +1,56 @@
package ru.dbotthepony.mc.otm.datagen.recipes package ru.dbotthepony.mc.otm.datagen.recipes
import net.minecraft.data.recipes.RecipeCategory import net.minecraftforge.common.Tags
import net.minecraft.data.recipes.RecipeOutput
import net.neoforged.neoforge.common.Tags
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
fun addToolsRecipes(consumer: RecipeOutput) { fun addToolsRecipes(consumer: RecipeOutput) {
MatteryRecipe(MItems.ENERGY_SWORD, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.ENERGY_SWORD)
.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.GOLD_WIRES) .row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.GOLD_WIRES)
.row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.GOLD_WIRES) .row(MItemTags.CARBON_PLATES, MItemTags.TRITANIUM_PLATES, MItemTags.GOLD_WIRES)
.row(MItems.BATTERY_CAPACITOR, MItems.TRITANIUM_SWORD, MItemTags.ADVANCED_CIRCUIT) .row(MItems.BATTERY_CAPACITOR, MItems.TRITANIUM_SWORD, MItemTags.ADVANCED_CIRCUIT)
.unlockedBy(MItems.BATTERY_CAPACITOR) .unlockedBy(MItems.BATTERY_CAPACITOR)
.addUpgradeOps(UpgradeRecipe.CopyEnergyCharge) .buildEnergetic(consumer)
.addUpgradeOps(UpgradeRecipe.CopyEnchantments)
.build(consumer)
MatteryRecipe(MItems.TRITANIUM_SWORD, category = RecipeCategory.COMBAT) MatteryRecipe(MItems.TRITANIUM_SWORD)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_SHOVEL, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.TRITANIUM_SHOVEL)
.rowB(MItemTags.TRITANIUM_INGOTS) .rowB(MItemTags.TRITANIUM_INGOTS)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_PICKAXE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.TRITANIUM_PICKAXE)
.row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_AXE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.TRITANIUM_AXE)
.rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowAB(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowAB(MItemTags.TRITANIUM_INGOTS, Tags.Items.RODS_WOODEN) .rowAB(MItemTags.TRITANIUM_INGOTS, Tags.Items.RODS_WOODEN)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.TRITANIUM_AXE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.TRITANIUM_AXE)
.rowBC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowBC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowBC(Tags.Items.RODS_WOODEN, MItemTags.TRITANIUM_INGOTS) .rowBC(Tags.Items.RODS_WOODEN, MItemTags.TRITANIUM_INGOTS)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer, "alt") .build(consumer, "alt")
MatteryRecipe(MItems.TRITANIUM_HOE, category = RecipeCategory.TOOLS) MatteryRecipe(MItems.TRITANIUM_HOE)
.rowBC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .rowBC(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.rowB(Tags.Items.RODS_WOODEN) .rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItemTags.TRITANIUM_INGOTS)
.build(consumer) .build(consumer)
MatteryRecipe(MItems.WITHERED_STEEL_SWORD, category = RecipeCategory.COMBAT)
.rowB(MItems.WITHERED_STEEL)
.rowB(MItems.WITHERED_STEEL)
.rowB(Tags.Items.RODS_WOODEN)
.unlockedBy(MItems.WITHERED_STEEL)
.build(consumer)
} }

View File

@ -1,110 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import net.minecraft.tags.BlockTags
import net.minecraft.tags.ItemTags
import net.minecraft.world.item.Items
import net.minecraft.world.level.block.Blocks
import ru.dbotthepony.mc.otm.registry.MBlockTags
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry
fun addConstructionTags(tagsProvider: TagsProvider) {
tagsProvider.blocks.Appender(BlockTags.BEACON_BASE_BLOCKS)
.add(MBlocks.TRITANIUM_INGOT_BLOCK)
.add(MBlocks.DILITHIUM_CRYSTAL_BLOCK)
.add(MBlocks.WITHERED_STEEL_BLOCK)
.add(MBlocks.ROFLITE_ALLOY_BLOCK)
tagsProvider.blocks.Appender(MBlockTags.MULTIBLOCK_STRUCTURE)
.add(MBlockTags.MULTIBLOCK_HARD_STRUCTURE, MBlockTags.MULTIBLOCK_SOFT_STRUCTURE)
tagsProvider.blocks.Appender(MBlockTags.MULTIBLOCK_SOFT_STRUCTURE)
.add(MBlockTags.HARDENED_GLASS)
tagsProvider.blocks.Appender(MBlockTags.MULTIBLOCK_HARD_STRUCTURE)
.add(MRegistry.VENT.allBlocks.values)
.add(MRegistry.VENT_ALTERNATIVE.allBlocks.values)
.add(MRegistry.TRITANIUM_BLOCK.allBlocks.values)
.add(MRegistry.TRITANIUM_STRIPED_BLOCK.blocks.values.stream().flatMap { it.values.stream() })
tagsProvider.items.Appender(MItemTags.CRAFTING_TABLES).add(Items.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.WORKBENCHES).add(Items.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.WORKBENCH).add(Items.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.FURNACES).add(Items.FURNACE)
tagsProvider.blocks.Appender(MBlockTags.CRAFTING_TABLES).add(Blocks.CRAFTING_TABLE)
tagsProvider.blocks.Appender(MBlockTags.WORKBENCHES).add(Blocks.CRAFTING_TABLE)
tagsProvider.blocks.Appender(MBlockTags.WORKBENCH).add(Blocks.CRAFTING_TABLE)
tagsProvider.items.forge("hardened_glass").add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
tagsProvider.items.forge("hardened_glass/colorless").add(MRegistry.INDUSTRIAL_GLASS.item)
tagsProvider.items.forge("hardened_glass/tinted").add(MRegistry.INDUSTRIAL_GLASS.items.values)
tagsProvider.items.forge("hardened_glass_panes").add(MRegistry.INDUSTRIAL_GLASS_PANE.allItems.values)
tagsProvider.items.forge("hardened_glass_panes/colorless").add(MRegistry.INDUSTRIAL_GLASS_PANE.item)
tagsProvider.items.forge("hardened_glass_panes/tinted").add(MRegistry.INDUSTRIAL_GLASS_PANE.items.values)
tagsProvider.blocks.forge("hardened_glass").add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
tagsProvider.blocks.forge("hardened_glass/colorless").add(MRegistry.INDUSTRIAL_GLASS.block)
tagsProvider.blocks.forge("hardened_glass/tinted").add(MRegistry.INDUSTRIAL_GLASS.blocks.values)
tagsProvider.blocks.forge("hardened_glass_panes").add(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values)
tagsProvider.blocks.forge("hardened_glass_panes/colorless").add(MRegistry.INDUSTRIAL_GLASS_PANE.block)
tagsProvider.blocks.forge("hardened_glass_panes/tinted").add(MRegistry.INDUSTRIAL_GLASS_PANE.blocks.values)
MRegistry.INDUSTRIAL_GLASS.forEachItem { s, _, item -> tagsProvider.items.forge("hardened_glass/$s").add(item) }
MRegistry.INDUSTRIAL_GLASS_PANE.forEachItem { s, _, item -> tagsProvider.items.forge("hardened_glass_panes/$s").add(item) }
MRegistry.INDUSTRIAL_GLASS.forEachBlock { s, _, block -> tagsProvider.blocks.forge("hardened_glass/$s").add(block) }
MRegistry.INDUSTRIAL_GLASS_PANE.forEachBlock { s, _, block -> tagsProvider.blocks.forge("hardened_glass_panes/$s").add(block) }
tagsProvider.items.Appender(MItemTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
tagsProvider.blocks.Appender(MBlockTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
tagsProvider.items.Appender(MItemTags.CARGO_CRATES).add(MRegistry.CARGO_CRATES.allItems.values)
tagsProvider.blocks.Appender(MBlockTags.CARGO_CRATES).add(MRegistry.CARGO_CRATES.allBlocks.values)
tagsProvider.items.Appender(ItemTags.DOORS).add(MItems.TRITANIUM_DOOR.values)
tagsProvider.blocks.Appender(BlockTags.DOORS).add(MBlocks.TRITANIUM_DOOR.values)
tagsProvider.items.Appender(ItemTags.TRAPDOORS).add(MItems.TRITANIUM_TRAPDOOR.values)
tagsProvider.blocks.Appender(BlockTags.TRAPDOORS).add(MBlocks.TRITANIUM_TRAPDOOR.values)
tagsProvider.blocks.Appender(BlockTags.PRESSURE_PLATES).add(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values)
tagsProvider.blocks.Appender(BlockTags.STAIRS)
.add(MRegistry.FLOOR_TILES_STAIRS.blocks.values)
.add(MRegistry.TRITANIUM_STAIRS.allBlocks.values)
.add(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks)
.add(MBlocks.TRITANIUM_STRIPED_STAIRS.values)
tagsProvider.blocks.Appender(BlockTags.SLABS)
.add(MRegistry.TRITANIUM_SLAB.allBlocks.values)
.add(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks)
.add(MRegistry.FLOOR_TILES_SLAB.blocks.values)
.add(MBlocks.TRITANIUM_STRIPED_SLAB.values)
tagsProvider.blocks.Appender(BlockTags.WALLS)
.add(MRegistry.TRITANIUM_WALL.allBlocks.values)
.add(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks)
.add(MBlocks.TRITANIUM_STRIPED_WALL.values)
tagsProvider.items.Appender(ItemTags.STAIRS)
.add(MRegistry.FLOOR_TILES_STAIRS.items.values)
.add(MRegistry.TRITANIUM_STAIRS.allItems.values)
.add(MRegistry.TRITANIUM_STRIPED_STAIRS.flatItems)
.add(MItems.TRITANIUM_STRIPED_STAIRS.values)
tagsProvider.items.Appender(ItemTags.SLABS)
.add(MRegistry.TRITANIUM_SLAB.allItems.values)
.add(MRegistry.TRITANIUM_STRIPED_SLAB.flatItems)
.add(MRegistry.FLOOR_TILES_SLAB.items.values)
.add(MItems.TRITANIUM_STRIPED_SLAB.values)
tagsProvider.items.Appender(ItemTags.WALLS)
.add(MRegistry.TRITANIUM_WALL.allItems.values)
.add(MRegistry.TRITANIUM_STRIPED_WALL.flatItems)
.add(MItems.TRITANIUM_STRIPED_WALL.values)
}

View File

@ -1,54 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import ru.dbotthepony.mc.otm.registry.game.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry
fun addDyeTags(tagsProvider: TagsProvider) {
tagsProvider.addToDyeTags(MRegistry.CARGO_CRATES.allItems)
tagsProvider.addToDyeTags(MRegistry.INDUSTRIAL_GLASS.allItems)
tagsProvider.addToDyeTags(MRegistry.INDUSTRIAL_GLASS_PANE.allItems)
tagsProvider.addToDyeTags(MRegistry.DECORATIVE_CRATE.items)
tagsProvider.addToDyeTags(MItems.TRITANIUM_DOOR)
tagsProvider.addToDyeTags(MItems.TRITANIUM_TRAPDOOR)
tagsProvider.addToDyeTags(MRegistry.TRITANIUM_PRESSURE_PLATE.allItems)
tagsProvider.addToDyeTags(MRegistry.FLOOR_TILES_STAIRS.items)
tagsProvider.addToDyeTags(MRegistry.TRITANIUM_STAIRS.items)
tagsProvider.addToDyeTags(MRegistry.TRITANIUM_SLAB.items)
tagsProvider.addToDyeTags(MRegistry.FLOOR_TILES_SLAB.items)
tagsProvider.addToDyeTags(MRegistry.UNREFINED_FLOOR_TILES.items)
tagsProvider.addToDyeTags(MRegistry.TRITANIUM_WALL.items)
tagsProvider.addToDyeTags(MItems.ANDROID_STATION)
tagsProvider.addToDyeTags(MItems.ENERGY_SERVO)
tagsProvider.addToDyeTags(MItems.MATTER_DECOMPOSER)
tagsProvider.addToDyeTags(MItems.MATTER_CAPACITOR_BANK)
tagsProvider.addToDyeTags(MItems.BATTERY_BANK)
tagsProvider.addToDyeTags(MItems.MATTER_SCANNER)
tagsProvider.addToDyeTags(MItems.MATTER_PANEL)
tagsProvider.addToDyeTags(MItems.MATTER_REPLICATOR)
tagsProvider.addToDyeTags(MItems.MATTER_BOTTLER)
tagsProvider.addToDyeTags(MItems.ENERGY_COUNTER)
tagsProvider.addToDyeTags(MItems.CHEMICAL_GENERATOR)
tagsProvider.addToDyeTags(MItems.PLATE_PRESS)
tagsProvider.addToDyeTags(MItems.TWIN_PLATE_PRESS)
tagsProvider.addToDyeTags(MItems.MATTER_RECYCLER)
tagsProvider.addToDyeTags(MItems.POWERED_FURNACE)
tagsProvider.addToDyeTags(MItems.POWERED_SMOKER)
tagsProvider.addToDyeTags(MItems.POWERED_BLAST_FURNACE)
tagsProvider.addToDyeTags(MItems.DRIVE_VIEWER)
tagsProvider.addToDyeTags(MItems.ITEM_MONITOR)
tagsProvider.addToDyeTags(MItems.STORAGE_POWER_SUPPLIER)
tagsProvider.addToDyeTags(MItems.COBBLESTONE_GENERATOR)
tagsProvider.addToDyeTags(MItems.ESSENCE_STORAGE)
tagsProvider.addToDyeTags(MItems.MATTER_RECONSTRUCTOR)
tagsProvider.addToDyeTags(MItems.ANDROID_CHARGER)
}

View File

@ -1,67 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import net.minecraft.tags.ItemTags
import net.neoforged.neoforge.common.Tags
import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addEquipmentTags(tagsProvider: TagsProvider) {
// TODO: is new tag appropriate for modded armors?
tagsProvider.items.Appender(Tags.Items.ARMORS)
.add(MItems.TRITANIUM_HELMET, MItems.SIMPLE_TRITANIUM_HELMET)
.add(MItems.TRITANIUM_CHESTPLATE, MItems.SIMPLE_TRITANIUM_CHESTPLATE, MItems.PORTABLE_GRAVITATION_STABILIZER)
.add(MItems.TRITANIUM_PANTS, MItems.SIMPLE_TRITANIUM_PANTS)
.add(MItems.TRITANIUM_BOOTS, MItems.SIMPLE_TRITANIUM_BOOTS)
tagsProvider.items.Appender(ItemTags.DYEABLE).add(MItems.TRITANIUM_ARMOR)
tagsProvider.items.Appender(ItemTags.TRIMMABLE_ARMOR).add(MItems.SIMPLE_TRITANIUM_ARMOR)
tagsProvider.items.Appender(ItemTags.FREEZE_IMMUNE_WEARABLES).add(MItems.TRITANIUM_ARMOR)
tagsProvider.items.Appender(ItemTags.HEAD_ARMOR)
.add(MItems.TRITANIUM_HELMET)
.add(MItems.SIMPLE_TRITANIUM_HELMET)
tagsProvider.items.Appender(ItemTags.CHEST_ARMOR)
.add(MItems.TRITANIUM_CHESTPLATE)
.add(MItems.SIMPLE_TRITANIUM_CHESTPLATE)
tagsProvider.items.Appender(ItemTags.LEG_ARMOR)
.add(MItems.TRITANIUM_PANTS)
.add(MItems.SIMPLE_TRITANIUM_PANTS)
tagsProvider.items.Appender(ItemTags.FOOT_ARMOR)
.add(MItems.TRITANIUM_BOOTS)
.add(MItems.SIMPLE_TRITANIUM_BOOTS)
tagsProvider.items.Appender(ItemTags.SWORDS)
.add(MItems.TRITANIUM_SWORD)
.add(MItems.ENERGY_SWORD)
.add(MItems.FALLING_SUN)
.add(MItems.WITHERED_STEEL_SWORD)
tagsProvider.items.Appender(ItemTags.AXES).add(MItems.TRITANIUM_AXE)
tagsProvider.items.Appender(ItemTags.PICKAXES).add(MItems.TRITANIUM_PICKAXE)
tagsProvider.items.Appender(ItemTags.SHOVELS).add(MItems.TRITANIUM_SHOVEL)
tagsProvider.items.Appender(ItemTags.HOES).add(MItems.TRITANIUM_HOE)
tagsProvider.items.Appender(Tags.Items.TOOLS_SHEAR).add(MItems.TRITANIUM_SHEARS)
tagsProvider.items.Appender(Tags.Items.TOOLS_SHIELD).add(MItems.TRITANIUM_SHIELD)
tagsProvider.items.Appender(MItemTags.TOOLS_HAMMERS).add(MItems.EXPLOSIVE_HAMMER)
tagsProvider.items.forge("tools").add(MItemTags.TOOLS_HAMMERS)
tagsProvider.items.Appender(ItemTags.DURABILITY_ENCHANTABLE)
.add(MItems.EXPLOSIVE_HAMMER)
.add(MItems.TRITANIUM_SHEARS)
.add(MItems.TRITANIUM_SHIELD)
tagsProvider.items.Appender(ItemTags.MINING_ENCHANTABLE)
.add(MItems.TRITANIUM_SHEARS)
tagsProvider.items.Appender(ItemTags.EQUIPPABLE_ENCHANTABLE)
.add(MItems.PORTABLE_GRAVITATION_STABILIZER)
tagsProvider.items.Appender(ItemTags.VANISHING_ENCHANTABLE)
.add(MItems.PORTABLE_GRAVITATION_STABILIZER)
}

View File

@ -1,152 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import net.minecraft.world.item.Tiers
import net.minecraft.world.level.block.Block
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.MRegistry
fun addMineableTags(tagsProvider: TagsProvider) {
tagsProvider.requiresPickaxe(
MBlocks.MATTER_CABLE,
MBlocks.STORAGE_CABLE
)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_DOOR.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_TRAPDOOR.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.PAINTER, Tiers.STONE)
tagsProvider.requiresPickaxe(MBlocks.ENERGY_CABLES.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MBlocks.GRILL.values, Tiers.STONE)
tagsProvider.requiresPickaxe(listOf<Block>(
*MBlocks.ANDROID_STATION.values.toTypedArray(),
*MBlocks.BATTERY_BANK.values.toTypedArray(),
*MBlocks.MATTER_DECOMPOSER.values.toTypedArray(),
*MBlocks.MATTER_CAPACITOR_BANK.values.toTypedArray(),
MBlocks.PATTERN_STORAGE,
*MBlocks.MATTER_SCANNER.values.toTypedArray(),
*MBlocks.MATTER_PANEL.values.toTypedArray(),
*MBlocks.MATTER_REPLICATOR.values.toTypedArray(),
*MBlocks.MATTER_BOTTLER.values.toTypedArray(),
*MBlocks.ENERGY_COUNTER.values.toTypedArray(),
*MBlocks.CHEMICAL_GENERATOR.values.toTypedArray(),
*MBlocks.PLATE_PRESS.values.toTypedArray(),
*MBlocks.TWIN_PLATE_PRESS.values.toTypedArray(),
*MBlocks.MATTER_RECYCLER.values.toTypedArray(),
MBlocks.MATTER_ENTANGLER,
*MBlocks.POWERED_FURNACE.values.toTypedArray(),
*MBlocks.POWERED_SMOKER.values.toTypedArray(),
*MBlocks.POWERED_BLAST_FURNACE.values.toTypedArray(),
MBlocks.STORAGE_BUS,
MBlocks.STORAGE_IMPORTER,
MBlocks.STORAGE_EXPORTER,
*MBlocks.DRIVE_VIEWER.values.toTypedArray(),
MBlocks.DRIVE_RACK,
*MBlocks.ITEM_MONITOR.values.toTypedArray(),
*MBlocks.STORAGE_POWER_SUPPLIER.values.toTypedArray(),
MBlocks.PHANTOM_ATTRACTOR,
*MBlocks.ENERGY_SERVO.values.toTypedArray(),
MBlocks.TRITANIUM_INGOT_BLOCK,
MBlocks.WITHERED_STEEL_BLOCK,
MBlocks.METAL_JUNK,
MBlocks.METAL_MESH,
MBlocks.TRITANIUM_BARS,
MBlocks.METAL_RAILING,
MBlocks.ENGINE,
MBlocks.HOLO_SIGN,
*MBlocks.COBBLESTONE_GENERATOR.values.toTypedArray(),
*MBlocks.ESSENCE_STORAGE.values.toTypedArray(),
*MBlocks.MATTER_RECONSTRUCTOR.values.toTypedArray(),
MBlocks.FLUID_TANK,
*MBlocks.ANDROID_CHARGER.values.toTypedArray(),
MBlocks.TRITANIUM_HULL,
MBlocks.BLACK_HOLE_GENERATOR,
MBlocks.MATTER_INJECTOR,
MBlocks.ANTIMATTER_INJECTOR,
MBlocks.HIGH_ENERGY_PARTICLE_COLLECTOR,
MBlocks.ITEM_INPUT_HATCH,
MBlocks.ITEM_OUTPUT_HATCH,
MBlocks.ENERGY_INPUT_HATCH,
MBlocks.ENERGY_OUTPUT_HATCH,
MBlocks.MATTER_INPUT_HATCH,
MBlocks.MATTER_OUTPUT_HATCH,
MBlocks.ENERGY_INPUT_INTERFACE,
MBlocks.ENERGY_OUTPUT_INTERFACE,
MBlocks.FLYWHEEL_SHAFT,
MBlocks.FLYWHEEL_BEARING,
MBlocks.FLYWHEEL_HOUSING,
MBlocks.FLYWHEEL_BATTERY,
MBlocks.GENERATOR_BLOCK,
MBlocks.MODULAR_FRAME,
MBlocks.HEAVY_MODULAR_FRAME,
MBlocks.REINFORCED_REDSTONE_LAMP,
MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED,
), Tiers.IRON)
tagsProvider.requiresPickaxe(listOf(
MBlocks.DILITHIUM_ORE,
MBlocks.DEEPSLATE_DILITHIUM_ORE,
MBlocks.DILITHIUM_CRYSTAL_BLOCK,
MBlocks.ROFLITE_ALLOY_BLOCK,
MBlocks.GRAVITATION_STABILIZER,
MBlocks.GRAVITATION_STABILIZER_LENS,
), Tiers.DIAMOND)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ANVIL.values.stream().flatMap { it.stream() }, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ORE, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.DEEPSLATE_TRITANIUM_ORE, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_RAW_BLOCK, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_BLOCK.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_STAIRS.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_WALL.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_SLAB.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.CARBON_FIBRE_BLOCK, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.INFINITE_WATER_SOURCE, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.CARGO_CRATES.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.VENT.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.VENT_ALTERNATIVE.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_BLOCK.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.COMPUTER_TERMINAL.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.STAR_CHAIR.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_SLAB.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_WALL.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STAIRS.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_BLOCK.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.FLOOR_TILES.blocks.values)
tagsProvider.requiresPickaxe(MRegistry.FLOOR_TILES_STAIRS.blocks.values)
tagsProvider.requiresPickaxe(MRegistry.FLOOR_TILES_SLAB.blocks.values)
tagsProvider.requiresShovel(MRegistry.UNREFINED_FLOOR_TILES.blocks.values)
tagsProvider.requiresPickaxe(MRegistry.INDUSTRIAL_GLASS.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.DECORATIVE_CRATE.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MBlocks.LABORATORY_LAMP, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.LABORATORY_LAMP_INVERTED, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.METAL_BEAM, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.METAL_BEAM_CENTER, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.DANGER_STRIPE_BLOCK)
}

View File

@ -1,61 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import ru.dbotthepony.mc.otm.registry.game.MBlocks
import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addResourceTags(tagsProvider: TagsProvider) {
tagsProvider.circuits.add("basic", MItems.BASIC_CONTROL_CIRCUIT)
tagsProvider.circuits.add("advanced", MItems.ADVANCED_CONTROL_CIRCUIT)
tagsProvider.stoneOre("tritanium", MBlocks.TRITANIUM_ORE)
tagsProvider.stoneOre("dilithium", MBlocks.DILITHIUM_ORE)
tagsProvider.deepslateOre("tritanium", MBlocks.DEEPSLATE_TRITANIUM_ORE)
tagsProvider.deepslateOre("dilithium", MBlocks.DEEPSLATE_DILITHIUM_ORE)
tagsProvider.plates.add("tritanium", MItems.TRITANIUM_PLATE)
tagsProvider.plates.add("iron", MItems.IRON_PLATE)
tagsProvider.plates.add("gold", MItems.GOLD_PLATE)
tagsProvider.plates.add("carbon", MItems.CARBON_MESH)
tagsProvider.dusts.add("tritanium", MItems.TRITANIUM_DUST)
tagsProvider.ingots.add("tritanium", MItems.TRITANIUM_INGOT)
tagsProvider.ingots.add("withered_steel", MItems.WITHERED_STEEL)
tagsProvider.ingots.add("roflite_alloy", MItems.ROFLITE_ALLOY_INGOT)
tagsProvider.wires.add("copper", MItems.COPPER_WIRING)
tagsProvider.wires.add("gold", MItems.GOLD_WIRING)
tagsProvider.items.Appender(MItemTags.TRITANIUM_NUGGETS).add(MItems.TRITANIUM_NUGGET)
tagsProvider.items.Appender(MItemTags.NUGGETS).add(MItems.TRITANIUM_NUGGET)
tagsProvider.items.forge("reinforced_tritanium").add(MItems.REINFORCED_TRITANIUM_PLATE)
tagsProvider.storageBlocksAsItem.add("tritanium", MItems.TRITANIUM_INGOT_BLOCK)
tagsProvider.storageBlocksAsBlock.add("tritanium", MBlocks.TRITANIUM_INGOT_BLOCK)
tagsProvider.storageBlocksAsItem.add("withered_steel", MItems.WITHERED_STEEL_BLOCK)
tagsProvider.storageBlocksAsBlock.add("withered_steel", MBlocks.WITHERED_STEEL_BLOCK)
tagsProvider.storageBlocksAsItem.add("roflite_alloy", MItems.ROFLITE_ALLOY_BLOCK)
tagsProvider.storageBlocksAsBlock.add("roflite_alloy", MBlocks.ROFLITE_ALLOY_BLOCK)
tagsProvider.singleDropOre(
MBlocks.TRITANIUM_ORE,
MBlocks.DEEPSLATE_TRITANIUM_ORE
)
tagsProvider.denseDropOre(
MBlocks.DILITHIUM_ORE,
MBlocks.DEEPSLATE_DILITHIUM_ORE,
)
tagsProvider.clump("tritanium", MItems.TRITANIUM_ORE_CLUMP, MBlocks.TRITANIUM_RAW_BLOCK)
tagsProvider.gems.add(MItems.DILITHIUM_CRYSTAL)
tagsProvider.storageBlocksAsItem.add("dilithium", MItems.DILITHIUM_CRYSTAL_BLOCK)
tagsProvider.storageBlocksAsBlock.add("dilithium", MBlocks.DILITHIUM_CRYSTAL_BLOCK)
tagsProvider.items.forge("gems/dilithium").add(MItems.DILITHIUM_CRYSTAL)
}

View File

@ -1,14 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import ru.dbotthepony.mc.otm.registry.MStructureTags
import ru.dbotthepony.mc.otm.registry.game.MStructures
fun addStructureTags(tagsProvider: TagsProvider) {
tagsProvider.structures.Appender(MStructureTags.LABORATORIES).add(MStructures.LABORATORY)
tagsProvider.structures.Appender(MStructureTags.FIELD_RESEARCH_PODS)
.add(MStructures.FIELD_RESEARCH_POD)
.add(MStructures.FIELD_RESEARCH_POD_RUIN)
tagsProvider.structures.Appender(MStructureTags.WRECKAGES).add(MStructures.WRECKAGE)
}

View File

@ -1,68 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.tags
import net.minecraft.tags.ItemTags
import net.minecraft.world.entity.EntityType
import net.minecraft.world.item.Items
import ru.dbotthepony.mc.otm.registry.game.MItems
fun addSuspiciousTags(tagsProvider: TagsProvider) {
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.OWNED_MEAT_CONSUMERS)
.add(MItems.SUSPICIOUS_FOODS.MEAT_CONSUMERS)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.OWNED_FISH_CONSUMERS)
.add(MItems.SUSPICIOUS_FOODS.FISH_CONSUMERS)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.OWNED_COOKIE_CONSUMERS)
.add(MItems.SUSPICIOUS_FOODS.COOKIE_CONSUMERS)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.OWNED_CARROT_CONSUMERS)
.add(MItems.SUSPICIOUS_FOODS.CARROT_CONSUMERS)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.CARROT_CONSUMERS)
.add(EntityType.RABBIT)
tagsProvider.items.Appender(ItemTags.RABBIT_FOOD)
.add(MItems.SUSPICIOUS_FOODS.CARROT)
tagsProvider.items.Appender(ItemTags.WOLF_FOOD)
.add(MItems.SUSPICIOUS_FOODS.MUTTON)
.add(MItems.SUSPICIOUS_FOODS.CHICKEN)
.add(MItems.SUSPICIOUS_FOODS.BEEF)
.add(MItems.SUSPICIOUS_FOODS.RABBIT)
.add(MItems.SUSPICIOUS_FOODS.PORKCHOP)
.add(MItems.SUSPICIOUS_FOODS.COOKED_MUTTON)
.add(MItems.SUSPICIOUS_FOODS.COOKED_BEEF)
.add(MItems.SUSPICIOUS_FOODS.COOKED_CHICKEN)
.add(MItems.SUSPICIOUS_FOODS.COOKED_RABBIT)
.add(MItems.SUSPICIOUS_FOODS.COOKED_PORKCHOP)
.add(MItems.SUSPICIOUS_FOODS.ROTTEN_FLESH)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.MEAT_CONSUMERS)
.add(EntityType.WOLF)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.FISH_CONSUMERS)
.add(EntityType.OCELOT)
.add(EntityType.CAT)
tagsProvider.entityTypes.Appender(MItems.SUSPICIOUS_FOODS.COOKIE_CONSUMERS)
.add(EntityType.PARROT)
// Cats easily can eat cooked food and a lot of cats even PREFER to eat fish cooked,
// literally begging for fish when they smell it being cooked (and ignoring it while it lays raw)
// What mojang were thinking?
tagsProvider.items.Appender(ItemTags.OCELOT_FOOD)
.add(Items.COOKED_COD)
.add(Items.COOKED_SALMON)
.add(MItems.SUSPICIOUS_FOODS.COD)
.add(MItems.SUSPICIOUS_FOODS.COOKED_COD)
.add(MItems.SUSPICIOUS_FOODS.SALMON)
.add(MItems.SUSPICIOUS_FOODS.COOKED_SALMON)
tagsProvider.items.Appender(ItemTags.CAT_FOOD)
.add(Items.COOKED_COD)
.add(Items.COOKED_SALMON)
.add(MItems.SUSPICIOUS_FOODS.COD)
.add(MItems.SUSPICIOUS_FOODS.COOKED_COD)
.add(MItems.SUSPICIOUS_FOODS.SALMON)
.add(MItems.SUSPICIOUS_FOODS.COOKED_SALMON)
}

View File

@ -1,45 +1,137 @@
package ru.dbotthepony.mc.otm.datagen.tags package ru.dbotthepony.mc.otm.datagen.tags
import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.BlockTags import net.minecraft.tags.BlockTags
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
import net.minecraft.world.effect.MobEffects import net.minecraft.world.effect.MobEffects
import net.minecraft.world.item.Items import net.minecraft.world.item.Items
import net.neoforged.neoforge.common.Tags import net.minecraft.world.item.Tiers
import ru.dbotthepony.kommons.collect.flatMap import net.minecraft.world.level.block.Block
import ru.dbotthepony.mc.otm.util.ResourceLocation import net.minecraft.world.level.block.Blocks
import net.minecraftforge.common.Tags
import ru.dbotthepony.mc.otm.registry.MBlockTags import ru.dbotthepony.mc.otm.registry.MBlockTags
import ru.dbotthepony.mc.otm.registry.game.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.game.MFluids import ru.dbotthepony.mc.otm.registry.MFluids
import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MItemTags
import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
fun addTags(tagsProvider: TagsProvider) { fun addTags(tagsProvider: TagsProvider) {
tagsProvider.items.forge("pistons").add(Items.PISTON) tagsProvider.items.forge("pistons").add(Items.PISTON)
tagsProvider.circuits.add("basic", MItems.BASIC_CONTROL_CIRCUIT)
tagsProvider.circuits.add("advanced", MItems.ADVANCED_CONTROL_CIRCUIT)
tagsProvider.items.Appender(ItemTags.BEACON_PAYMENT_ITEMS) tagsProvider.dusts.add("tritanium", MItems.TRITANIUM_DUST)
.add(MItems.TRITANIUM_INGOT) tagsProvider.ingots.add("tritanium", MItems.TRITANIUM_INGOT)
.add(MItems.DILITHIUM_CRYSTAL) tagsProvider.items.Appender(ItemTags.BEACON_PAYMENT_ITEMS).add(MItems.TRITANIUM_INGOT)
.add(MItems.WITHERED_STEEL)
.add(MItems.ROFLITE_ALLOY_INGOT)
tagsProvider.items.Appender(ItemTags.MEAT).add(MItems.NUTRIENT_PASTE) tagsProvider.plates.add("tritanium", MItems.TRITANIUM_PLATE)
tagsProvider.plates.add("iron", MItems.IRON_PLATE)
tagsProvider.plates.add("gold", MItems.GOLD_PLATE)
tagsProvider.plates.add("carbon", MItems.CARBON_MESH)
tagsProvider.fluids.forge("experience").add(MFluids.LIQUID_XP).add(MFluids.LIQUID_XP_FLOWING) // tagsProvider.fluids.forge("experience").add(MFluids.LIQUID_XP).add(MFluids.LIQUID_XP_FLOWING)
tagsProvider.fluidTypes.forge("experience").add(MFluids.LIQUID_XP_TYPE) // tagsProvider.fluidTypes.forge("experience").add(MFluids.LIQUID_XP_TYPE)
tagsProvider.items.forge("reinforced_tritanium").add(MItems.REINFORCED_TRITANIUM_PLATE)
tagsProvider.storageBlocksAsItem.add("tritanium", MItems.TRITANIUM_INGOT_BLOCK)
tagsProvider.storageBlocksAsBlock.add("tritanium", MBlocks.TRITANIUM_INGOT_BLOCK)
tagsProvider.blocks.Appender(BlockTags.BEACON_BASE_BLOCKS).add(MBlocks.TRITANIUM_INGOT_BLOCK)
tagsProvider.stoneOre("tritanium", MBlocks.TRITANIUM_ORE)
tagsProvider.deepslateOre("tritanium", MBlocks.DEEPSLATE_TRITANIUM_ORE)
tagsProvider.singleDropOre(
MBlocks.TRITANIUM_ORE,
MBlocks.DEEPSLATE_TRITANIUM_ORE
)
tagsProvider.clump("tritanium", MItems.TRITANIUM_ORE_CLUMP, MBlocks.TRITANIUM_RAW_BLOCK)
tagsProvider.wires.add("copper", MItems.COPPER_WIRING)
tagsProvider.wires.add("gold", MItems.GOLD_WIRING)
tagsProvider.requiresPickaxe(
MBlocks.MATTER_CABLE,
MBlocks.STORAGE_CABLE
)
tagsProvider.items.Appender(MItemTags.CRAFTING_TABLES).add(Items.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.WORKBENCHES).add(Items.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.WORKBENCH).add(Items.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.FURNACES).add(Items.FURNACE)
tagsProvider.blocks.Appender(MBlockTags.CRAFTING_TABLES).add(Blocks.CRAFTING_TABLE)
tagsProvider.blocks.Appender(MBlockTags.WORKBENCHES).add(Blocks.CRAFTING_TABLE)
tagsProvider.blocks.Appender(MBlockTags.WORKBENCH).add(Blocks.CRAFTING_TABLE)
tagsProvider.items.Appender(MItemTags.CRAFTING_TABLES) tagsProvider.items.Appender(MItemTags.CRAFTING_TABLES)
.add(MItemTags.WORKBENCHES) .add(MItemTags.WORKBENCHES)
.add(MItemTags.WORKBENCH) .add(MItemTags.WORKBENCH)
tagsProvider.blocks.Appender(MBlockTags.CRAFTING_TABLES) tagsProvider.blocks.Appender(MBlockTags.CRAFTING_TABLES)
.add(MBlockTags.WORKBENCHES) .add(MBlockTags.WORKBENCHES)
.add(MBlockTags.WORKBENCH) .add(MBlockTags.WORKBENCH)
tagsProvider.items.Appender(MItemTags.MINECART_CARGO_CRATES).add(MItems.CARGO_CRATE_MINECARTS.values) tagsProvider.items.Appender(MItemTags.MINECART_CARGO_CRATES).add(MItems.CARGO_CRATE_MINECARTS.values)
tagsProvider.blocks.Appender(BlockTags.ANVIL).add(MBlocks.TRITANIUM_ANVIL.values.stream().flatMap { it.stream() }) tagsProvider.items.forge("hardened_glass").add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
tagsProvider.items.Appender(ItemTags.ANVIL).add(MItems.TRITANIUM_ANVIL.values.stream().flatMap { it.stream() }) tagsProvider.items.forge("hardened_glass/colorless").add(MRegistry.INDUSTRIAL_GLASS.item)
tagsProvider.items.forge("hardened_glass/tinted").add(MRegistry.INDUSTRIAL_GLASS.items.values)
tagsProvider.items.forge("hardened_glass_panes").add(MRegistry.INDUSTRIAL_GLASS_PANE.allItems.values)
tagsProvider.items.forge("hardened_glass_panes/colorless").add(MRegistry.INDUSTRIAL_GLASS_PANE.item)
tagsProvider.items.forge("hardened_glass_panes/tinted").add(MRegistry.INDUSTRIAL_GLASS_PANE.items.values)
MRegistry.INDUSTRIAL_GLASS.forEachItem { s, _, item -> tagsProvider.items.forge("hardened_glass/$s").add(item) }
MRegistry.INDUSTRIAL_GLASS_PANE.forEachItem { s, _, item -> tagsProvider.items.forge("hardened_glass_panes/$s").add(item) }
tagsProvider.blocks.forge("hardened_glass").add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
tagsProvider.blocks.forge("hardened_glass/colorless").add(MRegistry.INDUSTRIAL_GLASS.block)
tagsProvider.blocks.forge("hardened_glass/tinted").add(MRegistry.INDUSTRIAL_GLASS.blocks.values)
tagsProvider.blocks.forge("hardened_glass_panes").add(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values)
tagsProvider.blocks.forge("hardened_glass_panes/colorless").add(MRegistry.INDUSTRIAL_GLASS_PANE.block)
tagsProvider.blocks.forge("hardened_glass_panes/tinted").add(MRegistry.INDUSTRIAL_GLASS_PANE.blocks.values)
MRegistry.INDUSTRIAL_GLASS.forEachBlock { s, _, block -> tagsProvider.blocks.forge("hardened_glass/$s").add(block) }
MRegistry.INDUSTRIAL_GLASS_PANE.forEachBlock { s, _, block -> tagsProvider.blocks.forge("hardened_glass_panes/$s").add(block) }
tagsProvider.items.Appender(MItemTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
tagsProvider.blocks.Appender(MBlockTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
tagsProvider.blocks.Appender(MBlockTags.CARGO_CRATES).add(MRegistry.CARGO_CRATES.allBlocks.values)
tagsProvider.items.Appender(ItemTags.DOORS).add(MItems.TRITANIUM_DOOR.values)
tagsProvider.blocks.Appender(BlockTags.DOORS).add(MBlocks.TRITANIUM_DOOR.values)
tagsProvider.items.Appender(ItemTags.TRAPDOORS).add(MItems.TRITANIUM_TRAPDOOR.values)
tagsProvider.blocks.Appender(BlockTags.TRAPDOORS).add(MBlocks.TRITANIUM_TRAPDOOR.values)
tagsProvider.blocks.Appender(BlockTags.PRESSURE_PLATES).add(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values)
tagsProvider.items.Appender(MItemTags.MACHINES).add(MItems.MACHINES)
tagsProvider.blocks.Appender(MBlockTags.MACHINES).add(MItems.MACHINES.stream().map { it!!.block })
tagsProvider.blocks.Appender(BlockTags.ANVIL).add(MBlocks.TRITANIUM_ANVIL)
tagsProvider.items.Appender(ItemTags.ANVIL).add(MItems.TRITANIUM_ANVIL)
tagsProvider.items.Appender(MItemTags.TRITANIUM_NUGGETS).add(MItems.TRITANIUM_NUGGET)
tagsProvider.items.Appender(MItemTags.NUGGETS).add(MItems.TRITANIUM_NUGGET)
tagsProvider.items.Appender(Tags.Items.ARMORS_HELMETS)
.add(MItems.TRITANIUM_HELMET, MItems.SIMPLE_TRITANIUM_HELMET)
tagsProvider.items.Appender(Tags.Items.ARMORS_CHESTPLATES)
.add(MItems.TRITANIUM_CHESTPLATE, MItems.SIMPLE_TRITANIUM_CHESTPLATE, MItems.PORTABLE_GRAVITATION_STABILIZER)
tagsProvider.items.Appender(Tags.Items.ARMORS_LEGGINGS)
.add(MItems.TRITANIUM_PANTS, MItems.SIMPLE_TRITANIUM_PANTS)
tagsProvider.items.Appender(Tags.Items.ARMORS_BOOTS)
.add(MItems.TRITANIUM_BOOTS, MItems.SIMPLE_TRITANIUM_BOOTS)
tagsProvider.items.Appender(ItemTags.FREEZE_IMMUNE_WEARABLES).add(MItems.TRITANIUM_ARMOR)
tagsProvider.items.Appender(Tags.Items.SHEARS).add(MItems.TRITANIUM_SHEARS)
tagsProvider.items.Appender(Tags.Items.TOOLS_SHIELDS).add(MItems.TRITANIUM_SHIELD)
tagsProvider.items.Appender(MItemTags.TOOLS_HAMMERS).add(MItems.EXPLOSIVE_HAMMER)
tagsProvider.items.forge("tools").add(MItemTags.TOOLS_HAMMERS)
tagsProvider.items.Appender(MItemTags.UPGRADES) tagsProvider.items.Appender(MItemTags.UPGRADES)
.add(MItems.MachineUpgrades.Basic.LIST) .add(MItems.MachineUpgrades.Basic.LIST)
@ -47,24 +139,143 @@ fun addTags(tagsProvider: TagsProvider) {
.add(MItems.MachineUpgrades.Advanced.LIST) .add(MItems.MachineUpgrades.Advanced.LIST)
.add(MItems.MachineUpgrades.Creative.LIST) .add(MItems.MachineUpgrades.Creative.LIST)
tagsProvider.items.Appender(MItemTags.NO_REPLICATION) tagsProvider.blocks.Appender(BlockTags.STAIRS)
.add(MItemTags.DILITHIUM_GEMS) .add(MRegistry.FLOOR_TILES_STAIRS.blocks.values)
.add(MItemTags.DILITHIUM_ORES) .add(MRegistry.TRITANIUM_STAIRS.allBlocks.values)
.add(Items.WRITTEN_BOOK) .add(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks)
.add(Tags.Items.ORES) .add(MBlocks.TRITANIUM_STRIPED_STAIRS)
.add(Tags.Items.RAW_MATERIALS)
.add(MItems.PILL_ANDROID) tagsProvider.blocks.Appender(BlockTags.SLABS)
.add(MItems.PILL_HUMANE) .add(MRegistry.TRITANIUM_SLAB.allBlocks.values)
.add(MItems.PILL_OBLIVION) .add(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks)
.add(MItems.QUANTUM_BATTERY) .add(MRegistry.FLOOR_TILES_SLAB.blocks.values)
.add(MItems.QUANTUM_CAPACITOR) .add(MBlocks.TRITANIUM_STRIPED_SLAB)
.add(MItems.QUANTUM_BATTERY_CREATIVE)
.add(MItems.ZPM_BATTERY) tagsProvider.blocks.Appender(BlockTags.WALLS)
.add(MItems.PROCEDURAL_BATTERY) .add(MRegistry.TRITANIUM_WALL.allBlocks.values)
.add(MItems.EXOPACK_PROBE) .add(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks)
.add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL) .add(MBlocks.TRITANIUM_STRIPED_WALL)
.add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER)
.add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON) tagsProvider.items.Appender(ItemTags.STAIRS)
.add(MRegistry.FLOOR_TILES_STAIRS.items.values)
.add(MRegistry.TRITANIUM_STAIRS.allItems.values)
.add(MRegistry.TRITANIUM_STRIPED_STAIRS.flatItems)
.add(MItems.TRITANIUM_STRIPED_STAIRS)
tagsProvider.items.Appender(ItemTags.SLABS)
.add(MRegistry.TRITANIUM_SLAB.allItems.values)
.add(MRegistry.TRITANIUM_STRIPED_SLAB.flatItems)
.add(MRegistry.FLOOR_TILES_SLAB.items.values)
.add(MItems.TRITANIUM_STRIPED_SLAB)
tagsProvider.items.Appender(ItemTags.WALLS)
.add(MRegistry.TRITANIUM_WALL.allItems.values)
.add(MRegistry.TRITANIUM_STRIPED_WALL.flatItems)
.add(MItems.TRITANIUM_STRIPED_WALL)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_DOOR.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_TRAPDOOR.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.PAINTER, Tiers.STONE)
tagsProvider.requiresPickaxe(MBlocks.ENERGY_CABLES.values, Tiers.STONE)
tagsProvider.requiresPickaxe(listOf<Block>(
*MBlocks.ANDROID_STATION.values.toTypedArray(),
*MBlocks.BATTERY_BANK.values.toTypedArray(),
*MBlocks.MATTER_DECOMPOSER.values.toTypedArray(),
*MBlocks.MATTER_CAPACITOR_BANK.values.toTypedArray(),
MBlocks.PATTERN_STORAGE,
*MBlocks.MATTER_SCANNER.values.toTypedArray(),
*MBlocks.MATTER_PANEL.values.toTypedArray(),
*MBlocks.MATTER_REPLICATOR.values.toTypedArray(),
*MBlocks.MATTER_BOTTLER.values.toTypedArray(),
*MBlocks.ENERGY_COUNTER.values.toTypedArray(),
*MBlocks.CHEMICAL_GENERATOR.values.toTypedArray(),
*MBlocks.PLATE_PRESS.values.toTypedArray(),
*MBlocks.TWIN_PLATE_PRESS.values.toTypedArray(),
*MBlocks.MATTER_RECYCLER.values.toTypedArray(),
MBlocks.MATTER_ENTANGLER,
*MBlocks.POWERED_FURNACE.values.toTypedArray(),
*MBlocks.POWERED_SMOKER.values.toTypedArray(),
*MBlocks.POWERED_BLAST_FURNACE.values.toTypedArray(),
MBlocks.STORAGE_BUS,
MBlocks.STORAGE_IMPORTER,
MBlocks.STORAGE_EXPORTER,
*MBlocks.DRIVE_VIEWER.values.toTypedArray(),
MBlocks.DRIVE_RACK,
*MBlocks.ITEM_MONITOR.values.toTypedArray(),
*MBlocks.STORAGE_POWER_SUPPLIER.values.toTypedArray(),
MBlocks.PHANTOM_ATTRACTOR,
*MBlocks.ENERGY_SERVO.values.toTypedArray(),
MBlocks.TRITANIUM_INGOT_BLOCK,
MBlocks.METAL_JUNK,
MBlocks.METAL_MESH,
MBlocks.TRITANIUM_BARS,
MBlocks.ENGINE,
MBlocks.HOLO_SIGN,
*MBlocks.COBBLESTONE_GENERATOR.values.toTypedArray(),
*MBlocks.ESSENCE_STORAGE.values.toTypedArray(),
*MBlocks.MATTER_RECONSTRUCTOR.values.toTypedArray(),
MBlocks.FLUID_TANK,
*MBlocks.ANDROID_CHARGER.values.toTypedArray(),
MBlocks.BLACK_HOLE_GENERATOR,
MBlocks.ITEM_INPUT_HATCH,
MBlocks.ITEM_OUTPUT_HATCH,
), Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ANVIL, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ORE, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.DEEPSLATE_TRITANIUM_ORE, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_RAW_BLOCK, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_BLOCK, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_STAIRS, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_WALL, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_STRIPED_SLAB, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.CARBON_FIBRE_BLOCK, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.INFINITE_WATER_SOURCE, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.CARGO_CRATES.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.VENT.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.VENT_ALTERNATIVE.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_BLOCK.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.COMPUTER_TERMINAL.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_SLAB.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_WALL.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STAIRS.allBlocks.values, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_BLOCK.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks, Tiers.IRON)
tagsProvider.requiresPickaxe(MRegistry.FLOOR_TILES.blocks.values)
tagsProvider.requiresPickaxe(MRegistry.FLOOR_TILES_STAIRS.blocks.values)
tagsProvider.requiresPickaxe(MRegistry.FLOOR_TILES_SLAB.blocks.values)
tagsProvider.requiresShovel(MRegistry.UNREFINED_FLOOR_TILES.blocks.values)
tagsProvider.requiresPickaxe(MRegistry.INDUSTRIAL_GLASS.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MRegistry.DECORATIVE_CRATE.allBlocks.values, Tiers.STONE)
tagsProvider.requiresPickaxe(MBlocks.LABORATORY_LAMP, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.LABORATORY_LAMP_INVERTED, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.METAL_BEAM, Tiers.IRON)
tagsProvider.requiresPickaxe(MBlocks.DANGER_STRIPE_BLOCK)
tagsProvider.requiresPickaxe(listOf(
MBlocks.GRAVITATION_STABILIZER,
MBlocks.GRAVITATION_STABILIZER_LENS,
), Tiers.DIAMOND)
tagsProvider.dragonImmune.add( tagsProvider.dragonImmune.add(
MBlocks.BLACK_HOLE, MBlocks.BLACK_HOLE,

View File

@ -1,41 +1,25 @@
package ru.dbotthepony.mc.otm.datagen.tags package ru.dbotthepony.mc.otm.datagen.tags
import it.unimi.dsi.fastutil.objects.ObjectArraySet import it.unimi.dsi.fastutil.objects.ObjectArraySet
import net.minecraft.core.Holder
import net.minecraft.core.HolderLookup
import net.minecraft.core.Registry import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.BlockTags import net.minecraft.tags.BlockTags
import net.minecraft.tags.GameEventTags import net.minecraft.tags.GameEventTags
import net.minecraft.tags.TagKey import net.minecraft.tags.TagKey
import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.Tier import net.minecraft.world.item.Tier
import net.minecraft.world.item.Tiers import net.minecraft.world.item.Tiers
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.neoforged.neoforge.common.Tags import net.minecraftforge.common.Tags
import net.neoforged.neoforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import net.neoforged.neoforge.registries.NeoForgeRegistries import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.player.MatteryPlayer
import ru.dbotthepony.mc.otm.util.ResourceLocation
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import java.util.EnumMap
import java.util.stream.Stream import java.util.stream.Stream
import net.minecraft.data.tags.TagsProvider as MinecraftTagsProvider import net.minecraft.data.tags.TagsProvider as MinecraftTagsProvider
private fun <T : Any> vanillaLookup(key: ResourceKey<Registry<T>>): (T) -> ResourceLocation {
val registry by lazy { (BuiltInRegistries.REGISTRY.get(key.location()) ?: throw NoSuchElementException("No such registry $key")) as Registry<T> }
return { registry.getKey(it) ?: throw NoSuchElementException("Registry $key does not contain $it") }
}
class TagsProvider(private val event: GatherDataEvent) { class TagsProvider(private val event: GatherDataEvent) {
inner class Delegate<T : Any> private constructor(key: ResourceKey<Registry<T>>, val lookup: (T) -> ResourceLocation) : MinecraftTagsProvider<T>(event.generator.packOutput, key, event.lookupProvider, DataGen.MOD_ID, event.existingFileHelper) { inner class Delegate<T : Any>(key: Registry<T>) : MinecraftTagsProvider<T>(event.generator, key, DataGen.MOD_ID, event.existingFileHelper) {
constructor(registry: Registry<T>) : this(registry.key() as ResourceKey<Registry<T>>, { registry.getKey(it) ?: throw NoSuchElementException("$it is not registered in $registry") })
constructor(key: ResourceKey<Registry<T>>) : this(key, vanillaLookup(key))
init { init {
if (isRegistered) if (isRegistered)
event.generator.addProvider(event.includeServer(), this) event.generator.addProvider(event.includeServer(), this)
@ -48,10 +32,10 @@ class TagsProvider(private val event: GatherDataEvent) {
private val tagInTag = HashMap<TagKey<T>, ObjectArraySet<TagKey<T>>>() private val tagInTag = HashMap<TagKey<T>, ObjectArraySet<TagKey<T>>>()
inner class Appender(val tag: TagKey<T>) { inner class Appender(val tag: TagKey<T>) {
constructor(tag: ResourceLocation) : this(TagKey.create(registryKey, tag)) constructor(tag: ResourceLocation) : this(TagKey.create(registry.key(), tag))
init { init {
require(tag.registry == registryKey) { "Trying to create appender for $tag inside registry $registryKey" } require(tag.registry == registry.key()) { "Trying to create appender for $tag inside registry ${registry.key()}" }
} }
private val locations by lazy { tags.computeIfAbsent(tag) { ObjectArraySet() } } private val locations by lazy { tags.computeIfAbsent(tag) { ObjectArraySet() } }
@ -59,25 +43,25 @@ class TagsProvider(private val event: GatherDataEvent) {
private val tagsInTags by lazy { tagInTag.computeIfAbsent(tag) { ObjectArraySet() } } private val tagsInTags by lazy { tagInTag.computeIfAbsent(tag) { ObjectArraySet() } }
fun add(value: ResourceLocation): Appender { fun add(value: ResourceLocation): Appender {
check(locations.add(value)) { "Tag ${tag.location} of registry ${registryKey.location()} already contains $value" } check(locations.add(value)) { "Tag ${tag.location} of registry ${registry.key().location()} already contains $value" }
return this return this
} }
fun add(value: ResourceKey<T>): Appender { fun add(value: ResourceKey<T>): Appender {
require(value.registry() == registryKey.location()) { "Invalid registry in provided ResourceKey: ${value.registry()} (this tag appender is for ${registryKey.location()})" } require(value.registry() == registry.key().location()) { "Invalid registry in provided ResourceKey: ${value.registry()} (this tag appender is for ${registry.key().location()})" }
// check(rigidLocations.add(value)) { "Tag ${tag.location} of registry ${registryKey.location()} already contains $value" } // check(rigidLocations.add(value)) { "Tag ${tag.location} of registry ${registryKey.location()} already contains $value" }
// return this // return this
return add(value.location()) return add(value.location())
} }
fun add(value: TagKey<T>): Appender { fun add(value: TagKey<T>): Appender {
require(value.registry() == registryKey) { "Invalid registry in provided ResourceKey: ${value.registry().location()} (this tag appender is for ${registryKey.location()})" } require(value.registry() == registry.key()) { "Invalid registry in provided ResourceKey: ${value.registry().location()} (this tag appender is for ${registry.key().location()})" }
check(tagsInTags.add(value)) { "Tag ${tag.location} of registry ${registryKey.location()} already contains $value" } check(tagsInTags.add(value)) { "Tag ${tag.location} of registry ${registry.key().location()} already contains $value" }
return this return this
} }
fun add(value: T): Appender { fun add(value: T): Appender {
return add(ResourceKey.create(registryKey, lookup.invoke(value))) return add(ResourceKey.create(registry.key(), registry.getKey(value)!!))
} }
fun add(values: Collection<T>): Appender { fun add(values: Collection<T>): Appender {
@ -95,11 +79,6 @@ class TagsProvider(private val event: GatherDataEvent) {
return this return this
} }
fun add(vararg values: Holder<T>): Appender {
for (value in values) add(value.key ?: throw IllegalArgumentException("Intrusive holder"))
return this
}
fun add(vararg values: TagKey<T>): Appender { fun add(vararg values: TagKey<T>): Appender {
for (value in values) add(value) for (value in values) add(value)
return this return this
@ -115,11 +94,6 @@ class TagsProvider(private val event: GatherDataEvent) {
return this return this
} }
fun add(values: Iterator<T>): Appender {
values.forEach { add(it) }
return this
}
fun leaf(name: String) = Appender(TagKey.create(tag.registry, ResourceLocation(tag.location.namespace, tag.location.path + "/$name"))) fun leaf(name: String) = Appender(TagKey.create(tag.registry, ResourceLocation(tag.location.namespace, tag.location.path + "/$name")))
fun add(leaf: String, value: T) = also { leaf(leaf).add(value) } fun add(leaf: String, value: T) = also { leaf(leaf).add(value) }
@ -133,10 +107,10 @@ class TagsProvider(private val event: GatherDataEvent) {
fun add(leaf: String, vararg value: ResourceLocation) = also { leaf(leaf).add(*value) } fun add(leaf: String, vararg value: ResourceLocation) = also { leaf(leaf).add(*value) }
} }
fun forge(path: String) = Appender(ResourceLocation("c", path)) fun forge(path: String) = Appender(ResourceLocation("forge", path))
fun minecraft(path: String) = Appender(ResourceLocation("minecraft", path)) fun minecraft(path: String) = Appender(ResourceLocation("minecraft", path))
override fun addTags(provider: HolderLookup.Provider) { override fun addTags() {
for ((tag, values) in tags) { for ((tag, values) in tags) {
val appender = tag(tag) val appender = tag(tag)
@ -157,7 +131,7 @@ class TagsProvider(private val event: GatherDataEvent) {
val appender = tag(tag) val appender = tag(tag)
for (value in values) { for (value in values) {
appender.addOptionalTag(value) appender.addTag(value)
} }
} }
} }
@ -178,32 +152,14 @@ class TagsProvider(private val event: GatherDataEvent) {
} }
} }
val blocks = Delegate(BuiltInRegistries.BLOCK) val blocks = Delegate(Registry.BLOCK)
val items = Delegate(BuiltInRegistries.ITEM) val items = Delegate(Registry.ITEM)
val fluids = Delegate(BuiltInRegistries.FLUID) // not supported on 1.19.4 and earlier
val fluidTypes = Delegate(NeoForgeRegistries.Keys.FLUID_TYPES) // val fluids = Delegate(ForgeRegistries.FLUIDS)
val mobEffects = Delegate(BuiltInRegistries.MOB_EFFECT) // val fluidTypes = Delegate(ForgeRegistries.Keys.FLUID_TYPES)
val entityTypes = Delegate(BuiltInRegistries.ENTITY_TYPE) val mobEffects = Delegate(Registry.MOB_EFFECT)
val damageTypes = Delegate(Registries.DAMAGE_TYPE)
val structures = Delegate(Registries.STRUCTURE)
private val coloredItems = EnumMap<DyeColor, Delegate<Item>.Appender>(DyeColor::class.java) val androidImmuneEffects = mobEffects.Appender(MatteryPlayerCapability.ANDROID_IMMUNE_EFFECTS)
init {
DyeColor.entries.forEach {
coloredItems[it] = items.Appender(it.dyedTag)
}
}
fun addToDyeTags(values: Map<out DyeColor?, Item>) {
for ((c, it) in values) {
if (c != null) {
coloredItems[c]!!.add(it)
}
}
}
val androidImmuneEffects = mobEffects.Appender(MatteryPlayer.ANDROID_IMMUNE_EFFECTS)
val requiresShovel = blocks.Appender(BlockTags.MINEABLE_WITH_SHOVEL) val requiresShovel = blocks.Appender(BlockTags.MINEABLE_WITH_SHOVEL)
val requiresAxe = blocks.Appender(BlockTags.MINEABLE_WITH_AXE) val requiresAxe = blocks.Appender(BlockTags.MINEABLE_WITH_AXE)
@ -246,19 +202,10 @@ class TagsProvider(private val event: GatherDataEvent) {
return this return this
} }
fun denseDropOre(vararg blocks: Block): TagsProvider {
for (block in blocks) {
itemOreRatesSingular.add(block.asItem())
blockOreRatesSingular.add(block)
}
return this
}
fun ore(key: String, block: Block): TagsProvider { fun ore(key: String, block: Block): TagsProvider {
val forgeKey = ResourceLocation("c", "ores/$key") val forgeKey = ResourceLocation("forge", "ores/$key")
val b = TagKey.create(Registries.BLOCK, forgeKey) val b = TagKey.create(Registry.BLOCK_REGISTRY, forgeKey)
val i = TagKey.create(Registries.ITEM, forgeKey) val i = TagKey.create(Registry.ITEM_REGISTRY, forgeKey)
items.Appender(i).add(block.asItem()) items.Appender(i).add(block.asItem())
itemOres.add(block.asItem()) itemOres.add(block.asItem())
@ -291,7 +238,6 @@ class TagsProvider(private val event: GatherDataEvent) {
val dusts = items.Appender(Tags.Items.DUSTS) val dusts = items.Appender(Tags.Items.DUSTS)
val ingots = items.Appender(Tags.Items.INGOTS) val ingots = items.Appender(Tags.Items.INGOTS)
val itemOres = items.Appender(Tags.Items.ORES) val itemOres = items.Appender(Tags.Items.ORES)
val gems = items.Appender(Tags.Items.GEMS)
val blockOres = blocks.Appender(Tags.Blocks.ORES) val blockOres = blocks.Appender(Tags.Blocks.ORES)
val plates = items.forge("plates") val plates = items.forge("plates")
val storageBlocksAsItem = items.Appender(Tags.Items.STORAGE_BLOCKS) val storageBlocksAsItem = items.Appender(Tags.Items.STORAGE_BLOCKS)
@ -308,12 +254,12 @@ class TagsProvider(private val event: GatherDataEvent) {
// val blockOreRatesSparse = blocks.forge("ore_rates/sparse") // val blockOreRatesSparse = blocks.forge("ore_rates/sparse")
val blockOreRatesSingular = blocks.Appender(Tags.Blocks.ORE_RATES_SINGULAR) val blockOreRatesSingular = blocks.Appender(Tags.Blocks.ORE_RATES_SINGULAR)
val blockOreRatesDense = blocks.forge("ore_rates/dense") // val blockOreRatesDense = blocks.forge("ore_rates/dense")
// val itemOreRatesSparse = items.forge("ore_rates/sparse") // val itemOreRatesSparse = items.forge("ore_rates/sparse")
val itemOreRatesSingular = items.Appender(Tags.Items.ORE_RATES_SINGULAR) val itemOreRatesSingular = items.Appender(Tags.Items.ORE_RATES_SINGULAR)
val itemOreRatesDense = items.forge("ore_rates/dense") // val itemOreRatesDense = items.forge("ore_rates/dense")
val gameEvents = Delegate(Registries.GAME_EVENT) val gameEvents = Delegate(Registry.GAME_EVENT)
val vibrations = gameEvents.Appender(GameEventTags.VIBRATIONS) val vibrations = gameEvents.Appender(GameEventTags.VIBRATIONS)
fun requiresPickaxe(block: Block, tier: Tier? = null): TagsProvider { fun requiresPickaxe(block: Block, tier: Tier? = null): TagsProvider {
@ -333,16 +279,6 @@ class TagsProvider(private val event: GatherDataEvent) {
return this return this
} }
fun requiresPickaxe(blocks: Stream<Block>, tier: Tier? = null): TagsProvider {
for (block in blocks) requiresPickaxe(block, tier)
return this
}
fun requiresPickaxe(blocks: Iterator<Block>, tier: Tier? = null): TagsProvider {
for (block in blocks) requiresPickaxe(block, tier)
return this
}
fun requiresPickaxe(vararg blocks: Block, tier: Tier? = null): TagsProvider { fun requiresPickaxe(vararg blocks: Block, tier: Tier? = null): TagsProvider {
for (block in blocks) requiresPickaxe(block, tier) for (block in blocks) requiresPickaxe(block, tier)
return this return this

View File

@ -0,0 +1,288 @@
package ru.dbotthepony.mc.otm;
import kotlin.KotlinVersion;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.NonNullList;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.IdMappingEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import ru.dbotthepony.mc.otm.android.AndroidResearchManager;
import ru.dbotthepony.mc.otm.android.feature.EnderTeleporterFeature;
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity;
import ru.dbotthepony.mc.otm.block.entity.blackhole.ExplosionQueue;
import ru.dbotthepony.mc.otm.block.entity.decorative.DevChestBlockEntity;
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability;
import ru.dbotthepony.mc.otm.capability.drive.DrivePool;
import ru.dbotthepony.mc.otm.client.AndroidAbilityKeyMapping;
import ru.dbotthepony.mc.otm.client.AndroidMenuKeyMapping;
import ru.dbotthepony.mc.otm.client.ClientEventHandlerKt;
import ru.dbotthepony.mc.otm.client.ClientTickHandlerKt;
import ru.dbotthepony.mc.otm.client.MatteryGUI;
import ru.dbotthepony.mc.otm.client.model.ExosuitModel;
import ru.dbotthepony.mc.otm.client.model.GravitationStabilizerModel;
import ru.dbotthepony.mc.otm.client.model.TritaniumArmorModel;
import ru.dbotthepony.mc.otm.client.render.ShockwaveRenderer;
import ru.dbotthepony.mc.otm.client.render.blockentity.BatteryBankRenderer;
import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer;
import ru.dbotthepony.mc.otm.compat.adastra.AdAstraCompatKt;
import ru.dbotthepony.mc.otm.compat.curios.CuriosCompatKt;
import ru.dbotthepony.mc.otm.config.AndroidConfig;
import ru.dbotthepony.mc.otm.config.CablesConfig;
import ru.dbotthepony.mc.otm.config.ClientConfig;
import ru.dbotthepony.mc.otm.config.ExopackConfig;
import ru.dbotthepony.mc.otm.config.ItemsConfig;
import ru.dbotthepony.mc.otm.config.MachinesConfig;
import ru.dbotthepony.mc.otm.config.ServerCompatConfig;
import ru.dbotthepony.mc.otm.config.ServerConfig;
import ru.dbotthepony.mc.otm.config.ToolsConfig;
import ru.dbotthepony.mc.otm.item.ChestUpgraderItem;
import ru.dbotthepony.mc.otm.item.tool.ExplosiveHammerItem;
import ru.dbotthepony.mc.otm.item.armor.TritaniumArmorItem;
import ru.dbotthepony.mc.otm.item.QuantumBatteryItem;
import ru.dbotthepony.mc.otm.item.weapon.AbstractWeaponItem;
import ru.dbotthepony.mc.otm.item.PortableCondensationDriveItem;
import ru.dbotthepony.mc.otm.matter.MatterManager;
import ru.dbotthepony.mc.otm.network.*;
import ru.dbotthepony.mc.otm.registry.*;
import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger;
import top.theillusivec4.curios.api.CuriosApi;
import static net.minecraftforge.common.MinecraftForge.EVENT_BUS;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.concurrent.atomic.AtomicInteger;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(OverdriveThatMatters.MOD_ID)
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public final class OverdriveThatMatters {
// Directly reference a log4j logger.
public static final String MOD_ID = "overdrive_that_matters";
private static final Logger LOGGER = LogManager.getLogger();
public static final AtomicInteger INGREDIENT_CACHE_INVALIDATION_COUNTER;
static {
try {
var f = Ingredient.class.getDeclaredField("INVALIDATION_COUNTER");
f.setAccessible(true);
INGREDIENT_CACHE_INVALIDATION_COUNTER = (AtomicInteger) f.get(null);
} catch (IllegalAccessException | NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
public final CreativeModeTab CREATIVE_TAB = new CreativeModeTab("otm") {
@Override
public ItemStack makeIcon() {
return new ItemStack(MItems.INSTANCE.getBATTERY_CREATIVE(), 1);
}
@Override
public void fillItemList(NonNullList<ItemStack> p_40778_) {
MCreativeTabsKt.getMainTabContents().fillIn(p_40778_);
}
};
public final CreativeModeTab CREATIVE_TAB_DECORATIVE = new CreativeModeTab("otm_decorative") {
@Override
public ItemStack makeIcon() {
return new ItemStack(MRegistry.INSTANCE.getVENT().getItem(), 1);
}
@Override
public void fillItemList(NonNullList<ItemStack> p_40778_) {
MCreativeTabsKt.getDecorativeTabContents().fillIn(p_40778_);
}
};
public static OverdriveThatMatters INSTANCE;
public static ResourceLocation loc(String path) {
return new ResourceLocation(MOD_ID, path);
}
private static void checkIfKotlinIsInstalled() {
if (!KotlinVersion.CURRENT.isAtLeast(1, 8, 0)) {
throw new UnsupportedClassVersionError("Installed kotlin version is " + KotlinVersion.CURRENT + ", when at least 1.8.0 is required.");
}
}
public OverdriveThatMatters() {
if (INSTANCE != null) {
throw new IllegalStateException("yo what the fuck");
}
try {
checkIfKotlinIsInstalled();
} catch (Throwable err) {
if (err instanceof NoClassDefFoundError) {
for (int i = 0; i < 16; i++)
LOGGER.fatal("Overdrive That Matters requires Kotlin to be installed, get Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge");
LOGGER.fatal("Overdrive That Matters requires Kotlin to be installed, get Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge", err);
throw new RuntimeException("Overdrive That Matters requires Kotlin to be installed, get Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge");
}
for (int i = 0; i < 16; i++)
LOGGER.fatal("Overdrive That Matters' Kotlin version is not satisfied, get newer Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge");
LOGGER.fatal("Overdrive That Matters' Kotlin version is not satisfied, get newer Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge", err);
throw err;
}
INSTANCE = this;
var modBus = FMLJavaModLoadingContext.get().getModEventBus();
MRegistry.INSTANCE.initialize(modBus);
MatterManager.INSTANCE.initialize(modBus);
modBus.addListener(EventPriority.HIGHEST, this::setup);
modBus.addListener(EventPriority.NORMAL, this::setupClient);
modBus.addListener(EventPriority.NORMAL, MatteryCapability::register);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
modBus.addListener(EventPriority.NORMAL, AndroidMenuKeyMapping.INSTANCE::register);
modBus.addListener(EventPriority.NORMAL, AndroidAbilityKeyMapping.INSTANCE::register);
modBus.addListener(EventPriority.NORMAL, TritaniumArmorModel::register);
modBus.addListener(EventPriority.NORMAL, GravitationStabilizerModel::register);
modBus.addListener(EventPriority.NORMAL, BatteryBankRenderer.Companion::onRegisterAdditionalModels);
modBus.addListener(EventPriority.NORMAL, MatterBatteryBankRenderer.Companion::onRegisterAdditionalModels);
});
ClientConfig.INSTANCE.register();
ServerConfig.INSTANCE.register();
CablesConfig.INSTANCE.register();
ServerCompatConfig.INSTANCE.register();
AndroidConfig.INSTANCE.register();
ExopackConfig.INSTANCE.register();
ItemsConfig.INSTANCE.register();
MachinesConfig.INSTANCE.register();
ToolsConfig.INSTANCE.register();
}
private void setup(final FMLCommonSetupEvent event) {
EVENT_BUS.addListener(EventPriority.NORMAL, DrivePool.INSTANCE::onWorldSave);
EVENT_BUS.addListener(EventPriority.HIGHEST, GlobalEventHandlerKt::onServerStopped);
EVENT_BUS.addListener(EventPriority.HIGHEST, GlobalEventHandlerKt::onServerStopping);
EVENT_BUS.addListener(EventPriority.HIGHEST, GlobalEventHandlerKt::onServerStarting);
EVENT_BUS.addListener(EventPriority.LOWEST, GlobalEventHandlerKt::onLevelTick);
EVENT_BUS.addListener(EventPriority.LOWEST, GlobalEventHandlerKt::onServerTick);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::onPlayerTick);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::isMobEffectApplicable);
EVENT_BUS.addListener(EventPriority.LOW, MatteryPlayerCapability.Companion::onHurtEvent);
EVENT_BUS.addListener(EventPriority.HIGH, MatteryPlayerCapability.Companion::onAttackEvent);
EVENT_BUS.addGenericListener(Entity.class, EventPriority.NORMAL, MatteryPlayerCapability.Companion::onAttachCapabilityEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::onPlayerChangeDimensionEvent);
EVENT_BUS.addListener(EventPriority.LOWEST, MatteryPlayerCapability.Companion::onPlayerDeath);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::onPlayerCloneEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::onStartTracking);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::onStopTracking);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryPlayerCapability.Companion::addCommands);
EVENT_BUS.addListener(EventPriority.NORMAL, MCreativeTabsKt::invalidateCreativeMenus);
EVENT_BUS.addListener(EventPriority.NORMAL, ExplosionQueue.Companion::onWorldTick);
EVENT_BUS.addListener(EventPriority.NORMAL, AbstractWeaponItem.Companion::tick);
EVENT_BUS.addListener(EventPriority.NORMAL, QuantumBatteryItem.Companion::tick);
EVENT_BUS.addListener(EventPriority.LOWEST, PortableCondensationDriveItem.Companion::onPickupEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AndroidResearchManager.INSTANCE::reloadEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AndroidResearchManager.INSTANCE::syncEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, MatterManager.INSTANCE::reloadEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, MatterManager.INSTANCE::onServerStarted);
EVENT_BUS.addListener(EventPriority.NORMAL, MatterManager.INSTANCE::onDataPackSync);
EVENT_BUS.addListener(EventPriority.NORMAL, MatterManager.INSTANCE::addCommands);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryBlockEntity.Companion::onServerStopping);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryBlockEntity.Companion::onLevelUnload);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryBlockEntity.Companion::onWatch);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryBlockEntity.Companion::onForget);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryBlockEntity.Companion::playerDisconnected);
EVENT_BUS.addListener(EventPriority.LOWEST, KillAsAndroidTrigger.INSTANCE::onKill);
EVENT_BUS.addListener(EventPriority.NORMAL, EnderTeleporterFeature.Companion::onEntityDeath);
EVENT_BUS.addListener(EventPriority.HIGH, TritaniumArmorItem.Companion::onHurt);
EVENT_BUS.addListener(EventPriority.NORMAL, ExplosiveHammerItem.Companion::onLeftClickBlock);
EVENT_BUS.addListener(EventPriority.NORMAL, ChestUpgraderItem.Companion::onEntityInteract);
EVENT_BUS.addListener(EventPriority.NORMAL, DevChestBlockEntity.Companion::mappingsChanged);
MatteryPlayerNetworkChannel.INSTANCE.register();
MenuNetworkChannel.INSTANCE.register();
WeaponNetworkChannel.INSTANCE.register();
GenericNetworkChannel.INSTANCE.register();
if (ModList.get().isLoaded(CuriosApi.MODID)) {
EVENT_BUS.addListener(EventPriority.NORMAL, CuriosCompatKt::onCuriosSlotModifiersUpdated);
}
if (AdAstraCompatKt.isAdAstraLoaded()) {
EVENT_BUS.addListener(EventPriority.NORMAL, AdAstraCompatKt::onDamageEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AdAstraCompatKt::onMatteryTick);
}
}
private void setupClient(final FMLClientSetupEvent event) {
EVENT_BUS.addListener(EventPriority.NORMAL, MatterManager.INSTANCE::tooltipEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AbstractWeaponItem.Companion::playerRenderHook);
EVENT_BUS.addListener(EventPriority.NORMAL, AbstractWeaponItem.Companion::fovHook);
EVENT_BUS.addListener(EventPriority.NORMAL, AbstractWeaponItem.Companion::clickHook);
EVENT_BUS.addListener(EventPriority.NORMAL, AbstractWeaponItem.Companion::renderViewModel);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryGUI.INSTANCE::onScreenRender);
EVENT_BUS.addListener(EventPriority.LOWEST, MatteryGUI.INSTANCE::onOpenGUIEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, MatteryGUI.INSTANCE::onRenderGuiEvent);
EVENT_BUS.addListener(EventPriority.HIGH, MatteryGUI.INSTANCE::onLayerRenderEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, ShockwaveRenderer.INSTANCE::onRender);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::onMovementInputUpdate);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::onScreenOpen);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::onPostScreenInit);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::onMouseDragged);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::onMouseScrolled);
EVENT_BUS.addListener(EventPriority.LOWEST, ClientTickHandlerKt::onClientTick);
EVENT_BUS.addListener(EventPriority.HIGHEST, ClientTickHandlerKt::onClientConnected);
EVENT_BUS.addListener(EventPriority.HIGHEST, ClientTickHandlerKt::onClientDisconnected);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientTickHandlerKt::onClientPostRender);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::tooltipEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, QuantumBatteryItem.Companion::clientDisconnect);
EVENT_BUS.addListener(EventPriority.NORMAL, AndroidMenuKeyMapping.INSTANCE::onRenderGuiEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AndroidMenuKeyMapping.INSTANCE::onMouseClick);
EVENT_BUS.addListener(EventPriority.NORMAL, AndroidAbilityKeyMapping.INSTANCE::onRenderGuiEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AndroidAbilityKeyMapping.INSTANCE::onRenderLevel);
EVENT_BUS.addListener(EventPriority.NORMAL, ExosuitModel::onPlayerRendered);
event.enqueueWork(GlobalEventHandlerKt::recordClientThread);
event.enqueueWork(ClientTickHandlerKt::createCursors);
}
}

View File

@ -1,12 +1,10 @@
package ru.dbotthepony.mc.otm.capability; package ru.dbotthepony.mc.otm.capability;
import net.minecraft.core.Direction; import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.capabilities.Capability;
import net.neoforged.neoforge.capabilities.BlockCapability; import net.minecraftforge.common.capabilities.CapabilityToken;
import net.neoforged.neoforge.capabilities.ItemCapability; import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.block.entity.cable.EnergyCableBlockEntity; import ru.dbotthepony.mc.otm.block.entity.cable.EnergyCableBlockEntity;
import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive; import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive;
import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage; import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage;
@ -15,62 +13,69 @@ import ru.dbotthepony.mc.otm.capability.matter.IReplicationTaskProvider;
import ru.dbotthepony.mc.otm.capability.matter.IPatternStorage; import ru.dbotthepony.mc.otm.capability.matter.IPatternStorage;
import ru.dbotthepony.mc.otm.graph.matter.MatterNode; import ru.dbotthepony.mc.otm.graph.matter.MatterNode;
import ru.dbotthepony.mc.otm.graph.storage.StorageNode; import ru.dbotthepony.mc.otm.graph.storage.StorageNode;
import top.theillusivec4.curios.api.type.capability.ICurio;
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public class MatteryCapability { public class MatteryCapability {
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<IMatteryEnergyStorage, @Nullable Direction> BLOCK_ENERGY = BlockCapability.createSided(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "energy"), IMatteryEnergyStorage.class); public static final Capability<IMatteryEnergyStorage> ENERGY = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final ItemCapability<IMatteryEnergyStorage, Void> ITEM_ENERGY = ItemCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "energy"), IMatteryEnergyStorage.class); public static final Capability<MatteryPlayerCapability> MATTERY_PLAYER = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final ItemCapability<IMatterStorage, Void> MATTER_ITEM = ItemCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "matter"), IMatterStorage.class); public static final Capability<IMatterStorage> MATTER = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<IMatterStorage, @Nullable Direction> MATTER_BLOCK = BlockCapability.createSided(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "matter"), IMatterStorage.class); public static final Capability<MatterNode> MATTER_NODE = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<MatterNode, @Nullable Direction> MATTER_NODE = BlockCapability.createSided(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "matter_node"), MatterNode.class); public static final Capability<IPatternStorage> PATTERN = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final ItemCapability<IPatternStorage, Void> PATTERN_ITEM = ItemCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "pattern"), IPatternStorage.class); public static final Capability<IReplicationTaskProvider> TASK = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<IPatternStorage, @Nullable Direction> PATTERN_BLOCK = BlockCapability.createSided(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "pattern"), IPatternStorage.class); public static final Capability<IMatteryDrive<?>> DRIVE = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<IReplicationTaskProvider, Void> REPLICATION_TASK = BlockCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "replication_task"), IReplicationTaskProvider.class); public static final Capability<StorageNode> STORAGE_NODE = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
// this weird cast is required because otherwise IMatteryDrive gets incompatible lower-bound due to Java raw generic type public static final Capability<EnergyCableBlockEntity.Node> ENERGY_CABLE_NODE = CapabilityManager.get(new CapabilityToken<>() {});
// and K2 compiler chokes and dies due to it
public static final ItemCapability<IMatteryDrive<?>, Void> CONDENSATION_DRIVE = (ItemCapability<IMatteryDrive<?>, Void>) (Object) ItemCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "condensation_drive"), IMatteryDrive.class);
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<StorageNode, @Nullable Direction> STORAGE_NODE = BlockCapability.createSided(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "storage_node"), StorageNode.class); public static final Capability<ICuriosItemHandler> CURIOS_INVENTORY = CapabilityManager.get(new CapabilityToken<>() {});
// TODO: remove this
@Nonnull
@NotNull
public static final BlockCapability<EnergyCableBlockEntity.Node, Void> ENERGY_CABLE_NODE = BlockCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "energy_cable_node"), EnergyCableBlockEntity.Node.class);
@Nonnull @Nonnull
@NotNull @NotNull
public static final ItemCapability<IMatteryUpgrade, Void> UPGRADE = ItemCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "machine_upgrade"), IMatteryUpgrade.class); public static final Capability<ICurio> CURIOS_ITEM = CapabilityManager.get(new CapabilityToken<>() {});
@Nonnull @Nonnull
@NotNull @NotNull
public static final BlockCapability<IQuickStackContainer, Void> QUICK_STACK_CONTAINER = BlockCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "quick_stack_container"), IQuickStackContainer.class); public static final Capability<IMatteryUpgrade> UPGRADE = CapabilityManager.get(new CapabilityToken<>() {});
public static void register(RegisterCapabilitiesEvent event) {
event.register(IMatteryEnergyStorage.class);
event.register(MatteryPlayerCapability.class);
event.register(IMatterStorage.class);
event.register(MatterNode.class);
event.register(IPatternStorage.class);
event.register(IReplicationTaskProvider.class);
event.register(IMatteryDrive.class);
event.register(StorageNode.class);
event.register(IMatteryUpgrade.class);
}
} }

View File

@ -1,77 +0,0 @@
package ru.dbotthepony.mc.otm.client.animation;
import net.minecraft.client.animation.AnimationChannel;
import net.minecraft.client.animation.AnimationDefinition;
import net.minecraft.client.animation.Keyframe;
import net.minecraft.client.animation.KeyframeAnimations;
public class BreadMonsterAnimation {
public static final AnimationDefinition IDLE = AnimationDefinition.Builder.withLength(1.44F).looping()
.addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, -2.5F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 3.33F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.44F, KeyframeAnimations.degreeVec(0.0F, -2.5F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Ljaw", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(5.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.44F, KeyframeAnimations.degreeVec(2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("UJaw", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(-5.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.44F, KeyframeAnimations.degreeVec(-2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, -7.5F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.44F, KeyframeAnimations.degreeVec(0.0F, 5.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.build();
public static final AnimationDefinition MOVE = AnimationDefinition.Builder.withLength(1.44F).looping()
.addAnimation("root", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(1.0F, 0.0F, 2.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0.0F, 5.0F, -1.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(-1.0F, 0.0F, -1.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.posVec(-2.0F, 0.0F, 2.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.84F, KeyframeAnimations.posVec(0.0F, 5.0F, -1.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.96F, KeyframeAnimations.posVec(1.0F, 0.0F, -1.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.44F, KeyframeAnimations.posVec(1.0F, 0.0F, 2.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.degreeVec(7.5283F, 4.9571F, 0.6543F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.2F, KeyframeAnimations.degreeVec(12.5094F, 1.6524F, 0.2181F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.84F, KeyframeAnimations.degreeVec(7.5283F, -4.9571F, -0.6543F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.92F, KeyframeAnimations.degreeVec(15.0189F, -3.3047F, -0.4362F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.96F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Ljaw", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.32F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.84F, KeyframeAnimations.degreeVec(25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.04F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("UJaw", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.degreeVec(-25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.32F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.84F, KeyframeAnimations.degreeVec(-30.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(1.04F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("tail", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.degreeVec(-10.0374F, -4.9238F, 0.8704F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.72F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.84F, KeyframeAnimations.degreeVec(-12.5462F, 4.8812F, -1.0848F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.96F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.build();
}

View File

@ -1,155 +0,0 @@
package ru.dbotthepony.mc.otm.client.animation;
import net.minecraft.client.animation.AnimationChannel;
import net.minecraft.client.animation.AnimationDefinition;
import net.minecraft.client.animation.Keyframe;
import net.minecraft.client.animation.KeyframeAnimations;
public class LoaderAnimation {
public static final AnimationDefinition IDLE = AnimationDefinition.Builder.withLength(0.16F).looping()
.addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.08F, KeyframeAnimations.posVec(0F, -0.1F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Head", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.08F, KeyframeAnimations.posVec(0F, -0.1F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftArm", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0.1F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, -0.2F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightArm", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0.1F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, -0.2F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.build();
public static final AnimationDefinition MOVE = AnimationDefinition.Builder.withLength(0.48F).looping()
.addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, 0.3F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.36F, KeyframeAnimations.posVec(0F, 0.3F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Head", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, 0.3F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.36F, KeyframeAnimations.posVec(0F, 0.3F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftLeg", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, -2F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(0F, 1F, 1F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.36F, KeyframeAnimations.posVec(0F, 2F, -2F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0F, 0F, -2F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftLeg", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-22.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(22.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-22.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightLeg", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 2F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, 2F, -2F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(0F, 0F, -2F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.36F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0F, 0F, 2F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightLeg", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(22.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(-22.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(22.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftArm", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, 0.2F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.36F, KeyframeAnimations.posVec(0F, 0.2F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftArm", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(6F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(-6F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(6F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("ElbowR", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-30F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(-19.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-30F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightArm", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.12F, KeyframeAnimations.posVec(0F, 0.2F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.36F, KeyframeAnimations.posVec(0F, 0.2F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightArm", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-6F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(6F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-6F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("ElbowL", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-16.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.24F, KeyframeAnimations.degreeVec(-25.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-16.5F, 0F, 0F), AnimationChannel.Interpolations.LINEAR)
))
.build();
public static final AnimationDefinition ATTACK = AnimationDefinition.Builder.withLength(0.48F).looping()
.addAnimation("LeftArm", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(19.27F, 2.7545F, -11.804F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.degreeVec(25.4138F, -37.1586F, -16.0129F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftArm", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, -1.1F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(-4.0F, -1.0F, 6.9F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(-1.0F, 0.0F, 0.9F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("ElbowR", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-15.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.degreeVec(-22.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.32F, KeyframeAnimations.degreeVec(-75.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-20.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightArm", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(2.0031F, 14.8687F, 7.7614F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.32F, KeyframeAnimations.degreeVec(-105.5693F, -6.858F, 48.036F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-4.4119F, -9.6204F, 22.9232F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightArm", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 1.4F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(3.0F, 3.0F, -9.6F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(0.0F, 2.0F, -2.6F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("ElbowL", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-32.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.2F, KeyframeAnimations.degreeVec(-60.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(-25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Head", new AnimationChannel(AnimationChannel.Targets.POSITION,
new Keyframe(0.0F, KeyframeAnimations.posVec(-0.6F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.posVec(3.0F, 0.0F, -2.6F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.posVec(1.0F, 0.0F, -1.6F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("Body", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 7.5F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.16F, KeyframeAnimations.degreeVec(0.0F, -35.0F, 0.0F), AnimationChannel.Interpolations.LINEAR),
new Keyframe(0.48F, KeyframeAnimations.degreeVec(0.0F, -12.5F, 0.0F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("LeftLeg", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(-4.9953F, -0.2178F, -2.4905F), AnimationChannel.Interpolations.LINEAR)
))
.addAnimation("RightLeg", new AnimationChannel(AnimationChannel.Targets.ROTATION,
new Keyframe(0.0F, KeyframeAnimations.degreeVec(7.4929F, -0.3262F, 2.4786F), AnimationChannel.Interpolations.LINEAR)
))
.build();
}

View File

@ -1,7 +1,9 @@
package ru.dbotthepony.mc.otm.client.model; package ru.dbotthepony.mc.otm.client.model;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.PlayerModel; import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.PartPose;
@ -18,9 +20,9 @@ import net.minecraft.client.renderer.entity.RenderLayerParent;
import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.client.renderer.entity.layers.RenderLayer;
import net.minecraft.client.renderer.entity.player.PlayerRenderer; import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.neoforged.neoforge.client.event.RenderPlayerEvent; import net.minecraftforge.client.event.RenderPlayerEvent;
import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.player.IMatteryPlayer; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.Set; import java.util.Set;
@ -31,8 +33,8 @@ public final class ExosuitModel {
public static final HumanoidModel<AbstractClientPlayer> modelNormal; public static final HumanoidModel<AbstractClientPlayer> modelNormal;
public static final HumanoidModel<AbstractClientPlayer> modelGlow; public static final HumanoidModel<AbstractClientPlayer> modelGlow;
public static final ResourceLocation texture = ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "textures/models/armor/exosuit.png"); public static final ResourceLocation texture = new ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/models/armor/exosuit.png");
public static final ResourceLocation textureColor = ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "textures/models/armor/exosuit_color.png"); public static final ResourceLocation textureColor = new ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/models/armor/exosuit_color.png");
static { static {
MeshDefinition meshdefinition = new MeshDefinition(); MeshDefinition meshdefinition = new MeshDefinition();
@ -103,6 +105,7 @@ public final class ExosuitModel {
super(p_117346_); super(p_117346_);
} }
@SuppressWarnings("OptionalGetWithoutIsPresent")
@Override @Override
public void render( public void render(
@Nonnull PoseStack poseStack, @Nonnull PoseStack poseStack,
@ -119,7 +122,13 @@ public final class ExosuitModel {
if (player.isInvisible()) if (player.isInvisible())
return; return;
var mattery = ((IMatteryPlayer) player).getOtmPlayer(); var cap = player.getCapability(MatteryCapability.MATTERY_PLAYER);
if (!cap.isPresent()) {
return;
}
var mattery = cap.resolve().get();
if (mattery.getHasExopack() && mattery.isExopackVisible()) { if (mattery.getHasExopack() && mattery.isExopackVisible()) {
var model = getParentModel(); var model = getParentModel();
@ -134,10 +143,10 @@ public final class ExosuitModel {
packedLight, packedLight,
overlayCoords, overlayCoords,
// rgba // rgba
-1 1f, 1f, 1f, 1f
); );
var color = mattery.getExopackColor(); var color = cap.resolve().get().getExopackColor();
if (color != null) { if (color != null) {
modelNormal.renderToBuffer( modelNormal.renderToBuffer(
@ -145,7 +154,8 @@ public final class ExosuitModel {
bufferSource.getBuffer(RenderType.entityCutoutNoCull(textureColor)), bufferSource.getBuffer(RenderType.entityCutoutNoCull(textureColor)),
packedLight, packedLight,
overlayCoords, overlayCoords,
color.toBGRA() // rgba
color.getRed(), color.getGreen(), color.getBlue(), 1f
); );
} }
@ -155,7 +165,8 @@ public final class ExosuitModel {
bufferSource.getBuffer(RenderType.entityTranslucentEmissive(texture)), bufferSource.getBuffer(RenderType.entityTranslucentEmissive(texture)),
packedLight, packedLight,
overlayCoords, overlayCoords,
-1 // rgba
1f, 1f, 1f, 1f
); );
} else { } else {
modelGlow.renderToBuffer( modelGlow.renderToBuffer(
@ -164,7 +175,7 @@ public final class ExosuitModel {
packedLight, packedLight,
overlayCoords, overlayCoords,
// rgba // rgba
-1 1f, 1f, 1f, 1f
); );
} }

View File

@ -4,7 +4,8 @@ import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.model.geom.builders.*;
import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.event.EntityRenderersEvent;
import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.registry.MNames; import ru.dbotthepony.mc.otm.registry.MNames;

View File

@ -11,7 +11,8 @@ import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.model.geom.builders.*;
import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.event.EntityRenderersEvent;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;

View File

@ -1,73 +0,0 @@
package ru.dbotthepony.mc.otm.client.model.entity;
import net.minecraft.client.model.HierarchicalModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.CubeDeformation;
import net.minecraft.client.model.geom.builders.CubeListBuilder;
import net.minecraft.client.model.geom.builders.LayerDefinition;
import net.minecraft.client.model.geom.builders.MeshDefinition;
import net.minecraft.client.model.geom.builders.PartDefinition;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import org.jetbrains.annotations.NotNull;
import ru.dbotthepony.mc.otm.client.animation.BreadMonsterAnimation;
import ru.dbotthepony.mc.otm.entity.BreadMonster;
import ru.dbotthepony.mc.otm.registry.MNames;
import static ru.dbotthepony.mc.otm.OverdriveThatMatters.loc;
public class BreadMonsterModel {
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(loc(MNames.BREAD_MONSTER), "main");
private static HierarchicalModel<BreadMonster> model;
private static LayerDefinition def;
public static HierarchicalModel<BreadMonster> getModel() {
if (model == null) {
return model = new BreadMonsterHierarchicalModel<>(def.bakeRoot());
}
return model;
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F));
PartDefinition Body = root.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -3.0F, -5.0F, 8.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -3.0F, 0.0F));
PartDefinition Ljaw = Body.addOrReplaceChild("Ljaw", CubeListBuilder.create().texOffs(26, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, 2.0F, -3.0F));
PartDefinition UJaw = Body.addOrReplaceChild("UJaw", CubeListBuilder.create().texOffs(0, 24).addBox(-4.0F, -2.0F, -4.0F, 8.0F, 3.0F, 5.0F, new CubeDeformation(0.1F)), PartPose.offset(0.0F, -1.0F, -3.0F));
PartDefinition tail = Body.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 12).addBox(-4.0F, -3.0F, -0.1F, 8.0F, 6.0F, 6.0F, new CubeDeformation(-0.1F)), PartPose.offset(0.0F, 0.0F, 1.0F));
model = null;
return def = LayerDefinition.create(meshdefinition, 64, 32);
}
private static class BreadMonsterHierarchicalModel<T extends BreadMonster> extends HierarchicalModel<T> {
private final ModelPart root;
public BreadMonsterHierarchicalModel(ModelPart root) {
this.root = root.getChild("root");
}
@Override
public void setupAnim(@NotNull T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
this.root().getAllParts().forEach(ModelPart::resetPose);
// this.applyStatic(BreadMonsterAnimation.IDLE);
this.animate(entity.getIdleState(), BreadMonsterAnimation.IDLE, ageInTicks, 1.0F);
this.animateWalk(BreadMonsterAnimation.MOVE, limbSwing, limbSwingAmount, 1.0F, 2.5F);
}
@Override
public @NotNull ModelPart root() {
return this.root;
}
}
public static void register(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(LAYER_LOCATION, BreadMonsterModel::createBodyLayer);
}
}

View File

@ -1,100 +0,0 @@
package ru.dbotthepony.mc.otm.client.model.entity;
import net.minecraft.client.model.HierarchicalModel;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.*;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import org.jetbrains.annotations.NotNull;
import ru.dbotthepony.mc.otm.client.animation.LoaderAnimation;
import ru.dbotthepony.mc.otm.entity.Loader;
import ru.dbotthepony.mc.otm.registry.MNames;
import static ru.dbotthepony.mc.otm.OverdriveThatMatters.loc;
public class LoaderModel {
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(loc(MNames.LOADER), "main");
private static HierarchicalModel<Loader> model;
private static LayerDefinition def;
public static HierarchicalModel<Loader> getModel() {
if (def == null) {
def = createBodyLayer(); // Ensure def is created before using it
}
if (model == null) {
return model = new LoaderHierarchicalModel<>(def.bakeRoot());
}
return model;
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F));
PartDefinition Head = root.addOrReplaceChild("Head", CubeListBuilder.create().texOffs(48, 23).addBox(-3.0F, -1.0F, -2.0F, 6.0F, 3.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(-4.0F, -32.0F, -5.0F));
PartDefinition Body = root.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(0, 0).addBox(-10.0F, -16.0F, -5.0F, 20.0F, 10.0F, 13.0F, new CubeDeformation(0.0F))
.texOffs(0, 50).addBox(-3.0F, -3.0F, -4.0F, 6.0F, 5.0F, 8.0F, new CubeDeformation(0.0F))
.texOffs(112, 52).addBox(10.0F, -13.0F, 0.0F, 2.0F, 6.0F, 6.0F, new CubeDeformation(0.0F))
.texOffs(96, 52).addBox(-12.0F, -13.0F, -1.0F, 2.0F, 6.0F, 6.0F, new CubeDeformation(0.0F))
.texOffs(53, 0).addBox(-5.0F, -1.0F, 4.0F, 10.0F, 4.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -26.0F, -1.0F));
PartDefinition antenna_r1 = Body.addOrReplaceChild("antenna_r1", CubeListBuilder.create().texOffs(76, 6).addBox(0.0F, -7.0F, -1.0F, 0.0F, 14.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(8.0F, -22.0F, 8.0F, -0.2618F, 0.0F, 0.0F));
PartDefinition waist_r1 = Body.addOrReplaceChild("waist_r1", CubeListBuilder.create().texOffs(28, 50).addBox(-2.0F, -5.0F, -4.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -3.0F, 2.0F, -0.2618F, 0.0F, 0.0F));
PartDefinition LeftLeg = root.addOrReplaceChild("LeftLeg", CubeListBuilder.create().texOffs(106, 24).addBox(0.0F, 10.0F, -2.0F, 4.0F, 16.0F, 7.0F, new CubeDeformation(0.0F))
.texOffs(66, 46).addBox(-1.0F, -2.0F, -3.0F, 6.0F, 12.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(4.0F, -26.0F, -1.0F));
PartDefinition RightLeg = root.addOrReplaceChild("RightLeg", CubeListBuilder.create().texOffs(84, 24).addBox(-4.0F, 10.0F, -2.0F, 4.0F, 16.0F, 7.0F, new CubeDeformation(0.0F))
.texOffs(48, 34).addBox(-5.0F, -2.0F, -3.0F, 6.0F, 12.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(-4.0F, -26.0F, -1.0F));
PartDefinition LeftArm = root.addOrReplaceChild("LeftArm", CubeListBuilder.create().texOffs(104, 0).addBox(-1.0F, -7.0F, -4.0F, 4.0F, 16.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offset(13.0F, -36.0F, 2.0F));
PartDefinition ElbowL = LeftArm.addOrReplaceChild("ElbowL", CubeListBuilder.create().texOffs(24, 23).addBox(-2.0F, -0.2F, -2.0F, 4.0F, 19.0F, 8.0F, new CubeDeformation(-0.1F)), PartPose.offset(1.0F, 9.0F, -1.0F));
PartDefinition RightArm = root.addOrReplaceChild("RightArm", CubeListBuilder.create().texOffs(80, 0).addBox(-3.0F, -7.0F, -4.0F, 4.0F, 16.0F, 8.0F, new CubeDeformation(0.0F)), PartPose.offset(-13.0F, -36.0F, 1.0F));
PartDefinition ElbowR = RightArm.addOrReplaceChild("ElbowR", CubeListBuilder.create().texOffs(0, 23).addBox(-2.0F, -0.2F, -2.0F, 4.0F, 19.0F, 8.0F, new CubeDeformation(-0.1F)), PartPose.offset(-1.0F, 9.0F, -1.0F));
model = null;
return def = LayerDefinition.create(meshdefinition, 128, 64);
}
private static class LoaderHierarchicalModel<T extends Loader> extends HierarchicalModel<T> {
private final ModelPart root;
public LoaderHierarchicalModel(ModelPart root) {
this.root = root.getChild("root");
}
@Override
public void setupAnim(@NotNull T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
this.root().getAllParts().forEach(ModelPart::resetPose);
this.root.getChild("Head").yRot = netHeadYaw * ((float) Math.PI / 180F);
this.root.getChild("Head").xRot = headPitch * ((float) Math.PI / 180F);
if (entity.getAttackAnimationTick() > 0) {
this.animate(entity.getIdleState(), LoaderAnimation.ATTACK, ageInTicks, 1.0F);
}
this.animateWalk(LoaderAnimation.MOVE, limbSwing, limbSwingAmount, 0.8F, 2.5F);
this.animate(entity.getIdleState(), LoaderAnimation.IDLE, ageInTicks, 1.0F);
}
public ModelPart getHead() {
return this.root.getChild("Head");
}
@Override
public @NotNull ModelPart root() {
return this.root;
}
}
public static void register(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(LAYER_LOCATION, LoaderModel::createBodyLayer);
}
}

View File

@ -5,7 +5,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.dbotthepony.mc.otm.multiblock.GlobalBlockEntityRemovalListener; import ru.dbotthepony.mc.otm.core.MultiblockKt;
// because i know // because i know
// someone // someone
@ -16,10 +16,9 @@ import ru.dbotthepony.mc.otm.multiblock.GlobalBlockEntityRemovalListener;
public abstract class BlockEntityMixin { public abstract class BlockEntityMixin {
@Inject( @Inject(
at = @At("TAIL"), at = @At("TAIL"),
method = "setRemoved()V", method = "setRemoved()V"
remap = false
) )
public void setRemovedListener(CallbackInfo ci) { public void setRemovedListener(CallbackInfo ci) {
GlobalBlockEntityRemovalListener.Companion.onBlockEntityInvalidated((BlockEntity) (Object) this); MultiblockKt.onBlockEntityInvalidated((BlockEntity) (Object) this);
} }
} }

View File

@ -1,36 +0,0 @@
package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.dbotthepony.mc.otm.item.tool.RedstoneInteractorItem;
@Mixin(BlockBehaviour.BlockStateBase.class)
public abstract class BlockStateBaseMixin {
@Shadow
protected abstract BlockState asState();
@Inject(
method = "getSignal(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)I",
at = @At("HEAD"),
cancellable = true,
remap = false
)
public void getSignal(BlockGetter p_60747_, BlockPos p_60748_, Direction p_60749_, CallbackInfoReturnable<Integer> info) {
if (p_60747_ instanceof Level level) {
int hookResult = RedstoneInteractorItem.Companion.getSignalHook(level, this.asState(), p_60748_, p_60749_);
if (hookResult != -1) {
info.setReturnValue(hookResult);
}
}
}
}

View File

@ -9,7 +9,7 @@ import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu;
@Mixin(DispenserBlockEntity.class) @Mixin(DispenserBlockEntity.class)
public abstract class DispenserBlockEntityMixin { public abstract class DispenserBlockEntityMixin {
@Overwrite(remap = false) @Overwrite
public AbstractContainerMenu createMenu(int p_59312_, Inventory p_59313_) { public AbstractContainerMenu createMenu(int p_59312_, Inventory p_59313_) {
return MatteryChestMenu.c3x3(p_59312_, p_59313_, (DispenserBlockEntity) (Object) this); return MatteryChestMenu.c3x3(p_59312_, p_59313_, (DispenserBlockEntity) (Object) this);
} }

View File

@ -0,0 +1,24 @@
package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.dbotthepony.mc.otm.item.weapon.EnergySwordItem;
@Mixin(EnchantmentHelper.class)
public class EnchantmentHelperMixin {
@Inject(
method = "getSweepingDamageRatio(Lnet/minecraft/world/entity/LivingEntity;)F",
at = @At("HEAD"),
cancellable = true)
private static void getSweepingDamageRatio(LivingEntity p_44822_, CallbackInfoReturnable<Float> info) {
var result = EnergySwordItem.getSweepingDamageRatioHook(p_44822_);
if (result != null) {
info.setReturnValue(result);
}
}
}

View File

@ -0,0 +1,49 @@
package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.world.Difficulty;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodData;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
@Mixin(FoodData.class)
public class FoodDataMixin {
@Shadow
private int lastFoodLevel;
@Shadow
private int tickTimer;
@Shadow
private int foodLevel;
@Shadow
private float exhaustionLevel;
@Inject(
method = "tick(Lnet/minecraft/world/entity/player/Player;)V",
at = @At("HEAD"),
cancellable = true
)
private void tick(Player player, CallbackInfo info) {
player.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresent(it -> {
if (it.isAndroid()) {
info.cancel();
// полностью подменяем логику если андроид
lastFoodLevel = foodLevel;
if (player.level.getDifficulty() == Difficulty.PEACEFUL) {
exhaustionLevel = 0f;
} else {
tickTimer = 0;
}
// не обновляем уровень истощения ибо он обнуляется логикой внутри MatteryPlayerCapability
// а так же не регенерируем
// ну и не получаем урон от "голодания"
}
});
}
}

View File

@ -1,25 +0,0 @@
package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import static ru.dbotthepony.mc.otm.client.render.RenderHelperKt.popScissorRect;
import static ru.dbotthepony.mc.otm.client.render.RenderHelperKt.pushScissorRect;
// because scissor stack fucking sucks.
// mostly because it is not a stack at all.
@Mixin(GuiGraphics.class)
public abstract class GuiGraphicsMixin {
@Overwrite(remap = false)
public void enableScissor(int x0, int y0, int x1, int y1) {
double scale = Minecraft.getInstance().getWindow().getGuiScale();
pushScissorRect((int) (scale * x0), (int) (scale * y0), (int) (scale * (x1 - x0)), (int) (scale * (y1 - y0)));
}
@Overwrite(remap = false)
public void disableScissor() {
popScissorRect();
}
}

View File

@ -9,7 +9,7 @@ import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu;
@Mixin(HopperBlockEntity.class) @Mixin(HopperBlockEntity.class)
public abstract class HopperBlockEntityMixin { public abstract class HopperBlockEntityMixin {
@Overwrite(remap = false) @Overwrite
public AbstractContainerMenu createMenu(int p_59312_, Inventory p_59313_) { public AbstractContainerMenu createMenu(int p_59312_, Inventory p_59313_) {
return MatteryChestMenu.hopper(p_59312_, p_59313_, (HopperBlockEntity) (Object) this); return MatteryChestMenu.hopper(p_59312_, p_59313_, (HopperBlockEntity) (Object) this);
} }

View File

@ -6,16 +6,16 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.server.triggers.MatteryInventoryChangeTrigger; import ru.dbotthepony.mc.otm.triggers.MatteryInventoryChangeTrigger;
@Mixin(InventoryChangeTrigger.class) @Mixin(InventoryChangeTrigger.class)
public abstract class InventoryChangeTriggerMixin { public abstract class InventoryChangeTriggerMixin {
@Overwrite(remap = false) @Overwrite
public void trigger(ServerPlayer p_43150_, Inventory p_43151_, ItemStack p_43152_) { public void trigger(ServerPlayer p_43150_, Inventory p_43151_, ItemStack p_43152_) {
MatteryInventoryChangeTrigger.INSTANCE.trigger(p_43150_, p_43151_, p_43152_); MatteryInventoryChangeTrigger.INSTANCE.trigger(p_43150_, p_43151_, p_43152_);
} }
@Overwrite(remap = false) @Overwrite
private void trigger(ServerPlayer p_43154_, Inventory p_43155_, ItemStack p_43156_, int p_43157_, int p_43158_, int p_43159_) { private void trigger(ServerPlayer p_43154_, Inventory p_43155_, ItemStack p_43156_, int p_43157_, int p_43158_, int p_43159_) {
MatteryInventoryChangeTrigger.INSTANCE.trigger(p_43154_, p_43155_, p_43156_, p_43157_, p_43158_, p_43159_); MatteryInventoryChangeTrigger.INSTANCE.trigger(p_43154_, p_43155_, p_43156_, p_43157_, p_43158_, p_43159_);
} }

View File

@ -0,0 +1,30 @@
package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.registry.MCreativeTabsKt;
@Mixin(Item.class)
public abstract class ItemMixin {
@Inject(
at = @At("HEAD"),
method = "getItemCategory()Lnet/minecraft/world/item/CreativeModeTab;",
cancellable = true
)
public void getItemCategory$hook(CallbackInfoReturnable<CreativeModeTab> info) {
try {
if (MCreativeTabsKt.getMainTabContents().contains((Item) ((Object) this))) {
info.setReturnValue(OverdriveThatMatters.INSTANCE.CREATIVE_TAB);
} else if (MCreativeTabsKt.getDecorativeTabContents().contains((Item) ((Object) this))) {
info.setReturnValue(OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE);
}
} catch(Throwable err) {
info.setReturnValue(CreativeModeTab.TAB_MISC); // fuck you shapedrecipebuilder
}
}
}

View File

@ -1,19 +0,0 @@
package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
import net.neoforged.fml.ModList;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import ru.dbotthepony.mc.otm.util.IMatteryLevel;
import ru.dbotthepony.mc.otm.util.GJRAND64RandomSource;
@Mixin(Level.class)
public abstract class LevelMixin implements IMatteryLevel {
private final RandomSource otm_random = ModList.get().isLoaded("better_random") ? null : new GJRAND64RandomSource();
@Override
public @Nullable RandomSource getOtmRandom() {
return otm_random;
}
}

View File

@ -1,32 +1,37 @@
package ru.dbotthepony.mc.otm.mixin; package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; import net.minecraft.world.entity.projectile.AbstractHurtingProjectile;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.dbotthepony.mc.otm.player.IMatteryPlayer; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.util.IMatteryLevel; import ru.dbotthepony.mc.otm.registry.MSoundEvents;
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents;
@Mixin(AbstractHurtingProjectile.class) @Mixin(AbstractHurtingProjectile.class)
public class MixinAbstractHurtingProjectile { public class MixinAbstractHurtingProjectile {
@Inject( @Inject(
method = "onDeflection(Lnet/minecraft/world/entity/Entity;Z)V", method = "hurt(Lnet/minecraft/world/damagesource/DamageSource;F)Z",
remap = false, at = @At(
at = @At("TAIL") value = "INVOKE",
target = "Lnet/minecraft/world/entity/projectile/AbstractHurtingProjectile;markHurt()V",
ordinal = 0
)
) )
public void onDeflection(Entity entity, boolean byAttack, CallbackInfo info) { public void onProjectileHit(DamageSource pSource, float pAmount, CallbackInfoReturnable<Boolean> cir) {
if (entity instanceof IMatteryPlayer player) { Entity entity = pSource.getEntity();
var cap = player.getOtmPlayer(); if (entity == null) return;
entity.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresent(cap -> {
AbstractHurtingProjectile proj = (AbstractHurtingProjectile)(Object)this; AbstractHurtingProjectile proj = (AbstractHurtingProjectile)(Object)this;
if (cap.isAndroid() && proj.getOwner() != entity) { if (cap.isAndroid() && proj.getOwner() != entity) {
entity.level().playSound(entity, proj.blockPosition(), MSoundEvents.INSTANCE.getANDROID_PROJ_PARRY(), SoundSource.PLAYERS, 1.0f, 0.95f + ((IMatteryLevel) entity.level()).getOtmRandom().nextFloat() * 0.1f); entity.level.playSound((Player) entity, proj.blockPosition(), MSoundEvents.INSTANCE.getANDROID_PROJ_PARRY(), SoundSource.PLAYERS, 1.0f, 0.95f + entity.level.random.nextFloat() * 0.1f);
} }
} });
} }
} }

View File

@ -6,7 +6,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.dbotthepony.mc.otm.registry.game.MBlocks; import ru.dbotthepony.mc.otm.registry.MBlocks;
@Mixin(AnvilBlock.class) @Mixin(AnvilBlock.class)
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -14,20 +14,19 @@ public class MixinAnvilBlock {
@Inject( @Inject(
method = "damage(Lnet/minecraft/world/level/block/state/BlockState;)Lnet/minecraft/world/level/block/state/BlockState;", method = "damage(Lnet/minecraft/world/level/block/state/BlockState;)Lnet/minecraft/world/level/block/state/BlockState;",
at = @At("HEAD"), at = @At("HEAD"),
remap = false,
cancellable = true) cancellable = true)
private static void damage(BlockState pState, CallbackInfoReturnable<BlockState> info) { private static void damage(BlockState pState, CallbackInfoReturnable<BlockState> info) {
for (var list : MBlocks.INSTANCE.getTRITANIUM_ANVIL().values()) { var list = MBlocks.INSTANCE.getTRITANIUM_ANVIL();
for (int i = 0; i < list.size(); i++) {
if (pState.is(list.get(i))) {
if (i == list.size() - 1) {
info.setReturnValue(null);
} else {
info.setReturnValue(list.get(i + 1).defaultBlockState().setValue(AnvilBlock.FACING, pState.getValue(AnvilBlock.FACING)));
}
return; for (int i = 0; i < list.size(); i++) {
if (pState.is(list.get(i))) {
if (i == list.size() - 1) {
info.setReturnValue(null);
} else {
info.setReturnValue(list.get(i + 1).defaultBlockState().setValue(AnvilBlock.FACING, pState.getValue(AnvilBlock.FACING)));
} }
return;
} }
} }
} }

View File

@ -1,7 +1,7 @@
package ru.dbotthepony.mc.otm.mixin; package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.server.packs.resources.ResourceProvider; import net.minecraft.server.packs.resources.ResourceProvider;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -13,24 +13,21 @@ import ru.dbotthepony.mc.otm.client.render.RenderHelperKt;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
public class MixinGameRenderer { public class MixinGameRenderer {
@Inject( @Inject(
method = "render(Lnet/minecraft/client/DeltaTracker;Z)V", method = "render(FJZ)V",
remap = false,
at = @At( at = @At(
value = "INVOKE", value = "INVOKE",
remap = false,
target = "Lcom/mojang/blaze3d/pipeline/RenderTarget;bindWrite(Z)V" target = "Lcom/mojang/blaze3d/pipeline/RenderTarget;bindWrite(Z)V"
) )
) )
private void render(DeltaTracker p_348648_, boolean p_109096_, CallbackInfo ci) { private void render(float p_109094_, long p_109095_, boolean p_109096_, CallbackInfo ci) {
GlitchRenderer.render(); GlitchRenderer.render();
} }
@Inject( @Inject(
method = "reloadShaders(Lnet/minecraft/server/packs/resources/ResourceProvider;)V", method = "reloadShaders(Lnet/minecraft/server/packs/resources/ResourceManager;)V",
remap = false,
at = @At("HEAD") at = @At("HEAD")
) )
private void reloadShaders(ResourceProvider p_250719_, CallbackInfo ci) { private void reloadShaders(ResourceManager p_250719_, CallbackInfo ci) {
RenderHelperKt.reloadShaders(p_250719_); RenderHelperKt.reloadShaders(p_250719_);
} }
} }

View File

@ -3,13 +3,13 @@ package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.CrashReport; import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory; import net.minecraft.CrashReportCategory;
import net.minecraft.ReportedException; import net.minecraft.ReportedException;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.Container; import net.minecraft.world.Container;
import net.minecraft.world.ContainerHelper; import net.minecraft.world.ContainerHelper;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.registries.ForgeRegistries;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@ -17,21 +17,20 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.dbotthepony.mc.otm.player.IMatteryPlayer; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.player.MatteryPlayer; import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability;
import java.util.function.Predicate; import java.util.function.Predicate;
@Mixin(Inventory.class) @Mixin(Inventory.class)
public class MixinInventory { public class MixinInventory {
@Final @Final
@Shadow(remap = false) @Shadow
public Player player; public Player player;
@Inject( @Inject(
method = "add(ILnet/minecraft/world/item/ItemStack;)Z", method = "add(ILnet/minecraft/world/item/ItemStack;)Z",
at = @At("HEAD"), at = @At("HEAD"),
remap = false,
cancellable = true cancellable = true
) )
private void add(int pSlot, ItemStack pStack, CallbackInfoReturnable<Boolean> hook) { private void add(int pSlot, ItemStack pStack, CallbackInfoReturnable<Boolean> hook) {
@ -40,52 +39,52 @@ public class MixinInventory {
} }
if (pSlot == -1) { if (pSlot == -1) {
try { this.player.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresent(it -> {
hook.setReturnValue(((IMatteryPlayer) this.player).getOtmPlayer().inventoryAddImpl(pStack)); try {
} catch (Throwable throwable) { hook.setReturnValue(it.inventoryAddImpl(pStack));
CrashReport crashreport = CrashReport.forThrowable(throwable, "Adding item to inventory (Overdrive That Matters detour)"); } catch (Throwable throwable) {
CrashReportCategory crashreportcategory = crashreport.addCategory("Item being added"); CrashReport crashreport = CrashReport.forThrowable(throwable, "Adding item to inventory (Overdrive That Matters detour)");
crashreportcategory.setDetail("Registry Name", () -> String.valueOf(BuiltInRegistries.ITEM.getKey(pStack.getItem()))); CrashReportCategory crashreportcategory = crashreport.addCategory("Item being added");
crashreportcategory.setDetail("Item Class", () -> pStack.getItem().getClass().getName()); crashreportcategory.setDetail("Registry Name", () -> String.valueOf(ForgeRegistries.ITEMS.getKey(pStack.getItem())));
crashreportcategory.setDetail("Item ID", Item.getId(pStack.getItem())); crashreportcategory.setDetail("Item Class", () -> pStack.getItem().getClass().getName());
crashreportcategory.setDetail("Item data", pStack.getDamageValue()); crashreportcategory.setDetail("Item ID", Item.getId(pStack.getItem()));
crashreportcategory.setDetail("Item name", () -> pStack.getHoverName().getString()); crashreportcategory.setDetail("Item data", pStack.getDamageValue());
throw new ReportedException(crashreport); crashreportcategory.setDetail("Item name", () -> pStack.getHoverName().getString());
} throw new ReportedException(crashreport);
}
});
} }
} }
@Inject( @Inject(
method = "dropAll()V", method = "dropAll()V",
remap = false,
at = @At("TAIL") at = @At("TAIL")
) )
private void dropAll(CallbackInfo ci) { private void dropAll(CallbackInfo ci) {
MatteryPlayer.inventoryDropAll((Inventory)(Object)this); MatteryPlayerCapability.inventoryDropAll((Inventory)(Object)this);
} }
@Inject( @Inject(
method = "clearContent()V", method = "clearContent()V",
remap = false,
at = @At("TAIL") at = @At("TAIL")
) )
private void clearContent(CallbackInfo ci) { private void clearContent(CallbackInfo ci) {
MatteryPlayer.inventoryClearContent((Inventory)(Object)this); MatteryPlayerCapability.inventoryClearContent((Inventory)(Object)this);
} }
@Inject( @Inject(
method = "clearOrCountMatchingItems(Ljava/util/function/Predicate;ILnet/minecraft/world/Container;)I", method = "clearOrCountMatchingItems(Ljava/util/function/Predicate;ILnet/minecraft/world/Container;)I",
remap = false,
at = @At("RETURN"), at = @At("RETURN"),
cancellable = true cancellable = true
) )
private void clearOrCountMatchingItems(Predicate<ItemStack> predicate, int count, Container container, CallbackInfoReturnable<Integer> cir) { private void clearOrCountMatchingItems(Predicate<ItemStack> predicate, int count, Container container, CallbackInfoReturnable<Integer> cir) {
var it = ((IMatteryPlayer) this.player).getOtmPlayer(); player.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresent(it -> {
if (!it.getHasExopack()) return; if (!it.getHasExopack()) return;
int i = cir.getReturnValue(); int i = cir.getReturnValue();
i += ContainerHelper.clearOrCountMatchingItems(it.getExopackContainer(), predicate, count - i, count == 0); i += ContainerHelper.clearOrCountMatchingItems(it.getExopackContainer(), predicate, count - i, count == 0);
cir.setReturnValue(i); cir.setReturnValue(i);
});
} }
} }

View File

@ -1,72 +1,68 @@
package ru.dbotthepony.mc.otm.mixin; package ru.dbotthepony.mc.otm.mixin;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.GameRules; import net.minecraftforge.event.ForgeEventFactory;
import net.neoforged.neoforge.event.EventHooks;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ru.dbotthepony.mc.otm.player.IMatteryPlayer; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.config.ServerConfig; import ru.dbotthepony.mc.otm.config.ServerConfig;
import ru.dbotthepony.mc.otm.registry.game.MItems; import ru.dbotthepony.mc.otm.core.util.ExperienceUtilsKt;
import ru.dbotthepony.mc.otm.util.ExperienceUtilsKt; import ru.dbotthepony.mc.otm.registry.MItems;
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
@Mixin(LivingEntity.class) @Mixin(LivingEntity.class)
public class MixinLivingEntity { public class MixinLivingEntity {
@Shadow(remap = false) @Shadow
@Nullable
protected Player lastHurtByPlayer; protected Player lastHurtByPlayer;
@Inject( @Inject(
method = "dropExperience(Lnet/minecraft/world/entity/Entity;)V", method = "dropExperience()V",
remap = false,
at = @At("HEAD"), at = @At("HEAD"),
cancellable = true) cancellable = true)
public void dropExperience(@Nullable Entity killer, CallbackInfo hook) { public void dropExperience(CallbackInfo hook) {
if (((Object) this) instanceof Player player && ServerConfig.INSTANCE.getDROP_EXPERIENCE_CAPSULES() && !player.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY)) { if (((Object) this) instanceof Player player && ServerConfig.INSTANCE.getDROP_EXPERIENCE_CAPSULES()) {
hook.cancel(); player.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresent(it -> {
hook.cancel();
var android = ((IMatteryPlayer) player).getOtmPlayer(); long totalExperience = ExperienceUtilsKt.getTotalXpRequiredForLevel(player.experienceLevel);
long totalExperience = ExperienceUtilsKt.getTotalXpRequiredForLevel(player.experienceLevel); totalExperience += (long) (player.experienceProgress * player.getXpNeededForNextLevel());
totalExperience += (long) (player.experienceProgress * player.getXpNeededForNextLevel());
double min = ServerConfig.INSTANCE.getMIN_EXPERIENCE_DROPPED(); double min = ServerConfig.INSTANCE.getMIN_EXPERIENCE_DROPPED();
double max = ServerConfig.INSTANCE.getMAX_EXPERIENCE_DROPPED(); double max = ServerConfig.INSTANCE.getMAX_EXPERIENCE_DROPPED();
if (min == max) { if (min == max) {
totalExperience *= min; totalExperience *= min;
} else {
if (min > max) {
min = 0.4;
max = 0.8;
}
totalExperience *= min + player.getRandom().nextDouble() * (max - min);
}
if (totalExperience >= Integer.MAX_VALUE) {
int hooked = EventHooks.getExperienceDrop(player, lastHurtByPlayer, Integer.MAX_VALUE);
if (hooked != Integer.MAX_VALUE) {
totalExperience = hooked;
}
} else {
totalExperience = EventHooks.getExperienceDrop(player, lastHurtByPlayer, (int) totalExperience);
}
if (totalExperience > 0L) {
if (android.isAndroid()) {
player.drop(MItems.INSTANCE.getESSENCE_DRIVE().make(totalExperience), true, false);
} else { } else {
player.drop(MItems.INSTANCE.getESSENCE_CAPSULE().make(totalExperience), true, false); if (min > max) {
min = 0.4;
max = 0.8;
}
totalExperience *= min + player.getRandom().nextDouble() * (max - min);
} }
}
if (totalExperience >= Integer.MAX_VALUE) {
int hooked = ForgeEventFactory.getExperienceDrop(player, lastHurtByPlayer, Integer.MAX_VALUE);
if (hooked != Integer.MAX_VALUE) {
totalExperience = hooked;
}
} else {
totalExperience = ForgeEventFactory.getExperienceDrop(player, lastHurtByPlayer, (int) totalExperience);
}
if (totalExperience > 0L) {
if (it.isAndroid()) {
player.drop(MItems.INSTANCE.getESSENCE_DRIVE().make(totalExperience), true, false);
} else {
player.drop(MItems.INSTANCE.getESSENCE_CAPSULE().make(totalExperience), true, false);
}
}
});
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show More