Merge branch 'mc1.18/dev' into fr-translate

This commit is contained in:
Augustin Mauroy 2022-10-10 10:35:15 +02:00 committed by GitHub
commit a4b3688a9d
Failed to generate hash of commit
183 changed files with 4984 additions and 1814 deletions

View file

@ -49,6 +49,8 @@ body:
label: Mod Version
description: The version of the mod you were using when the bug occured
options:
- "0.5.0f"
- "0.5.0e"
- "0.5.0d"
- "0.5.0c"
- "0.5.0b"
@ -107,6 +109,7 @@ body:
label: Minecraft Version
description: The version of Minecraft you were using when the bug occured
options:
- "1.19.2"
- "1.18.2"
- "1.18.1"
- "1.18"

View file

@ -8,3 +8,5 @@
- "1.17"
1.18:
- "1.18"
1.19:
- "1.19"

View file

@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G
org.gradle.daemon = false
# mod version info
mod_version = 0.5.0.d
mod_version = 0.5.0.e
artifact_minecraft_version = 1.18.2
minecraft_version = 1.18.2

View file

@ -21,13 +21,13 @@ cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window.
e0f1e44c9bce4a7478592cf3a8ee7b91d9083d65 assets/create/blockstates/black_sail.json
58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json
73db8bd55bd5bd21f939ee9eb4b4b02209d9c5ed assets/create/blockstates/black_toolbox.json
a71ddf3291bd13d7877f2fe32c42f50407f99afb assets/create/blockstates/black_valve_handle.json
afa06da52441feec43d45a063d72867eeb786df3 assets/create/blockstates/black_valve_handle.json
923aeb2a556f67bc0526f237dd97af2d37b4c9f1 assets/create/blockstates/blaze_burner.json
ea1a792572af1ee4c9831cd55825514d6568952d assets/create/blockstates/blue_nixie_tube.json
ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json
4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json
dea175335c5db0abe758cd208dc984c22506a176 assets/create/blockstates/blue_toolbox.json
9d7341a5cae5d47788c595167946dfb6441cebd1 assets/create/blockstates/blue_valve_handle.json
f3697a7d105e5d271f5999b86df071fe5893457c assets/create/blockstates/blue_valve_handle.json
5f57741e500903b70c80d2a72788a25e97387e2e assets/create/blockstates/brass_belt_funnel.json
8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json
b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json
@ -41,7 +41,7 @@ ffe31d5ad0486949b049cf2060d1f34ef7ceaa82 assets/create/blockstates/brown_nixie_t
11ebdd9bd0815833e62ec1bea03a4cdd86ce00f3 assets/create/blockstates/brown_sail.json
e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json
bd73bfdbe88c58883cc15fe31a9dac7860482ca3 assets/create/blockstates/brown_toolbox.json
322289524c058fac66bbe76b4924c3b0c0c33b84 assets/create/blockstates/brown_valve_handle.json
1729306caa9cd057ffd0bb83eb74dc3c8d6d9245 assets/create/blockstates/brown_valve_handle.json
ff1073a5451691c492102243084d92de42abfc26 assets/create/blockstates/calcite_pillar.json
d01a750e6e8214ca8481e40aa69cedeb5c7210f8 assets/create/blockstates/cart_assembler.json
470e8c6a9c37b91fa745bc4f6e9d3740bd72467e assets/create/blockstates/chocolate.json
@ -61,7 +61,7 @@ a002289d0bb7df6927e8e6a99e9eb9ec77bd179d assets/create/blockstates/copper_shingl
a87097f3a092264d9b74966ee9e3bcfc0b743f80 assets/create/blockstates/copper_tile_slab.json
1cc9cdcd48ea76fe3407dce0973220ff9f63f51a assets/create/blockstates/copper_tile_stairs.json
cbae7653d6a6f2d98370e9a4a3bd91fdb529f89d assets/create/blockstates/copper_tiles.json
890be245b914c1a9f29f48a8c5d325640b5be160 assets/create/blockstates/copper_valve_handle.json
543af282e2cb44f00509d850814b4501f3491d48 assets/create/blockstates/copper_valve_handle.json
b759be6f47fb960a7757b70d194921a38261c90a assets/create/blockstates/creative_crate.json
da3f1203dd0b0096ce19e09705060a0ed0478bee assets/create/blockstates/creative_fluid_tank.json
f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_motor.json
@ -188,7 +188,7 @@ d6a8c385c9ebc5bae603c908b6f8eccd6f5ad94b assets/create/blockstates/cut_veridium_
b496452f2f7dbbba385e1fc10b560ec266e4b5e7 assets/create/blockstates/cyan_sail.json
4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json
8e14112e948e492da8151b773c1fa40bf1467490 assets/create/blockstates/cyan_toolbox.json
2c04d57e56849f243aec8a1e769574d24daac1e9 assets/create/blockstates/cyan_valve_handle.json
c5d5ca8a43c08ae27dba1c5a7631b67eabb8ed4c assets/create/blockstates/cyan_valve_handle.json
1726b1b9e04a0634e7e1fdcf1cf4cc898efc5c2f assets/create/blockstates/dark_oak_window.json
50d4627d8e8b5adade12de764ab528ddacfa9ea5 assets/create/blockstates/dark_oak_window_pane.json
de0116bf32a26d697a3b999044d6fb0b1b98320e assets/create/blockstates/deepslate_pillar.json
@ -211,7 +211,7 @@ fb41aa1a0828c9256b3f886fdcb55bb54252ba09 assets/create/blockstates/exposed_coppe
7a2259a71fbbbb9491fc1e6a9c935bc9fef14042 assets/create/blockstates/fake_track.json
dd6dadfeb65c4a4c4d1dc92516c411355e90dcca assets/create/blockstates/fluid_pipe.json
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
d3de8e5a13c417effe1516fba9d9074fa4a6da23 assets/create/blockstates/fluid_valve.json
95b0775bf4d619ca5b0a42dbdc47c6f2c15d7b3d assets/create/blockstates/flywheel.json
ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json
b5a2e05ed9557992c6093b76e9d80073eb986d5a assets/create/blockstates/framed_glass_door.json
@ -227,13 +227,13 @@ e506b85ed71dc4567295be3989f3302e57777ad9 assets/create/blockstates/gray_nixie_tu
5c40c4a27e1dec747a467dd251700c72a6ceb07d assets/create/blockstates/gray_sail.json
a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.json
191d2cc56af51349688ccb2dea75801a9bc9de85 assets/create/blockstates/gray_toolbox.json
5f17a5868616b33eb157965a661046cab7a1427f assets/create/blockstates/gray_valve_handle.json
1ca9210f8867fd9f8525a1952d11143120a5f016 assets/create/blockstates/gray_valve_handle.json
497dd226b6520a6d754413508c74b98e50563e2f assets/create/blockstates/green_nixie_tube.json
52b849faef96b8ab9d9d64a1518c8f299af057b8 assets/create/blockstates/green_sail.json
13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json
e91dcebe132d5b745df0f6c5b1c90d5fc4e8af52 assets/create/blockstates/green_toolbox.json
f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json
6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json
f1da8d16c9b0122bda60583a03d2b31ec1c70799 assets/create/blockstates/green_valve_handle.json
823fb70623cb02d2e2c2e4d324ec44e54be93ecd assets/create/blockstates/hand_crank.json
34076c9caafe48daa87cc783e96d4c81b0b164c0 assets/create/blockstates/haunted_bell.json
4572b90f5d6c586e145f2c7a55664c3cb734bd2b assets/create/blockstates/honey.json
be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.json
@ -264,17 +264,17 @@ b743ef11048fc284ba5622e1fbae3082f0616382 assets/create/blockstates/layered_tuff.
029904f21970947a4423a6e0c8c65c4e02f2e8e6 assets/create/blockstates/light_blue_sail.json
2a0a8b1715700bf1e284ee57ef9f7f163c12f3ee assets/create/blockstates/light_blue_seat.json
527f32e0d2b5b975cfeb515542098bb2d5224755 assets/create/blockstates/light_blue_toolbox.json
9bee040558a6b24e21f837fc808e17fae1883e71 assets/create/blockstates/light_blue_valve_handle.json
c2efef202f202d8fd1b3126a79fe6b553c9618bb assets/create/blockstates/light_blue_valve_handle.json
bda5c5e9e42b31fdbb819484c74d457ba11fc9a0 assets/create/blockstates/light_gray_nixie_tube.json
93537c4e2ab86218a777e7b000c3fcd55a80b1cd assets/create/blockstates/light_gray_sail.json
d9a2551e001bb315d071bb9f1f013323a66a5d09 assets/create/blockstates/light_gray_seat.json
0c40d13637f00a533175d29ba67559461101ead5 assets/create/blockstates/light_gray_toolbox.json
8bea8c86de8c218c8932eef140f0ed439e173156 assets/create/blockstates/light_gray_valve_handle.json
68d2c9235577293def513a26d23fb2d93433380f assets/create/blockstates/light_gray_valve_handle.json
d023ef67d23da0b3e7b221b1b4ddf7f1f0c09ea7 assets/create/blockstates/lime_nixie_tube.json
ba2c4e3ddafa3c89a72cc243b14e8518fab369aa assets/create/blockstates/lime_sail.json
1de3a88c003df03f5006e1bbaa0236589aba08ad assets/create/blockstates/lime_seat.json
db46a5b6d0b595293a672236d0a64548b0816cab assets/create/blockstates/lime_toolbox.json
179a3e68b9f2e289eafe0e98e768befbbf91c5c2 assets/create/blockstates/lime_valve_handle.json
2628c657f381ed32e9ca268ccaacc1ca62b612df assets/create/blockstates/lime_valve_handle.json
e7cb0b25e511610b46dfd219e0cc5ea60a79d56b assets/create/blockstates/limestone.json
bff90a8d674a839b13fd9cd1f78bf3d0ad9fad4f assets/create/blockstates/limestone_pillar.json
69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json
@ -283,7 +283,7 @@ bff90a8d674a839b13fd9cd1f78bf3d0ad9fad4f assets/create/blockstates/limestone_pil
85a58ac539775f90903d9ce66374f3f2ffd4fecf assets/create/blockstates/magenta_sail.json
84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json
2334006c152d6773040ca03ef3b3d26a58f0dfa0 assets/create/blockstates/magenta_toolbox.json
3bfce5016e5c929b74368dc2d734e62ae34587a4 assets/create/blockstates/magenta_valve_handle.json
8006292c8eddd76a1b71046d251a2143af6867a7 assets/create/blockstates/magenta_valve_handle.json
3b3250d6e209403a93d025604a8081087965016e assets/create/blockstates/mechanical_arm.json
ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json
5586beef2d9183dc34d8e8d2723620c0569592ae assets/create/blockstates/mechanical_crafter.json
@ -311,7 +311,7 @@ cf60989f63f02067fc4e4ad25033ac83167cdeb0 assets/create/blockstates/oak_window.js
b0be3d4ff92cb123ec21ec2788db35d0f392ba8a assets/create/blockstates/orange_sail.json
5764a24f6c4fa552b61d2a02135adfc7d93c2e10 assets/create/blockstates/orange_seat.json
7541e5efb98cddf8cdf62138b674458cda877a4c assets/create/blockstates/orange_toolbox.json
1445074ec21a3735ea912b624c0f9f18a450d2d3 assets/create/blockstates/orange_valve_handle.json
1899f3e4f1dc630aadfe6e6bc80fcfb700dc734b assets/create/blockstates/orange_valve_handle.json
8e2028e1a0450a592eed5e10276ba19b1195a206 assets/create/blockstates/ornate_iron_window.json
f59198fd966927e21e9bf76e64de533d05ea893b assets/create/blockstates/ornate_iron_window_pane.json
af8601235f08eb2b8104e1fabe352531c24d4992 assets/create/blockstates/oxidized_copper_shingle_slab.json
@ -325,7 +325,7 @@ ed1a1d7a8b47027a1fcac2014e80f4e061d0f983 assets/create/blockstates/oxidized_copp
30971f2f76fe56f144178c33ad6bde5fc9fb61c3 assets/create/blockstates/pink_sail.json
919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json
588ebcdb4c1d8d4c75225e92f26d6cf80cac2f15 assets/create/blockstates/pink_toolbox.json
471a3bb474a0ae0453143888d561256cce894e3f assets/create/blockstates/pink_valve_handle.json
77e7fb0126b676046b1a0c9e37e587c18e1c1b92 assets/create/blockstates/pink_valve_handle.json
975c97018e9e2419943eaab43aed0970e96feaf7 assets/create/blockstates/piston_extension_pole.json
7f008a4a1d6a01c49c3f29d5821295e39ce4a3f5 assets/create/blockstates/placard.json
dae40222478caff3a5337c4f44cceaf5a30d4595 assets/create/blockstates/polished_cut_andesite.json
@ -396,7 +396,7 @@ ea8200550190eb65d8631c7842e06d99274b3c79 assets/create/blockstates/purple_nixie_
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
b78c6057ef94b03f541a17e625b3778ca526a6ad assets/create/blockstates/purple_toolbox.json
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
0c4acb7e268a9a2a030a3ea8c29a6b03967ce4c6 assets/create/blockstates/purple_valve_handle.json
4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json
e61e77d19c1abe9d76895909ee520e1bf0f7b512 assets/create/blockstates/railway_casing.json
c9ccf6fe4c80357ba2e4d053f5a1b35df4f377a8 assets/create/blockstates/raw_zinc_block.json
@ -404,7 +404,7 @@ c9ccf6fe4c80357ba2e4d053f5a1b35df4f377a8 assets/create/blockstates/raw_zinc_bloc
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
27fad7876f5a2de16f13dfde16d4a05dfe093989 assets/create/blockstates/red_toolbox.json
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
8a604cd639794533c0e9fe68a0ea218e99a3cecf assets/create/blockstates/red_valve_handle.json
8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json
c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json
b76ed5f6d271349b2509708c11e713bb299a57b6 assets/create/blockstates/refined_radiance_casing.json
@ -484,7 +484,7 @@ f0bef20f0e9a6b5d6a993b5fdc6ec3f7dc75d630 assets/create/blockstates/small_tuff_br
70192eb20909ca590e0a851dc7a283bc0899ebe4 assets/create/blockstates/small_veridium_brick_wall.json
4396af91ae23b9783fa34b861e4f01631dd53d49 assets/create/blockstates/small_veridium_bricks.json
fa4ffec5eac02c0180226d994d51756e44f85674 assets/create/blockstates/smart_chute.json
f0f72cc1faacc8f37c8ac1833c22eb910771c800 assets/create/blockstates/smart_fluid_pipe.json
674fe9df0a71860ce8553a504f7f2a770b100743 assets/create/blockstates/smart_fluid_pipe.json
e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/speedometer.json
1cb7cdbefa0ff199263782809287854b9d85074c assets/create/blockstates/spout.json
d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json
@ -548,34 +548,34 @@ c838c0792511ca2e14493b40032bb1370fac588a assets/create/blockstates/weighted_ejec
512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json
4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json
3695510f11231c8a5c1a0be94a92703e4b5a0f9c assets/create/blockstates/white_toolbox.json
89000903d0ab8139e919abea7aa0361b34c24e55 assets/create/blockstates/white_valve_handle.json
ae54261c2da64dd11ed7f887e1c9a19f96281fa7 assets/create/blockstates/white_valve_handle.json
c4cd1131113667da0180898b5db3ebad609db8ba assets/create/blockstates/windmill_bearing.json
d4f804f2818376950ef28fc8d6250419f4e12218 assets/create/blockstates/wooden_bracket.json
21cbde8ab2ab1bebe8bd36b23d1b480091fa9d57 assets/create/blockstates/yellow_nixie_tube.json
e03c48512967845fce09d84b955d3bc7b480fedc assets/create/blockstates/yellow_sail.json
a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json
bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbox.json
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
5616dda664dd106d576848124fc0fc1de18d0fd3 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json
11fd391ac3015f4dace8138ab1ec423ee822c7b4 assets/create/lang/en_us.json
34ab109f0935b7d0a7dd306188e0bd3056a77f93 assets/create/lang/unfinished/de_de.json
b5487949ee53302706c15051157316bb60dfa070 assets/create/lang/unfinished/es_cl.json
6df40ff1c18bfb83a33bc17e4458feeeee058bf1 assets/create/lang/unfinished/es_es.json
bca24c29adf91e0ee09db39783c59fac843acb46 assets/create/lang/unfinished/fr_fr.json
d7b53a16d03be2f854dfba1e90e2a149c2abecbd assets/create/lang/unfinished/it_it.json
42a6713a509ecd676e7eae6e6492da1e20e79102 assets/create/lang/unfinished/ja_jp.json
38e01a060e0e468a51b1ca4f0bcbec203837ce04 assets/create/lang/unfinished/ko_kr.json
83d812a1003fa3f25a3c28bbf54bf93f583c594a assets/create/lang/unfinished/nl_nl.json
c8c60fe2405f37cce7309326fb62cdb9aa1b49ff assets/create/lang/unfinished/pl_pl.json
11b3809e9c4c3c61687f7789979fdbf2332fd6a4 assets/create/lang/unfinished/pt_br.json
dd52b8df6ea92c1218e398197a1cedae066b4e0e assets/create/lang/unfinished/pt_pt.json
954a947034232204bd415e4bfb6c59a3a448b604 assets/create/lang/unfinished/ro_ro.json
54a92b2d667b55675c694904752760b594ab1424 assets/create/lang/unfinished/ru_ru.json
2f084cc7b66fe4ea82f5ac3338a1245caf67c54d assets/create/lang/unfinished/uk_ua.json
82490ac29a0c35c07cde11c340634bf8b416b6a3 assets/create/lang/unfinished/zh_cn.json
426b06805f08ef3fed15f404e9637b2d7082d660 assets/create/lang/unfinished/zh_tw.json
c219c77242e645f32704201dd80e279b3759b794 assets/create/lang/en_us.json
cf37534c3f98098f42b181083fd7cc1063ac2bbb assets/create/lang/unfinished/de_de.json
83d427726fdc38ec3c5b8c3c0f6f87f49d3e5ff3 assets/create/lang/unfinished/es_cl.json
d21caeb0cbe871e38dc101c34ab89ece3cbe2127 assets/create/lang/unfinished/es_es.json
2215688baa2b0beffe0c19f71a3238df1d01b0c1 assets/create/lang/unfinished/fr_fr.json
79484f2c3eba2b40f5d82ffdc3abeb3d2e6962d2 assets/create/lang/unfinished/it_it.json
d659570c9dc89653f03cd4cc82ed50db443638d8 assets/create/lang/unfinished/ja_jp.json
03c30521d9b1bc7a6eb85d2a59a4c4676dca581e assets/create/lang/unfinished/ko_kr.json
3a56d579d022cc1b20746e9d3a1483e6fa8fb4be assets/create/lang/unfinished/nl_nl.json
d5bfeacb442236c8b075fddb41364f85c8cb7feb assets/create/lang/unfinished/pl_pl.json
0f3f51d065d896a7e3b4abd8c2801fa3e8fbd8c3 assets/create/lang/unfinished/pt_br.json
9f2ec0b2f8fa9b380c7edb56bfb806bcce621cce assets/create/lang/unfinished/pt_pt.json
1f88f0d91bdf5c68224cb65249f77272771939c9 assets/create/lang/unfinished/ro_ro.json
928ac3ad2ab5e7fa3d582b8b956258c110bea868 assets/create/lang/unfinished/ru_ru.json
ed29ef4ae8f3633533485d56f7fa8cb77b790a0a assets/create/lang/unfinished/uk_ua.json
e5cf7b657be816bc15b331dd058f7ccdabee8c14 assets/create/lang/unfinished/zh_cn.json
316dae07f95fb65c984fe7c424b566eb8ddba5f9 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
@ -5633,6 +5633,7 @@ d99d5c67bdffff60789a19bd51a5c5267c75e0a4 data/create/tags/blocks/casing.json
74f4ba5f6f61c30e27947c6fb4557e888d018285 data/create/tags/blocks/safe_nbt.json
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json
8861f982c335a1f17796df4af53a7d5dc91fc85a data/create/tags/blocks/tree_attachments.json
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/black_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/black_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/black_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/black_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/black_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/black_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/black_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/black_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/black_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/black_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/black_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/black_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/blue_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/blue_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/blue_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/blue_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/blue_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/blue_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/blue_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/blue_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/blue_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/blue_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/blue_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/blue_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/brown_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/brown_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/brown_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/brown_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/brown_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/brown_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/brown_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/brown_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/brown_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/brown_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/brown_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/brown_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/copper_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/copper_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/copper_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/copper_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/copper_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/copper_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/copper_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/copper_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/copper_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/copper_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/copper_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/copper_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/cyan_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/cyan_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/cyan_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/cyan_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/cyan_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/cyan_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/cyan_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/cyan_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/cyan_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/cyan_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/cyan_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/cyan_valve_handle",
"x": 90,
"y": 90

View file

@ -1,98 +1,194 @@
{
"variants": {
"axis_along_first=false,enabled=false,facing=down": {
"axis_along_first=false,enabled=false,facing=down,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 270,
"y": 90
},
"axis_along_first=true,enabled=false,facing=down": {
"axis_along_first=true,enabled=false,facing=down,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 270
},
"axis_along_first=false,enabled=true,facing=down": {
"axis_along_first=false,enabled=true,facing=down,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 270,
"y": 90
},
"axis_along_first=true,enabled=true,facing=down": {
"axis_along_first=true,enabled=true,facing=down,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 270
},
"axis_along_first=false,enabled=false,facing=up": {
"axis_along_first=false,enabled=false,facing=up,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 90,
"y": 90
},
"axis_along_first=true,enabled=false,facing=up": {
"axis_along_first=true,enabled=false,facing=up,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 90
},
"axis_along_first=false,enabled=true,facing=up": {
"axis_along_first=false,enabled=true,facing=up,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 90,
"y": 90
},
"axis_along_first=true,enabled=true,facing=up": {
"axis_along_first=true,enabled=true,facing=up,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 90
},
"axis_along_first=false,enabled=false,facing=north": {
"axis_along_first=false,enabled=false,facing=north,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_closed",
"y": 180
},
"axis_along_first=true,enabled=false,facing=north": {
"axis_along_first=true,enabled=false,facing=north,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"y": 180
},
"axis_along_first=false,enabled=true,facing=north": {
"axis_along_first=false,enabled=true,facing=north,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_open",
"y": 180
},
"axis_along_first=true,enabled=true,facing=north": {
"axis_along_first=true,enabled=true,facing=north,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"y": 180
},
"axis_along_first=false,enabled=false,facing=south": {
"axis_along_first=false,enabled=false,facing=south,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_closed"
},
"axis_along_first=true,enabled=false,facing=south": {
"axis_along_first=true,enabled=false,facing=south,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed"
},
"axis_along_first=false,enabled=true,facing=south": {
"axis_along_first=false,enabled=true,facing=south,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_open"
},
"axis_along_first=true,enabled=true,facing=south": {
"axis_along_first=true,enabled=true,facing=south,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open"
},
"axis_along_first=false,enabled=false,facing=west": {
"axis_along_first=false,enabled=false,facing=west,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"y": 90
},
"axis_along_first=true,enabled=false,facing=west": {
"axis_along_first=true,enabled=false,facing=west,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_closed",
"y": 90
},
"axis_along_first=false,enabled=true,facing=west": {
"axis_along_first=false,enabled=true,facing=west,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"y": 90
},
"axis_along_first=true,enabled=true,facing=west": {
"axis_along_first=true,enabled=true,facing=west,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_open",
"y": 90
},
"axis_along_first=false,enabled=false,facing=east": {
"axis_along_first=false,enabled=false,facing=east,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"y": 270
},
"axis_along_first=true,enabled=false,facing=east": {
"axis_along_first=true,enabled=false,facing=east,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_closed",
"y": 270
},
"axis_along_first=false,enabled=true,facing=east": {
"axis_along_first=false,enabled=true,facing=east,waterlogged=false": {
"model": "create:block/fluid_valve/block_horizontal_open",
"y": 270
},
"axis_along_first=true,enabled=true,facing=east": {
"axis_along_first=true,enabled=true,facing=east,waterlogged=false": {
"model": "create:block/fluid_valve/block_vertical_open",
"y": 270
},
"axis_along_first=false,enabled=false,facing=down,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 270,
"y": 90
},
"axis_along_first=true,enabled=false,facing=down,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 270
},
"axis_along_first=false,enabled=true,facing=down,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 270,
"y": 90
},
"axis_along_first=true,enabled=true,facing=down,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 270
},
"axis_along_first=false,enabled=false,facing=up,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 90,
"y": 90
},
"axis_along_first=true,enabled=false,facing=up,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"x": 90
},
"axis_along_first=false,enabled=true,facing=up,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 90,
"y": 90
},
"axis_along_first=true,enabled=true,facing=up,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"x": 90
},
"axis_along_first=false,enabled=false,facing=north,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_closed",
"y": 180
},
"axis_along_first=true,enabled=false,facing=north,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"y": 180
},
"axis_along_first=false,enabled=true,facing=north,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_open",
"y": 180
},
"axis_along_first=true,enabled=true,facing=north,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"y": 180
},
"axis_along_first=false,enabled=false,facing=south,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_closed"
},
"axis_along_first=true,enabled=false,facing=south,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed"
},
"axis_along_first=false,enabled=true,facing=south,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_open"
},
"axis_along_first=true,enabled=true,facing=south,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open"
},
"axis_along_first=false,enabled=false,facing=west,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"y": 90
},
"axis_along_first=true,enabled=false,facing=west,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_closed",
"y": 90
},
"axis_along_first=false,enabled=true,facing=west,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"y": 90
},
"axis_along_first=true,enabled=true,facing=west,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_open",
"y": 90
},
"axis_along_first=false,enabled=false,facing=east,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_closed",
"y": 270
},
"axis_along_first=true,enabled=false,facing=east,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_closed",
"y": 270
},
"axis_along_first=false,enabled=true,facing=east,waterlogged=true": {
"model": "create:block/fluid_valve/block_horizontal_open",
"y": 270
},
"axis_along_first=true,enabled=true,facing=east,waterlogged=true": {
"model": "create:block/fluid_valve/block_vertical_open",
"y": 270
}

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/gray_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/gray_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/gray_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/gray_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/gray_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/gray_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/gray_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/gray_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/gray_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/gray_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/gray_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/gray_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/green_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/green_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/green_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/green_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/green_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/green_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/green_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/green_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/green_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/green_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/green_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/green_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/hand_crank/block",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/hand_crank/block"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/hand_crank/block",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/hand_crank/block",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/hand_crank/block",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/hand_crank/block",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/hand_crank/block",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/hand_crank/block"
},
"facing=north,waterlogged=true": {
"model": "create:block/hand_crank/block",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/hand_crank/block",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/hand_crank/block",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/hand_crank/block",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/light_blue_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/light_blue_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/light_blue_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/light_blue_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/light_blue_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/light_blue_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/light_blue_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/light_blue_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/light_blue_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/light_blue_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/light_blue_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/light_blue_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/light_gray_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/light_gray_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/light_gray_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/light_gray_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/light_gray_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/light_gray_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/light_gray_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/light_gray_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/light_gray_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/light_gray_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/light_gray_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/light_gray_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/lime_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/lime_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/lime_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/lime_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/lime_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/lime_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/lime_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/lime_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/lime_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/lime_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/lime_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/lime_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/magenta_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/magenta_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/magenta_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/magenta_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/magenta_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/magenta_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/magenta_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/magenta_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/magenta_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/magenta_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/magenta_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/magenta_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/orange_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/orange_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/orange_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/orange_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/orange_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/orange_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/orange_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/orange_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/orange_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/orange_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/orange_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/orange_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/pink_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/pink_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/pink_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/pink_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/pink_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/pink_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/pink_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/pink_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/pink_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/pink_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/pink_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/pink_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/purple_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/purple_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/purple_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/purple_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/purple_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/purple_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/purple_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/purple_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/purple_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/purple_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/purple_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/purple_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/red_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/red_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/red_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/red_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/red_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/red_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/red_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/red_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/red_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/red_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/red_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/red_valve_handle",
"x": 90,
"y": 90

View file

@ -1,54 +1,107 @@
{
"variants": {
"face=floor,facing=north": {
"face=floor,facing=north,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"y": 180
},
"face=wall,facing=north": {
"face=wall,facing=north,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270,
"y": 180
},
"face=ceiling,facing=north": {
"face=ceiling,facing=north,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180
},
"face=floor,facing=south": {
"face=floor,facing=south,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block"
},
"face=wall,facing=south": {
"face=wall,facing=south,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270
},
"face=ceiling,facing=south": {
"face=ceiling,facing=south,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180,
"y": 180
},
"face=floor,facing=west": {
"face=floor,facing=west,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"y": 90
},
"face=wall,facing=west": {
"face=wall,facing=west,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270,
"y": 90
},
"face=ceiling,facing=west": {
"face=ceiling,facing=west,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180,
"y": 270
},
"face=floor,facing=east": {
"face=floor,facing=east,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"y": 270
},
"face=wall,facing=east": {
"face=wall,facing=east,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270,
"y": 270
},
"face=ceiling,facing=east": {
"face=ceiling,facing=east,waterlogged=false": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180,
"y": 90
},
"face=floor,facing=north,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"y": 180
},
"face=wall,facing=north,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270,
"y": 180
},
"face=ceiling,facing=north,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180
},
"face=floor,facing=south,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block"
},
"face=wall,facing=south,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270
},
"face=ceiling,facing=south,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180,
"y": 180
},
"face=floor,facing=west,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"y": 90
},
"face=wall,facing=west,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270,
"y": 90
},
"face=ceiling,facing=west,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180,
"y": 270
},
"face=floor,facing=east,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"y": 270
},
"face=wall,facing=east,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 270,
"y": 270
},
"face=ceiling,facing=east,waterlogged=true": {
"model": "create:block/smart_fluid_pipe/block",
"x": 180,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/white_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/white_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/white_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/white_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/white_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/white_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/white_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/white_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/white_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/white_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/white_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/white_valve_handle",
"x": 90,
"y": 90

View file

@ -1,27 +1,53 @@
{
"variants": {
"facing=down": {
"facing=down,waterlogged=false": {
"model": "create:block/yellow_valve_handle",
"x": 180
},
"facing=up": {
"facing=up,waterlogged=false": {
"model": "create:block/yellow_valve_handle"
},
"facing=north": {
"facing=north,waterlogged=false": {
"model": "create:block/yellow_valve_handle",
"x": 90
},
"facing=south": {
"facing=south,waterlogged=false": {
"model": "create:block/yellow_valve_handle",
"x": 90,
"y": 180
},
"facing=west": {
"facing=west,waterlogged=false": {
"model": "create:block/yellow_valve_handle",
"x": 90,
"y": 270
},
"facing=east": {
"facing=east,waterlogged=false": {
"model": "create:block/yellow_valve_handle",
"x": 90,
"y": 90
},
"facing=down,waterlogged=true": {
"model": "create:block/yellow_valve_handle",
"x": 180
},
"facing=up,waterlogged=true": {
"model": "create:block/yellow_valve_handle"
},
"facing=north,waterlogged=true": {
"model": "create:block/yellow_valve_handle",
"x": 90
},
"facing=south,waterlogged=true": {
"model": "create:block/yellow_valve_handle",
"x": 90,
"y": 180
},
"facing=west,waterlogged=true": {
"model": "create:block/yellow_valve_handle",
"x": 90,
"y": 270
},
"facing=east,waterlogged=true": {
"model": "create:block/yellow_valve_handle",
"x": 90,
"y": 90

View file

@ -1484,6 +1484,7 @@
"create.schedule.condition.threshold.equal": "exactly",
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "Matching Content",
"create.schedule.condition.threshold.anything": "Anything",
"create.schedule.condition.threshold.item_measure": "Item Measure",
"create.schedule.condition.threshold.items": "Items",
"create.schedule.condition.threshold.stacks": "Stacks",
@ -1491,6 +1492,7 @@
"create.schedule.condition.threshold.status": "Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "Reference Item",
"create.schedule.condition.threshold.place_item_2": "Filters can be used",
"create.schedule.condition.threshold.place_item_3": "Leave empty to match any",
"create.schedule.condition.fluid_threshold": "Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "Item Cargo Condition",
"create.schedule.condition.redstone_link": "Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 840",
"_": "Missing Localizations: 842",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "genau",
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s %3$s",
"create.schedule.condition.threshold.matching_content": "passender Inhalt",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "Maßeinheit",
"create.schedule.condition.threshold.items": "Items",
"create.schedule.condition.threshold.stacks": "Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "Zugladestand: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "Referenz-Item",
"create.schedule.condition.threshold.place_item_2": "Filter können verwendet werden",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "Flüssigkeitsladestand",
"create.schedule.condition.item_threshold": "Item-Ladestand",
"create.schedule.condition.redstone_link": "Redstone-Link",
@ -1611,7 +1613,7 @@
"create.train.status.end_of_track": "Ein Waggon hat das Ende seines Gleises erreicht",
"create.train.status.double_portal": "Ein Waggon kann kein Portal während des Verlassens eines anderen betreten",
"create.train.status.coupling_stress": "Zwangsbremsung aufgrund von Spannung an einer Kopplung",
"create.train.status.track_missing": "Gleisen fehlen unter dem Zug",
"create.train.status.track_missing": "Gleise fehlen unter dem Zug",
"create.train.status.paused_for_manual": "Fahrplan für manuelle Fahrt pausiert",
"create.train.status.opposite_driver": "Pfad erfordert einen in die andere Richtung zeigenden Fahrer",
"create.train.status.missing_driver": "Fahrer ist verschwunden",
@ -1684,7 +1686,7 @@
"create.display_source.station_summary.platform_column": "Spalte 'Gleis' Größe",
"create.display_source.station_summary.now": "jetzt",
"create.display_source.station_summary.minutes": "min",
"create.display_source.station_summary.seconds": "%1$sen",
"create.display_source.station_summary.seconds": "%1$ss",
"create.display_source.observed_train_name": "Zugnamen ermitteln",
"create.display_source.max_enchant_level": "Max. Verzauberungskosten",
"create.display_source.boiler_status": "Kesselstatus",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 986",
"_": "Missing Localizations: 988",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 6",
"_": "Missing Localizations: 8",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "exactamente",
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s de %3$s",
"create.schedule.condition.threshold.matching_content": "Contenido coincidente",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "Medición de objetos",
"create.schedule.condition.threshold.items": "Objetos",
"create.schedule.condition.threshold.stacks": "Pilas de objetos",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "Cargamento: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "Objeto de referencia",
"create.schedule.condition.threshold.place_item_2": "Los filtros se pueden usar",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "Condición de cargamento de fluidos",
"create.schedule.condition.item_threshold": "Condición de cargamento de objetos",
"create.schedule.condition.redstone_link": "Enlace de redstone",

View file

@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 6",
"_": "Missing Localizations: 2",
"_": "->------------------------] Game Elements [------------------------<-",
@ -22,13 +22,13 @@
"block.create.belt": "Nastro",
"block.create.birch_window": "Finestra di betulla",
"block.create.birch_window_pane": "Pannello di finestra di betulla",
"block.create.black_nixie_tube": "Tubo di Nixie nero",
"block.create.black_nixie_tube": "Tubo Nixie nero",
"block.create.black_sail": "Vela nera",
"block.create.black_seat": "Sedile nero",
"block.create.black_toolbox": "Cassetta degli attrezzi nera",
"block.create.black_valve_handle": "Maniglia per valvola nera",
"block.create.blaze_burner": "Inceneritore a blaze",
"block.create.blue_nixie_tube": "Tubo di Nixie blu",
"block.create.blue_nixie_tube": "Tubo Nixie blu",
"block.create.blue_sail": "Vela blu",
"block.create.blue_seat": "Sedile blu",
"block.create.blue_toolbox": "Cassetta degli attrezzi blu",
@ -42,7 +42,7 @@
"block.create.brass_funnel": "Imbuto di ottone",
"block.create.brass_ladder": "Scala a pioli in ottone",
"block.create.brass_tunnel": "Tunnel di ottone",
"block.create.brown_nixie_tube": "Tubo di Nixie marrone",
"block.create.brown_nixie_tube": "Tubo Nixie marrone",
"block.create.brown_sail": "Vela marrone",
"block.create.brown_seat": "Sedile marrone",
"block.create.brown_toolbox": "Cassetta degli attrezzi marrone",
@ -189,7 +189,7 @@
"block.create.cut_veridium_slab": "Lastra di veridio tagliato",
"block.create.cut_veridium_stairs": "Scalini di veridio tagliato",
"block.create.cut_veridium_wall": "Muretto di veridio tagliato",
"block.create.cyan_nixie_tube": "Tubo di Nixie ciano",
"block.create.cyan_nixie_tube": "Tubo Nixie ciano",
"block.create.cyan_sail": "Vela ciano",
"block.create.cyan_seat": "Sedile ciano",
"block.create.cyan_toolbox": "Cassetta degli attrezzi ciano",
@ -228,12 +228,12 @@
"block.create.gearshift": "Cambio",
"block.create.glass_fluid_pipe": "Tubo per fluidi con vetrata",
"block.create.granite_pillar": "Pilastro di granito",
"block.create.gray_nixie_tube": "Tubo di Nixie grigio",
"block.create.gray_nixie_tube": "Tubo Nixie grigio",
"block.create.gray_sail": "Vela grigia",
"block.create.gray_seat": "Sedile grigio",
"block.create.gray_toolbox": "Cassetta degli attrezzi grigia",
"block.create.gray_valve_handle": "Maniglia per valvola grigia",
"block.create.green_nixie_tube": "Tubo di Nixie verde",
"block.create.green_nixie_tube": "Tubo Nixie verde",
"block.create.green_sail": "Vela verde",
"block.create.green_seat": "Sedile verde",
"block.create.green_toolbox": "Cassetta degli attrezzi verde",
@ -265,17 +265,17 @@
"block.create.layered_tuff": "Tufo stratificato",
"block.create.layered_veridium": "Veridio stratificato",
"block.create.lectern_controller": "Leggio con pulsantiera",
"block.create.light_blue_nixie_tube": "Tubo di Nixie azzurro",
"block.create.light_blue_nixie_tube": "Tubo Nixie azzurro",
"block.create.light_blue_sail": "Vela azzurra",
"block.create.light_blue_seat": "Sedile azzurro",
"block.create.light_blue_toolbox": "Cassetta degli attrezzi azzurra",
"block.create.light_blue_valve_handle": "Maniglia per valvola azzurra",
"block.create.light_gray_nixie_tube": "Tubo di Nixie grigio chiaro",
"block.create.light_gray_nixie_tube": "Tubo Nixie grigio chiaro",
"block.create.light_gray_sail": "Vela grigio chiaro",
"block.create.light_gray_seat": "Sedile grigio chiaro",
"block.create.light_gray_toolbox": "Cassetta degli attrezzi grigia chiaro",
"block.create.light_gray_valve_handle": "Maniglia per valvola grigio chiaro",
"block.create.lime_nixie_tube": "Tubo di Nixie lime",
"block.create.lime_nixie_tube": "Tubo Nixie lime",
"block.create.lime_sail": "Vela lime",
"block.create.lime_seat": "Sedile lime",
"block.create.lime_toolbox": "Cassetta degli attrezzi lime",
@ -284,7 +284,7 @@
"block.create.limestone_pillar": "Pilastro di calcare",
"block.create.linear_chassis": "Telaio lineare",
"block.create.lit_blaze_burner": "Inceneritore a blaze acceso",
"block.create.magenta_nixie_tube": "Tubo di Nixie magenta",
"block.create.magenta_nixie_tube": "Tubo Nixie magenta",
"block.create.magenta_sail": "Vela magenta",
"block.create.magenta_seat": "Sedile magenta",
"block.create.magenta_toolbox": "Cassetta degli attrezzi magenta",
@ -307,7 +307,7 @@
"block.create.millstone": "Macina",
"block.create.minecart_anchor": "Ancora per carrello da miniera",
"block.create.mysterious_cuckoo_clock": "Orologio a cucù misterioso",
"block.create.nixie_tube": "Tubo di Nixie",
"block.create.nixie_tube": "Tubo Nixie",
"block.create.nozzle": "Dispersore",
"block.create.oak_window": "Finestra di quercia",
"block.create.oak_window_pane": "Pannello di finestra di quercia",
@ -326,7 +326,7 @@
"block.create.oxidized_copper_tile_stairs": "Scalini di mattonelle di rame ossidato",
"block.create.oxidized_copper_tiles": "Mattonelle di rame ossidato",
"block.create.peculiar_bell": "Campana peculiare",
"block.create.pink_nixie_tube": "Tubo di Nixie rosa",
"block.create.pink_nixie_tube": "Tubo Nixie rosa",
"block.create.pink_sail": "Vela rosa",
"block.create.pink_seat": "Sedile rosa",
"block.create.pink_toolbox": "Cassetta degli attrezzi rosa",
@ -397,7 +397,7 @@
"block.create.pulley_magnet": "Magnete della carrucola",
"block.create.pulse_extender": "Estensore di impulsi",
"block.create.pulse_repeater": "Ripetitore di impulsi",
"block.create.purple_nixie_tube": "Tubo di Nixie viola",
"block.create.purple_nixie_tube": "Tubo Nixie viola",
"block.create.purple_sail": "Vela viola",
"block.create.purple_seat": "Sedile viola",
"block.create.purple_toolbox": "Cassetta degli attrezzi viola",
@ -405,7 +405,7 @@
"block.create.radial_chassis": "Telaio radiale",
"block.create.railway_casing": "Rivestimento di treno",
"block.create.raw_zinc_block": "Blocco di zinco grezzo",
"block.create.red_nixie_tube": "Tubo di Nixie rosso",
"block.create.red_nixie_tube": "Tubo Nixie rosso",
"block.create.red_sail": "Vela rossa",
"block.create.red_seat": "Sedile rosso",
"block.create.red_toolbox": "Cassetta degli attrezzi rossa",
@ -549,14 +549,14 @@
"block.create.weathered_copper_tile_stairs": "Scalini di mattonelle di rame corroso",
"block.create.weathered_copper_tiles": "Mattonelle di rame corroso",
"block.create.weighted_ejector": "Espulsore di pesi",
"block.create.white_nixie_tube": "Tubo di Nixie bianco",
"block.create.white_nixie_tube": "Tubo Nixie bianco",
"block.create.white_sail": "Vela bianca",
"block.create.white_seat": "Sedile bianco",
"block.create.white_toolbox": "Cassetta degli attrezzi bianca",
"block.create.white_valve_handle": "Maniglia per valvola bianca",
"block.create.windmill_bearing": "Supporto per mulino a vento",
"block.create.wooden_bracket": "Supporto di legno",
"block.create.yellow_nixie_tube": "Tubo di Nixie giallo",
"block.create.yellow_nixie_tube": "Tubo Nixie giallo",
"block.create.yellow_sail": "Vela gialla",
"block.create.yellow_seat": "Sedile giallo",
"block.create.yellow_toolbox": "Cassetta degli attrezzi gialla",
@ -1260,8 +1260,8 @@
"create.item_attributes.smokable.inverted": "non può essere affumicato",
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
"create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.compostable": "può essere gettato in una compstiera",
"create.item_attributes.compostable.inverted": "non può essere gettato in una compstiera",
"create.item_attributes.shulker_level": "è uno shulker %1$s",
"create.item_attributes.shulker_level.inverted": "non è uno shulker %1$s",
"create.item_attributes.shulker_level.full": "pieno",
@ -1368,10 +1368,10 @@
"create.tooltip.chute.fans_pull_up": "Il ventilatore tira da sopra",
"create.tooltip.chute.fans_pull_down": "Il ventilatore tira da sotto",
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
"create.tooltip.deployer.header": "UNLOCALIZED: Deployer Information",
"create.tooltip.deployer.using": "UNLOCALIZED: Mode: Use",
"create.tooltip.deployer.punching": "UNLOCALIZED: Mode: Attack",
"create.tooltip.deployer.contains": "UNLOCALIZED: Item: %1$s x%2$s",
"create.tooltip.deployer.header": "Informazioni sull'Installatore",
"create.tooltip.deployer.using": "Modalità: Utilizzo",
"create.tooltip.deployer.punching": "Modalità: Attacco",
"create.tooltip.deployer.contains": "Oggetto: %1$s x%2$s",
"create.tooltip.brass_tunnel.contains": "Sta distribuendo:",
"create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s",
"create.tooltip.brass_tunnel.retrieve": "Click destro per recuperare",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "esattamente",
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s di %3$s",
"create.schedule.condition.threshold.matching_content": "Contenuto corrispondente",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "Misura",
"create.schedule.condition.threshold.items": "Oggetti",
"create.schedule.condition.threshold.stacks": "Stack",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "Carico: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "Oggetto di riferimento",
"create.schedule.condition.threshold.place_item_2": "È permesso usare Filtri",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "Carico di fluidi",
"create.schedule.condition.item_threshold": "Carico di oggetti",
"create.schedule.condition.redstone_link": "Connessione redstone",
@ -1651,7 +1653,7 @@
"create.display_source.list_items": "Lista di oggetti filtrati",
"create.display_source.fluid_amount": "Quantità di fluidi filtrati",
"create.display_source.list_fluids": "Lista di fluidi filtrati",
"create.display_source.nixie_tube": "Copia Tubo di Nixie",
"create.display_source.nixie_tube": "Copia Tubo Nixie",
"create.display_source.fill_level": "Livello di riempimento",
"create.display_source.fill_level.display": "Formato di visualizzazione",
"create.display_source.fill_level.percent": "Percentuale",
@ -3022,7 +3024,7 @@
"create.ponder.windmill_source.text_7": "Fai click destro sul Supporto in qualsiasi momento per fermarlo e poter modificare di nuovo la struttura",
"create.ponder.windmill_structure.header": "Macchinari per Mulini a vento",
"create.ponder.windmill_structure.text_1": "Qualsiasi struttura può essere un Mulino a vento vaido, purché contenga almeno 8 blocchi che possano essere considerati vele.",
"create.ponder.windmill_structure.text_1": "Qualsiasi struttura può essere un Mulino a vento valido, purché contenga almeno 8 blocchi che possano essere considerati vele.",
"_": "Thank you for translating Create!"

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2",
"_": "Missing Localizations: 4",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "ぴったり",
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$sの%3$s",
"create.schedule.condition.threshold.matching_content": "一致する貨物",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "アイテム単位",
"create.schedule.condition.threshold.items": "個",
"create.schedule.condition.threshold.stacks": "スタック",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "貨物: %1$s/%2$s%3$s",
"create.schedule.condition.threshold.place_item": "参照アイテム",
"create.schedule.condition.threshold.place_item_2": "フィルターも使えます",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "液体貨物の状態",
"create.schedule.condition.item_threshold": "アイテム貨物の状態",
"create.schedule.condition.redstone_link": "レッドストーンリンク",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 6",
"_": "Missing Localizations: 8",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "다음과 동일하면",
"create.schedule.condition.threshold.x_units_of_item": "%3$s %1$s %2$s",
"create.schedule.condition.threshold.matching_content": "내용물 일치",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "아이템 단위",
"create.schedule.condition.threshold.items": "개",
"create.schedule.condition.threshold.stacks": "스택",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "저장소: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "기준 아이템",
"create.schedule.condition.threshold.place_item_2": "필터를 사용할 수 있음",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "액체 저장소 조건",
"create.schedule.condition.item_threshold": "아이템 저장소 조건",
"create.schedule.condition.redstone_link": "레드스톤 링크",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2485",
"_": "Missing Localizations: 2487",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 10",
"_": "Missing Localizations: 12",
"_": "->------------------------] Game Elements [------------------------<-",
@ -564,14 +564,14 @@
"block.create.zinc_block": "Blok cynku",
"block.create.zinc_ore": "Złoże cynku",
"enchantment.create.capacity": "Pojameność",
"enchantment.create.capacity": "Pojemność",
"enchantment.create.potato_recovery": "Odzyskiwanie",
"entity.create.carriage_contraption": "Maszyna wagonowa",
"entity.create.contraption": "Maszyna",
"entity.create.crafting_blueprint": "Szablon konstruowania",
"entity.create.gantry_contraption": "Maszyna suwnicowa",
"entity.create.potato_projectile": "Zimniaczany pocisk",
"entity.create.potato_projectile": "Ziemniaczany pocisk",
"entity.create.seat": "Siedzenie",
"entity.create.stationary_contraption": "Maszyna stacjonarna",
"entity.create.super_glue": "Super Glue",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "dokładnie",
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s: %3$s",
"create.schedule.condition.threshold.matching_content": "Pasująca zawartość",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "Jednostka przedmiotów",
"create.schedule.condition.threshold.items": "Przemioty",
"create.schedule.condition.threshold.stacks": "Stosy",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "Ładunek: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "Przedmiot odniesienia",
"create.schedule.condition.threshold.place_item_2": "Filtry mogą zostać użyte",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "Warunek ładunku płynów",
"create.schedule.condition.item_threshold": "Warunek ładunku przedmiotów",
"create.schedule.condition.redstone_link": "Emiter sygnału",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1329",
"_": "Missing Localizations: 1331",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2194",
"_": "Missing Localizations: 2196",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 653",
"_": "Missing Localizations: 655",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 984",
"_": "Missing Localizations: 986",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
"create.schedule.condition.threshold.x_units_of_item": "UNLOCALIZED: %1$s %2$s of %3$s",
"create.schedule.condition.threshold.matching_content": "UNLOCALIZED: Matching Content",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "UNLOCALIZED: Item Measure",
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
"create.schedule.condition.threshold.place_item_2": "UNLOCALIZED: Filters can be used",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2",
"_": "Missing Localizations: 0",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,8 +1260,8 @@
"create.item_attributes.smokable.inverted": "不可被烟熏",
"create.item_attributes.blastable": "可被高炉冶炼",
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.compostable": "可被堆肥",
"create.item_attributes.compostable.inverted": "不可被堆肥",
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
"create.item_attributes.shulker_level.full": "满",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "恰好",
"create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s%3$s",
"create.schedule.condition.threshold.matching_content": "匹配内容",
"create.schedule.condition.threshold.anything": "任意物品",
"create.schedule.condition.threshold.item_measure": "物品度量",
"create.schedule.condition.threshold.items": "个",
"create.schedule.condition.threshold.stacks": "组",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "货物:%1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "参考物品",
"create.schedule.condition.threshold.place_item_2": "可以使用过滤器",
"create.schedule.condition.threshold.place_item_3": "留空以匹配任意物品",
"create.schedule.condition.fluid_threshold": "流体货物条件",
"create.schedule.condition.item_threshold": "物品货物条件",
"create.schedule.condition.redstone_link": "无线红石",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 6",
"_": "Missing Localizations: 8",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1485,6 +1485,7 @@
"create.schedule.condition.threshold.equal": "剛好",
"create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s %3$s",
"create.schedule.condition.threshold.matching_content": "比對內容",
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
"create.schedule.condition.threshold.item_measure": "物品單位",
"create.schedule.condition.threshold.items": "個",
"create.schedule.condition.threshold.stacks": "組",
@ -1492,6 +1493,7 @@
"create.schedule.condition.threshold.status": "貨物:%1$s/%2$s %3$s",
"create.schedule.condition.threshold.place_item": "參考物品",
"create.schedule.condition.threshold.place_item_2": "可以使用過濾器",
"create.schedule.condition.threshold.place_item_3": "UNLOCALIZED: Leave empty to match any",
"create.schedule.condition.fluid_threshold": "流體貨物條件",
"create.schedule.condition.item_threshold": "物品貨物條件",
"create.schedule.condition.redstone_link": "無線紅石連接",

View file

@ -0,0 +1,10 @@
{
"replace": false,
"values": [
"minecraft:bee_nest",
"minecraft:vine",
"minecraft:moss_carpet",
"minecraft:shroomlight",
"minecraft:cocoa"
]
}

View file

@ -124,6 +124,7 @@ public class AllTags {
WINDMILL_SAILS,
WINDOWABLE,
WRENCH_PICKUP,
TREE_ATTACHMENTS,
RELOCATION_NOT_SUPPORTED(FORGE),
WG_STONE(FORGE),
@ -414,6 +415,9 @@ public class AllTags {
Blocks.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON,
Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET, Blocks.HOPPER);
AllBlockTags.TREE_ATTACHMENTS.add(Blocks.BEE_NEST, Blocks.VINE, Blocks.MOSS_CARPET, Blocks.SHROOMLIGHT,
Blocks.COCOA);
AllBlockTags.ORE_OVERRIDE_STONE.includeAll(BlockTags.STONE_ORE_REPLACEABLES);
registerCompat();

View file

@ -66,7 +66,7 @@ public class Create {
public static final String ID = "create";
public static final String NAME = "Create";
public static final String VERSION = "0.5d";
public static final String VERSION = "0.5e";
public static final Logger LOGGER = LogManager.getLogger();

View file

@ -186,6 +186,7 @@ public class CreateJEI implements IModPlugin {
.build("automatic_shapeless", MixingCategory::autoShapeless),
brewing = builder(BasinRecipe.class)
.enableWhen(c -> c.allowBrewingInMixer)
.addRecipes(() -> PotionMixingRecipes.ALL)
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
.catalyst(AllBlocks.BASIN::get)

View file

@ -3,23 +3,19 @@ package com.simibubi.create.content.contraptions.components.actors;
import java.util.concurrent.atomic.AtomicInteger;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.block.AirBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.Vec3;
public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
@ -40,7 +36,7 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
if (destroyProgress == -1)
destroyNextTick();
}
@Override
public void lazyTick() {
super.lazyTick();
@ -93,9 +89,9 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
return;
if (getSpeed() == 0)
return;
breakingPos = getBreakingPos();
if (ticksUntilNextProgress < 0)
return;
if (ticksUntilNextProgress-- > 0)
@ -114,7 +110,8 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
float breakSpeed = getBreakSpeed();
destroyProgress += Mth.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress);
level.playSound(null, worldPosition, stateToBreak.getSoundType().getHitSound(), SoundSource.NEUTRAL, .25f, 1);
level.playSound(null, worldPosition, stateToBreak.getSoundType()
.getHitSound(), SoundSource.NEUTRAL, .25f, 1);
if (destroyProgress >= 10) {
onBlockBroken(stateToBreak);
@ -133,28 +130,26 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
}
public static boolean isBreakable(BlockState stateToBreak, float blockHardness) {
return !(stateToBreak.getMaterial().isLiquid() || stateToBreak.getBlock() instanceof AirBlock
|| blockHardness == -1);
return !(stateToBreak.getMaterial()
.isLiquid() || stateToBreak.getBlock() instanceof AirBlock || blockHardness == -1);
}
public void onBlockBroken(BlockState stateToBreak) {
FluidState FluidState = level.getFluidState(breakingPos);
level.levelEvent(2001, breakingPos, Block.getId(stateToBreak));
BlockEntity tileentity = stateToBreak.hasBlockEntity() ? level.getBlockEntity(breakingPos) : null;
Vec3 vec = VecHelper.offsetRandomly(VecHelper.getCenterOf(breakingPos), level.random, .125f);
Block.getDrops(stateToBreak, (ServerLevel) level, breakingPos, tileentity).forEach((stack) -> {
if (!stack.isEmpty() && level.getGameRules().getBoolean(GameRules.RULE_DOBLOCKDROPS)
&& !level.restoringBlockSnapshots) {
ItemEntity itementity = new ItemEntity(level, vec.x, vec.y, vec.z, stack);
itementity.setDefaultPickUpDelay();
itementity.setDeltaMovement(Vec3.ZERO);
level.addFreshEntity(itementity);
}
BlockHelper.destroyBlock(level, breakingPos, 1f, (stack) -> {
if (stack.isEmpty())
return;
if (!level.getGameRules()
.getBoolean(GameRules.RULE_DOBLOCKDROPS))
return;
if (level.restoringBlockSnapshots)
return;
ItemEntity itementity = new ItemEntity(level, vec.x, vec.y, vec.z, stack);
itementity.setDefaultPickUpDelay();
itementity.setDeltaMovement(Vec3.ZERO);
level.addFreshEntity(itementity);
});
if (level instanceof ServerLevel)
stateToBreak.spawnAfterBreak((ServerLevel) level, breakingPos, ItemStack.EMPTY);
level.setBlock(breakingPos, FluidState.createLegacyBlock(), 3);
}
protected float getBreakSpeed() {

View file

@ -58,6 +58,8 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
continue;
if (entity instanceof AbstractContraptionEntity)
continue;
if (entity.isPassengerOfSameVehicle(context.contraption.entity))
continue;
if (entity instanceof AbstractMinecart)
for (Entity passenger : entity.getIndirectPassengers())
if (passenger instanceof AbstractContraptionEntity

View file

@ -104,7 +104,8 @@ public class HarvesterMovementBehaviour implements MovementBehaviour {
dropItem(context, stack);
});
world.setBlockAndUpdate(pos, cutCrop(world, pos, stateVisited));
BlockState cutCrop = cutCrop(world, pos, stateVisited);
world.setBlockAndUpdate(pos, cutCrop.canSurvive(world, pos) ? cutCrop : Blocks.AIR.defaultBlockState());
}
public boolean isValidCrop(Level world, BlockPos pos, BlockState state) {

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.actors;
import com.simibubi.create.content.contraptions.components.actors.PloughBlock.PloughFakePlayer;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.logistics.trains.ITrackBlock;
import com.simibubi.create.content.logistics.trains.track.FakeTrackBlock;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.utility.VecHelper;
@ -105,6 +106,8 @@ public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour {
return false;
if (state.getBlock() instanceof NetherPortalBlock)
return false;
if (state.getBlock() instanceof ITrackBlock)
return true;
if (state.getBlock() instanceof FakeTrackBlock)
return false;
return state.getCollisionShape(world, breakingPos)

View file

@ -100,7 +100,8 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
if (crafter != null) {
if (crafter.covered)
Block.popResource(worldIn, pos, AllItems.CRAFTER_SLOT_COVER.asStack());
crafter.ejectWholeGrid();
if (!isMoving)
crafter.ejectWholeGrid();
}
for (Direction direction : Iterate.directions) {

View file

@ -7,6 +7,7 @@ import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.utility.Couple;
@ -19,11 +20,14 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
@ -31,10 +35,12 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandCrankTileEntity> {
public class HandCrankBlock extends DirectionalKineticBlock
implements ITE<HandCrankTileEntity>, ProperWaterloggedBlock {
public HandCrankBlock(Properties properties) {
super(properties);
registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false));
}
@Override
@ -42,6 +48,11 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
return AllShapes.CRANK.get(state.getValue(FACING));
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder.add(WATERLOGGED));
}
@OnlyIn(Dist.CLIENT)
public PartialModel getRenderedHandle() {
return AllBlockPartials.HAND_CRANK_HANDLE;
@ -61,21 +72,22 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
BlockHitResult hit) {
withTileEntityDo(worldIn, pos, te -> te.turn(player.isShiftKeyDown()));
player.causeFoodExhaustion(getRotationSpeed() * AllConfigs.SERVER.kinetics.crankHungerMultiplier.getF());
if (player.getFoodData()
.getFoodLevel() == 0)
AllAdvancements.HAND_CRANK.awardTo(player);
return InteractionResult.SUCCESS;
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
Direction preferred = getPreferredFacing(context);
BlockState defaultBlockState = withWater(defaultBlockState(), context);
if (preferred == null || (context.getPlayer() != null && context.getPlayer()
.isShiftKeyDown()))
return defaultBlockState().setValue(FACING, context.getClickedFace());
return defaultBlockState().setValue(FACING, preferred.getOpposite());
return defaultBlockState.setValue(FACING, context.getClickedFace());
return defaultBlockState.setValue(FACING, preferred.getOpposite());
}
@Override
@ -102,6 +114,18 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
}
}
}
@Override
public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState,
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
updateWater(pLevel, pState, pCurrentPos);
return pState;
}
@Override
public FluidState getFluidState(BlockState pState) {
return fluidState(pState);
}
@Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
@ -129,7 +153,7 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
return false;
}
public static Couple<Integer> getSpeedRange() {
return Couple.create(32, 32);
}

View file

@ -124,8 +124,8 @@ public class DeployerTileEntity extends KineticTileEntity {
private void initHandler() {
if (invHandler != null)
return;
if (!level.isClientSide) {
player = new DeployerFakePlayer((ServerLevel) level);
if (level instanceof ServerLevel sLevel) {
player = new DeployerFakePlayer(sLevel);
if (deferredInventoryList != null) {
player.getInventory()
.load(deferredInventoryList);

View file

@ -218,10 +218,18 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
protected List<Recipe<?>> getMatchingRecipes() {
List<Recipe<?>> matchingRecipes = super.getMatchingRecipes();
if (!AllConfigs.SERVER.recipes.allowBrewingInMixer.get())
return matchingRecipes;
Optional<BasinTileEntity> basin = getBasin();
if (!basin.isPresent())
return matchingRecipes;
IItemHandler availableItems = basin.get()
BasinTileEntity basinTileEntity = basin.get();
if (basin.isEmpty())
return matchingRecipes;
IItemHandler availableItems = basinTileEntity
.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
.orElse(null);
if (availableItems == null)

View file

@ -478,8 +478,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
public static boolean isSawable(BlockState stateToBreak) {
if (stateToBreak.is(BlockTags.SAPLINGS))
return false;
if (stateToBreak.is(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(stateToBreak)
|| (stateToBreak.is(BlockTags.LEAVES)))
if (TreeCutter.isLog(stateToBreak) || (stateToBreak.is(BlockTags.LEAVES)))
return true;
Block block = stateToBreak.getBlock();
if (block instanceof BambooBlock)

View file

@ -33,6 +33,7 @@ import com.simibubi.create.content.curiosities.deco.SlidingDoorBlock;
import com.simibubi.create.content.logistics.trains.entity.CarriageContraption;
import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity;
import com.simibubi.create.content.logistics.trains.entity.Train;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.collision.Matrix3d;
import com.simibubi.create.foundation.mixin.accessor.ServerLevelAccessor;
import com.simibubi.create.foundation.networking.AllPackets;
@ -139,6 +140,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
public boolean collisionEnabled() {
return true;
}
public void registerColliding(Entity collidingEntity) {
collidingEntities.put(collidingEntity, new MutableInt());
}
public void addSittingPassenger(Entity passenger, int seatIndex) {
for (Entity entity : getPassengers()) {
@ -177,16 +182,28 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
contraption.getSeatMapping()
.remove(passenger.getUUID());
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this),
new ContraptionSeatMappingPacket(getId(), contraption.getSeatMapping()));
new ContraptionSeatMappingPacket(getId(), contraption.getSeatMapping(), passenger.getId()));
}
@Override
public Vec3 getDismountLocationForPassenger(LivingEntity pLivingEntity) {
Vec3 loc = super.getDismountLocationForPassenger(pLivingEntity);
CompoundTag data = pLivingEntity.getPersistentData();
public Vec3 getDismountLocationForPassenger(LivingEntity entityLiving) {
Vec3 position = super.getDismountLocationForPassenger(entityLiving);
CompoundTag data = entityLiving.getPersistentData();
if (!data.contains("ContraptionDismountLocation"))
return loc;
return VecHelper.readNBT(data.getList("ContraptionDismountLocation", Tag.TAG_DOUBLE));
return position;
position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", Tag.TAG_DOUBLE));
data.remove("ContraptionDismountLocation");
entityLiving.setOnGround(false);
if (!data.contains("ContraptionMountLocation"))
return position;
Vec3 prevPosition = VecHelper.readNBT(data.getList("ContraptionMountLocation", Tag.TAG_DOUBLE));
data.remove("ContraptionMountLocation");
if (entityLiving instanceof Player player && !prevPosition.closerThan(position, 5000))
AllAdvancements.LONG_TRAVEL.awardTo(player);
return position;
}
@Override
@ -200,7 +217,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
transformedVector.y + SeatEntity.getCustomEntitySeatOffset(passenger) - 1 / 8f, transformedVector.z);
}
protected Vec3 getPassengerPosition(Entity passenger, float partialTicks) {
public Vec3 getPassengerPosition(Entity passenger, float partialTicks) {
UUID id = passenger.getUUID();
if (passenger instanceof OrientedContraptionEntity) {
BlockPos localPos = contraption.getBearingPosOf(id);
@ -300,17 +317,27 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
}
public Vec3 toGlobalVector(Vec3 localVec, float partialTicks) {
return toGlobalVector(localVec, partialTicks, false);
}
public Vec3 toGlobalVector(Vec3 localVec, float partialTicks, boolean prevAnchor) {
Vec3 anchor = prevAnchor ? getPrevAnchorVec() : getAnchorVec();
Vec3 rotationOffset = VecHelper.getCenterOf(BlockPos.ZERO);
localVec = localVec.subtract(rotationOffset);
localVec = applyRotation(localVec, partialTicks);
localVec = localVec.add(rotationOffset)
.add(getAnchorVec());
.add(anchor);
return localVec;
}
public Vec3 toLocalVector(Vec3 localVec, float partialTicks) {
return toLocalVector(localVec, partialTicks, false);
}
public Vec3 toLocalVector(Vec3 globalVec, float partialTicks) {
public Vec3 toLocalVector(Vec3 globalVec, float partialTicks, boolean prevAnchor) {
Vec3 anchor = prevAnchor ? getPrevAnchorVec() : getAnchorVec();
Vec3 rotationOffset = VecHelper.getCenterOf(BlockPos.ZERO);
globalVec = globalVec.subtract(getAnchorVec())
globalVec = globalVec.subtract(anchor)
.subtract(rotationOffset);
globalVec = reverseRotation(globalVec, partialTicks);
globalVec = globalVec.add(rotationOffset);
@ -519,6 +546,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
public Vec3 getAnchorVec() {
return position();
}
public Vec3 getPrevAnchorVec() {
return getPrevPositionVec();
}
public float getYawOffset() {
return 0;
@ -792,9 +823,11 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
public Vec3 getContactPointMotion(Vec3 globalContactPoint) {
if (prevPosInvalid)
return Vec3.ZERO;
Vec3 contactPoint = toGlobalVector(toLocalVector(globalContactPoint, 0), 1);
return contactPoint.subtract(globalContactPoint)
.add(position().subtract(getPrevPositionVec()));
Vec3 contactPoint = toGlobalVector(toLocalVector(globalContactPoint, 0, true), 1, true);
Vec3 contraptionLocalMovement = contactPoint.subtract(globalContactPoint);
Vec3 contraptionAnchorMovement = position().subtract(getPrevPositionVec());
return contraptionLocalMovement.add(contraptionAnchorMovement);
}
public boolean canCollideWith(Entity e) {

View file

@ -133,6 +133,7 @@ public abstract class Contraption {
public BlockPos anchor;
public boolean stalled;
public boolean hasUniversalCreativeCrate;
public boolean disassembled;
protected Map<BlockPos, StructureBlockInfo> blocks;
protected List<MutablePair<StructureBlockInfo, MovementContext>> actors;
@ -1001,6 +1002,10 @@ public abstract class Contraption {
}
public void addBlocksToWorld(Level world, StructureTransform transform) {
if (disassembled)
return;
disassembled = true;
for (boolean nonBrittles : Iterate.trueAndFalse) {
for (StructureBlockInfo block : blocks.values()) {
if (nonBrittles == BlockMovementChecks.isBrittle(block.state))

View file

@ -7,7 +7,6 @@ import java.util.List;
import org.apache.commons.lang3.mutable.MutableBoolean;
import org.apache.commons.lang3.mutable.MutableFloat;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.commons.lang3.mutable.MutableObject;
import com.google.common.base.Predicates;
@ -33,6 +32,7 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
@ -88,11 +88,12 @@ public class ContraptionCollider {
if (playerType == PlayerType.REMOTE)
continue;
entity.getSelfAndPassengers().forEach(e -> {
if (e instanceof ServerPlayer)
((ServerPlayer) e).connection.aboveGroundTickCount = 0;
});
entity.getSelfAndPassengers()
.forEach(e -> {
if (e instanceof ServerPlayer)
((ServerPlayer) e).connection.aboveGroundTickCount = 0;
});
if (playerType == PlayerType.SERVER)
continue;
@ -329,50 +330,15 @@ public class ContraptionCollider {
entityPosition.z + allowedMovement.z);
entityPosition = entity.position();
if (contraptionEntity instanceof CarriageContraptionEntity cce && entity.isOnGround()
&& !(entity instanceof ItemEntity) && cce.nonDamageTicks == 0
&& AllConfigs.SERVER.trains.trainsCauseDamage.get()) {
Vec3 diffMotion = contraptionMotion.subtract(entity.getDeltaMovement());
if (diffMotion.length() > 0.35f && contraptionMotion.length() > 0.35f) {
EntityDamageSource pSource = new EntityDamageSource("create.run_over", contraptionEntity);
double damage = diffMotion.length();
if (entity.getClassification(false) == MobCategory.MONSTER)
damage *= 2;
if (!(entity instanceof Player p) || !p.isCreative() && !p.isSpectator()) {
if (playerType == PlayerType.CLIENT) {
AllPackets.channel
.sendToServer(new TrainCollisionPacket((int) (damage * 16), contraptionEntity.getId()));
world.playSound((Player) entity, entity.blockPosition(), SoundEvents.PLAYER_ATTACK_CRIT,
SoundSource.NEUTRAL, 1, .75f);
} else {
entity.hurt(pSource, (int) (damage * 16));
world.playSound(null, entity.blockPosition(), SoundEvents.PLAYER_ATTACK_CRIT,
SoundSource.NEUTRAL, 1, .75f);
if (!entity.isAlive())
contraptionEntity.getControllingPlayer()
.map(world::getPlayerByUUID)
.ifPresent(AllAdvancements.TRAIN_ROADKILL::awardTo);
}
Vec3 added = entityMotion.add(contraptionMotion.multiply(1, 0, 1)
.normalize()
.add(0, .25, 0)
.scale(damage * 4))
.add(diffMotion);
entityMotion = VecHelper.clamp(added, 3);
}
}
}
entityMotion =
handleDamageFromTrain(world, contraptionEntity, contraptionMotion, entity, entityMotion, playerType);
entity.hurtMarked = true;
Vec3 contactPointMotion = Vec3.ZERO;
if (surfaceCollision.isTrue()) {
contraptionEntity.registerColliding(entity);
entity.fallDistance = 0;
contraptionEntity.collidingEntities.put(entity, new MutableInt(0));
boolean canWalk = bounce != 0 || slide == 0;
if (canWalk || !rotation.hasVerticalRotation()) {
if (canWalk)
@ -401,6 +367,64 @@ public class ContraptionCollider {
}
private static Vec3 handleDamageFromTrain(Level world, AbstractContraptionEntity contraptionEntity,
Vec3 contraptionMotion, Entity entity, Vec3 entityMotion, PlayerType playerType) {
if (!(contraptionEntity instanceof CarriageContraptionEntity cce))
return entityMotion;
if (!entity.isOnGround())
return entityMotion;
CompoundTag persistentData = entity.getPersistentData();
if (persistentData.contains("ContraptionGrounded")) {
persistentData.remove("ContraptionGrounded");
return entityMotion;
}
if (cce.collidingEntities.containsKey(entity))
return entityMotion;
if (entity instanceof ItemEntity)
return entityMotion;
if (cce.nonDamageTicks != 0)
return entityMotion;
if (!AllConfigs.SERVER.trains.trainsCauseDamage.get())
return entityMotion;
Vec3 diffMotion = contraptionMotion.subtract(entity.getDeltaMovement());
if (diffMotion.length() <= 0.35f || contraptionMotion.length() <= 0.35f)
return entityMotion;
EntityDamageSource pSource = new EntityDamageSource("create.run_over", contraptionEntity);
double damage = diffMotion.length();
if (entity.getClassification(false) == MobCategory.MONSTER)
damage *= 2;
if (entity instanceof Player p && (p.isCreative() || p.isSpectator()))
return entityMotion;
if (playerType == PlayerType.CLIENT) {
AllPackets.channel.sendToServer(new TrainCollisionPacket((int) (damage * 16), contraptionEntity.getId()));
world.playSound((Player) entity, entity.blockPosition(), SoundEvents.PLAYER_ATTACK_CRIT,
SoundSource.NEUTRAL, 1, .75f);
} else {
entity.hurt(pSource, (int) (damage * 16));
world.playSound(null, entity.blockPosition(), SoundEvents.PLAYER_ATTACK_CRIT, SoundSource.NEUTRAL, 1, .75f);
if (!entity.isAlive())
contraptionEntity.getControllingPlayer()
.map(world::getPlayerByUUID)
.ifPresent(AllAdvancements.TRAIN_ROADKILL::awardTo);
}
Vec3 added = entityMotion.add(contraptionMotion.multiply(1, 0, 1)
.normalize()
.add(0, .25, 0)
.scale(damage * 4))
.add(diffMotion);
return VecHelper.clamp(added, 3);
}
static boolean bounceEntity(Entity entity, Vec3 normal, AbstractContraptionEntity contraption, double factor) {
if (factor == 0)
return false;
@ -473,10 +497,10 @@ public class ContraptionCollider {
boolean flag = p_20273_.x != vec3.x;
boolean flag1 = p_20273_.y != vec3.y;
boolean flag2 = p_20273_.z != vec3.z;
boolean flag3 = e.isOnGround() || flag1 && p_20273_.y < 0.0D;
boolean flag3 = flag1 && p_20273_.y < 0.0D;
if (e.getStepHeight() > 0.0F && flag3 && (flag || flag2)) {
Vec3 vec31 =
collideBoundingBox(e, new Vec3(p_20273_.x, (double) e.getStepHeight(), p_20273_.z), aabb, e.level, list);
Vec3 vec31 = collideBoundingBox(e, new Vec3(p_20273_.x, (double) e.getStepHeight(), p_20273_.z), aabb,
e.level, list);
Vec3 vec32 = collideBoundingBox(e, new Vec3(0.0D, (double) e.getStepHeight(), 0.0D),
aabb.expandTowards(p_20273_.x, 0.0D, p_20273_.z), e.level, list);
if (vec32.y < (double) e.getStepHeight()) {

View file

@ -7,7 +7,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.foundation.utility.WorldAttached;
@ -17,7 +16,6 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
@ -65,24 +63,18 @@ public class ContraptionHandler {
}
public static void entitiesWhoJustDismountedGetSentToTheRightLocation(LivingEntity entityLiving, Level world) {
if (world.isClientSide)
if (!world.isClientSide)
return;
CompoundTag data = entityLiving.getPersistentData();
if (!data.contains("ContraptionDismountLocation"))
return;
Vec3 position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", Tag.TAG_DOUBLE));
if (entityLiving.getVehicle() == null)
entityLiving.teleportTo(position.x, position.y, position.z);
entityLiving.absMoveTo(position.x, position.y, position.z, entityLiving.getYRot(), entityLiving.getXRot());
data.remove("ContraptionDismountLocation");
entityLiving.setOnGround(false);
if (!data.contains("ContraptionMountLocation"))
return;
Vec3 prevPosition = VecHelper.readNBT(data.getList("ContraptionMountLocation", Tag.TAG_DOUBLE));
data.remove("ContraptionMountLocation");
if (entityLiving instanceof Player player && !prevPosition.closerThan(position, 5000))
AllAdvancements.LONG_TRAVEL.awardTo(player);
}
}

View file

@ -1,6 +1,7 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
import java.util.List;
import java.lang.ref.WeakReference;
import java.util.Collection;
import javax.annotation.Nullable;
@ -86,10 +87,19 @@ public class ContraptionHandlerClient {
Vec3 origin = rayInputs.getFirst();
Vec3 target = rayInputs.getSecond();
AABB aabb = new AABB(origin, target).inflate(16);
List<AbstractContraptionEntity> intersectingContraptions =
mc.level.getEntitiesOfClass(AbstractContraptionEntity.class, aabb);
for (AbstractContraptionEntity contraptionEntity : intersectingContraptions) {
Collection<WeakReference<AbstractContraptionEntity>> contraptions =
ContraptionHandler.loadedContraptions.get(mc.level)
.values();
for (WeakReference<AbstractContraptionEntity> ref : contraptions) {
AbstractContraptionEntity contraptionEntity = ref.get();
if (contraptionEntity == null)
continue;
if (!contraptionEntity.getBoundingBox()
.intersects(aabb))
continue;
BlockHitResult rayTraceResult = rayTraceContraption(origin, target, contraptionEntity);
if (rayTraceResult == null)
continue;

View file

@ -493,7 +493,14 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity {
@Override
public Vec3 getAnchorVec() {
return new Vec3(getX() - .5, getY(), getZ() - .5);
Vec3 anchorVec = super.getAnchorVec();
return anchorVec.subtract(.5, 0, .5);
}
@Override
public Vec3 getPrevAnchorVec() {
Vec3 prevAnchorVec = super.getPrevAnchorVec();
return prevAnchorVec.subtract(.5, 0, .5);
}
@Override

View file

@ -5,12 +5,17 @@ import java.util.List;
import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.MutablePair;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.simibubi.create.AllItems;
import com.simibubi.create.AllMovementBehaviours;
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceMovement;
import com.simibubi.create.content.contraptions.components.deployer.DeployerFakePlayer;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
@ -41,6 +46,7 @@ import net.minecraft.world.level.block.BaseRailBlock;
import net.minecraft.world.level.block.DispenserBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.RailShape;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo;
import net.minecraft.world.level.material.Material;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -218,11 +224,13 @@ public class MinecartContraptionItem extends Item {
List<Entity> passengers = cart.getPassengers();
if (passengers.isEmpty() || !(passengers.get(0) instanceof OrientedContraptionEntity))
return;
OrientedContraptionEntity contraption = (OrientedContraptionEntity) passengers.get(0);
OrientedContraptionEntity oce = (OrientedContraptionEntity) passengers.get(0);
Contraption contraption = oce.getContraption();
if(ContraptionMovementSetting.isNoPickup(contraption.getContraption().getBlocks().values())) {
if (ContraptionMovementSetting.isNoPickup(contraption.getBlocks()
.values())) {
player.displayClientMessage(Lang.translateDirect("contraption.minecart_contraption_illegal_pickup")
.withStyle(ChatFormatting.RED), true);
.withStyle(ChatFormatting.RED), true);
return;
}
@ -232,7 +240,13 @@ public class MinecartContraptionItem extends Item {
return;
}
ItemStack generatedStack = create(type, contraption).setHoverName(entity.getCustomName());
contraption.stop(event.getWorld());
for (MutablePair<StructureBlockInfo, MovementContext> pair : contraption.getActors())
if (AllMovementBehaviours.getBehaviour(pair.left.state)instanceof PortableStorageInterfaceMovement psim)
psim.reset(pair.right);
ItemStack generatedStack = create(type, oce).setHoverName(entity.getCustomName());
try {
ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput();
@ -249,13 +263,13 @@ public class MinecartContraptionItem extends Item {
return;
}
if (contraption.getContraption()
.getBlocks()
if (contraption.getBlocks()
.size() > 200)
AllAdvancements.CART_PICKUP.awardTo(player);
player.getInventory().placeItemBackInInventory(generatedStack);
contraption.discard();
player.getInventory()
.placeItemBackInInventory(generatedStack);
oce.discard();
entity.discard();
event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true);

View file

@ -11,6 +11,7 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.network.NetworkEvent.Context;
@ -54,7 +55,9 @@ public class ContraptionInteractionPacket extends SimplePacketBase {
if (!(entityByID instanceof AbstractContraptionEntity))
return;
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
double d = sender.getAttribute(ForgeMod.REACH_DISTANCE.get()).getValue() + 10;
AABB bb = contraptionEntity.getBoundingBox();
double boundsExtra = Math.max(bb.getXsize(), bb.getYsize());
double d = sender.getAttribute(ForgeMod.REACH_DISTANCE.get()).getValue() + 10 + boundsExtra;
if (!sender.hasLineOfSight(entityByID))
d -= 3;
d *= d;

View file

@ -7,24 +7,33 @@ import java.util.function.Supplier;
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
import com.simibubi.create.foundation.networking.SimplePacketBase;
import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent.Context;
public class ContraptionSeatMappingPacket extends SimplePacketBase {
private Map<UUID, Integer> mapping;
private int entityID;
private int dismountedID;
public ContraptionSeatMappingPacket(int entityID, Map<UUID, Integer> mapping) {
this(entityID, mapping, -1);
}
public ContraptionSeatMappingPacket(int entityID, Map<UUID, Integer> mapping, int dismountedID) {
this.entityID = entityID;
this.mapping = mapping;
this.dismountedID = dismountedID;
}
public ContraptionSeatMappingPacket(FriendlyByteBuf buffer) {
entityID = buffer.readInt();
dismountedID = buffer.readInt();
mapping = new HashMap<>();
short size = buffer.readShort();
for (int i = 0; i < size; i++)
@ -34,6 +43,7 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase {
@Override
public void write(FriendlyByteBuf buffer) {
buffer.writeInt(entityID);
buffer.writeInt(dismountedID);
buffer.writeShort(mapping.size());
mapping.forEach((k, v) -> {
buffer.writeUUID(k);
@ -49,6 +59,17 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase {
if (!(entityByID instanceof AbstractContraptionEntity))
return;
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
if (dismountedID != -1) {
Entity dismountedByID = Minecraft.getInstance().level.getEntity(dismountedID);
if (Minecraft.getInstance().player != dismountedByID)
return;
Vec3 transformedVector = contraptionEntity.getPassengerPosition(dismountedByID, 1);
if (transformedVector != null)
dismountedByID.getPersistentData()
.put("ContraptionDismountLocation", VecHelper.writeNBT(transformedVector));
}
contraptionEntity.getContraption()
.setSeatMapping(mapping);
});

View file

@ -8,6 +8,7 @@ import java.util.Set;
import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.content.contraptions.fluids.PipeConnection.Flow;
import com.simibubi.create.content.contraptions.fluids.pipes.AxisPipeBlock;
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
@ -173,7 +174,8 @@ public class FluidPropagator {
return false;
if (VanillaFluidTargets.shouldPipesConnectTo(connectedState))
return true;
if (BlockHelper.hasBlockSolidSide(connectedState, reader, connectedPos, side.getOpposite()))
if (BlockHelper.hasBlockSolidSide(connectedState, reader, connectedPos, side.getOpposite())
&& !AllBlockTags.FAN_TRANSPARENT.matches(connectedState))
return false;
if (hasFluidCapability(reader, connectedPos, side.getOpposite()))
return false;

View file

@ -9,6 +9,7 @@ import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
import com.simibubi.create.content.contraptions.fluids.FluidPropagator;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.core.BlockPos;
@ -16,26 +17,31 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.network.protocol.game.DebugPackets;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.ticks.TickPriority;
public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxisPipe, ITE<FluidValveTileEntity> {
public class FluidValveBlock extends DirectionalAxisKineticBlock
implements IAxisPipe, ITE<FluidValveTileEntity>, ProperWaterloggedBlock {
public static final BooleanProperty ENABLED = BooleanProperty.create("enabled");
public FluidValveBlock(Properties properties) {
super(properties);
registerDefaultState(defaultBlockState().setValue(ENABLED, false));
registerDefaultState(defaultBlockState().setValue(ENABLED, false)
.setValue(WATERLOGGED, false));
}
@Override
@ -46,7 +52,7 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder.add(ENABLED));
super.createBlockStateDefinition(builder.add(ENABLED, WATERLOGGED));
}
@Override
@ -125,7 +131,7 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
public void tick(BlockState state, ServerLevel world, BlockPos pos, Random r) {
FluidPropagator.propagateChangedPipe(world, pos, state);
}
@Override
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
return false;
@ -141,4 +147,21 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
return AllTileEntities.FLUID_VALVE.get();
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
return withWater(super.getStateForPlacement(context), context);
}
@Override
public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, LevelAccessor world,
BlockPos pos, BlockPos neighbourPos) {
updateWater(world, state, pos);
return state;
}
@Override
public FluidState getFluidState(BlockState state) {
return fluidState(state);
}
}

View file

@ -8,6 +8,7 @@ import com.simibubi.create.content.contraptions.fluids.FluidPropagator;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.VoxelShaper;
@ -21,6 +22,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FaceAttachedHorizontalDirectionalBlock;
@ -28,22 +30,23 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.AttachFace;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.ticks.TickPriority;
public class SmartFluidPipeBlock extends FaceAttachedHorizontalDirectionalBlock
implements ITE<SmartFluidPipeTileEntity>, IAxisPipe, IWrenchable {
implements ITE<SmartFluidPipeTileEntity>, IAxisPipe, IWrenchable, ProperWaterloggedBlock {
public SmartFluidPipeBlock(Properties p_i48339_1_) {
super(p_i48339_1_);
registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false));
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
builder.add(FACE)
.add(FACING);
builder.add(FACE, FACING, WATERLOGGED);
}
@Override
@ -76,7 +79,7 @@ public class SmartFluidPipeBlock extends FaceAttachedHorizontalDirectionalBlock
}
}
return stateForPlacement;
return withWater(stateForPlacement, ctx);
}
protected boolean prefersConnectionTo(LevelReader reader, BlockPos pos, Direction facing) {
@ -158,6 +161,18 @@ public class SmartFluidPipeBlock extends FaceAttachedHorizontalDirectionalBlock
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
return false;
}
@Override
public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel,
BlockPos pCurrentPos, BlockPos pFacingPos) {
updateWater(pLevel, pState, pCurrentPos);
return pState;
}
@Override
public FluidState getFluidState(BlockState pState) {
return fluidState(pState);
}
@Override
public Class<SmartFluidPipeTileEntity> getTileEntityClass() {

View file

@ -1,5 +1,6 @@
package com.simibubi.create.content.contraptions.processing;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@ -64,7 +65,8 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
return true;
if (level == null || level.isClientSide)
return true;
if (!getBasin().filter(BasinTileEntity::canContinueProcessing)
Optional<BasinTileEntity> basin = getBasin();
if (!basin.filter(BasinTileEntity::canContinueProcessing)
.isPresent())
return true;
@ -118,6 +120,10 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
}
protected List<Recipe<?>> getMatchingRecipes() {
if (getBasin().map(BasinTileEntity::isEmpty)
.orElse(true))
return new ArrayList<>();
List<Recipe<?>> list = RecipeFinder.get(getRecipeCacheKey(), level, this::matchStaticFilters);
return list.stream()
.filter(this::matchBasinRecipe)

View file

@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.processing;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
@ -17,9 +16,11 @@ import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBe
import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.recipe.DummyCraftingContainer;
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.level.Level;
@ -78,7 +79,6 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
List<FluidStack> recipeOutputFluids = new ArrayList<>();
List<Ingredient> ingredients = new LinkedList<>(recipe.getIngredients());
ingredients.sort(Comparator.comparingInt(i -> i.getItems().length));
List<FluidIngredient> fluidIngredients =
isBasinRecipe ? ((BasinRecipe) recipe).getFluidIngredients() : Collections.emptyList();
@ -106,9 +106,6 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
continue Ingredients;
if (!simulate)
availableItems.extractItem(slot, 1, false);
else if (extracted.hasContainerItem())
recipeOutputItems.add(extracted.getContainerItem()
.copy());
extractedItemsFromSlot[slot]++;
continue Ingredients;
}
@ -152,11 +149,17 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
}
if (simulate) {
if (recipe instanceof BasinRecipe) {
recipeOutputItems.addAll(((BasinRecipe) recipe).rollResults());
recipeOutputFluids.addAll(((BasinRecipe) recipe).getFluidResults());
} else
if (recipe instanceof BasinRecipe basinRecipe) {
recipeOutputItems.addAll(basinRecipe.rollResults());
recipeOutputFluids.addAll(basinRecipe.getFluidResults());
recipeOutputItems.addAll(basinRecipe.getRemainingItems(basin.getInputInventory()));
} else {
recipeOutputItems.add(recipe.getResultItem());
if (recipe instanceof CraftingRecipe craftingRecipe) {
recipeOutputItems.addAll(craftingRecipe.getRemainingItems(new DummyCraftingContainer(availableItems, extractedItemsFromSlot)));
}
}
}
if (!basin.acceptOutputs(recipeOutputItems, recipeOutputFluids, simulate))

View file

@ -88,6 +88,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
Direction preferredSpoutput;
protected List<ItemStack> spoutputBuffer;
protected List<FluidStack> spoutputFluidBuffer;
int recipeBackupCheck;
public static final int OUTPUT_ANIMATION_TIME = 10;
List<IntAttached<ItemStack>> visualizedOutputItems;
@ -115,6 +116,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
preferredSpoutput = null;
spoutputBuffer = new ArrayList<>();
spoutputFluidBuffer = new ArrayList<>();
recipeBackupCheck = 20;
}
@Override
@ -227,19 +229,32 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
@Override
public void lazyTick() {
super.lazyTick();
updateSpoutput();
if (!level.isClientSide)
if (!level.isClientSide) {
updateSpoutput();
if (recipeBackupCheck-- > 0)
return;
recipeBackupCheck = 20;
if (isEmpty())
return;
notifyChangeOfContents();
return;
}
BlockEntity tileEntity = level.getBlockEntity(worldPosition.above(2));
if (!(tileEntity instanceof MechanicalMixerTileEntity)) {
setAreFluidsMoving(false);
return;
}
MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tileEntity;
setAreFluidsMoving(mixer.running && mixer.runningTicks <= 20);
}
public boolean isEmpty() {
return inputInventory.isEmpty() && outputInventory.isEmpty() && inputTank.isEmpty() && outputTank.isEmpty();
}
public void onWrenched(Direction face) {
BlockState blockState = getBlockState();
Direction currentFacing = blockState.getValue(BasinBlock.FACING);
@ -256,15 +271,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
}
private void updateSpoutput() {
if (level.isClientSide)
return;
BlockState blockState = getBlockState();
Direction currentFacing = blockState.getValue(BasinBlock.FACING);
if (currentFacing != Direction.DOWN)
notifyChangeOfContents();
Direction newFacing = Direction.DOWN;
for (Direction test : Iterate.horizontalDirections) {
boolean canOutputTo = BasinBlock.canOutputTo(level, worldPosition, test);

View file

@ -465,7 +465,7 @@ public class BeltTileEntity extends KineticTileEntity {
return inserted;
if (!simulate) {
BeltTunnelInteractionHandler.flapTunnel(nextInventory, index, side.getOpposite(), true);
tunnelTE.setStackToDistribute(inserted);
tunnelTE.setStackToDistribute(inserted, side.getOpposite());
}
return empty;
}

View file

@ -54,7 +54,7 @@ public class BeltTunnelInteractionHandler {
if (!brassTunnel.canTakeItems())
return true;
if (onServer) {
brassTunnel.setStackToDistribute(current.stack);
brassTunnel.setStackToDistribute(current.stack, movementFacing.getOpposite());
current.stack = ItemStack.EMPTY;
beltInventory.belt.sendData();
beltInventory.belt.setChanged();

View file

@ -9,7 +9,6 @@ import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket;
@ -22,7 +21,7 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
public class BackTankUtil {
@ -105,11 +104,10 @@ public class BackTankUtil {
// For Air-using tools
@OnlyIn(Dist.CLIENT)
public static boolean isBarVisible(ItemStack stack, int usesPerTank) {
if (usesPerTank == 0)
return false;
LocalPlayer player = Minecraft.getInstance().player;
Player player = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
if (player == null)
return false;
ItemStack backtank = get(player);
@ -118,11 +116,10 @@ public class BackTankUtil {
return true;
}
@OnlyIn(Dist.CLIENT)
public static int getBarWidth(ItemStack stack, int usesPerTank) {
if (usesPerTank == 0)
return 13;
LocalPlayer player = Minecraft.getInstance().player;
Player player = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
if (player == null)
return 13;
ItemStack backtank = get(player);
@ -132,11 +129,10 @@ public class BackTankUtil {
.getBarWidth(backtank);
}
@OnlyIn(Dist.CLIENT)
public static int getBarColor(ItemStack stack, int usesPerTank) {
if (usesPerTank == 0)
return 0;
LocalPlayer player = Minecraft.getInstance().player;
Player player = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
if (player == null)
return 0;
ItemStack backtank = get(player);

View file

@ -3,7 +3,6 @@ package com.simibubi.create.content.logistics.block.belts.tunnel;
import java.util.List;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
@ -44,7 +43,7 @@ public class BrassTunnelBlock extends BeltTunnelBlock {
for (ItemStack itemStack : stacksOfGroup)
player.getInventory().placeItemBackInInventory(itemStack.copy());
world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, .2f,
1f + Create.RANDOM.nextFloat());
1f + world.random.nextFloat());
return InteractionResult.SUCCESS;
});
}
@ -61,16 +60,16 @@ public class BrassTunnelBlock extends BeltTunnelBlock {
}
@Override
public void onRemove(BlockState p_196243_1_, Level p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_,
boolean p_196243_5_) {
if (p_196243_1_.hasBlockEntity()
&& (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasBlockEntity())) {
TileEntityBehaviour.destroy(p_196243_2_, p_196243_3_, FilteringBehaviour.TYPE);
withTileEntityDo(p_196243_2_, p_196243_3_, te -> {
if (te instanceof BrassTunnelTileEntity)
Block.popResource(p_196243_2_, p_196243_3_, ((BrassTunnelTileEntity) te).stackToDistribute);
public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.hasBlockEntity() && (state.getBlock() != newState.getBlock() || !newState.hasBlockEntity())) {
TileEntityBehaviour.destroy(level, pos, FilteringBehaviour.TYPE);
withTileEntityDo(level, pos, te -> {
if (!(te instanceof BrassTunnelTileEntity btte))
return;
Block.popResource(level, pos, btte.stackToDistribute);
btte.stackEnteredFrom = null;
});
p_196243_2_.removeBlockEntity(p_196243_3_);
level.removeBlockEntity(pos);
}
}

View file

@ -34,7 +34,7 @@ public class BrassTunnelItemHandler implements IItemHandler {
if (!te.canTakeItems())
return stack;
if (!simulate)
te.setStackToDistribute(stack);
te.setStackToDistribute(stack, null);
return ItemStack.EMPTY;
}

View file

@ -17,6 +17,9 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform;
@ -61,6 +64,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
boolean connectedRight;
ItemStack stackToDistribute;
Direction stackEnteredFrom;
float distributionProgress;
int distributionDistanceLeft;
int distributionDistanceRight;
@ -81,6 +86,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
distributionTargets = Couple.create(ArrayList::new);
syncSet = new HashSet<>();
stackToDistribute = ItemStack.EMPTY;
stackEnteredFrom = null;
beltCapability = LazyOptional.empty();
tunnelCapability = LazyOptional.of(() -> new BrassTunnelItemHandler(this));
previousOutputIndex = 0;
@ -183,6 +189,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
for (Pair<BlockPos, Direction> pair : list) {
BlockPos tunnelPos = pair.getKey();
Direction output = pair.getValue();
if (tunnelPos.equals(worldPosition) && output == stackEnteredFrom)
continue;
BlockEntity te = level.getBlockEntity(tunnelPos);
if (!(te instanceof BrassTunnelTileEntity))
continue;
@ -306,13 +314,16 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
toDistribute.grow(failedTransferrals);
stackToDistribute = ItemHandlerHelper.copyStackWithSize(stackToDistribute, toDistribute.getCount());
if (stackToDistribute.isEmpty())
stackEnteredFrom = null;
previousOutputIndex++;
previousOutputIndex %= amountTargets;
notifyUpdate();
}
public void setStackToDistribute(ItemStack stack) {
public void setStackToDistribute(ItemStack stack, @Nullable Direction enteredFrom) {
stackToDistribute = stack;
stackEnteredFrom = enteredFrom;
distributionProgress = -1;
sendData();
setChanged();
@ -329,7 +340,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
if (!own.isEmpty()) {
list.add(own);
if (!simulate)
setStackToDistribute(ItemStack.EMPTY);
setStackToDistribute(ItemStack.EMPTY, null);
}
for (boolean left : Iterate.trueAndFalse) {
@ -345,7 +356,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
continue;
list.add(other);
if (!simulate)
adjacent.setStackToDistribute(ItemStack.EMPTY);
adjacent.setStackToDistribute(ItemStack.EMPTY, null);
}
}
@ -514,22 +525,30 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
continue;
if (direction == movementFacing.getOpposite())
continue;
if (tunnelTE.sides.contains(direction)) {
BlockPos offset = tunnelTE.worldPosition.below()
.relative(direction);
DirectBeltInputBehaviour inputBehaviour =
TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE);
if (inputBehaviour == null) {
if (direction == movementFacing)
if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset,
direction.getOpposite()))
validOutputs.add(Pair.of(tunnelTE, direction));
continue;
}
if (inputBehaviour.canInsertFromSide(direction))
validOutputs.add(Pair.of(tunnelTE, direction));
if (!tunnelTE.sides.contains(direction))
continue;
BlockPos offset = tunnelTE.worldPosition.below()
.relative(direction);
BlockState potentialFunnel = level.getBlockState(offset.above());
if (potentialFunnel.getBlock() instanceof BeltFunnelBlock
&& potentialFunnel.getValue(BeltFunnelBlock.SHAPE) == Shape.PULLING
&& FunnelBlock.getFunnelFacing(potentialFunnel) == direction)
continue;
DirectBeltInputBehaviour inputBehaviour =
TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE);
if (inputBehaviour == null) {
if (direction == movementFacing)
if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset,
direction.getOpposite()))
validOutputs.add(Pair.of(tunnelTE, direction));
continue;
}
if (inputBehaviour.canInsertFromSide(direction))
validOutputs.add(Pair.of(tunnelTE, direction));
continue;
}
}
}
@ -559,7 +578,11 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
compound.putBoolean("SyncedOutput", syncedOutputActive);
compound.putBoolean("ConnectedLeft", connectedLeft);
compound.putBoolean("ConnectedRight", connectedRight);
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
if (stackEnteredFrom != null)
NBTHelper.writeEnum(compound, "StackEnteredFrom", stackEnteredFrom);
compound.putFloat("DistributionProgress", distributionProgress);
compound.putInt("PreviousIndex", previousOutputIndex);
compound.putInt("DistanceLeft", distributionDistanceLeft);
@ -587,7 +610,12 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
syncedOutputActive = compound.getBoolean("SyncedOutput");
connectedLeft = compound.getBoolean("ConnectedLeft");
connectedRight = compound.getBoolean("ConnectedRight");
stackToDistribute = ItemStack.of(compound.getCompound("StackToDistribute"));
stackEnteredFrom =
compound.contains("StackEnteredFrom") ? NBTHelper.readEnum(compound, "StackEnteredFrom", Direction.class)
: null;
distributionProgress = compound.getFloat("DistributionProgress");
previousOutputIndex = compound.getInt("PreviousIndex");
distributionDistanceLeft = compound.getInt("DistanceLeft");

View file

@ -40,9 +40,10 @@ public class ScoreboardDisplaySource extends ValueListDisplaySource {
return sLevel.getScoreboard()
.getPlayerScores(objective)
.stream()
.limit(maxRows)
.map(score -> IntAttached.with(score.getScore(), Components.literal(score.getOwner()).copy()))
.sorted(IntAttached.comparator());
.map(score -> IntAttached.with(score.getScore(), Components.literal(score.getOwner())
.copy()))
.sorted(IntAttached.comparator())
.limit(maxRows);
}
private ImmutableList<IntAttached<MutableComponent>> notFound(String objective) {

View file

@ -56,6 +56,11 @@ public class BookCopyAttribute implements ItemAttribute {
return new BookCopyAttribute(nbt.getInt("generation"));
}
@Override
public String getNBTKey() {
return "book_copy";
}
private int extractGeneration(ItemStack stack) {
CompoundTag nbt = stack.getTag();
if (nbt != null && stack.getItem() instanceof WrittenBookItem) {

View file

@ -84,12 +84,12 @@ public class TrainRelocationPacket extends SimplePacketBase {
return;
if (!sender.position()
.closerThan(Vec3.atCenterOf(pos), 26)) {
.closerThan(Vec3.atCenterOf(pos), 64)) {
Create.LOGGER.warn(messagePrefix + train.name.getString() + ": player too far from clicked pos");
return;
}
if (!sender.position()
.closerThan(cce.position(), 26 + cce.getBoundingBox()
.closerThan(cce.position(), 64 + cce.getBoundingBox()
.getXsize() / 2)) {
Create.LOGGER.warn(messagePrefix + train.name.getString() + ": player too far from carriage entity");
return;

View file

@ -5,20 +5,29 @@ import com.simibubi.create.content.logistics.trains.DimensionPalette;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.entity.BlockEntity;
public abstract class SingleTileEdgePoint extends TrackEdgePoint {
public ResourceKey<Level> tileDimension;
public BlockPos tilePos;
public BlockPos getTilePos() {
return tilePos;
}
public ResourceKey<Level> getTileDimension() {
return tileDimension;
}
@Override
public void tileAdded(BlockEntity tile, boolean front) {
this.tilePos = tile.getBlockPos();
this.tileDimension = tile.getLevel()
.dimension();
}
@Override
@ -42,12 +51,14 @@ public abstract class SingleTileEdgePoint extends TrackEdgePoint {
if (migration)
return;
tilePos = NbtUtils.readBlockPos(nbt.getCompound("TilePos"));
tileDimension = dimensions.decode(nbt.contains("TileDimension") ? nbt.getInt("TileDimension") : -1);
}
@Override
public void write(CompoundTag nbt, DimensionPalette dimensions) {
super.write(nbt, dimensions);
nbt.put("TilePos", NbtUtils.writeBlockPos(tilePos));
nbt.putInt("TileDimension", dimensions.encode(tileDimension));
}
}

View file

@ -66,8 +66,7 @@ public class ScheduleItem extends Item implements MenuProvider {
return InteractionResultHolder.pass(heldItem);
}
@Override
public InteractionResult interactLivingEntity(ItemStack pStack, Player pPlayer, LivingEntity pInteractionTarget,
public InteractionResult handScheduleTo(ItemStack pStack, Player pPlayer, LivingEntity pInteractionTarget,
InteractionHand pUsedHand) {
InteractionResult pass = InteractionResult.PASS;
@ -123,6 +122,7 @@ public class ScheduleItem extends Item implements MenuProvider {
pStack.shrink(1);
pPlayer.setItemInHand(pUsedHand, pStack.isEmpty() ? ItemStack.EMPTY : pStack);
}
return InteractionResult.SUCCESS;
}

View file

@ -11,19 +11,20 @@ import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.core.BlockPos;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.animal.Wolf;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber
public class ScheduleItemRetrieval {
public class ScheduleItemEntityInteraction {
@SubscribeEvent
public static void removeScheduleFromConductor(EntityInteract event) {
public static void interactWithConductor(EntityInteractSpecific event) {
Entity entity = event.getTarget();
Player player = event.getPlayer();
if (player == null || entity == null)
@ -34,16 +35,24 @@ public class ScheduleItemRetrieval {
Entity rootVehicle = entity.getRootVehicle();
if (!(rootVehicle instanceof CarriageContraptionEntity))
return;
if (!(entity instanceof LivingEntity living))
return;
if (player.getCooldowns()
.isOnCooldown(AllItems.SCHEDULE.get()))
return;
ItemStack itemStack = event.getItemStack();
if (AllItems.SCHEDULE.isIn(itemStack) && entity instanceof Wolf wolf) {
itemStack.getItem()
.interactLivingEntity(itemStack, player, wolf, event.getHand());
return;
if (itemStack.getItem()instanceof ScheduleItem si) {
InteractionResult result = si.handScheduleTo(itemStack, player, living, event.getHand());
if (result.consumesAction()) {
player.getCooldowns()
.addCooldown(AllItems.SCHEDULE.get(), 5);
event.setCancellationResult(result);
event.setCanceled(true);
return;
}
}
if (player.level.isClientSide)
return;
if (event.getHand() == InteractionHand.OFF_HAND)
return;
@ -68,31 +77,47 @@ public class ScheduleItemRetrieval {
if (directions == null)
return;
boolean onServer = !event.getWorld().isClientSide;
if (train.runtime.paused && !train.runtime.completed) {
train.runtime.paused = false;
AllSoundEvents.CONFIRM.playOnServer(player.level, player.blockPosition(), 1, 1);
player.displayClientMessage(Lang.translateDirect("schedule.continued"), true);
if (onServer) {
train.runtime.paused = false;
AllSoundEvents.CONFIRM.playOnServer(player.level, player.blockPosition(), 1, 1);
player.displayClientMessage(Lang.translateDirect("schedule.continued"), true);
}
player.getCooldowns()
.addCooldown(AllItems.SCHEDULE.get(), 5);
event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true);
return;
}
ItemStack itemInHand = player.getItemInHand(event.getHand());
if (!itemInHand.isEmpty()) {
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
player.displayClientMessage(Lang.translateDirect("schedule.remove_with_empty_hand"), true);
if (onServer) {
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
player.displayClientMessage(Lang.translateDirect("schedule.remove_with_empty_hand"), true);
}
event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true);
return;
}
AllSoundEvents.playItemPickup(player);
player.displayClientMessage(
Lang.translateDirect(
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
true);
if (onServer) {
AllSoundEvents.playItemPickup(player);
player.displayClientMessage(
Lang.translateDirect(
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
true);
player.getInventory()
.placeItemBackInInventory(train.runtime.returnSchedule());
// player.setItemInHand(event.getHand(), train.runtime.returnSchedule());
player.getInventory()
.placeItemBackInInventory(train.runtime.returnSchedule());
}
player.getCooldowns()
.addCooldown(AllItems.SCHEDULE.get(), 5);
event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true);
return;
}

View file

@ -29,6 +29,9 @@ import net.minecraft.world.level.Level;
public class ScheduleRuntime {
private static final int TBD = -1;
private static final int INVALID = -2;
public enum State {
PRE_TRANSIT, IN_TRANSIT, POST_TRANSIT
}
@ -129,7 +132,7 @@ public class ScheduleRuntime {
destinationReached();
return;
}
if (train.navigation.startNavigation(nextStation, Double.MAX_VALUE, false) != -1) {
if (train.navigation.startNavigation(nextStation, Double.MAX_VALUE, false) != TBD) {
state = State.IN_TRANSIT;
ticksInTransit = 0;
}
@ -231,7 +234,7 @@ public class ScheduleRuntime {
isAutoSchedule = auto;
train.status.newSchedule();
predictionTicks = new ArrayList<>();
schedule.entries.forEach($ -> predictionTicks.add(-1));
schedule.entries.forEach($ -> predictionTicks.add(TBD));
displayLinkUpdateRequested = true;
}
@ -269,8 +272,10 @@ public class ScheduleRuntime {
if (currentStation != null)
predictions.add(createPrediction(current, currentStation.name, currentTitle, 0));
int departureTime = estimateStayDuration(current);
if (departureTime == -1)
accumulatedTime = -1;
if (departureTime == INVALID)
accumulatedTime = INVALID;
else
accumulatedTime += departureTime;
} else {
GlobalStation destination = train.navigation.destination;
@ -292,10 +297,10 @@ public class ScheduleRuntime {
predictions.add(createPrediction(current, destination.name, currentTitle, accumulatedTime));
int departureTime = estimateStayDuration(current);
if (departureTime != -1)
if (departureTime != INVALID)
accumulatedTime += departureTime;
if (departureTime == -1)
accumulatedTime = -1;
else
accumulatedTime = INVALID;
} else
predictForEntry(current, currentTitle, accumulatedTime, predictions);
@ -327,47 +332,56 @@ public class ScheduleRuntime {
return accumulatedTime;
if (predictionTicks.size() <= currentEntry)
return accumulatedTime;
if (accumulatedTime == -1) {
int departureTime = estimateStayDuration(index);
if (accumulatedTime < 0) {
predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime));
return -1;
return Math.min(accumulatedTime, departureTime);
}
int predictedTime = predictionTicks.get(index);
int departureTime = estimateStayDuration(index);
accumulatedTime += predictedTime;
if (predictedTime == -1)
accumulatedTime = -1;
else {
accumulatedTime += predictedTime;
if (departureTime != -1)
accumulatedTime += departureTime;
}
if (predictedTime == TBD)
accumulatedTime = TBD;
predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime));
if (departureTime == -1)
return -1;
if (accumulatedTime != TBD)
accumulatedTime += departureTime;
if (departureTime == INVALID)
accumulatedTime = INVALID;
return accumulatedTime;
}
private int estimateStayDuration(int index) {
if (index >= schedule.entries.size()) {
if (!schedule.cyclic)
return 100000;
return INVALID;
index = 0;
}
ScheduleEntry scheduleEntry = schedule.entries.get(index);
for (List<ScheduleWaitCondition> list : scheduleEntry.conditions)
for (ScheduleWaitCondition condition : list)
if (condition instanceof ScheduledDelay wait)
return wait.totalWaitTicks();
Columns: for (List<ScheduleWaitCondition> list : scheduleEntry.conditions) {
int total = 0;
for (ScheduleWaitCondition condition : list) {
if (!(condition instanceof ScheduledDelay wait))
continue Columns;
total += wait.totalWaitTicks();
}
return total;
}
return 5; // TODO properly ask conditions for time prediction
return INVALID;
}
private TrainDeparturePrediction createPrediction(int index, String destination, String currentTitle, int time) {
if (time == INVALID)
return null;
int size = schedule.entries.size();
if (index >= size) {
if (!schedule.cyclic)
@ -422,7 +436,7 @@ public class ScheduleRuntime {
int[] readTransits = tag.getIntArray("TransitTimes");
if (schedule != null) {
schedule.entries.forEach($ -> predictionTicks.add(-1));
schedule.entries.forEach($ -> predictionTicks.add(TBD));
if (readTransits.length == schedule.entries.size())
for (int i = 0; i < readTransits.length; i++)
predictionTicks.set(i, readTransits[i]);

View file

@ -110,6 +110,8 @@ public abstract class CargoThresholdCondition extends LazyTickedScheduleConditio
public List<Component> getSecondLineTooltip(int slot) {
return ImmutableList.of(Lang.translateDirect("schedule.condition.threshold.place_item"),
Lang.translateDirect("schedule.condition.threshold.place_item_2")
.withStyle(ChatFormatting.GRAY),
Lang.translateDirect("schedule.condition.threshold.place_item_3")
.withStyle(ChatFormatting.GRAY));
}

View file

@ -44,9 +44,6 @@ public class FluidThresholdCondition extends CargoThresholdCondition {
Ops operator = getOperator();
int target = getThreshold();
if (compareStack.isEmpty())
return true;
int foundFluid = 0;
for (Carriage carriage : train.carriages) {
IFluidHandler fluids = carriage.storage.getFluids();
@ -100,9 +97,10 @@ public class FluidThresholdCondition extends CargoThresholdCondition {
Lang.translateDirect("schedule.condition.threshold." + Lang.asId(getOperator().name()))),
Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(),
Lang.translateDirect("schedule.condition.threshold.buckets"),
compareStack.getItem() instanceof FilterItem
? Lang.translateDirect("schedule.condition.threshold.matching_content")
: loadFluid().getDisplayName())
compareStack.isEmpty() ? Lang.translateDirect("schedule.condition.threshold.anything")
: compareStack.getItem() instanceof FilterItem
? Lang.translateDirect("schedule.condition.threshold.matching_content")
: loadFluid().getDisplayName())
.withStyle(ChatFormatting.DARK_AQUA));
}

View file

@ -41,9 +41,6 @@ public class ItemThresholdCondition extends CargoThresholdCondition {
int target = getThreshold();
boolean stacks = inStacks();
if (stack.isEmpty())
return true;
int foundItems = 0;
for (Carriage carriage : train.carriages) {
IItemHandlerModifiable items = carriage.storage.getItems();
@ -97,8 +94,10 @@ public class ItemThresholdCondition extends CargoThresholdCondition {
Lang.translateDirect("schedule.condition.threshold." + Lang.asId(getOperator().name()))),
Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(),
Lang.translateDirect("schedule.condition.threshold." + (inStacks() ? "stacks" : "items")),
stack.getItem() instanceof FilterItem ? Lang.translateDirect("schedule.condition.threshold.matching_content")
: stack.getHoverName())
stack.isEmpty() ? Lang.translateDirect("schedule.condition.threshold.anything")
: stack.getItem() instanceof FilterItem
? Lang.translateDirect("schedule.condition.threshold.matching_content")
: stack.getHoverName())
.withStyle(ChatFormatting.DARK_AQUA));
}

View file

@ -10,7 +10,10 @@ import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
@ -26,9 +29,14 @@ public class StationPoweredCondition extends ScheduleWaitCondition {
if (currentStation == null)
return false;
BlockPos stationPos = currentStation.getTilePos();
if (!level.isLoaded(stationPos))
ResourceKey<Level> stationDim = currentStation.getTileDimension();
MinecraftServer server = level.getServer();
if (server == null)
return false;
return level.hasNeighborSignal(stationPos);
ServerLevel stationLevel = server.getLevel(stationDim);
if (stationLevel == null || !stationLevel.isLoaded(stationPos))
return false;
return stationLevel.hasNeighborSignal(stationPos);
}
@Override

View file

@ -10,6 +10,7 @@ import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
@ -21,6 +22,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.pathfinder.BlockPathTypes;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
@ -43,6 +45,11 @@ public class FakeTrackBlock extends Block implements EntityBlock, ProperWaterlog
public RenderShape getRenderShape(BlockState pState) {
return RenderShape.ENTITYBLOCK_ANIMATED;
}
@Override
public BlockPathTypes getAiPathNodeType(BlockState state, BlockGetter world, BlockPos pos, Mob entity) {
return BlockPathTypes.DAMAGE_OTHER;
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> pBuilder) {

View file

@ -66,6 +66,7 @@ import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
@ -89,6 +90,7 @@ import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.pathfinder.BlockPathTypes;
import net.minecraft.world.level.portal.PortalForcer;
import net.minecraft.world.level.portal.PortalInfo;
import net.minecraft.world.phys.AABB;
@ -119,6 +121,11 @@ public class TrackBlock extends Block
protected void createBlockStateDefinition(Builder<Block, BlockState> p_49915_) {
super.createBlockStateDefinition(p_49915_.add(SHAPE, HAS_TE, WATERLOGGED));
}
@Override
public BlockPathTypes getAiPathNodeType(BlockState state, BlockGetter world, BlockPos pos, Mob entity) {
return BlockPathTypes.RAIL;
}
@Override
public FluidState getFluidState(BlockState state) {

View file

@ -17,6 +17,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.HoverEvent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.Style;
import net.minecraft.world.item.Item;
@ -154,7 +155,11 @@ public class MaterialChecklist {
private Component entry(ItemStack item, int amount, boolean unfinished) {
int stacks = amount / 64;
int remainder = amount % 64;
MutableComponent tc = Components.translatable(item.getDescriptionId());
MutableComponent tc = Components.empty();
tc.append(Components.translatable(item.getDescriptionId())
.setStyle(Style.EMPTY
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new HoverEvent.ItemStackInfo(item)))));
if (!unfinished)
tc.append(" \u2714");
tc.withStyle(unfinished ? ChatFormatting.BLUE : ChatFormatting.DARK_GREEN);

View file

@ -31,7 +31,7 @@ import net.minecraft.world.phys.Vec3;
public class DumpRailwaysCommand {
static ArgumentBuilder<CommandSourceStack, ?> register() {
return Commands.literal("dumpRailways")
return Commands.literal("trains")
.requires(cs -> cs.hasPermission(2))
.executes(ctx -> {
CommandSourceStack source = ctx.getSource();
@ -52,7 +52,7 @@ public class DumpRailwaysCommand {
int orange = 0xFFAD60;
chat.accept("", white);
chat.accept("-+------<< Railways Summary: >>------+-", white);
chat.accept("-+------<< Train Summary: >>------+-", white);
int graphCount = railways.trackNetworks.size();
chat.accept("Track Networks: " + graphCount, blue);
chat.accept("Signal Groups: " + railways.signalEdgeGroups.size(), blue);

View file

@ -4,6 +4,7 @@ public class CRecipes extends ConfigBase {
public final ConfigBool bulkPressing = b(false, "bulkPressing", Comments.bulkPressing);
public final ConfigBool bulkCutting = b(false, "bulkCutting", Comments.bulkCutting);
public final ConfigBool allowBrewingInMixer = b(true, "allowBrewingInMixer", Comments.allowBrewingInMixer);
public final ConfigBool allowShapelessInMixer = b(true, "allowShapelessInMixer", Comments.allowShapelessInMixer);
public final ConfigBool allowShapedSquareInPress = b(true, "allowShapedSquareInPress", Comments.allowShapedSquareInPress);
public final ConfigBool allowRegularCraftingInCrafter =
@ -28,8 +29,9 @@ public class CRecipes extends ConfigBase {
private static class Comments {
static String bulkPressing = "Allow the Mechanical Press to process entire stacks at a time.";
static String bulkCutting = "Allow the Mechanical Saw to process entire stacks at a time.";
static String allowBrewingInMixer = "Allow supported potions to be brewed by a Mechanical Mixer + Basin.";
static String allowShapelessInMixer =
"Allow allows any shapeless crafting recipes to be processed by a Mechanical Mixer + Basin.";
"Allow any shapeless crafting recipes to be processed by a Mechanical Mixer + Basin.";
static String allowShapedSquareInPress =
"Allow any single-ingredient 2x2 or 3x3 crafting recipes to be processed by a Mechanical Press + Basin.";
static String allowRegularCraftingInCrafter =

View file

@ -22,7 +22,7 @@ public class CStress extends ConfigBase implements IStressValueProvider {
@Override
protected void registerAll(Builder builder) {
builder.comment("", Comments.su, Comments.impact)
builder.comment(".", Comments.su, Comments.impact)
.push("impact");
BlockStressDefaults.DEFAULT_IMPACTS.forEach((r, i) -> {
if (r.getNamespace()
@ -31,7 +31,7 @@ public class CStress extends ConfigBase implements IStressValueProvider {
});
builder.pop();
builder.comment("", Comments.su, Comments.capacity)
builder.comment(".", Comments.su, Comments.capacity)
.push("capacity");
BlockStressDefaults.DEFAULT_CAPACITIES.forEach((r, i) -> {
if (r.getNamespace()

View file

@ -110,11 +110,11 @@ public abstract class ConfigBase {
public void addComments(Builder builder, String... comment) {
if (comment.length > 0) {
String[] comments = new String[comment.length + 1];
comments[0] = " ";
comments[0] = ".";
System.arraycopy(comment, 0, comments, 1, comment.length);
builder.comment(comments);
} else
builder.comment(" ");
builder.comment(".");
}
public void register(ForgeConfigSpec.Builder builder) {

View file

@ -46,10 +46,11 @@ public enum ContraptionMovementSetting {
}
public static void registerDefaults() {
register(Blocks.BUDDING_AMETHYST, () -> AllConfigs.SERVER.kinetics.amethystMovement.get());
register(Blocks.SPAWNER, () -> AllConfigs.SERVER.kinetics.spawnerMovement.get());
register(Blocks.BUDDING_AMETHYST, () -> AllConfigs.SERVER.kinetics.amethystMovement.get());
register(Blocks.OBSIDIAN, () -> AllConfigs.SERVER.kinetics.obsidianMovement.get());
register(Blocks.CRYING_OBSIDIAN, () -> AllConfigs.SERVER.kinetics.obsidianMovement.get());
register(Blocks.RESPAWN_ANCHOR, () -> AllConfigs.SERVER.kinetics.obsidianMovement.get());
}
public interface IMovementSettingProvider extends IForgeBlock {

View file

@ -204,11 +204,13 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
@SuppressWarnings("deprecation")
@Override
protected boolean testInternal(FluidStack t) {
if (tag == null)
if (tag == null) {
for (FluidStack accepted : getMatchingFluidStacks())
if (accepted.getFluid()
.isSame(t.getFluid()))
return true;
return false;
}
return t.getFluid().is(tag);
}

View file

@ -5,6 +5,7 @@ import java.util.Random;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.logging.log4j.util.TriConsumer;
import org.spongepowered.asm.mixin.Final;
@ -56,18 +57,21 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid
protected abstract void playStepSound(BlockPos p_180429_1_, BlockState p_180429_2_);
private Set<AbstractContraptionEntity> getIntersectingContraptions() {
Set<AbstractContraptionEntity> contraptions = ContraptionHandler.loadedContraptions.get(self.level)
.values()
.stream()
.map(Reference::get)
.filter(cEntity -> cEntity != null && cEntity.collidingEntities.containsKey(self))
.collect(Collectors.toSet());
Set<AbstractContraptionEntity> contraptions = getIntersectionContraptionsStream().collect(Collectors.toSet());
contraptions.addAll(self.level.getEntitiesOfClass(AbstractContraptionEntity.class, self.getBoundingBox()
.inflate(1f)));
return contraptions;
}
private Stream<AbstractContraptionEntity> getIntersectionContraptionsStream() {
return ContraptionHandler.loadedContraptions.get(self.level)
.values()
.stream()
.map(Reference::get)
.filter(cEntity -> cEntity != null && cEntity.collidingEntities.containsKey(self));
}
private void forCollision(Vec3 anchorPos, TriConsumer<Contraption, BlockState, BlockPos> action) {
getIntersectingContraptions().forEach(cEntity -> {
Vec3 localPos = ContraptionCollider.getWorldToLocalTranslation(anchorPos, cEntity);
@ -88,7 +92,7 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid
@Inject(at = @At(value = "JUMP", opcode = 154, // IFNE line 661 injecting before `!blockstate.isAir(this.world, blockpos)`
ordinal = 7), method = "move")
private void movementMixin(MoverType mover, Vec3 movement, CallbackInfo ci) {
private void movementStepMixin(MoverType mover, Vec3 movement, CallbackInfo ci) { // involves block step sounds on contraptions
Vec3 worldPos = self.position()
.add(0, -0.2, 0);
AtomicBoolean stepped = new AtomicBoolean(false);
@ -104,6 +108,43 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid
this.nextStep = this.nextStep();
}
@Inject(at = @At(value = "TAIL"), method = "move")
private void movementMixin(MoverType mover, Vec3 movement, CallbackInfo ci) {
// involves client-side view bobbing animation on contraptions
if (!self.level.isClientSide)
return;
if (self.isOnGround())
return;
if (self.isPassenger())
return;
Vec3 worldPos = self.position()
.add(0, -0.2, 0);
boolean onAtLeastOneContraption = getIntersectionContraptionsStream().anyMatch(cEntity -> {
Vec3 localPos = ContraptionCollider.getWorldToLocalTranslation(worldPos, cEntity);
localPos = worldPos.add(localPos);
BlockPos blockPos = new BlockPos(localPos);
Contraption contraption = cEntity.getContraption();
StructureTemplate.StructureBlockInfo info = contraption.getBlocks()
.get(blockPos);
if (info == null)
return false;
cEntity.registerColliding(self);
return true;
});
if (!onAtLeastOneContraption)
return;
self.setOnGround(true);
self.getPersistentData()
.putBoolean("ContraptionGrounded", true);
}
@Inject(method = { "spawnSprintParticle" }, at = @At(value = "TAIL"))
private void createRunningParticlesMixin(CallbackInfo ci) {
Vec3 worldPos = self.position()

View file

@ -188,7 +188,7 @@ public enum AllPackets {
;
public static final ResourceLocation CHANNEL_NAME = Create.asResource("main");
public static final int NETWORK_VERSION = 1;
public static final int NETWORK_VERSION = 2;
public static final String NETWORK_VERSION_STR = String.valueOf(NETWORK_VERSION);
public static SimpleChannel channel;

View file

@ -134,14 +134,14 @@ public class PonderScene {
}
public Pair<ItemStack, BlockPos> rayTraceScene(Vec3 from, Vec3 to) {
MutableObject<Pair<WorldSectionElement, BlockPos>> nearestHit = new MutableObject<>();
MutableObject<Pair<WorldSectionElement, Pair<Vec3, BlockHitResult>>> nearestHit = new MutableObject<>();
MutableDouble bestDistance = new MutableDouble(0);
forEach(WorldSectionElement.class, wse -> {
wse.resetSelectedBlock();
if (!wse.isVisible())
return;
Pair<Vec3, BlockPos> rayTrace = wse.rayTrace(world, from, to);
Pair<Vec3, BlockHitResult> rayTrace = wse.rayTrace(world, from, to);
if (rayTrace == null)
return;
double distanceTo = rayTrace.getFirst()
@ -149,15 +149,17 @@ public class PonderScene {
if (nearestHit.getValue() != null && distanceTo >= bestDistance.getValue())
return;
nearestHit.setValue(Pair.of(wse, rayTrace.getSecond()));
nearestHit.setValue(Pair.of(wse, rayTrace));
bestDistance.setValue(distanceTo);
});
if (nearestHit.getValue() == null)
return Pair.of(ItemStack.EMPTY, null);
BlockPos selectedPos = nearestHit.getValue()
Pair<Vec3, BlockHitResult> selectedHit = nearestHit.getValue()
.getSecond();
BlockPos selectedPos = selectedHit.getSecond()
.getBlockPos();
BlockPos origin = new BlockPos(basePlateOffsetX, 0, basePlateOffsetZ);
if (!world.getBounds()
@ -176,9 +178,14 @@ public class PonderScene {
.getFirst()
.selectBlock(selectedPos);
BlockState blockState = world.getBlockState(selectedPos);
ItemStack pickBlock = blockState.getCloneItemStack(
new BlockHitResult(VecHelper.getCenterOf(selectedPos), Direction.UP, selectedPos, true), world, selectedPos,
Minecraft.getInstance().player);
Direction direction = selectedHit.getSecond()
.getDirection();
Vec3 location = selectedHit.getSecond()
.getLocation();
ItemStack pickBlock = blockState.getCloneItemStack(new BlockHitResult(location, direction, selectedPos, true),
world, selectedPos, Minecraft.getInstance().player);
return Pair.of(pickBlock, selectedPos);
}

View file

@ -34,6 +34,7 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.BlockParticleOption;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
@ -54,7 +55,7 @@ public class PonderWorld extends SchematicWorld {
public PonderScene scene;
protected Map<BlockPos, BlockState> originalBlocks;
protected Map<BlockPos, BlockEntity> originalTileEntities;
protected Map<BlockPos, CompoundTag> originalTileEntities;
protected Map<BlockPos, Integer> blockBreakingProgressions;
protected List<Entity> originalEntities;
private Supplier<ClientLevel> asClientWorld = Suppliers.memoize(() -> WrappedClientWorld.of(this));
@ -79,8 +80,7 @@ public class PonderWorld extends SchematicWorld {
originalBlocks.clear();
originalTileEntities.clear();
blocks.forEach((k, v) -> originalBlocks.put(k, v));
tileEntities.forEach(
(k, v) -> originalTileEntities.put(k, BlockEntity.loadStatic(k, blocks.get(k), v.saveWithFullMetadata())));
tileEntities.forEach((k, v) -> originalTileEntities.put(k, v.saveWithFullMetadata()));
entities.forEach(e -> EntityType.create(e.serializeNBT(), this)
.ifPresent(originalEntities::add));
}
@ -93,7 +93,7 @@ public class PonderWorld extends SchematicWorld {
renderedTileEntities.clear();
originalBlocks.forEach((k, v) -> blocks.put(k, v));
originalTileEntities.forEach((k, v) -> {
BlockEntity te = BlockEntity.loadStatic(k, originalBlocks.get(k), v.saveWithFullMetadata());
BlockEntity te = BlockEntity.loadStatic(k, originalBlocks.get(k), v);
onTEadded(te, te.getBlockPos());
tileEntities.put(k, te);
renderedTileEntities.add(te);
@ -109,8 +109,7 @@ public class PonderWorld extends SchematicWorld {
if (originalBlocks.containsKey(p))
blocks.put(p, originalBlocks.get(p));
if (originalTileEntities.containsKey(p)) {
BlockEntity te = BlockEntity.loadStatic(p, originalBlocks.get(p), originalTileEntities.get(p)
.saveWithFullMetadata());
BlockEntity te = BlockEntity.loadStatic(p, originalBlocks.get(p), originalTileEntities.get(p));
onTEadded(te, te.getBlockPos());
tileEntities.put(p, te);
}

View file

@ -181,7 +181,7 @@ public class WorldSectionElement extends AnimatedSceneElement {
BlockPos worldPos;
}
public Pair<Vec3, BlockPos> rayTrace(PonderWorld world, Vec3 source, Vec3 target) {
public Pair<Vec3, BlockHitResult> rayTrace(PonderWorld world, Vec3 source, Vec3 target) {
world.setMask(this.section);
Vec3 transformedTarget = reverseTransformVec(target);
BlockHitResult rayTraceBlocks = world.clip(new ClipContext(reverseTransformVec(source), transformedTarget,
@ -199,7 +199,7 @@ public class WorldSectionElement extends AnimatedSceneElement {
/ source.subtract(target)
.lengthSqr();
Vec3 actualHit = VecHelper.lerp((float) t, target, source);
return Pair.of(actualHit, rayTraceBlocks.getBlockPos());
return Pair.of(actualHit, rayTraceBlocks);
}
private Vec3 reverseTransformVec(Vec3 in) {

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