mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-19 00:25:34 +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
|
label: Mod Version
|
||||||
description: The version of the mod you were using when the bug occured
|
description: The version of the mod you were using when the bug occured
|
||||||
options:
|
options:
|
||||||
|
- "0.5.0f"
|
||||||
|
- "0.5.0e"
|
||||||
- "0.5.0d"
|
- "0.5.0d"
|
||||||
- "0.5.0c"
|
- "0.5.0c"
|
||||||
- "0.5.0b"
|
- "0.5.0b"
|
||||||
|
@ -107,6 +109,7 @@ body:
|
||||||
label: Minecraft Version
|
label: Minecraft Version
|
||||||
description: The version of Minecraft you were using when the bug occured
|
description: The version of Minecraft you were using when the bug occured
|
||||||
options:
|
options:
|
||||||
|
- "1.19.2"
|
||||||
- "1.18.2"
|
- "1.18.2"
|
||||||
- "1.18.1"
|
- "1.18.1"
|
||||||
- "1.18"
|
- "1.18"
|
||||||
|
|
2
.github/config/labels.yml
vendored
2
.github/config/labels.yml
vendored
|
@ -8,3 +8,5 @@
|
||||||
- "1.17"
|
- "1.17"
|
||||||
1.18:
|
1.18:
|
||||||
- "1.18"
|
- "1.18"
|
||||||
|
1.19:
|
||||||
|
- "1.19"
|
||||||
|
|
|
@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G
|
||||||
org.gradle.daemon = false
|
org.gradle.daemon = false
|
||||||
|
|
||||||
# mod version info
|
# mod version info
|
||||||
mod_version = 0.5.0.d
|
mod_version = 0.5.0.e
|
||||||
artifact_minecraft_version = 1.18.2
|
artifact_minecraft_version = 1.18.2
|
||||||
|
|
||||||
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
|
e0f1e44c9bce4a7478592cf3a8ee7b91d9083d65 assets/create/blockstates/black_sail.json
|
||||||
58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json
|
58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json
|
||||||
73db8bd55bd5bd21f939ee9eb4b4b02209d9c5ed assets/create/blockstates/black_toolbox.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
|
923aeb2a556f67bc0526f237dd97af2d37b4c9f1 assets/create/blockstates/blaze_burner.json
|
||||||
ea1a792572af1ee4c9831cd55825514d6568952d assets/create/blockstates/blue_nixie_tube.json
|
ea1a792572af1ee4c9831cd55825514d6568952d assets/create/blockstates/blue_nixie_tube.json
|
||||||
ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json
|
ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json
|
||||||
4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json
|
4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json
|
||||||
dea175335c5db0abe758cd208dc984c22506a176 assets/create/blockstates/blue_toolbox.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
|
5f57741e500903b70c80d2a72788a25e97387e2e assets/create/blockstates/brass_belt_funnel.json
|
||||||
8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json
|
8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json
|
||||||
b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.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
|
11ebdd9bd0815833e62ec1bea03a4cdd86ce00f3 assets/create/blockstates/brown_sail.json
|
||||||
e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json
|
e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json
|
||||||
bd73bfdbe88c58883cc15fe31a9dac7860482ca3 assets/create/blockstates/brown_toolbox.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
|
ff1073a5451691c492102243084d92de42abfc26 assets/create/blockstates/calcite_pillar.json
|
||||||
d01a750e6e8214ca8481e40aa69cedeb5c7210f8 assets/create/blockstates/cart_assembler.json
|
d01a750e6e8214ca8481e40aa69cedeb5c7210f8 assets/create/blockstates/cart_assembler.json
|
||||||
470e8c6a9c37b91fa745bc4f6e9d3740bd72467e assets/create/blockstates/chocolate.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
|
a87097f3a092264d9b74966ee9e3bcfc0b743f80 assets/create/blockstates/copper_tile_slab.json
|
||||||
1cc9cdcd48ea76fe3407dce0973220ff9f63f51a assets/create/blockstates/copper_tile_stairs.json
|
1cc9cdcd48ea76fe3407dce0973220ff9f63f51a assets/create/blockstates/copper_tile_stairs.json
|
||||||
cbae7653d6a6f2d98370e9a4a3bd91fdb529f89d assets/create/blockstates/copper_tiles.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
|
b759be6f47fb960a7757b70d194921a38261c90a assets/create/blockstates/creative_crate.json
|
||||||
da3f1203dd0b0096ce19e09705060a0ed0478bee assets/create/blockstates/creative_fluid_tank.json
|
da3f1203dd0b0096ce19e09705060a0ed0478bee assets/create/blockstates/creative_fluid_tank.json
|
||||||
f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_motor.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
|
b496452f2f7dbbba385e1fc10b560ec266e4b5e7 assets/create/blockstates/cyan_sail.json
|
||||||
4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json
|
4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json
|
||||||
8e14112e948e492da8151b773c1fa40bf1467490 assets/create/blockstates/cyan_toolbox.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
|
1726b1b9e04a0634e7e1fdcf1cf4cc898efc5c2f assets/create/blockstates/dark_oak_window.json
|
||||||
50d4627d8e8b5adade12de764ab528ddacfa9ea5 assets/create/blockstates/dark_oak_window_pane.json
|
50d4627d8e8b5adade12de764ab528ddacfa9ea5 assets/create/blockstates/dark_oak_window_pane.json
|
||||||
de0116bf32a26d697a3b999044d6fb0b1b98320e assets/create/blockstates/deepslate_pillar.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
|
7a2259a71fbbbb9491fc1e6a9c935bc9fef14042 assets/create/blockstates/fake_track.json
|
||||||
dd6dadfeb65c4a4c4d1dc92516c411355e90dcca assets/create/blockstates/fluid_pipe.json
|
dd6dadfeb65c4a4c4d1dc92516c411355e90dcca assets/create/blockstates/fluid_pipe.json
|
||||||
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.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
|
95b0775bf4d619ca5b0a42dbdc47c6f2c15d7b3d assets/create/blockstates/flywheel.json
|
||||||
ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json
|
ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json
|
||||||
b5a2e05ed9557992c6093b76e9d80073eb986d5a assets/create/blockstates/framed_glass_door.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
|
5c40c4a27e1dec747a467dd251700c72a6ceb07d assets/create/blockstates/gray_sail.json
|
||||||
a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.json
|
a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.json
|
||||||
191d2cc56af51349688ccb2dea75801a9bc9de85 assets/create/blockstates/gray_toolbox.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
|
497dd226b6520a6d754413508c74b98e50563e2f assets/create/blockstates/green_nixie_tube.json
|
||||||
52b849faef96b8ab9d9d64a1518c8f299af057b8 assets/create/blockstates/green_sail.json
|
52b849faef96b8ab9d9d64a1518c8f299af057b8 assets/create/blockstates/green_sail.json
|
||||||
13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json
|
13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json
|
||||||
e91dcebe132d5b745df0f6c5b1c90d5fc4e8af52 assets/create/blockstates/green_toolbox.json
|
e91dcebe132d5b745df0f6c5b1c90d5fc4e8af52 assets/create/blockstates/green_toolbox.json
|
||||||
f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json
|
f1da8d16c9b0122bda60583a03d2b31ec1c70799 assets/create/blockstates/green_valve_handle.json
|
||||||
6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json
|
823fb70623cb02d2e2c2e4d324ec44e54be93ecd assets/create/blockstates/hand_crank.json
|
||||||
34076c9caafe48daa87cc783e96d4c81b0b164c0 assets/create/blockstates/haunted_bell.json
|
34076c9caafe48daa87cc783e96d4c81b0b164c0 assets/create/blockstates/haunted_bell.json
|
||||||
4572b90f5d6c586e145f2c7a55664c3cb734bd2b assets/create/blockstates/honey.json
|
4572b90f5d6c586e145f2c7a55664c3cb734bd2b assets/create/blockstates/honey.json
|
||||||
be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.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
|
029904f21970947a4423a6e0c8c65c4e02f2e8e6 assets/create/blockstates/light_blue_sail.json
|
||||||
2a0a8b1715700bf1e284ee57ef9f7f163c12f3ee assets/create/blockstates/light_blue_seat.json
|
2a0a8b1715700bf1e284ee57ef9f7f163c12f3ee assets/create/blockstates/light_blue_seat.json
|
||||||
527f32e0d2b5b975cfeb515542098bb2d5224755 assets/create/blockstates/light_blue_toolbox.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
|
bda5c5e9e42b31fdbb819484c74d457ba11fc9a0 assets/create/blockstates/light_gray_nixie_tube.json
|
||||||
93537c4e2ab86218a777e7b000c3fcd55a80b1cd assets/create/blockstates/light_gray_sail.json
|
93537c4e2ab86218a777e7b000c3fcd55a80b1cd assets/create/blockstates/light_gray_sail.json
|
||||||
d9a2551e001bb315d071bb9f1f013323a66a5d09 assets/create/blockstates/light_gray_seat.json
|
d9a2551e001bb315d071bb9f1f013323a66a5d09 assets/create/blockstates/light_gray_seat.json
|
||||||
0c40d13637f00a533175d29ba67559461101ead5 assets/create/blockstates/light_gray_toolbox.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
|
d023ef67d23da0b3e7b221b1b4ddf7f1f0c09ea7 assets/create/blockstates/lime_nixie_tube.json
|
||||||
ba2c4e3ddafa3c89a72cc243b14e8518fab369aa assets/create/blockstates/lime_sail.json
|
ba2c4e3ddafa3c89a72cc243b14e8518fab369aa assets/create/blockstates/lime_sail.json
|
||||||
1de3a88c003df03f5006e1bbaa0236589aba08ad assets/create/blockstates/lime_seat.json
|
1de3a88c003df03f5006e1bbaa0236589aba08ad assets/create/blockstates/lime_seat.json
|
||||||
db46a5b6d0b595293a672236d0a64548b0816cab assets/create/blockstates/lime_toolbox.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
|
e7cb0b25e511610b46dfd219e0cc5ea60a79d56b assets/create/blockstates/limestone.json
|
||||||
bff90a8d674a839b13fd9cd1f78bf3d0ad9fad4f assets/create/blockstates/limestone_pillar.json
|
bff90a8d674a839b13fd9cd1f78bf3d0ad9fad4f assets/create/blockstates/limestone_pillar.json
|
||||||
69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.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
|
85a58ac539775f90903d9ce66374f3f2ffd4fecf assets/create/blockstates/magenta_sail.json
|
||||||
84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json
|
84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json
|
||||||
2334006c152d6773040ca03ef3b3d26a58f0dfa0 assets/create/blockstates/magenta_toolbox.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
|
3b3250d6e209403a93d025604a8081087965016e assets/create/blockstates/mechanical_arm.json
|
||||||
ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json
|
ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json
|
||||||
5586beef2d9183dc34d8e8d2723620c0569592ae assets/create/blockstates/mechanical_crafter.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
|
b0be3d4ff92cb123ec21ec2788db35d0f392ba8a assets/create/blockstates/orange_sail.json
|
||||||
5764a24f6c4fa552b61d2a02135adfc7d93c2e10 assets/create/blockstates/orange_seat.json
|
5764a24f6c4fa552b61d2a02135adfc7d93c2e10 assets/create/blockstates/orange_seat.json
|
||||||
7541e5efb98cddf8cdf62138b674458cda877a4c assets/create/blockstates/orange_toolbox.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
|
8e2028e1a0450a592eed5e10276ba19b1195a206 assets/create/blockstates/ornate_iron_window.json
|
||||||
f59198fd966927e21e9bf76e64de533d05ea893b assets/create/blockstates/ornate_iron_window_pane.json
|
f59198fd966927e21e9bf76e64de533d05ea893b assets/create/blockstates/ornate_iron_window_pane.json
|
||||||
af8601235f08eb2b8104e1fabe352531c24d4992 assets/create/blockstates/oxidized_copper_shingle_slab.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
|
30971f2f76fe56f144178c33ad6bde5fc9fb61c3 assets/create/blockstates/pink_sail.json
|
||||||
919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json
|
919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json
|
||||||
588ebcdb4c1d8d4c75225e92f26d6cf80cac2f15 assets/create/blockstates/pink_toolbox.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
|
975c97018e9e2419943eaab43aed0970e96feaf7 assets/create/blockstates/piston_extension_pole.json
|
||||||
7f008a4a1d6a01c49c3f29d5821295e39ce4a3f5 assets/create/blockstates/placard.json
|
7f008a4a1d6a01c49c3f29d5821295e39ce4a3f5 assets/create/blockstates/placard.json
|
||||||
dae40222478caff3a5337c4f44cceaf5a30d4595 assets/create/blockstates/polished_cut_andesite.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
|
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
||||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
||||||
b78c6057ef94b03f541a17e625b3778ca526a6ad assets/create/blockstates/purple_toolbox.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
|
4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json
|
||||||
e61e77d19c1abe9d76895909ee520e1bf0f7b512 assets/create/blockstates/railway_casing.json
|
e61e77d19c1abe9d76895909ee520e1bf0f7b512 assets/create/blockstates/railway_casing.json
|
||||||
c9ccf6fe4c80357ba2e4d053f5a1b35df4f377a8 assets/create/blockstates/raw_zinc_block.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
|
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
|
||||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
||||||
27fad7876f5a2de16f13dfde16d4a05dfe093989 assets/create/blockstates/red_toolbox.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
|
8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json
|
||||||
c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json
|
c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json
|
||||||
b76ed5f6d271349b2509708c11e713bb299a57b6 assets/create/blockstates/refined_radiance_casing.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
|
70192eb20909ca590e0a851dc7a283bc0899ebe4 assets/create/blockstates/small_veridium_brick_wall.json
|
||||||
4396af91ae23b9783fa34b861e4f01631dd53d49 assets/create/blockstates/small_veridium_bricks.json
|
4396af91ae23b9783fa34b861e4f01631dd53d49 assets/create/blockstates/small_veridium_bricks.json
|
||||||
fa4ffec5eac02c0180226d994d51756e44f85674 assets/create/blockstates/smart_chute.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
|
e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/speedometer.json
|
||||||
1cb7cdbefa0ff199263782809287854b9d85074c assets/create/blockstates/spout.json
|
1cb7cdbefa0ff199263782809287854b9d85074c assets/create/blockstates/spout.json
|
||||||
d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.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
|
512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json
|
||||||
4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json
|
4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json
|
||||||
3695510f11231c8a5c1a0be94a92703e4b5a0f9c assets/create/blockstates/white_toolbox.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
|
c4cd1131113667da0180898b5db3ebad609db8ba assets/create/blockstates/windmill_bearing.json
|
||||||
d4f804f2818376950ef28fc8d6250419f4e12218 assets/create/blockstates/wooden_bracket.json
|
d4f804f2818376950ef28fc8d6250419f4e12218 assets/create/blockstates/wooden_bracket.json
|
||||||
21cbde8ab2ab1bebe8bd36b23d1b480091fa9d57 assets/create/blockstates/yellow_nixie_tube.json
|
21cbde8ab2ab1bebe8bd36b23d1b480091fa9d57 assets/create/blockstates/yellow_nixie_tube.json
|
||||||
e03c48512967845fce09d84b955d3bc7b480fedc assets/create/blockstates/yellow_sail.json
|
e03c48512967845fce09d84b955d3bc7b480fedc assets/create/blockstates/yellow_sail.json
|
||||||
a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json
|
a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json
|
||||||
bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbox.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
|
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||||
f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json
|
f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json
|
||||||
11fd391ac3015f4dace8138ab1ec423ee822c7b4 assets/create/lang/en_us.json
|
c219c77242e645f32704201dd80e279b3759b794 assets/create/lang/en_us.json
|
||||||
34ab109f0935b7d0a7dd306188e0bd3056a77f93 assets/create/lang/unfinished/de_de.json
|
cf37534c3f98098f42b181083fd7cc1063ac2bbb assets/create/lang/unfinished/de_de.json
|
||||||
b5487949ee53302706c15051157316bb60dfa070 assets/create/lang/unfinished/es_cl.json
|
83d427726fdc38ec3c5b8c3c0f6f87f49d3e5ff3 assets/create/lang/unfinished/es_cl.json
|
||||||
6df40ff1c18bfb83a33bc17e4458feeeee058bf1 assets/create/lang/unfinished/es_es.json
|
d21caeb0cbe871e38dc101c34ab89ece3cbe2127 assets/create/lang/unfinished/es_es.json
|
||||||
bca24c29adf91e0ee09db39783c59fac843acb46 assets/create/lang/unfinished/fr_fr.json
|
2215688baa2b0beffe0c19f71a3238df1d01b0c1 assets/create/lang/unfinished/fr_fr.json
|
||||||
d7b53a16d03be2f854dfba1e90e2a149c2abecbd assets/create/lang/unfinished/it_it.json
|
79484f2c3eba2b40f5d82ffdc3abeb3d2e6962d2 assets/create/lang/unfinished/it_it.json
|
||||||
42a6713a509ecd676e7eae6e6492da1e20e79102 assets/create/lang/unfinished/ja_jp.json
|
d659570c9dc89653f03cd4cc82ed50db443638d8 assets/create/lang/unfinished/ja_jp.json
|
||||||
38e01a060e0e468a51b1ca4f0bcbec203837ce04 assets/create/lang/unfinished/ko_kr.json
|
03c30521d9b1bc7a6eb85d2a59a4c4676dca581e assets/create/lang/unfinished/ko_kr.json
|
||||||
83d812a1003fa3f25a3c28bbf54bf93f583c594a assets/create/lang/unfinished/nl_nl.json
|
3a56d579d022cc1b20746e9d3a1483e6fa8fb4be assets/create/lang/unfinished/nl_nl.json
|
||||||
c8c60fe2405f37cce7309326fb62cdb9aa1b49ff assets/create/lang/unfinished/pl_pl.json
|
d5bfeacb442236c8b075fddb41364f85c8cb7feb assets/create/lang/unfinished/pl_pl.json
|
||||||
11b3809e9c4c3c61687f7789979fdbf2332fd6a4 assets/create/lang/unfinished/pt_br.json
|
0f3f51d065d896a7e3b4abd8c2801fa3e8fbd8c3 assets/create/lang/unfinished/pt_br.json
|
||||||
dd52b8df6ea92c1218e398197a1cedae066b4e0e assets/create/lang/unfinished/pt_pt.json
|
9f2ec0b2f8fa9b380c7edb56bfb806bcce621cce assets/create/lang/unfinished/pt_pt.json
|
||||||
954a947034232204bd415e4bfb6c59a3a448b604 assets/create/lang/unfinished/ro_ro.json
|
1f88f0d91bdf5c68224cb65249f77272771939c9 assets/create/lang/unfinished/ro_ro.json
|
||||||
54a92b2d667b55675c694904752760b594ab1424 assets/create/lang/unfinished/ru_ru.json
|
928ac3ad2ab5e7fa3d582b8b956258c110bea868 assets/create/lang/unfinished/ru_ru.json
|
||||||
2f084cc7b66fe4ea82f5ac3338a1245caf67c54d assets/create/lang/unfinished/uk_ua.json
|
ed29ef4ae8f3633533485d56f7fa8cb77b790a0a assets/create/lang/unfinished/uk_ua.json
|
||||||
82490ac29a0c35c07cde11c340634bf8b416b6a3 assets/create/lang/unfinished/zh_cn.json
|
e5cf7b657be816bc15b331dd058f7ccdabee8c14 assets/create/lang/unfinished/zh_cn.json
|
||||||
426b06805f08ef3fed15f404e9637b2d7082d660 assets/create/lang/unfinished/zh_tw.json
|
316dae07f95fb65c984fe7c424b566eb8ddba5f9 assets/create/lang/unfinished/zh_tw.json
|
||||||
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
||||||
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
||||||
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.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
|
74f4ba5f6f61c30e27947c6fb4557e888d018285 data/create/tags/blocks/safe_nbt.json
|
||||||
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
|
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
|
||||||
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json
|
d063e12c9ef75f39518c6d129ea35d833464d547 data/create/tags/blocks/toolboxes.json
|
||||||
|
8861f982c335a1f17796df4af53a7d5dc91fc85a data/create/tags/blocks/tree_attachments.json
|
||||||
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
|
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
|
||||||
eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json
|
eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails.json
|
||||||
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json
|
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/windowable.json
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/black_valve_handle",
|
"model": "create:block/black_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/black_valve_handle"
|
"model": "create:block/black_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/black_valve_handle",
|
"model": "create:block/black_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/black_valve_handle",
|
"model": "create:block/black_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/black_valve_handle",
|
"model": "create:block/black_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/black_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/blue_valve_handle",
|
"model": "create:block/blue_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/blue_valve_handle"
|
"model": "create:block/blue_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/blue_valve_handle",
|
"model": "create:block/blue_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/blue_valve_handle",
|
"model": "create:block/blue_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/blue_valve_handle",
|
"model": "create:block/blue_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/blue_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/brown_valve_handle",
|
"model": "create:block/brown_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/brown_valve_handle"
|
"model": "create:block/brown_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/brown_valve_handle",
|
"model": "create:block/brown_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/brown_valve_handle",
|
"model": "create:block/brown_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/brown_valve_handle",
|
"model": "create:block/brown_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/brown_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/copper_valve_handle",
|
"model": "create:block/copper_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/copper_valve_handle"
|
"model": "create:block/copper_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/copper_valve_handle",
|
"model": "create:block/copper_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/copper_valve_handle",
|
"model": "create:block/copper_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/copper_valve_handle",
|
"model": "create:block/copper_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/copper_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/cyan_valve_handle",
|
"model": "create:block/cyan_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/cyan_valve_handle"
|
"model": "create:block/cyan_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/cyan_valve_handle",
|
"model": "create:block/cyan_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/cyan_valve_handle",
|
"model": "create:block/cyan_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/cyan_valve_handle",
|
"model": "create:block/cyan_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/cyan_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,98 +1,194 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"x": 270,
|
"x": 270,
|
||||||
"y": 90
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"x": 270
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"x": 270,
|
"x": 270,
|
||||||
"y": 90
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"x": 270
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"x": 90
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"x": 90
|
"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",
|
"model": "create:block/fluid_valve/block_vertical_closed",
|
||||||
"y": 180
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"y": 180
|
"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",
|
"model": "create:block/fluid_valve/block_vertical_open",
|
||||||
"y": 180
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"y": 180
|
"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"
|
"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"
|
"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"
|
"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"
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"y": 90
|
"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",
|
"model": "create:block/fluid_valve/block_vertical_closed",
|
||||||
"y": 90
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"y": 90
|
"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",
|
"model": "create:block/fluid_valve/block_vertical_open",
|
||||||
"y": 90
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_closed",
|
||||||
"y": 270
|
"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",
|
"model": "create:block/fluid_valve/block_vertical_closed",
|
||||||
"y": 270
|
"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",
|
"model": "create:block/fluid_valve/block_horizontal_open",
|
||||||
"y": 270
|
"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",
|
"model": "create:block/fluid_valve/block_vertical_open",
|
||||||
"y": 270
|
"y": 270
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/gray_valve_handle",
|
"model": "create:block/gray_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/gray_valve_handle"
|
"model": "create:block/gray_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/gray_valve_handle",
|
"model": "create:block/gray_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/gray_valve_handle",
|
"model": "create:block/gray_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/gray_valve_handle",
|
"model": "create:block/gray_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/gray_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/green_valve_handle",
|
"model": "create:block/green_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/green_valve_handle"
|
"model": "create:block/green_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/green_valve_handle",
|
"model": "create:block/green_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/green_valve_handle",
|
"model": "create:block/green_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/green_valve_handle",
|
"model": "create:block/green_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/green_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/hand_crank/block",
|
"model": "create:block/hand_crank/block",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/hand_crank/block"
|
"model": "create:block/hand_crank/block"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/hand_crank/block",
|
"model": "create:block/hand_crank/block",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/hand_crank/block",
|
"model": "create:block/hand_crank/block",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/hand_crank/block",
|
"model": "create:block/hand_crank/block",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/hand_crank/block",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/light_blue_valve_handle",
|
"model": "create:block/light_blue_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/light_blue_valve_handle"
|
"model": "create:block/light_blue_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/light_blue_valve_handle",
|
"model": "create:block/light_blue_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/light_blue_valve_handle",
|
"model": "create:block/light_blue_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/light_blue_valve_handle",
|
"model": "create:block/light_blue_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/light_blue_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/light_gray_valve_handle",
|
"model": "create:block/light_gray_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/light_gray_valve_handle"
|
"model": "create:block/light_gray_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/light_gray_valve_handle",
|
"model": "create:block/light_gray_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/light_gray_valve_handle",
|
"model": "create:block/light_gray_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/light_gray_valve_handle",
|
"model": "create:block/light_gray_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/light_gray_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/lime_valve_handle",
|
"model": "create:block/lime_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/lime_valve_handle"
|
"model": "create:block/lime_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/lime_valve_handle",
|
"model": "create:block/lime_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/lime_valve_handle",
|
"model": "create:block/lime_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/lime_valve_handle",
|
"model": "create:block/lime_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/lime_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/magenta_valve_handle",
|
"model": "create:block/magenta_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/magenta_valve_handle"
|
"model": "create:block/magenta_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/magenta_valve_handle",
|
"model": "create:block/magenta_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/magenta_valve_handle",
|
"model": "create:block/magenta_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/magenta_valve_handle",
|
"model": "create:block/magenta_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/magenta_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/orange_valve_handle",
|
"model": "create:block/orange_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/orange_valve_handle"
|
"model": "create:block/orange_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/orange_valve_handle",
|
"model": "create:block/orange_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/orange_valve_handle",
|
"model": "create:block/orange_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/orange_valve_handle",
|
"model": "create:block/orange_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/orange_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/pink_valve_handle",
|
"model": "create:block/pink_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/pink_valve_handle"
|
"model": "create:block/pink_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/pink_valve_handle",
|
"model": "create:block/pink_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/pink_valve_handle",
|
"model": "create:block/pink_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/pink_valve_handle",
|
"model": "create:block/pink_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/pink_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/purple_valve_handle",
|
"model": "create:block/purple_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/purple_valve_handle"
|
"model": "create:block/purple_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/purple_valve_handle",
|
"model": "create:block/purple_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/purple_valve_handle",
|
"model": "create:block/purple_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/purple_valve_handle",
|
"model": "create:block/purple_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/purple_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/red_valve_handle",
|
"model": "create:block/red_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/red_valve_handle"
|
"model": "create:block/red_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/red_valve_handle",
|
"model": "create:block/red_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/red_valve_handle",
|
"model": "create:block/red_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/red_valve_handle",
|
"model": "create:block/red_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/red_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,54 +1,107 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"face=floor,facing=north": {
|
"face=floor,facing=north,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"face=wall,facing=north": {
|
"face=wall,facing=north,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 270,
|
"x": 270,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"face=ceiling,facing=north": {
|
"face=ceiling,facing=north,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"face=floor,facing=south": {
|
"face=floor,facing=south,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block"
|
"model": "create:block/smart_fluid_pipe/block"
|
||||||
},
|
},
|
||||||
"face=wall,facing=south": {
|
"face=wall,facing=south,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 270
|
"x": 270
|
||||||
},
|
},
|
||||||
"face=ceiling,facing=south": {
|
"face=ceiling,facing=south,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 180,
|
"x": 180,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"face=floor,facing=west": {
|
"face=floor,facing=west,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"y": 90
|
"y": 90
|
||||||
},
|
},
|
||||||
"face=wall,facing=west": {
|
"face=wall,facing=west,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 270,
|
"x": 270,
|
||||||
"y": 90
|
"y": 90
|
||||||
},
|
},
|
||||||
"face=ceiling,facing=west": {
|
"face=ceiling,facing=west,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 180,
|
"x": 180,
|
||||||
"y": 270
|
"y": 270
|
||||||
},
|
},
|
||||||
"face=floor,facing=east": {
|
"face=floor,facing=east,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"y": 270
|
"y": 270
|
||||||
},
|
},
|
||||||
"face=wall,facing=east": {
|
"face=wall,facing=east,waterlogged=false": {
|
||||||
"model": "create:block/smart_fluid_pipe/block",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 270,
|
"x": 270,
|
||||||
"y": 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",
|
"model": "create:block/smart_fluid_pipe/block",
|
||||||
"x": 180,
|
"x": 180,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/white_valve_handle",
|
"model": "create:block/white_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/white_valve_handle"
|
"model": "create:block/white_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/white_valve_handle",
|
"model": "create:block/white_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/white_valve_handle",
|
"model": "create:block/white_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/white_valve_handle",
|
"model": "create:block/white_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/white_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1,27 +1,53 @@
|
||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"facing=down": {
|
"facing=down,waterlogged=false": {
|
||||||
"model": "create:block/yellow_valve_handle",
|
"model": "create:block/yellow_valve_handle",
|
||||||
"x": 180
|
"x": 180
|
||||||
},
|
},
|
||||||
"facing=up": {
|
"facing=up,waterlogged=false": {
|
||||||
"model": "create:block/yellow_valve_handle"
|
"model": "create:block/yellow_valve_handle"
|
||||||
},
|
},
|
||||||
"facing=north": {
|
"facing=north,waterlogged=false": {
|
||||||
"model": "create:block/yellow_valve_handle",
|
"model": "create:block/yellow_valve_handle",
|
||||||
"x": 90
|
"x": 90
|
||||||
},
|
},
|
||||||
"facing=south": {
|
"facing=south,waterlogged=false": {
|
||||||
"model": "create:block/yellow_valve_handle",
|
"model": "create:block/yellow_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 180
|
"y": 180
|
||||||
},
|
},
|
||||||
"facing=west": {
|
"facing=west,waterlogged=false": {
|
||||||
"model": "create:block/yellow_valve_handle",
|
"model": "create:block/yellow_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 270
|
"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",
|
"model": "create:block/yellow_valve_handle",
|
||||||
"x": 90,
|
"x": 90,
|
||||||
"y": 90
|
"y": 90
|
||||||
|
|
|
@ -1484,6 +1484,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "exactly",
|
"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.x_units_of_item": "%1$s %2$s of %3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "Matching Content",
|
"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.item_measure": "Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "Items",
|
"create.schedule.condition.threshold.items": "Items",
|
||||||
"create.schedule.condition.threshold.stacks": "Stacks",
|
"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.status": "Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "Reference Item",
|
"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_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.fluid_threshold": "Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "Redstone Link",
|
"create.schedule.condition.redstone_link": "Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 840",
|
"_": "Missing Localizations: 842",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "genau",
|
"create.schedule.condition.threshold.equal": "genau",
|
||||||
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$s %3$s",
|
"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.matching_content": "passender Inhalt",
|
||||||
|
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
|
||||||
"create.schedule.condition.threshold.item_measure": "Maßeinheit",
|
"create.schedule.condition.threshold.item_measure": "Maßeinheit",
|
||||||
"create.schedule.condition.threshold.items": "Items",
|
"create.schedule.condition.threshold.items": "Items",
|
||||||
"create.schedule.condition.threshold.stacks": "Stacks",
|
"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.status": "Zugladestand: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "Referenz-Item",
|
"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_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.fluid_threshold": "Flüssigkeitsladestand",
|
||||||
"create.schedule.condition.item_threshold": "Item-Ladestand",
|
"create.schedule.condition.item_threshold": "Item-Ladestand",
|
||||||
"create.schedule.condition.redstone_link": "Redstone-Link",
|
"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.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.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.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.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.opposite_driver": "Pfad erfordert einen in die andere Richtung zeigenden Fahrer",
|
||||||
"create.train.status.missing_driver": "Fahrer ist verschwunden",
|
"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.platform_column": "Spalte 'Gleis' Größe",
|
||||||
"create.display_source.station_summary.now": "jetzt",
|
"create.display_source.station_summary.now": "jetzt",
|
||||||
"create.display_source.station_summary.minutes": "min",
|
"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.observed_train_name": "Zugnamen ermitteln",
|
||||||
"create.display_source.max_enchant_level": "Max. Verzauberungskosten",
|
"create.display_source.max_enchant_level": "Max. Verzauberungskosten",
|
||||||
"create.display_source.boiler_status": "Kesselstatus",
|
"create.display_source.boiler_status": "Kesselstatus",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 986",
|
"_": "Missing Localizations: 988",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 6",
|
"_": "Missing Localizations: 8",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "exactamente",
|
"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.x_units_of_item": "%1$s %2$s de %3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "Contenido coincidente",
|
"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.item_measure": "Medición de objetos",
|
||||||
"create.schedule.condition.threshold.items": "Objetos",
|
"create.schedule.condition.threshold.items": "Objetos",
|
||||||
"create.schedule.condition.threshold.stacks": "Pilas de 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.status": "Cargamento: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "Objeto de referencia",
|
"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_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.fluid_threshold": "Condición de cargamento de fluidos",
|
||||||
"create.schedule.condition.item_threshold": "Condición de cargamento de objetos",
|
"create.schedule.condition.item_threshold": "Condición de cargamento de objetos",
|
||||||
"create.schedule.condition.redstone_link": "Enlace de redstone",
|
"create.schedule.condition.redstone_link": "Enlace de redstone",
|
||||||
|
|
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 6",
|
"_": "Missing Localizations: 2",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -22,13 +22,13 @@
|
||||||
"block.create.belt": "Nastro",
|
"block.create.belt": "Nastro",
|
||||||
"block.create.birch_window": "Finestra di betulla",
|
"block.create.birch_window": "Finestra di betulla",
|
||||||
"block.create.birch_window_pane": "Pannello di 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_sail": "Vela nera",
|
||||||
"block.create.black_seat": "Sedile nero",
|
"block.create.black_seat": "Sedile nero",
|
||||||
"block.create.black_toolbox": "Cassetta degli attrezzi nera",
|
"block.create.black_toolbox": "Cassetta degli attrezzi nera",
|
||||||
"block.create.black_valve_handle": "Maniglia per valvola nera",
|
"block.create.black_valve_handle": "Maniglia per valvola nera",
|
||||||
"block.create.blaze_burner": "Inceneritore a blaze",
|
"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_sail": "Vela blu",
|
||||||
"block.create.blue_seat": "Sedile blu",
|
"block.create.blue_seat": "Sedile blu",
|
||||||
"block.create.blue_toolbox": "Cassetta degli attrezzi blu",
|
"block.create.blue_toolbox": "Cassetta degli attrezzi blu",
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
"block.create.brass_funnel": "Imbuto di ottone",
|
"block.create.brass_funnel": "Imbuto di ottone",
|
||||||
"block.create.brass_ladder": "Scala a pioli in ottone",
|
"block.create.brass_ladder": "Scala a pioli in ottone",
|
||||||
"block.create.brass_tunnel": "Tunnel di 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_sail": "Vela marrone",
|
||||||
"block.create.brown_seat": "Sedile marrone",
|
"block.create.brown_seat": "Sedile marrone",
|
||||||
"block.create.brown_toolbox": "Cassetta degli attrezzi 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_slab": "Lastra di veridio tagliato",
|
||||||
"block.create.cut_veridium_stairs": "Scalini di veridio tagliato",
|
"block.create.cut_veridium_stairs": "Scalini di veridio tagliato",
|
||||||
"block.create.cut_veridium_wall": "Muretto 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_sail": "Vela ciano",
|
||||||
"block.create.cyan_seat": "Sedile ciano",
|
"block.create.cyan_seat": "Sedile ciano",
|
||||||
"block.create.cyan_toolbox": "Cassetta degli attrezzi ciano",
|
"block.create.cyan_toolbox": "Cassetta degli attrezzi ciano",
|
||||||
|
@ -228,12 +228,12 @@
|
||||||
"block.create.gearshift": "Cambio",
|
"block.create.gearshift": "Cambio",
|
||||||
"block.create.glass_fluid_pipe": "Tubo per fluidi con vetrata",
|
"block.create.glass_fluid_pipe": "Tubo per fluidi con vetrata",
|
||||||
"block.create.granite_pillar": "Pilastro di granito",
|
"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_sail": "Vela grigia",
|
||||||
"block.create.gray_seat": "Sedile grigio",
|
"block.create.gray_seat": "Sedile grigio",
|
||||||
"block.create.gray_toolbox": "Cassetta degli attrezzi grigia",
|
"block.create.gray_toolbox": "Cassetta degli attrezzi grigia",
|
||||||
"block.create.gray_valve_handle": "Maniglia per valvola 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_sail": "Vela verde",
|
||||||
"block.create.green_seat": "Sedile verde",
|
"block.create.green_seat": "Sedile verde",
|
||||||
"block.create.green_toolbox": "Cassetta degli attrezzi verde",
|
"block.create.green_toolbox": "Cassetta degli attrezzi verde",
|
||||||
|
@ -265,17 +265,17 @@
|
||||||
"block.create.layered_tuff": "Tufo stratificato",
|
"block.create.layered_tuff": "Tufo stratificato",
|
||||||
"block.create.layered_veridium": "Veridio stratificato",
|
"block.create.layered_veridium": "Veridio stratificato",
|
||||||
"block.create.lectern_controller": "Leggio con pulsantiera",
|
"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_sail": "Vela azzurra",
|
||||||
"block.create.light_blue_seat": "Sedile azzurro",
|
"block.create.light_blue_seat": "Sedile azzurro",
|
||||||
"block.create.light_blue_toolbox": "Cassetta degli attrezzi azzurra",
|
"block.create.light_blue_toolbox": "Cassetta degli attrezzi azzurra",
|
||||||
"block.create.light_blue_valve_handle": "Maniglia per valvola 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_sail": "Vela grigio chiaro",
|
||||||
"block.create.light_gray_seat": "Sedile grigio chiaro",
|
"block.create.light_gray_seat": "Sedile grigio chiaro",
|
||||||
"block.create.light_gray_toolbox": "Cassetta degli attrezzi grigia chiaro",
|
"block.create.light_gray_toolbox": "Cassetta degli attrezzi grigia chiaro",
|
||||||
"block.create.light_gray_valve_handle": "Maniglia per valvola grigio 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_sail": "Vela lime",
|
||||||
"block.create.lime_seat": "Sedile lime",
|
"block.create.lime_seat": "Sedile lime",
|
||||||
"block.create.lime_toolbox": "Cassetta degli attrezzi lime",
|
"block.create.lime_toolbox": "Cassetta degli attrezzi lime",
|
||||||
|
@ -284,7 +284,7 @@
|
||||||
"block.create.limestone_pillar": "Pilastro di calcare",
|
"block.create.limestone_pillar": "Pilastro di calcare",
|
||||||
"block.create.linear_chassis": "Telaio lineare",
|
"block.create.linear_chassis": "Telaio lineare",
|
||||||
"block.create.lit_blaze_burner": "Inceneritore a blaze acceso",
|
"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_sail": "Vela magenta",
|
||||||
"block.create.magenta_seat": "Sedile magenta",
|
"block.create.magenta_seat": "Sedile magenta",
|
||||||
"block.create.magenta_toolbox": "Cassetta degli attrezzi magenta",
|
"block.create.magenta_toolbox": "Cassetta degli attrezzi magenta",
|
||||||
|
@ -307,7 +307,7 @@
|
||||||
"block.create.millstone": "Macina",
|
"block.create.millstone": "Macina",
|
||||||
"block.create.minecart_anchor": "Ancora per carrello da miniera",
|
"block.create.minecart_anchor": "Ancora per carrello da miniera",
|
||||||
"block.create.mysterious_cuckoo_clock": "Orologio a cucù misterioso",
|
"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.nozzle": "Dispersore",
|
||||||
"block.create.oak_window": "Finestra di quercia",
|
"block.create.oak_window": "Finestra di quercia",
|
||||||
"block.create.oak_window_pane": "Pannello di 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_tile_stairs": "Scalini di mattonelle di rame ossidato",
|
||||||
"block.create.oxidized_copper_tiles": "Mattonelle di rame ossidato",
|
"block.create.oxidized_copper_tiles": "Mattonelle di rame ossidato",
|
||||||
"block.create.peculiar_bell": "Campana peculiare",
|
"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_sail": "Vela rosa",
|
||||||
"block.create.pink_seat": "Sedile rosa",
|
"block.create.pink_seat": "Sedile rosa",
|
||||||
"block.create.pink_toolbox": "Cassetta degli attrezzi rosa",
|
"block.create.pink_toolbox": "Cassetta degli attrezzi rosa",
|
||||||
|
@ -397,7 +397,7 @@
|
||||||
"block.create.pulley_magnet": "Magnete della carrucola",
|
"block.create.pulley_magnet": "Magnete della carrucola",
|
||||||
"block.create.pulse_extender": "Estensore di impulsi",
|
"block.create.pulse_extender": "Estensore di impulsi",
|
||||||
"block.create.pulse_repeater": "Ripetitore 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_sail": "Vela viola",
|
||||||
"block.create.purple_seat": "Sedile viola",
|
"block.create.purple_seat": "Sedile viola",
|
||||||
"block.create.purple_toolbox": "Cassetta degli attrezzi viola",
|
"block.create.purple_toolbox": "Cassetta degli attrezzi viola",
|
||||||
|
@ -405,7 +405,7 @@
|
||||||
"block.create.radial_chassis": "Telaio radiale",
|
"block.create.radial_chassis": "Telaio radiale",
|
||||||
"block.create.railway_casing": "Rivestimento di treno",
|
"block.create.railway_casing": "Rivestimento di treno",
|
||||||
"block.create.raw_zinc_block": "Blocco di zinco grezzo",
|
"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_sail": "Vela rossa",
|
||||||
"block.create.red_seat": "Sedile rosso",
|
"block.create.red_seat": "Sedile rosso",
|
||||||
"block.create.red_toolbox": "Cassetta degli attrezzi rossa",
|
"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_tile_stairs": "Scalini di mattonelle di rame corroso",
|
||||||
"block.create.weathered_copper_tiles": "Mattonelle di rame corroso",
|
"block.create.weathered_copper_tiles": "Mattonelle di rame corroso",
|
||||||
"block.create.weighted_ejector": "Espulsore di pesi",
|
"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_sail": "Vela bianca",
|
||||||
"block.create.white_seat": "Sedile bianco",
|
"block.create.white_seat": "Sedile bianco",
|
||||||
"block.create.white_toolbox": "Cassetta degli attrezzi bianca",
|
"block.create.white_toolbox": "Cassetta degli attrezzi bianca",
|
||||||
"block.create.white_valve_handle": "Maniglia per valvola bianca",
|
"block.create.white_valve_handle": "Maniglia per valvola bianca",
|
||||||
"block.create.windmill_bearing": "Supporto per mulino a vento",
|
"block.create.windmill_bearing": "Supporto per mulino a vento",
|
||||||
"block.create.wooden_bracket": "Supporto di legno",
|
"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_sail": "Vela gialla",
|
||||||
"block.create.yellow_seat": "Sedile giallo",
|
"block.create.yellow_seat": "Sedile giallo",
|
||||||
"block.create.yellow_toolbox": "Cassetta degli attrezzi gialla",
|
"block.create.yellow_toolbox": "Cassetta degli attrezzi gialla",
|
||||||
|
@ -1260,8 +1260,8 @@
|
||||||
"create.item_attributes.smokable.inverted": "non può essere affumicato",
|
"create.item_attributes.smokable.inverted": "non può essere affumicato",
|
||||||
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
|
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
|
||||||
"create.item_attributes.blastable.inverted": "non è 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": "può essere gettato in una compstiera",
|
||||||
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
|
"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": "è uno shulker %1$s",
|
||||||
"create.item_attributes.shulker_level.inverted": "non è uno shulker %1$s",
|
"create.item_attributes.shulker_level.inverted": "non è uno shulker %1$s",
|
||||||
"create.item_attributes.shulker_level.full": "pieno",
|
"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_up": "Il ventilatore tira da sopra",
|
||||||
"create.tooltip.chute.fans_pull_down": "Il ventilatore tira da sotto",
|
"create.tooltip.chute.fans_pull_down": "Il ventilatore tira da sotto",
|
||||||
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
|
"create.tooltip.chute.contains": "Contiene: %1$s x%2$s",
|
||||||
"create.tooltip.deployer.header": "UNLOCALIZED: Deployer Information",
|
"create.tooltip.deployer.header": "Informazioni sull'Installatore",
|
||||||
"create.tooltip.deployer.using": "UNLOCALIZED: Mode: Use",
|
"create.tooltip.deployer.using": "Modalità: Utilizzo",
|
||||||
"create.tooltip.deployer.punching": "UNLOCALIZED: Mode: Attack",
|
"create.tooltip.deployer.punching": "Modalità: Attacco",
|
||||||
"create.tooltip.deployer.contains": "UNLOCALIZED: Item: %1$s x%2$s",
|
"create.tooltip.deployer.contains": "Oggetto: %1$s x%2$s",
|
||||||
"create.tooltip.brass_tunnel.contains": "Sta distribuendo:",
|
"create.tooltip.brass_tunnel.contains": "Sta distribuendo:",
|
||||||
"create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s",
|
"create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s",
|
||||||
"create.tooltip.brass_tunnel.retrieve": "Click destro per recuperare",
|
"create.tooltip.brass_tunnel.retrieve": "Click destro per recuperare",
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "esattamente",
|
"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.x_units_of_item": "%1$s %2$s di %3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "Contenuto corrispondente",
|
"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.item_measure": "Misura",
|
||||||
"create.schedule.condition.threshold.items": "Oggetti",
|
"create.schedule.condition.threshold.items": "Oggetti",
|
||||||
"create.schedule.condition.threshold.stacks": "Stack",
|
"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.status": "Carico: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "Oggetto di riferimento",
|
"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_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.fluid_threshold": "Carico di fluidi",
|
||||||
"create.schedule.condition.item_threshold": "Carico di oggetti",
|
"create.schedule.condition.item_threshold": "Carico di oggetti",
|
||||||
"create.schedule.condition.redstone_link": "Connessione redstone",
|
"create.schedule.condition.redstone_link": "Connessione redstone",
|
||||||
|
@ -1651,7 +1653,7 @@
|
||||||
"create.display_source.list_items": "Lista di oggetti filtrati",
|
"create.display_source.list_items": "Lista di oggetti filtrati",
|
||||||
"create.display_source.fluid_amount": "Quantità di fluidi filtrati",
|
"create.display_source.fluid_amount": "Quantità di fluidi filtrati",
|
||||||
"create.display_source.list_fluids": "Lista 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": "Livello di riempimento",
|
||||||
"create.display_source.fill_level.display": "Formato di visualizzazione",
|
"create.display_source.fill_level.display": "Formato di visualizzazione",
|
||||||
"create.display_source.fill_level.percent": "Percentuale",
|
"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_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.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!"
|
"_": "Thank you for translating Create!"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2",
|
"_": "Missing Localizations: 4",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "ぴったり",
|
"create.schedule.condition.threshold.equal": "ぴったり",
|
||||||
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$sの%3$s",
|
"create.schedule.condition.threshold.x_units_of_item": "%1$s %2$sの%3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "一致する貨物",
|
"create.schedule.condition.threshold.matching_content": "一致する貨物",
|
||||||
|
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
|
||||||
"create.schedule.condition.threshold.item_measure": "アイテム単位",
|
"create.schedule.condition.threshold.item_measure": "アイテム単位",
|
||||||
"create.schedule.condition.threshold.items": "個",
|
"create.schedule.condition.threshold.items": "個",
|
||||||
"create.schedule.condition.threshold.stacks": "スタック",
|
"create.schedule.condition.threshold.stacks": "スタック",
|
||||||
|
@ -1492,6 +1493,7 @@
|
||||||
"create.schedule.condition.threshold.status": "貨物: %1$s/%2$s%3$s",
|
"create.schedule.condition.threshold.status": "貨物: %1$s/%2$s%3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "参照アイテム",
|
"create.schedule.condition.threshold.place_item": "参照アイテム",
|
||||||
"create.schedule.condition.threshold.place_item_2": "フィルターも使えます",
|
"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.fluid_threshold": "液体貨物の状態",
|
||||||
"create.schedule.condition.item_threshold": "アイテム貨物の状態",
|
"create.schedule.condition.item_threshold": "アイテム貨物の状態",
|
||||||
"create.schedule.condition.redstone_link": "レッドストーンリンク",
|
"create.schedule.condition.redstone_link": "レッドストーンリンク",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 6",
|
"_": "Missing Localizations: 8",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "다음과 동일하면",
|
"create.schedule.condition.threshold.equal": "다음과 동일하면",
|
||||||
"create.schedule.condition.threshold.x_units_of_item": "%3$s %1$s %2$s",
|
"create.schedule.condition.threshold.x_units_of_item": "%3$s %1$s %2$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "내용물 일치",
|
"create.schedule.condition.threshold.matching_content": "내용물 일치",
|
||||||
|
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
|
||||||
"create.schedule.condition.threshold.item_measure": "아이템 단위",
|
"create.schedule.condition.threshold.item_measure": "아이템 단위",
|
||||||
"create.schedule.condition.threshold.items": "개",
|
"create.schedule.condition.threshold.items": "개",
|
||||||
"create.schedule.condition.threshold.stacks": "스택",
|
"create.schedule.condition.threshold.stacks": "스택",
|
||||||
|
@ -1492,6 +1493,7 @@
|
||||||
"create.schedule.condition.threshold.status": "저장소: %1$s/%2$s %3$s",
|
"create.schedule.condition.threshold.status": "저장소: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "기준 아이템",
|
"create.schedule.condition.threshold.place_item": "기준 아이템",
|
||||||
"create.schedule.condition.threshold.place_item_2": "필터를 사용할 수 있음",
|
"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.fluid_threshold": "액체 저장소 조건",
|
||||||
"create.schedule.condition.item_threshold": "아이템 저장소 조건",
|
"create.schedule.condition.item_threshold": "아이템 저장소 조건",
|
||||||
"create.schedule.condition.redstone_link": "레드스톤 링크",
|
"create.schedule.condition.redstone_link": "레드스톤 링크",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2485",
|
"_": "Missing Localizations: 2487",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 10",
|
"_": "Missing Localizations: 12",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -564,14 +564,14 @@
|
||||||
"block.create.zinc_block": "Blok cynku",
|
"block.create.zinc_block": "Blok cynku",
|
||||||
"block.create.zinc_ore": "Złoże cynku",
|
"block.create.zinc_ore": "Złoże cynku",
|
||||||
|
|
||||||
"enchantment.create.capacity": "Pojameność",
|
"enchantment.create.capacity": "Pojemność",
|
||||||
"enchantment.create.potato_recovery": "Odzyskiwanie",
|
"enchantment.create.potato_recovery": "Odzyskiwanie",
|
||||||
|
|
||||||
"entity.create.carriage_contraption": "Maszyna wagonowa",
|
"entity.create.carriage_contraption": "Maszyna wagonowa",
|
||||||
"entity.create.contraption": "Maszyna",
|
"entity.create.contraption": "Maszyna",
|
||||||
"entity.create.crafting_blueprint": "Szablon konstruowania",
|
"entity.create.crafting_blueprint": "Szablon konstruowania",
|
||||||
"entity.create.gantry_contraption": "Maszyna suwnicowa",
|
"entity.create.gantry_contraption": "Maszyna suwnicowa",
|
||||||
"entity.create.potato_projectile": "Zimniaczany pocisk",
|
"entity.create.potato_projectile": "Ziemniaczany pocisk",
|
||||||
"entity.create.seat": "Siedzenie",
|
"entity.create.seat": "Siedzenie",
|
||||||
"entity.create.stationary_contraption": "Maszyna stacjonarna",
|
"entity.create.stationary_contraption": "Maszyna stacjonarna",
|
||||||
"entity.create.super_glue": "Super Glue",
|
"entity.create.super_glue": "Super Glue",
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "dokładnie",
|
"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.x_units_of_item": "%1$s %2$s: %3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "Pasująca zawartość",
|
"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.item_measure": "Jednostka przedmiotów",
|
||||||
"create.schedule.condition.threshold.items": "Przemioty",
|
"create.schedule.condition.threshold.items": "Przemioty",
|
||||||
"create.schedule.condition.threshold.stacks": "Stosy",
|
"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.status": "Ładunek: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "Przedmiot odniesienia",
|
"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_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.fluid_threshold": "Warunek ładunku płynów",
|
||||||
"create.schedule.condition.item_threshold": "Warunek ładunku przedmiotów",
|
"create.schedule.condition.item_threshold": "Warunek ładunku przedmiotów",
|
||||||
"create.schedule.condition.redstone_link": "Emiter sygnału",
|
"create.schedule.condition.redstone_link": "Emiter sygnału",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1329",
|
"_": "Missing Localizations: 1331",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2194",
|
"_": "Missing Localizations: 2196",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 653",
|
"_": "Missing Localizations: 655",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"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 [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "UNLOCALIZED: exactly",
|
"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.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.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.item_measure": "UNLOCALIZED: Item Measure",
|
||||||
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
"create.schedule.condition.threshold.items": "UNLOCALIZED: Items",
|
||||||
"create.schedule.condition.threshold.stacks": "UNLOCALIZED: Stacks",
|
"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.status": "UNLOCALIZED: Cargo: %1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "UNLOCALIZED: Reference Item",
|
"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_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.fluid_threshold": "UNLOCALIZED: Fluid Cargo Condition",
|
||||||
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
"create.schedule.condition.item_threshold": "UNLOCALIZED: Item Cargo Condition",
|
||||||
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
"create.schedule.condition.redstone_link": "UNLOCALIZED: Redstone Link",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2",
|
"_": "Missing Localizations: 0",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1260,8 +1260,8 @@
|
||||||
"create.item_attributes.smokable.inverted": "不可被烟熏",
|
"create.item_attributes.smokable.inverted": "不可被烟熏",
|
||||||
"create.item_attributes.blastable": "可被高炉冶炼",
|
"create.item_attributes.blastable": "可被高炉冶炼",
|
||||||
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
|
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
|
||||||
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
|
"create.item_attributes.compostable": "可被堆肥",
|
||||||
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
|
"create.item_attributes.compostable.inverted": "不可被堆肥",
|
||||||
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
|
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
|
||||||
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
|
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
|
||||||
"create.item_attributes.shulker_level.full": "满",
|
"create.item_attributes.shulker_level.full": "满",
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "恰好",
|
"create.schedule.condition.threshold.equal": "恰好",
|
||||||
"create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s%3$s",
|
"create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s%3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "匹配内容",
|
"create.schedule.condition.threshold.matching_content": "匹配内容",
|
||||||
|
"create.schedule.condition.threshold.anything": "任意物品",
|
||||||
"create.schedule.condition.threshold.item_measure": "物品度量",
|
"create.schedule.condition.threshold.item_measure": "物品度量",
|
||||||
"create.schedule.condition.threshold.items": "个",
|
"create.schedule.condition.threshold.items": "个",
|
||||||
"create.schedule.condition.threshold.stacks": "组",
|
"create.schedule.condition.threshold.stacks": "组",
|
||||||
|
@ -1492,6 +1493,7 @@
|
||||||
"create.schedule.condition.threshold.status": "货物:%1$s/%2$s %3$s",
|
"create.schedule.condition.threshold.status": "货物:%1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "参考物品",
|
"create.schedule.condition.threshold.place_item": "参考物品",
|
||||||
"create.schedule.condition.threshold.place_item_2": "可以使用过滤器",
|
"create.schedule.condition.threshold.place_item_2": "可以使用过滤器",
|
||||||
|
"create.schedule.condition.threshold.place_item_3": "留空以匹配任意物品",
|
||||||
"create.schedule.condition.fluid_threshold": "流体货物条件",
|
"create.schedule.condition.fluid_threshold": "流体货物条件",
|
||||||
"create.schedule.condition.item_threshold": "物品货物条件",
|
"create.schedule.condition.item_threshold": "物品货物条件",
|
||||||
"create.schedule.condition.redstone_link": "无线红石",
|
"create.schedule.condition.redstone_link": "无线红石",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 6",
|
"_": "Missing Localizations: 8",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1485,6 +1485,7 @@
|
||||||
"create.schedule.condition.threshold.equal": "剛好",
|
"create.schedule.condition.threshold.equal": "剛好",
|
||||||
"create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s %3$s",
|
"create.schedule.condition.threshold.x_units_of_item": "%1$s%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.matching_content": "比對內容",
|
"create.schedule.condition.threshold.matching_content": "比對內容",
|
||||||
|
"create.schedule.condition.threshold.anything": "UNLOCALIZED: Anything",
|
||||||
"create.schedule.condition.threshold.item_measure": "物品單位",
|
"create.schedule.condition.threshold.item_measure": "物品單位",
|
||||||
"create.schedule.condition.threshold.items": "個",
|
"create.schedule.condition.threshold.items": "個",
|
||||||
"create.schedule.condition.threshold.stacks": "組",
|
"create.schedule.condition.threshold.stacks": "組",
|
||||||
|
@ -1492,6 +1493,7 @@
|
||||||
"create.schedule.condition.threshold.status": "貨物:%1$s/%2$s %3$s",
|
"create.schedule.condition.threshold.status": "貨物:%1$s/%2$s %3$s",
|
||||||
"create.schedule.condition.threshold.place_item": "參考物品",
|
"create.schedule.condition.threshold.place_item": "參考物品",
|
||||||
"create.schedule.condition.threshold.place_item_2": "可以使用過濾器",
|
"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.fluid_threshold": "流體貨物條件",
|
||||||
"create.schedule.condition.item_threshold": "物品貨物條件",
|
"create.schedule.condition.item_threshold": "物品貨物條件",
|
||||||
"create.schedule.condition.redstone_link": "無線紅石連接",
|
"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,
|
WINDMILL_SAILS,
|
||||||
WINDOWABLE,
|
WINDOWABLE,
|
||||||
WRENCH_PICKUP,
|
WRENCH_PICKUP,
|
||||||
|
TREE_ATTACHMENTS,
|
||||||
|
|
||||||
RELOCATION_NOT_SUPPORTED(FORGE),
|
RELOCATION_NOT_SUPPORTED(FORGE),
|
||||||
WG_STONE(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.COMPARATOR, Blocks.OBSERVER, Blocks.REDSTONE_WALL_TORCH, Blocks.PISTON, Blocks.STICKY_PISTON,
|
||||||
Blocks.TRIPWIRE, Blocks.TRIPWIRE_HOOK, Blocks.DAYLIGHT_DETECTOR, Blocks.TARGET, Blocks.HOPPER);
|
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);
|
AllBlockTags.ORE_OVERRIDE_STONE.includeAll(BlockTags.STONE_ORE_REPLACEABLES);
|
||||||
|
|
||||||
registerCompat();
|
registerCompat();
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class Create {
|
||||||
|
|
||||||
public static final String ID = "create";
|
public static final String ID = "create";
|
||||||
public static final String NAME = "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();
|
public static final Logger LOGGER = LogManager.getLogger();
|
||||||
|
|
||||||
|
|
|
@ -186,6 +186,7 @@ public class CreateJEI implements IModPlugin {
|
||||||
.build("automatic_shapeless", MixingCategory::autoShapeless),
|
.build("automatic_shapeless", MixingCategory::autoShapeless),
|
||||||
|
|
||||||
brewing = builder(BasinRecipe.class)
|
brewing = builder(BasinRecipe.class)
|
||||||
|
.enableWhen(c -> c.allowBrewingInMixer)
|
||||||
.addRecipes(() -> PotionMixingRecipes.ALL)
|
.addRecipes(() -> PotionMixingRecipes.ALL)
|
||||||
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
.catalyst(AllBlocks.MECHANICAL_MIXER::get)
|
||||||
.catalyst(AllBlocks.BASIN::get)
|
.catalyst(AllBlocks.BASIN::get)
|
||||||
|
|
|
@ -3,23 +3,19 @@ package com.simibubi.create.content.contraptions.components.actors;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
import net.minecraft.nbt.NbtUtils;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.item.ItemEntity;
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.level.GameRules;
|
import net.minecraft.world.level.GameRules;
|
||||||
import net.minecraft.world.level.block.AirBlock;
|
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.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
||||||
|
@ -40,7 +36,7 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
||||||
if (destroyProgress == -1)
|
if (destroyProgress == -1)
|
||||||
destroyNextTick();
|
destroyNextTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void lazyTick() {
|
public void lazyTick() {
|
||||||
super.lazyTick();
|
super.lazyTick();
|
||||||
|
@ -93,9 +89,9 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
||||||
return;
|
return;
|
||||||
if (getSpeed() == 0)
|
if (getSpeed() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
breakingPos = getBreakingPos();
|
breakingPos = getBreakingPos();
|
||||||
|
|
||||||
if (ticksUntilNextProgress < 0)
|
if (ticksUntilNextProgress < 0)
|
||||||
return;
|
return;
|
||||||
if (ticksUntilNextProgress-- > 0)
|
if (ticksUntilNextProgress-- > 0)
|
||||||
|
@ -114,7 +110,8 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
||||||
|
|
||||||
float breakSpeed = getBreakSpeed();
|
float breakSpeed = getBreakSpeed();
|
||||||
destroyProgress += Mth.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress);
|
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) {
|
if (destroyProgress >= 10) {
|
||||||
onBlockBroken(stateToBreak);
|
onBlockBroken(stateToBreak);
|
||||||
|
@ -133,28 +130,26 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBreakable(BlockState stateToBreak, float blockHardness) {
|
public static boolean isBreakable(BlockState stateToBreak, float blockHardness) {
|
||||||
return !(stateToBreak.getMaterial().isLiquid() || stateToBreak.getBlock() instanceof AirBlock
|
return !(stateToBreak.getMaterial()
|
||||||
|| blockHardness == -1);
|
.isLiquid() || stateToBreak.getBlock() instanceof AirBlock || blockHardness == -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockBroken(BlockState stateToBreak) {
|
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);
|
Vec3 vec = VecHelper.offsetRandomly(VecHelper.getCenterOf(breakingPos), level.random, .125f);
|
||||||
|
BlockHelper.destroyBlock(level, breakingPos, 1f, (stack) -> {
|
||||||
Block.getDrops(stateToBreak, (ServerLevel) level, breakingPos, tileentity).forEach((stack) -> {
|
if (stack.isEmpty())
|
||||||
if (!stack.isEmpty() && level.getGameRules().getBoolean(GameRules.RULE_DOBLOCKDROPS)
|
return;
|
||||||
&& !level.restoringBlockSnapshots) {
|
if (!level.getGameRules()
|
||||||
ItemEntity itementity = new ItemEntity(level, vec.x, vec.y, vec.z, stack);
|
.getBoolean(GameRules.RULE_DOBLOCKDROPS))
|
||||||
itementity.setDefaultPickUpDelay();
|
return;
|
||||||
itementity.setDeltaMovement(Vec3.ZERO);
|
if (level.restoringBlockSnapshots)
|
||||||
level.addFreshEntity(itementity);
|
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() {
|
protected float getBreakSpeed() {
|
||||||
|
|
|
@ -58,6 +58,8 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
||||||
continue;
|
continue;
|
||||||
if (entity instanceof AbstractContraptionEntity)
|
if (entity instanceof AbstractContraptionEntity)
|
||||||
continue;
|
continue;
|
||||||
|
if (entity.isPassengerOfSameVehicle(context.contraption.entity))
|
||||||
|
continue;
|
||||||
if (entity instanceof AbstractMinecart)
|
if (entity instanceof AbstractMinecart)
|
||||||
for (Entity passenger : entity.getIndirectPassengers())
|
for (Entity passenger : entity.getIndirectPassengers())
|
||||||
if (passenger instanceof AbstractContraptionEntity
|
if (passenger instanceof AbstractContraptionEntity
|
||||||
|
|
|
@ -104,7 +104,8 @@ public class HarvesterMovementBehaviour implements MovementBehaviour {
|
||||||
dropItem(context, stack);
|
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) {
|
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.actors.PloughBlock.PloughFakePlayer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
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.content.logistics.trains.track.FakeTrackBlock;
|
||||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
@ -105,6 +106,8 @@ public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour {
|
||||||
return false;
|
return false;
|
||||||
if (state.getBlock() instanceof NetherPortalBlock)
|
if (state.getBlock() instanceof NetherPortalBlock)
|
||||||
return false;
|
return false;
|
||||||
|
if (state.getBlock() instanceof ITrackBlock)
|
||||||
|
return true;
|
||||||
if (state.getBlock() instanceof FakeTrackBlock)
|
if (state.getBlock() instanceof FakeTrackBlock)
|
||||||
return false;
|
return false;
|
||||||
return state.getCollisionShape(world, breakingPos)
|
return state.getCollisionShape(world, breakingPos)
|
||||||
|
|
|
@ -100,7 +100,8 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
||||||
if (crafter != null) {
|
if (crafter != null) {
|
||||||
if (crafter.covered)
|
if (crafter.covered)
|
||||||
Block.popResource(worldIn, pos, AllItems.CRAFTER_SLOT_COVER.asStack());
|
Block.popResource(worldIn, pos, AllItems.CRAFTER_SLOT_COVER.asStack());
|
||||||
crafter.ejectWholeGrid();
|
if (!isMoving)
|
||||||
|
crafter.ejectWholeGrid();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Direction direction : Iterate.directions) {
|
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.content.contraptions.base.DirectionalKineticBlock;
|
||||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
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.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.utility.Couple;
|
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.item.context.BlockPlaceContext;
|
||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.RenderShape;
|
import net.minecraft.world.level.block.RenderShape;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
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.level.pathfinder.PathComputationType;
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
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.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
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) {
|
public HandCrankBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
|
registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,6 +48,11 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
|
||||||
return AllShapes.CRANK.get(state.getValue(FACING));
|
return AllShapes.CRANK.get(state.getValue(FACING));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
|
||||||
|
super.createBlockStateDefinition(builder.add(WATERLOGGED));
|
||||||
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public PartialModel getRenderedHandle() {
|
public PartialModel getRenderedHandle() {
|
||||||
return AllBlockPartials.HAND_CRANK_HANDLE;
|
return AllBlockPartials.HAND_CRANK_HANDLE;
|
||||||
|
@ -61,21 +72,22 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE<HandC
|
||||||
BlockHitResult hit) {
|
BlockHitResult hit) {
|
||||||
withTileEntityDo(worldIn, pos, te -> te.turn(player.isShiftKeyDown()));
|
withTileEntityDo(worldIn, pos, te -> te.turn(player.isShiftKeyDown()));
|
||||||
player.causeFoodExhaustion(getRotationSpeed() * AllConfigs.SERVER.kinetics.crankHungerMultiplier.getF());
|
player.causeFoodExhaustion(getRotationSpeed() * AllConfigs.SERVER.kinetics.crankHungerMultiplier.getF());
|
||||||
|
|
||||||
if (player.getFoodData()
|
if (player.getFoodData()
|
||||||
.getFoodLevel() == 0)
|
.getFoodLevel() == 0)
|
||||||
AllAdvancements.HAND_CRANK.awardTo(player);
|
AllAdvancements.HAND_CRANK.awardTo(player);
|
||||||
|
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||||
Direction preferred = getPreferredFacing(context);
|
Direction preferred = getPreferredFacing(context);
|
||||||
|
BlockState defaultBlockState = withWater(defaultBlockState(), context);
|
||||||
if (preferred == null || (context.getPlayer() != null && context.getPlayer()
|
if (preferred == null || (context.getPlayer() != null && context.getPlayer()
|
||||||
.isShiftKeyDown()))
|
.isShiftKeyDown()))
|
||||||
return defaultBlockState().setValue(FACING, context.getClickedFace());
|
return defaultBlockState.setValue(FACING, context.getClickedFace());
|
||||||
return defaultBlockState().setValue(FACING, preferred.getOpposite());
|
return defaultBlockState.setValue(FACING, preferred.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
@Override
|
||||||
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
|
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) {
|
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Couple<Integer> getSpeedRange() {
|
public static Couple<Integer> getSpeedRange() {
|
||||||
return Couple.create(32, 32);
|
return Couple.create(32, 32);
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,8 +124,8 @@ public class DeployerTileEntity extends KineticTileEntity {
|
||||||
private void initHandler() {
|
private void initHandler() {
|
||||||
if (invHandler != null)
|
if (invHandler != null)
|
||||||
return;
|
return;
|
||||||
if (!level.isClientSide) {
|
if (level instanceof ServerLevel sLevel) {
|
||||||
player = new DeployerFakePlayer((ServerLevel) level);
|
player = new DeployerFakePlayer(sLevel);
|
||||||
if (deferredInventoryList != null) {
|
if (deferredInventoryList != null) {
|
||||||
player.getInventory()
|
player.getInventory()
|
||||||
.load(deferredInventoryList);
|
.load(deferredInventoryList);
|
||||||
|
|
|
@ -218,10 +218,18 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
||||||
protected List<Recipe<?>> getMatchingRecipes() {
|
protected List<Recipe<?>> getMatchingRecipes() {
|
||||||
List<Recipe<?>> matchingRecipes = super.getMatchingRecipes();
|
List<Recipe<?>> matchingRecipes = super.getMatchingRecipes();
|
||||||
|
|
||||||
|
if (!AllConfigs.SERVER.recipes.allowBrewingInMixer.get())
|
||||||
|
return matchingRecipes;
|
||||||
|
|
||||||
Optional<BasinTileEntity> basin = getBasin();
|
Optional<BasinTileEntity> basin = getBasin();
|
||||||
if (!basin.isPresent())
|
if (!basin.isPresent())
|
||||||
return matchingRecipes;
|
return matchingRecipes;
|
||||||
IItemHandler availableItems = basin.get()
|
|
||||||
|
BasinTileEntity basinTileEntity = basin.get();
|
||||||
|
if (basin.isEmpty())
|
||||||
|
return matchingRecipes;
|
||||||
|
|
||||||
|
IItemHandler availableItems = basinTileEntity
|
||||||
.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
if (availableItems == null)
|
if (availableItems == null)
|
||||||
|
|
|
@ -478,8 +478,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
|
||||||
public static boolean isSawable(BlockState stateToBreak) {
|
public static boolean isSawable(BlockState stateToBreak) {
|
||||||
if (stateToBreak.is(BlockTags.SAPLINGS))
|
if (stateToBreak.is(BlockTags.SAPLINGS))
|
||||||
return false;
|
return false;
|
||||||
if (stateToBreak.is(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(stateToBreak)
|
if (TreeCutter.isLog(stateToBreak) || (stateToBreak.is(BlockTags.LEAVES)))
|
||||||
|| (stateToBreak.is(BlockTags.LEAVES)))
|
|
||||||
return true;
|
return true;
|
||||||
Block block = stateToBreak.getBlock();
|
Block block = stateToBreak.getBlock();
|
||||||
if (block instanceof BambooBlock)
|
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.CarriageContraption;
|
||||||
import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity;
|
import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity;
|
||||||
import com.simibubi.create.content.logistics.trains.entity.Train;
|
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.collision.Matrix3d;
|
||||||
import com.simibubi.create.foundation.mixin.accessor.ServerLevelAccessor;
|
import com.simibubi.create.foundation.mixin.accessor.ServerLevelAccessor;
|
||||||
import com.simibubi.create.foundation.networking.AllPackets;
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
@ -139,6 +140,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
public boolean collisionEnabled() {
|
public boolean collisionEnabled() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerColliding(Entity collidingEntity) {
|
||||||
|
collidingEntities.put(collidingEntity, new MutableInt());
|
||||||
|
}
|
||||||
|
|
||||||
public void addSittingPassenger(Entity passenger, int seatIndex) {
|
public void addSittingPassenger(Entity passenger, int seatIndex) {
|
||||||
for (Entity entity : getPassengers()) {
|
for (Entity entity : getPassengers()) {
|
||||||
|
@ -177,16 +182,28 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
contraption.getSeatMapping()
|
contraption.getSeatMapping()
|
||||||
.remove(passenger.getUUID());
|
.remove(passenger.getUUID());
|
||||||
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this),
|
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this),
|
||||||
new ContraptionSeatMappingPacket(getId(), contraption.getSeatMapping()));
|
new ContraptionSeatMappingPacket(getId(), contraption.getSeatMapping(), passenger.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Vec3 getDismountLocationForPassenger(LivingEntity pLivingEntity) {
|
public Vec3 getDismountLocationForPassenger(LivingEntity entityLiving) {
|
||||||
Vec3 loc = super.getDismountLocationForPassenger(pLivingEntity);
|
Vec3 position = super.getDismountLocationForPassenger(entityLiving);
|
||||||
CompoundTag data = pLivingEntity.getPersistentData();
|
CompoundTag data = entityLiving.getPersistentData();
|
||||||
if (!data.contains("ContraptionDismountLocation"))
|
if (!data.contains("ContraptionDismountLocation"))
|
||||||
return loc;
|
return position;
|
||||||
return VecHelper.readNBT(data.getList("ContraptionDismountLocation", Tag.TAG_DOUBLE));
|
|
||||||
|
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
|
@Override
|
||||||
|
@ -200,7 +217,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
transformedVector.y + SeatEntity.getCustomEntitySeatOffset(passenger) - 1 / 8f, transformedVector.z);
|
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();
|
UUID id = passenger.getUUID();
|
||||||
if (passenger instanceof OrientedContraptionEntity) {
|
if (passenger instanceof OrientedContraptionEntity) {
|
||||||
BlockPos localPos = contraption.getBearingPosOf(id);
|
BlockPos localPos = contraption.getBearingPosOf(id);
|
||||||
|
@ -300,17 +317,27 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vec3 toGlobalVector(Vec3 localVec, float partialTicks) {
|
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);
|
Vec3 rotationOffset = VecHelper.getCenterOf(BlockPos.ZERO);
|
||||||
localVec = localVec.subtract(rotationOffset);
|
localVec = localVec.subtract(rotationOffset);
|
||||||
localVec = applyRotation(localVec, partialTicks);
|
localVec = applyRotation(localVec, partialTicks);
|
||||||
localVec = localVec.add(rotationOffset)
|
localVec = localVec.add(rotationOffset)
|
||||||
.add(getAnchorVec());
|
.add(anchor);
|
||||||
return localVec;
|
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);
|
Vec3 rotationOffset = VecHelper.getCenterOf(BlockPos.ZERO);
|
||||||
globalVec = globalVec.subtract(getAnchorVec())
|
globalVec = globalVec.subtract(anchor)
|
||||||
.subtract(rotationOffset);
|
.subtract(rotationOffset);
|
||||||
globalVec = reverseRotation(globalVec, partialTicks);
|
globalVec = reverseRotation(globalVec, partialTicks);
|
||||||
globalVec = globalVec.add(rotationOffset);
|
globalVec = globalVec.add(rotationOffset);
|
||||||
|
@ -519,6 +546,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
public Vec3 getAnchorVec() {
|
public Vec3 getAnchorVec() {
|
||||||
return position();
|
return position();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vec3 getPrevAnchorVec() {
|
||||||
|
return getPrevPositionVec();
|
||||||
|
}
|
||||||
|
|
||||||
public float getYawOffset() {
|
public float getYawOffset() {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -792,9 +823,11 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
public Vec3 getContactPointMotion(Vec3 globalContactPoint) {
|
public Vec3 getContactPointMotion(Vec3 globalContactPoint) {
|
||||||
if (prevPosInvalid)
|
if (prevPosInvalid)
|
||||||
return Vec3.ZERO;
|
return Vec3.ZERO;
|
||||||
Vec3 contactPoint = toGlobalVector(toLocalVector(globalContactPoint, 0), 1);
|
|
||||||
return contactPoint.subtract(globalContactPoint)
|
Vec3 contactPoint = toGlobalVector(toLocalVector(globalContactPoint, 0, true), 1, true);
|
||||||
.add(position().subtract(getPrevPositionVec()));
|
Vec3 contraptionLocalMovement = contactPoint.subtract(globalContactPoint);
|
||||||
|
Vec3 contraptionAnchorMovement = position().subtract(getPrevPositionVec());
|
||||||
|
return contraptionLocalMovement.add(contraptionAnchorMovement);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canCollideWith(Entity e) {
|
public boolean canCollideWith(Entity e) {
|
||||||
|
|
|
@ -133,6 +133,7 @@ public abstract class Contraption {
|
||||||
public BlockPos anchor;
|
public BlockPos anchor;
|
||||||
public boolean stalled;
|
public boolean stalled;
|
||||||
public boolean hasUniversalCreativeCrate;
|
public boolean hasUniversalCreativeCrate;
|
||||||
|
public boolean disassembled;
|
||||||
|
|
||||||
protected Map<BlockPos, StructureBlockInfo> blocks;
|
protected Map<BlockPos, StructureBlockInfo> blocks;
|
||||||
protected List<MutablePair<StructureBlockInfo, MovementContext>> actors;
|
protected List<MutablePair<StructureBlockInfo, MovementContext>> actors;
|
||||||
|
@ -1001,6 +1002,10 @@ public abstract class Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addBlocksToWorld(Level world, StructureTransform transform) {
|
public void addBlocksToWorld(Level world, StructureTransform transform) {
|
||||||
|
if (disassembled)
|
||||||
|
return;
|
||||||
|
disassembled = true;
|
||||||
|
|
||||||
for (boolean nonBrittles : Iterate.trueAndFalse) {
|
for (boolean nonBrittles : Iterate.trueAndFalse) {
|
||||||
for (StructureBlockInfo block : blocks.values()) {
|
for (StructureBlockInfo block : blocks.values()) {
|
||||||
if (nonBrittles == BlockMovementChecks.isBrittle(block.state))
|
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.MutableBoolean;
|
||||||
import org.apache.commons.lang3.mutable.MutableFloat;
|
import org.apache.commons.lang3.mutable.MutableFloat;
|
||||||
import org.apache.commons.lang3.mutable.MutableInt;
|
|
||||||
import org.apache.commons.lang3.mutable.MutableObject;
|
import org.apache.commons.lang3.mutable.MutableObject;
|
||||||
|
|
||||||
import com.google.common.base.Predicates;
|
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;
|
||||||
import net.minecraft.core.Direction.Axis;
|
import net.minecraft.core.Direction.Axis;
|
||||||
import net.minecraft.core.Direction.AxisDirection;
|
import net.minecraft.core.Direction.AxisDirection;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundEvents;
|
import net.minecraft.sounds.SoundEvents;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
|
@ -88,11 +88,12 @@ public class ContraptionCollider {
|
||||||
if (playerType == PlayerType.REMOTE)
|
if (playerType == PlayerType.REMOTE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
entity.getSelfAndPassengers().forEach(e -> {
|
entity.getSelfAndPassengers()
|
||||||
if (e instanceof ServerPlayer)
|
.forEach(e -> {
|
||||||
((ServerPlayer) e).connection.aboveGroundTickCount = 0;
|
if (e instanceof ServerPlayer)
|
||||||
});
|
((ServerPlayer) e).connection.aboveGroundTickCount = 0;
|
||||||
|
});
|
||||||
|
|
||||||
if (playerType == PlayerType.SERVER)
|
if (playerType == PlayerType.SERVER)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -329,50 +330,15 @@ public class ContraptionCollider {
|
||||||
entityPosition.z + allowedMovement.z);
|
entityPosition.z + allowedMovement.z);
|
||||||
entityPosition = entity.position();
|
entityPosition = entity.position();
|
||||||
|
|
||||||
if (contraptionEntity instanceof CarriageContraptionEntity cce && entity.isOnGround()
|
entityMotion =
|
||||||
&& !(entity instanceof ItemEntity) && cce.nonDamageTicks == 0
|
handleDamageFromTrain(world, contraptionEntity, contraptionMotion, entity, entityMotion, playerType);
|
||||||
&& 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.hurtMarked = true;
|
entity.hurtMarked = true;
|
||||||
Vec3 contactPointMotion = Vec3.ZERO;
|
Vec3 contactPointMotion = Vec3.ZERO;
|
||||||
|
|
||||||
if (surfaceCollision.isTrue()) {
|
if (surfaceCollision.isTrue()) {
|
||||||
|
contraptionEntity.registerColliding(entity);
|
||||||
entity.fallDistance = 0;
|
entity.fallDistance = 0;
|
||||||
contraptionEntity.collidingEntities.put(entity, new MutableInt(0));
|
|
||||||
boolean canWalk = bounce != 0 || slide == 0;
|
boolean canWalk = bounce != 0 || slide == 0;
|
||||||
if (canWalk || !rotation.hasVerticalRotation()) {
|
if (canWalk || !rotation.hasVerticalRotation()) {
|
||||||
if (canWalk)
|
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) {
|
static boolean bounceEntity(Entity entity, Vec3 normal, AbstractContraptionEntity contraption, double factor) {
|
||||||
if (factor == 0)
|
if (factor == 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -473,10 +497,10 @@ public class ContraptionCollider {
|
||||||
boolean flag = p_20273_.x != vec3.x;
|
boolean flag = p_20273_.x != vec3.x;
|
||||||
boolean flag1 = p_20273_.y != vec3.y;
|
boolean flag1 = p_20273_.y != vec3.y;
|
||||||
boolean flag2 = p_20273_.z != vec3.z;
|
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)) {
|
if (e.getStepHeight() > 0.0F && flag3 && (flag || flag2)) {
|
||||||
Vec3 vec31 =
|
Vec3 vec31 = collideBoundingBox(e, new Vec3(p_20273_.x, (double) e.getStepHeight(), p_20273_.z), aabb,
|
||||||
collideBoundingBox(e, new Vec3(p_20273_.x, (double) e.getStepHeight(), p_20273_.z), aabb, e.level, list);
|
e.level, list);
|
||||||
Vec3 vec32 = collideBoundingBox(e, new Vec3(0.0D, (double) e.getStepHeight(), 0.0D),
|
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);
|
aabb.expandTowards(p_20273_.x, 0.0D, p_20273_.z), e.level, list);
|
||||||
if (vec32.y < (double) e.getStepHeight()) {
|
if (vec32.y < (double) e.getStepHeight()) {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import com.simibubi.create.foundation.utility.WorldAttached;
|
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||||
|
|
||||||
|
@ -17,7 +16,6 @@ import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
|
@ -65,24 +63,18 @@ public class ContraptionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void entitiesWhoJustDismountedGetSentToTheRightLocation(LivingEntity entityLiving, Level world) {
|
public static void entitiesWhoJustDismountedGetSentToTheRightLocation(LivingEntity entityLiving, Level world) {
|
||||||
if (world.isClientSide)
|
if (!world.isClientSide)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CompoundTag data = entityLiving.getPersistentData();
|
CompoundTag data = entityLiving.getPersistentData();
|
||||||
if (!data.contains("ContraptionDismountLocation"))
|
if (!data.contains("ContraptionDismountLocation"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Vec3 position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", Tag.TAG_DOUBLE));
|
Vec3 position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", Tag.TAG_DOUBLE));
|
||||||
if (entityLiving.getVehicle() == null)
|
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");
|
data.remove("ContraptionDismountLocation");
|
||||||
entityLiving.setOnGround(false);
|
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;
|
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;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
@ -86,10 +87,19 @@ public class ContraptionHandlerClient {
|
||||||
Vec3 origin = rayInputs.getFirst();
|
Vec3 origin = rayInputs.getFirst();
|
||||||
Vec3 target = rayInputs.getSecond();
|
Vec3 target = rayInputs.getSecond();
|
||||||
AABB aabb = new AABB(origin, target).inflate(16);
|
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);
|
BlockHitResult rayTraceResult = rayTraceContraption(origin, target, contraptionEntity);
|
||||||
if (rayTraceResult == null)
|
if (rayTraceResult == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -493,7 +493,14 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Vec3 getAnchorVec() {
|
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
|
@Override
|
||||||
|
|
|
@ -5,12 +5,17 @@ import java.util.List;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import com.simibubi.create.AllItems;
|
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.deployer.DeployerFakePlayer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
|
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.Contraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
|
||||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||||
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
|
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.DispenserBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.RailShape;
|
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.minecraft.world.level.material.Material;
|
||||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
@ -218,11 +224,13 @@ public class MinecartContraptionItem extends Item {
|
||||||
List<Entity> passengers = cart.getPassengers();
|
List<Entity> passengers = cart.getPassengers();
|
||||||
if (passengers.isEmpty() || !(passengers.get(0) instanceof OrientedContraptionEntity))
|
if (passengers.isEmpty() || !(passengers.get(0) instanceof OrientedContraptionEntity))
|
||||||
return;
|
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")
|
player.displayClientMessage(Lang.translateDirect("contraption.minecart_contraption_illegal_pickup")
|
||||||
.withStyle(ChatFormatting.RED), true);
|
.withStyle(ChatFormatting.RED), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +240,13 @@ public class MinecartContraptionItem extends Item {
|
||||||
return;
|
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 {
|
try {
|
||||||
ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput();
|
ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput();
|
||||||
|
@ -249,13 +263,13 @@ public class MinecartContraptionItem extends Item {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contraption.getContraption()
|
if (contraption.getBlocks()
|
||||||
.getBlocks()
|
|
||||||
.size() > 200)
|
.size() > 200)
|
||||||
AllAdvancements.CART_PICKUP.awardTo(player);
|
AllAdvancements.CART_PICKUP.awardTo(player);
|
||||||
|
|
||||||
player.getInventory().placeItemBackInInventory(generatedStack);
|
player.getInventory()
|
||||||
contraption.discard();
|
.placeItemBackInInventory(generatedStack);
|
||||||
|
oce.discard();
|
||||||
entity.discard();
|
entity.discard();
|
||||||
event.setCancellationResult(InteractionResult.SUCCESS);
|
event.setCancellationResult(InteractionResult.SUCCESS);
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
|
|
|
@ -11,6 +11,7 @@ import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.phys.AABB;
|
||||||
import net.minecraftforge.common.ForgeMod;
|
import net.minecraftforge.common.ForgeMod;
|
||||||
import net.minecraftforge.network.NetworkEvent.Context;
|
import net.minecraftforge.network.NetworkEvent.Context;
|
||||||
|
|
||||||
|
@ -54,7 +55,9 @@ public class ContraptionInteractionPacket extends SimplePacketBase {
|
||||||
if (!(entityByID instanceof AbstractContraptionEntity))
|
if (!(entityByID instanceof AbstractContraptionEntity))
|
||||||
return;
|
return;
|
||||||
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
|
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))
|
if (!sender.hasLineOfSight(entityByID))
|
||||||
d -= 3;
|
d -= 3;
|
||||||
d *= d;
|
d *= d;
|
||||||
|
|
|
@ -7,24 +7,33 @@ import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity;
|
||||||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.network.NetworkEvent.Context;
|
import net.minecraftforge.network.NetworkEvent.Context;
|
||||||
|
|
||||||
public class ContraptionSeatMappingPacket extends SimplePacketBase {
|
public class ContraptionSeatMappingPacket extends SimplePacketBase {
|
||||||
|
|
||||||
private Map<UUID, Integer> mapping;
|
private Map<UUID, Integer> mapping;
|
||||||
private int entityID;
|
private int entityID;
|
||||||
|
private int dismountedID;
|
||||||
|
|
||||||
public ContraptionSeatMappingPacket(int entityID, Map<UUID, Integer> mapping) {
|
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.entityID = entityID;
|
||||||
this.mapping = mapping;
|
this.mapping = mapping;
|
||||||
|
this.dismountedID = dismountedID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContraptionSeatMappingPacket(FriendlyByteBuf buffer) {
|
public ContraptionSeatMappingPacket(FriendlyByteBuf buffer) {
|
||||||
entityID = buffer.readInt();
|
entityID = buffer.readInt();
|
||||||
|
dismountedID = buffer.readInt();
|
||||||
mapping = new HashMap<>();
|
mapping = new HashMap<>();
|
||||||
short size = buffer.readShort();
|
short size = buffer.readShort();
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
|
@ -34,6 +43,7 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase {
|
||||||
@Override
|
@Override
|
||||||
public void write(FriendlyByteBuf buffer) {
|
public void write(FriendlyByteBuf buffer) {
|
||||||
buffer.writeInt(entityID);
|
buffer.writeInt(entityID);
|
||||||
|
buffer.writeInt(dismountedID);
|
||||||
buffer.writeShort(mapping.size());
|
buffer.writeShort(mapping.size());
|
||||||
mapping.forEach((k, v) -> {
|
mapping.forEach((k, v) -> {
|
||||||
buffer.writeUUID(k);
|
buffer.writeUUID(k);
|
||||||
|
@ -49,6 +59,17 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase {
|
||||||
if (!(entityByID instanceof AbstractContraptionEntity))
|
if (!(entityByID instanceof AbstractContraptionEntity))
|
||||||
return;
|
return;
|
||||||
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
|
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()
|
contraptionEntity.getContraption()
|
||||||
.setSeatMapping(mapping);
|
.setSeatMapping(mapping);
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,6 +8,7 @@ import java.util.Set;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
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.PipeConnection.Flow;
|
||||||
import com.simibubi.create.content.contraptions.fluids.pipes.AxisPipeBlock;
|
import com.simibubi.create.content.contraptions.fluids.pipes.AxisPipeBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||||
|
@ -173,7 +174,8 @@ public class FluidPropagator {
|
||||||
return false;
|
return false;
|
||||||
if (VanillaFluidTargets.shouldPipesConnectTo(connectedState))
|
if (VanillaFluidTargets.shouldPipesConnectTo(connectedState))
|
||||||
return true;
|
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;
|
return false;
|
||||||
if (hasFluidCapability(reader, connectedPos, side.getOpposite()))
|
if (hasFluidCapability(reader, connectedPos, side.getOpposite()))
|
||||||
return false;
|
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.base.DirectionalAxisKineticBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.FluidPropagator;
|
import com.simibubi.create.content.contraptions.fluids.FluidPropagator;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
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.Iterate;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -16,26 +17,31 @@ import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Direction.Axis;
|
import net.minecraft.core.Direction.Axis;
|
||||||
import net.minecraft.network.protocol.game.DebugPackets;
|
import net.minecraft.network.protocol.game.DebugPackets;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
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.level.pathfinder.PathComputationType;
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
import net.minecraft.world.ticks.TickPriority;
|
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 static final BooleanProperty ENABLED = BooleanProperty.create("enabled");
|
||||||
|
|
||||||
public FluidValveBlock(Properties properties) {
|
public FluidValveBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
registerDefaultState(defaultBlockState().setValue(ENABLED, false));
|
registerDefaultState(defaultBlockState().setValue(ENABLED, false)
|
||||||
|
.setValue(WATERLOGGED, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -46,7 +52,7 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
|
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
|
||||||
super.createBlockStateDefinition(builder.add(ENABLED));
|
super.createBlockStateDefinition(builder.add(ENABLED, WATERLOGGED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -125,7 +131,7 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
|
||||||
public void tick(BlockState state, ServerLevel world, BlockPos pos, Random r) {
|
public void tick(BlockState state, ServerLevel world, BlockPos pos, Random r) {
|
||||||
FluidPropagator.propagateChangedPipe(world, pos, state);
|
FluidPropagator.propagateChangedPipe(world, pos, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
|
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -141,4 +147,21 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi
|
||||||
return AllTileEntities.FLUID_VALVE.get();
|
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.content.contraptions.wrench.IWrenchable;
|
||||||
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
|
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
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.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.VoxelShaper;
|
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.item.context.BlockPlaceContext;
|
||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.FaceAttachedHorizontalDirectionalBlock;
|
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.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||||
import net.minecraft.world.level.block.state.properties.AttachFace;
|
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.level.pathfinder.PathComputationType;
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
import net.minecraft.world.ticks.TickPriority;
|
import net.minecraft.world.ticks.TickPriority;
|
||||||
|
|
||||||
public class SmartFluidPipeBlock extends FaceAttachedHorizontalDirectionalBlock
|
public class SmartFluidPipeBlock extends FaceAttachedHorizontalDirectionalBlock
|
||||||
implements ITE<SmartFluidPipeTileEntity>, IAxisPipe, IWrenchable {
|
implements ITE<SmartFluidPipeTileEntity>, IAxisPipe, IWrenchable, ProperWaterloggedBlock {
|
||||||
|
|
||||||
public SmartFluidPipeBlock(Properties p_i48339_1_) {
|
public SmartFluidPipeBlock(Properties p_i48339_1_) {
|
||||||
super(p_i48339_1_);
|
super(p_i48339_1_);
|
||||||
|
registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
|
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
|
||||||
builder.add(FACE)
|
builder.add(FACE, FACING, WATERLOGGED);
|
||||||
.add(FACING);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
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) {
|
public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) {
|
||||||
return false;
|
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
|
@Override
|
||||||
public Class<SmartFluidPipeTileEntity> getTileEntityClass() {
|
public Class<SmartFluidPipeTileEntity> getTileEntityClass() {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.content.contraptions.processing;
|
package com.simibubi.create.content.contraptions.processing;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -64,7 +65,8 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
||||||
return true;
|
return true;
|
||||||
if (level == null || level.isClientSide)
|
if (level == null || level.isClientSide)
|
||||||
return true;
|
return true;
|
||||||
if (!getBasin().filter(BasinTileEntity::canContinueProcessing)
|
Optional<BasinTileEntity> basin = getBasin();
|
||||||
|
if (!basin.filter(BasinTileEntity::canContinueProcessing)
|
||||||
.isPresent())
|
.isPresent())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -118,6 +120,10 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<Recipe<?>> getMatchingRecipes() {
|
protected List<Recipe<?>> getMatchingRecipes() {
|
||||||
|
if (getBasin().map(BasinTileEntity::isEmpty)
|
||||||
|
.orElse(true))
|
||||||
|
return new ArrayList<>();
|
||||||
|
|
||||||
List<Recipe<?>> list = RecipeFinder.get(getRecipeCacheKey(), level, this::matchStaticFilters);
|
List<Recipe<?>> list = RecipeFinder.get(getRecipeCacheKey(), level, this::matchStaticFilters);
|
||||||
return list.stream()
|
return list.stream()
|
||||||
.filter(this::matchBasinRecipe)
|
.filter(this::matchBasinRecipe)
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.processing;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
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;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment;
|
import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
import com.simibubi.create.foundation.utility.recipe.DummyCraftingContainer;
|
||||||
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
|
import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo;
|
||||||
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
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.Ingredient;
|
||||||
import net.minecraft.world.item.crafting.Recipe;
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
@ -78,7 +79,6 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
|
||||||
List<FluidStack> recipeOutputFluids = new ArrayList<>();
|
List<FluidStack> recipeOutputFluids = new ArrayList<>();
|
||||||
|
|
||||||
List<Ingredient> ingredients = new LinkedList<>(recipe.getIngredients());
|
List<Ingredient> ingredients = new LinkedList<>(recipe.getIngredients());
|
||||||
ingredients.sort(Comparator.comparingInt(i -> i.getItems().length));
|
|
||||||
List<FluidIngredient> fluidIngredients =
|
List<FluidIngredient> fluidIngredients =
|
||||||
isBasinRecipe ? ((BasinRecipe) recipe).getFluidIngredients() : Collections.emptyList();
|
isBasinRecipe ? ((BasinRecipe) recipe).getFluidIngredients() : Collections.emptyList();
|
||||||
|
|
||||||
|
@ -106,9 +106,6 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
|
||||||
continue Ingredients;
|
continue Ingredients;
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
availableItems.extractItem(slot, 1, false);
|
availableItems.extractItem(slot, 1, false);
|
||||||
else if (extracted.hasContainerItem())
|
|
||||||
recipeOutputItems.add(extracted.getContainerItem()
|
|
||||||
.copy());
|
|
||||||
extractedItemsFromSlot[slot]++;
|
extractedItemsFromSlot[slot]++;
|
||||||
continue Ingredients;
|
continue Ingredients;
|
||||||
}
|
}
|
||||||
|
@ -152,11 +149,17 @@ public class BasinRecipe extends ProcessingRecipe<SmartInventory> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (simulate) {
|
if (simulate) {
|
||||||
if (recipe instanceof BasinRecipe) {
|
if (recipe instanceof BasinRecipe basinRecipe) {
|
||||||
recipeOutputItems.addAll(((BasinRecipe) recipe).rollResults());
|
recipeOutputItems.addAll(basinRecipe.rollResults());
|
||||||
recipeOutputFluids.addAll(((BasinRecipe) recipe).getFluidResults());
|
recipeOutputFluids.addAll(basinRecipe.getFluidResults());
|
||||||
} else
|
recipeOutputItems.addAll(basinRecipe.getRemainingItems(basin.getInputInventory()));
|
||||||
|
} else {
|
||||||
recipeOutputItems.add(recipe.getResultItem());
|
recipeOutputItems.add(recipe.getResultItem());
|
||||||
|
|
||||||
|
if (recipe instanceof CraftingRecipe craftingRecipe) {
|
||||||
|
recipeOutputItems.addAll(craftingRecipe.getRemainingItems(new DummyCraftingContainer(availableItems, extractedItemsFromSlot)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!basin.acceptOutputs(recipeOutputItems, recipeOutputFluids, simulate))
|
if (!basin.acceptOutputs(recipeOutputItems, recipeOutputFluids, simulate))
|
||||||
|
|
|
@ -88,6 +88,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
Direction preferredSpoutput;
|
Direction preferredSpoutput;
|
||||||
protected List<ItemStack> spoutputBuffer;
|
protected List<ItemStack> spoutputBuffer;
|
||||||
protected List<FluidStack> spoutputFluidBuffer;
|
protected List<FluidStack> spoutputFluidBuffer;
|
||||||
|
int recipeBackupCheck;
|
||||||
|
|
||||||
public static final int OUTPUT_ANIMATION_TIME = 10;
|
public static final int OUTPUT_ANIMATION_TIME = 10;
|
||||||
List<IntAttached<ItemStack>> visualizedOutputItems;
|
List<IntAttached<ItemStack>> visualizedOutputItems;
|
||||||
|
@ -115,6 +116,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
preferredSpoutput = null;
|
preferredSpoutput = null;
|
||||||
spoutputBuffer = new ArrayList<>();
|
spoutputBuffer = new ArrayList<>();
|
||||||
spoutputFluidBuffer = new ArrayList<>();
|
spoutputFluidBuffer = new ArrayList<>();
|
||||||
|
recipeBackupCheck = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -227,19 +229,32 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
@Override
|
@Override
|
||||||
public void lazyTick() {
|
public void lazyTick() {
|
||||||
super.lazyTick();
|
super.lazyTick();
|
||||||
updateSpoutput();
|
|
||||||
if (!level.isClientSide)
|
if (!level.isClientSide) {
|
||||||
|
updateSpoutput();
|
||||||
|
if (recipeBackupCheck-- > 0)
|
||||||
|
return;
|
||||||
|
recipeBackupCheck = 20;
|
||||||
|
if (isEmpty())
|
||||||
|
return;
|
||||||
|
notifyChangeOfContents();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BlockEntity tileEntity = level.getBlockEntity(worldPosition.above(2));
|
BlockEntity tileEntity = level.getBlockEntity(worldPosition.above(2));
|
||||||
if (!(tileEntity instanceof MechanicalMixerTileEntity)) {
|
if (!(tileEntity instanceof MechanicalMixerTileEntity)) {
|
||||||
setAreFluidsMoving(false);
|
setAreFluidsMoving(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tileEntity;
|
MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tileEntity;
|
||||||
setAreFluidsMoving(mixer.running && mixer.runningTicks <= 20);
|
setAreFluidsMoving(mixer.running && mixer.runningTicks <= 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return inputInventory.isEmpty() && outputInventory.isEmpty() && inputTank.isEmpty() && outputTank.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
public void onWrenched(Direction face) {
|
public void onWrenched(Direction face) {
|
||||||
BlockState blockState = getBlockState();
|
BlockState blockState = getBlockState();
|
||||||
Direction currentFacing = blockState.getValue(BasinBlock.FACING);
|
Direction currentFacing = blockState.getValue(BasinBlock.FACING);
|
||||||
|
@ -256,15 +271,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSpoutput() {
|
private void updateSpoutput() {
|
||||||
if (level.isClientSide)
|
|
||||||
return;
|
|
||||||
|
|
||||||
BlockState blockState = getBlockState();
|
BlockState blockState = getBlockState();
|
||||||
Direction currentFacing = blockState.getValue(BasinBlock.FACING);
|
Direction currentFacing = blockState.getValue(BasinBlock.FACING);
|
||||||
|
|
||||||
if (currentFacing != Direction.DOWN)
|
|
||||||
notifyChangeOfContents();
|
|
||||||
|
|
||||||
Direction newFacing = Direction.DOWN;
|
Direction newFacing = Direction.DOWN;
|
||||||
for (Direction test : Iterate.horizontalDirections) {
|
for (Direction test : Iterate.horizontalDirections) {
|
||||||
boolean canOutputTo = BasinBlock.canOutputTo(level, worldPosition, test);
|
boolean canOutputTo = BasinBlock.canOutputTo(level, worldPosition, test);
|
||||||
|
|
|
@ -465,7 +465,7 @@ public class BeltTileEntity extends KineticTileEntity {
|
||||||
return inserted;
|
return inserted;
|
||||||
if (!simulate) {
|
if (!simulate) {
|
||||||
BeltTunnelInteractionHandler.flapTunnel(nextInventory, index, side.getOpposite(), true);
|
BeltTunnelInteractionHandler.flapTunnel(nextInventory, index, side.getOpposite(), true);
|
||||||
tunnelTE.setStackToDistribute(inserted);
|
tunnelTE.setStackToDistribute(inserted, side.getOpposite());
|
||||||
}
|
}
|
||||||
return empty;
|
return empty;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class BeltTunnelInteractionHandler {
|
||||||
if (!brassTunnel.canTakeItems())
|
if (!brassTunnel.canTakeItems())
|
||||||
return true;
|
return true;
|
||||||
if (onServer) {
|
if (onServer) {
|
||||||
brassTunnel.setStackToDistribute(current.stack);
|
brassTunnel.setStackToDistribute(current.stack, movementFacing.getOpposite());
|
||||||
current.stack = ItemStack.EMPTY;
|
current.stack = ItemStack.EMPTY;
|
||||||
beltInventory.belt.sendData();
|
beltInventory.belt.sendData();
|
||||||
beltInventory.belt.setChanged();
|
beltInventory.belt.setChanged();
|
||||||
|
|
|
@ -9,7 +9,6 @@ import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.chat.MutableComponent;
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket;
|
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.ItemStack;
|
||||||
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class BackTankUtil {
|
public class BackTankUtil {
|
||||||
|
|
||||||
|
@ -105,11 +104,10 @@ public class BackTankUtil {
|
||||||
|
|
||||||
// For Air-using tools
|
// For Air-using tools
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
public static boolean isBarVisible(ItemStack stack, int usesPerTank) {
|
public static boolean isBarVisible(ItemStack stack, int usesPerTank) {
|
||||||
if (usesPerTank == 0)
|
if (usesPerTank == 0)
|
||||||
return false;
|
return false;
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
Player player = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
|
||||||
if (player == null)
|
if (player == null)
|
||||||
return false;
|
return false;
|
||||||
ItemStack backtank = get(player);
|
ItemStack backtank = get(player);
|
||||||
|
@ -118,11 +116,10 @@ public class BackTankUtil {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
public static int getBarWidth(ItemStack stack, int usesPerTank) {
|
public static int getBarWidth(ItemStack stack, int usesPerTank) {
|
||||||
if (usesPerTank == 0)
|
if (usesPerTank == 0)
|
||||||
return 13;
|
return 13;
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
Player player = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
|
||||||
if (player == null)
|
if (player == null)
|
||||||
return 13;
|
return 13;
|
||||||
ItemStack backtank = get(player);
|
ItemStack backtank = get(player);
|
||||||
|
@ -132,11 +129,10 @@ public class BackTankUtil {
|
||||||
.getBarWidth(backtank);
|
.getBarWidth(backtank);
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
public static int getBarColor(ItemStack stack, int usesPerTank) {
|
public static int getBarColor(ItemStack stack, int usesPerTank) {
|
||||||
if (usesPerTank == 0)
|
if (usesPerTank == 0)
|
||||||
return 0;
|
return 0;
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
Player player = DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
|
||||||
if (player == null)
|
if (player == null)
|
||||||
return 0;
|
return 0;
|
||||||
ItemStack backtank = get(player);
|
ItemStack backtank = get(player);
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.simibubi.create.content.logistics.block.belts.tunnel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.Create;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||||
|
|
||||||
|
@ -44,7 +43,7 @@ public class BrassTunnelBlock extends BeltTunnelBlock {
|
||||||
for (ItemStack itemStack : stacksOfGroup)
|
for (ItemStack itemStack : stacksOfGroup)
|
||||||
player.getInventory().placeItemBackInInventory(itemStack.copy());
|
player.getInventory().placeItemBackInInventory(itemStack.copy());
|
||||||
world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, .2f,
|
world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, .2f,
|
||||||
1f + Create.RANDOM.nextFloat());
|
1f + world.random.nextFloat());
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -61,16 +60,16 @@ public class BrassTunnelBlock extends BeltTunnelBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRemove(BlockState p_196243_1_, Level p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_,
|
public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||||
boolean p_196243_5_) {
|
if (state.hasBlockEntity() && (state.getBlock() != newState.getBlock() || !newState.hasBlockEntity())) {
|
||||||
if (p_196243_1_.hasBlockEntity()
|
TileEntityBehaviour.destroy(level, pos, FilteringBehaviour.TYPE);
|
||||||
&& (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasBlockEntity())) {
|
withTileEntityDo(level, pos, te -> {
|
||||||
TileEntityBehaviour.destroy(p_196243_2_, p_196243_3_, FilteringBehaviour.TYPE);
|
if (!(te instanceof BrassTunnelTileEntity btte))
|
||||||
withTileEntityDo(p_196243_2_, p_196243_3_, te -> {
|
return;
|
||||||
if (te instanceof BrassTunnelTileEntity)
|
Block.popResource(level, pos, btte.stackToDistribute);
|
||||||
Block.popResource(p_196243_2_, p_196243_3_, ((BrassTunnelTileEntity) te).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())
|
if (!te.canTakeItems())
|
||||||
return stack;
|
return stack;
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
te.setStackToDistribute(stack);
|
te.setStackToDistribute(stack, null);
|
||||||
return ItemStack.EMPTY;
|
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.goggles.IHaveGoggleInformation;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
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.gui.AllIcons;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform;
|
import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform;
|
||||||
|
@ -61,6 +64,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
boolean connectedRight;
|
boolean connectedRight;
|
||||||
|
|
||||||
ItemStack stackToDistribute;
|
ItemStack stackToDistribute;
|
||||||
|
Direction stackEnteredFrom;
|
||||||
|
|
||||||
float distributionProgress;
|
float distributionProgress;
|
||||||
int distributionDistanceLeft;
|
int distributionDistanceLeft;
|
||||||
int distributionDistanceRight;
|
int distributionDistanceRight;
|
||||||
|
@ -81,6 +86,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
distributionTargets = Couple.create(ArrayList::new);
|
distributionTargets = Couple.create(ArrayList::new);
|
||||||
syncSet = new HashSet<>();
|
syncSet = new HashSet<>();
|
||||||
stackToDistribute = ItemStack.EMPTY;
|
stackToDistribute = ItemStack.EMPTY;
|
||||||
|
stackEnteredFrom = null;
|
||||||
beltCapability = LazyOptional.empty();
|
beltCapability = LazyOptional.empty();
|
||||||
tunnelCapability = LazyOptional.of(() -> new BrassTunnelItemHandler(this));
|
tunnelCapability = LazyOptional.of(() -> new BrassTunnelItemHandler(this));
|
||||||
previousOutputIndex = 0;
|
previousOutputIndex = 0;
|
||||||
|
@ -183,6 +189,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
for (Pair<BlockPos, Direction> pair : list) {
|
for (Pair<BlockPos, Direction> pair : list) {
|
||||||
BlockPos tunnelPos = pair.getKey();
|
BlockPos tunnelPos = pair.getKey();
|
||||||
Direction output = pair.getValue();
|
Direction output = pair.getValue();
|
||||||
|
if (tunnelPos.equals(worldPosition) && output == stackEnteredFrom)
|
||||||
|
continue;
|
||||||
BlockEntity te = level.getBlockEntity(tunnelPos);
|
BlockEntity te = level.getBlockEntity(tunnelPos);
|
||||||
if (!(te instanceof BrassTunnelTileEntity))
|
if (!(te instanceof BrassTunnelTileEntity))
|
||||||
continue;
|
continue;
|
||||||
|
@ -306,13 +314,16 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
|
|
||||||
toDistribute.grow(failedTransferrals);
|
toDistribute.grow(failedTransferrals);
|
||||||
stackToDistribute = ItemHandlerHelper.copyStackWithSize(stackToDistribute, toDistribute.getCount());
|
stackToDistribute = ItemHandlerHelper.copyStackWithSize(stackToDistribute, toDistribute.getCount());
|
||||||
|
if (stackToDistribute.isEmpty())
|
||||||
|
stackEnteredFrom = null;
|
||||||
previousOutputIndex++;
|
previousOutputIndex++;
|
||||||
previousOutputIndex %= amountTargets;
|
previousOutputIndex %= amountTargets;
|
||||||
notifyUpdate();
|
notifyUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStackToDistribute(ItemStack stack) {
|
public void setStackToDistribute(ItemStack stack, @Nullable Direction enteredFrom) {
|
||||||
stackToDistribute = stack;
|
stackToDistribute = stack;
|
||||||
|
stackEnteredFrom = enteredFrom;
|
||||||
distributionProgress = -1;
|
distributionProgress = -1;
|
||||||
sendData();
|
sendData();
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -329,7 +340,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
if (!own.isEmpty()) {
|
if (!own.isEmpty()) {
|
||||||
list.add(own);
|
list.add(own);
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
setStackToDistribute(ItemStack.EMPTY);
|
setStackToDistribute(ItemStack.EMPTY, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (boolean left : Iterate.trueAndFalse) {
|
for (boolean left : Iterate.trueAndFalse) {
|
||||||
|
@ -345,7 +356,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
continue;
|
continue;
|
||||||
list.add(other);
|
list.add(other);
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
adjacent.setStackToDistribute(ItemStack.EMPTY);
|
adjacent.setStackToDistribute(ItemStack.EMPTY, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,22 +525,30 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
continue;
|
continue;
|
||||||
if (direction == movementFacing.getOpposite())
|
if (direction == movementFacing.getOpposite())
|
||||||
continue;
|
continue;
|
||||||
if (tunnelTE.sides.contains(direction)) {
|
if (!tunnelTE.sides.contains(direction))
|
||||||
BlockPos offset = tunnelTE.worldPosition.below()
|
continue;
|
||||||
.relative(direction);
|
|
||||||
DirectBeltInputBehaviour inputBehaviour =
|
BlockPos offset = tunnelTE.worldPosition.below()
|
||||||
TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE);
|
.relative(direction);
|
||||||
if (inputBehaviour == null) {
|
|
||||||
if (direction == movementFacing)
|
BlockState potentialFunnel = level.getBlockState(offset.above());
|
||||||
if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset,
|
if (potentialFunnel.getBlock() instanceof BeltFunnelBlock
|
||||||
direction.getOpposite()))
|
&& potentialFunnel.getValue(BeltFunnelBlock.SHAPE) == Shape.PULLING
|
||||||
validOutputs.add(Pair.of(tunnelTE, direction));
|
&& FunnelBlock.getFunnelFacing(potentialFunnel) == direction)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (inputBehaviour.canInsertFromSide(direction))
|
DirectBeltInputBehaviour inputBehaviour =
|
||||||
validOutputs.add(Pair.of(tunnelTE, direction));
|
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;
|
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("SyncedOutput", syncedOutputActive);
|
||||||
compound.putBoolean("ConnectedLeft", connectedLeft);
|
compound.putBoolean("ConnectedLeft", connectedLeft);
|
||||||
compound.putBoolean("ConnectedRight", connectedRight);
|
compound.putBoolean("ConnectedRight", connectedRight);
|
||||||
|
|
||||||
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
|
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
|
||||||
|
if (stackEnteredFrom != null)
|
||||||
|
NBTHelper.writeEnum(compound, "StackEnteredFrom", stackEnteredFrom);
|
||||||
|
|
||||||
compound.putFloat("DistributionProgress", distributionProgress);
|
compound.putFloat("DistributionProgress", distributionProgress);
|
||||||
compound.putInt("PreviousIndex", previousOutputIndex);
|
compound.putInt("PreviousIndex", previousOutputIndex);
|
||||||
compound.putInt("DistanceLeft", distributionDistanceLeft);
|
compound.putInt("DistanceLeft", distributionDistanceLeft);
|
||||||
|
@ -587,7 +610,12 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave
|
||||||
syncedOutputActive = compound.getBoolean("SyncedOutput");
|
syncedOutputActive = compound.getBoolean("SyncedOutput");
|
||||||
connectedLeft = compound.getBoolean("ConnectedLeft");
|
connectedLeft = compound.getBoolean("ConnectedLeft");
|
||||||
connectedRight = compound.getBoolean("ConnectedRight");
|
connectedRight = compound.getBoolean("ConnectedRight");
|
||||||
|
|
||||||
stackToDistribute = ItemStack.of(compound.getCompound("StackToDistribute"));
|
stackToDistribute = ItemStack.of(compound.getCompound("StackToDistribute"));
|
||||||
|
stackEnteredFrom =
|
||||||
|
compound.contains("StackEnteredFrom") ? NBTHelper.readEnum(compound, "StackEnteredFrom", Direction.class)
|
||||||
|
: null;
|
||||||
|
|
||||||
distributionProgress = compound.getFloat("DistributionProgress");
|
distributionProgress = compound.getFloat("DistributionProgress");
|
||||||
previousOutputIndex = compound.getInt("PreviousIndex");
|
previousOutputIndex = compound.getInt("PreviousIndex");
|
||||||
distributionDistanceLeft = compound.getInt("DistanceLeft");
|
distributionDistanceLeft = compound.getInt("DistanceLeft");
|
||||||
|
|
|
@ -40,9 +40,10 @@ public class ScoreboardDisplaySource extends ValueListDisplaySource {
|
||||||
return sLevel.getScoreboard()
|
return sLevel.getScoreboard()
|
||||||
.getPlayerScores(objective)
|
.getPlayerScores(objective)
|
||||||
.stream()
|
.stream()
|
||||||
.limit(maxRows)
|
.map(score -> IntAttached.with(score.getScore(), Components.literal(score.getOwner())
|
||||||
.map(score -> IntAttached.with(score.getScore(), Components.literal(score.getOwner()).copy()))
|
.copy()))
|
||||||
.sorted(IntAttached.comparator());
|
.sorted(IntAttached.comparator())
|
||||||
|
.limit(maxRows);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ImmutableList<IntAttached<MutableComponent>> notFound(String objective) {
|
private ImmutableList<IntAttached<MutableComponent>> notFound(String objective) {
|
||||||
|
|
|
@ -56,6 +56,11 @@ public class BookCopyAttribute implements ItemAttribute {
|
||||||
return new BookCopyAttribute(nbt.getInt("generation"));
|
return new BookCopyAttribute(nbt.getInt("generation"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNBTKey() {
|
||||||
|
return "book_copy";
|
||||||
|
}
|
||||||
|
|
||||||
private int extractGeneration(ItemStack stack) {
|
private int extractGeneration(ItemStack stack) {
|
||||||
CompoundTag nbt = stack.getTag();
|
CompoundTag nbt = stack.getTag();
|
||||||
if (nbt != null && stack.getItem() instanceof WrittenBookItem) {
|
if (nbt != null && stack.getItem() instanceof WrittenBookItem) {
|
||||||
|
|
|
@ -84,12 +84,12 @@ public class TrainRelocationPacket extends SimplePacketBase {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!sender.position()
|
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");
|
Create.LOGGER.warn(messagePrefix + train.name.getString() + ": player too far from clicked pos");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!sender.position()
|
if (!sender.position()
|
||||||
.closerThan(cce.position(), 26 + cce.getBoundingBox()
|
.closerThan(cce.position(), 64 + cce.getBoundingBox()
|
||||||
.getXsize() / 2)) {
|
.getXsize() / 2)) {
|
||||||
Create.LOGGER.warn(messagePrefix + train.name.getString() + ": player too far from carriage entity");
|
Create.LOGGER.warn(messagePrefix + train.name.getString() + ": player too far from carriage entity");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -5,20 +5,29 @@ import com.simibubi.create.content.logistics.trains.DimensionPalette;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
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.LevelAccessor;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
|
||||||
public abstract class SingleTileEdgePoint extends TrackEdgePoint {
|
public abstract class SingleTileEdgePoint extends TrackEdgePoint {
|
||||||
|
|
||||||
|
public ResourceKey<Level> tileDimension;
|
||||||
public BlockPos tilePos;
|
public BlockPos tilePos;
|
||||||
|
|
||||||
public BlockPos getTilePos() {
|
public BlockPos getTilePos() {
|
||||||
return tilePos;
|
return tilePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResourceKey<Level> getTileDimension() {
|
||||||
|
return tileDimension;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tileAdded(BlockEntity tile, boolean front) {
|
public void tileAdded(BlockEntity tile, boolean front) {
|
||||||
this.tilePos = tile.getBlockPos();
|
this.tilePos = tile.getBlockPos();
|
||||||
|
this.tileDimension = tile.getLevel()
|
||||||
|
.dimension();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,12 +51,14 @@ public abstract class SingleTileEdgePoint extends TrackEdgePoint {
|
||||||
if (migration)
|
if (migration)
|
||||||
return;
|
return;
|
||||||
tilePos = NbtUtils.readBlockPos(nbt.getCompound("TilePos"));
|
tilePos = NbtUtils.readBlockPos(nbt.getCompound("TilePos"));
|
||||||
|
tileDimension = dimensions.decode(nbt.contains("TileDimension") ? nbt.getInt("TileDimension") : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(CompoundTag nbt, DimensionPalette dimensions) {
|
public void write(CompoundTag nbt, DimensionPalette dimensions) {
|
||||||
super.write(nbt, dimensions);
|
super.write(nbt, dimensions);
|
||||||
nbt.put("TilePos", NbtUtils.writeBlockPos(tilePos));
|
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);
|
return InteractionResultHolder.pass(heldItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public InteractionResult handScheduleTo(ItemStack pStack, Player pPlayer, LivingEntity pInteractionTarget,
|
||||||
public InteractionResult interactLivingEntity(ItemStack pStack, Player pPlayer, LivingEntity pInteractionTarget,
|
|
||||||
InteractionHand pUsedHand) {
|
InteractionHand pUsedHand) {
|
||||||
InteractionResult pass = InteractionResult.PASS;
|
InteractionResult pass = InteractionResult.PASS;
|
||||||
|
|
||||||
|
@ -123,6 +122,7 @@ public class ScheduleItem extends Item implements MenuProvider {
|
||||||
pStack.shrink(1);
|
pStack.shrink(1);
|
||||||
pPlayer.setItemInHand(pUsedHand, pStack.isEmpty() ? ItemStack.EMPTY : pStack);
|
pPlayer.setItemInHand(pUsedHand, pStack.isEmpty() ? ItemStack.EMPTY : pStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,19 +11,20 @@ import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.Entity;
|
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.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
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.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
@EventBusSubscriber
|
@EventBusSubscriber
|
||||||
public class ScheduleItemRetrieval {
|
public class ScheduleItemEntityInteraction {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void removeScheduleFromConductor(EntityInteract event) {
|
public static void interactWithConductor(EntityInteractSpecific event) {
|
||||||
Entity entity = event.getTarget();
|
Entity entity = event.getTarget();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (player == null || entity == null)
|
if (player == null || entity == null)
|
||||||
|
@ -34,16 +35,24 @@ public class ScheduleItemRetrieval {
|
||||||
Entity rootVehicle = entity.getRootVehicle();
|
Entity rootVehicle = entity.getRootVehicle();
|
||||||
if (!(rootVehicle instanceof CarriageContraptionEntity))
|
if (!(rootVehicle instanceof CarriageContraptionEntity))
|
||||||
return;
|
return;
|
||||||
|
if (!(entity instanceof LivingEntity living))
|
||||||
|
return;
|
||||||
|
if (player.getCooldowns()
|
||||||
|
.isOnCooldown(AllItems.SCHEDULE.get()))
|
||||||
|
return;
|
||||||
|
|
||||||
ItemStack itemStack = event.getItemStack();
|
ItemStack itemStack = event.getItemStack();
|
||||||
if (AllItems.SCHEDULE.isIn(itemStack) && entity instanceof Wolf wolf) {
|
if (itemStack.getItem()instanceof ScheduleItem si) {
|
||||||
itemStack.getItem()
|
InteractionResult result = si.handScheduleTo(itemStack, player, living, event.getHand());
|
||||||
.interactLivingEntity(itemStack, player, wolf, event.getHand());
|
if (result.consumesAction()) {
|
||||||
return;
|
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)
|
if (event.getHand() == InteractionHand.OFF_HAND)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -68,31 +77,47 @@ public class ScheduleItemRetrieval {
|
||||||
if (directions == null)
|
if (directions == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
boolean onServer = !event.getWorld().isClientSide;
|
||||||
|
|
||||||
if (train.runtime.paused && !train.runtime.completed) {
|
if (train.runtime.paused && !train.runtime.completed) {
|
||||||
train.runtime.paused = false;
|
if (onServer) {
|
||||||
AllSoundEvents.CONFIRM.playOnServer(player.level, player.blockPosition(), 1, 1);
|
train.runtime.paused = false;
|
||||||
player.displayClientMessage(Lang.translateDirect("schedule.continued"), true);
|
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);
|
event.setCanceled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack itemInHand = player.getItemInHand(event.getHand());
|
ItemStack itemInHand = player.getItemInHand(event.getHand());
|
||||||
if (!itemInHand.isEmpty()) {
|
if (!itemInHand.isEmpty()) {
|
||||||
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
|
if (onServer) {
|
||||||
player.displayClientMessage(Lang.translateDirect("schedule.remove_with_empty_hand"), true);
|
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);
|
event.setCanceled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AllSoundEvents.playItemPickup(player);
|
if (onServer) {
|
||||||
player.displayClientMessage(
|
AllSoundEvents.playItemPickup(player);
|
||||||
Lang.translateDirect(
|
player.displayClientMessage(
|
||||||
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
|
Lang.translateDirect(
|
||||||
true);
|
train.runtime.isAutoSchedule ? "schedule.auto_removed_from_train" : "schedule.removed_from_train"),
|
||||||
|
true);
|
||||||
|
|
||||||
player.getInventory()
|
player.getInventory()
|
||||||
.placeItemBackInInventory(train.runtime.returnSchedule());
|
.placeItemBackInInventory(train.runtime.returnSchedule());
|
||||||
// player.setItemInHand(event.getHand(), train.runtime.returnSchedule());
|
}
|
||||||
|
|
||||||
|
player.getCooldowns()
|
||||||
|
.addCooldown(AllItems.SCHEDULE.get(), 5);
|
||||||
|
event.setCancellationResult(InteractionResult.SUCCESS);
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
|
@ -29,6 +29,9 @@ import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
public class ScheduleRuntime {
|
public class ScheduleRuntime {
|
||||||
|
|
||||||
|
private static final int TBD = -1;
|
||||||
|
private static final int INVALID = -2;
|
||||||
|
|
||||||
public enum State {
|
public enum State {
|
||||||
PRE_TRANSIT, IN_TRANSIT, POST_TRANSIT
|
PRE_TRANSIT, IN_TRANSIT, POST_TRANSIT
|
||||||
}
|
}
|
||||||
|
@ -129,7 +132,7 @@ public class ScheduleRuntime {
|
||||||
destinationReached();
|
destinationReached();
|
||||||
return;
|
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;
|
state = State.IN_TRANSIT;
|
||||||
ticksInTransit = 0;
|
ticksInTransit = 0;
|
||||||
}
|
}
|
||||||
|
@ -231,7 +234,7 @@ public class ScheduleRuntime {
|
||||||
isAutoSchedule = auto;
|
isAutoSchedule = auto;
|
||||||
train.status.newSchedule();
|
train.status.newSchedule();
|
||||||
predictionTicks = new ArrayList<>();
|
predictionTicks = new ArrayList<>();
|
||||||
schedule.entries.forEach($ -> predictionTicks.add(-1));
|
schedule.entries.forEach($ -> predictionTicks.add(TBD));
|
||||||
displayLinkUpdateRequested = true;
|
displayLinkUpdateRequested = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,8 +272,10 @@ public class ScheduleRuntime {
|
||||||
if (currentStation != null)
|
if (currentStation != null)
|
||||||
predictions.add(createPrediction(current, currentStation.name, currentTitle, 0));
|
predictions.add(createPrediction(current, currentStation.name, currentTitle, 0));
|
||||||
int departureTime = estimateStayDuration(current);
|
int departureTime = estimateStayDuration(current);
|
||||||
if (departureTime == -1)
|
if (departureTime == INVALID)
|
||||||
accumulatedTime = -1;
|
accumulatedTime = INVALID;
|
||||||
|
else
|
||||||
|
accumulatedTime += departureTime;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
GlobalStation destination = train.navigation.destination;
|
GlobalStation destination = train.navigation.destination;
|
||||||
|
@ -292,10 +297,10 @@ public class ScheduleRuntime {
|
||||||
predictions.add(createPrediction(current, destination.name, currentTitle, accumulatedTime));
|
predictions.add(createPrediction(current, destination.name, currentTitle, accumulatedTime));
|
||||||
|
|
||||||
int departureTime = estimateStayDuration(current);
|
int departureTime = estimateStayDuration(current);
|
||||||
if (departureTime != -1)
|
if (departureTime != INVALID)
|
||||||
accumulatedTime += departureTime;
|
accumulatedTime += departureTime;
|
||||||
if (departureTime == -1)
|
else
|
||||||
accumulatedTime = -1;
|
accumulatedTime = INVALID;
|
||||||
|
|
||||||
} else
|
} else
|
||||||
predictForEntry(current, currentTitle, accumulatedTime, predictions);
|
predictForEntry(current, currentTitle, accumulatedTime, predictions);
|
||||||
|
@ -327,47 +332,56 @@ public class ScheduleRuntime {
|
||||||
return accumulatedTime;
|
return accumulatedTime;
|
||||||
if (predictionTicks.size() <= currentEntry)
|
if (predictionTicks.size() <= currentEntry)
|
||||||
return accumulatedTime;
|
return accumulatedTime;
|
||||||
if (accumulatedTime == -1) {
|
|
||||||
|
int departureTime = estimateStayDuration(index);
|
||||||
|
|
||||||
|
if (accumulatedTime < 0) {
|
||||||
predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime));
|
predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime));
|
||||||
return -1;
|
return Math.min(accumulatedTime, departureTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
int predictedTime = predictionTicks.get(index);
|
int predictedTime = predictionTicks.get(index);
|
||||||
int departureTime = estimateStayDuration(index);
|
accumulatedTime += predictedTime;
|
||||||
|
|
||||||
if (predictedTime == -1)
|
if (predictedTime == TBD)
|
||||||
accumulatedTime = -1;
|
accumulatedTime = TBD;
|
||||||
else {
|
|
||||||
accumulatedTime += predictedTime;
|
|
||||||
if (departureTime != -1)
|
|
||||||
accumulatedTime += departureTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime));
|
predictions.add(createPrediction(index, filter.getFilter(), currentTitle, accumulatedTime));
|
||||||
|
|
||||||
if (departureTime == -1)
|
if (accumulatedTime != TBD)
|
||||||
return -1;
|
accumulatedTime += departureTime;
|
||||||
|
|
||||||
|
if (departureTime == INVALID)
|
||||||
|
accumulatedTime = INVALID;
|
||||||
|
|
||||||
return accumulatedTime;
|
return accumulatedTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int estimateStayDuration(int index) {
|
private int estimateStayDuration(int index) {
|
||||||
if (index >= schedule.entries.size()) {
|
if (index >= schedule.entries.size()) {
|
||||||
if (!schedule.cyclic)
|
if (!schedule.cyclic)
|
||||||
return 100000;
|
return INVALID;
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScheduleEntry scheduleEntry = schedule.entries.get(index);
|
ScheduleEntry scheduleEntry = schedule.entries.get(index);
|
||||||
for (List<ScheduleWaitCondition> list : scheduleEntry.conditions)
|
Columns: for (List<ScheduleWaitCondition> list : scheduleEntry.conditions) {
|
||||||
for (ScheduleWaitCondition condition : list)
|
int total = 0;
|
||||||
if (condition instanceof ScheduledDelay wait)
|
for (ScheduleWaitCondition condition : list) {
|
||||||
return wait.totalWaitTicks();
|
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) {
|
private TrainDeparturePrediction createPrediction(int index, String destination, String currentTitle, int time) {
|
||||||
|
if (time == INVALID)
|
||||||
|
return null;
|
||||||
|
|
||||||
int size = schedule.entries.size();
|
int size = schedule.entries.size();
|
||||||
if (index >= size) {
|
if (index >= size) {
|
||||||
if (!schedule.cyclic)
|
if (!schedule.cyclic)
|
||||||
|
@ -422,7 +436,7 @@ public class ScheduleRuntime {
|
||||||
|
|
||||||
int[] readTransits = tag.getIntArray("TransitTimes");
|
int[] readTransits = tag.getIntArray("TransitTimes");
|
||||||
if (schedule != null) {
|
if (schedule != null) {
|
||||||
schedule.entries.forEach($ -> predictionTicks.add(-1));
|
schedule.entries.forEach($ -> predictionTicks.add(TBD));
|
||||||
if (readTransits.length == schedule.entries.size())
|
if (readTransits.length == schedule.entries.size())
|
||||||
for (int i = 0; i < readTransits.length; i++)
|
for (int i = 0; i < readTransits.length; i++)
|
||||||
predictionTicks.set(i, readTransits[i]);
|
predictionTicks.set(i, readTransits[i]);
|
||||||
|
|
|
@ -110,6 +110,8 @@ public abstract class CargoThresholdCondition extends LazyTickedScheduleConditio
|
||||||
public List<Component> getSecondLineTooltip(int slot) {
|
public List<Component> getSecondLineTooltip(int slot) {
|
||||||
return ImmutableList.of(Lang.translateDirect("schedule.condition.threshold.place_item"),
|
return ImmutableList.of(Lang.translateDirect("schedule.condition.threshold.place_item"),
|
||||||
Lang.translateDirect("schedule.condition.threshold.place_item_2")
|
Lang.translateDirect("schedule.condition.threshold.place_item_2")
|
||||||
|
.withStyle(ChatFormatting.GRAY),
|
||||||
|
Lang.translateDirect("schedule.condition.threshold.place_item_3")
|
||||||
.withStyle(ChatFormatting.GRAY));
|
.withStyle(ChatFormatting.GRAY));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,9 +44,6 @@ public class FluidThresholdCondition extends CargoThresholdCondition {
|
||||||
Ops operator = getOperator();
|
Ops operator = getOperator();
|
||||||
int target = getThreshold();
|
int target = getThreshold();
|
||||||
|
|
||||||
if (compareStack.isEmpty())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int foundFluid = 0;
|
int foundFluid = 0;
|
||||||
for (Carriage carriage : train.carriages) {
|
for (Carriage carriage : train.carriages) {
|
||||||
IFluidHandler fluids = carriage.storage.getFluids();
|
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." + Lang.asId(getOperator().name()))),
|
||||||
Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(),
|
Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(),
|
||||||
Lang.translateDirect("schedule.condition.threshold.buckets"),
|
Lang.translateDirect("schedule.condition.threshold.buckets"),
|
||||||
compareStack.getItem() instanceof FilterItem
|
compareStack.isEmpty() ? Lang.translateDirect("schedule.condition.threshold.anything")
|
||||||
? Lang.translateDirect("schedule.condition.threshold.matching_content")
|
: compareStack.getItem() instanceof FilterItem
|
||||||
: loadFluid().getDisplayName())
|
? Lang.translateDirect("schedule.condition.threshold.matching_content")
|
||||||
|
: loadFluid().getDisplayName())
|
||||||
.withStyle(ChatFormatting.DARK_AQUA));
|
.withStyle(ChatFormatting.DARK_AQUA));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,6 @@ public class ItemThresholdCondition extends CargoThresholdCondition {
|
||||||
int target = getThreshold();
|
int target = getThreshold();
|
||||||
boolean stacks = inStacks();
|
boolean stacks = inStacks();
|
||||||
|
|
||||||
if (stack.isEmpty())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int foundItems = 0;
|
int foundItems = 0;
|
||||||
for (Carriage carriage : train.carriages) {
|
for (Carriage carriage : train.carriages) {
|
||||||
IItemHandlerModifiable items = carriage.storage.getItems();
|
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." + Lang.asId(getOperator().name()))),
|
||||||
Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(),
|
Lang.translateDirect("schedule.condition.threshold.x_units_of_item", getThreshold(),
|
||||||
Lang.translateDirect("schedule.condition.threshold." + (inStacks() ? "stacks" : "items")),
|
Lang.translateDirect("schedule.condition.threshold." + (inStacks() ? "stacks" : "items")),
|
||||||
stack.getItem() instanceof FilterItem ? Lang.translateDirect("schedule.condition.threshold.matching_content")
|
stack.isEmpty() ? Lang.translateDirect("schedule.condition.threshold.anything")
|
||||||
: stack.getHoverName())
|
: stack.getItem() instanceof FilterItem
|
||||||
|
? Lang.translateDirect("schedule.condition.threshold.matching_content")
|
||||||
|
: stack.getHoverName())
|
||||||
.withStyle(ChatFormatting.DARK_AQUA));
|
.withStyle(ChatFormatting.DARK_AQUA));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,10 @@ import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.chat.MutableComponent;
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
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.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
|
@ -26,9 +29,14 @@ public class StationPoweredCondition extends ScheduleWaitCondition {
|
||||||
if (currentStation == null)
|
if (currentStation == null)
|
||||||
return false;
|
return false;
|
||||||
BlockPos stationPos = currentStation.getTilePos();
|
BlockPos stationPos = currentStation.getTilePos();
|
||||||
if (!level.isLoaded(stationPos))
|
ResourceKey<Level> stationDim = currentStation.getTileDimension();
|
||||||
|
MinecraftServer server = level.getServer();
|
||||||
|
if (server == null)
|
||||||
return false;
|
return false;
|
||||||
return level.hasNeighborSignal(stationPos);
|
ServerLevel stationLevel = server.getLevel(stationDim);
|
||||||
|
if (stationLevel == null || !stationLevel.isLoaded(stationPos))
|
||||||
|
return false;
|
||||||
|
return stationLevel.hasNeighborSignal(stationPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -10,6 +10,7 @@ import net.minecraft.core.Direction;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.Mob;
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.Level;
|
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.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
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.CollisionContext;
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
import net.minecraft.world.phys.shapes.Shapes;
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||||
|
@ -43,6 +45,11 @@ public class FakeTrackBlock extends Block implements EntityBlock, ProperWaterlog
|
||||||
public RenderShape getRenderShape(BlockState pState) {
|
public RenderShape getRenderShape(BlockState pState) {
|
||||||
return RenderShape.ENTITYBLOCK_ANIMATED;
|
return RenderShape.ENTITYBLOCK_ANIMATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockPathTypes getAiPathNodeType(BlockState state, BlockGetter world, BlockPos pos, Mob entity) {
|
||||||
|
return BlockPathTypes.DAMAGE_OTHER;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createBlockStateDefinition(Builder<Block, BlockState> pBuilder) {
|
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.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.Mob;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
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.levelgen.structure.BoundingBox;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
import net.minecraft.world.level.material.PushReaction;
|
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.PortalForcer;
|
||||||
import net.minecraft.world.level.portal.PortalInfo;
|
import net.minecraft.world.level.portal.PortalInfo;
|
||||||
import net.minecraft.world.phys.AABB;
|
import net.minecraft.world.phys.AABB;
|
||||||
|
@ -119,6 +121,11 @@ public class TrackBlock extends Block
|
||||||
protected void createBlockStateDefinition(Builder<Block, BlockState> p_49915_) {
|
protected void createBlockStateDefinition(Builder<Block, BlockState> p_49915_) {
|
||||||
super.createBlockStateDefinition(p_49915_.add(SHAPE, HAS_TE, WATERLOGGED));
|
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
|
@Override
|
||||||
public FluidState getFluidState(BlockState state) {
|
public FluidState getFluidState(BlockState state) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.ListTag;
|
import net.minecraft.nbt.ListTag;
|
||||||
import net.minecraft.nbt.StringTag;
|
import net.minecraft.nbt.StringTag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.chat.HoverEvent;
|
||||||
import net.minecraft.network.chat.MutableComponent;
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.network.chat.Style;
|
import net.minecraft.network.chat.Style;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
|
@ -154,7 +155,11 @@ public class MaterialChecklist {
|
||||||
private Component entry(ItemStack item, int amount, boolean unfinished) {
|
private Component entry(ItemStack item, int amount, boolean unfinished) {
|
||||||
int stacks = amount / 64;
|
int stacks = amount / 64;
|
||||||
int remainder = 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)
|
if (!unfinished)
|
||||||
tc.append(" \u2714");
|
tc.append(" \u2714");
|
||||||
tc.withStyle(unfinished ? ChatFormatting.BLUE : ChatFormatting.DARK_GREEN);
|
tc.withStyle(unfinished ? ChatFormatting.BLUE : ChatFormatting.DARK_GREEN);
|
||||||
|
|
|
@ -31,7 +31,7 @@ import net.minecraft.world.phys.Vec3;
|
||||||
public class DumpRailwaysCommand {
|
public class DumpRailwaysCommand {
|
||||||
|
|
||||||
static ArgumentBuilder<CommandSourceStack, ?> register() {
|
static ArgumentBuilder<CommandSourceStack, ?> register() {
|
||||||
return Commands.literal("dumpRailways")
|
return Commands.literal("trains")
|
||||||
.requires(cs -> cs.hasPermission(2))
|
.requires(cs -> cs.hasPermission(2))
|
||||||
.executes(ctx -> {
|
.executes(ctx -> {
|
||||||
CommandSourceStack source = ctx.getSource();
|
CommandSourceStack source = ctx.getSource();
|
||||||
|
@ -52,7 +52,7 @@ public class DumpRailwaysCommand {
|
||||||
int orange = 0xFFAD60;
|
int orange = 0xFFAD60;
|
||||||
|
|
||||||
chat.accept("", white);
|
chat.accept("", white);
|
||||||
chat.accept("-+------<< Railways Summary: >>------+-", white);
|
chat.accept("-+------<< Train Summary: >>------+-", white);
|
||||||
int graphCount = railways.trackNetworks.size();
|
int graphCount = railways.trackNetworks.size();
|
||||||
chat.accept("Track Networks: " + graphCount, blue);
|
chat.accept("Track Networks: " + graphCount, blue);
|
||||||
chat.accept("Signal Groups: " + railways.signalEdgeGroups.size(), 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 bulkPressing = b(false, "bulkPressing", Comments.bulkPressing);
|
||||||
public final ConfigBool bulkCutting = b(false, "bulkCutting", Comments.bulkCutting);
|
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 allowShapelessInMixer = b(true, "allowShapelessInMixer", Comments.allowShapelessInMixer);
|
||||||
public final ConfigBool allowShapedSquareInPress = b(true, "allowShapedSquareInPress", Comments.allowShapedSquareInPress);
|
public final ConfigBool allowShapedSquareInPress = b(true, "allowShapedSquareInPress", Comments.allowShapedSquareInPress);
|
||||||
public final ConfigBool allowRegularCraftingInCrafter =
|
public final ConfigBool allowRegularCraftingInCrafter =
|
||||||
|
@ -28,8 +29,9 @@ public class CRecipes extends ConfigBase {
|
||||||
private static class Comments {
|
private static class Comments {
|
||||||
static String bulkPressing = "Allow the Mechanical Press to process entire stacks at a time.";
|
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 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 =
|
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 =
|
static String allowShapedSquareInPress =
|
||||||
"Allow any single-ingredient 2x2 or 3x3 crafting recipes to be processed by a Mechanical Press + Basin.";
|
"Allow any single-ingredient 2x2 or 3x3 crafting recipes to be processed by a Mechanical Press + Basin.";
|
||||||
static String allowRegularCraftingInCrafter =
|
static String allowRegularCraftingInCrafter =
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class CStress extends ConfigBase implements IStressValueProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerAll(Builder builder) {
|
protected void registerAll(Builder builder) {
|
||||||
builder.comment("", Comments.su, Comments.impact)
|
builder.comment(".", Comments.su, Comments.impact)
|
||||||
.push("impact");
|
.push("impact");
|
||||||
BlockStressDefaults.DEFAULT_IMPACTS.forEach((r, i) -> {
|
BlockStressDefaults.DEFAULT_IMPACTS.forEach((r, i) -> {
|
||||||
if (r.getNamespace()
|
if (r.getNamespace()
|
||||||
|
@ -31,7 +31,7 @@ public class CStress extends ConfigBase implements IStressValueProvider {
|
||||||
});
|
});
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
|
||||||
builder.comment("", Comments.su, Comments.capacity)
|
builder.comment(".", Comments.su, Comments.capacity)
|
||||||
.push("capacity");
|
.push("capacity");
|
||||||
BlockStressDefaults.DEFAULT_CAPACITIES.forEach((r, i) -> {
|
BlockStressDefaults.DEFAULT_CAPACITIES.forEach((r, i) -> {
|
||||||
if (r.getNamespace()
|
if (r.getNamespace()
|
||||||
|
|
|
@ -110,11 +110,11 @@ public abstract class ConfigBase {
|
||||||
public void addComments(Builder builder, String... comment) {
|
public void addComments(Builder builder, String... comment) {
|
||||||
if (comment.length > 0) {
|
if (comment.length > 0) {
|
||||||
String[] comments = new String[comment.length + 1];
|
String[] comments = new String[comment.length + 1];
|
||||||
comments[0] = " ";
|
comments[0] = ".";
|
||||||
System.arraycopy(comment, 0, comments, 1, comment.length);
|
System.arraycopy(comment, 0, comments, 1, comment.length);
|
||||||
builder.comment(comments);
|
builder.comment(comments);
|
||||||
} else
|
} else
|
||||||
builder.comment(" ");
|
builder.comment(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(ForgeConfigSpec.Builder builder) {
|
public void register(ForgeConfigSpec.Builder builder) {
|
||||||
|
|
|
@ -46,10 +46,11 @@ public enum ContraptionMovementSetting {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerDefaults() {
|
public static void registerDefaults() {
|
||||||
register(Blocks.BUDDING_AMETHYST, () -> AllConfigs.SERVER.kinetics.amethystMovement.get());
|
|
||||||
register(Blocks.SPAWNER, () -> AllConfigs.SERVER.kinetics.spawnerMovement.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.OBSIDIAN, () -> AllConfigs.SERVER.kinetics.obsidianMovement.get());
|
||||||
register(Blocks.CRYING_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 {
|
public interface IMovementSettingProvider extends IForgeBlock {
|
||||||
|
|
|
@ -204,11 +204,13 @@ public abstract class FluidIngredient implements Predicate<FluidStack> {
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
protected boolean testInternal(FluidStack t) {
|
protected boolean testInternal(FluidStack t) {
|
||||||
if (tag == null)
|
if (tag == null) {
|
||||||
for (FluidStack accepted : getMatchingFluidStacks())
|
for (FluidStack accepted : getMatchingFluidStacks())
|
||||||
if (accepted.getFluid()
|
if (accepted.getFluid()
|
||||||
.isSame(t.getFluid()))
|
.isSame(t.getFluid()))
|
||||||
return true;
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return t.getFluid().is(tag);
|
return t.getFluid().is(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.apache.logging.log4j.util.TriConsumer;
|
import org.apache.logging.log4j.util.TriConsumer;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
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_);
|
protected abstract void playStepSound(BlockPos p_180429_1_, BlockState p_180429_2_);
|
||||||
|
|
||||||
private Set<AbstractContraptionEntity> getIntersectingContraptions() {
|
private Set<AbstractContraptionEntity> getIntersectingContraptions() {
|
||||||
Set<AbstractContraptionEntity> contraptions = ContraptionHandler.loadedContraptions.get(self.level)
|
Set<AbstractContraptionEntity> contraptions = getIntersectionContraptionsStream().collect(Collectors.toSet());
|
||||||
.values()
|
|
||||||
.stream()
|
|
||||||
.map(Reference::get)
|
|
||||||
.filter(cEntity -> cEntity != null && cEntity.collidingEntities.containsKey(self))
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
|
|
||||||
contraptions.addAll(self.level.getEntitiesOfClass(AbstractContraptionEntity.class, self.getBoundingBox()
|
contraptions.addAll(self.level.getEntitiesOfClass(AbstractContraptionEntity.class, self.getBoundingBox()
|
||||||
.inflate(1f)));
|
.inflate(1f)));
|
||||||
return contraptions;
|
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) {
|
private void forCollision(Vec3 anchorPos, TriConsumer<Contraption, BlockState, BlockPos> action) {
|
||||||
getIntersectingContraptions().forEach(cEntity -> {
|
getIntersectingContraptions().forEach(cEntity -> {
|
||||||
Vec3 localPos = ContraptionCollider.getWorldToLocalTranslation(anchorPos, 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)`
|
@Inject(at = @At(value = "JUMP", opcode = 154, // IFNE line 661 injecting before `!blockstate.isAir(this.world, blockpos)`
|
||||||
ordinal = 7), method = "move")
|
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()
|
Vec3 worldPos = self.position()
|
||||||
.add(0, -0.2, 0);
|
.add(0, -0.2, 0);
|
||||||
AtomicBoolean stepped = new AtomicBoolean(false);
|
AtomicBoolean stepped = new AtomicBoolean(false);
|
||||||
|
@ -104,6 +108,43 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid
|
||||||
this.nextStep = this.nextStep();
|
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"))
|
@Inject(method = { "spawnSprintParticle" }, at = @At(value = "TAIL"))
|
||||||
private void createRunningParticlesMixin(CallbackInfo ci) {
|
private void createRunningParticlesMixin(CallbackInfo ci) {
|
||||||
Vec3 worldPos = self.position()
|
Vec3 worldPos = self.position()
|
||||||
|
|
|
@ -188,7 +188,7 @@ public enum AllPackets {
|
||||||
;
|
;
|
||||||
|
|
||||||
public static final ResourceLocation CHANNEL_NAME = Create.asResource("main");
|
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 final String NETWORK_VERSION_STR = String.valueOf(NETWORK_VERSION);
|
||||||
public static SimpleChannel channel;
|
public static SimpleChannel channel;
|
||||||
|
|
||||||
|
|
|
@ -134,14 +134,14 @@ public class PonderScene {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pair<ItemStack, BlockPos> rayTraceScene(Vec3 from, Vec3 to) {
|
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);
|
MutableDouble bestDistance = new MutableDouble(0);
|
||||||
|
|
||||||
forEach(WorldSectionElement.class, wse -> {
|
forEach(WorldSectionElement.class, wse -> {
|
||||||
wse.resetSelectedBlock();
|
wse.resetSelectedBlock();
|
||||||
if (!wse.isVisible())
|
if (!wse.isVisible())
|
||||||
return;
|
return;
|
||||||
Pair<Vec3, BlockPos> rayTrace = wse.rayTrace(world, from, to);
|
Pair<Vec3, BlockHitResult> rayTrace = wse.rayTrace(world, from, to);
|
||||||
if (rayTrace == null)
|
if (rayTrace == null)
|
||||||
return;
|
return;
|
||||||
double distanceTo = rayTrace.getFirst()
|
double distanceTo = rayTrace.getFirst()
|
||||||
|
@ -149,15 +149,17 @@ public class PonderScene {
|
||||||
if (nearestHit.getValue() != null && distanceTo >= bestDistance.getValue())
|
if (nearestHit.getValue() != null && distanceTo >= bestDistance.getValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
nearestHit.setValue(Pair.of(wse, rayTrace.getSecond()));
|
nearestHit.setValue(Pair.of(wse, rayTrace));
|
||||||
bestDistance.setValue(distanceTo);
|
bestDistance.setValue(distanceTo);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (nearestHit.getValue() == null)
|
if (nearestHit.getValue() == null)
|
||||||
return Pair.of(ItemStack.EMPTY, null);
|
return Pair.of(ItemStack.EMPTY, null);
|
||||||
|
|
||||||
BlockPos selectedPos = nearestHit.getValue()
|
Pair<Vec3, BlockHitResult> selectedHit = nearestHit.getValue()
|
||||||
.getSecond();
|
.getSecond();
|
||||||
|
BlockPos selectedPos = selectedHit.getSecond()
|
||||||
|
.getBlockPos();
|
||||||
|
|
||||||
BlockPos origin = new BlockPos(basePlateOffsetX, 0, basePlateOffsetZ);
|
BlockPos origin = new BlockPos(basePlateOffsetX, 0, basePlateOffsetZ);
|
||||||
if (!world.getBounds()
|
if (!world.getBounds()
|
||||||
|
@ -176,9 +178,14 @@ public class PonderScene {
|
||||||
.getFirst()
|
.getFirst()
|
||||||
.selectBlock(selectedPos);
|
.selectBlock(selectedPos);
|
||||||
BlockState blockState = world.getBlockState(selectedPos);
|
BlockState blockState = world.getBlockState(selectedPos);
|
||||||
ItemStack pickBlock = blockState.getCloneItemStack(
|
|
||||||
new BlockHitResult(VecHelper.getCenterOf(selectedPos), Direction.UP, selectedPos, true), world, selectedPos,
|
Direction direction = selectedHit.getSecond()
|
||||||
Minecraft.getInstance().player);
|
.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);
|
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.BlockParticleOption;
|
||||||
import net.minecraft.core.particles.ParticleOptions;
|
import net.minecraft.core.particles.ParticleOptions;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
|
@ -54,7 +55,7 @@ public class PonderWorld extends SchematicWorld {
|
||||||
public PonderScene scene;
|
public PonderScene scene;
|
||||||
|
|
||||||
protected Map<BlockPos, BlockState> originalBlocks;
|
protected Map<BlockPos, BlockState> originalBlocks;
|
||||||
protected Map<BlockPos, BlockEntity> originalTileEntities;
|
protected Map<BlockPos, CompoundTag> originalTileEntities;
|
||||||
protected Map<BlockPos, Integer> blockBreakingProgressions;
|
protected Map<BlockPos, Integer> blockBreakingProgressions;
|
||||||
protected List<Entity> originalEntities;
|
protected List<Entity> originalEntities;
|
||||||
private Supplier<ClientLevel> asClientWorld = Suppliers.memoize(() -> WrappedClientWorld.of(this));
|
private Supplier<ClientLevel> asClientWorld = Suppliers.memoize(() -> WrappedClientWorld.of(this));
|
||||||
|
@ -79,8 +80,7 @@ public class PonderWorld extends SchematicWorld {
|
||||||
originalBlocks.clear();
|
originalBlocks.clear();
|
||||||
originalTileEntities.clear();
|
originalTileEntities.clear();
|
||||||
blocks.forEach((k, v) -> originalBlocks.put(k, v));
|
blocks.forEach((k, v) -> originalBlocks.put(k, v));
|
||||||
tileEntities.forEach(
|
tileEntities.forEach((k, v) -> originalTileEntities.put(k, v.saveWithFullMetadata()));
|
||||||
(k, v) -> originalTileEntities.put(k, BlockEntity.loadStatic(k, blocks.get(k), v.saveWithFullMetadata())));
|
|
||||||
entities.forEach(e -> EntityType.create(e.serializeNBT(), this)
|
entities.forEach(e -> EntityType.create(e.serializeNBT(), this)
|
||||||
.ifPresent(originalEntities::add));
|
.ifPresent(originalEntities::add));
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ public class PonderWorld extends SchematicWorld {
|
||||||
renderedTileEntities.clear();
|
renderedTileEntities.clear();
|
||||||
originalBlocks.forEach((k, v) -> blocks.put(k, v));
|
originalBlocks.forEach((k, v) -> blocks.put(k, v));
|
||||||
originalTileEntities.forEach((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());
|
onTEadded(te, te.getBlockPos());
|
||||||
tileEntities.put(k, te);
|
tileEntities.put(k, te);
|
||||||
renderedTileEntities.add(te);
|
renderedTileEntities.add(te);
|
||||||
|
@ -109,8 +109,7 @@ public class PonderWorld extends SchematicWorld {
|
||||||
if (originalBlocks.containsKey(p))
|
if (originalBlocks.containsKey(p))
|
||||||
blocks.put(p, originalBlocks.get(p));
|
blocks.put(p, originalBlocks.get(p));
|
||||||
if (originalTileEntities.containsKey(p)) {
|
if (originalTileEntities.containsKey(p)) {
|
||||||
BlockEntity te = BlockEntity.loadStatic(p, originalBlocks.get(p), originalTileEntities.get(p)
|
BlockEntity te = BlockEntity.loadStatic(p, originalBlocks.get(p), originalTileEntities.get(p));
|
||||||
.saveWithFullMetadata());
|
|
||||||
onTEadded(te, te.getBlockPos());
|
onTEadded(te, te.getBlockPos());
|
||||||
tileEntities.put(p, te);
|
tileEntities.put(p, te);
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,7 +181,7 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
||||||
BlockPos worldPos;
|
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);
|
world.setMask(this.section);
|
||||||
Vec3 transformedTarget = reverseTransformVec(target);
|
Vec3 transformedTarget = reverseTransformVec(target);
|
||||||
BlockHitResult rayTraceBlocks = world.clip(new ClipContext(reverseTransformVec(source), transformedTarget,
|
BlockHitResult rayTraceBlocks = world.clip(new ClipContext(reverseTransformVec(source), transformedTarget,
|
||||||
|
@ -199,7 +199,7 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
||||||
/ source.subtract(target)
|
/ source.subtract(target)
|
||||||
.lengthSqr();
|
.lengthSqr();
|
||||||
Vec3 actualHit = VecHelper.lerp((float) t, target, source);
|
Vec3 actualHit = VecHelper.lerp((float) t, target, source);
|
||||||
return Pair.of(actualHit, rayTraceBlocks.getBlockPos());
|
return Pair.of(actualHit, rayTraceBlocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vec3 reverseTransformVec(Vec3 in) {
|
private Vec3 reverseTransformVec(Vec3 in) {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue