mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-17 00:13:40 +01:00
Merge branch 'mc1.15/dev' into mc1.15/metadoc
This commit is contained in:
commit
4a5479838c
182 changed files with 17836 additions and 6850 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -40,4 +40,3 @@ local.properties
|
||||||
|
|
||||||
# PDT-specific
|
# PDT-specific
|
||||||
.buildpath
|
.buildpath
|
||||||
src/generated/resources/.cache/cache
|
|
||||||
|
|
|
@ -157,6 +157,8 @@ afff479c0e5284771afa9e7ce513595fe65860ee assets/create/blockstates/gabbro_cobble
|
||||||
a1f31a194129cfb65e335b3b96490f9275f9c564 assets/create/blockstates/gabbro_cobblestone_stairs.json
|
a1f31a194129cfb65e335b3b96490f9275f9c564 assets/create/blockstates/gabbro_cobblestone_stairs.json
|
||||||
a64d8d0924c0b5b192f355343dd9b3a440875f6a assets/create/blockstates/gabbro_cobblestone_wall.json
|
a64d8d0924c0b5b192f355343dd9b3a440875f6a assets/create/blockstates/gabbro_cobblestone_wall.json
|
||||||
a6b44e8a1c4ce0c7442b2384b41ad36dd133f19b assets/create/blockstates/gabbro_pillar.json
|
a6b44e8a1c4ce0c7442b2384b41ad36dd133f19b assets/create/blockstates/gabbro_pillar.json
|
||||||
|
2d7ffcb339b0a38b98935a382ac2a164866255b1 assets/create/blockstates/gantry_pinion.json
|
||||||
|
9fa39a44bba30c5ae8fa245b122a837c705462b4 assets/create/blockstates/gantry_shaft.json
|
||||||
eca1f0e56efdadb241f42dc6ebb036f1d52213a9 assets/create/blockstates/gearbox.json
|
eca1f0e56efdadb241f42dc6ebb036f1d52213a9 assets/create/blockstates/gearbox.json
|
||||||
f34814b17cde3231a1dfb271f3dabf8d6de4fbf6 assets/create/blockstates/gearshift.json
|
f34814b17cde3231a1dfb271f3dabf8d6de4fbf6 assets/create/blockstates/gearshift.json
|
||||||
93f8bdc22d9a5e04268964e35e4285c8cbf2b89d assets/create/blockstates/glass_fluid_pipe.json
|
93f8bdc22d9a5e04268964e35e4285c8cbf2b89d assets/create/blockstates/glass_fluid_pipe.json
|
||||||
|
@ -398,17 +400,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
||||||
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
|
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 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
|
||||||
df67c2c11fa22487d3a0fdc9b008056e593d14e3 assets/create/lang/en_ud.json
|
e3f618c5b622d21880de858678d1802cbf65e615 assets/create/lang/en_ud.json
|
||||||
3ad443f44eb33fe8c3ac092d1532dcbd27e49c84 assets/create/lang/en_us.json
|
acc852d80378b426d7ee6cb59c169e06b6d63b25 assets/create/lang/en_us.json
|
||||||
612a63d73f7f4b8e79dce3f53ddbe3345f0e74d8 assets/create/lang/unfinished/de_de.json
|
30ce93c56557cea2f384a47b549fb893700523a5 assets/create/lang/unfinished/de_de.json
|
||||||
2e37dc718a8dea2af85daba7266c877ce80ff35b assets/create/lang/unfinished/fr_fr.json
|
77b8310f3cbed36fa0d2ee29e65ac6aee0c2adc2 assets/create/lang/unfinished/es_mx.json
|
||||||
f843761728c403276b7a47282f4fdd039b5b6854 assets/create/lang/unfinished/it_it.json
|
8db9f9147dcef8c8182c548a524f96f578c116ec assets/create/lang/unfinished/fr_fr.json
|
||||||
8b90c66fd5974c993e83bfa5733ca03187211d28 assets/create/lang/unfinished/ja_jp.json
|
89f7029d73733938ee9f900fc36d52ab7fc97563 assets/create/lang/unfinished/it_it.json
|
||||||
59db0a3cff42707ecb828b975ef1fcba2a21a521 assets/create/lang/unfinished/ko_kr.json
|
b1935e7f8d79d1112e1685adb42daedb976ac6d7 assets/create/lang/unfinished/ja_jp.json
|
||||||
b1900a6cce7216a4baa844affa169cfb32ff645c assets/create/lang/unfinished/nl_nl.json
|
23aaf879d07a24775aeba3b98c355c992b24f28b assets/create/lang/unfinished/ko_kr.json
|
||||||
d3f09a37b1f4ec5d53effc2b87efbccf2df2b7c7 assets/create/lang/unfinished/pt_br.json
|
7372533759001f094dbcad787f01f3de7422d8c0 assets/create/lang/unfinished/nl_nl.json
|
||||||
16c92dab525ba20e85b65ee084f7b760432dcb73 assets/create/lang/unfinished/ru_ru.json
|
0d1e5d79ef196a06b273962d5ac8f2013f91209c assets/create/lang/unfinished/pt_br.json
|
||||||
c8b5c2a3a65468950aa713a56bf1c930eef81305 assets/create/lang/unfinished/zh_cn.json
|
54da7badbd4fb043f73f6e9a4dfc52bd9e7f515c assets/create/lang/unfinished/ru_ru.json
|
||||||
|
45ca54406acac857752c67a45729da953d11f94a assets/create/lang/unfinished/zh_cn.json
|
||||||
|
4093ea8612465858aa57581b36f8f60aa23ac203 assets/create/lang/unfinished/zh_tw.json
|
||||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
||||||
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||||
|
@ -751,6 +755,18 @@ f278ec09c13f98ccbce1a8488d4d51c72f398ed4 assets/create/models/block/gabbro_cobbl
|
||||||
5e50c62a9db350f3a2c0e4b1c37a8dc0d149f287 assets/create/models/block/gabbro_cobblestone_wall_post.json
|
5e50c62a9db350f3a2c0e4b1c37a8dc0d149f287 assets/create/models/block/gabbro_cobblestone_wall_post.json
|
||||||
820235f51e7c3b4c05a327c3aa66618ea1e89c9c assets/create/models/block/gabbro_cobblestone_wall_side.json
|
820235f51e7c3b4c05a327c3aa66618ea1e89c9c assets/create/models/block/gabbro_cobblestone_wall_side.json
|
||||||
ede9c9209f9cee3d8e1ffc5008b1b8b026aee998 assets/create/models/block/gabbro_pillar.json
|
ede9c9209f9cee3d8e1ffc5008b1b8b026aee998 assets/create/models/block/gabbro_pillar.json
|
||||||
|
f7f55d8107d9128f7be42b2a07fd99aeeba44954 assets/create/models/block/gantry_shaft_end_flipped.json
|
||||||
|
33196bb0c2f7ca356fc62854349a3ab5fdf2d119 assets/create/models/block/gantry_shaft_end_powered.json
|
||||||
|
410c0ae1995a079766cab96a3545bb61159feba3 assets/create/models/block/gantry_shaft_end_powered_flipped.json
|
||||||
|
d66f23d811a09c7e3dad5900f9851282be2f64b7 assets/create/models/block/gantry_shaft_middle_flipped.json
|
||||||
|
9551abd37c295fe2541f2aee01dd72bfb71b8ae1 assets/create/models/block/gantry_shaft_middle_powered.json
|
||||||
|
deff4f1163284c22a60d403000c0cd7553d6caff assets/create/models/block/gantry_shaft_middle_powered_flipped.json
|
||||||
|
16eb7950f81e7242d277f5b0b2710ade820f5645 assets/create/models/block/gantry_shaft_single_flipped.json
|
||||||
|
78b51bdfa1d26f909e2d3a3ddb70a5631f4fa75f assets/create/models/block/gantry_shaft_single_powered.json
|
||||||
|
c81b86c2186cbe9867ea041776c8e70059d70f7e assets/create/models/block/gantry_shaft_single_powered_flipped.json
|
||||||
|
347430ecc316d502cea2e0f90d43ff106e9cb15c assets/create/models/block/gantry_shaft_start_flipped.json
|
||||||
|
0e1a5a8f38cd6cd3e2f7d2c0d147d924414b0560 assets/create/models/block/gantry_shaft_start_powered.json
|
||||||
|
4b2f2e9eb3d426b56bb2e0f530b249469200afd0 assets/create/models/block/gantry_shaft_start_powered_flipped.json
|
||||||
392dd57e5b96214335867799347e21ac0d05457a assets/create/models/block/granite_bricks.json
|
392dd57e5b96214335867799347e21ac0d05457a assets/create/models/block/granite_bricks.json
|
||||||
0ee90049ce09f1f1c96063bc7239cd1fadbdb947 assets/create/models/block/granite_bricks_slab.json
|
0ee90049ce09f1f1c96063bc7239cd1fadbdb947 assets/create/models/block/granite_bricks_slab.json
|
||||||
37737d6767ba08b6bd96de1ff3b920522dc3cd51 assets/create/models/block/granite_bricks_slab_top.json
|
37737d6767ba08b6bd96de1ff3b920522dc3cd51 assets/create/models/block/granite_bricks_slab_top.json
|
||||||
|
@ -1316,6 +1332,8 @@ b10971277417369f421324b28f0a4b47ce4c8625 assets/create/models/item/gabbro_bricks
|
||||||
b3d7398dbc16c450928bd76b772c273382687447 assets/create/models/item/gabbro_cobblestone_stairs.json
|
b3d7398dbc16c450928bd76b772c273382687447 assets/create/models/item/gabbro_cobblestone_stairs.json
|
||||||
5680f24b43838cb6632bfcedba282a244bd24db0 assets/create/models/item/gabbro_cobblestone_wall.json
|
5680f24b43838cb6632bfcedba282a244bd24db0 assets/create/models/item/gabbro_cobblestone_wall.json
|
||||||
20950b692eecfccd77d96678bb3d909d51f6d787 assets/create/models/item/gabbro_pillar.json
|
20950b692eecfccd77d96678bb3d909d51f6d787 assets/create/models/item/gabbro_pillar.json
|
||||||
|
b10f1b188f2bf380628377bd42af2b8f8ffe5611 assets/create/models/item/gantry_pinion.json
|
||||||
|
b4bfd5041b62f3a0a955fa4872d178b590614f22 assets/create/models/item/gantry_shaft.json
|
||||||
6ab0d17f3d02678ed992e188ff09f6b2c00b5b03 assets/create/models/item/gearbox.json
|
6ab0d17f3d02678ed992e188ff09f6b2c00b5b03 assets/create/models/item/gearbox.json
|
||||||
2fe29893d74c176ea35aed73a169c13dd4ddb2a8 assets/create/models/item/gearshift.json
|
2fe29893d74c176ea35aed73a169c13dd4ddb2a8 assets/create/models/item/gearshift.json
|
||||||
52108a61865dab38133b9f916496ca680ae364ea assets/create/models/item/golden_sheet.json
|
52108a61865dab38133b9f916496ca680ae364ea assets/create/models/item/golden_sheet.json
|
||||||
|
@ -1727,6 +1745,8 @@ b42213bffce4e51618e1bba481959208d247c120 data/create/advancements/recipes/create
|
||||||
11d89eca0ccb0f1a8cd27acc9fc0c10d7bf83285 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json
|
11d89eca0ccb0f1a8cd27acc9fc0c10d7bf83285 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json
|
||||||
a2b33e972c7130cbf105f34d88dd7a9a53d5465c data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json
|
a2b33e972c7130cbf105f34d88dd7a9a53d5465c data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json
|
||||||
a91b11ae44d9b1f479c6dee1f1a4580104059287 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_valve.json
|
a91b11ae44d9b1f479c6dee1f1a4580104059287 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_valve.json
|
||||||
|
e17c45fc17e1a8e1e618b6eae02fa0aba3247495 data/create/advancements/recipes/create.base/crafting/kinetics/gantry_pinion.json
|
||||||
|
d1d2fc2f5c4e89393808c65e015917eabb50dffe data/create/advancements/recipes/create.base/crafting/kinetics/gantry_shaft.json
|
||||||
dae9e65a089955c0367dc1453e104c3153ebad79 data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json
|
dae9e65a089955c0367dc1453e104c3153ebad79 data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json
|
||||||
8f9819912605cb2499cb3e79ecb0e709b0e38c19 data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json
|
8f9819912605cb2499cb3e79ecb0e709b0e38c19 data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json
|
||||||
94b8a1f976b9f853cb6e24b0cef72d2e16c3282f data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json
|
94b8a1f976b9f853cb6e24b0cef72d2e16c3282f data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json
|
||||||
|
@ -2435,6 +2455,8 @@ e51893e1601c470da466b35b17251238e15d0361 data/create/loot_tables/blocks/gabbro_b
|
||||||
54879fe6ca3b7271fbb94ec26bef1c3031942d4d data/create/loot_tables/blocks/gabbro_cobblestone_stairs.json
|
54879fe6ca3b7271fbb94ec26bef1c3031942d4d data/create/loot_tables/blocks/gabbro_cobblestone_stairs.json
|
||||||
ae19749df10663efc51b8b27af310164f250ed38 data/create/loot_tables/blocks/gabbro_cobblestone_wall.json
|
ae19749df10663efc51b8b27af310164f250ed38 data/create/loot_tables/blocks/gabbro_cobblestone_wall.json
|
||||||
e8d09c919e3b8125d7da0f38383c01bcfc61c7a8 data/create/loot_tables/blocks/gabbro_pillar.json
|
e8d09c919e3b8125d7da0f38383c01bcfc61c7a8 data/create/loot_tables/blocks/gabbro_pillar.json
|
||||||
|
04e42ba63002ed8ba67780123413f6ff3fb85b02 data/create/loot_tables/blocks/gantry_pinion.json
|
||||||
|
f2883656e417a78e5e4093002eb1e36ffa1157e9 data/create/loot_tables/blocks/gantry_shaft.json
|
||||||
b0109b4a4f0f738cbbe6b5911e8c3c0310b76f99 data/create/loot_tables/blocks/gearbox.json
|
b0109b4a4f0f738cbbe6b5911e8c3c0310b76f99 data/create/loot_tables/blocks/gearbox.json
|
||||||
5f39461c5c9d3ad8d84195b06b9468fe2b0fb269 data/create/loot_tables/blocks/gearshift.json
|
5f39461c5c9d3ad8d84195b06b9468fe2b0fb269 data/create/loot_tables/blocks/gearshift.json
|
||||||
c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/glass_fluid_pipe.json
|
c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/glass_fluid_pipe.json
|
||||||
|
@ -2782,6 +2804,8 @@ f4ae37f736d06ccda5fbba7831a7a174ec916a05 data/create/recipes/crafting/kinetics/f
|
||||||
86ad4d2820e8e2b01de8d977af7796119dfb7430 data/create/recipes/crafting/kinetics/fluid_tank.json
|
86ad4d2820e8e2b01de8d977af7796119dfb7430 data/create/recipes/crafting/kinetics/fluid_tank.json
|
||||||
3dad2a849796df268cd3a06ed37376f2cc529957 data/create/recipes/crafting/kinetics/fluid_valve.json
|
3dad2a849796df268cd3a06ed37376f2cc529957 data/create/recipes/crafting/kinetics/fluid_valve.json
|
||||||
84153bd478c0e63a04c77579d6595043f604b7ab data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json
|
84153bd478c0e63a04c77579d6595043f604b7ab data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json
|
||||||
|
5299a12e9272089e64073c8e151b70a5bc57b53c data/create/recipes/crafting/kinetics/gantry_pinion.json
|
||||||
|
21095a156547d4a7d215964be793f1e960b81c09 data/create/recipes/crafting/kinetics/gantry_shaft.json
|
||||||
5eb05cdf88bccdaddfe7ebfbd8b70d1196d422a6 data/create/recipes/crafting/kinetics/gearbox.json
|
5eb05cdf88bccdaddfe7ebfbd8b70d1196d422a6 data/create/recipes/crafting/kinetics/gearbox.json
|
||||||
b5da8c58f6b8aba525ae8a12ad906db37b78a566 data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json
|
b5da8c58f6b8aba525ae8a12ad906db37b78a566 data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json
|
||||||
4d4124b4f1df38d892cb19da19c6464522d3e37d data/create/recipes/crafting/kinetics/gearshift.json
|
4d4124b4f1df38d892cb19da19c6464522d3e37d data/create/recipes/crafting/kinetics/gearshift.json
|
||||||
|
@ -3515,7 +3539,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone
|
||||||
eedf31af7134d03656c5fa57229982f9c5bed07c data/create/tags/blocks/brittle.json
|
eedf31af7134d03656c5fa57229982f9c5bed07c data/create/tags/blocks/brittle.json
|
||||||
13b55d6e905a02403d2e95e9ba2357f99c5f2241 data/create/tags/blocks/fan_heaters.json
|
13b55d6e905a02403d2e95e9ba2357f99c5f2241 data/create/tags/blocks/fan_heaters.json
|
||||||
3bc64e3a1e7980237435b1770a9ba2102d57fcd4 data/create/tags/blocks/fan_transparent.json
|
3bc64e3a1e7980237435b1770a9ba2102d57fcd4 data/create/tags/blocks/fan_transparent.json
|
||||||
745a82505a68a6482407d87374e356781406ab46 data/create/tags/blocks/safe_nbt.json
|
c81ea194e808985847159b201140d4aa4cbcca65 data/create/tags/blocks/safe_nbt.json
|
||||||
c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json
|
c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json
|
||||||
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
|
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
|
||||||
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
|
50936b211d94167a35ec78c89954082a336b6269 data/create/tags/blocks/valve_handles.json
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"axis_along_first=false,facing=down": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"x": 270,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"axis_along_first=true,facing=down": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"x": 270
|
||||||
|
},
|
||||||
|
"axis_along_first=false,facing=up": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"axis_along_first=true,facing=up": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"axis_along_first=false,facing=north": {
|
||||||
|
"model": "create:block/gantry_pinion/vertical",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"axis_along_first=true,facing=north": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"axis_along_first=false,facing=south": {
|
||||||
|
"model": "create:block/gantry_pinion/vertical"
|
||||||
|
},
|
||||||
|
"axis_along_first=true,facing=south": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal"
|
||||||
|
},
|
||||||
|
"axis_along_first=false,facing=west": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"axis_along_first=true,facing=west": {
|
||||||
|
"model": "create:block/gantry_pinion/vertical",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"axis_along_first=false,facing=east": {
|
||||||
|
"model": "create:block/gantry_pinion/horizontal",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"axis_along_first=true,facing=east": {
|
||||||
|
"model": "create:block/gantry_pinion/vertical",
|
||||||
|
"y": 270
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,212 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=down,part=start,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_start_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=start,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_start"
|
||||||
|
},
|
||||||
|
"facing=north,part=start,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_start_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=start,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_start",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=start,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_start_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=start,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_start",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=middle,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=middle,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_middle"
|
||||||
|
},
|
||||||
|
"facing=north,part=middle,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=middle,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_middle",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=middle,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=middle,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_middle",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=end,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_end_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=end,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_end"
|
||||||
|
},
|
||||||
|
"facing=north,part=end,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_end_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=end,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_end",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=end,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_end_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=end,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_end",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=single,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_single_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=single,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_single"
|
||||||
|
},
|
||||||
|
"facing=north,part=single,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_single_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=single,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_single",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=single,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft_single_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=single,powered=false": {
|
||||||
|
"model": "create:block/gantry_shaft/block_single",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=start,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_start_powered_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=start,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_start_powered"
|
||||||
|
},
|
||||||
|
"facing=north,part=start,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_start_powered_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=start,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_start_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=start,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_start_powered_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=start,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_start_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=middle,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_powered_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=middle,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_powered"
|
||||||
|
},
|
||||||
|
"facing=north,part=middle,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_powered_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=middle,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=middle,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_powered_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=middle,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_middle_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=end,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_end_powered_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=end,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_end_powered"
|
||||||
|
},
|
||||||
|
"facing=north,part=end,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_end_powered_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=end,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_end_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=end,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_end_powered_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=end,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_end_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"facing=down,part=single,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_single_powered_flipped",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"facing=up,part=single,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_single_powered"
|
||||||
|
},
|
||||||
|
"facing=north,part=single,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_single_powered_flipped",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"facing=south,part=single,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_single_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west,part=single,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_single_powered_flipped",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east,part=single,powered=true": {
|
||||||
|
"model": "create:block/gantry_shaft_single_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -158,6 +158,8 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 o\u0279qq\u0250\u2141",
|
"block.create.gabbro_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 o\u0279qq\u0250\u2141",
|
||||||
"block.create.gabbro_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 o\u0279qq\u0250\u2141",
|
"block.create.gabbro_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 o\u0279qq\u0250\u2141",
|
||||||
"block.create.gabbro_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 o\u0279qq\u0250\u2141",
|
"block.create.gabbro_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 o\u0279qq\u0250\u2141",
|
||||||
|
"block.create.gantry_pinion": "uo\u0131u\u0131\u0500 \u028E\u0279\u0287u\u0250\u2141",
|
||||||
|
"block.create.gantry_shaft": "\u0287\u025F\u0250\u0265S \u028E\u0279\u0287u\u0250\u2141",
|
||||||
"block.create.gearbox": "xoq\u0279\u0250\u01DD\u2141",
|
"block.create.gearbox": "xoq\u0279\u0250\u01DD\u2141",
|
||||||
"block.create.gearshift": "\u0287\u025F\u0131\u0265s\u0279\u0250\u01DD\u2141",
|
"block.create.gearshift": "\u0287\u025F\u0131\u0265s\u0279\u0250\u01DD\u2141",
|
||||||
"block.create.glass_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 ss\u0250\u05DF\u2141",
|
"block.create.glass_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 ss\u0250\u05DF\u2141",
|
||||||
|
@ -400,6 +402,7 @@
|
||||||
"block.create.zinc_block": "\u029E\u0254o\u05DF\u15FA \u0254u\u0131Z",
|
"block.create.zinc_block": "\u029E\u0254o\u05DF\u15FA \u0254u\u0131Z",
|
||||||
"block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z",
|
"block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z",
|
||||||
"entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186",
|
"entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186",
|
||||||
|
"entity.create.gantry_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0287u\u0250\u2141",
|
||||||
"entity.create.seat": "\u0287\u0250\u01DDS",
|
"entity.create.seat": "\u0287\u0250\u01DDS",
|
||||||
"entity.create.stationary_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0250uo\u0131\u0287\u0250\u0287S",
|
"entity.create.stationary_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0250uo\u0131\u0287\u0250\u0287S",
|
||||||
"entity.create.super_glue": "\u01DDn\u05DF\u2141 \u0279\u01DDdnS",
|
"entity.create.super_glue": "\u01DDn\u05DF\u2141 \u0279\u01DDdnS",
|
||||||
|
|
|
@ -161,6 +161,8 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "Gabbro Cobblestone Stairs",
|
"block.create.gabbro_cobblestone_stairs": "Gabbro Cobblestone Stairs",
|
||||||
"block.create.gabbro_cobblestone_wall": "Gabbro Cobblestone Wall",
|
"block.create.gabbro_cobblestone_wall": "Gabbro Cobblestone Wall",
|
||||||
"block.create.gabbro_pillar": "Gabbro Pillar",
|
"block.create.gabbro_pillar": "Gabbro Pillar",
|
||||||
|
"block.create.gantry_pinion": "Gantry Pinion",
|
||||||
|
"block.create.gantry_shaft": "Gantry Shaft",
|
||||||
"block.create.gearbox": "Gearbox",
|
"block.create.gearbox": "Gearbox",
|
||||||
"block.create.gearshift": "Gearshift",
|
"block.create.gearshift": "Gearshift",
|
||||||
"block.create.glass_fluid_pipe": "Glass Fluid Pipe",
|
"block.create.glass_fluid_pipe": "Glass Fluid Pipe",
|
||||||
|
@ -404,6 +406,7 @@
|
||||||
"block.create.zinc_ore": "Zinc Ore",
|
"block.create.zinc_ore": "Zinc Ore",
|
||||||
|
|
||||||
"entity.create.contraption": "Contraption",
|
"entity.create.contraption": "Contraption",
|
||||||
|
"entity.create.gantry_contraption": "Gantry Contraption",
|
||||||
"entity.create.seat": "Seat",
|
"entity.create.seat": "Seat",
|
||||||
"entity.create.stationary_contraption": "Stationary Contraption",
|
"entity.create.stationary_contraption": "Stationary Contraption",
|
||||||
"entity.create.super_glue": "Super Glue",
|
"entity.create.super_glue": "Super Glue",
|
||||||
|
|
|
@ -1,122 +1,122 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1211",
|
"_": "Missing Localizations: 1095",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
"block.create.acacia_window": "UNLOCALIZED: Acacia Window",
|
"block.create.acacia_window": "Akazienfenster",
|
||||||
"block.create.acacia_window_pane": "UNLOCALIZED: Acacia Window Pane",
|
"block.create.acacia_window_pane": "Akazienfensterscheibe",
|
||||||
"block.create.adjustable_chain_gearshift": "UNLOCALIZED: Adjustable Chain Gearshift",
|
"block.create.adjustable_chain_gearshift": "Verstellbares Kettengetriebe",
|
||||||
"block.create.adjustable_crate": "adjustable_crate",
|
"block.create.adjustable_crate": "Verstellbare Kiste",
|
||||||
"block.create.adjustable_pulse_repeater": "UNLOCALIZED: Adjustable Pulse Repeater",
|
"block.create.adjustable_pulse_repeater": "Verstellbarer Pulsverstärker",
|
||||||
"block.create.adjustable_repeater": "Verzögernder Verstärker",
|
"block.create.adjustable_repeater": "Verstellbarer Verstärker",
|
||||||
"block.create.analog_lever": "UNLOCALIZED: Analog Lever",
|
"block.create.analog_lever": "Analoger Schalter",
|
||||||
"block.create.andesite_belt_funnel": "UNLOCALIZED: Andesite Belt Funnel",
|
"block.create.andesite_belt_funnel": "Riementrichter aus Andesit",
|
||||||
"block.create.andesite_bricks": "Andesitziegel",
|
"block.create.andesite_bricks": "Andesitziegel",
|
||||||
"block.create.andesite_bricks_slab": "UNLOCALIZED: Andesite Bricks Slab",
|
"block.create.andesite_bricks_slab": "Andesitziegelstufe",
|
||||||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
"block.create.andesite_bricks_stairs": "Andesitziegeltreppe",
|
||||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
"block.create.andesite_bricks_wall": "Andesitziegelmauer",
|
||||||
"block.create.andesite_casing": "UNLOCALIZED: Andesite Casing",
|
"block.create.andesite_casing": "Andesitrahmen",
|
||||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
"block.create.andesite_cobblestone": "Andesitbruchstein",
|
||||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
"block.create.andesite_cobblestone_slab": "Andesitbruchsteinstufe",
|
||||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
"block.create.andesite_cobblestone_stairs": "Andesitbruchsteintreppe",
|
||||||
"block.create.andesite_cobblestone_wall": "UNLOCALIZED: Andesite Cobblestone Wall",
|
"block.create.andesite_cobblestone_wall": "Andesitbruchsteinmauer",
|
||||||
"block.create.andesite_encased_shaft": "UNLOCALIZED: Andesite Encased Shaft",
|
"block.create.andesite_encased_shaft": "Andesitummantelte Welle",
|
||||||
"block.create.andesite_funnel": "UNLOCALIZED: Andesite Funnel",
|
"block.create.andesite_funnel": "Andesit Trichter",
|
||||||
"block.create.andesite_pillar": "UNLOCALIZED: Andesite Pillar",
|
"block.create.andesite_pillar": "Andesitsäule",
|
||||||
"block.create.andesite_tunnel": "UNLOCALIZED: Andesite Tunnel",
|
"block.create.andesite_tunnel": "Andesittunnel",
|
||||||
"block.create.basin": "UNLOCALIZED: Basin",
|
"block.create.basin": "Behälter",
|
||||||
"block.create.belt": "Mechanischer Riemen",
|
"block.create.belt": "Mechanischer Riemen",
|
||||||
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
"block.create.birch_window": "UNLOCALIZED: Birch Window",
|
||||||
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
"block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane",
|
||||||
"block.create.black_sail": "UNLOCALIZED: Black Sail",
|
"block.create.black_sail": "Schwarzes Segel",
|
||||||
"block.create.black_seat": "UNLOCALIZED: Black Seat",
|
"block.create.black_seat": "Schwarzer Sitz",
|
||||||
"block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle",
|
"block.create.black_valve_handle": "Schwarzer Ventilgriff",
|
||||||
"block.create.blaze_burner": "UNLOCALIZED: Blaze Burner",
|
"block.create.blaze_burner": "Lohenbrenner",
|
||||||
"block.create.blue_sail": "UNLOCALIZED: Blue Sail",
|
"block.create.blue_sail": "Blaues Segel",
|
||||||
"block.create.blue_seat": "UNLOCALIZED: Blue Seat",
|
"block.create.blue_seat": "Blauer Sitz",
|
||||||
"block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle",
|
"block.create.blue_valve_handle": "Blauer Ventilgriff",
|
||||||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
"block.create.brass_belt_funnel": "Riementrichter aus Messing",
|
||||||
"block.create.brass_block": "UNLOCALIZED: Brass Block",
|
"block.create.brass_block": "Messing Block",
|
||||||
"block.create.brass_casing": "UNLOCALIZED: Brass Casing",
|
"block.create.brass_casing": "Messingrahmen",
|
||||||
"block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft",
|
"block.create.brass_encased_shaft": "Messingummantelte Welle",
|
||||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
"block.create.brass_funnel": "Messingtrichter",
|
||||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
"block.create.brass_tunnel": "Messingtunnel",
|
||||||
"block.create.brown_sail": "UNLOCALIZED: Brown Sail",
|
"block.create.brown_sail": "Braunes Segel",
|
||||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
"block.create.brown_seat": "Brauner Sitz",
|
||||||
"block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle",
|
"block.create.brown_valve_handle": "Brauner Ventilgriff",
|
||||||
"block.create.cart_assembler": "UNLOCALIZED: Cart Assembler",
|
"block.create.cart_assembler": "Lohrenmonteur",
|
||||||
"block.create.chiseled_dark_scoria": "UNLOCALIZED: Chiseled Dark Scoria",
|
"block.create.chiseled_dark_scoria": "Gemeißelte dunkle Schlacke",
|
||||||
"block.create.chiseled_dolomite": "UNLOCALIZED: Chiseled Dolomite",
|
"block.create.chiseled_dolomite": "Gemeißeltes Dolomit",
|
||||||
"block.create.chiseled_gabbro": "UNLOCALIZED: Chiseled Gabbro",
|
"block.create.chiseled_gabbro": "Gemeißeltes Gabbro",
|
||||||
"block.create.chiseled_limestone": "UNLOCALIZED: Chiseled Limestone",
|
"block.create.chiseled_limestone": "Gemeißelter Kalkstein",
|
||||||
"block.create.chiseled_scoria": "UNLOCALIZED: Chiseled Scoria",
|
"block.create.chiseled_scoria": "Gemeißelte Schlacke",
|
||||||
"block.create.chiseled_weathered_limestone": "UNLOCALIZED: Chiseled Weathered Limestone",
|
"block.create.chiseled_weathered_limestone": "Gemeißelter verwitterter Kalkstein",
|
||||||
"block.create.chocolate": "UNLOCALIZED: Chocolate",
|
"block.create.chocolate": "Schokolade",
|
||||||
"block.create.chute": "UNLOCALIZED: Chute",
|
"block.create.chute": "Rinne",
|
||||||
"block.create.clockwork_bearing": "UNLOCALIZED: Clockwork Bearing",
|
"block.create.clockwork_bearing": "Uhrwerk-Lager",
|
||||||
"block.create.clutch": "Kupplung",
|
"block.create.clutch": "Kupplung",
|
||||||
"block.create.cogwheel": "Zahnrad",
|
"block.create.cogwheel": "Zahnrad",
|
||||||
"block.create.content_observer": "UNLOCALIZED: Content Observer",
|
"block.create.content_observer": "Inhalts Beobachter",
|
||||||
"block.create.controller_rail": "UNLOCALIZED: Controller Rail",
|
"block.create.controller_rail": "Steureungsschiene",
|
||||||
"block.create.copper_block": "UNLOCALIZED: Copper Block",
|
"block.create.copper_block": "Kupfer Block",
|
||||||
"block.create.copper_casing": "UNLOCALIZED: Copper Casing",
|
"block.create.copper_casing": "Kupferrahmen",
|
||||||
"block.create.copper_ore": "UNLOCALIZED: Copper Ore",
|
"block.create.copper_ore": "Kupfererz",
|
||||||
"block.create.copper_shingles": "UNLOCALIZED: Copper Shingles",
|
"block.create.copper_shingles": "Kupferschindeln",
|
||||||
"block.create.copper_tiles": "UNLOCALIZED: Copper Tiles",
|
"block.create.copper_tiles": "Kupferfliesen",
|
||||||
"block.create.copper_valve_handle": "UNLOCALIZED: Copper Valve Handle",
|
"block.create.copper_valve_handle": "Kupfer Ventilgriff",
|
||||||
"block.create.creative_crate": "Bauplankanonenmacher",
|
"block.create.creative_crate": "Kreative anpassbare Kiste",
|
||||||
"block.create.creative_fluid_tank": "UNLOCALIZED: Creative Fluid Tank",
|
"block.create.creative_fluid_tank": "Kreativer Flüssigkeitstank",
|
||||||
"block.create.creative_motor": "UNLOCALIZED: Creative Motor",
|
"block.create.creative_motor": "Kreativer Motor",
|
||||||
"block.create.crushing_wheel": "Mahlwerkrad",
|
"block.create.crushing_wheel": "Mahlwerkrad",
|
||||||
"block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller",
|
"block.create.crushing_wheel_controller": "Mahlwerkrad Steurung",
|
||||||
"block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock",
|
"block.create.cuckoo_clock": "Kuckucksuhr",
|
||||||
"block.create.cyan_sail": "UNLOCALIZED: Cyan Sail",
|
"block.create.cyan_sail": "Türkises Segel",
|
||||||
"block.create.cyan_seat": "UNLOCALIZED: Cyan Seat",
|
"block.create.cyan_seat": "Türkiser Sitz",
|
||||||
"block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle",
|
"block.create.cyan_valve_handle": "Türkiser Ventilgriff",
|
||||||
"block.create.dark_oak_window": "UNLOCALIZED: Dark Oak Window",
|
"block.create.dark_oak_window": "Schwarzeichenholzfenster",
|
||||||
"block.create.dark_oak_window_pane": "UNLOCALIZED: Dark Oak Window Pane",
|
"block.create.dark_oak_window_pane": "Schwarzeichenholzfensterscheibe",
|
||||||
"block.create.dark_scoria": "UNLOCALIZED: Dark Scoria",
|
"block.create.dark_scoria": "Dunkle Schlacke",
|
||||||
"block.create.dark_scoria_bricks": "UNLOCALIZED: Dark Scoria Bricks",
|
"block.create.dark_scoria_bricks": "Dunkle Schlackenziegel",
|
||||||
"block.create.dark_scoria_bricks_slab": "UNLOCALIZED: Dark Scoria Bricks Slab",
|
"block.create.dark_scoria_bricks_slab": "Dunkle Schlackenziegelstufe",
|
||||||
"block.create.dark_scoria_bricks_stairs": "UNLOCALIZED: Dark Scoria Bricks Stairs",
|
"block.create.dark_scoria_bricks_stairs": "Dunkle Schlackenziegeltreppe",
|
||||||
"block.create.dark_scoria_bricks_wall": "UNLOCALIZED: Dark Scoria Bricks Wall",
|
"block.create.dark_scoria_bricks_wall": "Dunkle Schlackenziegelmauer",
|
||||||
"block.create.dark_scoria_cobblestone": "UNLOCALIZED: Dark Scoria Cobblestone",
|
"block.create.dark_scoria_cobblestone": "Dunkler Schlackebruchstein",
|
||||||
"block.create.dark_scoria_cobblestone_slab": "UNLOCALIZED: Dark Scoria Cobblestone Slab",
|
"block.create.dark_scoria_cobblestone_slab": "Dunkle Schlackebruchsteinstufe",
|
||||||
"block.create.dark_scoria_cobblestone_stairs": "UNLOCALIZED: Dark Scoria Cobblestone Stairs",
|
"block.create.dark_scoria_cobblestone_stairs": "Dunkle Schlackebruchsteintreppe",
|
||||||
"block.create.dark_scoria_cobblestone_wall": "UNLOCALIZED: Dark Scoria Cobblestone Wall",
|
"block.create.dark_scoria_cobblestone_wall": "Dunkle Schlackebruchsteinmauer",
|
||||||
"block.create.dark_scoria_pillar": "UNLOCALIZED: Dark Scoria Pillar",
|
"block.create.dark_scoria_pillar": "Dunkle Schlackesäule",
|
||||||
"block.create.deployer": "UNLOCALIZED: Deployer",
|
"block.create.deployer": "Einsatzgerät",
|
||||||
"block.create.depot": "UNLOCALIZED: Depot",
|
"block.create.depot": "Depot",
|
||||||
"block.create.diorite_bricks": "Dioritziegel",
|
"block.create.diorite_bricks": "Dioritziegel",
|
||||||
"block.create.diorite_bricks_slab": "UNLOCALIZED: Diorite Bricks Slab",
|
"block.create.diorite_bricks_slab": "Dioritziegelstufe",
|
||||||
"block.create.diorite_bricks_stairs": "UNLOCALIZED: Diorite Bricks Stairs",
|
"block.create.diorite_bricks_stairs": "Dioritziegeltreppe",
|
||||||
"block.create.diorite_bricks_wall": "UNLOCALIZED: Diorite Bricks Wall",
|
"block.create.diorite_bricks_wall": "Dioritziegelmauer",
|
||||||
"block.create.diorite_cobblestone": "UNLOCALIZED: Diorite Cobblestone",
|
"block.create.diorite_cobblestone": "Dioritbruchstein",
|
||||||
"block.create.diorite_cobblestone_slab": "UNLOCALIZED: Diorite Cobblestone Slab",
|
"block.create.diorite_cobblestone_slab": "Dioritbruchsteinstufe",
|
||||||
"block.create.diorite_cobblestone_stairs": "UNLOCALIZED: Diorite Cobblestone Stairs",
|
"block.create.diorite_cobblestone_stairs": "Dioritbruchsteintreppe",
|
||||||
"block.create.diorite_cobblestone_wall": "UNLOCALIZED: Diorite Cobblestone Wall",
|
"block.create.diorite_cobblestone_wall": "Dioritbruchsteinmauer",
|
||||||
"block.create.diorite_pillar": "UNLOCALIZED: Diorite Pillar",
|
"block.create.diorite_pillar": "Dioritsäule",
|
||||||
"block.create.dolomite": "Dolomit",
|
"block.create.dolomite": "Dolomit",
|
||||||
"block.create.dolomite_bricks": "Dolomitziegel",
|
"block.create.dolomite_bricks": "Dolomitziegel",
|
||||||
"block.create.dolomite_bricks_slab": "Dolomitziegelstufe",
|
"block.create.dolomite_bricks_slab": "Dolomitziegelstufe",
|
||||||
"block.create.dolomite_bricks_stairs": "Dolomitziegeltreppe",
|
"block.create.dolomite_bricks_stairs": "Dolomitziegeltreppe",
|
||||||
"block.create.dolomite_bricks_wall": "Dolomitziegelmauer",
|
"block.create.dolomite_bricks_wall": "Dolomitziegelmauer",
|
||||||
"block.create.dolomite_cobblestone": "UNLOCALIZED: Dolomite Cobblestone",
|
"block.create.dolomite_cobblestone": "Dolomitbruchstein",
|
||||||
"block.create.dolomite_cobblestone_slab": "UNLOCALIZED: Dolomite Cobblestone Slab",
|
"block.create.dolomite_cobblestone_slab": "Dolomitbruchsteinstufe",
|
||||||
"block.create.dolomite_cobblestone_stairs": "UNLOCALIZED: Dolomite Cobblestone Stairs",
|
"block.create.dolomite_cobblestone_stairs": "Dolomitbruchsteintreppe",
|
||||||
"block.create.dolomite_cobblestone_wall": "UNLOCALIZED: Dolomite Cobblestone Wall",
|
"block.create.dolomite_cobblestone_wall": "Dolomitbruchsteinmauer",
|
||||||
"block.create.dolomite_pillar": "Dolomitsäule",
|
"block.create.dolomite_pillar": "Dolomitsäule",
|
||||||
"block.create.encased_chain_drive": "UNLOCALIZED: Encased Chain Drive",
|
"block.create.encased_chain_drive": "Ummantelter Kettenriemen",
|
||||||
"block.create.encased_fan": "Eingeschlossener Propeller",
|
"block.create.encased_fan": "Ummantelter Lüfter",
|
||||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
"block.create.encased_fluid_pipe": "Ummanteltes Rohr",
|
||||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
"block.create.fancy_andesite_bricks": "Schicke Andesitziegel",
|
||||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
"block.create.fancy_andesite_bricks_slab": "Schicke Andesitziegelstufe",
|
||||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
"block.create.fancy_andesite_bricks_stairs": "Schicke Andesitziegeltreppe",
|
||||||
"block.create.fancy_andesite_bricks_wall": "UNLOCALIZED: Fancy Andesite Bricks Wall",
|
"block.create.fancy_andesite_bricks_wall": "Schicke Andesitziegelmauer",
|
||||||
"block.create.fancy_dark_scoria_bricks": "UNLOCALIZED: Fancy Dark Scoria Bricks",
|
"block.create.fancy_dark_scoria_bricks": "Schicke dunkle Schlackenziegel",
|
||||||
"block.create.fancy_dark_scoria_bricks_slab": "UNLOCALIZED: Fancy Dark Scoria Bricks Slab",
|
"block.create.fancy_dark_scoria_bricks_slab": "Schicke dunkle Schlackenziegelstufe",
|
||||||
"block.create.fancy_dark_scoria_bricks_stairs": "UNLOCALIZED: Fancy Dark Scoria Bricks Stairs",
|
"block.create.fancy_dark_scoria_bricks_stairs": "Schicke dunkle Schlackenziegeltreppe",
|
||||||
"block.create.fancy_dark_scoria_bricks_wall": "UNLOCALIZED: Fancy Dark Scoria Bricks Wall",
|
"block.create.fancy_dark_scoria_bricks_wall": "Schicke dunkle Schlackenziegelmauer",
|
||||||
"block.create.fancy_diorite_bricks": "UNLOCALIZED: Fancy Diorite Bricks",
|
"block.create.fancy_diorite_bricks": "UNLOCALIZED: Fancy Diorite Bricks",
|
||||||
"block.create.fancy_diorite_bricks_slab": "UNLOCALIZED: Fancy Diorite Bricks Slab",
|
"block.create.fancy_diorite_bricks_slab": "UNLOCALIZED: Fancy Diorite Bricks Slab",
|
||||||
"block.create.fancy_diorite_bricks_stairs": "UNLOCALIZED: Fancy Diorite Bricks Stairs",
|
"block.create.fancy_diorite_bricks_stairs": "UNLOCALIZED: Fancy Diorite Bricks Stairs",
|
||||||
|
@ -145,16 +145,16 @@
|
||||||
"block.create.fancy_weathered_limestone_bricks_slab": "UNLOCALIZED: Fancy Weathered Limestone Bricks Slab",
|
"block.create.fancy_weathered_limestone_bricks_slab": "UNLOCALIZED: Fancy Weathered Limestone Bricks Slab",
|
||||||
"block.create.fancy_weathered_limestone_bricks_stairs": "UNLOCALIZED: Fancy Weathered Limestone Bricks Stairs",
|
"block.create.fancy_weathered_limestone_bricks_stairs": "UNLOCALIZED: Fancy Weathered Limestone Bricks Stairs",
|
||||||
"block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall",
|
"block.create.fancy_weathered_limestone_bricks_wall": "UNLOCALIZED: Fancy Weathered Limestone Bricks Wall",
|
||||||
"block.create.fluid_pipe": "UNLOCALIZED: Fluid Pipe",
|
"block.create.fluid_pipe": "Wasserrohr",
|
||||||
"block.create.fluid_tank": "UNLOCALIZED: Fluid Tank",
|
"block.create.fluid_tank": "Wassertank",
|
||||||
"block.create.fluid_valve": "UNLOCALIZED: Fluid Valve",
|
"block.create.fluid_valve": "Flüssigkeitsventil",
|
||||||
"block.create.flywheel": "UNLOCALIZED: Flywheel",
|
"block.create.flywheel": "Schwungrad",
|
||||||
"block.create.framed_glass": "UNLOCALIZED: Framed Glass",
|
"block.create.framed_glass": "Gerahmtes Glas",
|
||||||
"block.create.framed_glass_pane": "UNLOCALIZED: Framed Glass Pane",
|
"block.create.framed_glass_pane": "Gerahmte Glasscheibe",
|
||||||
"block.create.furnace_engine": "UNLOCALIZED: Furnace Engine",
|
"block.create.furnace_engine": "UNLOCALIZED: Furnace Engine",
|
||||||
"block.create.gabbro": "Gabbro",
|
"block.create.gabbro": "Gabbro",
|
||||||
"block.create.gabbro_bricks": "Gabbroziegel",
|
"block.create.gabbro_bricks": "Gabbroziegel",
|
||||||
"block.create.gabbro_bricks_slab": "UNLOCALIZED: Gabbro Bricks Slab",
|
"block.create.gabbro_bricks_slab": "Gabbroziegelstufe",
|
||||||
"block.create.gabbro_bricks_stairs": "Gabbroziegeltreppe",
|
"block.create.gabbro_bricks_stairs": "Gabbroziegeltreppe",
|
||||||
"block.create.gabbro_bricks_wall": "Gabbroziegelmauer",
|
"block.create.gabbro_bricks_wall": "Gabbroziegelmauer",
|
||||||
"block.create.gabbro_cobblestone": "UNLOCALIZED: Gabbro Cobblestone",
|
"block.create.gabbro_cobblestone": "UNLOCALIZED: Gabbro Cobblestone",
|
||||||
|
@ -162,9 +162,11 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs",
|
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs",
|
||||||
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall",
|
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall",
|
||||||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||||
|
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
|
||||||
|
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
|
||||||
"block.create.gearbox": "Getriebe",
|
"block.create.gearbox": "Getriebe",
|
||||||
"block.create.gearshift": "Gangschaltung",
|
"block.create.gearshift": "Gangschaltung",
|
||||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
"block.create.glass_fluid_pipe": "Glaswasserrohr",
|
||||||
"block.create.granite_bricks": "Granitziegel",
|
"block.create.granite_bricks": "Granitziegel",
|
||||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||||
|
@ -405,6 +407,7 @@
|
||||||
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
|
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
|
||||||
|
|
||||||
"entity.create.contraption": "UNLOCALIZED: Contraption",
|
"entity.create.contraption": "UNLOCALIZED: Contraption",
|
||||||
|
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
|
||||||
"entity.create.seat": "UNLOCALIZED: Seat",
|
"entity.create.seat": "UNLOCALIZED: Seat",
|
||||||
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
|
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
|
||||||
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
|
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
|
||||||
|
@ -480,25 +483,25 @@
|
||||||
"item.create.wand_of_symmetry": "Symmetriestab",
|
"item.create.wand_of_symmetry": "Symmetriestab",
|
||||||
"item.create.wheat_flour": "UNLOCALIZED: Wheat Flour",
|
"item.create.wheat_flour": "UNLOCALIZED: Wheat Flour",
|
||||||
"item.create.whisk": "UNLOCALIZED: Whisk",
|
"item.create.whisk": "UNLOCALIZED: Whisk",
|
||||||
"item.create.wrench": "UNLOCALIZED: Wrench",
|
"item.create.wrench": "Schraubenschlüssel",
|
||||||
"item.create.zinc_ingot": "UNLOCALIZED: Zinc Ingot",
|
"item.create.zinc_ingot": "Zinkbarren",
|
||||||
"item.create.zinc_nugget": "UNLOCALIZED: Zinc Nugget",
|
"item.create.zinc_nugget": "Zinkklumpen",
|
||||||
|
|
||||||
|
|
||||||
"_": "->------------------------] Advancements [------------------------<-",
|
"_": "->------------------------] Advancements [------------------------<-",
|
||||||
|
|
||||||
"advancement.create.root": "UNLOCALIZED: Welcome to Create",
|
"advancement.create.root": "Willkommen zu Create",
|
||||||
"advancement.create.root.desc": "UNLOCALIZED: It's time to start building some amazing Contraptions!",
|
"advancement.create.root.desc": "Es ist Zeit mit dem Bauen von tollen Apparaten zu starten!",
|
||||||
"advancement.create.andesite_alloy": "UNLOCALIZED: Alliterations Aplenty",
|
"advancement.create.andesite_alloy": "Alliterationen in Massen",
|
||||||
"advancement.create.andesite_alloy.desc": "UNLOCALIZED: Create's materials have weird names, Andesite Alloy is one of them.",
|
"advancement.create.andesite_alloy.desc": "Create's Materialien haben verrückte Namen, Eisenlegierung ist im Deutschen leider keine.",
|
||||||
"advancement.create.its_alive": "UNLOCALIZED: It's Alive!",
|
"advancement.create.its_alive": "Es ist am leben!",
|
||||||
"advancement.create.its_alive.desc": "UNLOCALIZED: Watch your first kinetic component spin.",
|
"advancement.create.its_alive.desc": "Gucke deinem erstem beweglichen Teil beim drehen zu.",
|
||||||
"advancement.create.shifting_gears": "UNLOCALIZED: Shifting Gears",
|
"advancement.create.shifting_gears": "Wechsel deine Gänge",
|
||||||
"advancement.create.shifting_gears.desc": "UNLOCALIZED: Connect a Large Cogwheel to a Small Cogwheel, allowing you to change the speed of your contraption.",
|
"advancement.create.shifting_gears.desc": "Verbinde ein großes Zahnrad mit einem kleinem, um die Geschwindigkeit deiner Apparate zu verändern.",
|
||||||
"advancement.create.overstressed": "UNLOCALIZED: Overstressed",
|
"advancement.create.overstressed": "Überfordert",
|
||||||
"advancement.create.overstressed.desc": "UNLOCALIZED: Experience the limits of stress firsthand.",
|
"advancement.create.overstressed.desc": "Erfahre die Limits der Belastung aus erster Hand.",
|
||||||
"advancement.create.belt": "UNLOCALIZED: Kelp Drive",
|
"advancement.create.belt": "Befördere es alles",
|
||||||
"advancement.create.belt.desc": "UNLOCALIZED: Connect two shafts with a Mechanical Belt.",
|
"advancement.create.belt.desc": "Verbinde zwei Wllen mit einem Mechanischem Riemen",
|
||||||
"advancement.create.tunnel": "UNLOCALIZED: Take cover!",
|
"advancement.create.tunnel": "UNLOCALIZED: Take cover!",
|
||||||
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.",
|
"advancement.create.tunnel.desc": "UNLOCALIZED: Embellish your mechanical belt with a Tunnel.",
|
||||||
"advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer",
|
"advancement.create.splitter_tunnel": "UNLOCALIZED: Divide and Conquer",
|
||||||
|
|
1792
src/generated/resources/assets/create/lang/unfinished/es_mx.json
Normal file
1792
src/generated/resources/assets/create/lang/unfinished/es_mx.json
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 52",
|
"_": "Missing Localizations: 55",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -162,6 +162,8 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단",
|
"block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단",
|
||||||
"block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장",
|
"block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장",
|
||||||
"block.create.gabbro_pillar": "반려암 기둥",
|
"block.create.gabbro_pillar": "반려암 기둥",
|
||||||
|
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
|
||||||
|
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
|
||||||
"block.create.gearbox": "기어박스",
|
"block.create.gearbox": "기어박스",
|
||||||
"block.create.gearshift": "기어쉬프트",
|
"block.create.gearshift": "기어쉬프트",
|
||||||
"block.create.glass_fluid_pipe": "액체 파이프",
|
"block.create.glass_fluid_pipe": "액체 파이프",
|
||||||
|
@ -405,6 +407,7 @@
|
||||||
"block.create.zinc_ore": "아연 광석",
|
"block.create.zinc_ore": "아연 광석",
|
||||||
|
|
||||||
"entity.create.contraption": "장치",
|
"entity.create.contraption": "장치",
|
||||||
|
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
|
||||||
"entity.create.seat": "좌석",
|
"entity.create.seat": "좌석",
|
||||||
"entity.create.stationary_contraption": "고정된 장치",
|
"entity.create.stationary_contraption": "고정된 장치",
|
||||||
"entity.create.super_glue": "강력 접착제",
|
"entity.create.super_glue": "강력 접착제",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1152",
|
"_": "Missing Localizations: 1155",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -162,6 +162,8 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs",
|
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs",
|
||||||
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall",
|
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall",
|
||||||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||||
|
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
|
||||||
|
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
|
||||||
"block.create.gearbox": "Versnellingsbak",
|
"block.create.gearbox": "Versnellingsbak",
|
||||||
"block.create.gearshift": "Versnellingspook",
|
"block.create.gearshift": "Versnellingspook",
|
||||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||||
|
@ -405,6 +407,7 @@
|
||||||
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
|
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
|
||||||
|
|
||||||
"entity.create.contraption": "UNLOCALIZED: Contraption",
|
"entity.create.contraption": "UNLOCALIZED: Contraption",
|
||||||
|
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
|
||||||
"entity.create.seat": "UNLOCALIZED: Seat",
|
"entity.create.seat": "UNLOCALIZED: Seat",
|
||||||
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
|
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
|
||||||
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
|
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1218",
|
"_": "Missing Localizations: 1221",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -162,6 +162,8 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs",
|
"block.create.gabbro_cobblestone_stairs": "UNLOCALIZED: Gabbro Cobblestone Stairs",
|
||||||
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall",
|
"block.create.gabbro_cobblestone_wall": "UNLOCALIZED: Gabbro Cobblestone Wall",
|
||||||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||||
|
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
|
||||||
|
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
|
||||||
"block.create.gearbox": "Caixa de Transmissão",
|
"block.create.gearbox": "Caixa de Transmissão",
|
||||||
"block.create.gearshift": "Câmbio",
|
"block.create.gearshift": "Câmbio",
|
||||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||||
|
@ -405,6 +407,7 @@
|
||||||
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
|
"block.create.zinc_ore": "UNLOCALIZED: Zinc Ore",
|
||||||
|
|
||||||
"entity.create.contraption": "UNLOCALIZED: Contraption",
|
"entity.create.contraption": "UNLOCALIZED: Contraption",
|
||||||
|
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
|
||||||
"entity.create.seat": "UNLOCALIZED: Seat",
|
"entity.create.seat": "UNLOCALIZED: Seat",
|
||||||
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
|
"entity.create.stationary_contraption": "UNLOCALIZED: Stationary Contraption",
|
||||||
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
|
"entity.create.super_glue": "UNLOCALIZED: Super Glue",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2",
|
"_": "Missing Localizations: 5",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"block.create.andesite_cobblestone_slab": "Андезит-булыжниковая плита",
|
"block.create.andesite_cobblestone_slab": "Андезит-булыжниковая плита",
|
||||||
"block.create.andesite_cobblestone_stairs": "Андезит-булыжниковые ступени",
|
"block.create.andesite_cobblestone_stairs": "Андезит-булыжниковые ступени",
|
||||||
"block.create.andesite_cobblestone_wall": "Андезит-булыжниковая стена",
|
"block.create.andesite_cobblestone_wall": "Андезит-булыжниковая стена",
|
||||||
"block.create.andesite_encased_shaft": "Андезитовый вал в кожухе",
|
"block.create.andesite_encased_shaft": "Вал в андезитовом корпусе",
|
||||||
"block.create.andesite_funnel": "Андезитовая воронка",
|
"block.create.andesite_funnel": "Андезитовая воронка",
|
||||||
"block.create.andesite_pillar": "Андезитовая колонна",
|
"block.create.andesite_pillar": "Андезитовая колонна",
|
||||||
"block.create.andesite_tunnel": "Андезитовый туннель",
|
"block.create.andesite_tunnel": "Андезитовый туннель",
|
||||||
|
@ -30,20 +30,20 @@
|
||||||
"block.create.birch_window_pane": "Панель берёзового окна",
|
"block.create.birch_window_pane": "Панель берёзового окна",
|
||||||
"block.create.black_sail": "Чёрный парус",
|
"block.create.black_sail": "Чёрный парус",
|
||||||
"block.create.black_seat": "Чёрное сиденье",
|
"block.create.black_seat": "Чёрное сиденье",
|
||||||
"block.create.black_valve_handle": "Чёрная ручка крана",
|
"block.create.black_valve_handle": "Чёрный ручной вентиль",
|
||||||
"block.create.blaze_burner": "Горелка Всполоха",
|
"block.create.blaze_burner": "Горелка Всполоха",
|
||||||
"block.create.blue_sail": "Синий парус",
|
"block.create.blue_sail": "Синий парус",
|
||||||
"block.create.blue_seat": "Синее сиденье",
|
"block.create.blue_seat": "Синее сиденье",
|
||||||
"block.create.blue_valve_handle": "Синяя ручка крана",
|
"block.create.blue_valve_handle": "Синий ручной вентиль",
|
||||||
"block.create.brass_belt_funnel": "Латунная конвейерная воронка",
|
"block.create.brass_belt_funnel": "Латунная конвейерная воронка",
|
||||||
"block.create.brass_block": "Латунный блок",
|
"block.create.brass_block": "Латунный блок",
|
||||||
"block.create.brass_casing": "Латунный корпус",
|
"block.create.brass_casing": "Латунный корпус",
|
||||||
"block.create.brass_encased_shaft": "Латунный вал в кожухе",
|
"block.create.brass_encased_shaft": "Вал в латунном корпусе",
|
||||||
"block.create.brass_funnel": "Латунная воронка",
|
"block.create.brass_funnel": "Латунная воронка",
|
||||||
"block.create.brass_tunnel": "Латунный туннель",
|
"block.create.brass_tunnel": "Латунный туннель",
|
||||||
"block.create.brown_sail": "Коричневый парус",
|
"block.create.brown_sail": "Коричневый парус",
|
||||||
"block.create.brown_seat": "Коричневое сиденье",
|
"block.create.brown_seat": "Коричневое сиденье",
|
||||||
"block.create.brown_valve_handle": "Коричневая ручка крана",
|
"block.create.brown_valve_handle": "Коричневый ручной вентиль",
|
||||||
"block.create.cart_assembler": "Сборщик вагонеток",
|
"block.create.cart_assembler": "Сборщик вагонеток",
|
||||||
"block.create.chiseled_dark_scoria": "Резной тёмный пепел",
|
"block.create.chiseled_dark_scoria": "Резной тёмный пепел",
|
||||||
"block.create.chiseled_dolomite": "Резной доломит",
|
"block.create.chiseled_dolomite": "Резной доломит",
|
||||||
|
@ -63,20 +63,20 @@
|
||||||
"block.create.copper_ore": "Медная руда",
|
"block.create.copper_ore": "Медная руда",
|
||||||
"block.create.copper_shingles": "Медная черепица",
|
"block.create.copper_shingles": "Медная черепица",
|
||||||
"block.create.copper_tiles": "Медная плитка",
|
"block.create.copper_tiles": "Медная плитка",
|
||||||
"block.create.copper_valve_handle": "Медная ручка крана",
|
"block.create.copper_valve_handle": "Медный ручной вентиль",
|
||||||
"block.create.creative_crate": "Творческий ящик",
|
"block.create.creative_crate": "Творческий ящик",
|
||||||
"block.create.creative_fluid_tank": "Творческиф жидкостный бак",
|
"block.create.creative_fluid_tank": "Творческий жидкостный бак",
|
||||||
"block.create.creative_motor": "Творческий мотор",
|
"block.create.creative_motor": "Творческий мотор",
|
||||||
"block.create.crushing_wheel": "Колесо дробления",
|
"block.create.crushing_wheel": "Колесо дробления",
|
||||||
"block.create.crushing_wheel_controller": "Контроллер колеса дробления",
|
"block.create.crushing_wheel_controller": "Контроллер колеса дробления",
|
||||||
"block.create.cuckoo_clock": "Часы с кукушкой",
|
"block.create.cuckoo_clock": "Часы с кукушкой",
|
||||||
"block.create.cyan_sail": "Бирюзовый парус",
|
"block.create.cyan_sail": "Бирюзовый парус",
|
||||||
"block.create.cyan_seat": "Бирюзовое сииденье",
|
"block.create.cyan_seat": "Бирюзовое сииденье",
|
||||||
"block.create.cyan_valve_handle": "Бирюзовая ручка крана",
|
"block.create.cyan_valve_handle": "Бирюзовый ручной вентиль",
|
||||||
"block.create.dark_oak_window": "Окно из тёмного дуба",
|
"block.create.dark_oak_window": "Окно из тёмного дуба",
|
||||||
"block.create.dark_oak_window_pane": "Панель из окна из тёмного дуб",
|
"block.create.dark_oak_window_pane": "Панель из окна из тёмного дуб",
|
||||||
"block.create.dark_scoria": "Тёмный пепел",
|
"block.create.dark_scoria": "Тёмный пепел",
|
||||||
"block.create.dark_scoria_bricks": "Тёмные пепельный кирпич",
|
"block.create.dark_scoria_bricks": "Тёмный пепельный кирпич",
|
||||||
"block.create.dark_scoria_bricks_slab": "Плита из тёмного пепельного кирпича",
|
"block.create.dark_scoria_bricks_slab": "Плита из тёмного пепельного кирпича",
|
||||||
"block.create.dark_scoria_bricks_stairs": "Ступени из тёмного пепельного кирпича",
|
"block.create.dark_scoria_bricks_stairs": "Ступени из тёмного пепельного кирпича",
|
||||||
"block.create.dark_scoria_bricks_wall": "Стена из тёмного пепельного кирпича",
|
"block.create.dark_scoria_bricks_wall": "Стена из тёмного пепельного кирпича",
|
||||||
|
@ -106,9 +106,9 @@
|
||||||
"block.create.dolomite_cobblestone_stairs": "Ступени доломит-булыжника",
|
"block.create.dolomite_cobblestone_stairs": "Ступени доломит-булыжника",
|
||||||
"block.create.dolomite_cobblestone_wall": "Стена доломит-булыжника",
|
"block.create.dolomite_cobblestone_wall": "Стена доломит-булыжника",
|
||||||
"block.create.dolomite_pillar": "Доломитовая колонна",
|
"block.create.dolomite_pillar": "Доломитовая колонна",
|
||||||
"block.create.encased_chain_drive": "Цепной привод в кожухе",
|
"block.create.encased_chain_drive": "Цепной привод в корпусе",
|
||||||
"block.create.encased_fan": "Вентилятор в кожухе",
|
"block.create.encased_fan": "Вентилятор в корпусе",
|
||||||
"block.create.encased_fluid_pipe": "Жидкостная труба в кожухе",
|
"block.create.encased_fluid_pipe": "Жидкостная труба в корпусе",
|
||||||
"block.create.fancy_andesite_bricks": "Красивый андезитовый кирпич",
|
"block.create.fancy_andesite_bricks": "Красивый андезитовый кирпич",
|
||||||
"block.create.fancy_andesite_bricks_slab": "Плита из красивого андезитового кирпича",
|
"block.create.fancy_andesite_bricks_slab": "Плита из красивого андезитового кирпича",
|
||||||
"block.create.fancy_andesite_bricks_stairs": "Ступени из красивого андезитового кирпича",
|
"block.create.fancy_andesite_bricks_stairs": "Ступени из красивого андезитового кирпича",
|
||||||
|
@ -147,7 +147,7 @@
|
||||||
"block.create.fancy_weathered_limestone_bricks_wall": "Стена из красивого выветренного известнякового кирпича",
|
"block.create.fancy_weathered_limestone_bricks_wall": "Стена из красивого выветренного известнякового кирпича",
|
||||||
"block.create.fluid_pipe": "Жидкостная труба",
|
"block.create.fluid_pipe": "Жидкостная труба",
|
||||||
"block.create.fluid_tank": "Жидкостный бак",
|
"block.create.fluid_tank": "Жидкостный бак",
|
||||||
"block.create.fluid_valve": "Жидкостный вентиль",
|
"block.create.fluid_valve": "Жидкостный клапан",
|
||||||
"block.create.flywheel": "Маховик",
|
"block.create.flywheel": "Маховик",
|
||||||
"block.create.framed_glass": "Обрамлённое стекло",
|
"block.create.framed_glass": "Обрамлённое стекло",
|
||||||
"block.create.framed_glass_pane": "Обрамлённая стеклянная панель",
|
"block.create.framed_glass_pane": "Обрамлённая стеклянная панель",
|
||||||
|
@ -162,6 +162,8 @@
|
||||||
"block.create.gabbro_cobblestone_stairs": "Ступени из габбро-булыжника",
|
"block.create.gabbro_cobblestone_stairs": "Ступени из габбро-булыжника",
|
||||||
"block.create.gabbro_cobblestone_wall": "Стена из габбро-булыжника",
|
"block.create.gabbro_cobblestone_wall": "Стена из габбро-булыжника",
|
||||||
"block.create.gabbro_pillar": "Габбро колонна",
|
"block.create.gabbro_pillar": "Габбро колонна",
|
||||||
|
"block.create.gantry_pinion": "UNLOCALIZED: Gantry Pinion",
|
||||||
|
"block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft",
|
||||||
"block.create.gearbox": "Коробка передач",
|
"block.create.gearbox": "Коробка передач",
|
||||||
"block.create.gearshift": "Реверсивный механизм",
|
"block.create.gearshift": "Реверсивный механизм",
|
||||||
"block.create.glass_fluid_pipe": "Стеклянная жидкостная труба",
|
"block.create.glass_fluid_pipe": "Стеклянная жидкостная труба",
|
||||||
|
@ -176,15 +178,15 @@
|
||||||
"block.create.granite_pillar": "Гранитная колонна",
|
"block.create.granite_pillar": "Гранитная колонна",
|
||||||
"block.create.gray_sail": "Серый парус",
|
"block.create.gray_sail": "Серый парус",
|
||||||
"block.create.gray_seat": "Серое сиденье",
|
"block.create.gray_seat": "Серое сиденье",
|
||||||
"block.create.gray_valve_handle": "Серная ручка крана",
|
"block.create.gray_valve_handle": "Серый ручной вентиль",
|
||||||
"block.create.green_sail": "Зелёный парус",
|
"block.create.green_sail": "Зелёный парус",
|
||||||
"block.create.green_seat": "Зелёное сиденье",
|
"block.create.green_seat": "Зелёное сиденье",
|
||||||
"block.create.green_valve_handle": "Зелёная ручка крана",
|
"block.create.green_valve_handle": "Зелёный ручной вентиль",
|
||||||
"block.create.hand_crank": "Рукоятка",
|
"block.create.hand_crank": "Рукоятка",
|
||||||
"block.create.honey": "Мёд",
|
"block.create.honey": "Мёд",
|
||||||
"block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло",
|
"block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло",
|
||||||
"block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель",
|
"block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель",
|
||||||
"block.create.hose_pulley": "Шкив для шланга",
|
"block.create.hose_pulley": "Шкив с шлангом",
|
||||||
"block.create.item_drain": "Предметный осушитель",
|
"block.create.item_drain": "Предметный осушитель",
|
||||||
"block.create.jungle_window": "Окно из тропического дерева",
|
"block.create.jungle_window": "Окно из тропического дерева",
|
||||||
"block.create.jungle_window_pane": "Панель окна из тропического дерева",
|
"block.create.jungle_window_pane": "Панель окна из тропического дерева",
|
||||||
|
@ -200,13 +202,13 @@
|
||||||
"block.create.layered_weathered_limestone": "Слоистый выветренный известняк",
|
"block.create.layered_weathered_limestone": "Слоистый выветренный известняк",
|
||||||
"block.create.light_blue_sail": "Голубой парус",
|
"block.create.light_blue_sail": "Голубой парус",
|
||||||
"block.create.light_blue_seat": "Голубое сиденье",
|
"block.create.light_blue_seat": "Голубое сиденье",
|
||||||
"block.create.light_blue_valve_handle": "Голубая ручка крана",
|
"block.create.light_blue_valve_handle": "Голубой ручной вентиль",
|
||||||
"block.create.light_gray_sail": "Светло-серый парус",
|
"block.create.light_gray_sail": "Светло-серый парус",
|
||||||
"block.create.light_gray_seat": "Светло-серое сиденье",
|
"block.create.light_gray_seat": "Светло-серое сиденье",
|
||||||
"block.create.light_gray_valve_handle": "Светло-серая ручка крана",
|
"block.create.light_gray_valve_handle": "Светло-серый ручной вентиль",
|
||||||
"block.create.lime_sail": "Лаймовый парус",
|
"block.create.lime_sail": "Лаймовый парус",
|
||||||
"block.create.lime_seat": "Лаймовое сиденье",
|
"block.create.lime_seat": "Лаймовое сиденье",
|
||||||
"block.create.lime_valve_handle": "Лаймовая ручка крана",
|
"block.create.lime_valve_handle": "Лаймовый ручной вентиль",
|
||||||
"block.create.limesand": "Известковый песок",
|
"block.create.limesand": "Известковый песок",
|
||||||
"block.create.limestone": "Известняк",
|
"block.create.limestone": "Известняк",
|
||||||
"block.create.limestone_bricks": "Известняковый кирпич",
|
"block.create.limestone_bricks": "Известняковый кирпич",
|
||||||
|
@ -222,7 +224,7 @@
|
||||||
"block.create.lit_blaze_burner": "Зажжёная горелка Всполоха",
|
"block.create.lit_blaze_burner": "Зажжёная горелка Всполоха",
|
||||||
"block.create.magenta_sail": "Пурпурный парус",
|
"block.create.magenta_sail": "Пурпурный парус",
|
||||||
"block.create.magenta_seat": "Пурпурное сиденье",
|
"block.create.magenta_seat": "Пурпурное сиденье",
|
||||||
"block.create.magenta_valve_handle": "Пурпурная ручка крана",
|
"block.create.magenta_valve_handle": "Пурпурный ручной вентиль",
|
||||||
"block.create.mechanical_arm": "Механическая рука",
|
"block.create.mechanical_arm": "Механическая рука",
|
||||||
"block.create.mechanical_bearing": "Механический вращатель",
|
"block.create.mechanical_bearing": "Механический вращатель",
|
||||||
"block.create.mechanical_crafter": "Механический крафтер",
|
"block.create.mechanical_crafter": "Механический крафтер",
|
||||||
|
@ -235,7 +237,7 @@
|
||||||
"block.create.mechanical_press": "Механический пресс",
|
"block.create.mechanical_press": "Механический пресс",
|
||||||
"block.create.mechanical_pump": "Механическая помпа",
|
"block.create.mechanical_pump": "Механическая помпа",
|
||||||
"block.create.mechanical_saw": "Механическая пила",
|
"block.create.mechanical_saw": "Механическая пила",
|
||||||
"block.create.metal_bracket": "Металлический кронштейн",
|
"block.create.metal_bracket": "Металлическая скоба",
|
||||||
"block.create.millstone": "Жернов",
|
"block.create.millstone": "Жернов",
|
||||||
"block.create.minecart_anchor": "Вагонеточный якорь",
|
"block.create.minecart_anchor": "Вагонеточный якорь",
|
||||||
"block.create.mossy_andesite": "Замшелый андезит",
|
"block.create.mossy_andesite": "Замшелый андезит",
|
||||||
|
@ -255,7 +257,7 @@
|
||||||
"block.create.oak_window_pane": "Панель из дубового окна",
|
"block.create.oak_window_pane": "Панель из дубового окна",
|
||||||
"block.create.orange_sail": "Оранжевый парус",
|
"block.create.orange_sail": "Оранжевый парус",
|
||||||
"block.create.orange_seat": "Оранжевое сиденье",
|
"block.create.orange_seat": "Оранжевое сиденье",
|
||||||
"block.create.orange_valve_handle": "Оранжевая ручка крана",
|
"block.create.orange_valve_handle": "Оранжевый ручной вентиль",
|
||||||
"block.create.ornate_iron_window": "Украшенное железное окно",
|
"block.create.ornate_iron_window": "Украшенное железное окно",
|
||||||
"block.create.ornate_iron_window_pane": "Панель из украшенного железного окна",
|
"block.create.ornate_iron_window_pane": "Панель из украшенного железного окна",
|
||||||
"block.create.overgrown_andesite": "Заросший андезит",
|
"block.create.overgrown_andesite": "Заросший андезит",
|
||||||
|
@ -305,7 +307,7 @@
|
||||||
"block.create.paved_weathered_limestone_wall": "Стена из мощёного выветренного известняка",
|
"block.create.paved_weathered_limestone_wall": "Стена из мощёного выветренного известняка",
|
||||||
"block.create.pink_sail": "Розовый парус",
|
"block.create.pink_sail": "Розовый парус",
|
||||||
"block.create.pink_seat": "Розовое сиденье",
|
"block.create.pink_seat": "Розовое сиденье",
|
||||||
"block.create.pink_valve_handle": "Розовая ручка крана",
|
"block.create.pink_valve_handle": "Розовый ручной вентиль",
|
||||||
"block.create.piston_extension_pole": "Удлинитель поршня",
|
"block.create.piston_extension_pole": "Удлинитель поршня",
|
||||||
"block.create.polished_dark_scoria": "Полированный тёмный пепел",
|
"block.create.polished_dark_scoria": "Полированный тёмный пепел",
|
||||||
"block.create.polished_dark_scoria_slab": "Плита из полированного тёмного пепла",
|
"block.create.polished_dark_scoria_slab": "Плита из полированного тёмного пепла",
|
||||||
|
@ -335,15 +337,15 @@
|
||||||
"block.create.portable_storage_interface": "Портативный интерфейс хранения",
|
"block.create.portable_storage_interface": "Портативный интерфейс хранения",
|
||||||
"block.create.powered_latch": "Механизированная защёлка",
|
"block.create.powered_latch": "Механизированная защёлка",
|
||||||
"block.create.powered_toggle_latch": "Механизированная рычаг-защёлка",
|
"block.create.powered_toggle_latch": "Механизированная рычаг-защёлка",
|
||||||
"block.create.pulley_magnet": "Шкивный магнит",
|
"block.create.pulley_magnet": "Магнитный шкив",
|
||||||
"block.create.pulse_repeater": "Импульсный повторитель",
|
"block.create.pulse_repeater": "Импульсный повторитель",
|
||||||
"block.create.purple_sail": "Фиолетовый парус",
|
"block.create.purple_sail": "Фиолетовый парус",
|
||||||
"block.create.purple_seat": "Фиолетовое сиденье",
|
"block.create.purple_seat": "Фиолетовое сиденье",
|
||||||
"block.create.purple_valve_handle": "Фиолетовая ручка крана",
|
"block.create.purple_valve_handle": "Фиолетовый ручной вентиль",
|
||||||
"block.create.radial_chassis": "Радиальное шасси",
|
"block.create.radial_chassis": "Радиальное шасси",
|
||||||
"block.create.red_sail": "Красный парус",
|
"block.create.red_sail": "Красный парус",
|
||||||
"block.create.red_seat": "Красное сиденье",
|
"block.create.red_seat": "Красное сиденье",
|
||||||
"block.create.red_valve_handle": "Красная ручка крана",
|
"block.create.red_valve_handle": "Красный ручной вентиль",
|
||||||
"block.create.redstone_contact": "Контакт сигнала красного камня",
|
"block.create.redstone_contact": "Контакт сигнала красного камня",
|
||||||
"block.create.redstone_link": "Беспроводной передатчик сигнала красного камня",
|
"block.create.redstone_link": "Беспроводной передатчик сигнала красного камня",
|
||||||
"block.create.refined_radiance_casing": "Сияющий корпус",
|
"block.create.refined_radiance_casing": "Сияющий корпус",
|
||||||
|
@ -366,12 +368,12 @@
|
||||||
"block.create.scoria_pillar": "Колонна из пепла",
|
"block.create.scoria_pillar": "Колонна из пепла",
|
||||||
"block.create.secondary_linear_chassis": "Вторичное линейное шасси",
|
"block.create.secondary_linear_chassis": "Вторичное линейное шасси",
|
||||||
"block.create.sequenced_gearshift": "Последовательный переключатель передач",
|
"block.create.sequenced_gearshift": "Последовательный переключатель передач",
|
||||||
"block.create.shadow_steel_casing": "Теневой кожух",
|
"block.create.shadow_steel_casing": "Теневой корпус",
|
||||||
"block.create.shaft": "Вал",
|
"block.create.shaft": "Вал",
|
||||||
"block.create.smart_chute": "UNLOCALIZED: Smart Chute",
|
"block.create.smart_chute": "UNLOCALIZED: Smart Chute",
|
||||||
"block.create.smart_fluid_pipe": "Умная жидкостная труба",
|
"block.create.smart_fluid_pipe": "Умная жидкостная труба",
|
||||||
"block.create.speedometer": "Спидометр",
|
"block.create.speedometer": "Спидометр",
|
||||||
"block.create.spout": "Слив",
|
"block.create.spout": "Дозатор",
|
||||||
"block.create.spruce_window": "Еловое окно",
|
"block.create.spruce_window": "Еловое окно",
|
||||||
"block.create.spruce_window_pane": "Панель из елового окна",
|
"block.create.spruce_window_pane": "Панель из елового окна",
|
||||||
"block.create.sticky_mechanical_piston": "Липкий механический поршень",
|
"block.create.sticky_mechanical_piston": "Липкий механический поршень",
|
||||||
|
@ -395,17 +397,18 @@
|
||||||
"block.create.weathered_limestone_pillar": "Колонна из выветренного известняка",
|
"block.create.weathered_limestone_pillar": "Колонна из выветренного известняка",
|
||||||
"block.create.white_sail": "Белый парус",
|
"block.create.white_sail": "Белый парус",
|
||||||
"block.create.white_seat": "Белое сиденье",
|
"block.create.white_seat": "Белое сиденье",
|
||||||
"block.create.white_valve_handle": "Белая ручка крана",
|
"block.create.white_valve_handle": "Белый ручной вентиль",
|
||||||
"block.create.windmill_bearing": "Подшипник ветряной мельницы",
|
"block.create.windmill_bearing": "Подшипник ветряной мельницы",
|
||||||
"block.create.wooden_bracket": "Деревянный кронштейн",
|
"block.create.wooden_bracket": "Деревянная скоба",
|
||||||
"block.create.yellow_sail": "Жёлтый парус",
|
"block.create.yellow_sail": "Жёлтый парус",
|
||||||
"block.create.yellow_seat": "Жёлтое сиденье",
|
"block.create.yellow_seat": "Жёлтое сиденье",
|
||||||
"block.create.yellow_valve_handle": "Жёлтая ручка крана",
|
"block.create.yellow_valve_handle": "Жёлтый ручной вентиль",
|
||||||
"block.create.zinc_block": "Цинковый блок",
|
"block.create.zinc_block": "Цинковый блок",
|
||||||
"block.create.zinc_ore": "Цинковая руда",
|
"block.create.zinc_ore": "Цинковая руда",
|
||||||
|
|
||||||
"entity.create.contraption": "Штуковина",
|
"entity.create.contraption": "Штуковина",
|
||||||
"entity.create.seat": "сиденье",
|
"entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption",
|
||||||
|
"entity.create.seat": "Сиденье",
|
||||||
"entity.create.stationary_contraption": "Стационарная штуковина",
|
"entity.create.stationary_contraption": "Стационарная штуковина",
|
||||||
"entity.create.super_glue": "Супер-клей",
|
"entity.create.super_glue": "Супер-клей",
|
||||||
|
|
||||||
|
@ -427,25 +430,25 @@
|
||||||
"item.create.chest_minecart_contraption": "Сундуко-вагонеточная штуковина",
|
"item.create.chest_minecart_contraption": "Сундуко-вагонеточная штуковина",
|
||||||
"item.create.chocolate_bucket": "Ведро шоколада",
|
"item.create.chocolate_bucket": "Ведро шоколада",
|
||||||
"item.create.chromatic_compound": "Хроматический компаунд",
|
"item.create.chromatic_compound": "Хроматический компаунд",
|
||||||
"item.create.cinder_flour": "Пепельная мука",
|
"item.create.cinder_flour": "Незераковая пыль",
|
||||||
"item.create.copper_ingot": "Медный слиток",
|
"item.create.copper_ingot": "Медный слиток",
|
||||||
"item.create.copper_nugget": "Кусочек меди",
|
"item.create.copper_nugget": "Кусочек меди",
|
||||||
"item.create.copper_sheet": "Медный лист",
|
"item.create.copper_sheet": "Медный лист",
|
||||||
"item.create.crafter_slot_cover": "Крышка на слот крафтера",
|
"item.create.crafter_slot_cover": "Крышка на слот крафтера",
|
||||||
"item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда",
|
"item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда",
|
||||||
"item.create.crushed_brass": "Дробленая латунь",
|
"item.create.crushed_brass": "Дроблёная латунь",
|
||||||
"item.create.crushed_copper_ore": "Измельчённая медная руда",
|
"item.create.crushed_copper_ore": "Дроблёная медная руда",
|
||||||
"item.create.crushed_gold_ore": "Измельчённая золотая руда",
|
"item.create.crushed_gold_ore": "Дроблёная золотая руда",
|
||||||
"item.create.crushed_iron_ore": "Измельчённая железная руда",
|
"item.create.crushed_iron_ore": "Дроблёная железная руда",
|
||||||
"item.create.crushed_lead_ore": "Измельчённая свинцовая руда",
|
"item.create.crushed_lead_ore": "Дроблёная свинцовая руда",
|
||||||
"item.create.crushed_nickel_ore": "Измельчённая никелевая руда",
|
"item.create.crushed_nickel_ore": "Дроблёная никелевая руда",
|
||||||
"item.create.crushed_osmium_ore": "Измельчённая осмиевая руда",
|
"item.create.crushed_osmium_ore": "Дроблёная осмиевая руда",
|
||||||
"item.create.crushed_platinum_ore": "Измельчённая платиновая руда",
|
"item.create.crushed_platinum_ore": "Дроблёная платиновая руда",
|
||||||
"item.create.crushed_quicksilver_ore": "Измельчённая ртутная руда",
|
"item.create.crushed_quicksilver_ore": "Дроблёная ртутная руда",
|
||||||
"item.create.crushed_silver_ore": "Измельчённая серебрянная руда",
|
"item.create.crushed_silver_ore": "Дроблёная серебрянная руда",
|
||||||
"item.create.crushed_tin_ore": "Измельчённая оловянная руда",
|
"item.create.crushed_tin_ore": "Дроблёная оловянная руда",
|
||||||
"item.create.crushed_uranium_ore": "Измельчённая урановая руда",
|
"item.create.crushed_uranium_ore": "Дроблёная урановая руда",
|
||||||
"item.create.crushed_zinc_ore": "Измельчённая цинковая руда",
|
"item.create.crushed_zinc_ore": "Дроблёная цинковая руда",
|
||||||
"item.create.deforester": "Уничтожитель леса",
|
"item.create.deforester": "Уничтожитель леса",
|
||||||
"item.create.dough": "Тесто",
|
"item.create.dough": "Тесто",
|
||||||
"item.create.electron_tube": "Электронная лампа",
|
"item.create.electron_tube": "Электронная лампа",
|
||||||
|
@ -500,15 +503,15 @@
|
||||||
"advancement.create.belt": "Передайте за проезд!",
|
"advancement.create.belt": "Передайте за проезд!",
|
||||||
"advancement.create.belt.desc": "Соедините два вала с помощью механического ремня.",
|
"advancement.create.belt.desc": "Соедините два вала с помощью механического ремня.",
|
||||||
"advancement.create.tunnel": "В укрытие!",
|
"advancement.create.tunnel": "В укрытие!",
|
||||||
"advancement.create.tunnel.desc": "Украсьте свой механический ремень Туннелем.",
|
"advancement.create.tunnel.desc": "Украсьте свой конвейер туннелем.",
|
||||||
"advancement.create.splitter_tunnel": "Разделяй и властвуй",
|
"advancement.create.splitter_tunnel": "Разделяй и властвуй",
|
||||||
"advancement.create.splitter_tunnel.desc": "Создайте разделитель из группы латунных туннелей..",
|
"advancement.create.splitter_tunnel.desc": "Создайте разделитель из группы латунных туннелей.",
|
||||||
"advancement.create.chute": "Упало",
|
"advancement.create.chute": "Упало",
|
||||||
"advancement.create.chute.desc": "Разместите желоб, вертикальный аналог ремня.",
|
"advancement.create.chute.desc": "Разместите желоб, вертикальный аналог конвейера.",
|
||||||
"advancement.create.upward_chute": "Воздушное похищение",
|
"advancement.create.upward_chute": "Воздушное похищение",
|
||||||
"advancement.create.upward_chute.desc": "Посмотрите как предмет засасывается в желоб с вентилятором.",
|
"advancement.create.upward_chute.desc": "Посмотрите как предмет засасывается в желоб с вентилятором.",
|
||||||
"advancement.create.belt_funnel": "Болтающиеся воронки",
|
"advancement.create.belt_funnel": "Болтающиеся воронки",
|
||||||
"advancement.create.belt_funnel.desc": "Поместите воронку боком, сверху ремня или депо, чтобы создать её специальный тип.",
|
"advancement.create.belt_funnel.desc": "Поместите воронку боком, сверху конвейера или депо, чтобы создать её специальный тип.",
|
||||||
"advancement.create.belt_funnel_kiss": "Механический ужин",
|
"advancement.create.belt_funnel_kiss": "Механический ужин",
|
||||||
"advancement.create.belt_funnel_kiss.desc": "Заставте две смонтированные на ремнях воронки поцеловаться.",
|
"advancement.create.belt_funnel_kiss.desc": "Заставте две смонтированные на ремнях воронки поцеловаться.",
|
||||||
"advancement.create.fan": "Механический маг воздуха",
|
"advancement.create.fan": "Механический маг воздуха",
|
||||||
|
@ -528,9 +531,9 @@
|
||||||
"advancement.create.stressometer": "Так сильно?",
|
"advancement.create.stressometer": "Так сильно?",
|
||||||
"advancement.create.stressometer.desc": "Поставьте и подключите динамометр. Посмотрите на динамометр через очки, чтобы прочитать точное значение.",
|
"advancement.create.stressometer.desc": "Поставьте и подключите динамометр. Посмотрите на динамометр через очки, чтобы прочитать точное значение.",
|
||||||
"advancement.create.aesthetics": "Бах! Эстетично!",
|
"advancement.create.aesthetics": "Бах! Эстетично!",
|
||||||
"advancement.create.aesthetics.desc": "Разместите кронштейн на валу, трубе или шестерне.",
|
"advancement.create.aesthetics.desc": "Разместите скобы на валу, трубе или шестерне.",
|
||||||
"advancement.create.reinforced": "Бах! Усилено!",
|
"advancement.create.reinforced": "Бах! Усилено!",
|
||||||
"advancement.create.reinforced.desc": "Разместите подходящий блок корпуса на вал, трубу и механический ремень.",
|
"advancement.create.reinforced.desc": "Разместите подходящий блок корпуса на вал, трубу и конвейер.",
|
||||||
"advancement.create.water_wheel": "Гидравлика",
|
"advancement.create.water_wheel": "Гидравлика",
|
||||||
"advancement.create.water_wheel.desc": "Поставьте водяное колесо и попытайтесь заставить его вращаться!",
|
"advancement.create.water_wheel.desc": "Поставьте водяное колесо и попытайтесь заставить его вращаться!",
|
||||||
"advancement.create.chocolate_wheel": "Вкусная сила",
|
"advancement.create.chocolate_wheel": "Вкусная сила",
|
||||||
|
@ -566,15 +569,15 @@
|
||||||
"advancement.create.compact": "Автоматическое уплотнение",
|
"advancement.create.compact": "Автоматическое уплотнение",
|
||||||
"advancement.create.compact.desc": "Используйте пресс и чашу для уплотнения некоторых предметов.",
|
"advancement.create.compact.desc": "Используйте пресс и чашу для уплотнения некоторых предметов.",
|
||||||
"advancement.create.brass": "Действительный сплав",
|
"advancement.create.brass": "Действительный сплав",
|
||||||
"advancement.create.brass.desc": "Используйте измельчённую медь и измельчённый цинк, чтобы создать немного латуни.",
|
"advancement.create.brass.desc": "Используйте дроблёную медь и дроблёный цинк, чтобы создать немного латуни.",
|
||||||
"advancement.create.brass_casing": "Бронзовый век",
|
"advancement.create.brass_casing": "Бронзовый век",
|
||||||
"advancement.create.brass_casing.desc": "Используйте только что полученную латунь и немного дерева, чтобы создать более продвинутый корпус.",
|
"advancement.create.brass_casing.desc": "Используйте только что полученную латунь и немного дерева, чтобы создать более продвинутый корпус.",
|
||||||
"advancement.create.copper_casing": "Медный век",
|
"advancement.create.copper_casing": "Медный век",
|
||||||
"advancement.create.copper_casing.desc": "Используйте несколько медных листов для создания медного корпуса.",
|
"advancement.create.copper_casing.desc": "Используйте несколько медных листов для создания медного корпуса.",
|
||||||
"advancement.create.spout": "Буль",
|
"advancement.create.spout": "Буль",
|
||||||
"advancement.create.spout.desc": "Посмотрите как предмет наполняется с помощью Слива.",
|
"advancement.create.spout.desc": "Посмотрите как предмет наполняется с помощью Дозатора.",
|
||||||
"advancement.create.spout_potion": "Основательная пивоварня",
|
"advancement.create.spout_potion": "Основательная пивоварня",
|
||||||
"advancement.create.spout_potion.desc": "Посмотрите как Слив наполняет бутылку зельем.",
|
"advancement.create.spout_potion.desc": "Посмотрите как Дозатор наполняет бутылку зельем.",
|
||||||
"advancement.create.chocolate": "Сказочный мир",
|
"advancement.create.chocolate": "Сказочный мир",
|
||||||
"advancement.create.chocolate.desc": "Получите ведро расплавленного шоколада.",
|
"advancement.create.chocolate.desc": "Получите ведро расплавленного шоколада.",
|
||||||
"advancement.create.item_drain": "Осушение",
|
"advancement.create.item_drain": "Осушение",
|
||||||
|
@ -666,16 +669,16 @@
|
||||||
|
|
||||||
"create.recipe.crushing": "Измельчение",
|
"create.recipe.crushing": "Измельчение",
|
||||||
"create.recipe.milling": "Помол",
|
"create.recipe.milling": "Помол",
|
||||||
"create.recipe.fan_washing": "Объёмная промывка",
|
"create.recipe.fan_washing": "Массовая промывка",
|
||||||
"create.recipe.fan_washing.fan": "Вентилятор за текущей водой",
|
"create.recipe.fan_washing.fan": "Вентилятор за текущей водой",
|
||||||
"create.recipe.fan_smoking": "Объёмное копчение",
|
"create.recipe.fan_smoking": "Массовое копчение",
|
||||||
"create.recipe.fan_smoking.fan": "Вентилятор за горящим огнём",
|
"create.recipe.fan_smoking.fan": "Вентилятор за горящим огнём",
|
||||||
"create.recipe.fan_blasting": "Объёмное плавление",
|
"create.recipe.fan_blasting": "Массовое плавление",
|
||||||
"create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой",
|
"create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой",
|
||||||
"create.recipe.pressing": "Прессование",
|
"create.recipe.pressing": "Прессование",
|
||||||
"create.recipe.mixing": "Смешивание",
|
"create.recipe.mixing": "Смешивание",
|
||||||
"create.recipe.automatic_shapeless": "Автоматическая бесформенная сборка",
|
"create.recipe.automatic_shapeless": "Автоматическая бесформенная сборка",
|
||||||
"create.recipe.automatic_brewing": "Автоматической смешивание",
|
"create.recipe.automatic_brewing": "Автоматическое смешивание",
|
||||||
"create.recipe.packing": "Прессование",
|
"create.recipe.packing": "Прессование",
|
||||||
"create.recipe.automatic_packing": "Автоматическая упаковка",
|
"create.recipe.automatic_packing": "Автоматическая упаковка",
|
||||||
"create.recipe.sawing": "Распиливание",
|
"create.recipe.sawing": "Распиливание",
|
||||||
|
@ -685,7 +688,7 @@
|
||||||
"create.recipe.blockzapper_upgrade": "Ручная блоковая пушка",
|
"create.recipe.blockzapper_upgrade": "Ручная блоковая пушка",
|
||||||
"create.recipe.sandpaper_polishing": "Полировка наждачной бумагой",
|
"create.recipe.sandpaper_polishing": "Полировка наждачной бумагой",
|
||||||
"create.recipe.mystery_conversion": "Хроматический метаморфоз",
|
"create.recipe.mystery_conversion": "Хроматический метаморфоз",
|
||||||
"create.recipe.spout_filling": "Заполнение сливом",
|
"create.recipe.spout_filling": "Заполнение дозатором",
|
||||||
"create.recipe.draining": "Осушение предметов",
|
"create.recipe.draining": "Осушение предметов",
|
||||||
"create.recipe.processing.chance": "%1$s%% шанса",
|
"create.recipe.processing.chance": "%1$s%% шанса",
|
||||||
"create.recipe.heat_requirement.none": "Не требует нагрева",
|
"create.recipe.heat_requirement.none": "Не требует нагрева",
|
||||||
|
@ -834,7 +837,7 @@
|
||||||
"create.gui.stockpile_switch.invert_signal": "Инвертировать сигнал",
|
"create.gui.stockpile_switch.invert_signal": "Инвертировать сигнал",
|
||||||
"create.gui.stockpile_switch.move_to_lower_at": "Двигаться к нижней линии при %1$s%%",
|
"create.gui.stockpile_switch.move_to_lower_at": "Двигаться к нижней линии при %1$s%%",
|
||||||
"create.gui.stockpile_switch.move_to_upper_at": "Двигаться к верхней линии при %1$s%%",
|
"create.gui.stockpile_switch.move_to_upper_at": "Двигаться к верхней линии при %1$s%%",
|
||||||
"create.gui.sequenced_gearshift.title": "Посл. переключ. передач",
|
"create.gui.sequenced_gearshift.title": "Последовательное переключение передач",
|
||||||
"create.gui.sequenced_gearshift.instruction": "Инструкция",
|
"create.gui.sequenced_gearshift.instruction": "Инструкция",
|
||||||
"create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть",
|
"create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть",
|
||||||
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол",
|
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол",
|
||||||
|
@ -989,7 +992,7 @@
|
||||||
"create.item_attributes.not_stackable": "не может складываться",
|
"create.item_attributes.not_stackable": "не может складываться",
|
||||||
"create.item_attributes.not_stackable.inverted": "складывается",
|
"create.item_attributes.not_stackable.inverted": "складывается",
|
||||||
"create.item_attributes.equipable": "может быть надет",
|
"create.item_attributes.equipable": "может быть надет",
|
||||||
"create.item_attributes.equipable.inverted": "не ожет быть надет",
|
"create.item_attributes.equipable.inverted": "не может быть надет",
|
||||||
"create.item_attributes.furnace_fuel": "является топливом",
|
"create.item_attributes.furnace_fuel": "является топливом",
|
||||||
"create.item_attributes.furnace_fuel.inverted": "не является топливом",
|
"create.item_attributes.furnace_fuel.inverted": "не является топливом",
|
||||||
"create.item_attributes.in_tag": "помечен %1$s",
|
"create.item_attributes.in_tag": "помечен %1$s",
|
||||||
|
@ -1078,7 +1081,7 @@
|
||||||
"create.tooltip.chute.header": "Инвормация о желобе",
|
"create.tooltip.chute.header": "Инвормация о желобе",
|
||||||
"create.tooltip.chute.items_move_down": "Предметы двигаются вниз",
|
"create.tooltip.chute.items_move_down": "Предметы двигаются вниз",
|
||||||
"create.tooltip.chute.items_move_up": "Предметы двигаются вверх",
|
"create.tooltip.chute.items_move_up": "Предметы двигаются вверх",
|
||||||
"create.tooltip.chute.no_fans_attached": "Нед подключеных вентиляторов",
|
"create.tooltip.chute.no_fans_attached": "Нет подключеных вентиляторов",
|
||||||
"create.tooltip.chute.fans_push_up": "Вентилятор толкает снизу",
|
"create.tooltip.chute.fans_push_up": "Вентилятор толкает снизу",
|
||||||
"create.tooltip.chute.fans_push_down": "Вентилятор толкает сверху",
|
"create.tooltip.chute.fans_push_down": "Вентилятор толкает сверху",
|
||||||
"create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху",
|
"create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху",
|
||||||
|
@ -1100,11 +1103,11 @@
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Привет :)",
|
"create.gui.config.overlay1": "Привет :)",
|
||||||
"create.gui.config.overlay2": "Это образец оверлея",
|
"create.gui.config.overlay2": "Это образец оверлея",
|
||||||
"create.gui.config.overlay3": "кликни и тащи с помощью мыши",
|
"create.gui.config.overlay3": "Кликни и тащи с помощью мыши",
|
||||||
"create.gui.config.overlay4": "чтобы переместить его",
|
"create.gui.config.overlay4": "чтобы переместить его",
|
||||||
"create.gui.config.overlay5": "Нажми ESC чтобы выйти",
|
"create.gui.config.overlay5": "Нажми ESC чтобы выйти",
|
||||||
"create.gui.config.overlay6": "и сохранить новую позицию",
|
"create.gui.config.overlay6": "и сохранить новую позицию",
|
||||||
"create.gui.config.overlay7": "Запусти /create overlay reset",
|
"create.gui.config.overlay7": "Введи /create overlay reset",
|
||||||
"create.gui.config.overlay8": "чтобы сбросить позицию до стандартной",
|
"create.gui.config.overlay8": "чтобы сбросить позицию до стандартной",
|
||||||
|
|
||||||
"create.command.killTPSCommand": "killtps",
|
"create.command.killTPSCommand": "killtps",
|
||||||
|
@ -1139,10 +1142,10 @@
|
||||||
"item.create.example_item.tooltip.action1": "These controls are displayed.",
|
"item.create.example_item.tooltip.action1": "These controls are displayed.",
|
||||||
|
|
||||||
"block.create.andesite_encased_shaft.tooltip": "ANDESITE ENCASED SHAFT",
|
"block.create.andesite_encased_shaft.tooltip": "ANDESITE ENCASED SHAFT",
|
||||||
"block.create.andesite_encased_shaft.tooltip.summary": "_Креативный предмет_. Установите кожух на вал, находящийся _в мире_ импользуя _Андезитовый корпус_. Блоки корпуса не будут использованы.",
|
"block.create.andesite_encased_shaft.tooltip.summary": "_Креативный предмет_. Установите корпус на вал, находящийся _в мире_ импользуя _Андезитовый корпус_. Блоки корпуса не будут использованы.",
|
||||||
|
|
||||||
"block.create.brass_encased_shaft.tooltip": "BRASS ENCASED SHAFT",
|
"block.create.brass_encased_shaft.tooltip": "BRASS ENCASED SHAFT",
|
||||||
"block.create.brass_encased_shaft.tooltip.summary": "_Креативный предмет_. Установите кожух на вал, находящийся _в мире_ импользуя _Латунный корпус_. Блоки корпуса не будут использованы.",
|
"block.create.brass_encased_shaft.tooltip.summary": "_Креативный предмет_. Установите корпус на вал, находящийся _в мире_ импользуя _Латунный корпус_. Блоки корпуса не будут использованы.",
|
||||||
|
|
||||||
"block.create.wooden_bracket.tooltip": "WOODEN BRACKET",
|
"block.create.wooden_bracket.tooltip": "WOODEN BRACKET",
|
||||||
"block.create.wooden_bracket.tooltip.summary": "_Украсьте_ ваши _валы, шестерни_ и _трубы_, используя уютное деревянное укрепление.",
|
"block.create.wooden_bracket.tooltip.summary": "_Украсьте_ ваши _валы, шестерни_ и _трубы_, используя уютное деревянное укрепление.",
|
||||||
|
@ -1163,7 +1166,7 @@
|
||||||
"block.create.andesite_funnel.tooltip.behaviour3": "Будет _транспортировать_ предметы _вниз_, как воронка без буфера.",
|
"block.create.andesite_funnel.tooltip.behaviour3": "Будет _транспортировать_ предметы _вниз_, как воронка без буфера.",
|
||||||
|
|
||||||
"block.create.andesite_tunnel.tooltip": "ANDESITE TUNNEL",
|
"block.create.andesite_tunnel.tooltip": "ANDESITE TUNNEL",
|
||||||
"block.create.andesite_tunnel.tooltip.summary": "Защитное покрытие для ваших _Механических ремней_! _Андезитовые туннели_ могут отделять один предмет от стака, когда еще один механический ремень или депо расположены рядом с соновным ремнём.",
|
"block.create.andesite_tunnel.tooltip.summary": "Защитное покрытие для вашего _Конвейера_! _Андезитовые туннели_ могут отделять один предмет от стака, когда еще один механический ремень или депо расположены рядом с соновным ремнём.",
|
||||||
"block.create.andesite_tunnel.tooltip.control1": "Правый клик Гаечным ключом по стороне",
|
"block.create.andesite_tunnel.tooltip.control1": "Правый клик Гаечным ключом по стороне",
|
||||||
"block.create.andesite_tunnel.tooltip.action1": "_Регулирует оконные ставни_, если на этой стороне туннеля есть окно.",
|
"block.create.andesite_tunnel.tooltip.action1": "_Регулирует оконные ставни_, если на этой стороне туннеля есть окно.",
|
||||||
|
|
||||||
|
@ -1179,7 +1182,7 @@
|
||||||
"block.create.brass_tunnel.tooltip": "BRASS TUNNEL",
|
"block.create.brass_tunnel.tooltip": "BRASS TUNNEL",
|
||||||
"block.create.brass_tunnel.tooltip.summary": "Красивое покрытие для ваших _Механических ремней_! _Латунные туннели_ так же поставляются с фильтрами и возможностью разделения стаков ваших предметов.",
|
"block.create.brass_tunnel.tooltip.summary": "Красивое покрытие для ваших _Механических ремней_! _Латунные туннели_ так же поставляются с фильтрами и возможностью разделения стаков ваших предметов.",
|
||||||
"block.create.brass_tunnel.tooltip.condition1": "При размещении бок о бок",
|
"block.create.brass_tunnel.tooltip.condition1": "При размещении бок о бок",
|
||||||
"block.create.brass_tunnel.tooltip.behaviour1": "_Латунные туннели_ соединяются с другими, позволяя перенаправить поток предметов с одного _ремня_ на другой.",
|
"block.create.brass_tunnel.tooltip.behaviour1": "_Латунные туннели_ соединяются с другими, позволяя перенаправить поток предметов с одного _конвейера_ на другой.",
|
||||||
"block.create.brass_tunnel.tooltip.condition2": "Фильтрация",
|
"block.create.brass_tunnel.tooltip.condition2": "Фильтрация",
|
||||||
"block.create.brass_tunnel.tooltip.behaviour2": "_Латунные тунелли_ поставляюстя с фильтрами, для _входа_ и _выхода_. Если _предмет_ не соответствует _фильтру_, он будет перенаправлен на выход соседнего _туннеля_.",
|
"block.create.brass_tunnel.tooltip.behaviour2": "_Латунные тунелли_ поставляюстя с фильтрами, для _входа_ и _выхода_. Если _предмет_ не соответствует _фильтру_, он будет перенаправлен на выход соседнего _туннеля_.",
|
||||||
"block.create.brass_tunnel.tooltip.condition3": "Разделение",
|
"block.create.brass_tunnel.tooltip.condition3": "Разделение",
|
||||||
|
@ -1192,7 +1195,7 @@
|
||||||
"block.create.copper_casing.tooltip": "COPPER CASING",
|
"block.create.copper_casing.tooltip": "COPPER CASING",
|
||||||
"block.create.copper_casing.tooltip.summary": "Прочный машинный корпус для разнообразного использования. Безопасно для украшения.",
|
"block.create.copper_casing.tooltip.summary": "Прочный машинный корпус для разнообразного использования. Безопасно для украшения.",
|
||||||
"block.create.copper_casing.tooltip.condition1": "При использовании на жидкостной трубе",
|
"block.create.copper_casing.tooltip.condition1": "При использовании на жидкостной трубе",
|
||||||
"block.create.copper_casing.tooltip.behaviour1": "Покрывает _жидкостную трубу_ _кожухом_. Трубы в кожухе _закрепят свои соединения_ и не будут соединятся с другими трубами, расположенными по соседству.",
|
"block.create.copper_casing.tooltip.behaviour1": "Покрывает _жидкостную трубу_ _корпусом_. Трубы в корпусе _закрепят свои соединения_ и не будут соединятся с другими трубами, расположенными по соседству.",
|
||||||
|
|
||||||
"block.create.encased_fluid_pipe.tooltip": "ENCASED FLUID PIPE",
|
"block.create.encased_fluid_pipe.tooltip": "ENCASED FLUID PIPE",
|
||||||
"block.create.encased_fluid_pipe.tooltip.summary": "_Труба_ в _Медном корпусе_.",
|
"block.create.encased_fluid_pipe.tooltip.summary": "_Труба_ в _Медном корпусе_.",
|
||||||
|
@ -1210,12 +1213,12 @@
|
||||||
"block.create.chute.tooltip": "CHUTE",
|
"block.create.chute.tooltip": "CHUTE",
|
||||||
"block.create.chute.tooltip.summary": "_Собирает_ и транспортирует предметы по вертикали и диагонали. Может как брать так класть предметы в _контейнеры_. Вы так же можете взаиодействовать с желобом, разместив сбоку воронку.",
|
"block.create.chute.tooltip.summary": "_Собирает_ и транспортирует предметы по вертикали и диагонали. Может как брать так класть предметы в _контейнеры_. Вы так же можете взаиодействовать с желобом, разместив сбоку воронку.",
|
||||||
"block.create.chute.tooltip.condition1": "Если соединено с вентилятором",
|
"block.create.chute.tooltip.condition1": "Если соединено с вентилятором",
|
||||||
"block.create.chute.tooltip.behaviour1": "Соеденённые с _вентилятором_ желоба могут двигать _предметы_ вверх, и засасывать их с _ремней_ и _депо_.",
|
"block.create.chute.tooltip.behaviour1": "Соеденённые с _вентилятором_ желоба могут двигать _предметы_ вверх, и засасывать их с _конвейера_ и _депо_.",
|
||||||
|
|
||||||
"block.create.depot.tooltip": "DEPOT",
|
"block.create.depot.tooltip": "DEPOT",
|
||||||
"block.create.depot.tooltip.summary": "Полезное место куда вы можете класть свои _предметы_. Обеспечивает точку взаимодействия для некоторых машин",
|
"block.create.depot.tooltip.summary": "Полезное место куда вы можете класть свои _предметы_. Обеспечивает точку взаимодействия для некоторых машин",
|
||||||
"block.create.depot.tooltip.condition1": "При правом клике",
|
"block.create.depot.tooltip.condition1": "При правом клике",
|
||||||
"block.create.depot.tooltip.behaviour1": "Размещает или забирает _предмет_ с _Депо_. _Блоки_ и _Устройства_, которые могут взаимодействовать с _ремнём_, так же работают с _Депо_.",
|
"block.create.depot.tooltip.behaviour1": "Размещает или забирает _предмет_ с _Депо_. _Блоки_ и _Устройства_, которые могут взаимодействовать с _конвейером_, так же работают с _Депо_.",
|
||||||
|
|
||||||
"item.create.blaze_cake.tooltip": "BLAZE CAKE",
|
"item.create.blaze_cake.tooltip": "BLAZE CAKE",
|
||||||
"item.create.blaze_cake.tooltip.summary": "Вкусное угощения для вашей трудяги _Горелки Всполоха_. Зажигает их всех!",
|
"item.create.blaze_cake.tooltip.summary": "Вкусное угощения для вашей трудяги _Горелки Всполоха_. Зажигает их всех!",
|
||||||
|
@ -1247,7 +1250,7 @@
|
||||||
"block.create.fluid_tank.tooltip.behaviour1": "Переключает опциональное отображение окна",
|
"block.create.fluid_tank.tooltip.behaviour1": "Переключает опциональное отображение окна",
|
||||||
|
|
||||||
"block.create.creative_fluid_tank.tooltip": "CREATIVE FLUID TANK",
|
"block.create.creative_fluid_tank.tooltip": "CREATIVE FLUID TANK",
|
||||||
"block.create.creative_fluid_tank.tooltip.summary": "Этот _Жидкостный бак_ позволяет бесконечную репликацию любой жидкости. Скалируется в высоту и ширину.",
|
"block.create.creative_fluid_tank.tooltip.summary": "Этот _Жидкостный бак_ позволяет иметь бесконечную репликацию любой жидкости. Скалируется в высоту и ширину.",
|
||||||
"block.create.creative_fluid_tank.tooltip.condition1": "Когда жидкость в баке",
|
"block.create.creative_fluid_tank.tooltip.condition1": "Когда жидкость в баке",
|
||||||
"block.create.creative_fluid_tank.tooltip.behaviour1": "Всё что _извлекает_ из бака, будет снабжаться _бесконечным запасом_ жидкости. Жидкости _закачивающиеся_ в бак будут _удаляться_.",
|
"block.create.creative_fluid_tank.tooltip.behaviour1": "Всё что _извлекает_ из бака, будет снабжаться _бесконечным запасом_ жидкости. Жидкости _закачивающиеся_ в бак будут _удаляться_.",
|
||||||
"block.create.creative_fluid_tank.tooltip.condition2": "Правый клик с гаечным ключом",
|
"block.create.creative_fluid_tank.tooltip.condition2": "Правый клик с гаечным ключом",
|
||||||
|
@ -1275,9 +1278,9 @@
|
||||||
"block.create.spout.tooltip": "SPOUT",
|
"block.create.spout.tooltip": "SPOUT",
|
||||||
"block.create.spout.tooltip.summary": "Форсунка для пополнения предметов, имеющих возможность хранить жидкость.",
|
"block.create.spout.tooltip.summary": "Форсунка для пополнения предметов, имеющих возможность хранить жидкость.",
|
||||||
"block.create.spout.tooltip.condition1": "Транспортировка жидкости",
|
"block.create.spout.tooltip.condition1": "Транспортировка жидкости",
|
||||||
"block.create.spout.tooltip.behaviour1": "Когда предмет, _с возможностью содержать жидкость_, такой как _ведро_ или _бутылочка_, размещён под сливом, слив будет пытаться заполнить предмет содержащейся в нём _жидкостью_.",
|
"block.create.spout.tooltip.behaviour1": "Когда предмет, _с возможностью содержать жидкость_, такой как _ведро_ или _бутылочка_, размещён под дозатором, дозатор будет пытаться заполнить предмет содержащейся в нём _жидкостью_.",
|
||||||
"block.create.spout.tooltip.condition2": "Автоматизация жидкости",
|
"block.create.spout.tooltip.condition2": "Автоматизация жидкости",
|
||||||
"block.create.spout.tooltip.behaviour2": "Слив расположеный над _ремнём_ или _депо_ будет автоматически взаимодействовать с _предметами, которые могут содержать жидкость_, которые проходят под ним.",
|
"block.create.spout.tooltip.behaviour2": "Дозатор расположеный над _конвейером_ или _депо_ будет автоматически взаимодействовать с _предметами, которые могут содержать жидкость_, которые проходят под ним.",
|
||||||
|
|
||||||
"block.create.item_drain.tooltip": "ITEM DRAIN",
|
"block.create.item_drain.tooltip": "ITEM DRAIN",
|
||||||
"block.create.item_drain.tooltip.summary": "Депо с решёткой, которое может выкачивать _жидкость_ из ваших _предметов_",
|
"block.create.item_drain.tooltip.summary": "Депо с решёткой, которое может выкачивать _жидкость_ из ваших _предметов_",
|
||||||
|
@ -1287,7 +1290,7 @@
|
||||||
"block.create.mechanical_arm.tooltip": "MECHANICAL ARM",
|
"block.create.mechanical_arm.tooltip": "MECHANICAL ARM",
|
||||||
"block.create.mechanical_arm.tooltip.summary": "Продвинутуе устройство для перемещения _предметов_.",
|
"block.create.mechanical_arm.tooltip.summary": "Продвинутуе устройство для перемещения _предметов_.",
|
||||||
"block.create.mechanical_arm.tooltip.condition1": "Транспортировка предметов",
|
"block.create.mechanical_arm.tooltip.condition1": "Транспортировка предметов",
|
||||||
"block.create.mechanical_arm.tooltip.behaviour1": "Может брать или размещать предметы в любой открытый инвентарь, такой как _ремень_, _депо_, _воронка_ и _механический крафтер_.",
|
"block.create.mechanical_arm.tooltip.behaviour1": "Может брать или размещать предметы в любой открытый инвентарь, такой как _конвейер_, _депо_, _воронка_ и _механический крафтер_.",
|
||||||
"block.create.mechanical_arm.tooltip.control1": "Когда в руке",
|
"block.create.mechanical_arm.tooltip.control1": "Когда в руке",
|
||||||
"block.create.mechanical_arm.tooltip.action1": "Правый клик на _открытом инвентаре_ установит _точку для сбора_, для _механической руки_. Кликните еще раз чтобы установить _точку для размещения_.",
|
"block.create.mechanical_arm.tooltip.action1": "Правый клик на _открытом инвентаре_ установит _точку для сбора_, для _механической руки_. Кликните еще раз чтобы установить _точку для размещения_.",
|
||||||
"block.create.mechanical_arm.tooltip.control2": "Прокрутка с ключом",
|
"block.create.mechanical_arm.tooltip.control2": "Прокрутка с ключом",
|
||||||
|
@ -1408,14 +1411,14 @@
|
||||||
"block.create.clutch.tooltip.behaviour1": "_Прекращает_ передачу вращения на другую сторону.",
|
"block.create.clutch.tooltip.behaviour1": "_Прекращает_ передачу вращения на другую сторону.",
|
||||||
|
|
||||||
"block.create.encased_chain_drive.tooltip": "ENCASED_CHAIN_DRIVE",
|
"block.create.encased_chain_drive.tooltip": "ENCASED_CHAIN_DRIVE",
|
||||||
"block.create.encased_chain_drive.tooltip.summary": "_Передаёт вращение_ по прямой линии и к смежным _цепным приводам в кожухе_. Цепные приводы соединяются, когда расположены рядом друг с другом, без необходимости использовать вал. Их направление не обязательно должно совпадать.",
|
"block.create.encased_chain_drive.tooltip.summary": "_Передаёт вращение_ по прямой линии и к смежным _цепным приводам в корпусе_. Цепные приводы соединяются, когда расположены рядом друг с другом, без необходимости использовать вал. Их направление не обязательно должно совпадать.",
|
||||||
"block.create.encased_chain_drive.tooltip.condition1": "Когда соединено",
|
"block.create.encased_chain_drive.tooltip.condition1": "Когда соединено",
|
||||||
"block.create.encased_chain_drive.tooltip.behaviour1": "Соединённые блоки будут получать _скорость вращения_ и его _направление_ от этого компонента.",
|
"block.create.encased_chain_drive.tooltip.behaviour1": "Соединённые блоки будут получать _скорость вращения_ и его _направление_ от этого компонента.",
|
||||||
|
|
||||||
"block.create.adjustable_chain_gearshift.tooltip": "ADJUSTABLE CHAIN GEARSHIFT",
|
"block.create.adjustable_chain_gearshift.tooltip": "ADJUSTABLE CHAIN GEARSHIFT",
|
||||||
"block.create.adjustable_chain_gearshift.tooltip.summary": "_Передаёт вращение_ по прямой линии и к смежным _цепным приводам в кожухе_. Полученный _сигнал редстоуна_ будет контролировать, какой размер шестерни взаимодействует с присоединенными цепными приводами.",
|
"block.create.adjustable_chain_gearshift.tooltip.summary": "_Передаёт вращение_ по прямой линии и к смежным _цепным приводам в корпусе_. Полученный _сигнал редстоуна_ будет контролировать, какой размер шестерни взаимодействует с присоединенными цепными приводами.",
|
||||||
"block.create.adjustable_chain_gearshift.tooltip.condition1": "Кнонтроль редстоуном",
|
"block.create.adjustable_chain_gearshift.tooltip.condition1": "Кнонтроль редстоуном",
|
||||||
"block.create.adjustable_chain_gearshift.tooltip.behaviour1": "_Без_ сигнала редстоуна присоединённые приводы будут иметь _такую же_ скорость. При получении _сигнала редстоуна_ максимального уровня, соединённые приводы будут вращаться с ровно в два раза меньшей скоростью. Всё, что между этими значениями, будет выдавать скорость от 1 до 2 кратной скорости цепного механизма.",
|
"block.create.adjustable_chain_gearshift.tooltip.behaviour1": "_Без_ сигнала редстоуна присоединённые приводы будут иметь _такую же_ скорость. При получении _сигнала редстоуна_ максимального уровня, соединённые приводы будут вращаться с удвоенной скоростью. Всё, что между минимальным и максимальным значениями, будет выдавать скорость от 1 до 2 кратной скорости цепного механизма.",
|
||||||
|
|
||||||
"item.create.belt_connector.tooltip": "BELT CONNECTOR",
|
"item.create.belt_connector.tooltip": "BELT CONNECTOR",
|
||||||
"item.create.belt_connector.tooltip.summary": "Соединяет _2_ _Вала_ с помощью _механического_ _ремня_._ Соединённые валы будут иметь одинаковые _скорость_ и _направление_ _вращения._ Лента может служить как _конвейер_ для _транспортировки._",
|
"item.create.belt_connector.tooltip.summary": "Соединяет _2_ _Вала_ с помощью _механического_ _ремня_._ Соединённые валы будут иметь одинаковые _скорость_ и _направление_ _вращения._ Лента может служить как _конвейер_ для _транспортировки._",
|
||||||
|
@ -1493,7 +1496,7 @@
|
||||||
"block.create.basin.tooltip": "BASIN",
|
"block.create.basin.tooltip": "BASIN",
|
||||||
"block.create.basin.tooltip.summary": "Удобный _контейнер_ _для_ _предметов_, используемый при обработке _механическим_ _смешивателем_ и _механическим прессом_. Поддерживает компараторы.",
|
"block.create.basin.tooltip.summary": "Удобный _контейнер_ _для_ _предметов_, используемый при обработке _механическим_ _смешивателем_ и _механическим прессом_. Поддерживает компараторы.",
|
||||||
"block.create.basin.tooltip.condition1": "Авто-выход",
|
"block.create.basin.tooltip.condition1": "Авто-выход",
|
||||||
"block.create.basin.tooltip.behaviour1": "Когда _открытые инвентари_, такие как ремни, другие чаши, депо и т.д. находятся _под_ чашей, они будут автоматически принимать любые _жидкости_ и _предметы_, созданные в чаше. Это полезно для автоматизации.",
|
"block.create.basin.tooltip.behaviour1": "Когда _открытые инвентари_, такие как конвейер, другие чаши, депо и т.д. находятся _под_ чашей, они будут автоматически принимать любые _жидкости_ и _предметы_, созданные в чаше. Это полезно для автоматизации.",
|
||||||
|
|
||||||
"block.create.blaze_burner.tooltip": "BLAZE BURNER",
|
"block.create.blaze_burner.tooltip": "BLAZE BURNER",
|
||||||
"block.create.blaze_burner.tooltip.summary": "Блок для нагревания чаши, работающий когда в нём находится прирученый Всполох.",
|
"block.create.blaze_burner.tooltip.summary": "Блок для нагревания чаши, работающий когда в нём находится прирученый Всполох.",
|
||||||
|
@ -1508,7 +1511,7 @@
|
||||||
"block.create.mechanical_mixer.tooltip": "MECHANICAL MIXER",
|
"block.create.mechanical_mixer.tooltip": "MECHANICAL MIXER",
|
||||||
"block.create.mechanical_mixer.tooltip.summary": "Кинетический венчик, используемый для смешивания предметов, находящихся под ним. Требуется _постоянная_ _вращательная_ _сила_ и _чаша_, расположенная внизу (с промежутком между ними).",
|
"block.create.mechanical_mixer.tooltip.summary": "Кинетический венчик, используемый для смешивания предметов, находящихся под ним. Требуется _постоянная_ _вращательная_ _сила_ и _чаша_, расположенная внизу (с промежутком между ними).",
|
||||||
"block.create.mechanical_mixer.tooltip.condition1": "Когда над чашей",
|
"block.create.mechanical_mixer.tooltip.condition1": "Когда над чашей",
|
||||||
"block.create.mechanical_mixer.tooltip.behaviour1": "Начинает смешивать предметы в бассейне, когда присутствуют все необходимые ингредиенты.",
|
"block.create.mechanical_mixer.tooltip.behaviour1": "Начинает смешивать предметы в чаше, когда присутствуют все необходимые ингредиенты.",
|
||||||
|
|
||||||
"block.create.mechanical_crafter.tooltip": "MECHANICAL CRAFTER",
|
"block.create.mechanical_crafter.tooltip": "MECHANICAL CRAFTER",
|
||||||
"block.create.mechanical_crafter.tooltip.summary": "_Кинетический_ _сборщик_ для автоматизации любого рецепта крафта. _Поместите_ _ингредиенты_ в сетку, _соответственно_ _нужному_ _рецепту_, и расположите их так, чтобы _создать_ _поток_, который _кончается_ на одном из крафтеров.",
|
"block.create.mechanical_crafter.tooltip.summary": "_Кинетический_ _сборщик_ для автоматизации любого рецепта крафта. _Поместите_ _ингредиенты_ в сетку, _соответственно_ _нужному_ _рецепту_, и расположите их так, чтобы _создать_ _поток_, который _кончается_ на одном из крафтеров.",
|
||||||
|
@ -1524,7 +1527,7 @@
|
||||||
"block.create.furnace_engine.tooltip": "FURNACE ENGINE",
|
"block.create.furnace_engine.tooltip": "FURNACE ENGINE",
|
||||||
"block.create.furnace_engine.tooltip.summary": "_Мощный_ источник _энергии_ _вращения_, для работы которого требуется _работающая_ _печь.",
|
"block.create.furnace_engine.tooltip.summary": "_Мощный_ источник _энергии_ _вращения_, для работы которого требуется _работающая_ _печь.",
|
||||||
"block.create.furnace_engine.tooltip.condition1": "Когда прикреплен к работающей печи",
|
"block.create.furnace_engine.tooltip.condition1": "Когда прикреплен к работающей печи",
|
||||||
"block.create.furnace_engine.tooltip.behaviour1": "_Начинает_ _приводить_ _в_ _действие_ _маховик_, расположенный _перед_ ним (на расстоянии 1 м). Используйте доменную печь для более высоких скоростей.",
|
"block.create.furnace_engine.tooltip.behaviour1": "_Начинает_ _приводить_ _в_ _действие_ _маховик_, расположенный _перед_ ним (на расстоянии 1 м). Используйте плавильную печь для более высоких скоростей.",
|
||||||
|
|
||||||
"block.create.flywheel.tooltip": "FLYWHEEL",
|
"block.create.flywheel.tooltip": "FLYWHEEL",
|
||||||
"block.create.flywheel.tooltip.summary": "Большое металлическое колесо для _удержания_ и _стабилизации_ создаваемой силы с помощью _прикреплённого_ _двигателя_. Маховики _соединяются_ с _двигателями_, если они находятся на расстоянии _1_ _м_ друг от друга и под углом _90°_ друг к другу.",
|
"block.create.flywheel.tooltip.summary": "Большое металлическое колесо для _удержания_ и _стабилизации_ создаваемой силы с помощью _прикреплённого_ _двигателя_. Маховики _соединяются_ с _двигателями_, если они находятся на расстоянии _1_ _м_ друг от друга и под углом _90°_ друг к другу.",
|
||||||
|
@ -1532,7 +1535,7 @@
|
||||||
"block.create.flywheel.tooltip.behaviour1": "Обеспечивает вращательную силу для подключенного устройства в зависимости от силы и скорости генератора.",
|
"block.create.flywheel.tooltip.behaviour1": "Обеспечивает вращательную силу для подключенного устройства в зависимости от силы и скорости генератора.",
|
||||||
|
|
||||||
"block.create.portable_storage_interface.tooltip": "PORTABLE STORAGE INTERFACE",
|
"block.create.portable_storage_interface.tooltip": "PORTABLE STORAGE INTERFACE",
|
||||||
"block.create.portable_storage_interface.tooltip.summary": "Переносная точка обмена для _перемещения_ предметов внутрь или из _конструкции_, перемещаемой _поршнем_, _шасси_, _вагонеткой_ или _ремнём_.",
|
"block.create.portable_storage_interface.tooltip.summary": "Переносная точка обмена для _перемещения_ предметов внутрь или из _конструкции_, перемещаемой _поршнем_, _шасси_, _вагонеткой_ или _конвейером_.",
|
||||||
"block.create.portable_storage_interface.tooltip.condition1": "Во время движения",
|
"block.create.portable_storage_interface.tooltip.condition1": "Во время движения",
|
||||||
"block.create.portable_storage_interface.tooltip.behaviour1": "Взаимодействует со стационарными переместителями так, что переместители, обращенные в сторону от интерфейса, вытягивают предметы, а транспортеры, нацеленные на интерфейс, вставляют предметы из прикреплённого инвентаря. Конструкция ненадолго остановится при обмене предметов.",
|
"block.create.portable_storage_interface.tooltip.behaviour1": "Взаимодействует со стационарными переместителями так, что переместители, обращенные в сторону от интерфейса, вытягивают предметы, а транспортеры, нацеленные на интерфейс, вставляют предметы из прикреплённого инвентаря. Конструкция ненадолго остановится при обмене предметов.",
|
||||||
"block.create.portable_storage_interface.tooltip.condition2": "Когда запитан редстоуном",
|
"block.create.portable_storage_interface.tooltip.condition2": "Когда запитан редстоуном",
|
||||||
|
@ -1708,7 +1711,7 @@
|
||||||
"block.create.deployer.tooltip.behaviour3": "Автоматический активатор будет активирован, если только удерживаемый предмет _совпадает_ с предметом в _фильтре_. Не совпадающие предметы не могут быть помещены; Удерживаемые предметы, соответствующие фильтру, не могут быть извлечены.",
|
"block.create.deployer.tooltip.behaviour3": "Автоматический активатор будет активирован, если только удерживаемый предмет _совпадает_ с предметом в _фильтре_. Не совпадающие предметы не могут быть помещены; Удерживаемые предметы, соответствующие фильтру, не могут быть извлечены.",
|
||||||
|
|
||||||
"block.create.brass_casing.tooltip": "BRASS CASING",
|
"block.create.brass_casing.tooltip": "BRASS CASING",
|
||||||
"block.create.brass_casing.tooltip.summary": "Прочный корпус машины с различными вариантами применения. Безопасно для украшения.",
|
"block.create.brass_casing.tooltip.summary": "Прочный корпус машины с различными вариантами применения. Безопасно для декорирования.",
|
||||||
|
|
||||||
"block.create.pulse_repeater.tooltip": "PULSE REPEATER",
|
"block.create.pulse_repeater.tooltip": "PULSE REPEATER",
|
||||||
"block.create.pulse_repeater.tooltip.summary": "Простая схема обрезки длинны проходящего сигнала до _1_ _тика_.",
|
"block.create.pulse_repeater.tooltip.summary": "Простая схема обрезки длинны проходящего сигнала до _1_ _тика_.",
|
||||||
|
@ -1765,7 +1768,7 @@
|
||||||
"item.create.shadow_steel.tooltip.summary": "Хроматический материал, _добытый_ _в_ _пустоте_.",
|
"item.create.shadow_steel.tooltip.summary": "Хроматический материал, _добытый_ _в_ _пустоте_.",
|
||||||
|
|
||||||
"item.create.minecart_coupling.tooltip": "MINECART COUPLING",
|
"item.create.minecart_coupling.tooltip": "MINECART COUPLING",
|
||||||
"item.create.minecart_coupling.tooltip.summary": "_Соединяет_ ваши _вагонетки_ или or _Перевозочные устройства_ вместе, чтобы создать великолепный поезд.",
|
"item.create.minecart_coupling.tooltip.summary": "_Соединяет_ ваши _вагонетки_ или _Перевозочные устройства_ вместе, чтобы создать великолепный поезд.",
|
||||||
"item.create.minecart_coupling.tooltip.condition1": "При использовании на вагонетке",
|
"item.create.minecart_coupling.tooltip.condition1": "При использовании на вагонетке",
|
||||||
"item.create.minecart_coupling.tooltip.behaviour1": "_Соединяет_ две вагонетки вместе, пытаясь держать их на _определенной дистанции_ при движении.",
|
"item.create.minecart_coupling.tooltip.behaviour1": "_Соединяет_ две вагонетки вместе, пытаясь держать их на _определенной дистанции_ при движении.",
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
1792
src/generated/resources/assets/create/lang/unfinished/zh_tw.json
Normal file
1792
src/generated/resources/assets/create/lang/unfinished/zh_tw.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_end",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_end",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_end",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_middle",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_middle",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_middle",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_single",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_single",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_single",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_start",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_start",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_start",
|
||||||
|
"textures": {
|
||||||
|
"2": "create:block/gantry_shaft_powered_flipped"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_pinion/item"
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/gantry_shaft/block_single"
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"create:crafting/kinetics/gantry_pinion"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_item": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"item": "create:andesite_casing"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "create:crafting/kinetics/gantry_pinion"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_item",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"create:crafting/kinetics/gantry_shaft"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_item": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"item": "create:andesite_alloy"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "create:crafting/kinetics/gantry_shaft"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_item",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "create:gantry_pinion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "create:gantry_shaft"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
" B ",
|
||||||
|
"ICI",
|
||||||
|
" S "
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"B": {
|
||||||
|
"tag": "minecraft:planks"
|
||||||
|
},
|
||||||
|
"S": {
|
||||||
|
"item": "create:cogwheel"
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"item": "create:andesite_casing"
|
||||||
|
},
|
||||||
|
"I": {
|
||||||
|
"item": "create:shaft"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "create:gantry_pinion"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"A",
|
||||||
|
"R",
|
||||||
|
"A"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"A": {
|
||||||
|
"item": "create:andesite_alloy"
|
||||||
|
},
|
||||||
|
"R": {
|
||||||
|
"tag": "forge:dusts/redstone"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "create:gantry_shaft",
|
||||||
|
"count": 8
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,6 +23,7 @@
|
||||||
"create:redstone_link",
|
"create:redstone_link",
|
||||||
"create:analog_lever",
|
"create:analog_lever",
|
||||||
"create:adjustable_repeater",
|
"create:adjustable_repeater",
|
||||||
"create:adjustable_pulse_repeater"
|
"create:adjustable_pulse_repeater",
|
||||||
|
"#minecraft:signs"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -71,6 +71,8 @@ public class AllBlockPartials {
|
||||||
CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), CUCKOO_PIG = get("cuckoo_clock/pig"),
|
CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), CUCKOO_PIG = get("cuckoo_clock/pig"),
|
||||||
CUCKOO_CREEPER = get("cuckoo_clock/creeper"),
|
CUCKOO_CREEPER = get("cuckoo_clock/creeper"),
|
||||||
|
|
||||||
|
GANTRY_COGS = get("gantry_pinion/wheels"),
|
||||||
|
|
||||||
ROPE_COIL = get("rope_pulley/rope_coil"),
|
ROPE_COIL = get("rope_pulley/rope_coil"),
|
||||||
ROPE_HALF = get("rope_pulley/rope_half"),
|
ROPE_HALF = get("rope_pulley/rope_half"),
|
||||||
ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"),
|
ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"),
|
||||||
|
@ -107,6 +109,8 @@ public class AllBlockPartials {
|
||||||
|
|
||||||
SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"),
|
SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"),
|
||||||
|
|
||||||
|
SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"),
|
||||||
|
|
||||||
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
|
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
|
||||||
COUPLING_RING = getEntity("minecart_coupling/ring"),
|
COUPLING_RING = getEntity("minecart_coupling/ring"),
|
||||||
COUPLING_CONNECTOR = getEntity("minecart_coupling/connector")
|
COUPLING_CONNECTOR = getEntity("minecart_coupling/connector")
|
||||||
|
|
|
@ -54,6 +54,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock.ChassisCTBehaviour;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock.ChassisCTBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock.MinecartAnchorBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock.MinecartAnchorBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlockItem;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlockItem;
|
||||||
|
@ -90,6 +91,7 @@ import com.simibubi.create.content.contraptions.processing.BasinMovementBehaviou
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem;
|
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem;
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.LitBlazeBurnerBlock;
|
import com.simibubi.create.content.contraptions.processing.burner.LitBlazeBurnerBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
|
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock;
|
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftGenerator;
|
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftGenerator;
|
||||||
|
@ -171,8 +173,10 @@ import net.minecraft.item.Item;
|
||||||
import net.minecraft.state.properties.PistonType;
|
import net.minecraft.state.properties.PistonType;
|
||||||
import net.minecraft.tags.BlockTags;
|
import net.minecraft.tags.BlockTags;
|
||||||
import net.minecraft.tags.ItemTags;
|
import net.minecraft.tags.ItemTags;
|
||||||
|
import net.minecraft.util.Direction.AxisDirection;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.client.model.generators.ConfiguredModel;
|
import net.minecraftforge.client.model.generators.ConfiguredModel;
|
||||||
|
import net.minecraftforge.client.model.generators.ModelFile;
|
||||||
import net.minecraftforge.common.Tags;
|
import net.minecraftforge.common.Tags;
|
||||||
import net.minecraftforge.common.ToolType;
|
import net.minecraftforge.common.ToolType;
|
||||||
|
|
||||||
|
@ -686,6 +690,38 @@ public class AllBlocks {
|
||||||
.getName() + "/head"))))
|
.getName() + "/head"))))
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final BlockEntry<GantryPinionBlock> GANTRY_PINION =
|
||||||
|
REGISTRATE.block("gantry_pinion", GantryPinionBlock::new)
|
||||||
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.properties(Block.Properties::nonOpaque)
|
||||||
|
.blockstate(BlockStateGen.directionalAxisBlockProvider())
|
||||||
|
.item()
|
||||||
|
.transform(customItemModel())
|
||||||
|
.register();
|
||||||
|
|
||||||
|
public static final BlockEntry<GantryShaftBlock> GANTRY_SHAFT =
|
||||||
|
REGISTRATE.block("gantry_shaft", GantryShaftBlock::new)
|
||||||
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.blockstate((c, p) -> p.directionalBlock(c.get(), s -> {
|
||||||
|
boolean isPowered = s.get(GantryShaftBlock.POWERED);
|
||||||
|
boolean isFlipped = s.get(GantryShaftBlock.FACING)
|
||||||
|
.getAxisDirection() == AxisDirection.NEGATIVE;
|
||||||
|
String partName = s.get(GantryShaftBlock.PART)
|
||||||
|
.getName();
|
||||||
|
String flipped = isFlipped ? "_flipped" : "";
|
||||||
|
String powered = isPowered ? "_powered" : "";
|
||||||
|
ModelFile existing = AssetLookup.partialBaseModel(c, p, partName);
|
||||||
|
if (!isPowered && !isFlipped)
|
||||||
|
return existing;
|
||||||
|
return p.models()
|
||||||
|
.withExistingParent("block/" + c.getName() + "_" + partName + powered + flipped,
|
||||||
|
existing.getLocation())
|
||||||
|
.texture("2", p.modLoc("block/" + c.getName() + powered + flipped));
|
||||||
|
}))
|
||||||
|
.item()
|
||||||
|
.transform(customItemModel("_", "block_single"))
|
||||||
|
.register();
|
||||||
|
|
||||||
public static final BlockEntry<WindmillBearingBlock> WINDMILL_BEARING =
|
public static final BlockEntry<WindmillBearingBlock> WINDMILL_BEARING =
|
||||||
REGISTRATE.block("windmill_bearing", WindmillBearingBlock::new)
|
REGISTRATE.block("windmill_bearing", WindmillBearingBlock::new)
|
||||||
.transform(BuilderTransformers.bearing("windmill", "gearbox", true))
|
.transform(BuilderTransformers.bearing("windmill", "gearbox", true))
|
||||||
|
|
|
@ -6,6 +6,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Con
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntityRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntityRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntityRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.OrientedContraptionEntityRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionEntityRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
@ -23,16 +25,27 @@ import net.minecraftforge.fml.client.registry.RenderingRegistry;
|
||||||
public class AllEntityTypes {
|
public class AllEntityTypes {
|
||||||
|
|
||||||
public static final RegistryEntry<EntityType<OrientedContraptionEntity>> ORIENTED_CONTRAPTION =
|
public static final RegistryEntry<EntityType<OrientedContraptionEntity>> ORIENTED_CONTRAPTION =
|
||||||
register("contraption", OrientedContraptionEntity::new, EntityClassification.MISC, 5, 3, true,
|
contraption("contraption", OrientedContraptionEntity::new, 5, 3, true);
|
||||||
AbstractContraptionEntity::build);
|
|
||||||
public static final RegistryEntry<EntityType<ControlledContraptionEntity>> CONTROLLED_CONTRAPTION =
|
public static final RegistryEntry<EntityType<ControlledContraptionEntity>> CONTROLLED_CONTRAPTION =
|
||||||
register("stationary_contraption", ControlledContraptionEntity::new, EntityClassification.MISC, 20, 40, false,
|
contraption("stationary_contraption", ControlledContraptionEntity::new, 20, 40, false);
|
||||||
AbstractContraptionEntity::build);
|
public static final RegistryEntry<EntityType<GantryContraptionEntity>> GANTRY_CONTRAPTION =
|
||||||
|
contraption("gantry_contraption", GantryContraptionEntity::new, 10, 40, false);
|
||||||
|
|
||||||
public static final RegistryEntry<EntityType<SuperGlueEntity>> SUPER_GLUE = register("super_glue",
|
public static final RegistryEntry<EntityType<SuperGlueEntity>> SUPER_GLUE = register("super_glue",
|
||||||
SuperGlueEntity::new, EntityClassification.MISC, 10, Integer.MAX_VALUE, false, SuperGlueEntity::build);
|
SuperGlueEntity::new, EntityClassification.MISC, 10, Integer.MAX_VALUE, false, SuperGlueEntity::build);
|
||||||
public static final RegistryEntry<EntityType<SeatEntity>> SEAT =
|
public static final RegistryEntry<EntityType<SeatEntity>> SEAT =
|
||||||
register("seat", SeatEntity::new, EntityClassification.MISC, 0, Integer.MAX_VALUE, false, SeatEntity::build);
|
register("seat", SeatEntity::new, EntityClassification.MISC, 0, Integer.MAX_VALUE, false, SeatEntity::build);
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
public static void register() {}
|
||||||
|
|
||||||
|
private static <T extends Entity> RegistryEntry<EntityType<T>> contraption(String name, IFactory<T> factory,
|
||||||
|
int range, int updateFrequency, boolean sendVelocity) {
|
||||||
|
return register(name, factory, EntityClassification.MISC, range, updateFrequency, sendVelocity,
|
||||||
|
AbstractContraptionEntity::build);
|
||||||
|
}
|
||||||
|
|
||||||
private static <T extends Entity> RegistryEntry<EntityType<T>> register(String name, IFactory<T> factory,
|
private static <T extends Entity> RegistryEntry<EntityType<T>> register(String name, IFactory<T> factory,
|
||||||
EntityClassification group, int range, int updateFrequency, boolean sendVelocity,
|
EntityClassification group, int range, int updateFrequency, boolean sendVelocity,
|
||||||
NonNullConsumer<EntityType.Builder<T>> propertyBuilder) {
|
NonNullConsumer<EntityType.Builder<T>> propertyBuilder) {
|
||||||
|
@ -46,14 +59,14 @@ public class AllEntityTypes {
|
||||||
.register();
|
.register();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register() {}
|
|
||||||
|
|
||||||
@OnlyIn(value = Dist.CLIENT)
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
public static void registerRenderers() {
|
public static void registerRenderers() {
|
||||||
RenderingRegistry.registerEntityRenderingHandler(CONTROLLED_CONTRAPTION.get(),
|
RenderingRegistry.registerEntityRenderingHandler(CONTROLLED_CONTRAPTION.get(),
|
||||||
ControlledContraptionEntityRenderer::new);
|
ControlledContraptionEntityRenderer::new);
|
||||||
RenderingRegistry.registerEntityRenderingHandler(ORIENTED_CONTRAPTION.get(),
|
RenderingRegistry.registerEntityRenderingHandler(ORIENTED_CONTRAPTION.get(),
|
||||||
OrientedContraptionEntityRenderer::new);
|
OrientedContraptionEntityRenderer::new);
|
||||||
|
RenderingRegistry.registerEntityRenderingHandler(GANTRY_CONTRAPTION.get(),
|
||||||
|
GantryContraptionEntityRenderer::new);
|
||||||
RenderingRegistry.registerEntityRenderingHandler(SUPER_GLUE.get(), SuperGlueRenderer::new);
|
RenderingRegistry.registerEntityRenderingHandler(SUPER_GLUE.get(), SuperGlueRenderer::new);
|
||||||
RenderingRegistry.registerEntityRenderingHandler(SEAT.get(), SeatEntity.Render::new);
|
RenderingRegistry.registerEntityRenderingHandler(SEAT.get(), SeatEntity.Render::new);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,10 +41,6 @@ public class AllShapes {
|
||||||
SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14)
|
SAIL_FRAME_COLLISION = shape(0, 5, 0, 16, 9, 16).erase(2, 0, 2, 14, 16, 14)
|
||||||
.forDirectional(),
|
.forDirectional(),
|
||||||
SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(),
|
SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(),
|
||||||
SPEED_CONTROLLER = shape(0, 0, 0, 16, 2, 16).add(1, 1, 1, 15, 15, 15)
|
|
||||||
.erase(0, 8, 5, 16, 16, 11)
|
|
||||||
.add(2, 9, 2, 14, 14, 14)
|
|
||||||
.forHorizontalAxis(),
|
|
||||||
HARVESTER_BASE = shape(0, 2, 0, 16, 14, 3).forDirectional(SOUTH),
|
HARVESTER_BASE = shape(0, 2, 0, 16, 14, 3).forDirectional(SOUTH),
|
||||||
NOZZLE = shape(2, 0, 2, 14, 14, 14).add(1, 13, 1, 15, 15, 15)
|
NOZZLE = shape(2, 0, 2, 14, 14, 14).add(1, 13, 1, 15, 15, 15)
|
||||||
.erase(3, 13, 3, 13, 15, 13)
|
.erase(3, 13, 3, 13, 15, 13)
|
||||||
|
@ -144,6 +140,8 @@ public class AllShapes {
|
||||||
BASIN_COLLISION_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 16, 14)
|
BASIN_COLLISION_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 16, 14)
|
||||||
.add(2, 0, 2, 14, 2, 14)
|
.add(2, 0, 2, 14, 2, 14)
|
||||||
.build(),
|
.build(),
|
||||||
|
SPEED_CONTROLLER = shape(0, 0, 0, 16, 4, 16).add(1, 1, 1, 15, 13, 15)
|
||||||
|
.add(0, 8, 0, 16, 14, 16).build(),
|
||||||
HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16)
|
HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16)
|
||||||
.build(),
|
.build(),
|
||||||
HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(),
|
HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(),
|
||||||
|
|
|
@ -187,5 +187,7 @@ public class AllTags {
|
||||||
AllBlockTags.FAN_TRANSPARENT.add(Blocks.IRON_BARS);
|
AllBlockTags.FAN_TRANSPARENT.add(Blocks.IRON_BARS);
|
||||||
|
|
||||||
AllBlockTags.FAN_HEATERS.add(Blocks.MAGMA_BLOCK, Blocks.CAMPFIRE, Blocks.LAVA, Blocks.FIRE);
|
AllBlockTags.FAN_HEATERS.add(Blocks.MAGMA_BLOCK, Blocks.CAMPFIRE, Blocks.LAVA, Blocks.FIRE);
|
||||||
|
|
||||||
|
AllBlockTags.SAFE_NBT.includeAll(BlockTags.SIGNS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.WindmillBearingTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.WindmillBearingTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonTileEntity;
|
||||||
|
@ -68,6 +70,7 @@ import com.simibubi.create.content.contraptions.processing.BasinRenderer;
|
||||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerRenderer;
|
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerRenderer;
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity;
|
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer;
|
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity;
|
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftTileEntity;
|
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftTileEntity;
|
||||||
|
@ -204,6 +207,18 @@ public class AllTileEntities {
|
||||||
.renderer(() -> CuckooClockRenderer::new)
|
.renderer(() -> CuckooClockRenderer::new)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final TileEntityEntry<GantryShaftTileEntity> GANTRY_SHAFT = Create.registrate()
|
||||||
|
.tileEntity("gantry_shaft", GantryShaftTileEntity::new)
|
||||||
|
.validBlocks(AllBlocks.GANTRY_SHAFT)
|
||||||
|
.renderer(() -> KineticTileEntityRenderer::new)
|
||||||
|
.register();
|
||||||
|
|
||||||
|
public static final TileEntityEntry<GantryPinionTileEntity> GANTRY_PINION = Create.registrate()
|
||||||
|
.tileEntity("gantry_pinion", GantryPinionTileEntity::new)
|
||||||
|
.validBlocks(AllBlocks.GANTRY_PINION)
|
||||||
|
.renderer(() -> GantryPinionRenderer::new)
|
||||||
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<PumpTileEntity> MECHANICAL_PUMP = Create.registrate()
|
public static final TileEntityEntry<PumpTileEntity> MECHANICAL_PUMP = Create.registrate()
|
||||||
.tileEntity("mechanical_pump", PumpTileEntity::new)
|
.tileEntity("mechanical_pump", PumpTileEntity::new)
|
||||||
.validBlocks(AllBlocks.MECHANICAL_PUMP)
|
.validBlocks(AllBlocks.MECHANICAL_PUMP)
|
||||||
|
|
|
@ -14,6 +14,7 @@ import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
|
||||||
import com.simibubi.create.content.palettes.AllPaletteBlocks;
|
import com.simibubi.create.content.palettes.AllPaletteBlocks;
|
||||||
import com.simibubi.create.content.palettes.PalettesItemGroup;
|
import com.simibubi.create.content.palettes.PalettesItemGroup;
|
||||||
import com.simibubi.create.content.schematics.ServerSchematicLoader;
|
import com.simibubi.create.content.schematics.ServerSchematicLoader;
|
||||||
|
import com.simibubi.create.content.schematics.filtering.SchematicInstances;
|
||||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
import com.simibubi.create.foundation.command.ChunkUtil;
|
import com.simibubi.create.foundation.command.ChunkUtil;
|
||||||
|
@ -99,6 +100,7 @@ public class Create {
|
||||||
|
|
||||||
public static void init(final FMLCommonSetupEvent event) {
|
public static void init(final FMLCommonSetupEvent event) {
|
||||||
CapabilityMinecartController.register();
|
CapabilityMinecartController.register();
|
||||||
|
SchematicInstances.register();
|
||||||
schematicReceiver = new ServerSchematicLoader();
|
schematicReceiver = new ServerSchematicLoader();
|
||||||
redstoneLinkNetworkHandler = new RedstoneLinkNetworkHandler();
|
redstoneLinkNetworkHandler = new RedstoneLinkNetworkHandler();
|
||||||
torquePropagator = new TorquePropagator();
|
torquePropagator = new TorquePropagator();
|
||||||
|
|
|
@ -8,7 +8,6 @@ import java.util.stream.Collectors;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedCrafter;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedCrafter;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
|
|
||||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.constants.VanillaTypes;
|
||||||
|
|
|
@ -11,7 +11,6 @@ import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
|
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity;
|
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.DirectionalShaftHalvesTileEntity;
|
import com.simibubi.create.content.contraptions.relays.encased.DirectionalShaftHalvesTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltBlock;
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltBlock;
|
||||||
|
@ -70,11 +69,9 @@ public class RotationPropagator {
|
||||||
boolean connectedByGears = definitionFrom.hasIntegratedCogwheel(world, from.getPos(), stateFrom)
|
boolean connectedByGears = definitionFrom.hasIntegratedCogwheel(world, from.getPos(), stateFrom)
|
||||||
&& definitionTo.hasIntegratedCogwheel(world, to.getPos(), stateTo);
|
&& definitionTo.hasIntegratedCogwheel(world, to.getPos(), stateTo);
|
||||||
|
|
||||||
// Belt <-> Belt
|
float custom = from.propagateRotationTo(to, stateFrom, stateTo, diff, connectedByAxis, connectedByGears);
|
||||||
if (from instanceof BeltTileEntity && to instanceof BeltTileEntity && !connectedByAxis) {
|
if (custom != 0)
|
||||||
return ((BeltTileEntity) from).getController()
|
return custom;
|
||||||
.equals(((BeltTileEntity) to).getController()) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Axis <-> Axis
|
// Axis <-> Axis
|
||||||
if (connectedByAxis) {
|
if (connectedByAxis) {
|
||||||
|
@ -230,6 +227,9 @@ public class RotationPropagator {
|
||||||
float newSpeed = getConveyedSpeed(currentTE, neighbourTE);
|
float newSpeed = getConveyedSpeed(currentTE, neighbourTE);
|
||||||
float oppositeSpeed = getConveyedSpeed(neighbourTE, currentTE);
|
float oppositeSpeed = getConveyedSpeed(neighbourTE, currentTE);
|
||||||
|
|
||||||
|
if (newSpeed == 0 && oppositeSpeed == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
boolean incompatible =
|
boolean incompatible =
|
||||||
Math.signum(newSpeed) != Math.signum(speedOfNeighbour) && (newSpeed != 0 && speedOfNeighbour != 0);
|
Math.signum(newSpeed) != Math.signum(speedOfNeighbour) && (newSpeed != 0 && speedOfNeighbour != 0);
|
||||||
|
|
||||||
|
@ -395,7 +395,7 @@ public class RotationPropagator {
|
||||||
if (!(neighbourKTE.getBlockState()
|
if (!(neighbourKTE.getBlockState()
|
||||||
.getBlock() instanceof IRotate))
|
.getBlock() instanceof IRotate))
|
||||||
return null;
|
return null;
|
||||||
if (!isConnected(currentTE, neighbourKTE))
|
if (!isConnected(currentTE, neighbourKTE) && !isConnected(neighbourKTE, currentTE))
|
||||||
return null;
|
return null;
|
||||||
return neighbourKTE;
|
return neighbourKTE;
|
||||||
}
|
}
|
||||||
|
@ -403,14 +403,9 @@ public class RotationPropagator {
|
||||||
public static boolean isConnected(KineticTileEntity from, KineticTileEntity to) {
|
public static boolean isConnected(KineticTileEntity from, KineticTileEntity to) {
|
||||||
final BlockState stateFrom = from.getBlockState();
|
final BlockState stateFrom = from.getBlockState();
|
||||||
final BlockState stateTo = to.getBlockState();
|
final BlockState stateTo = to.getBlockState();
|
||||||
|
return isLargeCogToSpeedController(stateFrom, stateTo, to.getPos()
|
||||||
if (isLargeCogToSpeedController(stateFrom, stateTo, to.getPos()
|
.subtract(from.getPos())) || getRotationSpeedModifier(from, to) != 0
|
||||||
.subtract(from.getPos())))
|
|| from.isCustomConnection(to, stateFrom, stateTo);
|
||||||
return true;
|
|
||||||
if (isLargeCogToSpeedController(stateTo, stateFrom, from.getPos()
|
|
||||||
.subtract(to.getPos())))
|
|
||||||
return true;
|
|
||||||
return getRotationSpeedModifier(from, to) != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<KineticTileEntity> getConnectedNeighbours(KineticTileEntity te) {
|
private static List<KineticTileEntity> getConnectedNeighbours(KineticTileEntity te) {
|
||||||
|
@ -436,30 +431,11 @@ public class RotationPropagator {
|
||||||
neighbours.add(te.getPos()
|
neighbours.add(te.getPos()
|
||||||
.offset(facing));
|
.offset(facing));
|
||||||
|
|
||||||
// Some Blocks can interface diagonally
|
|
||||||
BlockState blockState = te.getBlockState();
|
BlockState blockState = te.getBlockState();
|
||||||
boolean isLargeWheel = isLargeCog(blockState);
|
|
||||||
|
|
||||||
if (!(blockState.getBlock() instanceof IRotate))
|
if (!(blockState.getBlock() instanceof IRotate))
|
||||||
return neighbours;
|
return neighbours;
|
||||||
IRotate block = (IRotate) blockState.getBlock();
|
IRotate block = (IRotate) blockState.getBlock();
|
||||||
|
return te.addPropagationLocations(block, blockState, neighbours);
|
||||||
if (block.hasIntegratedCogwheel(te.getWorld(), te.getPos(), blockState) || isLargeWheel
|
|
||||||
|| AllBlocks.BELT.has(blockState)) {
|
|
||||||
Axis axis = block.getRotationAxis(blockState);
|
|
||||||
|
|
||||||
BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1))
|
|
||||||
.forEach(offset -> {
|
|
||||||
if (!isLargeWheel && axis.getCoordinate(offset.getX(), offset.getY(), offset.getZ()) != 0)
|
|
||||||
return;
|
|
||||||
if (offset.distanceSq(0, 0, 0, false) != BlockPos.ZERO.distanceSq(1, 1, 0, false))
|
|
||||||
return;
|
|
||||||
neighbours.add(te.getPos()
|
|
||||||
.add(offset));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return neighbours;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,8 @@ public abstract class KineticBlock extends Block implements IRotate {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHarvestBlock(BlockState state, IBlockReader world, BlockPos pos, PlayerEntity player) {
|
public boolean canHarvestBlock(BlockState state, IBlockReader world, BlockPos pos, PlayerEntity player) {
|
||||||
for (ToolType toolType : player.getHeldItemMainhand().getToolTypes()) {
|
for (ToolType toolType : player.getHeldItemMainhand()
|
||||||
|
.getToolTypes()) {
|
||||||
if (isToolEffective(state, toolType))
|
if (isToolEffective(state, toolType))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -46,6 +47,24 @@ public abstract class KineticBlock extends Block implements IRotate {
|
||||||
@Override
|
@Override
|
||||||
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||||
// onBlockAdded is useless for init, as sometimes the TE gets re-instantiated
|
// onBlockAdded is useless for init, as sometimes the TE gets re-instantiated
|
||||||
|
|
||||||
|
// however, if a block change occurs that does not change kinetic connections,
|
||||||
|
// we can prevent a major re-propagation here
|
||||||
|
|
||||||
|
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
||||||
|
if (tileEntity instanceof KineticTileEntity) {
|
||||||
|
KineticTileEntity kineticTileEntity = (KineticTileEntity) tileEntity;
|
||||||
|
kineticTileEntity.preventSpeedUpdate = false;
|
||||||
|
|
||||||
|
if (oldState.getBlock() != state.getBlock())
|
||||||
|
return;
|
||||||
|
if (state.hasTileEntity() != oldState.hasTileEntity())
|
||||||
|
return;
|
||||||
|
if (!areStatesKineticallyEquivalent(oldState, state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
kineticTileEntity.preventSpeedUpdate = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -63,6 +82,10 @@ public abstract class KineticBlock extends Block implements IRotate {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||||
|
return getRotationAxis(newState) == getRotationAxis(oldState);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract TileEntity createTileEntity(BlockState state, IBlockReader world);
|
public abstract TileEntity createTileEntity(BlockState state, IBlockReader world);
|
||||||
|
|
||||||
|
@ -76,9 +99,14 @@ public abstract class KineticBlock extends Block implements IRotate {
|
||||||
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
||||||
if (!(tileEntity instanceof KineticTileEntity))
|
if (!(tileEntity instanceof KineticTileEntity))
|
||||||
return;
|
return;
|
||||||
|
KineticTileEntity kte = (KineticTileEntity) tileEntity;
|
||||||
|
|
||||||
|
if (kte.preventSpeedUpdate) {
|
||||||
|
kte.preventSpeedUpdate = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Remove previous information when block is added
|
// Remove previous information when block is added
|
||||||
KineticTileEntity kte = (KineticTileEntity) tileEntity;
|
|
||||||
kte.warnOfMovement();
|
kte.warnOfMovement();
|
||||||
kte.clearKineticInformation();
|
kte.clearKineticInformation();
|
||||||
kte.updateSpeed = true;
|
kte.updateSpeed = true;
|
||||||
|
|
|
@ -30,6 +30,7 @@ import net.minecraft.tileentity.ITickableTileEntity;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
import net.minecraft.util.Direction.AxisDirection;
|
import net.minecraft.util.Direction.AxisDirection;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
@ -42,6 +43,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
|
||||||
public @Nullable BlockPos source;
|
public @Nullable BlockPos source;
|
||||||
public boolean networkDirty;
|
public boolean networkDirty;
|
||||||
public boolean updateSpeed;
|
public boolean updateSpeed;
|
||||||
|
public boolean preventSpeedUpdate;
|
||||||
|
|
||||||
protected KineticEffectHandler effects;
|
protected KineticEffectHandler effects;
|
||||||
protected float speed;
|
protected float speed;
|
||||||
|
@ -361,11 +363,15 @@ public abstract class KineticTileEntity extends SmartTileEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
KineticTileEntity tileEntity = (KineticTileEntity) tileEntityIn;
|
KineticTileEntity tileEntity = (KineticTileEntity) tileEntityIn;
|
||||||
|
if (state.getBlock() instanceof KineticBlock
|
||||||
|
&& !((KineticBlock) state.getBlock()).areStatesKineticallyEquivalent(currentState, state)) {
|
||||||
if (tileEntity.hasNetwork())
|
if (tileEntity.hasNetwork())
|
||||||
tileEntity.getOrCreateNetwork()
|
tileEntity.getOrCreateNetwork()
|
||||||
.remove(tileEntity);
|
.remove(tileEntity);
|
||||||
tileEntity.detachKinetics();
|
tileEntity.detachKinetics();
|
||||||
tileEntity.removeSource();
|
tileEntity.removeSource();
|
||||||
|
}
|
||||||
|
|
||||||
world.setBlockState(pos, state, 3);
|
world.setBlockState(pos, state, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,8 +423,8 @@ public abstract class KineticTileEntity extends SmartTileEntity
|
||||||
|
|
||||||
String stressString =
|
String stressString =
|
||||||
spacing + "%s%s" + Lang.translate("generic.unit.stress") + " " + TextFormatting.DARK_GRAY + "%s";
|
spacing + "%s%s" + Lang.translate("generic.unit.stress") + " " + TextFormatting.DARK_GRAY + "%s";
|
||||||
tooltip.add(" " + String.format(stressString, TextFormatting.AQUA, IHaveGoggleInformation.format(stressTotal),
|
tooltip.add(" " + String.format(stressString, TextFormatting.AQUA,
|
||||||
Lang.translate("gui.goggles.at_current_speed")));
|
IHaveGoggleInformation.format(stressTotal), Lang.translate("gui.goggles.at_current_speed")));
|
||||||
|
|
||||||
added = true;
|
added = true;
|
||||||
}
|
}
|
||||||
|
@ -454,4 +460,72 @@ public abstract class KineticTileEntity extends SmartTileEntity
|
||||||
return overStressed;
|
return overStressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Custom Propagation
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify ratio of transferred rotation from this kinetic component to a
|
||||||
|
* specific other.
|
||||||
|
*
|
||||||
|
* @param target other Kinetic TE to transfer to
|
||||||
|
* @param stateFrom this TE's blockstate
|
||||||
|
* @param stateTo other TE's blockstate
|
||||||
|
* @param diff difference in position (to.pos - from.pos)
|
||||||
|
* @param connectedViaAxes whether these kinetic blocks are connected via mutual
|
||||||
|
* IRotate.hasShaftTowards()
|
||||||
|
* @param connectedViaCogs whether these kinetic blocks are connected via mutual
|
||||||
|
* IRotate.hasIntegratedCogwheel()
|
||||||
|
* @return factor of rotation speed from this TE to other. 0 if no rotation is
|
||||||
|
* transferred, or the standard rules apply (integrated shafts/cogs)
|
||||||
|
*/
|
||||||
|
public float propagateRotationTo(KineticTileEntity target, BlockState stateFrom, BlockState stateTo, BlockPos diff,
|
||||||
|
boolean connectedViaAxes, boolean connectedViaCogs) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify additional locations the rotation propagator should look for
|
||||||
|
* potentially connected components. Neighbour list contains offset positions in
|
||||||
|
* all 6 directions by default.
|
||||||
|
*
|
||||||
|
* @param block
|
||||||
|
* @param state
|
||||||
|
* @param neighbours
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<BlockPos> addPropagationLocations(IRotate block, BlockState state, List<BlockPos> neighbours) {
|
||||||
|
if (!canPropagateDiagonally(block, state))
|
||||||
|
return neighbours;
|
||||||
|
|
||||||
|
Axis axis = block.getRotationAxis(state);
|
||||||
|
BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1))
|
||||||
|
.forEach(offset -> {
|
||||||
|
if (axis.getCoordinate(offset.getX(), offset.getY(), offset.getZ()) != 0)
|
||||||
|
return;
|
||||||
|
if (offset.distanceSq(0, 0, 0, false) != BlockPos.ZERO.distanceSq(1, 1, 0, false))
|
||||||
|
return;
|
||||||
|
neighbours.add(pos.add(offset));
|
||||||
|
});
|
||||||
|
return neighbours;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify whether this component can propagate speed to the other in any
|
||||||
|
* circumstance. Shaft and cogwheel connections are already handled by internal
|
||||||
|
* logic. Does not have to be specified on both ends, it is assumed that this
|
||||||
|
* relation is symmetrical.
|
||||||
|
*
|
||||||
|
* @param other
|
||||||
|
* @param state
|
||||||
|
* @param otherState
|
||||||
|
* @return true if this and the other component should check their propagation
|
||||||
|
* factor and are not already connected via integrated cogs or shafts
|
||||||
|
*/
|
||||||
|
public boolean isCustomConnection(KineticTileEntity other, BlockState state, BlockState otherState) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canPropagateDiagonally(IRotate block, BlockState state) {
|
||||||
|
return block.hasIntegratedCogwheel(world, pos, state);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,6 @@ public class DeployerTileEntity extends KineticTileEntity {
|
||||||
if (state == State.EXPANDING) {
|
if (state == State.EXPANDING) {
|
||||||
if (boop)
|
if (boop)
|
||||||
triggerBoop();
|
triggerBoop();
|
||||||
else
|
|
||||||
activate();
|
activate();
|
||||||
|
|
||||||
state = State.RETRACTING;
|
state = State.RETRACTING;
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class AirCurrent {
|
||||||
protected void tickAffectedEntities(World world, Direction facing) {
|
protected void tickAffectedEntities(World world, Direction facing) {
|
||||||
for (Iterator<Entity> iterator = caughtEntities.iterator(); iterator.hasNext();) {
|
for (Iterator<Entity> iterator = caughtEntities.iterator(); iterator.hasNext();) {
|
||||||
Entity entity = iterator.next();
|
Entity entity = iterator.next();
|
||||||
if (!entity.getBoundingBox()
|
if (!entity.isAlive() || !entity.getBoundingBox()
|
||||||
.intersects(bounds)) {
|
.intersects(bounds)) {
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.simibubi.create.content.contraptions.components.fan;
|
package com.simibubi.create.content.contraptions.components.fan;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
|
||||||
import com.simibubi.create.AllTileEntities;
|
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.content.logistics.block.chute.AbstractChuteBlock;
|
import com.simibubi.create.content.logistics.block.chute.AbstractChuteBlock;
|
||||||
|
@ -33,9 +32,16 @@ public class EncasedFanBlock extends DirectionalKineticBlock implements ITE<Enca
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||||
|
super.onBlockAdded(state, worldIn, pos, oldState, isMoving);
|
||||||
blockUpdate(state, worldIn, pos);
|
blockUpdate(state, worldIn, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateNeighbors(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags) {
|
||||||
|
super.updateNeighbors(stateIn, worldIn, pos, flags);
|
||||||
|
blockUpdate(stateIn, worldIn, pos);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReplaced(BlockState state, World world, BlockPos pos, BlockState p_196243_4_, boolean p_196243_5_) {
|
public void onReplaced(BlockState state, World world, BlockPos pos, BlockState p_196243_4_, boolean p_196243_5_) {
|
||||||
if (state.hasTileEntity() && (state.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasTileEntity())) {
|
if (state.hasTileEntity() && (state.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasTileEntity())) {
|
||||||
|
@ -70,13 +76,13 @@ public class EncasedFanBlock extends DirectionalKineticBlock implements ITE<Enca
|
||||||
.isSneaking() ? preferredFacing : preferredFacing.getOpposite());
|
.isSneaking() ? preferredFacing : preferredFacing.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void blockUpdate(BlockState state, World worldIn, BlockPos pos) {
|
protected void blockUpdate(BlockState state, IWorld worldIn, BlockPos pos) {
|
||||||
if (worldIn instanceof WrappedWorld)
|
if (worldIn instanceof WrappedWorld)
|
||||||
return;
|
return;
|
||||||
notifyFanTile(worldIn, pos);
|
notifyFanTile(worldIn, pos);
|
||||||
if (worldIn.isRemote)
|
if (worldIn.isRemote())
|
||||||
return;
|
return;
|
||||||
withTileEntityDo(worldIn, pos, te -> te.updateGenerator(state.get(FACING)));
|
withTileEntityDo(worldIn, pos, te -> te.queueGeneratorUpdate());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void notifyFanTile(IWorld world, BlockPos pos) {
|
protected void notifyFanTile(IWorld world, BlockPos pos) {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.fan;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllTags.AllBlockTags;
|
import com.simibubi.create.AllTags.AllBlockTags;
|
||||||
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
||||||
|
@ -18,7 +19,6 @@ import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
|
||||||
@MethodsReturnNonnullByDefault
|
@MethodsReturnNonnullByDefault
|
||||||
public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements IAirCurrentSource {
|
public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements IAirCurrentSource {
|
||||||
|
|
||||||
|
@ -27,17 +27,20 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements
|
||||||
protected int entitySearchCooldown;
|
protected int entitySearchCooldown;
|
||||||
protected boolean isGenerator;
|
protected boolean isGenerator;
|
||||||
protected boolean updateAirFlow;
|
protected boolean updateAirFlow;
|
||||||
|
protected boolean updateGenerator;
|
||||||
|
|
||||||
public EncasedFanTileEntity(TileEntityType<? extends EncasedFanTileEntity> type) {
|
public EncasedFanTileEntity(TileEntityType<? extends EncasedFanTileEntity> type) {
|
||||||
super(type);
|
super(type);
|
||||||
isGenerator = false;
|
isGenerator = false;
|
||||||
airCurrent = new AirCurrent(this);
|
airCurrent = new AirCurrent(this);
|
||||||
updateAirFlow = true;
|
updateAirFlow = true;
|
||||||
|
updateGenerator = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void read(CompoundNBT compound, boolean clientPacket) {
|
protected void read(CompoundNBT compound, boolean clientPacket) {
|
||||||
super.read(compound, clientPacket);
|
super.read(compound, clientPacket);
|
||||||
|
if (!wasMoved)
|
||||||
isGenerator = compound.getBoolean("Generating");
|
isGenerator = compound.getBoolean("Generating");
|
||||||
if (clientPacket)
|
if (clientPacket)
|
||||||
airCurrent.rebuild();
|
airCurrent.rebuild();
|
||||||
|
@ -64,12 +67,20 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements
|
||||||
return isGenerator ? AllConfigs.SERVER.kinetics.generatingFanSpeed.get() : 0;
|
return isGenerator ? AllConfigs.SERVER.kinetics.generatingFanSpeed.get() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateGenerator(Direction facing) {
|
public void queueGeneratorUpdate() {
|
||||||
boolean shouldGenerate = world.isBlockPowered(pos) && facing == Direction.DOWN
|
updateGenerator = true;
|
||||||
&& world.isBlockPresent(pos.down()) && blockBelowIsHot();
|
}
|
||||||
if (shouldGenerate == isGenerator)
|
|
||||||
|
public void updateGenerator() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!AllBlocks.ENCASED_FAN.has(blockState))
|
||||||
|
return;
|
||||||
|
if (blockState.get(EncasedFanBlock.FACING) != Direction.DOWN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
boolean shouldGenerate = world.isBlockPowered(pos) && world.isBlockPresent(pos.down()) && blockBelowIsHot();
|
||||||
|
if (shouldGenerate == isGenerator)
|
||||||
|
return;
|
||||||
isGenerator = shouldGenerate;
|
isGenerator = shouldGenerate;
|
||||||
updateGeneratedRotation();
|
updateGeneratedRotation();
|
||||||
}
|
}
|
||||||
|
@ -171,6 +182,11 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements
|
||||||
sendData();
|
sendData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (updateGenerator) {
|
||||||
|
updateGenerator = false;
|
||||||
|
updateGenerator();
|
||||||
|
}
|
||||||
|
|
||||||
if (getSpeed() == 0 || isGenerator)
|
if (getSpeed() == 0 || isGenerator)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@ public class CreativeMotorTileEntity extends GeneratingKineticTileEntity {
|
||||||
super.addBehaviours(behaviours);
|
super.addBehaviours(behaviours);
|
||||||
Integer max = AllConfigs.SERVER.kinetics.maxMotorSpeed.get();
|
Integer max = AllConfigs.SERVER.kinetics.maxMotorSpeed.get();
|
||||||
|
|
||||||
CenteredSideValueBoxTransform slot =
|
CenteredSideValueBoxTransform slot = new CenteredSideValueBoxTransform(
|
||||||
new CenteredSideValueBoxTransform((motor, side) -> motor.get(CreativeMotorBlock.FACING) == side.getOpposite());
|
(motor, side) -> motor.get(CreativeMotorBlock.FACING) == side.getOpposite());
|
||||||
|
|
||||||
generatedSpeed = new ScrollValueBehaviour(Lang.translate("generic.speed"), this, slot);
|
generatedSpeed = new ScrollValueBehaviour(Lang.translate("generic.speed"), this, slot);
|
||||||
generatedSpeed.between(-max, max);
|
generatedSpeed.between(-max, max);
|
||||||
|
@ -55,20 +55,21 @@ public class CreativeMotorTileEntity extends GeneratingKineticTileEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int step(StepContext context) {
|
public static int step(StepContext context) {
|
||||||
if (context.shift)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
int current = context.currentValue;
|
int current = context.currentValue;
|
||||||
int magnitude = Math.abs(current) - (context.forward == current > 0 ? 0 : 1);
|
|
||||||
int step = 1;
|
int step = 1;
|
||||||
|
|
||||||
|
if (!context.shift) {
|
||||||
|
int magnitude = Math.abs(current) - (context.forward == current > 0 ? 0 : 1);
|
||||||
|
|
||||||
if (magnitude >= 4)
|
if (magnitude >= 4)
|
||||||
step *= 4;
|
step *= 4;
|
||||||
if (magnitude >= 32)
|
if (magnitude >= 32)
|
||||||
step *= 4;
|
step *= 4;
|
||||||
if (magnitude >= 128)
|
if (magnitude >= 128)
|
||||||
step *= 4;
|
step *= 4;
|
||||||
return step;
|
}
|
||||||
|
|
||||||
|
return (int) (current + (context.forward ? step : -step) == 0 ? step + 1 : step);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
|
||||||
|
|
||||||
for (ItemEntity itemEntity : world.getEntitiesWithinAABB(ItemEntity.class,
|
for (ItemEntity itemEntity : world.getEntitiesWithinAABB(ItemEntity.class,
|
||||||
new AxisAlignedBB(pos.down()).shrink(.125f))) {
|
new AxisAlignedBB(pos.down()).shrink(.125f))) {
|
||||||
|
if (!itemEntity.isAlive() || !itemEntity.onGround)
|
||||||
|
continue;
|
||||||
ItemStack stack = itemEntity.getItem();
|
ItemStack stack = itemEntity.getItem();
|
||||||
Optional<PressingRecipe> recipe = getRecipe(stack);
|
Optional<PressingRecipe> recipe = getRecipe(stack);
|
||||||
if (!recipe.isPresent())
|
if (!recipe.isPresent())
|
||||||
|
@ -233,7 +235,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
|
||||||
for (Entity entity : world.getEntitiesWithinAABBExcludingEntity(null, bb)) {
|
for (Entity entity : world.getEntitiesWithinAABBExcludingEntity(null, bb)) {
|
||||||
if (!(entity instanceof ItemEntity))
|
if (!(entity instanceof ItemEntity))
|
||||||
continue;
|
continue;
|
||||||
if (!entity.isAlive())
|
if (!entity.isAlive() || !entity.onGround)
|
||||||
continue;
|
continue;
|
||||||
ItemEntity itemEntity = (ItemEntity) entity;
|
ItemEntity itemEntity = (ItemEntity) entity;
|
||||||
pressedItems.add(itemEntity.getItem());
|
pressedItems.add(itemEntity.getItem());
|
||||||
|
|
|
@ -74,6 +74,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
contraption.onEntityCreated(this);
|
contraption.onEntityCreated(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean supportsTerrainCollision() {
|
||||||
|
return contraption instanceof TranslatingContraption;
|
||||||
|
}
|
||||||
|
|
||||||
protected void contraptionInitialize() {
|
protected void contraptionInitialize() {
|
||||||
contraption.onEntityInitialize(world, this);
|
contraption.onEntityInitialize(world, this);
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
@ -594,7 +598,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ContraptionRotationState {
|
public static class ContraptionRotationState {
|
||||||
static final ContraptionRotationState NONE = new ContraptionRotationState();
|
public static final ContraptionRotationState NONE = new ContraptionRotationState();
|
||||||
|
|
||||||
float xRotation = 0;
|
float xRotation = 0;
|
||||||
float yRotation = 0;
|
float yRotation = 0;
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement;
|
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingContraption;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkContraption;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonContraption;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyContraption;
|
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
|
||||||
|
|
||||||
public enum AllContraptionTypes {
|
|
||||||
|
|
||||||
PISTON(PistonContraption::new),
|
|
||||||
BEARING(BearingContraption::new),
|
|
||||||
PULLEY(PulleyContraption::new),
|
|
||||||
CLOCKWORK(ClockworkContraption::new),
|
|
||||||
MOUNTED(MountedContraption::new),
|
|
||||||
STABILIZED(StabilizedContraption::new),
|
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
Supplier<? extends Contraption> factory;
|
|
||||||
String id;
|
|
||||||
|
|
||||||
private AllContraptionTypes(Supplier<? extends Contraption> factory) {
|
|
||||||
this.factory = factory;
|
|
||||||
id = Lang.asId(name());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Contraption fromType(String type) {
|
|
||||||
for (AllContraptionTypes allContraptionTypes : values())
|
|
||||||
if (type.equals(allContraptionTypes.id))
|
|
||||||
return allContraptionTypes.factory.get();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -227,6 +227,12 @@ public class BlockMovementTraits {
|
||||||
if (state.getBlock() instanceof SailBlock)
|
if (state.getBlock() instanceof SailBlock)
|
||||||
return facing.getAxis() == state.get(SailBlock.FACING)
|
return facing.getAxis() == state.get(SailBlock.FACING)
|
||||||
.getAxis();
|
.getAxis();
|
||||||
|
if (AllBlocks.PISTON_EXTENSION_POLE.has(state))
|
||||||
|
return facing.getAxis() != state.get(BlockStateProperties.FACING)
|
||||||
|
.getAxis();
|
||||||
|
if (AllBlocks.MECHANICAL_PISTON_HEAD.has(state))
|
||||||
|
return facing.getAxis() != state.get(BlockStateProperties.FACING)
|
||||||
|
.getAxis();
|
||||||
return isBrittle(state);
|
return isBrittle(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllMovementBehaviours;
|
import com.simibubi.create.AllMovementBehaviours;
|
||||||
|
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.SeatEntity;
|
import com.simibubi.create.content.contraptions.components.actors.SeatEntity;
|
||||||
|
@ -30,16 +31,19 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueHandler;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueHandler;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonHeadBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock.MagnetBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock.MagnetBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock.RopeBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock.RopeBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity;
|
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
||||||
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock;
|
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
|
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
|
||||||
|
@ -48,6 +52,7 @@ import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
|
||||||
import com.simibubi.create.foundation.utility.BlockFace;
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTProcessors;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
|
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
|
||||||
|
|
||||||
|
@ -59,6 +64,7 @@ import net.minecraft.block.ChestBlock;
|
||||||
import net.minecraft.block.DoorBlock;
|
import net.minecraft.block.DoorBlock;
|
||||||
import net.minecraft.block.IWaterLoggable;
|
import net.minecraft.block.IWaterLoggable;
|
||||||
import net.minecraft.block.PressurePlateBlock;
|
import net.minecraft.block.PressurePlateBlock;
|
||||||
|
import net.minecraft.block.material.PushReaction;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.fluid.Fluids;
|
import net.minecraft.fluid.Fluids;
|
||||||
import net.minecraft.fluid.IFluidState;
|
import net.minecraft.fluid.IFluidState;
|
||||||
|
@ -69,6 +75,7 @@ import net.minecraft.nbt.NBTUtil;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.state.properties.ChestType;
|
import net.minecraft.state.properties.ChestType;
|
||||||
import net.minecraft.state.properties.DoubleBlockHalf;
|
import net.minecraft.state.properties.DoubleBlockHalf;
|
||||||
|
import net.minecraft.state.properties.PistonType;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
@ -134,9 +141,9 @@ public abstract class Contraption {
|
||||||
|
|
||||||
public abstract boolean assemble(World world, BlockPos pos);
|
public abstract boolean assemble(World world, BlockPos pos);
|
||||||
|
|
||||||
protected abstract boolean canAxisBeStabilized(Axis axis);
|
public abstract boolean canBeStabilized(Direction facing, BlockPos localPos);
|
||||||
|
|
||||||
protected abstract AllContraptionTypes getType();
|
protected abstract ContraptionType getType();
|
||||||
|
|
||||||
protected boolean customBlockPlacement(IWorld world, BlockPos pos, BlockState state) {
|
protected boolean customBlockPlacement(IWorld world, BlockPos pos, BlockState state) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -153,7 +160,7 @@ public abstract class Contraption {
|
||||||
|
|
||||||
public static Contraption fromNBT(World world, CompoundNBT nbt, boolean spawnData) {
|
public static Contraption fromNBT(World world, CompoundNBT nbt, boolean spawnData) {
|
||||||
String type = nbt.getString("Type");
|
String type = nbt.getString("Type");
|
||||||
Contraption contraption = AllContraptionTypes.fromType(type);
|
Contraption contraption = ContraptionType.fromType(type);
|
||||||
contraption.readNBT(world, nbt, spawnData);
|
contraption.readNBT(world, nbt, spawnData);
|
||||||
return contraption;
|
return contraption;
|
||||||
}
|
}
|
||||||
|
@ -240,7 +247,7 @@ public abstract class Contraption {
|
||||||
fluidStorage.forEach((pos, mfs) -> mfs.tick(entity, pos, world.isRemote));
|
fluidStorage.forEach((pos, mfs) -> mfs.tick(entity, pos, world.isRemote));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean moveBlock(World world, BlockPos pos, Direction forcedDirection, List<BlockPos> frontier,
|
protected boolean moveBlock(World world, BlockPos pos, @Nullable Direction forcedDirection, List<BlockPos> frontier,
|
||||||
Set<BlockPos> visited) {
|
Set<BlockPos> visited) {
|
||||||
visited.add(pos);
|
visited.add(pos);
|
||||||
frontier.remove(pos);
|
frontier.remove(pos);
|
||||||
|
@ -264,6 +271,12 @@ public abstract class Contraption {
|
||||||
if (AllBlocks.BELT.has(state))
|
if (AllBlocks.BELT.has(state))
|
||||||
moveBelt(pos, frontier, visited, state);
|
moveBelt(pos, frontier, visited, state);
|
||||||
|
|
||||||
|
if (AllBlocks.GANTRY_PINION.has(state))
|
||||||
|
moveGantryPinion(world, pos, frontier, visited, state);
|
||||||
|
|
||||||
|
if (AllBlocks.GANTRY_SHAFT.has(state))
|
||||||
|
moveGantryShaft(world, pos, frontier, visited, state);
|
||||||
|
|
||||||
// Bearings potentially create stabilized sub-contraptions
|
// Bearings potentially create stabilized sub-contraptions
|
||||||
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
||||||
moveBearing(pos, frontier, visited, state);
|
moveBearing(pos, frontier, visited, state);
|
||||||
|
@ -280,6 +293,10 @@ public abstract class Contraption {
|
||||||
if (state.getBlock() instanceof MechanicalPistonBlock)
|
if (state.getBlock() instanceof MechanicalPistonBlock)
|
||||||
if (!moveMechanicalPiston(world, pos, frontier, visited, state))
|
if (!moveMechanicalPiston(world, pos, frontier, visited, state))
|
||||||
return false;
|
return false;
|
||||||
|
if (isExtensionPole(state))
|
||||||
|
movePistonPole(world, pos, frontier, visited, state);
|
||||||
|
if (isPistonHead(state))
|
||||||
|
movePistonHead(world, pos, frontier, visited, state);
|
||||||
|
|
||||||
// Doors try to stay whole
|
// Doors try to stay whole
|
||||||
if (state.getBlock() instanceof DoorBlock) {
|
if (state.getBlock() instanceof DoorBlock) {
|
||||||
|
@ -296,14 +313,13 @@ public abstract class Contraption {
|
||||||
Map<Direction, SuperGlueEntity> superglue = SuperGlueHandler.gatherGlue(world, pos);
|
Map<Direction, SuperGlueEntity> superglue = SuperGlueHandler.gatherGlue(world, pos);
|
||||||
|
|
||||||
// Slime blocks and super glue drag adjacent blocks if possible
|
// Slime blocks and super glue drag adjacent blocks if possible
|
||||||
boolean isStickyBlock = state.isStickyBlock();
|
|
||||||
for (Direction offset : Iterate.directions) {
|
for (Direction offset : Iterate.directions) {
|
||||||
BlockPos offsetPos = pos.offset(offset);
|
BlockPos offsetPos = pos.offset(offset);
|
||||||
BlockState blockState = world.getBlockState(offsetPos);
|
BlockState blockState = world.getBlockState(offsetPos);
|
||||||
if (isAnchoringBlockAt(offsetPos))
|
if (isAnchoringBlockAt(offsetPos))
|
||||||
continue;
|
continue;
|
||||||
if (!movementAllowed(world, offsetPos)) {
|
if (!movementAllowed(world, offsetPos)) {
|
||||||
if (offset == forcedDirection && isStickyBlock)
|
if (offset == forcedDirection)
|
||||||
return false;
|
return false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -313,8 +329,20 @@ public abstract class Contraption {
|
||||||
boolean blockAttachedTowardsFace =
|
boolean blockAttachedTowardsFace =
|
||||||
BlockMovementTraits.isBlockAttachedTowards(world, offsetPos, blockState, offset.getOpposite());
|
BlockMovementTraits.isBlockAttachedTowards(world, offsetPos, blockState, offset.getOpposite());
|
||||||
boolean brittle = BlockMovementTraits.isBrittle(blockState);
|
boolean brittle = BlockMovementTraits.isBrittle(blockState);
|
||||||
|
boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state);
|
||||||
|
if (canStick) {
|
||||||
|
if (state.getPushReaction() == PushReaction.PUSH_ONLY || blockState.getPushReaction() == PushReaction.PUSH_ONLY) {
|
||||||
|
canStick = false;
|
||||||
|
}
|
||||||
|
if (BlockMovementTraits.notSupportive(state, offset)) {
|
||||||
|
canStick = false;
|
||||||
|
}
|
||||||
|
if (BlockMovementTraits.notSupportive(blockState, offset.getOpposite())) {
|
||||||
|
canStick = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!wasVisited && ((isStickyBlock && !brittle) || blockAttachedTowardsFace || faceHasGlue))
|
if (!wasVisited && (canStick || blockAttachedTowardsFace || faceHasGlue || (offset == forcedDirection && !BlockMovementTraits.notSupportive(state, forcedDirection))))
|
||||||
frontier.add(offsetPos);
|
frontier.add(offsetPos);
|
||||||
if (faceHasGlue)
|
if (faceHasGlue)
|
||||||
addGlue(superglue.get(offset));
|
addGlue(superglue.get(offset));
|
||||||
|
@ -324,9 +352,86 @@ public abstract class Contraption {
|
||||||
return blocks.size() <= AllConfigs.SERVER.kinetics.maxBlocksMoved.get();
|
return blocks.size() <= AllConfigs.SERVER.kinetics.maxBlocksMoved.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void movePistonHead(World world, BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited,
|
||||||
|
BlockState state) {
|
||||||
|
Direction direction = state.get(MechanicalPistonHeadBlock.FACING);
|
||||||
|
BlockPos offset = pos.offset(direction.getOpposite());
|
||||||
|
if (!visited.contains(offset)) {
|
||||||
|
BlockState blockState = world.getBlockState(offset);
|
||||||
|
if (isExtensionPole(blockState) && blockState.get(PistonExtensionPoleBlock.FACING)
|
||||||
|
.getAxis() == direction.getAxis())
|
||||||
|
frontier.add(offset);
|
||||||
|
if (blockState.getBlock() instanceof MechanicalPistonBlock) {
|
||||||
|
Direction pistonFacing = blockState.get(MechanicalPistonBlock.FACING);
|
||||||
|
if (pistonFacing == direction && blockState.get(MechanicalPistonBlock.STATE) == PistonState.EXTENDED)
|
||||||
|
frontier.add(offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state.get(MechanicalPistonHeadBlock.TYPE) == PistonType.STICKY) {
|
||||||
|
BlockPos attached = pos.offset(direction);
|
||||||
|
if (!visited.contains(attached))
|
||||||
|
frontier.add(attached);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void movePistonPole(World world, BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited,
|
||||||
|
BlockState state) {
|
||||||
|
for (Direction d : Iterate.directionsInAxis(state.get(PistonExtensionPoleBlock.FACING)
|
||||||
|
.getAxis())) {
|
||||||
|
BlockPos offset = pos.offset(d);
|
||||||
|
if (!visited.contains(offset)) {
|
||||||
|
BlockState blockState = world.getBlockState(offset);
|
||||||
|
if (isExtensionPole(blockState) && blockState.get(PistonExtensionPoleBlock.FACING)
|
||||||
|
.getAxis() == d.getAxis())
|
||||||
|
frontier.add(offset);
|
||||||
|
if (isPistonHead(blockState) && blockState.get(MechanicalPistonHeadBlock.FACING)
|
||||||
|
.getAxis() == d.getAxis())
|
||||||
|
frontier.add(offset);
|
||||||
|
if (blockState.getBlock() instanceof MechanicalPistonBlock) {
|
||||||
|
Direction pistonFacing = blockState.get(MechanicalPistonBlock.FACING);
|
||||||
|
if (pistonFacing == d || pistonFacing == d.getOpposite()
|
||||||
|
&& blockState.get(MechanicalPistonBlock.STATE) == PistonState.EXTENDED)
|
||||||
|
frontier.add(offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void moveGantryPinion(World world, BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited,
|
||||||
|
BlockState state) {
|
||||||
|
BlockPos offset = pos.offset(state.get(GantryPinionBlock.FACING));
|
||||||
|
if (!visited.contains(offset))
|
||||||
|
frontier.add(offset);
|
||||||
|
Axis rotationAxis = ((IRotate) state.getBlock()).getRotationAxis(state);
|
||||||
|
for (Direction d : Iterate.directionsInAxis(rotationAxis)) {
|
||||||
|
offset = pos.offset(d);
|
||||||
|
BlockState offsetState = world.getBlockState(offset);
|
||||||
|
if (AllBlocks.GANTRY_SHAFT.has(offsetState) && offsetState.get(GantryShaftBlock.FACING)
|
||||||
|
.getAxis() == d.getAxis())
|
||||||
|
if (!visited.contains(offset))
|
||||||
|
frontier.add(offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void moveGantryShaft(World world, BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited,
|
||||||
|
BlockState state) {
|
||||||
|
for (Direction d : Iterate.directions) {
|
||||||
|
BlockPos offset = pos.offset(d);
|
||||||
|
if (!visited.contains(offset)) {
|
||||||
|
BlockState offsetState = world.getBlockState(offset);
|
||||||
|
Direction facing = state.get(GantryShaftBlock.FACING);
|
||||||
|
if (d.getAxis() == facing.getAxis() && AllBlocks.GANTRY_SHAFT.has(offsetState)
|
||||||
|
&& offsetState.get(GantryShaftBlock.FACING) == facing)
|
||||||
|
frontier.add(offset);
|
||||||
|
else if (AllBlocks.GANTRY_PINION.has(offsetState) && offsetState.get(GantryPinionBlock.FACING) == d)
|
||||||
|
frontier.add(offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void moveBearing(BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited, BlockState state) {
|
private void moveBearing(BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited, BlockState state) {
|
||||||
Direction facing = state.get(MechanicalBearingBlock.FACING);
|
Direction facing = state.get(MechanicalBearingBlock.FACING);
|
||||||
if (!canAxisBeStabilized(facing.getAxis())) {
|
if (!canBeStabilized(facing, pos.subtract(anchor))) {
|
||||||
BlockPos offset = pos.offset(facing);
|
BlockPos offset = pos.offset(facing);
|
||||||
if (!visited.contains(offset))
|
if (!visited.contains(offset))
|
||||||
frontier.add(offset);
|
frontier.add(offset);
|
||||||
|
@ -376,47 +481,25 @@ public abstract class Contraption {
|
||||||
|
|
||||||
private boolean moveMechanicalPiston(World world, BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited,
|
private boolean moveMechanicalPiston(World world, BlockPos pos, List<BlockPos> frontier, Set<BlockPos> visited,
|
||||||
BlockState state) {
|
BlockState state) {
|
||||||
int limit = AllConfigs.SERVER.kinetics.maxPistonPoles.get();
|
|
||||||
Direction direction = state.get(MechanicalPistonBlock.FACING);
|
Direction direction = state.get(MechanicalPistonBlock.FACING);
|
||||||
if (state.get(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) {
|
PistonState pistonState = state.get(MechanicalPistonBlock.STATE);
|
||||||
BlockPos searchPos = pos;
|
if (pistonState == PistonState.MOVING)
|
||||||
while (limit-- >= 0) {
|
|
||||||
searchPos = searchPos.offset(direction);
|
|
||||||
BlockState blockState = world.getBlockState(searchPos);
|
|
||||||
if (isExtensionPole(blockState)) {
|
|
||||||
if (blockState.get(PistonExtensionPoleBlock.FACING)
|
|
||||||
.getAxis() != direction.getAxis())
|
|
||||||
break;
|
|
||||||
if (!visited.contains(searchPos))
|
|
||||||
frontier.add(searchPos);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (isPistonHead(blockState))
|
|
||||||
if (!visited.contains(searchPos))
|
|
||||||
frontier.add(searchPos);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (limit <= -1)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
BlockPos offset = pos.offset(direction.getOpposite());
|
||||||
|
if (!visited.contains(offset)) {
|
||||||
|
BlockState poleState = world.getBlockState(offset);
|
||||||
|
if (AllBlocks.PISTON_EXTENSION_POLE.has(poleState) && poleState.get(PistonExtensionPoleBlock.FACING)
|
||||||
|
.getAxis() == direction.getAxis())
|
||||||
|
frontier.add(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockPos searchPos = pos;
|
if (pistonState == PistonState.EXTENDED || MechanicalPistonBlock.isStickyPiston(state)) {
|
||||||
while (limit-- >= 0) {
|
offset = pos.offset(direction);
|
||||||
searchPos = searchPos.offset(direction.getOpposite());
|
if (!visited.contains(offset))
|
||||||
BlockState blockState = world.getBlockState(searchPos);
|
frontier.add(offset);
|
||||||
if (isExtensionPole(blockState)) {
|
|
||||||
if (blockState.get(PistonExtensionPoleBlock.FACING)
|
|
||||||
.getAxis() != direction.getAxis())
|
|
||||||
break;
|
|
||||||
if (!visited.contains(searchPos))
|
|
||||||
frontier.add(searchPos);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (limit <= -1)
|
|
||||||
return false;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -726,7 +809,8 @@ public abstract class Contraption {
|
||||||
if (brittles != BlockMovementTraits.isBrittle(block.state))
|
if (brittles != BlockMovementTraits.isBrittle(block.state))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
BlockPos add = block.pos.add(anchor).add(offset);
|
BlockPos add = block.pos.add(anchor)
|
||||||
|
.add(offset);
|
||||||
if (customBlockRemoval(world, add, block.state))
|
if (customBlockRemoval(world, add, block.state))
|
||||||
continue;
|
continue;
|
||||||
BlockState oldState = world.getBlockState(add);
|
BlockState oldState = world.getBlockState(add);
|
||||||
|
@ -735,7 +819,8 @@ public abstract class Contraption {
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
world.getWorld()
|
world.getWorld()
|
||||||
.removeTileEntity(add);
|
.removeTileEntity(add);
|
||||||
int flags = BlockFlags.IS_MOVING | BlockFlags.NO_NEIGHBOR_DROPS | BlockFlags.UPDATE_NEIGHBORS;
|
int flags = BlockFlags.IS_MOVING | BlockFlags.NO_NEIGHBOR_DROPS | BlockFlags.UPDATE_NEIGHBORS
|
||||||
|
| BlockFlags.BLOCK_UPDATE;
|
||||||
if (blockIn instanceof IWaterLoggable && oldState.has(BlockStateProperties.WATERLOGGED)
|
if (blockIn instanceof IWaterLoggable && oldState.has(BlockStateProperties.WATERLOGGED)
|
||||||
&& oldState.get(BlockStateProperties.WATERLOGGED)
|
&& oldState.get(BlockStateProperties.WATERLOGGED)
|
||||||
.booleanValue()) {
|
.booleanValue()) {
|
||||||
|
@ -746,8 +831,12 @@ public abstract class Contraption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (BlockInfo block : blocks.values()) {
|
for (BlockInfo block : blocks.values()) {
|
||||||
BlockPos add = block.pos.add(anchor).add(offset);
|
BlockPos add = block.pos.add(anchor)
|
||||||
world.markAndNotifyBlock(add, null, block.state, Blocks.AIR.getDefaultState(), BlockFlags.IS_MOVING | BlockFlags.DEFAULT);
|
.add(offset);
|
||||||
|
if (!shouldUpdateAfterMovement(block))
|
||||||
|
continue;
|
||||||
|
world.markAndNotifyBlock(add, null, block.state, Blocks.AIR.getDefaultState(),
|
||||||
|
BlockFlags.IS_MOVING | BlockFlags.DEFAULT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -797,6 +886,8 @@ public abstract class Contraption {
|
||||||
|
|
||||||
TileEntity tileEntity = world.getTileEntity(targetPos);
|
TileEntity tileEntity = world.getTileEntity(targetPos);
|
||||||
CompoundNBT tag = block.nbt;
|
CompoundNBT tag = block.nbt;
|
||||||
|
if (tileEntity != null)
|
||||||
|
tag = NBTProcessors.process(tileEntity, tag, false);
|
||||||
if (tileEntity != null && tag != null) {
|
if (tileEntity != null && tag != null) {
|
||||||
tag.putInt("x", targetPos.getX());
|
tag.putInt("x", targetPos.getX());
|
||||||
tag.putInt("y", targetPos.getY());
|
tag.putInt("y", targetPos.getY());
|
||||||
|
@ -827,8 +918,12 @@ public abstract class Contraption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (BlockInfo block : blocks.values()) {
|
for (BlockInfo block : blocks.values()) {
|
||||||
|
if (!shouldUpdateAfterMovement(block))
|
||||||
|
continue;
|
||||||
BlockPos targetPos = transform.apply(block.pos);
|
BlockPos targetPos = transform.apply(block.pos);
|
||||||
world.markAndNotifyBlock(targetPos, null, block.state, block.state, BlockFlags.IS_MOVING | BlockFlags.DEFAULT);
|
BlockState state = world.getBlockState(targetPos);
|
||||||
|
world.markAndNotifyBlock(targetPos, null, block.state, block.state,
|
||||||
|
BlockFlags.IS_MOVING | BlockFlags.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < inventory.getSlots(); i++)
|
for (int i = 0; i < inventory.getSlots(); i++)
|
||||||
|
@ -888,6 +983,10 @@ public abstract class Contraption {
|
||||||
callBack.accept(AllMovementBehaviours.of(pair.getLeft().state), pair.getRight());
|
callBack.accept(AllMovementBehaviours.of(pair.getLeft().state), pair.getRight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean shouldUpdateAfterMovement(BlockInfo info) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void expandBoundsAroundAxis(Axis axis) {
|
public void expandBoundsAroundAxis(Axis axis) {
|
||||||
AxisAlignedBB bb = bounds;
|
AxisAlignedBB bb = bounds;
|
||||||
double maxXDiff = Math.max(bb.maxX - 1, -bb.minX);
|
double maxXDiff = Math.max(bb.maxX - 1, -bb.minX);
|
||||||
|
|
|
@ -348,7 +348,7 @@ public class ContraptionCollider {
|
||||||
return potentialHits;
|
return potentialHits;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean collideBlocks(ControlledContraptionEntity contraptionEntity) {
|
public static boolean collideBlocks(AbstractContraptionEntity contraptionEntity) {
|
||||||
if (!contraptionEntity.supportsTerrainCollision())
|
if (!contraptionEntity.supportsTerrainCollision())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingContraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkContraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonContraption;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyContraption;
|
||||||
|
|
||||||
|
public class ContraptionType {
|
||||||
|
|
||||||
|
public static Map<String, ContraptionType> entries = new HashMap<>();
|
||||||
|
public static ContraptionType
|
||||||
|
PISTON = register("piston", PistonContraption::new),
|
||||||
|
BEARING = register("bearing", BearingContraption::new),
|
||||||
|
PULLEY = register("pulley", PulleyContraption::new),
|
||||||
|
CLOCKWORK = register("clockwork", ClockworkContraption::new),
|
||||||
|
MOUNTED = register("mounted", MountedContraption::new),
|
||||||
|
STABILIZED = register("stabilized", StabilizedContraption::new),
|
||||||
|
GANTRY = register("gantry", GantryContraption::new);
|
||||||
|
|
||||||
|
Supplier<? extends Contraption> factory;
|
||||||
|
String id;
|
||||||
|
|
||||||
|
public static ContraptionType register(String id, Supplier<? extends Contraption> factory) {
|
||||||
|
ContraptionType value = new ContraptionType(id, factory);
|
||||||
|
entries.put(id, value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContraptionType(String id, Supplier<? extends Contraption> factory) {
|
||||||
|
this.factory = factory;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Contraption fromType(String type) {
|
||||||
|
for (Entry<String, ContraptionType> allContraptionTypes : entries.entrySet())
|
||||||
|
if (type.equals(allContraptionTypes.getKey()))
|
||||||
|
return allContraptionTypes.getValue().factory.get();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -46,10 +46,6 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity {
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supportsTerrainCollision() {
|
|
||||||
return contraption instanceof TranslatingContraption;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Vec3d getContactPointMotion(Vec3d globalContactPoint) {
|
public Vec3d getContactPointMotion(Vec3d globalContactPoint) {
|
||||||
if (contraption instanceof TranslatingContraption)
|
if (contraption instanceof TranslatingContraption)
|
||||||
|
@ -151,8 +147,6 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3d motion = getMotion();
|
Vec3d motion = getMotion();
|
||||||
if (motion.length() < 1 / 4098f)
|
|
||||||
setMotion(Vec3d.ZERO);
|
|
||||||
move(motion.x, motion.y, motion.z);
|
move(motion.x, motion.y, motion.z);
|
||||||
if (ContraptionCollider.collideBlocks(this))
|
if (ContraptionCollider.collideBlocks(this))
|
||||||
getController().collided();
|
getController().collided();
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class OrientedContraptionEntityRenderer extends AbstractContraptionEntity
|
||||||
if (!super.shouldRender(entity, p_225626_2_, p_225626_3_, p_225626_5_, p_225626_7_))
|
if (!super.shouldRender(entity, p_225626_2_, p_225626_3_, p_225626_5_, p_225626_7_))
|
||||||
return false;
|
return false;
|
||||||
if (entity.getContraption()
|
if (entity.getContraption()
|
||||||
.getType() == AllContraptionTypes.MOUNTED && entity.getRidingEntity() == null)
|
.getType() == ContraptionType.MOUNTED && entity.getRidingEntity() == null)
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
||||||
|
@ -17,7 +16,7 @@ public abstract class TranslatingContraption extends Contraption {
|
||||||
|
|
||||||
public Set<BlockPos> getColliders(World world, Direction movementDirection) {
|
public Set<BlockPos> getColliders(World world, Direction movementDirection) {
|
||||||
if (getBlocks() == null)
|
if (getBlocks() == null)
|
||||||
return Collections.EMPTY_SET;
|
return Collections.emptySet();
|
||||||
if (cachedColliders == null || cachedColliderDirection != movementDirection) {
|
if (cachedColliders == null || cachedColliderDirection != movementDirection) {
|
||||||
cachedColliders = new HashSet<>();
|
cachedColliders = new HashSet<>();
|
||||||
cachedColliderDirection = movementDirection;
|
cachedColliderDirection = movementDirection;
|
||||||
|
@ -48,7 +47,7 @@ public abstract class TranslatingContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAxisBeStabilized(Axis axis) {
|
public boolean canBeStabilized(Direction facing, BlockPos localPos) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,12 @@ package com.simibubi.create.content.contraptions.components.structureMovement.be
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.simibubi.create.AllTags.AllBlockTags;
|
import com.simibubi.create.AllTags.AllBlockTags;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
||||||
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
||||||
|
@ -43,8 +42,8 @@ public class BearingContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AllContraptionTypes getType() {
|
protected ContraptionType getType() {
|
||||||
return AllContraptionTypes.BEARING;
|
return ContraptionType.BEARING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -84,8 +83,10 @@ public class BearingContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAxisBeStabilized(Axis axis) {
|
public boolean canBeStabilized(Direction facing, BlockPos localPos) {
|
||||||
return axis == facing.getAxis();
|
if (facing.getOpposite() == this.facing && BlockPos.ZERO.equals(localPos))
|
||||||
|
return false;
|
||||||
|
return facing.getAxis() == this.facing.getAxis();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,13 +6,12 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
||||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
@ -24,8 +23,8 @@ public class ClockworkContraption extends Contraption {
|
||||||
private Set<BlockPos> ignoreBlocks = new HashSet<>();
|
private Set<BlockPos> ignoreBlocks = new HashSet<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AllContraptionTypes getType() {
|
protected ContraptionType getType() {
|
||||||
return AllContraptionTypes.CLOCKWORK;
|
return ContraptionType.CLOCKWORK;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ignoreBlocks(Set<BlockPos> blocks, BlockPos anchor) {
|
private void ignoreBlocks(Set<BlockPos> blocks, BlockPos anchor) {
|
||||||
|
@ -110,15 +109,17 @@ public class ClockworkContraption extends Contraption {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readNBT(World world, CompoundNBT tag, boolean spawnData) {
|
public void readNBT(World world, CompoundNBT tag, boolean spawnData) {
|
||||||
facing = Direction.byIndex(tag.getInt("Facing"));
|
facing = Direction.byIndex(tag.getInt("facing"));
|
||||||
handType = NBTHelper.readEnum(tag, "HandType", HandType.class);
|
handType = NBTHelper.readEnum(tag, "HandType", HandType.class);
|
||||||
offset = tag.getInt("offset");
|
offset = tag.getInt("offset");
|
||||||
super.readNBT(world, tag, spawnData);
|
super.readNBT(world, tag, spawnData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAxisBeStabilized(Axis axis) {
|
public boolean canBeStabilized(Direction facing, BlockPos localPos) {
|
||||||
return axis == facing.getAxis();
|
if (BlockPos.ZERO.equals(localPos) || BlockPos.ZERO.equals(localPos.offset(facing)))
|
||||||
|
return false;
|
||||||
|
return facing.getAxis() == this.facing.getAxis();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static enum HandType {
|
public static enum HandType {
|
||||||
|
|
|
@ -72,17 +72,6 @@ public class SailBlock extends ProperDirectionalBlock {
|
||||||
return ActionResultType.PASS;
|
return ActionResultType.PASS;
|
||||||
|
|
||||||
offset.placeInWorld(world, ((BlockItem) heldItem.getItem()).getBlock().getDefaultState(), player, heldItem);
|
offset.placeInWorld(world, ((BlockItem) heldItem.getItem()).getBlock().getDefaultState(), player, heldItem);
|
||||||
|
|
||||||
/*BlockState blockState = ((BlockItem) heldItem.getItem()).getBlock()
|
|
||||||
.getDefaultState()
|
|
||||||
.with(FACING, state.get(FACING));
|
|
||||||
BlockPos offsetPos = new BlockPos(offset.getPos());
|
|
||||||
if (!world.isRemote && world.getBlockState(offsetPos).getMaterial().isReplaceable()) {
|
|
||||||
world.setBlockState(offsetPos, blockState);
|
|
||||||
if (!player.isCreative())
|
|
||||||
heldItem.shrink(1);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
return ActionResultType.SUCCESS;
|
return ActionResultType.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour {
|
||||||
AbstractContraptionEntity entity = context.contraption.entity;
|
AbstractContraptionEntity entity = context.contraption.entity;
|
||||||
if (entity instanceof ControlledContraptionEntity) {
|
if (entity instanceof ControlledContraptionEntity) {
|
||||||
ControlledContraptionEntity controlledCE = (ControlledContraptionEntity) entity;
|
ControlledContraptionEntity controlledCE = (ControlledContraptionEntity) entity;
|
||||||
if (controlledCE.getRotationAxis() == axis)
|
if (context.contraption.canBeStabilized(facing, context.localPos))
|
||||||
offset = -controlledCE.getAngle(renderPartialTicks);
|
offset = -controlledCE.getAngle(renderPartialTicks);
|
||||||
|
|
||||||
} else if (entity instanceof OrientedContraptionEntity) {
|
} else if (entity instanceof OrientedContraptionEntity) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement.bearing;
|
package com.simibubi.create.content.contraptions.components.structureMovement.bearing;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.Contraption;
|
||||||
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
@ -37,8 +37,8 @@ public class StabilizedContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AllContraptionTypes getType() {
|
protected ContraptionType getType() {
|
||||||
return AllContraptionTypes.STABILIZED;
|
return ContraptionType.STABILIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,7 +55,7 @@ public class StabilizedContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAxisBeStabilized(Axis axis) {
|
public boolean canBeStabilized(Direction facing, BlockPos localPos) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
|
||||||
|
|
||||||
|
public class GantryContraption extends TranslatingContraption {
|
||||||
|
|
||||||
|
protected Direction facing;
|
||||||
|
|
||||||
|
public GantryContraption() {}
|
||||||
|
|
||||||
|
public GantryContraption(Direction facing) {
|
||||||
|
this.facing = facing;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean assemble(World world, BlockPos pos) {
|
||||||
|
if (!searchMovedStructure(world, pos, null))
|
||||||
|
return false;
|
||||||
|
startMoving(world);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundNBT writeNBT(boolean spawnPacket) {
|
||||||
|
CompoundNBT tag = super.writeNBT(spawnPacket);
|
||||||
|
tag.putInt("Facing", facing.getIndex());
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readNBT(World world, CompoundNBT tag, boolean spawnData) {
|
||||||
|
facing = Direction.byIndex(tag.getInt("Facing"));
|
||||||
|
super.readNBT(world, tag, spawnData);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isAnchoringBlockAt(BlockPos pos) {
|
||||||
|
return super.isAnchoringBlockAt(pos.offset(facing));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ContraptionType getType() {
|
||||||
|
return ContraptionType.GANTRY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Direction getFacing() {
|
||||||
|
return facing;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean shouldUpdateAfterMovement(BlockInfo info) {
|
||||||
|
return super.shouldUpdateAfterMovement(info) && !AllBlocks.GANTRY_PINION.has(info.state);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,203 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllEntityTypes;
|
||||||
|
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.ContraptionCollider;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftTileEntity;
|
||||||
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.fml.network.PacketDistributor;
|
||||||
|
|
||||||
|
public class GantryContraptionEntity extends AbstractContraptionEntity {
|
||||||
|
|
||||||
|
Direction movementAxis;
|
||||||
|
double clientOffsetDiff;
|
||||||
|
double axisMotion;
|
||||||
|
|
||||||
|
public GantryContraptionEntity(EntityType<?> entityTypeIn, World worldIn) {
|
||||||
|
super(entityTypeIn, worldIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GantryContraptionEntity create(World world, Contraption contraption, Direction movementAxis) {
|
||||||
|
GantryContraptionEntity entity = new GantryContraptionEntity(AllEntityTypes.GANTRY_CONTRAPTION.get(), world);
|
||||||
|
entity.setContraption(contraption);
|
||||||
|
entity.movementAxis = movementAxis;
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tickContraption() {
|
||||||
|
if (!(contraption instanceof GantryContraption))
|
||||||
|
return;
|
||||||
|
|
||||||
|
double prevAxisMotion = axisMotion;
|
||||||
|
if (world.isRemote) {
|
||||||
|
clientOffsetDiff *= .75f;
|
||||||
|
updateClientMotion();
|
||||||
|
}
|
||||||
|
|
||||||
|
checkPinionShaft();
|
||||||
|
tickActors();
|
||||||
|
Vec3d movementVec = getMotion();
|
||||||
|
|
||||||
|
if (ContraptionCollider.collideBlocks(this)) {
|
||||||
|
if (!world.isRemote)
|
||||||
|
disassemble();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isStalled() && ticksExisted > 2)
|
||||||
|
move(movementVec.x, movementVec.y, movementVec.z);
|
||||||
|
|
||||||
|
if (!world.isRemote && (prevAxisMotion != axisMotion || ticksExisted % 3 == 0))
|
||||||
|
sendPacket();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void checkPinionShaft() {
|
||||||
|
Vec3d movementVec;
|
||||||
|
Direction facing = ((GantryContraption) contraption).getFacing();
|
||||||
|
Vec3d currentPosition = getAnchorVec().add(.5, .5, .5);
|
||||||
|
BlockPos gantryShaftPos = new BlockPos(currentPosition).offset(facing.getOpposite());
|
||||||
|
|
||||||
|
TileEntity te = world.getTileEntity(gantryShaftPos);
|
||||||
|
if (!(te instanceof GantryShaftTileEntity) || !AllBlocks.GANTRY_SHAFT.has(te.getBlockState())) {
|
||||||
|
if (!world.isRemote) {
|
||||||
|
setContraptionMotion(Vec3d.ZERO);
|
||||||
|
disassemble();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockState blockState = te.getBlockState();
|
||||||
|
Direction direction = blockState.get(GantryShaftBlock.FACING);
|
||||||
|
GantryShaftTileEntity gantryShaftTileEntity = (GantryShaftTileEntity) te;
|
||||||
|
|
||||||
|
float pinionMovementSpeed = gantryShaftTileEntity.getPinionMovementSpeed();
|
||||||
|
movementVec = new Vec3d(direction.getDirectionVec()).scale(pinionMovementSpeed);
|
||||||
|
|
||||||
|
if (blockState.get(GantryShaftBlock.POWERED) || pinionMovementSpeed == 0) {
|
||||||
|
setContraptionMotion(Vec3d.ZERO);
|
||||||
|
if (!world.isRemote)
|
||||||
|
disassemble();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3d nextPosition = currentPosition.add(movementVec);
|
||||||
|
double currentCoord = direction.getAxis()
|
||||||
|
.getCoordinate(currentPosition.x, currentPosition.y, currentPosition.z);
|
||||||
|
double nextCoord = direction.getAxis()
|
||||||
|
.getCoordinate(nextPosition.x, nextPosition.y, nextPosition.z);
|
||||||
|
|
||||||
|
if ((MathHelper.floor(currentCoord) + .5f < nextCoord != (pinionMovementSpeed * direction.getAxisDirection()
|
||||||
|
.getOffset() < 0)))
|
||||||
|
if (!gantryShaftTileEntity.canAssembleOn()) {
|
||||||
|
setContraptionMotion(Vec3d.ZERO);
|
||||||
|
if (!world.isRemote)
|
||||||
|
disassemble();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
|
|
||||||
|
axisMotion = pinionMovementSpeed;
|
||||||
|
setContraptionMotion(movementVec);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void writeAdditional(CompoundNBT compound, boolean spawnPacket) {
|
||||||
|
NBTHelper.writeEnum(compound, "GantryAxis", movementAxis);
|
||||||
|
super.writeAdditional(compound, spawnPacket);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void readAdditional(CompoundNBT compound, boolean spawnData) {
|
||||||
|
movementAxis = NBTHelper.readEnum(compound, "GantryAxis", Direction.class);
|
||||||
|
super.readAdditional(compound, spawnData);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vec3d applyRotation(Vec3d localPos, float partialTicks) {
|
||||||
|
return localPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vec3d reverseRotation(Vec3d localPos, float partialTicks) {
|
||||||
|
return localPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected StructureTransform makeStructureTransform() {
|
||||||
|
return new StructureTransform(new BlockPos(getAnchorVec().add(.5, .5, .5)), 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getStalledAngle() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPositionAndUpdate(double p_70634_1_, double p_70634_3_, double p_70634_5_) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void setPositionAndRotationDirect(double x, double y, double z, float yw, float pt, int inc, boolean t) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleStallInformation(float x, float y, float z, float angle) {
|
||||||
|
setPos(x, y, z);
|
||||||
|
clientOffsetDiff = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContraptionRotationState getRotationState() {
|
||||||
|
return ContraptionRotationState.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateClientMotion() {
|
||||||
|
float modifier = movementAxis.getAxisDirection()
|
||||||
|
.getOffset();
|
||||||
|
setContraptionMotion(new Vec3d(movementAxis.getDirectionVec())
|
||||||
|
.scale((axisMotion + clientOffsetDiff * modifier / 2f) * ServerSpeedProvider.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getAxisCoord() {
|
||||||
|
Vec3d anchorVec = getAnchorVec();
|
||||||
|
return movementAxis.getAxis()
|
||||||
|
.getCoordinate(anchorVec.x, anchorVec.y, anchorVec.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendPacket() {
|
||||||
|
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this),
|
||||||
|
new GantryContraptionUpdatePacket(getEntityId(), getAxisCoord(), axisMotion));
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public static void handlePacket(GantryContraptionUpdatePacket packet) {
|
||||||
|
Entity entity = Minecraft.getInstance().world.getEntityByID(packet.entityID);
|
||||||
|
if (!(entity instanceof GantryContraptionEntity))
|
||||||
|
return;
|
||||||
|
GantryContraptionEntity ce = (GantryContraptionEntity) entity;
|
||||||
|
ce.axisMotion = packet.motion;
|
||||||
|
ce.clientOffsetDiff = packet.coord - ce.getAxisCoord();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntityRenderer;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||||
|
|
||||||
|
public class GantryContraptionEntityRenderer extends AbstractContraptionEntityRenderer<GantryContraptionEntity> {
|
||||||
|
|
||||||
|
public GantryContraptionEntityRenderer(EntityRendererManager p_i46179_1_) {
|
||||||
|
super(p_i46179_1_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void transform(GantryContraptionEntity contraptionEntity, float partialTicks,
|
||||||
|
MatrixStack[] matrixStacks) {}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
|
public class GantryContraptionUpdatePacket extends SimplePacketBase {
|
||||||
|
|
||||||
|
int entityID;
|
||||||
|
double coord;
|
||||||
|
double motion;
|
||||||
|
|
||||||
|
public GantryContraptionUpdatePacket(int entityID, double coord, double motion) {
|
||||||
|
this.entityID = entityID;
|
||||||
|
this.coord = coord;
|
||||||
|
this.motion = motion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GantryContraptionUpdatePacket(PacketBuffer buffer) {
|
||||||
|
entityID = buffer.readInt();
|
||||||
|
coord = buffer.readFloat();
|
||||||
|
motion = buffer.readFloat();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(PacketBuffer buffer) {
|
||||||
|
buffer.writeInt(entityID);
|
||||||
|
buffer.writeFloat((float) coord);
|
||||||
|
buffer.writeFloat((float) motion);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(Supplier<Context> context) {
|
||||||
|
context.get()
|
||||||
|
.enqueueWork(
|
||||||
|
() -> DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> GantryContraptionEntity.handlePacket(this)));
|
||||||
|
context.get()
|
||||||
|
.setPacketHandled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,142 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftBlock;
|
||||||
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.ActionResultType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.IWorld;
|
||||||
|
import net.minecraft.world.IWorldReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class GantryPinionBlock extends DirectionalAxisKineticBlock implements ITE<GantryPinionTileEntity> {
|
||||||
|
|
||||||
|
public GantryPinionBlock(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) {
|
||||||
|
Direction direction = state.get(FACING);
|
||||||
|
BlockState shaft = world.getBlockState(pos.offset(direction.getOpposite()));
|
||||||
|
return AllBlocks.GANTRY_SHAFT.has(shaft) && shaft.get(GantryShaftBlock.FACING)
|
||||||
|
.getAxis() != direction.getAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateNeighbors(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags) {
|
||||||
|
super.updateNeighbors(stateIn, worldIn, pos, flags);
|
||||||
|
withTileEntityDo(worldIn, pos, GantryPinionTileEntity::checkValidGantryShaft);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||||
|
super.onBlockAdded(state, worldIn, pos, oldState, isMoving);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return AllTileEntities.GANTRY_PINION.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Direction getFacingForPlacement(BlockItemUseContext context) {
|
||||||
|
return context.getFace();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn,
|
||||||
|
BlockRayTraceResult hit) {
|
||||||
|
if (!player.isAllowEdit() || player.isSneaking())
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
if (player.getHeldItem(handIn)
|
||||||
|
.isEmpty()) {
|
||||||
|
withTileEntityDo(worldIn, pos, te -> te.checkValidGantryShaft());
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
}
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
|
BlockState stateForPlacement = super.getStateForPlacement(context);
|
||||||
|
Direction opposite = stateForPlacement.get(FACING)
|
||||||
|
.getOpposite();
|
||||||
|
return cycleAxisIfNecessary(stateForPlacement, opposite, context.getWorld()
|
||||||
|
.getBlockState(context.getPos()
|
||||||
|
.offset(opposite)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState state, World world, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_,
|
||||||
|
boolean p_220069_6_) {
|
||||||
|
if (!isValidPosition(state, world, pos))
|
||||||
|
world.destroyBlock(pos, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState otherState, IWorld world,
|
||||||
|
BlockPos pos, BlockPos p_196271_6_) {
|
||||||
|
if (state.get(FACING) != direction.getOpposite())
|
||||||
|
return state;
|
||||||
|
return cycleAxisIfNecessary(state, direction, otherState);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected BlockState cycleAxisIfNecessary(BlockState state, Direction direction, BlockState otherState) {
|
||||||
|
if (!AllBlocks.GANTRY_SHAFT.has(otherState))
|
||||||
|
return state;
|
||||||
|
if (otherState.get(GantryShaftBlock.FACING)
|
||||||
|
.getAxis() == direction.getAxis())
|
||||||
|
return state;
|
||||||
|
if (isValidGantryShaftAxis(state, otherState))
|
||||||
|
return state;
|
||||||
|
return state.cycle(AXIS_ALONG_FIRST_COORDINATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isValidGantryShaftAxis(BlockState pinionState, BlockState gantryState) {
|
||||||
|
return getValidGantryShaftAxis(pinionState) == gantryState.get(GantryShaftBlock.FACING)
|
||||||
|
.getAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Axis getValidGantryShaftAxis(BlockState state) {
|
||||||
|
if (!(state.getBlock() instanceof GantryPinionBlock))
|
||||||
|
return Axis.Y;
|
||||||
|
IRotate block = (IRotate) state.getBlock();
|
||||||
|
Axis rotationAxis = block.getRotationAxis(state);
|
||||||
|
Axis facingAxis = state.get(FACING)
|
||||||
|
.getAxis();
|
||||||
|
for (Axis axis : Iterate.axes)
|
||||||
|
if (axis != rotationAxis && axis != facingAxis)
|
||||||
|
return axis;
|
||||||
|
return Axis.Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Axis getValidGantryPinionAxis(BlockState state, Axis shaftAxis) {
|
||||||
|
Axis facingAxis = state.get(FACING)
|
||||||
|
.getAxis();
|
||||||
|
for (Axis axis : Iterate.axes)
|
||||||
|
if (axis != shaftAxis && axis != facingAxis)
|
||||||
|
return axis;
|
||||||
|
return Axis.Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<GantryPinionTileEntity> getTileEntityClass() {
|
||||||
|
return GantryPinionTileEntity.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.Vector3f;
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.Direction.AxisDirection;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
|
public class GantryPinionRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
|
public GantryPinionRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
|
super(dispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
|
int light, int overlay) {
|
||||||
|
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
|
||||||
|
BlockState state = te.getBlockState();
|
||||||
|
Direction facing = state.get(GantryPinionBlock.FACING);
|
||||||
|
Boolean alongFirst = state.get(GantryPinionBlock.AXIS_ALONG_FIRST_COORDINATE);
|
||||||
|
Axis rotationAxis = getRotationAxisOf(te);
|
||||||
|
BlockPos visualPos = facing.getAxisDirection() == AxisDirection.POSITIVE ? te.getPos()
|
||||||
|
: te.getPos()
|
||||||
|
.offset(facing.getOpposite());
|
||||||
|
float angleForTe = getAngleForTe(te, visualPos, rotationAxis);
|
||||||
|
|
||||||
|
Axis gantryAxis = Axis.X;
|
||||||
|
for (Axis axis : Iterate.axes)
|
||||||
|
if (axis != rotationAxis && axis != facing.getAxis())
|
||||||
|
gantryAxis = axis;
|
||||||
|
|
||||||
|
if (gantryAxis == Axis.Z)
|
||||||
|
if (facing == Direction.DOWN)
|
||||||
|
angleForTe *= -1;
|
||||||
|
if (gantryAxis == Axis.Y)
|
||||||
|
if (facing == Direction.NORTH || facing == Direction.EAST)
|
||||||
|
angleForTe *= -1;
|
||||||
|
|
||||||
|
ms.push();
|
||||||
|
|
||||||
|
MatrixStacker msr = MatrixStacker.of(ms);
|
||||||
|
|
||||||
|
msr.centre()
|
||||||
|
.rotateY(AngleHelper.horizontalAngle(facing))
|
||||||
|
.rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90)
|
||||||
|
.rotateY(alongFirst ^ facing.getAxis() == Axis.Z ? 90 : 0);
|
||||||
|
|
||||||
|
ms.translate(0, -9 / 16f, 0);
|
||||||
|
ms.multiply(Vector3f.POSITIVE_X.getRadialQuaternion(-angleForTe / 2f));
|
||||||
|
ms.translate(0, 9 / 16f, 0);
|
||||||
|
|
||||||
|
msr.unCentre();
|
||||||
|
AllBlockPartials.GANTRY_COGS.renderOn(state)
|
||||||
|
.light(light)
|
||||||
|
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
|
||||||
|
|
||||||
|
ms.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
||||||
|
return shaft(getRotationAxisOf(te));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,138 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.gantry;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.BlockStateProperties.FACING;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.GantryShaftTileEntity;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
|
public class GantryPinionTileEntity extends KineticTileEntity {
|
||||||
|
|
||||||
|
boolean assembleNextTick;
|
||||||
|
|
||||||
|
public GantryPinionTileEntity(TileEntityType<?> typeIn) {
|
||||||
|
super(typeIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSpeedChanged(float previousSpeed) {
|
||||||
|
super.onSpeedChanged(previousSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkValidGantryShaft() {
|
||||||
|
if (shouldAssemble())
|
||||||
|
queueAssembly();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void queueAssembly() {
|
||||||
|
assembleNextTick = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (assembleNextTick) {
|
||||||
|
tryAssemble();
|
||||||
|
assembleNextTick = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tryAssemble() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!(blockState.getBlock() instanceof GantryPinionBlock))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Direction direction = blockState.get(FACING);
|
||||||
|
GantryContraption contraption = new GantryContraption(direction);
|
||||||
|
|
||||||
|
TileEntity shaftTe = world.getTileEntity(pos.offset(direction.getOpposite()));
|
||||||
|
if (!(shaftTe instanceof GantryShaftTileEntity))
|
||||||
|
return;
|
||||||
|
BlockState shaftState = shaftTe.getBlockState();
|
||||||
|
if (!AllBlocks.GANTRY_SHAFT.has(shaftState))
|
||||||
|
return;
|
||||||
|
|
||||||
|
float pinionMovementSpeed = ((GantryShaftTileEntity) shaftTe).getPinionMovementSpeed();
|
||||||
|
Direction shaftOrientation = shaftState.get(GantryShaftBlock.FACING);
|
||||||
|
Direction movementDirection = shaftOrientation;
|
||||||
|
if (pinionMovementSpeed < 0)
|
||||||
|
movementDirection = movementDirection.getOpposite();
|
||||||
|
|
||||||
|
if (!contraption.assemble(world, pos))
|
||||||
|
return;
|
||||||
|
if (ContraptionCollider.isCollidingWithWorld(world, contraption, pos.offset(movementDirection),
|
||||||
|
movementDirection))
|
||||||
|
return;
|
||||||
|
|
||||||
|
contraption.removeBlocksFromWorld(world, BlockPos.ZERO);
|
||||||
|
GantryContraptionEntity movedContraption =
|
||||||
|
GantryContraptionEntity.create(world, contraption, shaftOrientation);
|
||||||
|
BlockPos anchor = pos;
|
||||||
|
movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ());
|
||||||
|
world.addEntity(movedContraption);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float propagateRotationTo(KineticTileEntity target, BlockState stateFrom, BlockState stateTo, BlockPos diff,
|
||||||
|
boolean connectedViaAxes, boolean connectedViaCogs) {
|
||||||
|
float defaultModifier =
|
||||||
|
super.propagateRotationTo(target, stateFrom, stateTo, diff, connectedViaAxes, connectedViaCogs);
|
||||||
|
|
||||||
|
if (connectedViaAxes)
|
||||||
|
return defaultModifier;
|
||||||
|
if (!AllBlocks.GANTRY_SHAFT.has(stateTo))
|
||||||
|
return defaultModifier;
|
||||||
|
if (!stateTo.get(GantryShaftBlock.POWERED))
|
||||||
|
return defaultModifier;
|
||||||
|
|
||||||
|
Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ());
|
||||||
|
if (stateFrom.get(GantryPinionBlock.FACING) != direction.getOpposite())
|
||||||
|
return defaultModifier;
|
||||||
|
return getGantryPinionModifier(stateTo.get(GantryShaftBlock.FACING), stateFrom.get(GantryPinionBlock.FACING));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float getGantryPinionModifier(Direction shaft, Direction pinionDirection) {
|
||||||
|
Axis shaftAxis = shaft.getAxis();
|
||||||
|
float directionModifier = shaft.getAxisDirection()
|
||||||
|
.getOffset();
|
||||||
|
if (shaftAxis == Axis.Y)
|
||||||
|
if (pinionDirection == Direction.NORTH || pinionDirection == Direction.EAST)
|
||||||
|
return -directionModifier;
|
||||||
|
if (shaftAxis == Axis.X)
|
||||||
|
if (pinionDirection == Direction.DOWN || pinionDirection == Direction.SOUTH)
|
||||||
|
return -directionModifier;
|
||||||
|
if (shaftAxis == Axis.Z)
|
||||||
|
if (pinionDirection == Direction.UP || pinionDirection == Direction.WEST)
|
||||||
|
return -directionModifier;
|
||||||
|
return directionModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean shouldAssemble() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!(blockState.getBlock() instanceof GantryPinionBlock))
|
||||||
|
return false;
|
||||||
|
Direction facing = blockState.get(GantryPinionBlock.FACING)
|
||||||
|
.getOpposite();
|
||||||
|
BlockState shaftState = world.getBlockState(pos.offset(facing));
|
||||||
|
if (!(shaftState.getBlock() instanceof GantryShaftBlock))
|
||||||
|
return false;
|
||||||
|
if (shaftState.get(GantryShaftBlock.POWERED))
|
||||||
|
return false;
|
||||||
|
TileEntity te = world.getTileEntity(pos.offset(facing));
|
||||||
|
return te instanceof GantryShaftTileEntity && ((GantryShaftTileEntity) te).canAssembleOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ import java.util.List;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
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.mounted.CartAssemblerTileEntity.CartMovementMode;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
@ -47,8 +47,8 @@ public class MountedContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AllContraptionTypes getType() {
|
protected ContraptionType getType() {
|
||||||
return AllContraptionTypes.MOUNTED;
|
return ContraptionType.MOUNTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -149,7 +149,7 @@ public class MountedContraption extends Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAxisBeStabilized(Axis axis) {
|
public boolean canBeStabilized(Direction facing, BlockPos localPos) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -247,7 +247,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getMovementSpeed() {
|
public float getMovementSpeed() {
|
||||||
float movementSpeed = getSpeed() / 512f + clientOffsetDiff / 2f;
|
float movementSpeed = MathHelper.clamp(getSpeed() / 512f, -.49f, .49f) + clientOffsetDiff / 2f;
|
||||||
if (world.isRemote)
|
if (world.isRemote)
|
||||||
movementSpeed *= ServerSpeedProvider.get();
|
movementSpeed *= ServerSpeedProvider.get();
|
||||||
return movementSpeed;
|
return movementSpeed;
|
||||||
|
|
|
@ -112,7 +112,7 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getMovementSpeed() {
|
public float getMovementSpeed() {
|
||||||
float movementSpeed = getSpeed() / 512f;
|
float movementSpeed = MathHelper.clamp(getSpeed() / 512f, -.49f, .49f);
|
||||||
if (world.isRemote)
|
if (world.isRemote)
|
||||||
movementSpeed *= ServerSpeedProvider.get();
|
movementSpeed *= ServerSpeedProvider.get();
|
||||||
Direction pistonDirection = getBlockState().get(BlockStateProperties.FACING);
|
Direction pistonDirection = getBlockState().get(BlockStateProperties.FACING);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement.piston;
|
package com.simibubi.create.content.contraptions.components.structureMovement.piston;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits;
|
import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.*;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.*;
|
||||||
|
@ -8,6 +8,7 @@ import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.CarpetBlock;
|
import net.minecraft.block.CarpetBlock;
|
||||||
|
import net.minecraft.block.material.PushReaction;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.state.properties.PistonType;
|
import net.minecraft.state.properties.PistonType;
|
||||||
|
@ -38,8 +39,8 @@ public class PistonContraption extends TranslatingContraption {
|
||||||
private boolean retract;
|
private boolean retract;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AllContraptionTypes getType() {
|
protected ContraptionType getType() {
|
||||||
return AllContraptionTypes.PISTON;
|
return ContraptionType.PISTON;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PistonContraption() {}
|
public PistonContraption() {}
|
||||||
|
@ -164,6 +165,8 @@ public class PistonContraption extends TranslatingContraption {
|
||||||
return true;
|
return true;
|
||||||
if (!BlockMovementTraits.movementAllowed(world, currentPos))
|
if (!BlockMovementTraits.movementAllowed(world, currentPos))
|
||||||
return retracting;
|
return retracting;
|
||||||
|
if (retracting && state.getPushReaction() == PushReaction.PUSH_ONLY)
|
||||||
|
return true;
|
||||||
frontier.add(currentPos);
|
frontier.add(currentPos);
|
||||||
if (BlockMovementTraits.notSupportive(state, orientation))
|
if (BlockMovementTraits.notSupportive(state, orientation))
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement.pulley;
|
package com.simibubi.create.content.contraptions.components.structureMovement.pulley;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption;
|
||||||
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
@ -12,8 +12,8 @@ public class PulleyContraption extends TranslatingContraption {
|
||||||
int initialOffset;
|
int initialOffset;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AllContraptionTypes getType() {
|
protected ContraptionType getType() {
|
||||||
return AllContraptionTypes.PULLEY;
|
return ContraptionType.PULLEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PulleyContraption() {}
|
public PulleyContraption() {}
|
||||||
|
|
|
@ -48,6 +48,17 @@ public class PulleyTileEntity extends LinearActuatorTileEntity {
|
||||||
return;
|
return;
|
||||||
if (speed == 0)
|
if (speed == 0)
|
||||||
return;
|
return;
|
||||||
|
int maxLength = AllConfigs.SERVER.kinetics.maxRopeLength.get();
|
||||||
|
int i = 1;
|
||||||
|
while (i <= maxLength) {
|
||||||
|
BlockPos ropePos = pos.down(i);
|
||||||
|
BlockState ropeState = world.getBlockState(ropePos);
|
||||||
|
if (!AllBlocks.ROPE.has(ropeState) && !AllBlocks.PULLEY_MAGNET.has(ropeState)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
offset = i - 1;
|
||||||
if (offset >= getExtensionRange() && getSpeed() > 0)
|
if (offset >= getExtensionRange() && getSpeed() > 0)
|
||||||
return;
|
return;
|
||||||
if (offset <= 0 && getSpeed() < 0)
|
if (offset <= 0 && getSpeed() < 0)
|
||||||
|
@ -70,7 +81,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity {
|
||||||
if (!canAssembleStructure && getSpeed() > 0)
|
if (!canAssembleStructure && getSpeed() > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i = ((int) offset); i > 0; i--) {
|
for (i = ((int) offset); i > 0; i--) {
|
||||||
BlockPos offset = pos.down(i);
|
BlockPos offset = pos.down(i);
|
||||||
BlockState oldState = world.getBlockState(offset);
|
BlockState oldState = world.getBlockState(offset);
|
||||||
if (oldState.getBlock() instanceof IWaterLoggable && oldState.has(BlockStateProperties.WATERLOGGED)
|
if (oldState.getBlock() instanceof IWaterLoggable && oldState.has(BlockStateProperties.WATERLOGGED)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Abs
|
||||||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
|
@ -45,22 +46,26 @@ public class ContraptionInteractionPacket extends SimplePacketBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(Supplier<Context> context) {
|
public void handle(Supplier<Context> context) {
|
||||||
context.get()
|
context.get().enqueueWork(() -> {
|
||||||
.enqueueWork(() -> {
|
ServerPlayerEntity sender = context.get().getSender();
|
||||||
ServerPlayerEntity sender = context.get()
|
|
||||||
.getSender();
|
|
||||||
if (sender == null)
|
if (sender == null)
|
||||||
return;
|
return;
|
||||||
Entity entityByID = sender.getServerWorld()
|
Entity entityByID = sender.getServerWorld().getEntityByID(target);
|
||||||
.getEntityByID(target);
|
|
||||||
if (!(entityByID instanceof AbstractContraptionEntity))
|
if (!(entityByID instanceof AbstractContraptionEntity))
|
||||||
return;
|
return;
|
||||||
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
|
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
|
||||||
|
double d = sender.getAttribute(PlayerEntity.REACH_DISTANCE).getValue();
|
||||||
|
if (!sender.canEntityBeSeen(entityByID))
|
||||||
|
d -= 3;
|
||||||
|
d *= d;
|
||||||
|
if (sender.getDistanceSq(entityByID) > d) {
|
||||||
|
// TODO log?
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (contraptionEntity.handlePlayerInteraction(sender, localPos, face, interactionHand))
|
if (contraptionEntity.handlePlayerInteraction(sender, localPos, face, interactionHand))
|
||||||
sender.swingHand(interactionHand, true);
|
sender.swingHand(interactionHand, true);
|
||||||
});
|
});
|
||||||
context.get()
|
context.get().setPacketHandled(true);
|
||||||
.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,9 +21,7 @@ import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.PotionItem;
|
import net.minecraft.item.PotionItem;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.particles.BlockParticleData;
|
|
||||||
import net.minecraft.particles.IParticleData;
|
import net.minecraft.particles.IParticleData;
|
||||||
import net.minecraft.particles.ParticleTypes;
|
|
||||||
import net.minecraft.potion.PotionUtils;
|
import net.minecraft.potion.PotionUtils;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
|
|
|
@ -0,0 +1,294 @@
|
||||||
|
package com.simibubi.create.content.contraptions.relays.advanced;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllShapes;
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.IPlacementHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.PlacementHelpers;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.PlacementOffset;
|
||||||
|
import com.simibubi.create.foundation.utility.placement.util.PoleHelper;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockRenderType;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.BlockItem;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.ItemUseContext;
|
||||||
|
import net.minecraft.state.BooleanProperty;
|
||||||
|
import net.minecraft.state.EnumProperty;
|
||||||
|
import net.minecraft.state.IProperty;
|
||||||
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.ActionResultType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
|
import net.minecraft.util.IStringSerializable;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.IWorld;
|
||||||
|
import net.minecraft.world.IWorldReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class GantryShaftBlock extends DirectionalKineticBlock {
|
||||||
|
|
||||||
|
public static final IProperty<Part> PART = EnumProperty.create("part", Part.class);
|
||||||
|
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||||
|
|
||||||
|
private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper());
|
||||||
|
|
||||||
|
public enum Part implements IStringSerializable {
|
||||||
|
START, MIDDLE, END, SINGLE;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return Lang.asId(name());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||||
|
super.fillStateContainer(builder.add(PART, POWERED));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||||
|
BlockRayTraceResult ray) {
|
||||||
|
ItemStack heldItem = player.getHeldItem(hand);
|
||||||
|
|
||||||
|
IPlacementHelper placementHelper = PlacementHelpers.get(placementHelperId);
|
||||||
|
if (!placementHelper.matchesItem(heldItem))
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
|
||||||
|
PlacementOffset offset = placementHelper.getOffset(world, state, pos, ray);
|
||||||
|
|
||||||
|
if (!offset.isReplaceable(world))
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
|
||||||
|
offset.placeInWorld(world, ((BlockItem) heldItem.getItem()).getBlock()
|
||||||
|
.getDefaultState(), player, heldItem);
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||||
|
ISelectionContext p_220053_4_) {
|
||||||
|
return AllShapes.EIGHT_VOXEL_POLE.get(state.get(FACING)
|
||||||
|
.getAxis());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockRenderType getRenderType(BlockState state) {
|
||||||
|
return BlockRenderType.ENTITYBLOCK_ANIMATED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world,
|
||||||
|
BlockPos pos, BlockPos neighbourPos) {
|
||||||
|
Direction facing = state.get(FACING);
|
||||||
|
Axis axis = facing.getAxis();
|
||||||
|
if (direction.getAxis() != axis)
|
||||||
|
return state;
|
||||||
|
boolean connect = AllBlocks.GANTRY_SHAFT.has(neighbour) && neighbour.get(FACING) == facing;
|
||||||
|
|
||||||
|
Part part = state.get(PART);
|
||||||
|
if (direction.getAxisDirection() == facing.getAxisDirection()) {
|
||||||
|
if (connect) {
|
||||||
|
if (part == Part.END)
|
||||||
|
part = Part.MIDDLE;
|
||||||
|
if (part == Part.SINGLE)
|
||||||
|
part = Part.START;
|
||||||
|
} else {
|
||||||
|
if (part == Part.MIDDLE)
|
||||||
|
part = Part.END;
|
||||||
|
if (part == Part.START)
|
||||||
|
part = Part.SINGLE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (connect) {
|
||||||
|
if (part == Part.START)
|
||||||
|
part = Part.MIDDLE;
|
||||||
|
if (part == Part.SINGLE)
|
||||||
|
part = Part.END;
|
||||||
|
} else {
|
||||||
|
if (part == Part.MIDDLE)
|
||||||
|
part = Part.START;
|
||||||
|
if (part == Part.END)
|
||||||
|
part = Part.SINGLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return state.with(PART, part);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GantryShaftBlock(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
setDefaultState(getDefaultState().with(POWERED, false)
|
||||||
|
.with(PART, Part.SINGLE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
|
BlockState state = super.getStateForPlacement(context);
|
||||||
|
BlockPos pos = context.getPos();
|
||||||
|
World world = context.getWorld();
|
||||||
|
Direction face = context.getFace();
|
||||||
|
|
||||||
|
BlockState neighbour = world.getBlockState(pos.offset(state.get(FACING)
|
||||||
|
.getOpposite()));
|
||||||
|
|
||||||
|
BlockState clickedState =
|
||||||
|
AllBlocks.GANTRY_SHAFT.has(neighbour) ? neighbour : world.getBlockState(pos.offset(face.getOpposite()));
|
||||||
|
|
||||||
|
if (AllBlocks.GANTRY_SHAFT.has(clickedState) && clickedState.get(FACING)
|
||||||
|
.getAxis() == state.get(FACING)
|
||||||
|
.getAxis()) {
|
||||||
|
Direction facing = clickedState.get(FACING);
|
||||||
|
state = state.with(FACING, context.getPlayer() == null || !context.getPlayer()
|
||||||
|
.isSneaking() ? facing : facing.getOpposite());
|
||||||
|
}
|
||||||
|
|
||||||
|
return state.with(POWERED, shouldBePowered(state, world, pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||||
|
ActionResultType onWrenched = super.onWrenched(state, context);
|
||||||
|
if (onWrenched.isAccepted()) {
|
||||||
|
BlockPos pos = context.getPos();
|
||||||
|
World world = context.getWorld();
|
||||||
|
neighborChanged(world.getBlockState(pos), world, pos, state.getBlock(), pos, false);
|
||||||
|
}
|
||||||
|
return onWrenched;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_,
|
||||||
|
boolean p_220069_6_) {
|
||||||
|
if (worldIn.isRemote)
|
||||||
|
return;
|
||||||
|
boolean previouslyPowered = state.get(POWERED);
|
||||||
|
boolean shouldPower = worldIn.isBlockPowered(pos); // shouldBePowered(state, worldIn, pos);
|
||||||
|
|
||||||
|
if (!previouslyPowered && !shouldPower && shouldBePowered(state, worldIn, pos)) {
|
||||||
|
worldIn.setBlockState(pos, state.with(POWERED, true), 3);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (previouslyPowered == shouldPower)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Collect affected gantry shafts
|
||||||
|
List<BlockPos> toUpdate = new ArrayList<>();
|
||||||
|
Direction facing = state.get(FACING);
|
||||||
|
Axis axis = facing.getAxis();
|
||||||
|
for (Direction d : Iterate.directionsInAxis(axis)) {
|
||||||
|
BlockPos currentPos = pos.offset(d);
|
||||||
|
while (true) {
|
||||||
|
if (!worldIn.isBlockPresent(currentPos))
|
||||||
|
break;
|
||||||
|
BlockState currentState = worldIn.getBlockState(currentPos);
|
||||||
|
if (!(currentState.getBlock() instanceof GantryShaftBlock))
|
||||||
|
break;
|
||||||
|
if (currentState.get(FACING) != facing)
|
||||||
|
break;
|
||||||
|
if (!shouldPower && currentState.get(POWERED) && worldIn.isBlockPowered(currentPos))
|
||||||
|
return;
|
||||||
|
if (currentState.get(POWERED) == shouldPower)
|
||||||
|
break;
|
||||||
|
toUpdate.add(currentPos);
|
||||||
|
currentPos = currentPos.offset(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toUpdate.add(pos);
|
||||||
|
for (BlockPos blockPos : toUpdate) {
|
||||||
|
BlockState blockState = worldIn.getBlockState(blockPos);
|
||||||
|
TileEntity te = worldIn.getTileEntity(blockPos);
|
||||||
|
if (te instanceof KineticTileEntity)
|
||||||
|
((KineticTileEntity) te).detachKinetics();
|
||||||
|
if (blockState.getBlock() instanceof GantryShaftBlock)
|
||||||
|
worldIn.setBlockState(blockPos, blockState.with(POWERED, shouldPower), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean shouldBePowered(BlockState state, World worldIn, BlockPos pos) {
|
||||||
|
boolean shouldPower = worldIn.isBlockPowered(pos);
|
||||||
|
|
||||||
|
Direction facing = state.get(FACING);
|
||||||
|
for (Direction d : Iterate.directionsInAxis(facing.getAxis())) {
|
||||||
|
BlockPos neighbourPos = pos.offset(d);
|
||||||
|
if (!worldIn.isBlockPresent(neighbourPos))
|
||||||
|
continue;
|
||||||
|
BlockState neighbourState = worldIn.getBlockState(neighbourPos);
|
||||||
|
if (!(neighbourState.getBlock() instanceof GantryShaftBlock))
|
||||||
|
continue;
|
||||||
|
if (neighbourState.get(FACING) != facing)
|
||||||
|
continue;
|
||||||
|
shouldPower |= neighbourState.get(POWERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return shouldPower;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
||||||
|
return face.getAxis() == state.get(FACING)
|
||||||
|
.getAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Axis getRotationAxis(BlockState state) {
|
||||||
|
return state.get(FACING)
|
||||||
|
.getAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return AllTileEntities.GANTRY_SHAFT.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||||
|
return super.areStatesKineticallyEquivalent(oldState, newState)
|
||||||
|
&& oldState.get(POWERED) == newState.get(POWERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PlacementHelper extends PoleHelper<Direction> {
|
||||||
|
|
||||||
|
public PlacementHelper() {
|
||||||
|
super(AllBlocks.GANTRY_SHAFT::has, s -> s.get(FACING)
|
||||||
|
.getAxis(), FACING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Predicate<ItemStack> getItemPredicate() {
|
||||||
|
return AllBlocks.GANTRY_SHAFT::isIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PlacementOffset getOffset(World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) {
|
||||||
|
PlacementOffset offset = super.getOffset(world, state, pos, ray);
|
||||||
|
if (!offset.isSuccessful())
|
||||||
|
return offset;
|
||||||
|
return PlacementOffset.success(offset.getPos(), offset.getTransform()
|
||||||
|
.andThen(s -> s.with(POWERED, state.get(POWERED))));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
package com.simibubi.create.content.contraptions.relays.advanced;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionTileEntity;
|
||||||
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
|
public class GantryShaftTileEntity extends KineticTileEntity {
|
||||||
|
|
||||||
|
public GantryShaftTileEntity(TileEntityType<?> typeIn) {
|
||||||
|
super(typeIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSpeedChanged(float previousSpeed) {
|
||||||
|
super.onSpeedChanged(previousSpeed);
|
||||||
|
|
||||||
|
if (!canAssembleOn())
|
||||||
|
return;
|
||||||
|
for (Direction d : Iterate.directions) {
|
||||||
|
if (d.getAxis() == getBlockState().get(GantryShaftBlock.FACING)
|
||||||
|
.getAxis())
|
||||||
|
continue;
|
||||||
|
BlockPos offset = pos.offset(d);
|
||||||
|
BlockState pinionState = world.getBlockState(offset);
|
||||||
|
if (!AllBlocks.GANTRY_PINION.has(pinionState))
|
||||||
|
continue;
|
||||||
|
if (pinionState.get(GantryPinionBlock.FACING) != d)
|
||||||
|
continue;
|
||||||
|
TileEntity tileEntity = world.getTileEntity(offset);
|
||||||
|
if (tileEntity instanceof GantryPinionTileEntity)
|
||||||
|
((GantryPinionTileEntity) tileEntity).queueAssembly();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float propagateRotationTo(KineticTileEntity target, BlockState stateFrom, BlockState stateTo, BlockPos diff,
|
||||||
|
boolean connectedViaAxes, boolean connectedViaCogs) {
|
||||||
|
float defaultModifier =
|
||||||
|
super.propagateRotationTo(target, stateFrom, stateTo, diff, connectedViaAxes, connectedViaCogs);
|
||||||
|
|
||||||
|
if (connectedViaAxes)
|
||||||
|
return defaultModifier;
|
||||||
|
if (!stateFrom.get(GantryShaftBlock.POWERED))
|
||||||
|
return defaultModifier;
|
||||||
|
if (!AllBlocks.GANTRY_PINION.has(stateTo))
|
||||||
|
return defaultModifier;
|
||||||
|
|
||||||
|
Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ());
|
||||||
|
if (stateTo.get(GantryPinionBlock.FACING) != direction)
|
||||||
|
return defaultModifier;
|
||||||
|
return GantryPinionTileEntity.getGantryPinionModifier(stateFrom.get(GantryShaftBlock.FACING),
|
||||||
|
stateTo.get(GantryPinionBlock.FACING));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCustomConnection(KineticTileEntity other, BlockState state, BlockState otherState) {
|
||||||
|
if (!AllBlocks.GANTRY_PINION.has(otherState))
|
||||||
|
return false;
|
||||||
|
final BlockPos diff = other.getPos()
|
||||||
|
.subtract(pos);
|
||||||
|
Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ());
|
||||||
|
return otherState.get(GantryPinionBlock.FACING) == direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canAssembleOn() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!AllBlocks.GANTRY_SHAFT.has(blockState))
|
||||||
|
return false;
|
||||||
|
if (blockState.get(GantryShaftBlock.POWERED))
|
||||||
|
return false;
|
||||||
|
float speed = getPinionMovementSpeed();
|
||||||
|
|
||||||
|
switch (blockState.get(GantryShaftBlock.PART)) {
|
||||||
|
case END:
|
||||||
|
return speed < 0;
|
||||||
|
case MIDDLE:
|
||||||
|
return speed != 0;
|
||||||
|
case START:
|
||||||
|
return speed > 0;
|
||||||
|
case SINGLE:
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getPinionMovementSpeed() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!AllBlocks.GANTRY_SHAFT.has(blockState))
|
||||||
|
return 0;
|
||||||
|
return MathHelper.clamp(-getSpeed() / 512f, -.49f, .49f);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,16 +1,21 @@
|
||||||
package com.simibubi.create.content.contraptions.relays.advanced;
|
package com.simibubi.create.content.contraptions.relays.advanced;
|
||||||
|
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllShapes;
|
import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.AllTileEntities;
|
import com.simibubi.create.AllTileEntities;
|
||||||
import com.simibubi.create.content.contraptions.base.HorizontalAxisKineticBlock;
|
import com.simibubi.create.content.contraptions.base.HorizontalAxisKineticBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.CogwheelBlockItem;
|
import com.simibubi.create.content.contraptions.relays.elementary.CogwheelBlockItem;
|
||||||
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import com.simibubi.create.foundation.utility.placement.IPlacementHelper;
|
import com.simibubi.create.foundation.utility.placement.IPlacementHelper;
|
||||||
import com.simibubi.create.foundation.utility.placement.PlacementHelpers;
|
import com.simibubi.create.foundation.utility.placement.PlacementHelpers;
|
||||||
import com.simibubi.create.foundation.utility.placement.PlacementOffset;
|
import com.simibubi.create.foundation.utility.placement.PlacementOffset;
|
||||||
|
|
||||||
import mcp.MethodsReturnNonnullByDefault;
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
@ -27,9 +32,7 @@ import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
import java.util.function.Predicate;
|
public class SpeedControllerBlock extends HorizontalAxisKineticBlock implements ITE<SpeedControllerTileEntity> {
|
||||||
|
|
||||||
public class SpeedControllerBlock extends HorizontalAxisKineticBlock {
|
|
||||||
|
|
||||||
private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper());
|
private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper());
|
||||||
|
|
||||||
|
@ -44,14 +47,25 @@ public class SpeedControllerBlock extends HorizontalAxisKineticBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
BlockState above = context.getWorld().getBlockState(context.getPos().up());
|
BlockState above = context.getWorld()
|
||||||
if (CogWheelBlock.isLargeCog(above) && above.get(CogWheelBlock.AXIS).isHorizontal())
|
.getBlockState(context.getPos()
|
||||||
|
.up());
|
||||||
|
if (CogWheelBlock.isLargeCog(above) && above.get(CogWheelBlock.AXIS)
|
||||||
|
.isHorizontal())
|
||||||
return getDefaultState().with(HORIZONTAL_AXIS, above.get(CogWheelBlock.AXIS) == Axis.X ? Axis.Z : Axis.X);
|
return getDefaultState().with(HORIZONTAL_AXIS, above.get(CogWheelBlock.AXIS) == Axis.X ? Axis.Z : Axis.X);
|
||||||
return super.getStateForPlacement(context);
|
return super.getStateForPlacement(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) {
|
public void neighborChanged(BlockState state, World world, BlockPos pos, Block p_220069_4_, BlockPos neighbourPos,
|
||||||
|
boolean p_220069_6_) {
|
||||||
|
if (neighbourPos.equals(pos.up()))
|
||||||
|
withTileEntityDo(world, pos, SpeedControllerTileEntity::updateBracket);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||||
|
BlockRayTraceResult ray) {
|
||||||
|
|
||||||
IPlacementHelper helper = PlacementHelpers.get(placementHelperId);
|
IPlacementHelper helper = PlacementHelpers.get(placementHelperId);
|
||||||
ItemStack heldItem = player.getHeldItem(hand);
|
ItemStack heldItem = player.getHeldItem(hand);
|
||||||
|
@ -72,7 +86,7 @@ public class SpeedControllerBlock extends HorizontalAxisKineticBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
return AllShapes.SPEED_CONTROLLER.get(state.get(HORIZONTAL_AXIS));
|
return AllShapes.SPEED_CONTROLLER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MethodsReturnNonnullByDefault
|
@MethodsReturnNonnullByDefault
|
||||||
|
@ -90,12 +104,15 @@ public class SpeedControllerBlock extends HorizontalAxisKineticBlock {
|
||||||
@Override
|
@Override
|
||||||
public PlacementOffset getOffset(World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) {
|
public PlacementOffset getOffset(World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) {
|
||||||
BlockPos newPos = pos.up();
|
BlockPos newPos = pos.up();
|
||||||
if (!world.getBlockState(newPos).getMaterial().isReplaceable())
|
if (!world.getBlockState(newPos)
|
||||||
|
.getMaterial()
|
||||||
|
.isReplaceable())
|
||||||
return PlacementOffset.fail();
|
return PlacementOffset.fail();
|
||||||
|
|
||||||
Axis newAxis = state.get(HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X;
|
Axis newAxis = state.get(HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X;
|
||||||
|
|
||||||
if (CogwheelBlockItem.DiagonalCogHelper.hasLargeCogwheelNeighbor(world, newPos, newAxis) || CogwheelBlockItem.DiagonalCogHelper.hasSmallCogwheelNeighbor(world, newPos, newAxis))
|
if (CogwheelBlockItem.DiagonalCogHelper.hasLargeCogwheelNeighbor(world, newPos, newAxis)
|
||||||
|
|| CogwheelBlockItem.DiagonalCogHelper.hasSmallCogwheelNeighbor(world, newPos, newAxis))
|
||||||
return PlacementOffset.fail();
|
return PlacementOffset.fail();
|
||||||
|
|
||||||
return PlacementOffset.success(newPos, s -> s.with(CogWheelBlock.AXIS, newAxis));
|
return PlacementOffset.success(newPos, s -> s.with(CogWheelBlock.AXIS, newAxis));
|
||||||
|
@ -103,7 +120,14 @@ public class SpeedControllerBlock extends HorizontalAxisKineticBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderAt(BlockPos pos, BlockState state, BlockRayTraceResult ray, PlacementOffset offset) {
|
public void renderAt(BlockPos pos, BlockState state, BlockRayTraceResult ray, PlacementOffset offset) {
|
||||||
IPlacementHelper.renderArrow(VecHelper.getCenterOf(pos), VecHelper.getCenterOf(offset.getPos()), Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, state.get(HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X));
|
IPlacementHelper.renderArrow(VecHelper.getCenterOf(pos), VecHelper.getCenterOf(offset.getPos()),
|
||||||
|
Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE,
|
||||||
|
state.get(HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<SpeedControllerTileEntity> getTileEntityClass() {
|
||||||
|
return SpeedControllerTileEntity.class;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,22 @@
|
||||||
package com.simibubi.create.content.contraptions.relays.advanced;
|
package com.simibubi.create.content.contraptions.relays.advanced;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.CreateClient;
|
import com.simibubi.create.CreateClient;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer;
|
import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer;
|
||||||
import com.simibubi.create.foundation.utility.SuperByteBuffer;
|
import com.simibubi.create.foundation.utility.SuperByteBuffer;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.WorldRenderer;
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedControllerTileEntity> {
|
public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedControllerTileEntity> {
|
||||||
|
|
||||||
|
@ -21,8 +29,22 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedContro
|
||||||
IRenderTypeBuffer buffer, int light, int overlay) {
|
IRenderTypeBuffer buffer, int light, int overlay) {
|
||||||
super.renderSafe(tileEntityIn, partialTicks, ms, buffer, light, overlay);
|
super.renderSafe(tileEntityIn, partialTicks, ms, buffer, light, overlay);
|
||||||
|
|
||||||
KineticTileEntityRenderer.renderRotatingBuffer(tileEntityIn, getRotatedModel(tileEntityIn), ms,
|
IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid());
|
||||||
buffer.getBuffer(RenderType.getSolid()), light);
|
KineticTileEntityRenderer.renderRotatingBuffer(tileEntityIn, getRotatedModel(tileEntityIn), ms, builder, light);
|
||||||
|
|
||||||
|
if (!tileEntityIn.hasBracket)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BlockPos pos = tileEntityIn.getPos();
|
||||||
|
World world = tileEntityIn.getWorld();
|
||||||
|
BlockState blockState = tileEntityIn.getBlockState();
|
||||||
|
|
||||||
|
SuperByteBuffer bracket = AllBlockPartials.SPEED_CONTROLLER_BRACKET.renderOn(blockState);
|
||||||
|
bracket.translate(0, 1, 0);
|
||||||
|
bracket.rotateCentered(Direction.UP,
|
||||||
|
(float) (blockState.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X ? Math.PI : 0));
|
||||||
|
bracket.light(WorldRenderer.getLightmapCoordinates(world, pos.up()));
|
||||||
|
bracket.renderInto(ms, builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SuperByteBuffer getRotatedModel(SpeedControllerTileEntity te) {
|
private SuperByteBuffer getRotatedModel(SpeedControllerTileEntity te) {
|
||||||
|
|
|
@ -2,9 +2,11 @@ package com.simibubi.create.content.contraptions.relays.advanced;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.RotationPropagator;
|
import com.simibubi.create.content.contraptions.RotationPropagator;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.motor.CreativeMotorTileEntity;
|
import com.simibubi.create.content.contraptions.components.motor.CreativeMotorTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||||
|
@ -22,8 +24,17 @@ public class SpeedControllerTileEntity extends KineticTileEntity {
|
||||||
public static final int DEFAULT_SPEED = 16;
|
public static final int DEFAULT_SPEED = 16;
|
||||||
protected ScrollValueBehaviour targetSpeed;
|
protected ScrollValueBehaviour targetSpeed;
|
||||||
|
|
||||||
|
boolean hasBracket;
|
||||||
|
|
||||||
public SpeedControllerTileEntity(TileEntityType<? extends SpeedControllerTileEntity> type) {
|
public SpeedControllerTileEntity(TileEntityType<? extends SpeedControllerTileEntity> type) {
|
||||||
super(type);
|
super(type);
|
||||||
|
hasBracket = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void lazyTick() {
|
||||||
|
super.lazyTick();
|
||||||
|
updateBracket();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,16 +114,25 @@ public class SpeedControllerTileEntity extends KineticTileEntity {
|
||||||
return targetSpeed;
|
return targetSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateBracket() {
|
||||||
|
if (world == null || !world.isRemote)
|
||||||
|
return;
|
||||||
|
BlockState stateAbove = world.getBlockState(pos.up());
|
||||||
|
hasBracket = AllBlocks.LARGE_COGWHEEL.has(stateAbove) && stateAbove.get(CogWheelBlock.AXIS)
|
||||||
|
.isHorizontal();
|
||||||
|
}
|
||||||
|
|
||||||
private class ControllerValueBoxTransform extends ValueBoxTransform.Sided {
|
private class ControllerValueBoxTransform extends ValueBoxTransform.Sided {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Vec3d getSouthLocation() {
|
protected Vec3d getSouthLocation() {
|
||||||
return VecHelper.voxelSpace(8, 11.5f, 14);
|
return VecHelper.voxelSpace(8, 11f, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isSideActive(BlockState state, Direction direction) {
|
protected boolean isSideActive(BlockState state, Direction direction) {
|
||||||
if (direction.getAxis().isVertical())
|
if (direction.getAxis()
|
||||||
|
.isVertical())
|
||||||
return false;
|
return false;
|
||||||
return state.get(SpeedControllerBlock.HORIZONTAL_AXIS) != direction.getAxis();
|
return state.get(SpeedControllerBlock.HORIZONTAL_AXIS) != direction.getAxis();
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,11 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen
|
||||||
withTileEntityDo(worldIn, pos, SequencedGearshiftTileEntity::onRedstoneUpdate);
|
withTileEntityDo(worldIn, pos, SequencedGearshiftTileEntity::onRedstoneUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
||||||
if (state.get(VERTICAL))
|
if (state.get(VERTICAL))
|
||||||
|
|
|
@ -87,6 +87,12 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
|
||||||
p_149666_2_.add(AllItems.BELT_CONNECTOR.asStack());
|
p_149666_2_.add(AllItems.BELT_CONNECTOR.asStack());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||||
|
return super.areStatesKineticallyEquivalent(oldState.with(CASING, false), newState.with(CASING, false))
|
||||||
|
&& oldState.get(PART) == newState.get(PART);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
||||||
if (face.getAxis() != getRotationAxis(state))
|
if (face.getAxis() != getRotationAxis(state))
|
||||||
|
|
|
@ -13,6 +13,7 @@ import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.transport.BeltInventory;
|
import com.simibubi.create.content.contraptions.relays.belt.transport.BeltInventory;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.transport.BeltMovementHandler;
|
import com.simibubi.create.content.contraptions.relays.belt.transport.BeltMovementHandler;
|
||||||
|
@ -480,4 +481,18 @@ public class BeltTileEntity extends KineticTileEntity {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean canPropagateDiagonally(IRotate block, BlockState state) {
|
||||||
|
return state.has(BeltBlock.SLOPE)
|
||||||
|
&& (state.get(BeltBlock.SLOPE) == BeltSlope.UPWARD || state.get(BeltBlock.SLOPE) == BeltSlope.DOWNWARD);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float propagateRotationTo(KineticTileEntity target, BlockState stateFrom, BlockState stateTo, BlockPos diff,
|
||||||
|
boolean connectedViaAxes, boolean connectedViaCogs) {
|
||||||
|
if (target instanceof BeltTileEntity && !connectedViaAxes)
|
||||||
|
return getController().equals(((BeltTileEntity) target).getController()) ? 1 : 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,16 @@ package com.simibubi.create.content.contraptions.relays.elementary;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
public class SimpleKineticTileEntity extends KineticTileEntity {
|
public class SimpleKineticTileEntity extends KineticTileEntity {
|
||||||
|
|
||||||
|
@ -28,4 +32,17 @@ public class SimpleKineticTileEntity extends KineticTileEntity {
|
||||||
return new AxisAlignedBB(pos).grow(1);
|
return new AxisAlignedBB(pos).grow(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BlockPos> addPropagationLocations(IRotate block, BlockState state, List<BlockPos> neighbours) {
|
||||||
|
if (!AllBlocks.LARGE_COGWHEEL.has(state))
|
||||||
|
return super.addPropagationLocations(block, state, neighbours);
|
||||||
|
|
||||||
|
BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1))
|
||||||
|
.forEach(offset -> {
|
||||||
|
if (offset.distanceSq(0, 0, 0, false) == BlockPos.ZERO.distanceSq(1, 1, 0, false))
|
||||||
|
neighbours.add(pos.add(offset));
|
||||||
|
});
|
||||||
|
return neighbours;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class AdjustablePulleyBlock extends EncasedBeltBlock implements ITE<Adjus
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||||
|
super.onBlockAdded(state, worldIn, pos, oldState, isMoving);
|
||||||
if (oldState.getBlock() == state.getBlock())
|
if (oldState.getBlock() == state.getBlock())
|
||||||
return;
|
return;
|
||||||
withTileEntityDo(worldIn, pos, AdjustablePulleyTileEntity::neighborChanged);
|
withTileEntityDo(worldIn, pos, AdjustablePulleyTileEntity::neighborChanged);
|
||||||
|
@ -48,7 +49,14 @@ public class AdjustablePulleyBlock extends EncasedBeltBlock implements ITE<Adjus
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
return super.getStateForPlacement(context).with(POWERED, context.getWorld().isBlockPowered(context.getPos()));
|
return super.getStateForPlacement(context).with(POWERED, context.getWorld()
|
||||||
|
.isBlockPowered(context.getPos()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) {
|
||||||
|
return super.areStatesKineticallyEquivalent(oldState, newState)
|
||||||
|
&& oldState.get(POWERED) == newState.get(POWERED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -9,7 +9,6 @@ import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
|
||||||
import net.minecraft.block.material.PushReaction;
|
import net.minecraft.block.material.PushReaction;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.item.ItemUseContext;
|
import net.minecraft.item.ItemUseContext;
|
||||||
|
@ -17,6 +16,7 @@ import net.minecraft.state.BooleanProperty;
|
||||||
import net.minecraft.state.EnumProperty;
|
import net.minecraft.state.EnumProperty;
|
||||||
import net.minecraft.state.IProperty;
|
import net.minecraft.state.IProperty;
|
||||||
import net.minecraft.state.StateContainer.Builder;
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
@ -125,12 +125,23 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock {
|
||||||
.with(CONNECTED_ALONG_FIRST_COORDINATE, connectionAlongFirst);
|
.with(CONNECTED_ALONG_FIRST_COORDINATE, connectionAlongFirst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) {
|
||||||
|
if (originalState.get(PART) == Part.NONE)
|
||||||
|
return super.getRotatedBlockState(originalState, targetedFace);
|
||||||
|
return super.getRotatedBlockState(originalState,
|
||||||
|
Direction.getFacingFromAxis(AxisDirection.POSITIVE, getConnectionAxis(originalState)));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) {
|
public BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) {
|
||||||
Blocks.AIR.getDefaultState()
|
// Blocks.AIR.getDefaultState()
|
||||||
.updateNeighbors(context.getWorld(), context.getPos(), 1);
|
// .updateNeighbors(context.getWorld(), context.getPos(), 1);
|
||||||
Axis axis = newState.get(AXIS);
|
Axis axis = newState.get(AXIS);
|
||||||
newState = getDefaultState().with(AXIS, axis);
|
newState = getDefaultState().with(AXIS, axis);
|
||||||
|
if (newState.has(BlockStateProperties.POWERED))
|
||||||
|
newState = newState.with(BlockStateProperties.POWERED, context.getWorld()
|
||||||
|
.isBlockPowered(context.getPos()));
|
||||||
for (Direction facing : Iterate.directions) {
|
for (Direction facing : Iterate.directions) {
|
||||||
if (facing.getAxis() == axis)
|
if (facing.getAxis() == axis)
|
||||||
continue;
|
continue;
|
||||||
|
@ -139,7 +150,7 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock {
|
||||||
newState = updatePostPlacement(newState, facing, context.getWorld()
|
newState = updatePostPlacement(newState, facing, context.getWorld()
|
||||||
.getBlockState(offset), context.getWorld(), pos, offset);
|
.getBlockState(offset), context.getWorld(), pos, offset);
|
||||||
}
|
}
|
||||||
newState.updateNeighbors(context.getWorld(), context.getPos(), 1 | 2);
|
// newState.updateNeighbors(context.getWorld(), context.getPos(), 1 | 2);
|
||||||
return newState;
|
return newState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,15 +166,8 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock {
|
||||||
|
|
||||||
public static boolean areBlocksConnected(BlockState state, BlockState other, Direction facing) {
|
public static boolean areBlocksConnected(BlockState state, BlockState other, Direction facing) {
|
||||||
Part part = state.get(PART);
|
Part part = state.get(PART);
|
||||||
Axis axis = state.get(AXIS);
|
Axis connectionAxis = getConnectionAxis(state);
|
||||||
boolean connectionAlongFirst = state.get(CONNECTED_ALONG_FIRST_COORDINATE);
|
Axis otherConnectionAxis = getConnectionAxis(other);
|
||||||
Axis connectionAxis =
|
|
||||||
connectionAlongFirst ? (axis == Axis.X ? Axis.Y : Axis.X) : (axis == Axis.Z ? Axis.Y : Axis.Z);
|
|
||||||
|
|
||||||
Axis otherAxis = other.get(AXIS);
|
|
||||||
boolean otherConnection = other.get(CONNECTED_ALONG_FIRST_COORDINATE);
|
|
||||||
Axis otherConnectionAxis =
|
|
||||||
otherConnection ? (otherAxis == Axis.X ? Axis.Y : Axis.X) : (otherAxis == Axis.Z ? Axis.Y : Axis.Z);
|
|
||||||
|
|
||||||
if (otherConnectionAxis != connectionAxis)
|
if (otherConnectionAxis != connectionAxis)
|
||||||
return false;
|
return false;
|
||||||
|
@ -177,6 +181,14 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static Axis getConnectionAxis(BlockState state) {
|
||||||
|
Axis axis = state.get(AXIS);
|
||||||
|
boolean connectionAlongFirst = state.get(CONNECTED_ALONG_FIRST_COORDINATE);
|
||||||
|
Axis connectionAxis =
|
||||||
|
connectionAlongFirst ? (axis == Axis.X ? Axis.Y : Axis.X) : (axis == Axis.Z ? Axis.Y : Axis.Z);
|
||||||
|
return connectionAxis;
|
||||||
|
}
|
||||||
|
|
||||||
public static float getRotationSpeedModifier(KineticTileEntity from, KineticTileEntity to) {
|
public static float getRotationSpeedModifier(KineticTileEntity from, KineticTileEntity to) {
|
||||||
float fromMod = 1;
|
float fromMod = 1;
|
||||||
float toMod = 1;
|
float toMod = 1;
|
||||||
|
|
|
@ -14,7 +14,6 @@ import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.material.Material;
|
|
||||||
import net.minecraft.block.material.MaterialColor;
|
import net.minecraft.block.material.MaterialColor;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.particles.RedstoneParticleData;
|
import net.minecraft.particles.RedstoneParticleData;
|
||||||
|
@ -114,6 +113,7 @@ public class GaugeBlock extends DirectionalAxisKineticBlock {
|
||||||
return context.getFace();
|
return context.getFace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected boolean getAxisAlignmentForPlacement(BlockItemUseContext context) {
|
protected boolean getAxisAlignmentForPlacement(BlockItemUseContext context) {
|
||||||
return context.getPlacementHorizontalFacing().getAxis() != Axis.X;
|
return context.getPlacementHorizontalFacing().getAxis() != Axis.X;
|
||||||
}
|
}
|
||||||
|
@ -127,8 +127,7 @@ public class GaugeBlock extends DirectionalAxisKineticBlock {
|
||||||
return false;
|
return false;
|
||||||
if (getRotationAxis(state) == Axis.Y && face != state.get(FACING))
|
if (getRotationAxis(state) == Axis.Y && face != state.get(FACING))
|
||||||
return false;
|
return false;
|
||||||
BlockState blockState = world.getBlockState(pos.offset(face));
|
if (!Block.shouldSideBeRendered(state, world, pos, face)
|
||||||
if (Block.hasSolidSide(blockState, world, pos, face.getOpposite()) && blockState.getMaterial() != Material.GLASS
|
|
||||||
&& !(world instanceof WrappedWorld))
|
&& !(world instanceof WrappedWorld))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -44,7 +44,8 @@ public interface IWrenchable {
|
||||||
}
|
}
|
||||||
|
|
||||||
default BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) {
|
default BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) {
|
||||||
return newState;
|
// return newState;
|
||||||
|
return Block.getValidBlockForPosition(newState, context.getWorld(), context.getPos());
|
||||||
}
|
}
|
||||||
|
|
||||||
default ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) {
|
default ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Supplier;
|
||||||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
|
@ -53,15 +54,20 @@ public class ExtendoGripInteractionPacket extends SimplePacketBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(Supplier<Context> context) {
|
public void handle(Supplier<Context> context) {
|
||||||
context.get()
|
context.get().enqueueWork(() -> {
|
||||||
.enqueueWork(() -> {
|
ServerPlayerEntity sender = context.get().getSender();
|
||||||
ServerPlayerEntity sender = context.get()
|
|
||||||
.getSender();
|
|
||||||
if (sender == null)
|
if (sender == null)
|
||||||
return;
|
return;
|
||||||
Entity entityByID = sender.getServerWorld()
|
Entity entityByID = sender.getServerWorld().getEntityByID(target);
|
||||||
.getEntityByID(target);
|
|
||||||
if (entityByID != null && ExtendoGripItem.isHoldingExtendoGrip(sender)) {
|
if (entityByID != null && ExtendoGripItem.isHoldingExtendoGrip(sender)) {
|
||||||
|
double d = sender.getAttribute(PlayerEntity.REACH_DISTANCE).getValue();
|
||||||
|
if (!sender.canEntityBeSeen(entityByID))
|
||||||
|
d -= 3;
|
||||||
|
d *= d;
|
||||||
|
if (sender.getDistanceSq(entityByID) > d) {
|
||||||
|
// TODO log?
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (interactionHand == null)
|
if (interactionHand == null)
|
||||||
sender.attackTargetEntityWithCurrentItem(entityByID);
|
sender.attackTargetEntityWithCurrentItem(entityByID);
|
||||||
else if (specificPoint == null)
|
else if (specificPoint == null)
|
||||||
|
@ -70,8 +76,7 @@ public class ExtendoGripInteractionPacket extends SimplePacketBase {
|
||||||
entityByID.applyPlayerInteraction(sender, specificPoint, interactionHand);
|
entityByID.applyPlayerInteraction(sender, specificPoint, interactionHand);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
context.get()
|
context.get().setPacketHandled(true);
|
||||||
.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.simibubi.create.foundation.item.ItemDescription;
|
||||||
import com.simibubi.create.foundation.networking.AllPackets;
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTProcessors;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
@ -115,7 +116,7 @@ public abstract class ZapperItem extends Item {
|
||||||
});
|
});
|
||||||
applyCooldown(player, item, false);
|
applyCooldown(player, item, false);
|
||||||
}
|
}
|
||||||
return new ActionResult<ItemStack>(ActionResultType.SUCCESS, item);
|
return new ActionResult<>(ActionResultType.SUCCESS, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean mainHand = hand == Hand.MAIN_HAND;
|
boolean mainHand = hand == Hand.MAIN_HAND;
|
||||||
|
@ -125,7 +126,7 @@ public abstract class ZapperItem extends Item {
|
||||||
|
|
||||||
// Pass To Offhand
|
// Pass To Offhand
|
||||||
if (mainHand && isSwap && gunInOtherHand)
|
if (mainHand && isSwap && gunInOtherHand)
|
||||||
return new ActionResult<ItemStack>(ActionResultType.FAIL, item);
|
return new ActionResult<>(ActionResultType.FAIL, item);
|
||||||
if (mainHand && !isSwap && gunInOtherHand)
|
if (mainHand && !isSwap && gunInOtherHand)
|
||||||
item.getTag()
|
item.getTag()
|
||||||
.putBoolean("_Swap", true);
|
.putBoolean("_Swap", true);
|
||||||
|
@ -144,7 +145,7 @@ public abstract class ZapperItem extends Item {
|
||||||
world.playSound(player, player.getPosition(), AllSoundEvents.BLOCKZAPPER_DENY.get(), SoundCategory.BLOCKS,
|
world.playSound(player, player.getPosition(), AllSoundEvents.BLOCKZAPPER_DENY.get(), SoundCategory.BLOCKS,
|
||||||
1f, 0.5f);
|
1f, 0.5f);
|
||||||
player.sendStatusMessage(msg.applyTextStyle(TextFormatting.RED), true);
|
player.sendStatusMessage(msg.applyTextStyle(TextFormatting.RED), true);
|
||||||
return new ActionResult<ItemStack>(ActionResultType.FAIL, item);
|
return new ActionResult<>(ActionResultType.FAIL, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockState stateToUse = Blocks.AIR.getDefaultState();
|
BlockState stateToUse = Blocks.AIR.getDefaultState();
|
||||||
|
@ -169,7 +170,7 @@ public abstract class ZapperItem extends Item {
|
||||||
// No target
|
// No target
|
||||||
if (pos == null || stateReplaced.getBlock() == Blocks.AIR) {
|
if (pos == null || stateReplaced.getBlock() == Blocks.AIR) {
|
||||||
applyCooldown(player, item, gunInOtherHand);
|
applyCooldown(player, item, gunInOtherHand);
|
||||||
return new ActionResult<ItemStack>(ActionResultType.SUCCESS, item);
|
return new ActionResult<>(ActionResultType.SUCCESS, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find exact position of gun barrel for VFX
|
// Find exact position of gun barrel for VFX
|
||||||
|
@ -183,7 +184,7 @@ public abstract class ZapperItem extends Item {
|
||||||
// Client side
|
// Client side
|
||||||
if (world.isRemote) {
|
if (world.isRemote) {
|
||||||
ZapperRenderHandler.dontAnimateItem(hand);
|
ZapperRenderHandler.dontAnimateItem(hand);
|
||||||
return new ActionResult<ItemStack>(ActionResultType.SUCCESS, item);
|
return new ActionResult<>(ActionResultType.SUCCESS, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server side
|
// Server side
|
||||||
|
@ -195,7 +196,7 @@ public abstract class ZapperItem extends Item {
|
||||||
new ZapperBeamPacket(barrelPos, raytrace.getHitVec(), hand, true));
|
new ZapperBeamPacket(barrelPos, raytrace.getHitVec(), hand, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ActionResult<ItemStack>(ActionResultType.SUCCESS, item);
|
return new ActionResult<>(ActionResultType.SUCCESS, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ITextComponent validateUsage(ItemStack item) {
|
public ITextComponent validateUsage(ItemStack item) {
|
||||||
|
@ -240,10 +241,13 @@ public abstract class ZapperItem extends Item {
|
||||||
return UseAction.NONE;
|
return UseAction.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setTileData(World world, BlockPos pos, CompoundNBT data) {
|
public static void setTileData(World world, BlockPos pos, BlockState state, CompoundNBT data, PlayerEntity player) {
|
||||||
if (data != null) {
|
if (data != null && AllBlockTags.SAFE_NBT.matches(state)) {
|
||||||
TileEntity tile = world.getTileEntity(pos);
|
TileEntity tile = world.getTileEntity(pos);
|
||||||
if (tile != null && !tile.onlyOpsCanSetNbt()) {
|
if (tile != null) {
|
||||||
|
data = NBTProcessors.process(tile, data, !player.isCreative());
|
||||||
|
if (data == null)
|
||||||
|
return;
|
||||||
data.putInt("x", pos.getX());
|
data.putInt("x", pos.getX());
|
||||||
data.putInt("y", pos.getY());
|
data.putInt("y", pos.getY());
|
||||||
data.putInt("z", pos.getZ());
|
data.putInt("z", pos.getZ());
|
||||||
|
|
|
@ -135,7 +135,7 @@ public class BlockzapperItem extends ZapperItem {
|
||||||
blocksnapshot.restore(true, false);
|
blocksnapshot.restore(true, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
setTileData(world, placed, data);
|
setTileData(world, placed, state, data, player);
|
||||||
|
|
||||||
if (player instanceof ServerPlayerEntity && world instanceof ServerWorld) {
|
if (player instanceof ServerPlayerEntity && world instanceof ServerWorld) {
|
||||||
ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player;
|
ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue