This commit is contained in:
DrMangoTea
2025-05-10 21:40:22 +02:00
parent 304d3fb9ac
commit 2b1120cf38
101 changed files with 19891 additions and 20696 deletions

View File

@@ -1,4 +1,4 @@
// 1.20.1 2025-05-01T12:33:45.0027115 TFMG's Recipes
// 1.20.1 2025-05-10T10:06:28.9423315 TFMG's Recipes
d779aa2cf2fca905473c494073443d0289484311 data/create/recipes/mechanical_crafting/engine_controller.json
dd795cb8dd376f621afb3773cadb99c409aaf875 data/create/recipes/mechanical_crafting/flamethrower.json
e4cd8dd7ad658d3c2d5785fe659aba0e1b9d4f31 data/create/recipes/mechanical_crafting/large_engine.json
@@ -34,12 +34,14 @@ dfd486a1e6ffcaaf328490489baae15999abdd66 data/tfmg/advancements/recipes/misc/cra
5ecf1e6f00baafb429e84bbbd599d2cba829c270 data/tfmg/advancements/recipes/misc/crafting/kinetics/aluminum_sword.json
d4550fea43f7cadcee96dfe5ecdf2a3932e10b37 data/tfmg/advancements/recipes/misc/crafting/kinetics/aluminum_truss.json
1766976fb123199b29e3a0c8d8ad0a3a90f23289 data/tfmg/advancements/recipes/misc/crafting/kinetics/black_concrete.json
a00b79ad9876d982d669033104e141d7ab4d5632 data/tfmg/advancements/recipes/misc/crafting/kinetics/black_multimeter.json
2077ab308886e842cd894d9accb6a52dc847658f data/tfmg/advancements/recipes/misc/crafting/kinetics/black_rebar_concrete.json
085aec07524c91226410b7b8917cf6bf97f3a873 data/tfmg/advancements/recipes/misc/crafting/kinetics/blast_furnace_hatch.json
94ad06b3222fe599ae2c28055a74403553f2d6e1 data/tfmg/advancements/recipes/misc/crafting/kinetics/blast_furnace_output.json
b65b1fed310bdcd57d6be9860c7eb7c17c2f922d data/tfmg/advancements/recipes/misc/crafting/kinetics/blast_furnace_reinforcement.json
9882780522b74f41d9b1facaecf0906ad2ded80b data/tfmg/advancements/recipes/misc/crafting/kinetics/blast_stove.json
91236298677bead8c8e4a9c2b2042e34a6bfc7fc data/tfmg/advancements/recipes/misc/crafting/kinetics/blue_concrete.json
9d246142748003851c2ae40cf670dcaaf8610b63 data/tfmg/advancements/recipes/misc/crafting/kinetics/blue_multimeter.json
5766e5caa1946fc28c978aa4f30f6ccfd0c66a50 data/tfmg/advancements/recipes/misc/crafting/kinetics/blue_rebar_concrete.json
254b56ab97ae39367fecd8f298db28995b5ca98d data/tfmg/advancements/recipes/misc/crafting/kinetics/brass_cable_hub.json
11197779ff7c09cabdfecca3bbfdaf721bf9f723 data/tfmg/advancements/recipes/misc/crafting/kinetics/brass_fluid_valve.json
@@ -51,6 +53,7 @@ b0f2d650bd28257081412243f00de7cc4b9c70d1 data/tfmg/advancements/recipes/misc/cra
0af6494f19a65ffffef34d414f9ddf4a4784d4ba data/tfmg/advancements/recipes/misc/crafting/kinetics/brass_truss.json
9f2a83c8ae2401947e04f209c224f401113a33ac data/tfmg/advancements/recipes/misc/crafting/kinetics/brick_smokestack.json
bb5d03143618b31428378da53d39c52f191df7d7 data/tfmg/advancements/recipes/misc/crafting/kinetics/brown_concrete.json
f178952cc49570239795623b7ea4efce1204a9db data/tfmg/advancements/recipes/misc/crafting/kinetics/brown_multimeter.json
537be60abef99e669300ca1bbc0c5f9a0f40ada7 data/tfmg/advancements/recipes/misc/crafting/kinetics/brown_rebar_concrete.json
d1f24b4a5314d6e9e110b5b24783684b1c13d2fc data/tfmg/advancements/recipes/misc/crafting/kinetics/cable_connector.json
d7d6d51df7d03dd3282a1e72d29fee9796b4121a data/tfmg/advancements/recipes/misc/crafting/kinetics/cable_tube.json
@@ -93,6 +96,7 @@ af50eaf2d7cf7a460786d5db428967b7cc46c488 data/tfmg/advancements/recipes/misc/cra
26107d07c052211b81fbf3b87b4a742423bcc9a3 data/tfmg/advancements/recipes/misc/crafting/kinetics/copycat_cable_block.json
3f6530210f33ecead99099b6bf83e759625eb8ec data/tfmg/advancements/recipes/misc/crafting/kinetics/crankshaft.json
c16a5c7105e55a0205d0ee2af993e72e82b925f5 data/tfmg/advancements/recipes/misc/crafting/kinetics/cyan_concrete.json
155c4ec8c3e8dcdbc59b0e9fd77aff26eab0d247 data/tfmg/advancements/recipes/misc/crafting/kinetics/cyan_multimeter.json
251ef6238e7b2017e9fb7d2e1f99fd0d0ad09691 data/tfmg/advancements/recipes/misc/crafting/kinetics/cyan_rebar_concrete.json
53a922afd729d22c45301c52c113b6f4e56a86e4 data/tfmg/advancements/recipes/misc/crafting/kinetics/diagonal_cable_block.json
507d48685dd7a07d7e8468d037803fa0b72d1b8f data/tfmg/advancements/recipes/misc/crafting/kinetics/electrical_switch.json
@@ -114,8 +118,10 @@ de4886d243a449d6bc2ea3ae90ebdd572dfadd79 data/tfmg/advancements/recipes/misc/cra
744227e044d65aac553d20e453819f3f62794aa1 data/tfmg/advancements/recipes/misc/crafting/kinetics/glass_cable_insulator.json
f0859ba535b3711a210f4c92e51a79df1a9b0726 data/tfmg/advancements/recipes/misc/crafting/kinetics/glass_insulator_segment.json
d837806286dbf97a2fe52cc7958c567f28d79133 data/tfmg/advancements/recipes/misc/crafting/kinetics/gray_concrete.json
6e6a5c44e8e8c239681b42438209be8718e1c9e4 data/tfmg/advancements/recipes/misc/crafting/kinetics/gray_multimeter.json
e52bdd8201ed3052eb98a4846511d32bc67394a1 data/tfmg/advancements/recipes/misc/crafting/kinetics/gray_rebar_concrete.json
abada3c69da28d530b05b1a80f72cdfb94984142 data/tfmg/advancements/recipes/misc/crafting/kinetics/green_concrete.json
631b2bc9dff22b783fb53224653d9cbe49676c5e data/tfmg/advancements/recipes/misc/crafting/kinetics/green_multimeter.json
abb6648bb7541e2a0af33006de472d8586808cc5 data/tfmg/advancements/recipes/misc/crafting/kinetics/green_rebar_concrete.json
7f74fac36c61629c9e521c091e86e721bb005da7 data/tfmg/advancements/recipes/misc/crafting/kinetics/heavy_cable_hub.json
bb43b88374948785c6862f5d0515859c59b444ea data/tfmg/advancements/recipes/misc/crafting/kinetics/heavy_casing_door.json
@@ -138,11 +144,14 @@ f879875d3aba7de14d1bd8ac44a5da0b2d536420 data/tfmg/advancements/recipes/misc/cra
d32ded8889b0f16f96bac0bf4b78b6a120872b7a data/tfmg/advancements/recipes/misc/crafting/kinetics/lead_sword.json
ae4b9b7214d1e0db9b83b8ce8e17819bde3e2004 data/tfmg/advancements/recipes/misc/crafting/kinetics/lead_truss.json
ccb4f8b047573a4b07643c14e7d07623337b64ea data/tfmg/advancements/recipes/misc/crafting/kinetics/light_blue_concrete.json
f3d20a7616db6a9925e704c036aa8f36d978520f data/tfmg/advancements/recipes/misc/crafting/kinetics/light_blue_multimeter.json
a836a268c214d4530d7845e0928bdcc2903e7160 data/tfmg/advancements/recipes/misc/crafting/kinetics/light_blue_rebar_concrete.json
182d4609455cc2db6621b47d1b17d861b8e9bac6 data/tfmg/advancements/recipes/misc/crafting/kinetics/light_bulb.json
ad86c6fb8548a8eea1242c0049f4f57a949a0d71 data/tfmg/advancements/recipes/misc/crafting/kinetics/light_gray_concrete.json
af2d1b84bb399145a11ae056aa4f7a868451f364 data/tfmg/advancements/recipes/misc/crafting/kinetics/light_gray_multimeter.json
a4b28a3a3f5313ebde7d60add23388c858a4b611 data/tfmg/advancements/recipes/misc/crafting/kinetics/light_gray_rebar_concrete.json
bf778154e8cf58fff69e81c98df7e2cdd00cc5ed data/tfmg/advancements/recipes/misc/crafting/kinetics/lime_concrete.json
199da187865840ae9b745cbe91e7c32c9b316074 data/tfmg/advancements/recipes/misc/crafting/kinetics/lime_multimeter.json
93ef0e0da2376a6ec8c75857af60474b7b20c146 data/tfmg/advancements/recipes/misc/crafting/kinetics/lime_rebar_concrete.json
66c2e6a885101f2efe8076907f78342ec42170e4 data/tfmg/advancements/recipes/misc/crafting/kinetics/lithium_blade.json
2ff25ea31f32edefb251196c93a6c0fb9cbd2f10 data/tfmg/advancements/recipes/misc/crafting/kinetics/lithium_block_from_compacting.json
@@ -153,10 +162,12 @@ bf778154e8cf58fff69e81c98df7e2cdd00cc5ed data/tfmg/advancements/recipes/misc/cra
25e5ab420b9f62583f4d78e00f6e4e99def65b38 data/tfmg/advancements/recipes/misc/crafting/kinetics/lithium_torch.json
19e295d0d4807a2aafaf78ddef3d1e82b67823fc data/tfmg/advancements/recipes/misc/crafting/kinetics/machine_input.json
ed197bae5d59a5c17f0632125f7bcee546bee47d data/tfmg/advancements/recipes/misc/crafting/kinetics/magenta_concrete.json
683ba23c77e6ca541bd4bf209a73ff77aaad71ad data/tfmg/advancements/recipes/misc/crafting/kinetics/magenta_multimeter.json
9b04132c22bf3e4e4d1f5c4d47258c43cbec4252 data/tfmg/advancements/recipes/misc/crafting/kinetics/magenta_rebar_concrete.json
551343fcd35785d39328f16f169e225671cb5d5e data/tfmg/advancements/recipes/misc/crafting/kinetics/metal_smokestack.json
45fd4bb8a8c60ce588debd9fbfb40419cd18b363 data/tfmg/advancements/recipes/misc/crafting/kinetics/mixer_blade.json
3b5499b9d59df13f74e982688cac264cc1e468a1 data/tfmg/advancements/recipes/misc/crafting/kinetics/modern_light.json
a1c6c3c68901b0055a0646c423a9ec585a2ca3cc data/tfmg/advancements/recipes/misc/crafting/kinetics/multimeter.json
4d05146d18ffefbb14821a19d327f7e2c9f4be1f data/tfmg/advancements/recipes/misc/crafting/kinetics/napalm_bomb.json
2afc4bda819e3960e678b55385753db759613703 data/tfmg/advancements/recipes/misc/crafting/kinetics/neon_tube.json
6f6485ea57087a90188ebcc06b58548da5ec22b3 data/tfmg/advancements/recipes/misc/crafting/kinetics/nickel_block_from_compacting.json
@@ -168,8 +179,10 @@ b28e7499cbc4e65a90f4b32acc3cd019c123f85d data/tfmg/advancements/recipes/misc/cra
b454069f626db5b3fb4d28b3500e08e6f3241b36 data/tfmg/advancements/recipes/misc/crafting/kinetics/nickel_truss.json
07d1d9e23d958f0db636e63c87980a16508a9b05 data/tfmg/advancements/recipes/misc/crafting/kinetics/oil_can.json
b11887f3e64d6fd41662d5fe25991dc2f21e2524 data/tfmg/advancements/recipes/misc/crafting/kinetics/orange_concrete.json
d03389e1cf797ff41496c61865350b84565679b6 data/tfmg/advancements/recipes/misc/crafting/kinetics/orange_multimeter.json
e3e3e8e7d8731ccd25fd110452107089c1d27c61 data/tfmg/advancements/recipes/misc/crafting/kinetics/orange_rebar_concrete.json
dd780755922b2ae68df0ff68682071c4fb8acca2 data/tfmg/advancements/recipes/misc/crafting/kinetics/pink_concrete.json
fce74a73a1022991d9c10a27ad3b9c996159bdf4 data/tfmg/advancements/recipes/misc/crafting/kinetics/pink_multimeter.json
cf0270dfbef5e8b558dec65cf75a6767e0ad653a data/tfmg/advancements/recipes/misc/crafting/kinetics/pink_rebar_concrete.json
4da181c7e498986202126abdd1deb78ae4fbcbb6 data/tfmg/advancements/recipes/misc/crafting/kinetics/pipe_bomb.json
575a896b2c6e2df1dde348e3bf65d92a2445535b data/tfmg/advancements/recipes/misc/crafting/kinetics/plastic_block.json
@@ -186,6 +199,7 @@ ae004d21f8a7f023d29baf5573aa32e54bdea870 data/tfmg/advancements/recipes/misc/cra
543723c25ae7fc7e393f445fc9b6d4c722c4b045 data/tfmg/advancements/recipes/misc/crafting/kinetics/pumpjack_hammer_connector.json
c0c36f2df4dcc43db3d637b5abdad08cee48b734 data/tfmg/advancements/recipes/misc/crafting/kinetics/pumpjack_hammer_head.json
ce949189c6d144a91b06c38ea343aae2ecb91818 data/tfmg/advancements/recipes/misc/crafting/kinetics/purple_concrete.json
f81c7a443098be45f74c755ba17381cac1b6d02d data/tfmg/advancements/recipes/misc/crafting/kinetics/purple_multimeter.json
46cc7fb7d6ddf9296379dbc69f61634bf93f83c9 data/tfmg/advancements/recipes/misc/crafting/kinetics/purple_rebar_concrete.json
6e7e99acc803efafe2fa540c77707f9b9af686ae data/tfmg/advancements/recipes/misc/crafting/kinetics/radial_engine.json
f0cf416f6e9d2ca025806e4a3ef03223314df6e8 data/tfmg/advancements/recipes/misc/crafting/kinetics/raw_lead.json
@@ -202,6 +216,7 @@ a4f1738a69048fad057b127f9f610a6586ce3156 data/tfmg/advancements/recipes/misc/cra
9de813bde5c487920ff931b2b2d2704286e0c7dd data/tfmg/advancements/recipes/misc/crafting/kinetics/rebar_stairs.json
e009fade2852842fe85532419c3cdc6a07b26305 data/tfmg/advancements/recipes/misc/crafting/kinetics/rebar_wall.json
fb1305d7d76d0f387dddb87747a21eb046464947 data/tfmg/advancements/recipes/misc/crafting/kinetics/red_concrete.json
a171c644d82b6c7975e2039cd43939fe2fc633c3 data/tfmg/advancements/recipes/misc/crafting/kinetics/red_multimeter.json
b0b8eef469ef68a444cfbf5af7b761f534044c6e data/tfmg/advancements/recipes/misc/crafting/kinetics/red_rebar_concrete.json
58d67523a201578460c00c5bcc9a5d257f9169f1 data/tfmg/advancements/recipes/misc/crafting/kinetics/regular_engine.json
08659dddf04a87500623c4aa57430375c96ba19d data/tfmg/advancements/recipes/misc/crafting/kinetics/rusted_blast_furnace_reinforcement.json
@@ -249,9 +264,11 @@ d7175bb0b6e8a62b9fcf97329c5ee4ecb54be7fb data/tfmg/advancements/recipes/misc/cra
206cfd8ea696578a3eb3d2530f80687d7eeb6236 data/tfmg/advancements/recipes/misc/crafting/kinetics/voltage_observer.json
eb2f906386fcfce680ed71b42eb0250ebb897616 data/tfmg/advancements/recipes/misc/crafting/kinetics/voltmeter.json
ea0daa41506268cb3020939be177ef36220d4f10 data/tfmg/advancements/recipes/misc/crafting/kinetics/white_concrete.json
530afc19cce3e22ef717e5aba931a6501792a792 data/tfmg/advancements/recipes/misc/crafting/kinetics/white_multimeter.json
4384204f7198c822a36d391c5db17586c4b55161 data/tfmg/advancements/recipes/misc/crafting/kinetics/white_rebar_concrete.json
48746b460dd42beec11a226ac7c462454bcd542c data/tfmg/advancements/recipes/misc/crafting/kinetics/winding_machine.json
e8e715907d8d625725658b07edbb7083918a4d46 data/tfmg/advancements/recipes/misc/crafting/kinetics/yellow_concrete.json
1967d8243bc576196dcc8e80743d061e6eaabd18 data/tfmg/advancements/recipes/misc/crafting/kinetics/yellow_multimeter.json
4fa8a5680937c3fb6681a9391482f4f215564a50 data/tfmg/advancements/recipes/misc/crafting/kinetics/yellow_rebar_concrete.json
b7c8ea540760ca91937bfb56a6c9abd4435a9910 data/tfmg/advancements/recipes/misc/crafting/kinetics/zinc_frame.json
14b5a77590ec2b2466264128d4ce2dd1158ccab6 data/tfmg/advancements/recipes/misc/crafting/kinetics/zinc_grenade.json
@@ -290,12 +307,14 @@ be183c532de69717b584f2df32c0c34538f80089 data/tfmg/recipes/crafting/kinetics/alu
955d158e2a1f8a0517717012274698ccad56de0b data/tfmg/recipes/crafting/kinetics/aluminum_sword.json
5be032a557074e91822ce9e9538db118793a51d5 data/tfmg/recipes/crafting/kinetics/aluminum_truss.json
4cf7dc18b7316f40973b52162173cfb0082051b5 data/tfmg/recipes/crafting/kinetics/black_concrete.json
8e5662d854eb69ebff30fbc52fa66431d1f890d9 data/tfmg/recipes/crafting/kinetics/black_multimeter.json
0a8407c6c691dc2e2dc76d436c4b857660405b7b data/tfmg/recipes/crafting/kinetics/black_rebar_concrete.json
a3a45c1f82a7b6db35c489b4d0c5dabb62ff7419 data/tfmg/recipes/crafting/kinetics/blast_furnace_hatch.json
da5696363c9d489573b79ac2261de3eeeabcf28f data/tfmg/recipes/crafting/kinetics/blast_furnace_output.json
99724811c3a0fcf930e2c3ab9e960fe48f346219 data/tfmg/recipes/crafting/kinetics/blast_furnace_reinforcement.json
c5f9e9509b88317e4b8ee83c89f363725fd9586c data/tfmg/recipes/crafting/kinetics/blast_stove.json
a64bdef677eb562a587374ce547a9d75558618f8 data/tfmg/recipes/crafting/kinetics/blue_concrete.json
80dd6da57061475960ef6068927d3ba528b84596 data/tfmg/recipes/crafting/kinetics/blue_multimeter.json
697d0e47ad2efaf5622ac5378d213271bed0cf51 data/tfmg/recipes/crafting/kinetics/blue_rebar_concrete.json
11986c41315a4dd2a3329ab8c9336e7811ed26e9 data/tfmg/recipes/crafting/kinetics/brass_cable_hub.json
429bdb714c3bfed25ca601e5f21bb40684930162 data/tfmg/recipes/crafting/kinetics/brass_fluid_valve.json
@@ -307,6 +326,7 @@ cea30408cc76d443cfa37f2ef7abfcbd9e73b33f data/tfmg/recipes/crafting/kinetics/bra
6dc803197514ee8836685c2515ea6854abd2fe6e data/tfmg/recipes/crafting/kinetics/brass_truss.json
1b12f55387d82cf4ac731d3e8b323bbe4d5c1387 data/tfmg/recipes/crafting/kinetics/brick_smokestack.json
5c4fae047c5dd1e17931fbe4acf78eaebb90c214 data/tfmg/recipes/crafting/kinetics/brown_concrete.json
91e3374fc0397a437903d684c96ef9c6a7b25eec data/tfmg/recipes/crafting/kinetics/brown_multimeter.json
3cf5957af0b2dac567c9ac979dcf7a432eaf5991 data/tfmg/recipes/crafting/kinetics/brown_rebar_concrete.json
3bbd95eb4beea9a48ee58ef36308352fcb477d8c data/tfmg/recipes/crafting/kinetics/cable_connector.json
f525ae0ae9b3c7047d8b0ac459294e7215e2417c data/tfmg/recipes/crafting/kinetics/cable_tube.json
@@ -349,6 +369,7 @@ ed9bd7f6378712909c8d41cd5723e37a30d1bbeb data/tfmg/recipes/crafting/kinetics/cop
c3a9e90d2ef4da0cba626201f9d0b07a38beafdd data/tfmg/recipes/crafting/kinetics/copycat_cable_block.json
b0fdc3db2173d73e58b7b3108b30f5275fdb355e data/tfmg/recipes/crafting/kinetics/crankshaft.json
cf525b0bb0af060113368e6520485a998087c0fa data/tfmg/recipes/crafting/kinetics/cyan_concrete.json
1771fdf13ac4669336ea79b0b8f196ccf4d6cd13 data/tfmg/recipes/crafting/kinetics/cyan_multimeter.json
a510e53b00e5a1b1f0354a6d8d8bfa9eb2d4cf4e data/tfmg/recipes/crafting/kinetics/cyan_rebar_concrete.json
d1ebfd182c8b618cfd9305732d916dc9bbfe3039 data/tfmg/recipes/crafting/kinetics/diagonal_cable_block.json
8396fa84d7a7e6317bef36efbc3e27bb17a17caf data/tfmg/recipes/crafting/kinetics/electrical_switch.json
@@ -370,8 +391,10 @@ a7ab7113fa322747bf249695a0616d8f2e01299a data/tfmg/recipes/crafting/kinetics/fus
2206abd056a349f73e052109638d31dacbfd064c data/tfmg/recipes/crafting/kinetics/glass_cable_insulator.json
011bb0040f193bac1fd585f560705a2b1b1fd333 data/tfmg/recipes/crafting/kinetics/glass_insulator_segment.json
c96069b5c7156bcfcfc77b7beeec762e2d7324f1 data/tfmg/recipes/crafting/kinetics/gray_concrete.json
898e6946957e703789a20cba59c351622e6efe5d data/tfmg/recipes/crafting/kinetics/gray_multimeter.json
1a61bde547fdd135c476593b7babecaa7a17b256 data/tfmg/recipes/crafting/kinetics/gray_rebar_concrete.json
a921ae3753e3ad4f43fe64dd71c0c99c201d4756 data/tfmg/recipes/crafting/kinetics/green_concrete.json
26e5f6a32c068b22541b54cf792780de576cdfd0 data/tfmg/recipes/crafting/kinetics/green_multimeter.json
d137a83628de275f56e0a3e4b045668eb50ecc67 data/tfmg/recipes/crafting/kinetics/green_rebar_concrete.json
045dfd5f31f1a1c53b9d27b144d3e530bcda28dc data/tfmg/recipes/crafting/kinetics/heavy_cable_hub.json
8f6f541a0a8e59f826540a32a5dc7570a42dcef1 data/tfmg/recipes/crafting/kinetics/heavy_casing_door.json
@@ -394,11 +417,14 @@ f7922b7b22f7d7b3a54ab3d3d0892170f7448db3 data/tfmg/recipes/crafting/kinetics/lea
22669e8eeeca626e2cc262c65eb60cf73c4294b2 data/tfmg/recipes/crafting/kinetics/lead_sword.json
99ab779254d79071cc744044b4cf164b8549a9cd data/tfmg/recipes/crafting/kinetics/lead_truss.json
bc48677f911ae20d3a73b6680c045f1f61e742f5 data/tfmg/recipes/crafting/kinetics/light_blue_concrete.json
8b6cf168a9b2caa704e4b1dcbbeccb5f12d590ad data/tfmg/recipes/crafting/kinetics/light_blue_multimeter.json
1c9b7ee59de96caff4cc85e2e2b628624060f43d data/tfmg/recipes/crafting/kinetics/light_blue_rebar_concrete.json
d08e1659e61d60150143b49a13ce11863fdc9062 data/tfmg/recipes/crafting/kinetics/light_bulb.json
78eb081ea1181a1a3a570706abfae9ec027b4633 data/tfmg/recipes/crafting/kinetics/light_gray_concrete.json
4e2b1c2a087a272e13a54f6be16e973a58f9d85c data/tfmg/recipes/crafting/kinetics/light_gray_multimeter.json
73c91c4db64e477c9c38f063977d951a9b962c87 data/tfmg/recipes/crafting/kinetics/light_gray_rebar_concrete.json
574d3bf1cd7f42cf4f3203bf360055be291c11e0 data/tfmg/recipes/crafting/kinetics/lime_concrete.json
d403d77836315aa6d9d8f7ca7632e9d76e754510 data/tfmg/recipes/crafting/kinetics/lime_multimeter.json
a05bf5656cf7598f473d0fb6c74c0089e53b3e4b data/tfmg/recipes/crafting/kinetics/lime_rebar_concrete.json
51b9b72251919c5a5dbbc7ad113b3393d3c1322b data/tfmg/recipes/crafting/kinetics/lithium_blade.json
147304987aff453c5be90128024e8e7e450c7024 data/tfmg/recipes/crafting/kinetics/lithium_block_from_compacting.json
@@ -409,10 +435,12 @@ b823dd658cac8c0125e31f1bea532b4b714b6cc7 data/tfmg/recipes/crafting/kinetics/lit
c99c66d2f4f9cee928baf57f1d65323b3d54100f data/tfmg/recipes/crafting/kinetics/lithium_torch.json
8e1da1ad94782fb95dfaecd3409bec4ab785a90c data/tfmg/recipes/crafting/kinetics/machine_input.json
932aa48a5626050982ff49dc049169d867515af1 data/tfmg/recipes/crafting/kinetics/magenta_concrete.json
ae1ee9627bea9c329b1189cc430c583da2fe1c00 data/tfmg/recipes/crafting/kinetics/magenta_multimeter.json
809b219010111e5bc4be69d9d881d63314b03612 data/tfmg/recipes/crafting/kinetics/magenta_rebar_concrete.json
b78332d528e39fffa878bf90171bd48876ebcd1b data/tfmg/recipes/crafting/kinetics/metal_smokestack.json
90925b88dbfd9defd4bc3d3aa8a8ca3148ab0912 data/tfmg/recipes/crafting/kinetics/mixer_blade.json
75d572fecac2127a9bf4dd8a070c43fd77d13380 data/tfmg/recipes/crafting/kinetics/modern_light.json
514d64001949b548450cf811e94cccc966257139 data/tfmg/recipes/crafting/kinetics/multimeter.json
fe4c2b992eb08744551e4cf5339cf8e916adacaf data/tfmg/recipes/crafting/kinetics/napalm_bomb.json
88bbbcd291403c02924fa5d57877789b55d248e2 data/tfmg/recipes/crafting/kinetics/neon_tube.json
b6a20b2a85231dfa01cac33b283d0dd431fb4819 data/tfmg/recipes/crafting/kinetics/nickel_block_from_compacting.json
@@ -424,8 +452,10 @@ dbb8e863fa16906f98ba729cf3c9af17d44c7274 data/tfmg/recipes/crafting/kinetics/nic
8b21eac9fdc5e8e8cd71dee820c0ac3b808f0bf3 data/tfmg/recipes/crafting/kinetics/nickel_truss.json
0ca28c553bf4efc2d35390414c9c7d02026d4300 data/tfmg/recipes/crafting/kinetics/oil_can.json
4739646509f4f55aacb3d3eb645c537def939fe6 data/tfmg/recipes/crafting/kinetics/orange_concrete.json
9e6dc59e4f88fb26c79805e6a5f90e71cc07bde2 data/tfmg/recipes/crafting/kinetics/orange_multimeter.json
db1e461e9a170536708ad573a85de2f4ae425181 data/tfmg/recipes/crafting/kinetics/orange_rebar_concrete.json
ab31dd7ea28b3bf9f5da82ae0b23e485541a4d06 data/tfmg/recipes/crafting/kinetics/pink_concrete.json
1408bb05585edbb209048549f5a33a7f2b1d7ca8 data/tfmg/recipes/crafting/kinetics/pink_multimeter.json
dcb9948b58a0646cc1cf10bbef31a10accf51282 data/tfmg/recipes/crafting/kinetics/pink_rebar_concrete.json
c8cc1bb1c54789e4c3810b9ca98f7612c04c6768 data/tfmg/recipes/crafting/kinetics/pipe_bomb.json
14174829741026aec93de7a6be22e2b480942de8 data/tfmg/recipes/crafting/kinetics/plastic_block.json
@@ -442,6 +472,7 @@ d178534b096b74c2c4a74a9d08f9a2bed9ff47a0 data/tfmg/recipes/crafting/kinetics/pum
107166edb673713e46aef9eb1248652e8a21846b data/tfmg/recipes/crafting/kinetics/pumpjack_hammer_connector.json
c286faa9ef2b8e7d0c317435e435fcdd16aa9e42 data/tfmg/recipes/crafting/kinetics/pumpjack_hammer_head.json
c849bd3e7d677438e35381b0b2ab1e3aa3544356 data/tfmg/recipes/crafting/kinetics/purple_concrete.json
4a5b50b6b61896cd8eb0bdf2d9da6963d0576dbf data/tfmg/recipes/crafting/kinetics/purple_multimeter.json
7c21d2641d14b2bc6ee6bc09196b48e2e2b6258d data/tfmg/recipes/crafting/kinetics/purple_rebar_concrete.json
130287b66b9ad3c463a7f2385884fe3f367a7165 data/tfmg/recipes/crafting/kinetics/radial_engine.json
75a33fc64dc47a0d07731aebbf8a99b762f2a276 data/tfmg/recipes/crafting/kinetics/raw_lead.json
@@ -458,6 +489,7 @@ da57294a42f4aa934e8bd09bfffbcfaad71f4d7e data/tfmg/recipes/crafting/kinetics/reb
7e0e2d15822b2e55d5634e5857ac4c060c604ba3 data/tfmg/recipes/crafting/kinetics/rebar_stairs.json
ff5859c287185322feff83cf23b8d2a9ea48f3d2 data/tfmg/recipes/crafting/kinetics/rebar_wall.json
fc5ce9454a8464e5264d0b4f1696c01e4953aebf data/tfmg/recipes/crafting/kinetics/red_concrete.json
2575654b599dca830032b50fd13f3e2454533ba1 data/tfmg/recipes/crafting/kinetics/red_multimeter.json
80cc4aff6d3296cceb394237c8232f5546168ab9 data/tfmg/recipes/crafting/kinetics/red_rebar_concrete.json
45e0349c5ff50a6d8de93bb0c6826400a03f7a1a data/tfmg/recipes/crafting/kinetics/regular_engine.json
38559a4f46b8592c258b13b74d751113bb7c7fb8 data/tfmg/recipes/crafting/kinetics/rusted_blast_furnace_reinforcement.json
@@ -505,9 +537,11 @@ f5984b5d3c82f4605f08a88d16aa2fdfec5482fb data/tfmg/recipes/crafting/kinetics/tur
6ca672214a0639fbc93502774aff5e5a60650018 data/tfmg/recipes/crafting/kinetics/voltage_observer.json
e2ec2eaf75166a30f3c9749e335c167793b54c14 data/tfmg/recipes/crafting/kinetics/voltmeter.json
5c740c1158f8cb1a928a1f79cd2eac2d13d80f1a data/tfmg/recipes/crafting/kinetics/white_concrete.json
eb0daeae165f64bfb8d33de5d48f82ee2c9546a2 data/tfmg/recipes/crafting/kinetics/white_multimeter.json
95a0c0882053843057d9d80b92d517738f44d4a3 data/tfmg/recipes/crafting/kinetics/white_rebar_concrete.json
66b87962e18c3dcabd3bdf74ac6d4f91260f4c48 data/tfmg/recipes/crafting/kinetics/winding_machine.json
c09b785b8b182879ae71ab49e6604f6b1cf53ec1 data/tfmg/recipes/crafting/kinetics/yellow_concrete.json
5989a7ebc7ec6d734b7fcd1890c1186c52514817 data/tfmg/recipes/crafting/kinetics/yellow_multimeter.json
461258447e1c8a49fa017ea663511ec0a633ecba data/tfmg/recipes/crafting/kinetics/yellow_rebar_concrete.json
b673506b5ef4dd9ea08cc070b3f9f3fc01fa4398 data/tfmg/recipes/crafting/kinetics/zinc_frame.json
56135df98436c7ff10516c4852cdddaef2367b53 data/tfmg/recipes/crafting/kinetics/zinc_grenade.json

View File

@@ -1,4 +1,4 @@
// 1.20.1 2025-05-09T22:55:10.3861864 Registrate Provider for tfmg [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
// 1.20.1 2025-05-10T09:58:50.664261 Registrate Provider for tfmg [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
ff5a5721633b83465ab501cbdfdc579a0f20e938 assets/tfmg/blockstates/accumulator.json
e982a263b6af75821042107fdeff7bd809436d08 assets/tfmg/blockstates/air_intake.json
e7f63aadfc892e337d9f87b5e50af8b1c7e4103f assets/tfmg/blockstates/aluminum_bars.json
@@ -437,8 +437,8 @@ a1988ec6a98f23cad8321b46345fbf1c5fd20489 assets/tfmg/blockstates/yellow_rebar_co
c58fa20c091e5ecddfb7164cba45538a8f911431 assets/tfmg/blockstates/yellow_rebar_concrete_wall.json
0271e2b940bb94cdb7e951b81e277ee633d64d62 assets/tfmg/blockstates/zinc_frame.json
1bd66f29acffb67f30bfe94c8535509bd009beab assets/tfmg/blockstates/zinc_truss.json
40062ab10df958c2eadbe01f76539f209abca35a assets/tfmg/lang/en_ud.json
be538c0f2b254d523b8910750bf4a78c075fc74f assets/tfmg/lang/en_us.json
58acad4a6a1552ef82ee74f8127be3780974e05a assets/tfmg/lang/en_ud.json
838b69ddd96807c63085e1e6bdce2fd3efe4f0a5 assets/tfmg/lang/en_us.json
9e6a6b62f5e7528c4e4d4f72f3510edcd8f0c078 assets/tfmg/models/block/aluminum_block.json
1d33a893d6ac05f9adaceb7f84423ebe9b195c01 assets/tfmg/models/block/aluminum_cable_hub.json
da469bf3233944085f07d4ef437827061e408838 assets/tfmg/models/block/aluminum_cap.json

View File

@@ -590,6 +590,8 @@
"creative_tab.tfmg_main": "ʍoɹ⅁ ʇsnW ʎɹoʇɔɐℲ ǝɥ⟘ :ǝʇɐǝɹƆ",
"death.attack.tfmg.acid": "ɥʇɐq pıɔɐ uɐ ʞooʇ %1$s",
"death.attack.tfmg.acid.player": "ɥʇɐq pıɔɐ uɐ ʞooʇ %1$s",
"death.attack.tfmg.blast_furnace": "ןǝǝʇs uoqɹɐɔ uı pǝuɹnʇ sɐʍ %1$s",
"death.attack.tfmg.blast_furnace.player": "ǝɔɐuɹnɟ ʇsɐןq ɐ oʇuı uʍoɹɥʇ sɐʍ %1$s",
"death.attack.tfmg.concrete": "ǝʇǝɹɔuoƆ ʇɐǝ oʇ pǝıɹʇ %1$s",
"death.attack.tfmg.concrete.player": "ǝʇǝɹɔuoƆ ʇɐǝ oʇ pǝıɹʇ %1$s",
"effect.tfmg.hellfire": "ǝɹıɟןןǝH",

View File

@@ -590,6 +590,8 @@
"creative_tab.tfmg_main": "Create: The Factory Must Grow",
"death.attack.tfmg.acid": "%1$s took an acid bath",
"death.attack.tfmg.acid.player": "%1$s took an acid bath",
"death.attack.tfmg.blast_furnace": "%1$s was turned in carbon steel",
"death.attack.tfmg.blast_furnace.player": "%1$s was thrown into a blast furnace",
"death.attack.tfmg.concrete": "%1$s tried to eat Concrete",
"death.attack.tfmg.concrete.player": "%1$s tried to eat Concrete",
"effect.tfmg.hellfire": "Hellfire",

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/black_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/black_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/blue_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/blue_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/brown_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/brown_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/cyan_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/cyan_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/gray_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/gray_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/green_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/green_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/light_blue_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/light_blue_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/light_gray_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/light_gray_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/lime_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/lime_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/magenta_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/magenta_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:voltmeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/orange_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/orange_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/pink_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/pink_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/purple_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/purple_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/red_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/red_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/white_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/white_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"tfmg:multimeter"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "tfmg:crafting/kinetics/yellow_multimeter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"tfmg:crafting/kinetics/yellow_multimeter"
]
},
"sends_telemetry_event": false
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:black_dye"
}
],
"result": {
"item": "tfmg:black_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:blue_dye"
}
],
"result": {
"item": "tfmg:blue_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:brown_dye"
}
],
"result": {
"item": "tfmg:brown_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:cyan_dye"
}
],
"result": {
"item": "tfmg:cyan_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:gray_dye"
}
],
"result": {
"item": "tfmg:gray_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:green_dye"
}
],
"result": {
"item": "tfmg:green_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:light_blue_dye"
}
],
"result": {
"item": "tfmg:light_blue_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:light_gray_dye"
}
],
"result": {
"item": "tfmg:light_gray_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:lime_dye"
}
],
"result": {
"item": "tfmg:lime_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:magenta_dye"
}
],
"result": {
"item": "tfmg:magenta_multimeter"
}
}

View File

@@ -0,0 +1,24 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"B": {
"tag": "forge:plates/brass"
},
"G": {
"item": "tfmg:voltmeter"
},
"W": {
"tag": "forge:wires/copper"
}
},
"pattern": [
"BGB",
"BWB",
"BWB"
],
"result": {
"item": "tfmg:multimeter"
},
"show_notification": true
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:orange_dye"
}
],
"result": {
"item": "tfmg:orange_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:pink_dye"
}
],
"result": {
"item": "tfmg:pink_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:purple_dye"
}
],
"result": {
"item": "tfmg:purple_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:red_dye"
}
],
"result": {
"item": "tfmg:red_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:white_dye"
}
],
"result": {
"item": "tfmg:white_multimeter"
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "tfmg:multimeter"
},
{
"item": "minecraft:yellow_dye"
}
],
"result": {
"item": "tfmg:yellow_multimeter"
}
}

View File

@@ -27,6 +27,16 @@ public class TFMGShapes {
.add(0, 5, -1, 3, 7, 1)
.add(15, 5, 9, 15, 11, 9)
.forDirectional(NORTH),
TURBINE_ENGINE_FRONT = shape(2, 2, 0, 14, 14, 16)
.add(3, 0, 8, 13, 2, 16)
.forHorizontal(SOUTH),
TURBINE_ENGINE_MIDDLE = shape(11, 0, 2, 16, 5, 14)
.add(1, 1, 0, 15, 15, 16)
.add(0, 0, 2, 5, 5, 14)
.forHorizontal(SOUTH),
TURBINE_ENGINE_BACK = shape(5.3, 0, 5, 11.3, 3, 14)
.add(3, 3, 2, 13, 13, 16)
.forHorizontal(SOUTH),
ENGINE_CONTROLLER = shape(0, 0, 0, 4, 5, 16)
.add(2, 5, 5, 14, 12, 14)
.add(4, 0, 5, 15, 5, 16)

View File

@@ -8,7 +8,6 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
@@ -31,7 +30,6 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
}
@@ -60,14 +58,14 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
@Override
public void lazyTick() {
super.lazyTick();
if(data.failTimer >=4){
this.blockFail();
data.failTimer = 0;
sendStuff();
} else if((data.voltage>getMaxVoltage()&&getMaxVoltage()>0)||(getCurrent()>getMaxCurrent()&&getMaxCurrent()>0)){
blockFail();
data.failTimer++;
}
//if (data.failTimer >= 4) {
// this.blockFail();
// data.failTimer = 0;
// sendStuff();
//} else if ((data.voltage > getMaxVoltage() && getMaxVoltage() > 0) || (getCurrent() > getMaxCurrent())) {
// blockFail();
// data.failTimer++;
//}
}
@Override
@@ -118,7 +116,9 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
for (Direction direction : Direction.values()) {
if (hasElectricitySlot(direction)) {
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be) {
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be&&be.canWork()) {
if (be.getData().getId() != getData().getId())
if (be.getData().getVoltage() != 0)
if (be.hasElectricitySlot(direction)) {

View File

@@ -1,5 +1,9 @@
package com.drmangotea.tfmg.content.electricity.base;
import com.drmangotea.tfmg.content.electricity.utilities.diode.ElectricDiodeBlockEntity;
import com.drmangotea.tfmg.content.electricity.utilities.electric_motor.ElectricMotorBlockEntity;
import com.drmangotea.tfmg.content.electricity.utilities.transformer.TransformerBlockEntity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -54,7 +58,9 @@ public class ElectricalNetwork {
int powerPercentage = resistance > 0 ? (int) (Math.min(((float) power / (float) resistance * 100f), 100)) : 100;
for (IElectric member : members) {
List<IElectric> list = new ArrayList<>(members);
for (IElectric member : list) {
int oldVoltage = member.getData().getVoltage();
int oldPower = member.getPowerUsage();
@@ -76,16 +82,23 @@ public class ElectricalNetwork {
for (IElectric member : members) {
member.getData().highestCurrent = getCableCurrent(member);
member.updateNearbyNetworks(member);
if (member instanceof KineticElectricBlockEntity be)
be.updateGeneratedRotation();
// if (member instanceof KineticElectricBlockEntity be) {
// be.updateGeneratedRotation();
// }
}
if (!members.isEmpty())
if (members.get(0).getNetworkPowerUsage() > members.get(0).getNetworkPowerGeneration()) {
for (IElectric member : members) {
member.getData().notEnoughtPower = true;
if (member instanceof KineticElectricBlockEntity be)
if (member instanceof ElectricMotorBlockEntity be) {
be.updateGeneratedRotation();
be.preventSpeedUpdate = 20;
}
if (member instanceof ElectricDiodeBlockEntity be)
be.updateInFront=true;
if (member instanceof TransformerBlockEntity be)
be.updateInFront();
}
}
}

View File

@@ -5,6 +5,7 @@ import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.registry.TFMGPackets;
import com.simibubi.create.foundation.utility.CreateLang;
import net.createmod.catnip.theme.Color;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
@@ -76,7 +77,6 @@ public interface IElectric {
default void onConnected() {
BlockPos pos = BlockPos.of(getPos());
for (Direction d : Direction.values()) {
if (hasElectricitySlot(d))
@@ -98,7 +98,6 @@ public interface IElectric {
}
sendStuff();
}
@@ -107,6 +106,12 @@ public interface IElectric {
.style(ChatFormatting.WHITE)
.forGoggles(tooltip);
if(getData().notEnoughtPower) {
CreateLang.text("NOT ENOUGHT POWER")
.color(Color.RED)
.forGoggles(tooltip, 1);
// return true;
}
if (voltageGeneration() > 0) {
CreateLang.translate("multimeter.power_generated")
.add(Component.literal(TFMGUtils.formatUnits(powerGeneration(), "W")))
@@ -121,9 +126,6 @@ public interface IElectric {
.forGoggles(tooltip);
}
CreateLang.text(" R = " + TFMGUtils.formatUnits(voltageGeneration() > 0 ? getGeneratorResistance() : resistance(), "Ω"))
.color(0xc98969)
.forGoggles(tooltip, 1);
@@ -146,6 +148,20 @@ public interface IElectric {
.forGoggles(tooltip, 1);
}
if(isPlayerSneaking) {
CreateLang.text("----------------------------")
.style(ChatFormatting.WHITE)
.forGoggles(tooltip);
CreateLang.text("Network Power Generation: " + TFMGUtils.formatUnits(getNetworkPowerGeneration(), "W"))
.color(0xcc4b74)
.forGoggles(tooltip, 1);
CreateLang.text("Network Power Consumption: " + TFMGUtils.formatUnits(getNetworkPowerUsage(), "W"))
.color(0xcc4b74)
.forGoggles(tooltip, 1);
}
return true;
}
@@ -170,7 +186,7 @@ public interface IElectric {
}
default void blockFail() {
getLevelAccessor().destroyBlock(BlockPos.of(getPos()), false);
//getLevelAccessor().destroyBlock(BlockPos.of(getPos()), false);
}
default int getPowerUsage() {
@@ -207,6 +223,10 @@ public interface IElectric {
default float getGeneratorResistance() {
if (getData().voltageSupply == 0)
return 0;
if((float) getData().networkPowerGeneration * (float) getNetworkResistance()==0)
return 0;
return (float) powerGeneration() / (float) getData().networkPowerGeneration * (float) getNetworkResistance();
}

View File

@@ -31,6 +31,8 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
data.connectNextTick = true;
}
//@Override
//public boolean addToTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
// CreateLang.text("MAX POWER: "+getNetworkPowerGeneration()).forGoggles(tooltip);
@@ -224,12 +226,12 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
public void tick() {
super.tick();
if(timer == 2){
updateNextTick();
}
if(timer<=2){
timer++;
}
//if(timer == 2){
// updateNextTick();
//}
//if(timer<=2){
// timer++;
//}
if(data.connectNextTick) {
@@ -270,11 +272,17 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
}
@Override
public void onSpeedChanged(float previousSpeed) {
super.onSpeedChanged(previousSpeed);
updateNextTick();
TFMG.LOGGER.debug("SPEEED CHANGED "+getBlockPos().getX()+" "+getBlockPos().getY()+" "+getBlockPos().getZ());
notifyNetworkAboutSpeedChange();
timer = 0;
}
public void notifyNetworkAboutSpeedChange(){
updateNextTick();
}
}

View File

@@ -28,6 +28,7 @@ public class UpdateInFrontPacket extends BlockEntityDataPacket<SmartBlockEntity>
if(blockEntity instanceof ElectricDiodeBlockEntity be) {
be.updateInFrontNextTick();
}
}

View File

@@ -1,16 +1,12 @@
package com.drmangotea.tfmg.content.electricity.electrians_wrench;
package com.drmangotea.tfmg.content.electricity.configuration_wrench;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
public class ElectricBlockItem extends BlockItem {
public ElectricBlockItem(Block p_40565_, Properties p_40566_) {

View File

@@ -1,15 +1,11 @@
package com.drmangotea.tfmg.content.electricity.electrians_wrench;
package com.drmangotea.tfmg.content.electricity.configuration_wrench;
import com.drmangotea.tfmg.TFMG;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.ConnectNeightborsPacket;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.base.KineticElectricBlockEntity;
import com.drmangotea.tfmg.content.engines.base.AbstractEngineBlockEntity;
import com.drmangotea.tfmg.registry.TFMGPackets;
import com.simibubi.create.content.equipment.symmetryWand.SymmetryWandScreen;
import net.createmod.catnip.gui.ScreenOpener;
import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
@@ -23,7 +19,6 @@ import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.network.PacketDistributor;
public class ElectriciansWrenchItem extends Item {
public ElectriciansWrenchItem(Properties p_41383_) {
@@ -58,6 +53,8 @@ public class ElectriciansWrenchItem extends Item {
be.getData().group.id = context.getItemInHand().getOrCreateTag().getInt("Number");
TFMGUtils.playSound(level, pos, SoundEvents.ITEM_PICKUP, SoundSource.BLOCKS, context.getPlayer());
if(be instanceof KineticElectricBlockEntity kineticBE)
kineticBE.updateGeneratedRotation();
be.updateNextTick();
be.sendStuff();

View File

@@ -1,8 +1,7 @@
package com.drmangotea.tfmg.content.electricity.electrians_wrench;
package com.drmangotea.tfmg.content.electricity.configuration_wrench;
import com.drmangotea.tfmg.TFMG;
import com.simibubi.create.content.equipment.zapper.ZapperItem;
import com.simibubi.create.foundation.networking.SimplePacketBase;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.electricity.electrians_wrench;
package com.drmangotea.tfmg.content.electricity.configuration_wrench;
import com.drmangotea.tfmg.registry.TFMGGuiTextures;
import com.drmangotea.tfmg.registry.TFMGPackets;

View File

@@ -9,22 +9,13 @@ import net.minecraft.network.FriendlyByteBuf;
public class CableRemovalPacket extends BlockEntityDataPacket<SmartBlockEntity> {
public CableRemovalPacket(BlockPos pos) {
super(pos);
}
public CableRemovalPacket(FriendlyByteBuf buffer) {
super(buffer);
}
@Override
protected void writeData(FriendlyByteBuf buffer) {}
@@ -34,8 +25,5 @@ public class CableRemovalPacket extends BlockEntityDataPacket<SmartBlockEntity>
if(blockEntity instanceof CableConnectorBlockEntity be) {
// be.removeConnections(true);
}
}
}
}

View File

@@ -7,6 +7,7 @@ import com.drmangotea.tfmg.content.electricity.connection.cables.CableConnection
import com.drmangotea.tfmg.content.electricity.connection.cables.CableConnectorBlockEntity;
import com.drmangotea.tfmg.content.engines.base.AbstractEngineBlockEntity;
import com.drmangotea.tfmg.content.engines.engine_controller.EngineControllerBlockEntity;
import com.drmangotea.tfmg.content.engines.types.AbstractSmallEngineBlockEntity;
import com.drmangotea.tfmg.content.engines.types.large_engine.LargeEngineBlockEntity;
import com.drmangotea.tfmg.content.engines.types.regular_engine.RegularEngineBlockEntity;
import com.drmangotea.tfmg.content.machinery.metallurgy.blast_stove.BlastStoveBlockEntity;
@@ -63,6 +64,7 @@ public class DebugCinderBlockItem extends Item {
} else {
TFMG.LOGGER.debug(be.shift.name());
TFMGUtils.debugMessage(level, "ENGINE "+(be.engine!=null));
}
return InteractionResult.SUCCESS;
}
@@ -99,7 +101,7 @@ public class DebugCinderBlockItem extends Item {
}
if (level.getBlockEntity(pos) instanceof IElectric be) {
be.onPlaced();
// be.onPlaced();
if (context.getPlayer().isShiftKeyDown()) {
@@ -111,7 +113,7 @@ public class DebugCinderBlockItem extends Item {
TFMG.LOGGER.debug("Group " + be.getData().group.id);
TFMG.LOGGER.debug("///////////////////////////////");
} else {
be.updateNextTick();
TFMGUtils.debugMessage(level, "Power " + be.getNetworkPowerUsage());
TFMGUtils.debugMessage(level, "Voltage " + be.getData().getVoltage());
@@ -151,11 +153,15 @@ public class DebugCinderBlockItem extends Item {
}
}
if (level.getBlockEntity(pos) instanceof AbstractEngineBlockEntity be) {
be.highestSignal=0;
be.controlled = false;
be.updateGeneratedRotation();
TFMGUtils.debugMessage(level, "RPM "+be.rpm);
if (level.getBlockEntity(pos) instanceof AbstractSmallEngineBlockEntity be) {
//be.getControllerBE().highestSignal=0;
//be.getControllerBE().rpm = 0;
//be.getControllerBE().engineController = null;
//be.getControllerBE().updateGeneratedRotation();
TFMGUtils.debugMessage(level, "RPM "+be.getControllerBE().rpm);
TFMGUtils.debugMessage(level, "SIGNAL "+be.getControllerBE().signal);
TFMGUtils.debugMessage(level, "HSIGNAL "+be.getControllerBE().highestSignal);
TFMGUtils.debugMessage(level, "RATE "+be.getControllerBE().fuelInjectionRate);
}
if (level.getBlockEntity(pos) instanceof CastingBasinBlockEntity be) {
be.findRecipe();

View File

@@ -1,5 +1,6 @@
package com.drmangotea.tfmg.content.electricity.generators;
import com.drmangotea.tfmg.TFMG;
import com.drmangotea.tfmg.config.TFMGConfigs;
import com.drmangotea.tfmg.content.electricity.base.KineticElectricBlockEntity;
import net.minecraft.core.BlockPos;
@@ -42,6 +43,7 @@ public class GeneratorBlockEntity extends KineticElectricBlockEntity {
@Override
public void onNetworkChanged(int oldVoltage, int oldPower) {
super.onNetworkChanged(oldVoltage, oldPower);

View File

@@ -3,6 +3,7 @@ package com.drmangotea.tfmg.content.electricity.generators.large_generator;
import com.drmangotea.tfmg.config.TFMGConfigs;
import com.drmangotea.tfmg.content.electricity.base.KineticElectricBlockEntity;
import com.drmangotea.tfmg.content.electricity.generators.large_generator.StatorBlock.StatorState;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import net.createmod.catnip.animation.LerpedFloat;
import net.minecraft.core.BlockPos;
@@ -11,7 +12,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import com.drmangotea.tfmg.content.electricity.generators.large_generator.StatorBlock.StatorState;
import java.util.*;
@@ -25,15 +25,13 @@ import static net.minecraft.world.level.block.DirectionalBlock.FACING;
public class RotorBlockEntity extends KineticElectricBlockEntity {
LerpedFloat visualSpeed = LerpedFloat.linear();
float angle;
List<BlockPos> stators = new ArrayList<>();
public static final Map<Axis,Map<StatorOffset, BlockState>> statorPosition = setStatorPositons();
public static final Map<Axis, Map<StatorOffset, BlockState>> statorPosition = setStatorPositons();
public RotorBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
@@ -47,7 +45,7 @@ public class RotorBlockEntity extends KineticElectricBlockEntity {
@Override
protected void read(CompoundTag compound, boolean clientPacket) {
super.read(compound, clientPacket);
visualSpeed.chase(getGeneratedSpeed(), 1 / 128f, LerpedFloat.Chaser.EXP);
visualSpeed.chase(getGeneratedSpeed(), 1 / 128f, LerpedFloat.Chaser.EXP);
}
@Override
@@ -55,34 +53,42 @@ public class RotorBlockEntity extends KineticElectricBlockEntity {
super.tick();
manageRotation();
}
@Override
public void lazyTick() {
super.lazyTick();
findStators();
}
@Override
public void onPlaced() {
super.onPlaced();
findStators();
}
@Override
public int voltageGeneration() {
return (int) Math.min(3000,generation()*3);
return (int) Math.min(3000, generation() * 3);
}
public int generation() {
if (stators.size() != 8)
return 0;
float modifier = TFMGConfigs.common().machines.largeGeneratorModifier.getF();
float maxSpeed = TFMGConfigs.common().machines.largeGeneratorMinSpeed.getF();
return (int) Math.max(0,((Math.abs(getSpeed())-maxSpeed)*modifier));
return (int) Math.max(0, ((Math.abs(getSpeed()) - maxSpeed) * modifier));
}
@Override
public int powerGeneration() {
return generation()*40;
return generation() * 40;
}
public void findStators(){
public void findStators() {
Axis axis = getBlockState().getValue(AXIS);
Map<StatorOffset, BlockState> position = statorPosition.get(axis);
@@ -96,22 +102,21 @@ public class RotorBlockEntity extends KineticElectricBlockEntity {
if (be.rotor == null || be.rotor == getBlockPos()) {
stators.add(pos);
level.setBlock(pos, state, 2);
be.rotor = getBlockPos();
stators.add(pos);
level.setBlock(pos, state, 2);
be.rotor = getBlockPos();
} else {
} else {
stators = new ArrayList<>();
updateNextTick();
}
} else {
stators = new ArrayList<>();
updateNextTick();
}
}));
}
public void manageRotation(){
public void manageRotation() {
float targetSpeed = getSpeed();
visualSpeed.updateChaseTarget(targetSpeed);
visualSpeed.tickChaser();
@@ -122,67 +127,66 @@ public class RotorBlockEntity extends KineticElectricBlockEntity {
@Override
public boolean hasElectricitySlot(Direction direction) {
return direction.getAxis()!=getBlockState().getValue(AXIS);
return direction.getAxis() != getBlockState().getValue(AXIS);
}
public static Map<Axis,Map<StatorOffset, BlockState>> setStatorPositons(){
Map<Axis,Map<StatorOffset, BlockState>> statorPositions = new HashMap<>();
public static Map<Axis, Map<StatorOffset, BlockState>> setStatorPositons() {
Map<Axis, Map<StatorOffset, BlockState>> statorPositions = new HashMap<>();
BlockState defaultState = TFMGBlocks.STATOR.getDefaultState();
BlockState cornerState = defaultState.setValue(STATOR_STATE,StatorState.CORNER);
BlockState horizontal = defaultState.setValue(STATOR_STATE,StatorState.CORNER_HORIZONTAL);
BlockState sideState = defaultState.setValue(STATOR_STATE,StatorState.SIDE);
BlockState cornerState = defaultState.setValue(STATOR_STATE, StatorState.CORNER);
BlockState horizontal = defaultState.setValue(STATOR_STATE, StatorState.CORNER_HORIZONTAL);
BlockState sideState = defaultState.setValue(STATOR_STATE, StatorState.SIDE);
BlockState cornerFlipped = cornerState.setValue(VALUE, false);
BlockState sideFlipped = sideState.setValue(VALUE, false);
Map<StatorOffset, BlockState> xPos = new HashMap<>();
xPos.put(pos(UP ), sideFlipped .setValue(FACING,DOWN ));
xPos.put(pos(DOWN ), sideFlipped .setValue(FACING,UP ));
xPos.put(pos(NORTH ), sideFlipped .setValue(FACING,SOUTH ));
xPos.put(pos(SOUTH ), sideFlipped .setValue(FACING,NORTH ));
xPos.put(pos(UP,NORTH ), cornerState .setValue(FACING,EAST ));
xPos.put(pos(UP,SOUTH ), cornerState .setValue(FACING,WEST ));
xPos.put(pos(DOWN,NORTH ), cornerFlipped.setValue(FACING,EAST ));
xPos.put(pos(DOWN,SOUTH ), cornerFlipped.setValue(FACING,WEST ));
xPos.put(pos(UP), sideFlipped.setValue(FACING, DOWN));
xPos.put(pos(DOWN), sideFlipped.setValue(FACING, UP));
xPos.put(pos(NORTH), sideFlipped.setValue(FACING, SOUTH));
xPos.put(pos(SOUTH), sideFlipped.setValue(FACING, NORTH));
xPos.put(pos(UP, NORTH), cornerState.setValue(FACING, EAST));
xPos.put(pos(UP, SOUTH), cornerState.setValue(FACING, WEST));
xPos.put(pos(DOWN, NORTH), cornerFlipped.setValue(FACING, EAST));
xPos.put(pos(DOWN, SOUTH), cornerFlipped.setValue(FACING, WEST));
Map<StatorOffset, BlockState> yPos = new HashMap<>();
yPos.put(pos(EAST ), sideState .setValue(FACING,WEST ));
yPos.put(pos(WEST ), sideState .setValue(FACING,EAST ));
yPos.put(pos(SOUTH ), sideState .setValue(FACING,NORTH ));
yPos.put(pos(NORTH ), sideState .setValue(FACING,SOUTH ));
yPos.put(pos(NORTH,WEST ), horizontal .setValue(FACING,NORTH));
yPos.put(pos(SOUTH,EAST ), horizontal .setValue(FACING,SOUTH));
yPos.put(pos(SOUTH,WEST ), horizontal .setValue(FACING,WEST ));
yPos.put(pos(NORTH,EAST ), horizontal .setValue(FACING,EAST ));
yPos.put(pos(EAST), sideState.setValue(FACING, WEST));
yPos.put(pos(WEST), sideState.setValue(FACING, EAST));
yPos.put(pos(SOUTH), sideState.setValue(FACING, NORTH));
yPos.put(pos(NORTH), sideState.setValue(FACING, SOUTH));
yPos.put(pos(NORTH, WEST), horizontal.setValue(FACING, NORTH));
yPos.put(pos(SOUTH, EAST), horizontal.setValue(FACING, SOUTH));
yPos.put(pos(SOUTH, WEST), horizontal.setValue(FACING, WEST));
yPos.put(pos(NORTH, EAST), horizontal.setValue(FACING, EAST));
Map<StatorOffset, BlockState> zPos = new HashMap<>();
zPos.put(pos(UP ), sideState .setValue(FACING,DOWN ));
zPos.put(pos(DOWN ), sideState .setValue(FACING,UP ));
zPos.put(pos(WEST ), sideFlipped .setValue(FACING,EAST ));
zPos.put(pos(EAST ), sideFlipped .setValue(FACING,WEST ));
zPos.put(pos(UP,WEST ), cornerState .setValue(FACING,UP ));
zPos.put(pos(UP,EAST ), cornerState .setValue(FACING,SOUTH ));
zPos.put(pos(DOWN,WEST ), cornerFlipped.setValue(FACING,UP ));
zPos.put(pos(DOWN,EAST ), cornerFlipped.setValue(FACING,SOUTH ));
statorPositions.put(Axis.X,xPos);
statorPositions.put(Axis.Y,yPos);
statorPositions.put(Axis.Z,zPos);
zPos.put(pos(UP), sideState.setValue(FACING, DOWN));
zPos.put(pos(DOWN), sideState.setValue(FACING, UP));
zPos.put(pos(WEST), sideFlipped.setValue(FACING, EAST));
zPos.put(pos(EAST), sideFlipped.setValue(FACING, WEST));
zPos.put(pos(UP, WEST), cornerState.setValue(FACING, UP));
zPos.put(pos(UP, EAST), cornerState.setValue(FACING, SOUTH));
zPos.put(pos(DOWN, WEST), cornerFlipped.setValue(FACING, UP));
zPos.put(pos(DOWN, EAST), cornerFlipped.setValue(FACING, SOUTH));
statorPositions.put(Axis.X, xPos);
statorPositions.put(Axis.Y, yPos);
statorPositions.put(Axis.Z, zPos);
return statorPositions;
}
private static StatorOffset pos(Direction dir1){
private static StatorOffset pos(Direction dir1) {
return new StatorOffset(dir1, Optional.empty());
}
private static StatorOffset pos(Direction dir1,Direction dir2){
private static StatorOffset pos(Direction dir1, Direction dir2) {
return new StatorOffset(dir1, Optional.of(dir2));
}
private static class StatorOffset{
private static class StatorOffset {
public final Direction direction1;
public final Optional<Direction> direction2;
public StatorOffset(Direction dir1,Optional<Direction> dir2){
public StatorOffset(Direction dir1, Optional<Direction> dir2) {
this.direction1 = dir1;
this.direction2 = dir2;
@@ -192,5 +196,4 @@ public class RotorBlockEntity extends KineticElectricBlockEntity {
}
}

View File

@@ -6,11 +6,7 @@ import com.drmangotea.tfmg.config.TFMGConfigs;
import com.drmangotea.tfmg.content.electricity.base.ElectricBlockEntity;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.converter.ConverterBlockEntity;
import com.drmangotea.tfmg.content.engines.base.AbstractEngineBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.simibubi.create.foundation.utility.CreateLang;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
@@ -38,28 +34,31 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
public BlockPos controller = getBlockPos();
int signal;
boolean signalChanged;
public AccumulatorBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
energyCapability = LazyOptional.of(() -> energy);
}
@Override
public void lazyTick() {
super.lazyTick();
neighbourChanged();
}
public void neighbourChanged() {
if (!hasLevel())
return;
if(isController()){
if (isController()) {
int power = level.getBestNeighborSignal(worldPosition);
if (power != signal)
signalChanged = true;
}
if(level.getBlockEntity(controller) instanceof AccumulatorBlockEntity be) {
if (level.getBlockEntity(controller) instanceof AccumulatorBlockEntity be) {
int power = level.getBestNeighborSignal(worldPosition);
@@ -69,7 +68,6 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
}
@Override
public void remove() {
super.remove();
@@ -82,6 +80,28 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
refreshController();
}
@Override
public boolean makeMultimeterTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
super.makeMultimeterTooltip(tooltip, isPlayerSneaking);
CreateLang.text("Capacity ")
.add(Component.literal(TFMGUtils.formatUnits(energy.getEnergyStored(), "FE")))
.color(0x127799)
.forGoggles(tooltip, 1);
CreateLang.text("Charging Rate ")
.add(CreateLang.number(getChargingRate()))
.color(0x127799)
.forGoggles(tooltip, 1);
CreateLang.text("Max Capacity ")
.add(CreateLang.number(getMaxCapacity()))
.color(0x127799)
.forGoggles(tooltip, 1);
return true;
}
public void refreshController() {
Direction facing = getBlockState().getValue(FACING);
@@ -114,12 +134,12 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
length = newLength;
int oldEnergy = energy.getEnergyStored();
energy = createEnergyStorage(length);
energy.setEnergy(Math.min(oldEnergy,energy.getMaxEnergyStored()*length));
energy.setEnergy(Math.min(oldEnergy, energy.getMaxEnergyStored() * length));
refreshCapability();
updateNextTick();
for (int i = 1; i < length; i++) {
BlockPos pos = getBlockPos().relative(getBlockState().getValue(FACING).getOpposite(), i);
if(level.getBlockEntity(pos) instanceof AccumulatorBlockEntity be){
if (level.getBlockEntity(pos) instanceof AccumulatorBlockEntity be) {
be.refreshCapability();
be.sendStuff();
}
@@ -146,16 +166,17 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
}
return super.getCapability(cap, side);
}
public boolean isController() {
return controller == getBlockPos();
}
public TFMGForgeEnergyStorage createEnergyStorage(int multiplier) {
return new TFMGForgeEnergyStorage(getMaxCapacity()*multiplier, 10000) {
return new TFMGForgeEnergyStorage(getMaxCapacity() * multiplier, 10000) {
@Override
public void onEnergyChanged(int amount, int oldAmount) {
if((oldAmount==0&&amount>0)||(this.energy==0)) {
if ((oldAmount == 0 && amount > 0) || (this.energy == 0)) {
updateNextTick();
}
sendStuff();
@@ -166,19 +187,20 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
public void setCapacity(ItemStack stack) {
energy.setEnergy(stack.getOrCreateTag().getInt("Storage"));
}
protected void analogSignalChanged() {
if(!isController()) {
if (!isController()) {
signal = level.getBestNeighborSignal(controller);
return;
}
int newSignal = 0;
for(int i = 0;i<length;i++){
BlockPos pos = getBlockPos().relative(getBlockState().getValue(FACING).getOpposite(),i);
for (int i = 0; i < length; i++) {
BlockPos pos = getBlockPos().relative(getBlockState().getValue(FACING).getOpposite(), i);
newSignal = Math.max(newSignal,level.getBestNeighborSignal(pos));
newSignal = Math.max(newSignal, level.getBestNeighborSignal(pos));
}
@@ -187,6 +209,7 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
signal = newSignal;
}
@Override
public void tick() {
super.tick();
@@ -246,25 +269,30 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
int power = 0;
for (IElectric member : getOrCreateElectricNetwork().members)
if (!(member instanceof ConverterBlockEntity)&&!(member instanceof AccumulatorBlockEntity))
if (!(member instanceof ConverterBlockEntity) && !(member instanceof AccumulatorBlockEntity))
power += member.getPowerUsage();
if (energy.getEnergyStored() == getMaxCapacity() || getData().getVoltage() <= getOutputVoltage() || canPower())
return 0;
if(Math.min(Math.max((data.networkPowerGeneration - power), 0), getMaxChargingRate())==0){
return 0;
}
return (float) (data.voltage * data.voltage) /Math.min(Math.max((data.networkPowerGeneration - power), 0), getMaxChargingRate());
return (float) Math.min((Math.pow(data.voltage, 2)) / Math.min(Math.max((data.networkPowerGeneration - power), 0), getMaxChargingRate()),750);
}
public boolean canPower() {
return getData().networkResistance > 0 && (getData().getVoltage() <= getOutputVoltage()) && energy.getEnergyStored() > 0&&signal ==0;
return getData().networkResistance > 0 && (getData().getVoltage() <= getOutputVoltage()) && energy.getEnergyStored() > 0 && signal == 0;
}
public int getChargingRate() {
int chargingRate = Math.max((data.networkPowerGeneration - getNetworkPowerUsage()), 0);
if (energy.getEnergyStored() == getMaxCapacity() || getData().getVoltage() < getOutputVoltage() || canPower())
//
// int chargingRate = Math.max((data.networkPowerGeneration - getNetworkPowerUsage()), 0);
if (energy.getEnergyStored() == getMaxCapacity() || getData().getVoltage() < getOutputVoltage() || canPower()|| data.notEnoughtPower)
return 0;
return Math.min(chargingRate, getMaxChargingRate());
//return Math.min(chargingRate, getMaxChargingRate());
return getMaxChargingRate();
}
@Override
@@ -280,7 +308,7 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
}
public int getMaxCapacity() {
return TFMGConfigs.common().machines.accumulatorStorage.get();
return TFMGConfigs.common().machines.accumulatorStorage.get()*length;
}
//in FE per tick

View File

@@ -108,7 +108,9 @@ public class ConverterBlockEntity extends ElectricBlockEntity {
power += member.getPowerUsage();
if (energy.getEnergyStored() == getMaxCapacity() || getData().getVoltage() <= voltageGenerated.getValue() || canPower())
return 0;
if(Math.min(Math.max((data.networkPowerGeneration - power), 0), getMaxChargingRate())==0){
return 0;
}
return (float) (data.voltage * data.voltage) /Math.min(Math.max((data.networkPowerGeneration - power), 0), getMaxChargingRate());
@@ -125,10 +127,13 @@ public class ConverterBlockEntity extends ElectricBlockEntity {
public int getChargingRate() {
int chargingRate = Math.max((data.networkPowerGeneration - getNetworkPowerUsage()), 0);
if (energy.getEnergyStored() == getMaxCapacity() || getData().getVoltage() < voltageGenerated.getValue() || canPower())
//
// int chargingRate = Math.max((data.networkPowerGeneration - getNetworkPowerUsage()), 0);
if (energy.getEnergyStored() == getMaxCapacity() || getData().getVoltage() < voltageGenerated.value || canPower()|| data.notEnoughtPower)
return 0;
return Math.min(chargingRate, getMaxChargingRate());
//return Math.min(chargingRate, getMaxChargingRate());
return getMaxChargingRate();
}
@Override

View File

@@ -43,6 +43,8 @@ public class ElectricMotorBlock extends DirectionalKineticBlock implements IBE<E
return defaultBlockState().setValue(FACING, preferred);
}
@Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
return face == state.getValue(FACING);

View File

@@ -51,6 +51,10 @@ public class ElectricMotorBlockEntity extends KineticElectricBlockEntity {
return direction == getBlockState().getValue(FACING).getOpposite() || (direction.getAxis().isHorizontal() && direction == Direction.DOWN);
}
@Override
public void notifyNetworkAboutSpeedChange() {
super.notifyNetworkAboutSpeedChange();
}
@Override
public void onNetworkChanged(int oldVoltage, int oldPower) {
@@ -70,7 +74,8 @@ public class ElectricMotorBlockEntity extends KineticElectricBlockEntity {
return 0;
//if(getPowerUsage() >= machineConfig.electricMotorMinimumPower.get()){
return Math.min(Math.abs(generatedSpeed.getValue()), data.getVoltage() / 2);
return generatedSpeed.getValue() <0 ? -Math.min(Math.abs(data.getVoltage()/2),Math.abs(generatedSpeed.getValue())) : Math.min(Math.abs(data.getVoltage()/2),Math.abs(generatedSpeed.getValue()));
//}
@@ -127,6 +132,8 @@ public class ElectricMotorBlockEntity extends KineticElectricBlockEntity {
.rotateZ(-AngleHelper.horizontalAngle(facing) + 180);
}
@Override
protected boolean isSideActive(BlockState state, Direction direction) {
Direction facing = state.getValue(FACING);

View File

@@ -241,7 +241,7 @@ public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectri
@Override
public float resistance() {
return 50;
return 100;
}

View File

@@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
@@ -50,6 +51,20 @@ public class TransformerBlockEntity extends VoltageAlteringBlockEntity {
}
}
@Override
public void destroy() {
super.destroy();
BlockPos pos = this.getBlockPos();
if(!primaryCoil.isEmpty()){
ItemEntity item = new ItemEntity(level, pos.getX()+.5f,pos.getY()+.5f,pos.getZ()+.5f,primaryCoil);
level.addFreshEntity(item);
}
if(!secondaryCoil.isEmpty()){
ItemEntity item = new ItemEntity(level, pos.getX()+.5f,pos.getY()+.5f,pos.getZ()+.5f,secondaryCoil);
level.addFreshEntity(item);
}
}
@Override
public int getPowerUsage() {
@@ -85,7 +100,21 @@ public class TransformerBlockEntity extends VoltageAlteringBlockEntity {
}
@Override
public boolean makeMultimeterTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
super.makeMultimeterTooltip(tooltip, isPlayerSneaking);
if(coilRatio!=0) {
CreateLang.text("----------------------------")
.style(ChatFormatting.WHITE)
.forGoggles(tooltip);
CreateLang.translate("multimeter.transformer_ration")
.add(CreateLang.number(coilRatio))
.color(0xc6e82c)
.forGoggles(tooltip, 1);
}
return true;
}
@Override
public float resistance() {

View File

@@ -1,5 +1,6 @@
package com.drmangotea.tfmg.content.engines.base;
import com.drmangotea.tfmg.TFMG;
import com.drmangotea.tfmg.config.TFMGConfigs;
import com.drmangotea.tfmg.content.electricity.base.KineticElectricBlockEntity;
import com.drmangotea.tfmg.content.engines.fuels.BaseFuelTypes;
@@ -52,7 +53,7 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
public int highestSignal;
public int signal;
//
public boolean controlled = false;
public BlockPos engineController;
//
//
@@ -85,16 +86,25 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
public void tankUpdated(FluidStack stack) {
sendData();
setChanged();
}
public boolean hasEngineController() {
return engineController != null;
}
@Override
public void updateNetwork() {
//TFMG.LOGGER.debug("UPDATE ENGINE NETWORK");
super.updateNetwork();
}
protected void analogSignalChanged() {
if (controlled) {
if (hasEngineController()) {
fuelInjectionRate = highestSignal / 15f;
return;
}
@@ -131,6 +141,8 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
neighbourChanged();
manageFuelAndExhaust();
}
@@ -172,7 +184,7 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
public boolean canWork() {
if(fuelTank.isEmpty())
if (fuelTank.isEmpty())
return false;
if (exhaustTank.getSpace() == 0)
@@ -265,7 +277,8 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
reverse = compound.getBoolean("Reverse");
signal = compound.getInt("Signal");
controlled = compound.getBoolean("Controlled");
if (hasEngineController())
engineController = BlockPos.of(compound.getLong("EngineController"));
rpm = compound.getFloat("RPM");
// if (isController()) {
@@ -277,7 +290,7 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
highestSignal = compound.getInt("HighestSignal");
signalChanged = true;
//signalChanged = true;
updateRotation();
updateGeneratedRotation();
@@ -291,7 +304,8 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
compound.putBoolean("Reverse", reverse);
compound.putInt("Signal", signal);
compound.putBoolean("Controlled", controlled);
if (hasEngineController())
compound.putLong("EngineController", engineController.asLong());
compound.putFloat("RPM", rpm);
@@ -304,8 +318,6 @@ public abstract class AbstractEngineBlockEntity extends KineticElectricBlockEnti
}
public abstract int getFuelConsumption();

View File

@@ -2,11 +2,13 @@ package com.drmangotea.tfmg.content.engines.base;
import com.drmangotea.tfmg.TFMG;
import com.drmangotea.tfmg.base.TFMGShapes;
import com.drmangotea.tfmg.content.electricity.base.UpdateInFrontPacket;
import com.drmangotea.tfmg.content.engines.engine_controller.EngineControllerBlockEntity;
import com.drmangotea.tfmg.content.engines.types.AbstractSmallEngineBlockEntity;
import com.drmangotea.tfmg.content.engines.upgrades.EnginePipingUpgrade;
import com.drmangotea.tfmg.content.engines.upgrades.TransmissionUpgrade;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.drmangotea.tfmg.registry.TFMGPackets;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
import net.minecraft.core.BlockPos;
@@ -29,6 +31,7 @@ import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.network.PacketDistributor;
import java.util.Optional;
@@ -56,17 +59,26 @@ public class EngineBlock extends HorizontalKineticBlock {
if (be.upgrade.isPresent()) {
if (be.upgrade.get() instanceof TransmissionUpgrade) {
if (be.getControllerBE().controller != null){
if (level.getBlockEntity(be.getControllerBE().controller) instanceof EngineControllerBlockEntity engineController) {
if (be.getControllerBE().engineController != null){
if (level.getBlockEntity(be.getControllerBE().engineController) instanceof EngineControllerBlockEntity engineController) {
engineController.engineStarted = false;
engineController.accelerationRate = 0;
engineController.shift = TransmissionUpgrade.TransmissionState.NEUTRAL;
engineController.engine = null;
engineController.enginePos = null;
engineController.disconnectEngine();
engineController.sendData();
}
}
be.getControllerBE().controlled =false;
//if(!level.isClientSide)
// TFMGPackets.getChannel().send(PacketDistributor.ALL.noArg(), new UpdateInFrontPacket(BlockPos.of(be.getPos())));
be.getControllerBE().engineController =null;
be.getControllerBE().highestSignal = 0;
be.getControllerBE().connectNextTick=true;
be.getControllerBE().fuelInjectionRate=0;
be.updateGeneratedRotation();
be.getControllerBE().updateGeneratedRotation();
be.getControllerBE().updateRotation();
be.getControllerBE().controller = null;
be.getControllerBE().sendData();
}

View File

@@ -49,7 +49,7 @@ public class EngineControllerBlock extends TFMGHorizontalDirectionalBlock implem
@Override
public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) {
return TFMGShapes.ENGINE_CONTROLLER.get(p_60555_.getValue(FACING));
return TFMGShapes.ENGINE_CONTROLLER.get(p_60555_.getValue(FACING).getOpposite());
}
@Override

View File

@@ -131,6 +131,14 @@ public class EngineControllerBlockEntity extends SmartBlockEntity implements IHa
setChanged();
}
@Override
public void destroy() {
super.destroy();
Entity playerEntity = ((ServerLevel) level).getEntity(user);
if (playerEntity instanceof Player)
stopUsing((Player) playerEntity);
}
public void shiftBack() {
int max = TransmissionUpgrade.TransmissionState.values().length;
for (int i = 0; i < max; i++) {
@@ -246,11 +254,9 @@ public class EngineControllerBlockEntity extends SmartBlockEntity implements IHa
tickRendering();
}
if (enginePos != null && (engine == null)) {
if (level.getBlockEntity(enginePos) instanceof AbstractSmallEngineBlockEntity be) {
engine = be;
TFMG.LOGGER.debug("TICK");
engine.getControllerBE().highestSignal=4;
}
}
@@ -279,8 +285,7 @@ public class EngineControllerBlockEntity extends SmartBlockEntity implements IHa
public void updateEngine() {
if (engine == null)
return;
TFMG.LOGGER.debug("Update Engine "+accelerationRate);
engine.getControllerBE().controlled = true;
engine.getControllerBE().engineController = this.getBlockPos();
engine.getControllerBE().highestSignal = accelerationRate;
engine.getControllerBE().fuelInjectionRate = engine.getControllerBE().highestSignal / 15f;
engine.getControllerBE().updateRotation();
@@ -291,9 +296,8 @@ public class EngineControllerBlockEntity extends SmartBlockEntity implements IHa
public void disconnectEngine() {
if (engine == null)
return;
TFMG.LOGGER.debug("DISCONNECT");
engine.getControllerBE().highestSignal = 0;
engine.getControllerBE().controlled = false;
engine.getControllerBE().engineController = null;
engine.getControllerBE().updateGeneratedRotation();
}
@@ -304,17 +308,11 @@ public class EngineControllerBlockEntity extends SmartBlockEntity implements IHa
steeringWheelAngle.chase(isPressed(2) ? -40 : isPressed(3) ? 40 : 0, 0.25, LerpedFloat.Chaser.EXP);
clutchPedalMotion.chase(isPressed(4) ? 2 / 16f : 0, 0.25, LerpedFloat.Chaser.EXP);
gasPedalMotion.chase(isPressed(0) ? 2 / 16f : 0, 0.25, LerpedFloat.Chaser.EXP);
brakePedalMotion.chase(isPressed(1) ? 2 / 16f : 0, 0.25, LerpedFloat.Chaser.EXP);
transmissionLeverAngle.chase(shift == TransmissionUpgrade.TransmissionState.REVERSE ? -20 : (shift.value * 20), 0.25, LerpedFloat.Chaser.EXP);
fuelDial.chase(engine == null ? 0 : ((double) engine.getControllerBE().fuelTank.getFluidAmount() / (double) engine.fuelTank.getCapacity()) * 180f, 0.25, LerpedFloat.Chaser.EXP);
rpmDial.chase(engine == null ? 0 : ((double) engine.getControllerBE().rpm / 6000f) * 180f, 0.25, LerpedFloat.Chaser.EXP);
transmissionLeverAngle.tickChaser();
@@ -340,7 +338,6 @@ public class EngineControllerBlockEntity extends SmartBlockEntity implements IHa
}
public void tryStopUsing(Player player) {
TFMG.LOGGER.debug("Try Stop Using");
if (isUsedBy(player))
stopUsing(player);
}

View File

@@ -0,0 +1,29 @@
package com.drmangotea.tfmg.content.engines.engine_controller;
import com.drmangotea.tfmg.content.engines.base.AbstractEngineBlockEntity;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.networking.BlockEntityDataPacket;
import net.minecraft.core.BlockPos;
import net.minecraft.network.FriendlyByteBuf;
public class TransmissionRemovePacket extends BlockEntityDataPacket<SmartBlockEntity> {
public TransmissionRemovePacket(BlockPos pos) {
super(pos);
}
public TransmissionRemovePacket(FriendlyByteBuf buffer) {
super(buffer);
}
@Override
protected void writeData(FriendlyByteBuf buffer) {}
@Override
protected void handlePacket(SmartBlockEntity blockEntity) {
if(blockEntity instanceof AbstractEngineBlockEntity be) {
be.highestSignal = 0;
}
}
}

View File

@@ -27,7 +27,7 @@ public class EngineGearboxBlock extends HorizontalKineticBlock implements IBE<En
@Override
public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) {
return TFMGShapes.ENGINE_GEARBOX.get(state.getValue(HORIZONTAL_FACING).getOpposite());
return TFMGShapes.ENGINE_GEARBOX.get(state.getValue(HORIZONTAL_FACING));
}
@Override

View File

@@ -130,7 +130,6 @@ public abstract class AbstractSmallEngineBlockEntity extends AbstractEngineBlock
super.lazyTick();
upgrade.ifPresent(engineUpgrade -> engineUpgrade.lazyTickUpgrade(this));
}
@@ -192,7 +191,7 @@ public abstract class AbstractSmallEngineBlockEntity extends AbstractEngineBlock
if (controller == null)
return;
if (controlled) {
if (hasEngineController()) {
fuelInjectionRate = highestSignal / 15f;
return;
}
@@ -387,35 +386,35 @@ public abstract class AbstractSmallEngineBlockEntity extends AbstractEngineBlock
return true;
}
}
if (EngineUpgrade.getUpgrades().containsKey(itemStack.getItem())) {
Optional<? extends EngineUpgrade> itemUpgrade = EngineUpgrade.getUpgrades().get(itemStack.getItem()).createUpgrade();
if (upgrade.isEmpty())
if (EngineUpgrade.getUpgrades().containsKey(itemStack.getItem())) {
Optional<? extends EngineUpgrade> itemUpgrade = EngineUpgrade.getUpgrades().get(itemStack.getItem()).createUpgrade();
if (itemUpgrade.isPresent() && isUpgradeFirst(itemUpgrade.get())) {
upgrade = itemUpgrade;
playInsertionSound();
updateRotation();
upgrade.ifPresent(u -> u.updateUpgrade(this));
itemStack.shrink(1);
if (upgrade.isPresent())
if (upgrade.get() instanceof TransmissionUpgrade transmissionUpgrade) {
if (itemStack.getOrCreateTag().contains("Position") && itemStack.getOrCreateTag().get("Position") != null) {
BlockPos pos = BlockPos.of(itemStack.getOrCreateTag().getLong("Position"));
if (level.getBlockEntity(pos) instanceof EngineControllerBlockEntity engineControllerBE) {
if (itemUpgrade.isPresent() && isUpgradeFirst(itemUpgrade.get())) {
upgrade = itemUpgrade;
playInsertionSound();
updateRotation();
upgrade.ifPresent(u -> u.updateUpgrade(this));
itemStack.shrink(1);
if (upgrade.isPresent())
if (upgrade.get() instanceof TransmissionUpgrade transmissionUpgrade) {
if (itemStack.getOrCreateTag().contains("Position") && itemStack.getOrCreateTag().get("Position") != null) {
BlockPos pos = BlockPos.of(itemStack.getOrCreateTag().getLong("Position"));
if (level.getBlockEntity(pos) instanceof EngineControllerBlockEntity engineControllerBE) {
this.getControllerBE().updateGeneratedRotation();
this.getControllerBE().updateGeneratedRotation();
getControllerBE().controller = pos;
engineControllerBE.enginePos = this.getBlockPos();
TFMG.LOGGER.debug("INSERT ITEM");
getControllerBE().highestSignal = 0;
getControllerBE().controller = pos;
engineControllerBE.enginePos = this.getBlockPos();
getControllerBE().highestSignal = 0;
}
}
}
}
setChanged();
sendData();
return true;
setChanged();
sendData();
return true;
}
}
}
if (!isController())
return false;

View File

@@ -1,15 +1,19 @@
package com.drmangotea.tfmg.content.engines.types.turbine_engine;
import com.drmangotea.tfmg.base.TFMGShapes;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.engines.base.EngineBlock;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;
import com.simibubi.create.foundation.block.IBE;
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.LevelReader;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
public class TurbineEngineBlock extends EngineBlock implements IBE<TurbineEngineBlockEntity> {
public TurbineEngineBlock(Properties properties) {
@@ -23,6 +27,16 @@ public class TurbineEngineBlock extends EngineBlock implements IBE<TurbineEngine
public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
IBE.onRemove(state, level, pos, newState);
}
@Override
public VoxelShape getShape(BlockState state, BlockGetter p_60556_, BlockPos pos, CollisionContext p_60558_) {
return switch (state.getValue(ENGINE_STATE)){
case NORMAL -> TFMGShapes.TURBINE_ENGINE_MIDDLE.get(state.getValue(SHAFT_FACING));
case SHAFT, SINGLE -> TFMGShapes.TURBINE_ENGINE_BACK.get(state.getValue(SHAFT_FACING));
case BACK -> TFMGShapes.TURBINE_ENGINE_FRONT.get(state.getValue(SHAFT_FACING));
};
}
@Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
return face==state.getValue(SHAFT_FACING)&&state.getValue(ENGINE_STATE)==EngineState.BACK;

View File

@@ -1,11 +1,22 @@
package com.drmangotea.tfmg.content.engines.upgrades;
import com.drmangotea.tfmg.content.engines.types.AbstractSmallEngineBlockEntity;
import com.drmangotea.tfmg.content.engines.types.regular_engine.RegularEngineBlockEntity;
import com.drmangotea.tfmg.registry.TFMGItems;
import com.drmangotea.tfmg.registry.TFMGPartialModels;
import com.mojang.blaze3d.vertex.PoseStack;
import net.createmod.catnip.render.CachedBuffers;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.state.BlockState;
import java.util.Optional;
import static net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING;
public class TransmissionUpgrade extends EngineUpgrade{
TransmissionState shift = TransmissionState.NEUTRAL;
@@ -18,6 +29,30 @@ public class TransmissionUpgrade extends EngineUpgrade{
}
@Override
public void render(AbstractSmallEngineBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light) {
BlockState state = be.getBlockState();
Direction facing = state.getValue(FACING);
boolean side = false;
ms.pushPose();
if (be instanceof RegularEngineBlockEntity blockEntity) {
side = blockEntity.type.upgradesOnSide;
}
CachedBuffers.partial(TFMGPartialModels.TRANSMISSION, state)
.center()
.translateY(side ? -2/16f :0)
.rotateYDegrees(facing.toYRot())
.rotateZDegrees(side ? 90 : 0)
.translateY(side ? 4 / 16f : 0)
.uncenter()
.light(light)
.renderInto(ms, buffer.getBuffer(RenderType.solid()));
ms.popPose();
}
@Override
public Item getItem() {

View File

@@ -0,0 +1,63 @@
package com.drmangotea.tfmg.content.machinery.misc.winding_machine;
import com.drmangotea.tfmg.content.engines.types.AbstractSmallEngineBlockEntity;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.kinetics.base.IRotate;
import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual;
import com.simibubi.create.content.kinetics.base.RotatingInstance;
import com.simibubi.create.foundation.render.AllInstanceTypes;
import dev.engine_room.flywheel.api.instance.Instance;
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
import dev.engine_room.flywheel.lib.model.Models;
import net.createmod.catnip.data.Iterate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block;
import org.jetbrains.annotations.Nullable;
import java.util.function.Consumer;
import static com.simibubi.create.content.kinetics.base.HorizontalKineticBlock.HORIZONTAL_FACING;
public class WindingMachineVisual extends KineticBlockEntityVisual<WindingMachineBlockEntity> {
protected final RotatingInstance shaft;
public WindingMachineVisual(VisualizationContext context, WindingMachineBlockEntity blockEntity, float partialTick) {
super(context, blockEntity, partialTick);
Direction facing = blockEntity.getBlockState().getValue(HORIZONTAL_FACING).getCounterClockWise();
shaft = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF))
.createInstance();
shaft.setup(blockEntity)
.setPosition(getVisualPosition())
.rotateToFace(Direction.SOUTH, facing)
.setChanged();
}
@Override
public void update(float pt) {
shaft.setup(blockEntity)
.setChanged();
}
@Override
public void updateLight(float partialTick) {
Direction facing = blockEntity.getBlockState().getValue(HORIZONTAL_FACING).getCounterClockWise();
BlockPos behind = pos.relative(facing);
relight(behind, shaft);
}
@Override
protected void _delete() {
shaft.delete();
}
@Override
public void collectCrumblingInstances(Consumer<Instance> consumer) {
consumer.accept(shaft);
}
}

View File

@@ -21,7 +21,8 @@ import java.util.Objects;
public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements IVatMachine {
ElectrodeType electrodeType = ElectrodeType.NONE;
boolean isTallEnough=true;
boolean isTallEnough = true;
public ElectrodeHolderBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}
@@ -41,7 +42,7 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
} else return true;
}
}
if (!simulate&&hasLevel())
if (!simulate && hasLevel())
VatBlock.updateVatState(getBlockState(), getLevel(), getBlockPos().relative(Direction.DOWN));
sendData();
return false;
@@ -51,18 +52,18 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
@Override
public float resistance() {
if(electrodeType !=ElectrodeType.NONE){
if(electrodeType == ElectrodeType.GRAPHITE){
return 5;
}else {
return 20;
}
if (electrodeType != ElectrodeType.NONE) {
return 20;
}
return 0;
}
@Override
public boolean canBeInGroups() {
return true;
}
public boolean setElectrode(String name, boolean simulate) {
for (ElectrodeType type : ElectrodeType.values()) {
if (Objects.equals(type.name, name)) {
@@ -71,7 +72,7 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
} else return true;
}
}
if (!simulate&&hasLevel())
if (!simulate && hasLevel())
VatBlock.updateVatState(getBlockState(), getLevel(), getBlockPos().relative(Direction.DOWN));
sendData();
return false;
@@ -83,17 +84,19 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
VatBlock.updateVatState(getBlockState(), level, getBlockPos().relative(Direction.DOWN));
}
boolean isSuperheated(){
boolean isSuperheated() {
return electrodeType == ElectrodeType.GRAPHITE && getCurrent() >= TFMGConfigs.common().machines.graphiteElectrodeCurrent.get();
}
boolean isOperational(){
return getCurrent() >= TFMGConfigs.common().machines.electrolysisMinimumCurrent.get();
boolean isOperational() {
return getCurrent() >= TFMGConfigs.common().machines.electrolysisMinimumCurrent.get()&&canWork();
}
@Override
public AABB getRenderBoundingBox() {
return new AABB(getBlockPos()).setMinY(getBlockPos().getY()-2);
return new AABB(getBlockPos()).setMinY(getBlockPos().getY() - 2);
}
@Override
public void write(CompoundTag compound, boolean clientPacket) {
for (ElectrodeType electrode : ElectrodeType.values()) {
@@ -108,12 +111,16 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
protected void read(CompoundTag compound, boolean clientPacket) {
super.read(compound, clientPacket);
setElectrode(compound.getString("Electrode"),false);
setElectrode(compound.getString("Electrode"), false);
}
@Override
public String getOperationId() {
return switch (electrodeType){
return switch (electrodeType) {
case NONE -> "";
case COPPER, ZINC -> isOperational() ? "tfmg:electrode" : "";
@@ -123,7 +130,7 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
@Override
public int getWorkPercentage() {
return (getPowerUsage()/5000)*100;
return (getPowerUsage() / 5000) * 100;
}
@Override
@@ -137,9 +144,7 @@ public class ElectrodeHolderBlockEntity extends ElectricBlockEntity implements I
NONE("none", ItemStack.EMPTY, null),
COPPER("copper", TFMGItems.COPPER_ELECTRODE.asStack(), TFMGPartialModels.COPPER_ELECTRODE),
ZINC("zinc", TFMGItems.ZINC_ELECTRODE.asStack(), TFMGPartialModels.ZINC_ELECTRODE),
GRAPHITE("graphite", TFMGItems.GRAPHITE_ELECTRODE.asStack(), TFMGPartialModels.GRAPHITE_ELECTRODE)
;
GRAPHITE("graphite", TFMGItems.GRAPHITE_ELECTRODE.asStack(), TFMGPartialModels.GRAPHITE_ELECTRODE);
public final String name;
public final ItemStack item;

View File

@@ -1211,6 +1211,16 @@ public class TFMGStandardRecipeGen extends TFMGRecipeProvider {
.pattern("WTR")
.pattern("WLR")),
MULTIMETER = create(TFMGItems.MULTIMETER)
.unlockedBy(TFMGBlocks.VOLTMETER::get)
.viaShaped(b -> b
.define('G', TFMGBlocks.VOLTMETER)
.define('W', copperWire())
.define('B', brassSheet())
.pattern("BGB")
.pattern("BWB")
.pattern("BWB")),
COPPER_CABLE_HUB = create(TFMGBlocks.COPPER_CABLE_HUB).returns(2)
.unlockedBy(TFMGItems.MAGNET::get)
.viaShaped(b -> b
@@ -1831,6 +1841,109 @@ public class TFMGStandardRecipeGen extends TFMGRecipeProvider {
.requires(ItemTags.WOODEN_DOORS)),
////////
WHITE_MULTIMETER = create(TFMGItems.MULTIMETERS.get("white")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("white"))),
YELLOW_MULTIMETER = create(TFMGItems.MULTIMETERS.get("yellow")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("yellow"))),
BROWN_MULTIMETER = create(TFMGItems.MULTIMETERS.get("brown")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("brown"))),
ORANGE_MULTIMETER = create(TFMGItems.MULTIMETERS.get("orange")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("orange"))),
BLACK_MULTIMETER = create(TFMGItems.MULTIMETERS.get("black")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("black"))),
CYAN_MULTIMETER = create(TFMGItems.MULTIMETERS.get("cyan")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("cyan"))),
BLUE_MULTIMETER = create(TFMGItems.MULTIMETERS.get("blue")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("blue"))),
LIGHT_BLUE_MULTIMETER = create(TFMGItems.MULTIMETERS.get("light_blue")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("light_blue"))),
GRAY_MULTIMETER = create(TFMGItems.MULTIMETERS.get("gray")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("gray"))),
LIGHT_GRAY_MULTIMETER = create(TFMGItems.MULTIMETERS.get("light_gray")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("light_gray"))),
GREEN_MULTIMETER = create(TFMGItems.MULTIMETERS.get("green")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("green"))),
LIME_MULTIMETER = create(TFMGItems.MULTIMETERS.get("lime")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("lime"))),
PINK_MULTIMETER = create(TFMGItems.MULTIMETERS.get("pink")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("pink"))),
PURPLE_MULTIMETER = create(TFMGItems.MULTIMETERS.get("purple")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("purple"))),
MAGENTA_MULTIMETER = create(TFMGItems.MULTIMETERS.get("magenta")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("magenta"))),
RED_MULTIMETER = create(TFMGItems.MULTIMETERS.get("red")::get)
.unlockedBy(() -> TFMGItems.MULTIMETER)
.viaShapeless(b -> b
.requires(TFMGItems.MULTIMETER)
.requires(DYES_FROM_COLOR.get("red"))),
////////
WHITE_CONCRETE = create(TFMGBlocks.COLORED_CONCRETE.get("white").block).returns(8)
.unlockedBy(TFMGBlocks.CONCRETE.block::get)
.viaShaped(b -> b

View File

@@ -0,0 +1,53 @@
package com.drmangotea.tfmg.datagen.recipes.values.create;
import com.drmangotea.tfmg.datagen.recipes.TFMGProcessingRecipeGen;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.drmangotea.tfmg.registry.TFMGItems;
import com.drmangotea.tfmg.registry.TFMGPaletteStoneTypes;
import com.simibubi.create.AllRecipeTypes;
import net.minecraft.data.PackOutput;
import static com.drmangotea.tfmg.datagen.recipes.TFMGRecipeProvider.I.*;
public class TFMGCrushingRecipeGen extends TFMGProcessingRecipeGen {
GeneratedRecipe
COPPER_SULFATE = create(I::copperSulfate, b -> b
.output(boneMeal(), 4)
.output(.25f, boneMeal(), 3)
.output(.5f, cyanDye(), 1)
.output(.75f, blueDye(), 1)
),
LIGNITE = create(TFMGBlocks.LIGNITE::get, b -> b
.output(.75f,coal(), 1)
.output(.2f,coal(), 1)
),
BAUXITE = create(TFMGPaletteStoneTypes.BAUXITE.getBaseBlock()::get, b -> b
.output(.75f, TFMGItems.BAUXITE_POWDER, 2)
.output(.2f,TFMGItems.BAUXITE_POWDER, 1)
),
LIMESAND = create(I::limestone, b -> b
.output(limesand(), 1)
),
COAL_COKE = create(I::coalCoke, b -> b
.output(coalCokeDust(), 1)
),
SALTPETER = create(I::dirt, b -> b
.output(.05f, nitrateDust(), 1)
),
SULFUR = create(() -> TFMGBlocks.SULFUR, b -> b
.output(.2f, sulfurDust(), 1)
.output(.1f, sulfurDust(), 1)
);
public TFMGCrushingRecipeGen(PackOutput output) {
super(output);
}
@Override
protected AllRecipeTypes getRecipeType() {
return AllRecipeTypes.CRUSHING;
}
}

View File

@@ -102,7 +102,6 @@ public class GoggleOverlayRendererMixin {
if(isElectricBlock&&!hasGoggles) {
ItemStack item = TFMGItems.MULTIMETER.asStack();
List<Component> tooltip = new ArrayList<>();
tooltip.add(CreateLang.number(1).component());
((IElectric) be).makeMultimeterTooltip(tooltip, isShifting);
@@ -111,8 +110,7 @@ public class GoggleOverlayRendererMixin {
tfmg$hoverTicks = 0;
} else {
//
//
if (tooltip.isEmpty()) {
tfmg$hoverTicks = 0;
} else {

View File

@@ -0,0 +1,147 @@
package com.drmangotea.tfmg.ponder;
import com.drmangotea.tfmg.TFMG;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.drmangotea.tfmg.registry.TFMGItems;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import com.tterrag.registrate.util.entry.RegistryEntry;
import net.createmod.catnip.platform.CatnipServices;
import net.createmod.ponder.api.registration.PonderTagRegistrationHelper;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.ItemLike;
public class TFMGPonderTags {
public static final ResourceLocation
OIL_PROCESSING = loc("oil_processing"),
ENGINES = loc("engines"),
METALLURGY = loc("metallurgy"),
ELECTRIC_MACHINERY = loc("electric_machinery"),
CHEMICAL_VAT = loc("chemical_vat")
;
private static ResourceLocation loc(String id) {
return TFMG.asResource(id);
}
public static void register(PonderTagRegistrationHelper<ResourceLocation> helper) {
PonderTagRegistrationHelper<RegistryEntry<?>> HELPER = helper.withKeyFunction(RegistryEntry::getId);
PonderTagRegistrationHelper<ItemLike> itemHelper = helper.withKeyFunction(
CatnipServices.REGISTRIES::getKeyOrThrow);
helper.registerTag(OIL_PROCESSING)
.addToIndex()
.item(TFMGBlocks.STEEL_DISTILLATION_CONTROLLER, true, false)
.title("Oil Processing Machinery")
.description("Block used for refining and mining oil")
.register();
helper.registerTag(ENGINES)
.addToIndex()
.item(TFMGBlocks.TURBINE_ENGINE, true, false)
.title("Engines")
.description("Engines and equipment related to them")
.register();
helper.registerTag(METALLURGY)
.addToIndex()
.item(TFMGBlocks.BLAST_FURNACE_OUTPUT, true, false)
.title("Metallurgy")
.description("Blocks related to processing metal")
.register();
helper.registerTag(ELECTRIC_MACHINERY)
.addToIndex()
.item(TFMGBlocks.ROTOR, true, true)
.title("Electric Machinery")
.description("Block which use, produce or transfer electricity")
.register();
helper.registerTag(CHEMICAL_VAT)
.addToIndex()
.item(TFMGBlocks.STEEL_CHEMICAL_VAT, true, false)
.title("Chemical Vat")
.description("Chemical vat and machines that expand it")
.register();
HELPER.addToTag(OIL_PROCESSING)
.add(TFMGBlocks.STEEL_DISTILLATION_CONTROLLER)
.add(TFMGBlocks.STEEL_DISTILLATION_OUTPUT)
.add(TFMGBlocks.INDUSTRIAL_PIPE)
.add(TFMGBlocks.SURFACE_SCANNER)
.add(TFMGBlocks.PUMPJACK_BASE)
.add(TFMGBlocks.PUMPJACK_CRANK)
.add(TFMGBlocks.PUMPJACK_HAMMER)
.add(TFMGBlocks.PUMPJACK_HAMMER_CONNECTOR)
.add(TFMGBlocks.PUMPJACK_HAMMER_HEAD)
.add(TFMGBlocks.PUMPJACK_HAMMER_PART)
.add(TFMGBlocks.LARGE_PUMPJACK_HAMMER_CONNECTOR)
.add(TFMGBlocks.LARGE_PUMPJACK_HAMMER_HEAD)
.add(TFMGBlocks.LARGE_PUMPJACK_HAMMER_PART)
;
HELPER.addToTag(ENGINES)
.add(TFMGBlocks.REGULAR_ENGINE)
.add(TFMGBlocks.TURBINE_ENGINE)
.add(TFMGBlocks.RADIAL_ENGINE)
.add(TFMGBlocks.LARGE_ENGINE)
.add(TFMGBlocks.SIMPLE_LARGE_ENGINE)
.add(TFMGBlocks.ENGINE_CONTROLLER)
.add(TFMGBlocks.ENGINE_GEARBOX)
.add(TFMGBlocks.EXHAUST)
.add(TFMGBlocks.AIR_INTAKE)
.add(TFMGItems.OIL_CAN)
.add(TFMGItems.COOLING_FLUID_BOTTLE)
.add(TFMGItems.TRANSMISSION)
.add(TFMGItems.TURBO);
HELPER.addToTag(METALLURGY)
.add(TFMGBlocks.BLAST_FURNACE_OUTPUT)
.add(TFMGBlocks.BLAST_FURNACE_HATCH)
.add(TFMGBlocks.FIREPROOF_BRICKS)
.add(TFMGBlocks.FIREPROOF_BRICK_REINFORCEMENT)
.add(TFMGBlocks.BLAST_FURNACE_REINFORCEMENT)
.add(TFMGBlocks.RUSTED_BLAST_FURNACE_REINFORCEMENT)
.add(TFMGBlocks.BLAST_STOVE)
.add(TFMGBlocks.CASTING_BASIN);
HELPER.addToTag(ELECTRIC_MACHINERY)
.add(TFMGBlocks.ROTOR)
.add(TFMGBlocks.STATOR)
.add(TFMGBlocks.GENERATOR)
.add(TFMGBlocks.ELECTRIC_MOTOR)
.add(TFMGBlocks.CABLE_CONNECTOR)
.add(TFMGBlocks.GLASS_CABLE_CONNECTOR)
.add(TFMGBlocks.POLARIZER)
.add(TFMGBlocks.ACCUMULATOR)
.add(TFMGBlocks.TRANSFORMER)
.add(TFMGBlocks.ELECTRICAL_SWITCH)
.add(TFMGBlocks.DIODE)
.add(TFMGBlocks.POTENTIOMETER)
.add(TFMGBlocks.ELECTRIC_PUMP)
.add(TFMGBlocks.LIGHT_BULB)
.add(TFMGBlocks.BRASS_CABLE_HUB)
.add(TFMGBlocks.SEGMENTED_DISPLAY)
.add(TFMGBlocks.CONVERTER)
.add(TFMGBlocks.TRAFFIC_LIGHT)
.add(TFMGItems.COPPER_SPOOL)
.add(TFMGItems.ALUMINUM_SPOOL)
;
HELPER.addToTag(CHEMICAL_VAT)
.add(TFMGBlocks.STEEL_CHEMICAL_VAT)
.add(TFMGBlocks.CAST_IRON_CHEMICAL_VAT)
.add(TFMGBlocks.FIREPROOF_CHEMICAL_VAT)
.add(TFMGBlocks.INDUSTRIAL_MIXER)
.add(TFMGBlocks.ELECTRODE_HOLDER)
.add(TFMGItems.COPPER_ELECTRODE)
.add(TFMGItems.ZINC_ELECTRODE)
.add(TFMGItems.GRAPHITE_ELECTRODE)
.add(TFMGItems.MIXER_BLADE)
.add(TFMGItems.CENTRIFUGE)
;
}
}

View File

@@ -84,6 +84,7 @@ import com.drmangotea.tfmg.content.machinery.misc.machine_input.MachineInputBloc
import com.drmangotea.tfmg.content.machinery.misc.smokestack.SmokestackBlockEntity;
import com.drmangotea.tfmg.content.machinery.misc.winding_machine.WindingMachineBlockEntity;
import com.drmangotea.tfmg.content.machinery.misc.winding_machine.WindingMachineRenderer;
import com.drmangotea.tfmg.content.machinery.misc.winding_machine.WindingMachineVisual;
import com.drmangotea.tfmg.content.machinery.oil_processing.distillation_tower.controller.DistillationControllerBlockEntity;
import com.drmangotea.tfmg.content.machinery.oil_processing.distillation_tower.controller.DistillationControllerRenderer;
import com.drmangotea.tfmg.content.machinery.oil_processing.distillation_tower.output.DistillationOutputBlockEntity;
@@ -536,7 +537,7 @@ public class TFMGBlockEntities {
public static final BlockEntityEntry<WindingMachineBlockEntity> WINDING_MACHINE = REGISTRATE
.blockEntity("winding_machine", WindingMachineBlockEntity::new)
.visual(() -> OrientedRotatingVisual.of(AllPartialModels.SHAFT_HALF),true)
.visual(() -> WindingMachineVisual::new,true)
.validBlocks(TFMGBlocks.WINDING_MACHINE)
.renderer(() -> WindingMachineRenderer::new)
.register();

View File

@@ -6,7 +6,7 @@ import com.drmangotea.tfmg.base.TFMGTiers;
import com.drmangotea.tfmg.content.decoration.gearbox.SteelVerticalGearboxItem;
import com.drmangotea.tfmg.content.electricity.connection.cables.CableConnection;
import com.drmangotea.tfmg.content.electricity.debug.DebugCinderBlockItem;
import com.drmangotea.tfmg.content.electricity.electrians_wrench.ElectriciansWrenchItem;
import com.drmangotea.tfmg.content.electricity.configuration_wrench.ElectriciansWrenchItem;
import com.drmangotea.tfmg.content.electricity.measurement.MultimeterItem;
import com.drmangotea.tfmg.content.electricity.utilities.fuse_block.FuseItem;
import com.drmangotea.tfmg.content.electricity.utilities.resistor.ResistorItem;
@@ -35,6 +35,7 @@ import com.simibubi.create.foundation.data.CreateRegistrate;
import com.tterrag.registrate.builders.ItemBuilder;
import com.tterrag.registrate.util.DataIngredient;
import com.tterrag.registrate.util.entry.ItemEntry;
import com.tterrag.registrate.util.entry.RegistryEntry;
import dev.engine_room.flywheel.lib.model.baked.PartialModel;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.tags.TagKey;
@@ -43,7 +44,9 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.Tags;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.drmangotea.tfmg.TFMG.REGISTRATE;
import static com.drmangotea.tfmg.base.TFMGBuilderTransformers.COLORS;
@@ -253,9 +256,9 @@ public class TFMGItems {
.properties(p -> p.stacksTo(1))
.register();
static {
multimeters();
}
public static final Map<String, RegistryEntry<MultimeterItem>> MULTIMETERS = multimeters();
public static final ItemEntry<MultimeterItem> MULTIMETER = REGISTRATE.item("multimeter", MultimeterItem::new)
.register();
@@ -408,13 +411,16 @@ public class TFMGItems {
.register();
}
public static void multimeters() {
public static Map<String, RegistryEntry<MultimeterItem>> multimeters() {
Map<String, RegistryEntry<MultimeterItem>> map = new HashMap<>();
for (String color : COLORS) {
REGISTRATE.item(color + "_multimeter", MultimeterItem::new)
.register();
map.put(color,REGISTRATE.item(color + "_multimeter", MultimeterItem::new)
.register());
}
return map;
}
public static ItemBuilder<SpoolItem, CreateRegistrate> spoolItem(String name, PartialModel model, int barColor, CableConnection.CableType type) {

View File

@@ -7,8 +7,8 @@ import com.drmangotea.tfmg.content.electricity.base.ConnectionPacket;
import com.drmangotea.tfmg.content.electricity.base.NetworkUpdatePacket;
import com.drmangotea.tfmg.content.electricity.base.UpdateInFrontPacket;
import com.drmangotea.tfmg.content.electricity.connection.cables.CablePlacePacket;
import com.drmangotea.tfmg.content.electricity.connection.cables.CableRemovalPacket;
import com.drmangotea.tfmg.content.electricity.electrians_wrench.ElectriciansWrenchPacket;
import com.drmangotea.tfmg.content.electricity.configuration_wrench.ElectriciansWrenchPacket;
import com.drmangotea.tfmg.content.engines.engine_controller.TransmissionRemovePacket;
import com.drmangotea.tfmg.content.engines.engine_controller.packets.*;
import com.drmangotea.tfmg.content.items.weapons.advanced_potato_cannon.AdvancedPotatoCannonPacket;
import com.drmangotea.tfmg.content.items.weapons.quad_potato_cannon.QuadPotatoCannonPacket;
@@ -42,7 +42,7 @@ public enum TFMGPackets {
VAT_EVALUATION(VatEvaluationPacket.class, VatEvaluationPacket::new, PLAY_TO_CLIENT),
COKE_OVEN_PACKET(CokeOvenPacket.class, CokeOvenPacket::new, PLAY_TO_CLIENT),
UPDATE_IN_FRONT_PACKET(UpdateInFrontPacket.class, UpdateInFrontPacket::new, PLAY_TO_CLIENT),
CABLE_PACKET(CableRemovalPacket.class, CableRemovalPacket::new, PLAY_TO_CLIENT),
TRANSMISSION_REMOVE(TransmissionRemovePacket.class, TransmissionRemovePacket::new, PLAY_TO_CLIENT),
CABLE_PLACE_PACKET(CablePlacePacket.class, CablePlacePacket::new, PLAY_TO_CLIENT),
ELECTRICIANS_WRENCH_PACKET(ElectriciansWrenchPacket.class, ElectriciansWrenchPacket::new, PLAY_TO_SERVER),
ENGINE_CONTROLLER_INPUT(EngineControllerInputPacket.class, EngineControllerInputPacket::new, PLAY_TO_SERVER),

View File

@@ -89,6 +89,7 @@ public class TFMGPartialModels {
MIXER = block("industrial_mixer/mixer"),
MIXER_SHAFT = block("industrial_mixer/mixer_shaft"),
ENGINE_GENERATOR = block("engine_upgrades/generator"),
TRANSMISSION = PartialModel.of(TFMG.asResource("item/transmission_model")),
TURBO = block("engine_upgrades/turbo"),
TURBO_PROPELLER = block("engine_upgrades/turbo_propeller"),
GOLDEN_TURBO = block("engine_upgrades/golden_turbo"),

View File

@@ -80,6 +80,9 @@
"death.attack.tfmg.acid": "%1$s took an acid bath",
"death.attack.tfmg.acid.player": "%1$s took an acid bath",
"death.attack.tfmg.blast_furnace": "%1$s was turned in carbon steel",
"death.attack.tfmg.blast_furnace.player": "%1$s was thrown into a blast furnace",
"create.tooltip.fuse": "Rating: %1$s",
"create.tooltip.resistor": "Resistance: %1$s",
"create.tooltip.coils": "Turns: %1$s",

View File

@@ -7,9 +7,9 @@
},
"elements": [
{
"from": [5, 11, 4],
"to": [11, 14, 13],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [5, 11, 3],
"to": [11, 14, 12],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [3, 3, 4.5, 6], "rotation": 270, "texture": "#2"},
"east": {"uv": [1.5, 7.5, 0, 3], "rotation": 90, "texture": "#2"},
@@ -20,9 +20,9 @@
}
},
{
"from": [5, 11, 3],
"to": [10, 14, 4],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [5, 11, 2],
"to": [10, 14, 3],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [7.5, 0, 9, 2.5], "rotation": 270, "texture": "#2"},
"east": {"uv": [9, 2.5, 7.5, 2], "rotation": 90, "texture": "#2"},
@@ -33,9 +33,9 @@
}
},
{
"from": [4, 11, 13],
"to": [12, 15, 15],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [4, 11, 12],
"to": [12, 15, 14],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [4.5, 0, 6.5, 4], "rotation": 270, "texture": "#2"},
"east": {"uv": [11, 2, 9, 1], "rotation": 90, "texture": "#2"},
@@ -46,9 +46,9 @@
}
},
{
"from": [4, 15, 8],
"to": [12, 15, 10],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [4, 15, 7],
"to": [12, 15, 9],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 4], "rotation": 270, "texture": "#2"},
"east": {"uv": [0, 1, 0, 0], "rotation": 90, "texture": "#2"},
@@ -59,9 +59,9 @@
}
},
{
"from": [12, 11, 8],
"to": [12, 15, 10],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [12, 11, 7],
"to": [12, 15, 9],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [0, 0, 2, 0], "rotation": 270, "texture": "#2"},
"east": {"uv": [11, 0, 9, 1], "rotation": 90, "texture": "#2"},
@@ -72,9 +72,9 @@
}
},
{
"from": [4, 11, 8],
"to": [4, 15, 10],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [4, 11, 7],
"to": [4, 15, 9],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [0, 0, 2, 0], "rotation": 270, "texture": "#2"},
"east": {"uv": [11, 0, 9, 1], "rotation": 90, "texture": "#2"},
@@ -85,9 +85,9 @@
}
},
{
"from": [12, 11, 11],
"to": [12, 15, 12],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [12, 11, 10],
"to": [12, 15, 11],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [0, 0, 2, 0], "rotation": 270, "texture": "#2"},
"east": {"uv": [11, 1, 9, 0.5], "rotation": 90, "texture": "#2"},
@@ -98,9 +98,9 @@
}
},
{
"from": [4, 15, 11],
"to": [12, 15, 12],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [4, 15, 10],
"to": [12, 15, 11],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 4], "rotation": 270, "texture": "#2"},
"east": {"uv": [0, 0.5, 0, 0], "rotation": 90, "texture": "#2"},
@@ -111,9 +111,9 @@
}
},
{
"from": [4, 11, 11],
"to": [4, 15, 12],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [4, 11, 10],
"to": [4, 15, 11],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [0, 0, 2, 0], "rotation": 270, "texture": "#2"},
"east": {"uv": [11.5, 0.5, 9.5, 0], "rotation": 90, "texture": "#2"},
@@ -124,9 +124,9 @@
}
},
{
"from": [11, 12, 4],
"to": [12, 13, 13],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [11, 12, 3],
"to": [12, 13, 12],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [1.5, 10.5, 2, 11], "rotation": 270, "texture": "#2"},
"east": {"uv": [3.5, 7.5, 3, 3], "rotation": 90, "texture": "#2"},
@@ -137,9 +137,9 @@
}
},
{
"from": [10, 12, 3],
"to": [12, 13, 4],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 9]},
"from": [10, 12, 2],
"to": [12, 13, 3],
"rotation": {"angle": 0, "axis": "z", "origin": [9, 4, 8]},
"faces": {
"north": {"uv": [3, 3.5, 3.5, 4.5], "rotation": 270, "texture": "#2"},
"east": {"uv": [3.5, 6, 3, 5.5], "rotation": 90, "texture": "#2"},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 B

After

Width:  |  Height:  |  Size: 467 B