mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-14 22:35:07 +01:00
Merge branch 'mc1.18/dev' into fr-translate
This commit is contained in:
commit
a4b3688a9d
183 changed files with 4984 additions and 1814 deletions
3
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
3
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
@ -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"
|
||||
|
|
2
.github/config/labels.yml
vendored
2
.github/config/labels.yml
vendored
|
@ -8,3 +8,5 @@
|
|||
- "1.17"
|
||||
1.18:
|
||||
- "1.18"
|
||||
1.19:
|
||||
- "1.19"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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!"
|
||||
|
||||
|
|
|
@ -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": "レッドストーンリンク",
|
||||
|
|
|
@ -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": "레드스톤 링크",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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",
|
||||
|
|
|
@ -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": "无线红石",
|
||||
|
|
|
@ -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": "無線紅石連接",
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"minecraft:bee_nest",
|
||||
"minecraft:vine",
|
||||
"minecraft:moss_carpet",
|
||||
"minecraft:shroomlight",
|
||||
"minecraft:cocoa"
|
||||
]
|
||||
}
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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]);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue