mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-26 11:54:39 +01:00
Faith in your Depot
- Added Weighted Ejectors - Fixed? some tunnel distribution inconsistencies
This commit is contained in:
parent
2e5d7a734f
commit
718142e26f
68 changed files with 3951 additions and 641 deletions
|
@ -140,7 +140,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_
|
||||||
fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json
|
fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json
|
||||||
b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json
|
b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json
|
||||||
6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json
|
6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json
|
||||||
37bc041b7449dc4d7962225e606125ba1b188974 assets/create/blockstates/fluid_pipe.json
|
48086bf71a824faf14841b698050cc8544b09a9b assets/create/blockstates/fluid_pipe.json
|
||||||
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
|
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
|
||||||
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
|
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
|
||||||
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
|
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
|
||||||
|
@ -337,7 +337,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
|
||||||
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
||||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
||||||
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
|
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
|
||||||
8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json
|
4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json
|
||||||
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
|
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
|
||||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
||||||
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
|
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
|
||||||
|
@ -391,6 +391,7 @@ fd7a9c7095372485081436c91489cadb2b0c514e assets/create/blockstates/weathered_lim
|
||||||
47f8c91ff4c3f5cad782ab469a1fe5f4909dc7f1 assets/create/blockstates/weathered_limestone_cobblestone_stairs.json
|
47f8c91ff4c3f5cad782ab469a1fe5f4909dc7f1 assets/create/blockstates/weathered_limestone_cobblestone_stairs.json
|
||||||
c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets/create/blockstates/weathered_limestone_cobblestone_wall.json
|
c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets/create/blockstates/weathered_limestone_cobblestone_wall.json
|
||||||
c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_limestone_pillar.json
|
c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_limestone_pillar.json
|
||||||
|
c838c0792511ca2e14493b40032bb1370fac588a assets/create/blockstates/weighted_ejector.json
|
||||||
512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json
|
512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json
|
||||||
4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json
|
4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json
|
||||||
89000903d0ab8139e919abea7aa0361b34c24e55 assets/create/blockstates/white_valve_handle.json
|
89000903d0ab8139e919abea7aa0361b34c24e55 assets/create/blockstates/white_valve_handle.json
|
||||||
|
@ -401,20 +402,20 @@ 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
|
||||||
2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json
|
ce0e5405da381a86625b908c569c5dbe347abdba assets/create/lang/en_ud.json
|
||||||
3522bc1dd15fd219aaf506766fb96be5f65b1939 assets/create/lang/en_us.json
|
5383435fbb7d8be0c6cdc8a4ebfae072645e461f assets/create/lang/en_us.json
|
||||||
d389c171d3d6a7382fb5b2e80b14e9bee53d8179 assets/create/lang/unfinished/de_de.json
|
f67a8ceef1ec2091b53198e5509e80ac9e5b82c1 assets/create/lang/unfinished/de_de.json
|
||||||
b3caab7bb37be53ea93895cbaae2081452cd095e assets/create/lang/unfinished/es_es.json
|
174bd2c5b0fe4560030c4b5f92dd795ce7785245 assets/create/lang/unfinished/es_es.json
|
||||||
0039068794faea032b0a39c954f142e2c8e4dfc1 assets/create/lang/unfinished/es_mx.json
|
20783faf769c31e3d8200ebdc78256e6845e4fc6 assets/create/lang/unfinished/es_mx.json
|
||||||
1e34083359caea11cf9fdbb3f04a5881ea62a55e assets/create/lang/unfinished/fr_fr.json
|
c33171dd6390d80e39beef5c1511e72e7515c390 assets/create/lang/unfinished/fr_fr.json
|
||||||
c9abd10d296055f56877317a5c7dee14d0e33bf5 assets/create/lang/unfinished/it_it.json
|
38bff62b21ff5c241cab0e06cc161cd12162749e assets/create/lang/unfinished/it_it.json
|
||||||
83298d57034c2bb54924dff2d9b5257502ac3b9a assets/create/lang/unfinished/ja_jp.json
|
c5a21a9238d491434fac9552c2372b0e2c5a8612 assets/create/lang/unfinished/ja_jp.json
|
||||||
2c0e5fbfc813949d973e9f95af9501ed65b80b82 assets/create/lang/unfinished/ko_kr.json
|
fab3e5b787268d39fa3b1c31d923e9d4f4b66419 assets/create/lang/unfinished/ko_kr.json
|
||||||
4b3b113e5f9351b741974bc18d13d9d648d38f91 assets/create/lang/unfinished/nl_nl.json
|
62f4a359bf78057eaf9a3ef73766ee5e25833ce6 assets/create/lang/unfinished/nl_nl.json
|
||||||
9bddfffdf5349353d37d7003546c94799c6e812d assets/create/lang/unfinished/pt_br.json
|
4fd663de3f40c2e2c569de95cfce4167e8a42cb1 assets/create/lang/unfinished/pt_br.json
|
||||||
5119b6690e8faa7e25450674caebf3c9c53fd54b assets/create/lang/unfinished/ru_ru.json
|
d431bca588528894340f8619cfcd82013eb04635 assets/create/lang/unfinished/ru_ru.json
|
||||||
f11eb922b49753b60894f0dfe8baabe004d13e05 assets/create/lang/unfinished/zh_cn.json
|
752dee8e473eb96deaa7a6b1f8405a1313c99cec assets/create/lang/unfinished/zh_cn.json
|
||||||
017a9c9cc6f4538c8c497097cbd59f590b4af160 assets/create/lang/unfinished/zh_tw.json
|
efe100b3543f98a16f4230b7278a66f9bd00166c 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
|
||||||
|
@ -1570,6 +1571,7 @@ def7382f3216c59d835ab64f534678f3d31ecc51 assets/create/models/item/weathered_lim
|
||||||
3d26cb5616182ba6926d0bf703119ebfbeacbe31 assets/create/models/item/weathered_limestone_cobblestone_stairs.json
|
3d26cb5616182ba6926d0bf703119ebfbeacbe31 assets/create/models/item/weathered_limestone_cobblestone_stairs.json
|
||||||
62cba55cef305e8fcbc545363919f75d702a617b assets/create/models/item/weathered_limestone_cobblestone_wall.json
|
62cba55cef305e8fcbc545363919f75d702a617b assets/create/models/item/weathered_limestone_cobblestone_wall.json
|
||||||
40bed7f5e9e97da45c5d9cebc3fcf87b2b13a808 assets/create/models/item/weathered_limestone_pillar.json
|
40bed7f5e9e97da45c5d9cebc3fcf87b2b13a808 assets/create/models/item/weathered_limestone_pillar.json
|
||||||
|
c36834070e12d25cd9e818d0d0181e267584b483 assets/create/models/item/weighted_ejector.json
|
||||||
8914910270736f8f15364c623cd08d4638383cc5 assets/create/models/item/wheat_flour.json
|
8914910270736f8f15364c623cd08d4638383cc5 assets/create/models/item/wheat_flour.json
|
||||||
0cc80844db689404d4722c93f1002b0bed05edcd assets/create/models/item/whisk.json
|
0cc80844db689404d4722c93f1002b0bed05edcd assets/create/models/item/whisk.json
|
||||||
c6253e0f8db3c3992d3f78fe5045e276d39d5b22 assets/create/models/item/white_sail.json
|
c6253e0f8db3c3992d3f78fe5045e276d39d5b22 assets/create/models/item/white_sail.json
|
||||||
|
@ -1585,7 +1587,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
||||||
9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json
|
9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json
|
||||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||||
e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json
|
e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json
|
||||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||||
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
||||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
||||||
356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json
|
356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json
|
||||||
|
@ -1825,6 +1827,7 @@ f3fc3d4fee0712906f833aa17185f0bacb21922f data/create/advancements/recipes/create
|
||||||
07ec7b627bdb049f52dddcce021cec0ad44b0049 data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json
|
07ec7b627bdb049f52dddcce021cec0ad44b0049 data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json
|
||||||
89401c0a6dffa62dbffdbb63986f580a4878402e data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json
|
89401c0a6dffa62dbffdbb63986f580a4878402e data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json
|
||||||
4ab6ae87b6c3a29c0c2966dad2fa335a39fafe78 data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json
|
4ab6ae87b6c3a29c0c2966dad2fa335a39fafe78 data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json
|
||||||
|
e42093eecd00375bf95d562a6e845ab1a30d7991 data/create/advancements/recipes/create.base/crafting/kinetics/weighted_ejector.json
|
||||||
7c146cc51139c2a8e287a60c8d645fa6f6f48cb1 data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json
|
7c146cc51139c2a8e287a60c8d645fa6f6f48cb1 data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json
|
||||||
f876dcbd2877c921613a4af481c89d66664c1ea8 data/create/advancements/recipes/create.base/crafting/kinetics/white_sail.json
|
f876dcbd2877c921613a4af481c89d66664c1ea8 data/create/advancements/recipes/create.base/crafting/kinetics/white_sail.json
|
||||||
37e545b016a7c5cd283168ac71ace6467a5ad3ef data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json
|
37e545b016a7c5cd283168ac71ace6467a5ad3ef data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json
|
||||||
|
@ -2688,6 +2691,7 @@ c2a62f12680d04ed4f586c501bb026e367243dd2 data/create/loot_tables/blocks/weathere
|
||||||
a89f425c47c3831071b556697169a3124370aed7 data/create/loot_tables/blocks/weathered_limestone_cobblestone_stairs.json
|
a89f425c47c3831071b556697169a3124370aed7 data/create/loot_tables/blocks/weathered_limestone_cobblestone_stairs.json
|
||||||
e8f3af61d9a2fd1ff5b32c9bb474ed005e6d70c4 data/create/loot_tables/blocks/weathered_limestone_cobblestone_wall.json
|
e8f3af61d9a2fd1ff5b32c9bb474ed005e6d70c4 data/create/loot_tables/blocks/weathered_limestone_cobblestone_wall.json
|
||||||
54358a64639957cc66ffa5296ff45723f7adf00e data/create/loot_tables/blocks/weathered_limestone_pillar.json
|
54358a64639957cc66ffa5296ff45723f7adf00e data/create/loot_tables/blocks/weathered_limestone_pillar.json
|
||||||
|
e3969f1c5966c4992b3280a06e1d6c5000c37df5 data/create/loot_tables/blocks/weighted_ejector.json
|
||||||
28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/white_sail.json
|
28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/white_sail.json
|
||||||
969eda31556feb5a68e350762848d17453275fee data/create/loot_tables/blocks/white_seat.json
|
969eda31556feb5a68e350762848d17453275fee data/create/loot_tables/blocks/white_seat.json
|
||||||
79fe374f8e677088f928a3a49ff5eeed6128d165 data/create/loot_tables/blocks/white_valve_handle.json
|
79fe374f8e677088f928a3a49ff5eeed6128d165 data/create/loot_tables/blocks/white_valve_handle.json
|
||||||
|
@ -2887,6 +2891,7 @@ af5854ee2fa3be195ad9abcdeebe6ed7306b651c data/create/recipes/crafting/kinetics/s
|
||||||
8494f5fcd85a740fa0f0384e3522d8cdd905ce49 data/create/recipes/crafting/kinetics/turntable.json
|
8494f5fcd85a740fa0f0384e3522d8cdd905ce49 data/create/recipes/crafting/kinetics/turntable.json
|
||||||
057c889b0a306f44b8835c896663154ccd9ff12f data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json
|
057c889b0a306f44b8835c896663154ccd9ff12f data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json
|
||||||
4fb009b86a51b2e259bd1f73848803f6276dd820 data/create/recipes/crafting/kinetics/water_wheel.json
|
4fb009b86a51b2e259bd1f73848803f6276dd820 data/create/recipes/crafting/kinetics/water_wheel.json
|
||||||
|
254265966b3c7c7a307e908c313a15ce92d20c83 data/create/recipes/crafting/kinetics/weighted_ejector.json
|
||||||
f508d510576c93712e7f5265345a32e8818bbf0d data/create/recipes/crafting/kinetics/whisk.json
|
f508d510576c93712e7f5265345a32e8818bbf0d data/create/recipes/crafting/kinetics/whisk.json
|
||||||
d80a741d2f0d4f742217b43d7e4d37f003ec9f9d data/create/recipes/crafting/kinetics/white_sail.json
|
d80a741d2f0d4f742217b43d7e4d37f003ec9f9d data/create/recipes/crafting/kinetics/white_sail.json
|
||||||
f4d88aa2edea548d29cf2678a111d8bb5db7720a data/create/recipes/crafting/kinetics/white_seat.json
|
f4d88aa2edea548d29cf2678a111d8bb5db7720a data/create/recipes/crafting/kinetics/white_seat.json
|
||||||
|
|
|
@ -181,10 +181,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
|
||||||
"west": "true",
|
|
||||||
"south": "true",
|
"south": "true",
|
||||||
"north": "false"
|
"west": "true",
|
||||||
|
"north": "false",
|
||||||
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lu_y"
|
"model": "create:block/fluid_pipe/lu_y"
|
||||||
|
@ -192,10 +192,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "true",
|
|
||||||
"west": "false",
|
|
||||||
"south": "true",
|
"south": "true",
|
||||||
"north": "false"
|
"west": "false",
|
||||||
|
"north": "false",
|
||||||
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ru_y"
|
"model": "create:block/fluid_pipe/ru_y"
|
||||||
|
@ -203,10 +203,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
|
||||||
"west": "true",
|
|
||||||
"south": "false",
|
"south": "false",
|
||||||
"north": "true"
|
"west": "true",
|
||||||
|
"north": "true",
|
||||||
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ld_y"
|
"model": "create:block/fluid_pipe/ld_y"
|
||||||
|
@ -214,10 +214,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "true",
|
|
||||||
"west": "false",
|
|
||||||
"south": "false",
|
"south": "false",
|
||||||
"north": "true"
|
"west": "false",
|
||||||
|
"north": "true",
|
||||||
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/rd_y"
|
"model": "create:block/fluid_pipe/rd_y"
|
||||||
|
@ -225,10 +225,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
|
||||||
"west": "false",
|
|
||||||
"south": "true",
|
"south": "true",
|
||||||
"north": "true"
|
"west": "false",
|
||||||
|
"north": "true",
|
||||||
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ud_y"
|
"model": "create:block/fluid_pipe/ud_y"
|
||||||
|
@ -236,10 +236,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
|
||||||
"west": "false",
|
|
||||||
"south": "true",
|
"south": "true",
|
||||||
"north": "false"
|
"west": "false",
|
||||||
|
"north": "false",
|
||||||
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ud_y"
|
"model": "create:block/fluid_pipe/ud_y"
|
||||||
|
@ -247,10 +247,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
|
||||||
"west": "false",
|
|
||||||
"south": "false",
|
"south": "false",
|
||||||
"north": "true"
|
"west": "false",
|
||||||
|
"north": "true",
|
||||||
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ud_y"
|
"model": "create:block/fluid_pipe/ud_y"
|
||||||
|
@ -258,10 +258,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "true",
|
"south": "false",
|
||||||
"west": "true",
|
"west": "true",
|
||||||
"south": "false",
|
"north": "false",
|
||||||
"north": "false"
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lr_y"
|
"model": "create:block/fluid_pipe/lr_y"
|
||||||
|
@ -269,10 +269,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
"south": "false",
|
||||||
"west": "true",
|
"west": "true",
|
||||||
"south": "false",
|
"north": "false",
|
||||||
"north": "false"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lr_y"
|
"model": "create:block/fluid_pipe/lr_y"
|
||||||
|
@ -280,10 +280,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "true",
|
|
||||||
"west": "false",
|
|
||||||
"south": "false",
|
"south": "false",
|
||||||
"north": "false"
|
"west": "false",
|
||||||
|
"north": "false",
|
||||||
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lr_y"
|
"model": "create:block/fluid_pipe/lr_y"
|
||||||
|
@ -291,10 +291,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"east": "false",
|
|
||||||
"west": "false",
|
|
||||||
"south": "false",
|
"south": "false",
|
||||||
"north": "false"
|
"west": "false",
|
||||||
|
"north": "false",
|
||||||
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/none_y"
|
"model": "create:block/fluid_pipe/none_y"
|
||||||
|
@ -303,9 +303,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "true",
|
"up": "true",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "true"
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lu_z"
|
"model": "create:block/fluid_pipe/lu_z"
|
||||||
|
@ -314,9 +314,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "false",
|
"up": "true",
|
||||||
"west": "true",
|
"west": "true",
|
||||||
"up": "true"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ru_z"
|
"model": "create:block/fluid_pipe/ru_z"
|
||||||
|
@ -325,9 +325,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "true",
|
"down": "true",
|
||||||
"east": "true",
|
"up": "false",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "false"
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ld_z"
|
"model": "create:block/fluid_pipe/ld_z"
|
||||||
|
@ -336,9 +336,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "true",
|
"down": "true",
|
||||||
"east": "false",
|
"up": "false",
|
||||||
"west": "true",
|
"west": "true",
|
||||||
"up": "false"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/rd_z"
|
"model": "create:block/fluid_pipe/rd_z"
|
||||||
|
@ -347,9 +347,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "true",
|
"down": "true",
|
||||||
"east": "false",
|
"up": "true",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "true"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ud_z"
|
"model": "create:block/fluid_pipe/ud_z"
|
||||||
|
@ -358,9 +358,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "false",
|
"up": "true",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "true"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ud_z"
|
"model": "create:block/fluid_pipe/ud_z"
|
||||||
|
@ -369,9 +369,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "true",
|
"down": "true",
|
||||||
"east": "false",
|
"up": "false",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "false"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/ud_z"
|
"model": "create:block/fluid_pipe/ud_z"
|
||||||
|
@ -380,9 +380,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "true",
|
"up": "false",
|
||||||
"west": "true",
|
"west": "true",
|
||||||
"up": "false"
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lr_z"
|
"model": "create:block/fluid_pipe/lr_z"
|
||||||
|
@ -391,9 +391,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "true",
|
"up": "false",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "false"
|
"east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lr_z"
|
"model": "create:block/fluid_pipe/lr_z"
|
||||||
|
@ -402,9 +402,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "false",
|
"up": "false",
|
||||||
"west": "true",
|
"west": "true",
|
||||||
"up": "false"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/lr_z"
|
"model": "create:block/fluid_pipe/lr_z"
|
||||||
|
@ -413,9 +413,9 @@
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"down": "false",
|
"down": "false",
|
||||||
"east": "false",
|
"up": "false",
|
||||||
"west": "false",
|
"west": "false",
|
||||||
"up": "false"
|
"east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/fluid_pipe/none_z"
|
"model": "create:block/fluid_pipe/none_z"
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_south": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_south": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -39,8 +39,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_south": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_south": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky"
|
"model": "create:block/radial_chassis_side_y_sticky"
|
||||||
|
@ -48,8 +48,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_south": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_south": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -59,8 +59,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_south": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_south": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -69,8 +69,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_south": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_south": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y"
|
"model": "create:block/radial_chassis_side_y"
|
||||||
|
@ -78,8 +78,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_south": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_south": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -89,8 +89,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_west": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -99,8 +99,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_west": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky",
|
"model": "create:block/radial_chassis_side_y_sticky",
|
||||||
|
@ -109,8 +109,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_west": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z_sticky",
|
"model": "create:block/radial_chassis_side_z_sticky",
|
||||||
|
@ -119,8 +119,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_west": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -129,8 +129,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_west": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y",
|
"model": "create:block/radial_chassis_side_y",
|
||||||
|
@ -139,8 +139,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_west": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z",
|
"model": "create:block/radial_chassis_side_z",
|
||||||
|
@ -149,8 +149,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_north": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky"
|
"model": "create:block/radial_chassis_side_x_sticky"
|
||||||
|
@ -158,8 +158,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_north": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky",
|
"model": "create:block/radial_chassis_side_y_sticky",
|
||||||
|
@ -168,8 +168,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_north": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -178,8 +178,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_north": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x"
|
"model": "create:block/radial_chassis_side_x"
|
||||||
|
@ -187,8 +187,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_north": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y",
|
"model": "create:block/radial_chassis_side_y",
|
||||||
|
@ -197,8 +197,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_north": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -207,8 +207,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -217,8 +217,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky",
|
"model": "create:block/radial_chassis_side_y_sticky",
|
||||||
|
@ -227,8 +227,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z_sticky"
|
"model": "create:block/radial_chassis_side_z_sticky"
|
||||||
|
@ -236,8 +236,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -246,8 +246,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y",
|
"model": "create:block/radial_chassis_side_y",
|
||||||
|
@ -256,8 +256,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z"
|
"model": "create:block/radial_chassis_side_z"
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"facing=north": {
|
||||||
|
"model": "create:block/weighted_ejector/block"
|
||||||
|
},
|
||||||
|
"facing=south": {
|
||||||
|
"model": "create:block/weighted_ejector/block",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"facing=west": {
|
||||||
|
"model": "create:block/weighted_ejector/block",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"facing=east": {
|
||||||
|
"model": "create:block/weighted_ejector/block",
|
||||||
|
"y": 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -392,6 +392,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
"block.create.weathered_limestone_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
"block.create.weathered_limestone_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
||||||
"block.create.weathered_limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
"block.create.weathered_limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
||||||
|
"block.create.weighted_ejector": "\u0279o\u0287\u0254\u01DD\u0638\u018E p\u01DD\u0287\u0265b\u0131\u01DDM",
|
||||||
"block.create.white_sail": "\u05DF\u0131\u0250S \u01DD\u0287\u0131\u0265M",
|
"block.create.white_sail": "\u05DF\u0131\u0250S \u01DD\u0287\u0131\u0265M",
|
||||||
"block.create.white_seat": "\u0287\u0250\u01DDS \u01DD\u0287\u0131\u0265M",
|
"block.create.white_seat": "\u0287\u0250\u01DDS \u01DD\u0287\u0131\u0265M",
|
||||||
"block.create.white_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u0287\u0131\u0265M",
|
"block.create.white_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u0287\u0131\u0265M",
|
||||||
|
|
|
@ -395,6 +395,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "Weathered Limestone Cobblestone Stairs",
|
"block.create.weathered_limestone_cobblestone_stairs": "Weathered Limestone Cobblestone Stairs",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "Weathered Limestone Cobblestone Wall",
|
"block.create.weathered_limestone_cobblestone_wall": "Weathered Limestone Cobblestone Wall",
|
||||||
"block.create.weathered_limestone_pillar": "Weathered Limestone Pillar",
|
"block.create.weathered_limestone_pillar": "Weathered Limestone Pillar",
|
||||||
|
"block.create.weighted_ejector": "Weighted Ejector",
|
||||||
"block.create.white_sail": "White Sail",
|
"block.create.white_sail": "White Sail",
|
||||||
"block.create.white_seat": "White Seat",
|
"block.create.white_seat": "White Seat",
|
||||||
"block.create.white_valve_handle": "White Valve Handle",
|
"block.create.white_valve_handle": "White Valve Handle",
|
||||||
|
@ -1083,6 +1084,12 @@
|
||||||
"create.mechanical_arm.summary": "Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
||||||
|
@ -1837,22 +1844,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "Item Transportation",
|
"create.ponder.tag.logistics": "Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "Components which help moving items around",
|
"create.ponder.tag.logistics.description": "Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "Movement Anchors",
|
"create.ponder.tag.movement_anchor": "Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "Aesthetics",
|
"create.ponder.tag.decoration": "Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "Logic Components",
|
"create.ponder.tag.redstone": "Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "Fluid Manipulators",
|
"create.ponder.tag.fluids": "Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2154,10 +2163,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2297,6 +2360,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1443",
|
"_": "Missing Localizations: 1506",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
||||||
"block.create.weathered_limestone_pillar": "Verwitterte Kalksteinsäule",
|
"block.create.weathered_limestone_pillar": "Verwitterte Kalksteinsäule",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||||
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 474",
|
"_": "Missing Localizations: 537",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "Escaleras de adoquín de piedra caliza erosionada",
|
"block.create.weathered_limestone_cobblestone_stairs": "Escaleras de adoquín de piedra caliza erosionada",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "Pared de adoquínes de piedra caliza erosionada",
|
"block.create.weathered_limestone_cobblestone_wall": "Pared de adoquínes de piedra caliza erosionada",
|
||||||
"block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada",
|
"block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "Vela blanca",
|
"block.create.white_sail": "Vela blanca",
|
||||||
"block.create.white_seat": "Asiento blanco",
|
"block.create.white_seat": "Asiento blanco",
|
||||||
"block.create.white_valve_handle": "Asa de válvula blanco",
|
"block.create.white_valve_handle": "Asa de válvula blanco",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "El brazo mecánico tiene %1$s entrada(s) y %2$s salida(s)",
|
"create.mechanical_arm.summary": "El brazo mecánico tiene %1$s entrada(s) y %2$s salida(s)",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s punto(s) de interacción seleccionado(s) eliminado(s) debido a las limitaciones de rango",
|
"create.mechanical_arm.points_outside_range": "%1$s punto(s) de interacción seleccionado(s) eliminado(s) debido a las limitaciones de rango",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "Cuando hay múltiples salidas disponibles",
|
"create.logistics.when_multiple_outputs_available": "Cuando hay múltiples salidas disponibles",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1373",
|
"_": "Missing Localizations: 1436",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "Escaleras de Piedra Labrada de Caliza Meteorizada",
|
"block.create.weathered_limestone_cobblestone_stairs": "Escaleras de Piedra Labrada de Caliza Meteorizada",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "Pared de Piedra Labrada de Caliza Meteorizada",
|
"block.create.weathered_limestone_cobblestone_wall": "Pared de Piedra Labrada de Caliza Meteorizada",
|
||||||
"block.create.weathered_limestone_pillar": "Pilar de Caliza Meteorizada",
|
"block.create.weathered_limestone_pillar": "Pilar de Caliza Meteorizada",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "Vela Blanca",
|
"block.create.white_sail": "Vela Blanca",
|
||||||
"block.create.white_seat": "Asiento Blanco",
|
"block.create.white_seat": "Asiento Blanco",
|
||||||
"block.create.white_valve_handle": "Manija de Válvula Blanca",
|
"block.create.white_valve_handle": "Manija de Válvula Blanca",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1155",
|
"_": "Missing Localizations: 1218",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
||||||
"block.create.weathered_limestone_pillar": "Pillier de Calcaire altéré",
|
"block.create.weathered_limestone_pillar": "Pillier de Calcaire altéré",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||||
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 491",
|
"_": "Missing Localizations: 554",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "Scalini di pietrisco di calcare consumato",
|
"block.create.weathered_limestone_cobblestone_stairs": "Scalini di pietrisco di calcare consumato",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "Muretto di pietrisco di calcare consumato",
|
"block.create.weathered_limestone_cobblestone_wall": "Muretto di pietrisco di calcare consumato",
|
||||||
"block.create.weathered_limestone_pillar": "Pilastro di calcare consumato",
|
"block.create.weathered_limestone_pillar": "Pilastro di calcare consumato",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "Vela bianca",
|
"block.create.white_sail": "Vela bianca",
|
||||||
"block.create.white_seat": "Sedile bianco",
|
"block.create.white_seat": "Sedile bianco",
|
||||||
"block.create.white_valve_handle": "Maniglia per valvola bianca",
|
"block.create.white_valve_handle": "Maniglia per valvola bianca",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "Il braccio meccanico ha %1$s input e %2$s output.",
|
"create.mechanical_arm.summary": "Il braccio meccanico ha %1$s input e %2$s output.",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s punti di interazione selezionati rimossi per limiti di gamma.",
|
"create.mechanical_arm.points_outside_range": "%1$s punti di interazione selezionati rimossi per limiti di gamma.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "Quando disponibili diversi output",
|
"create.logistics.when_multiple_outputs_available": "Quando disponibili diversi output",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 498",
|
"_": "Missing Localizations: 561",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "風化した石灰岩の丸石の階段",
|
"block.create.weathered_limestone_cobblestone_stairs": "風化した石灰岩の丸石の階段",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の壁",
|
"block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の壁",
|
||||||
"block.create.weathered_limestone_pillar": "風化した石灰岩の柱",
|
"block.create.weathered_limestone_pillar": "風化した石灰岩の柱",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"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": "白色のバルブハンドル",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "メカニカルアームは%1$s個の搬入ブロックと%2$s個の搬出ブロックを持っています。",
|
"create.mechanical_arm.summary": "メカニカルアームは%1$s個の搬入ブロックと%2$s個の搬出ブロックを持っています。",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s個の選択ブロックが射程限界のため、除外されました。",
|
"create.mechanical_arm.points_outside_range": "%1$s個の選択ブロックが射程限界のため、除外されました。",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "複数の出力が利用可能なとき:",
|
"create.logistics.when_multiple_outputs_available": "複数の出力が利用可能なとき:",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "順繰り分配",
|
"create.mechanical_arm.selection_mode.round_robin": "順繰り分配",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 544",
|
"_": "Missing Localizations: 607",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단",
|
"block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장",
|
"block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장",
|
||||||
"block.create.weathered_limestone_pillar": "풍화된 석회암 기둥",
|
"block.create.weathered_limestone_pillar": "풍화된 석회암 기둥",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"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": "하얀색 밸브 손잡이",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "이 기계 팔은 %1$s개의 입력부와 %2$s개의 출력부를 가졌습니다.",
|
"create.mechanical_arm.summary": "이 기계 팔은 %1$s개의 입력부와 %2$s개의 출력부를 가졌습니다.",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s개의 상호작용 포인트가 거리제한으로 인해 삭제되었습니다.",
|
"create.mechanical_arm.points_outside_range": "%1$s개의 상호작용 포인트가 거리제한으로 인해 삭제되었습니다.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "다수의 입력부가 존재할 때",
|
"create.logistics.when_multiple_outputs_available": "다수의 입력부가 존재할 때",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "순서대로 옮김",
|
"create.mechanical_arm.selection_mode.round_robin": "순서대로 옮김",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1642",
|
"_": "Missing Localizations: 1705",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
||||||
"block.create.weathered_limestone_pillar": "Verweerde Kalksteen Pilaar",
|
"block.create.weathered_limestone_pillar": "Verweerde Kalksteen Pilaar",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||||
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1708",
|
"_": "Missing Localizations: 1771",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
"block.create.weathered_limestone_cobblestone_stairs": "UNLOCALIZED: Weathered Limestone Cobblestone Stairs",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
"block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall",
|
||||||
"block.create.weathered_limestone_pillar": "Pilar de Calcário Resistido",
|
"block.create.weathered_limestone_pillar": "Pilar de Calcário Resistido",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||||
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
"block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 494",
|
"_": "Missing Localizations: 557",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "Ступени из известняк-булыжника",
|
"block.create.weathered_limestone_cobblestone_stairs": "Ступени из известняк-булыжника",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "Стена из известняк-булыжника",
|
"block.create.weathered_limestone_cobblestone_wall": "Стена из известняк-булыжника",
|
||||||
"block.create.weathered_limestone_pillar": "Колонна из выветренного известняка",
|
"block.create.weathered_limestone_pillar": "Колонна из выветренного известняка",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"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": "Белый ручной вентиль",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "Механическая рука имеет %1$s вход(ов) и %2$s выход(ов).",
|
"create.mechanical_arm.summary": "Механическая рука имеет %1$s вход(ов) и %2$s выход(ов).",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s выбранные точки взаимодействия удалены из-за ограничений диапазона.",
|
"create.mechanical_arm.points_outside_range": "%1$s выбранные точки взаимодействия удалены из-за ограничений диапазона.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "Когда доступно несколько выходов",
|
"create.logistics.when_multiple_outputs_available": "Когда доступно несколько выходов",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "По кругу",
|
"create.mechanical_arm.selection_mode.round_robin": "По кругу",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 492",
|
"_": "Missing Localizations: 555",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "风化石灰岩圆石楼梯",
|
"block.create.weathered_limestone_cobblestone_stairs": "风化石灰岩圆石楼梯",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "风化石灰岩圆石墙",
|
"block.create.weathered_limestone_cobblestone_wall": "风化石灰岩圆石墙",
|
||||||
"block.create.weathered_limestone_pillar": "竖纹风化石灰岩",
|
"block.create.weathered_limestone_pillar": "竖纹风化石灰岩",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"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": "白色阀门手轮",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "动力臂的输入为%1$s,输出为%2$s。",
|
"create.mechanical_arm.summary": "动力臂的输入为%1$s,输出为%2$s。",
|
||||||
"create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除。",
|
"create.mechanical_arm.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除。",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "当多个输出可用时",
|
"create.logistics.when_multiple_outputs_available": "当多个输出可用时",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "轮询调度",
|
"create.mechanical_arm.selection_mode.round_robin": "轮询调度",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 497",
|
"_": "Missing Localizations: 560",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -396,6 +396,7 @@
|
||||||
"block.create.weathered_limestone_cobblestone_stairs": "碎風化石灰岩樓梯",
|
"block.create.weathered_limestone_cobblestone_stairs": "碎風化石灰岩樓梯",
|
||||||
"block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆",
|
"block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆",
|
||||||
"block.create.weathered_limestone_pillar": "豎紋風化石灰岩",
|
"block.create.weathered_limestone_pillar": "豎紋風化石灰岩",
|
||||||
|
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||||
"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": "白色閥門開關",
|
||||||
|
@ -1084,6 +1085,12 @@
|
||||||
"create.mechanical_arm.summary": "機械手臂有%1$s 輸入以及 %2$s 輸出。",
|
"create.mechanical_arm.summary": "機械手臂有%1$s 輸入以及 %2$s 輸出。",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s 由於距離限制,選定的交互點被移除。",
|
"create.mechanical_arm.points_outside_range": "%1$s 由於距離限制,選定的交互點被移除。",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "當多個輸出可用時",
|
"create.logistics.when_multiple_outputs_available": "當多個輸出可用時",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "輪詢調度",
|
"create.mechanical_arm.selection_mode.round_robin": "輪詢調度",
|
||||||
|
@ -1838,22 +1845,24 @@
|
||||||
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
"create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption",
|
||||||
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
"create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms",
|
||||||
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
"create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm",
|
||||||
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
|
||||||
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
|
||||||
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
"create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation",
|
||||||
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
"create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around",
|
||||||
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
"create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors",
|
||||||
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
"create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways",
|
||||||
|
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
||||||
|
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
||||||
|
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
||||||
|
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
||||||
|
"create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings",
|
||||||
|
"create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.",
|
||||||
|
"create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility",
|
||||||
|
"create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption",
|
||||||
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
"create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics",
|
||||||
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
"create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||||
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
"create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances",
|
||||||
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
"create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force",
|
||||||
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
"create.ponder.tag.redstone": "UNLOCALIZED: Logic Components",
|
||||||
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
"create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering",
|
||||||
"create.ponder.tag.creative": "UNLOCALIZED: Creative Mode",
|
|
||||||
"create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode",
|
|
||||||
"create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks",
|
|
||||||
"create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere",
|
|
||||||
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
"create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators",
|
||||||
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
"create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids",
|
||||||
|
|
||||||
|
@ -2155,10 +2164,64 @@
|
||||||
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
"create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it",
|
||||||
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
"create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms",
|
||||||
|
"create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed",
|
||||||
|
"create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets",
|
||||||
|
"create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)",
|
||||||
|
"create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection",
|
||||||
|
"create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously",
|
||||||
|
"create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range",
|
||||||
|
"create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly",
|
||||||
|
"create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm",
|
||||||
|
"create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free",
|
||||||
|
"create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles",
|
||||||
|
"create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle",
|
||||||
|
|
||||||
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
"create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing",
|
||||||
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
"create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them",
|
||||||
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
"create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe",
|
||||||
|
"create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged",
|
||||||
|
"create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side",
|
||||||
|
"create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit",
|
||||||
|
"create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate",
|
||||||
|
"create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually",
|
||||||
|
"create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin",
|
||||||
|
"create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined",
|
||||||
|
"create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement",
|
||||||
|
"create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters",
|
||||||
|
|
||||||
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
"create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill",
|
||||||
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
"create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it",
|
||||||
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
"create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input",
|
||||||
|
@ -2298,6 +2361,16 @@
|
||||||
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails",
|
||||||
|
"create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
"create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them",
|
||||||
|
"create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames",
|
||||||
|
|
||||||
|
"create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames",
|
||||||
|
"create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with",
|
||||||
|
"create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks",
|
||||||
|
|
||||||
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/weighted_ejector/item"
|
||||||
|
}
|
|
@ -28,8 +28,8 @@
|
||||||
"trigger": "create:bracket_apply",
|
"trigger": "create:bracket_apply",
|
||||||
"conditions": {
|
"conditions": {
|
||||||
"accepted_entries": [
|
"accepted_entries": [
|
||||||
"create:large_cogwheel",
|
"create:cogwheel",
|
||||||
"create:cogwheel"
|
"create:large_cogwheel"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"create:crafting/kinetics/weighted_ejector"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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/weighted_ejector"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_item",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "create:weighted_ejector"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"A",
|
||||||
|
"D",
|
||||||
|
"I"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"A": {
|
||||||
|
"item": "create:golden_sheet"
|
||||||
|
},
|
||||||
|
"D": {
|
||||||
|
"item": "create:depot"
|
||||||
|
},
|
||||||
|
"I": {
|
||||||
|
"item": "create:cogwheel"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "create:weighted_ejector"
|
||||||
|
}
|
||||||
|
}
|
|
@ -123,6 +123,8 @@ public class AllBlockPartials {
|
||||||
|
|
||||||
GOGGLES = get("goggles"),
|
GOGGLES = get("goggles"),
|
||||||
|
|
||||||
|
EJECTOR_TOP = get("weighted_ejector/top"),
|
||||||
|
|
||||||
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")
|
||||||
|
|
|
@ -1,10 +1,29 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
|
import static com.simibubi.create.AllMovementBehaviours.addMovementBehaviour;
|
||||||
|
import static com.simibubi.create.AllTags.tagBlockAndItem;
|
||||||
|
import static com.simibubi.create.content.AllSections.SCHEMATICS;
|
||||||
|
import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock;
|
||||||
|
import static com.simibubi.create.foundation.data.BlockStateGen.oxidizedBlockstate;
|
||||||
|
import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures;
|
||||||
|
import static com.simibubi.create.foundation.data.ModelGen.customItemModel;
|
||||||
|
import static com.simibubi.create.foundation.data.ModelGen.oxidizedItemModel;
|
||||||
|
|
||||||
import com.simibubi.create.AllTags.AllBlockTags;
|
import com.simibubi.create.AllTags.AllBlockTags;
|
||||||
import com.simibubi.create.AllTags.AllItemTags;
|
import com.simibubi.create.AllTags.AllItemTags;
|
||||||
import com.simibubi.create.content.AllSections;
|
import com.simibubi.create.content.AllSections;
|
||||||
import com.simibubi.create.content.contraptions.base.CasingBlock;
|
import com.simibubi.create.content.contraptions.base.CasingBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.*;
|
import com.simibubi.create.content.contraptions.components.actors.DrillBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.DrillMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PloughMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceMovement;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.SeatMovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlock;
|
import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour;
|
import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock;
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock;
|
||||||
|
@ -27,7 +46,11 @@ import com.simibubi.create.content.contraptions.components.motor.CreativeMotorGe
|
||||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressBlock;
|
import com.simibubi.create.content.contraptions.components.press.MechanicalPressBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.saw.SawBlock;
|
import com.simibubi.create.content.contraptions.components.saw.SawBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.saw.SawGenerator;
|
import com.simibubi.create.content.contraptions.components.saw.SawGenerator;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.*;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.ClockworkBearingBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.SailBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedBearingMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.WindmillBearingBlock;
|
||||||
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;
|
||||||
|
@ -50,7 +73,15 @@ import com.simibubi.create.content.contraptions.fluids.PumpBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyBlock;
|
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainBlock;
|
import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlock;
|
import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.pipes.*;
|
import com.simibubi.create.content.contraptions.fluids.pipes.BracketBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.BracketBlockItem;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.BracketGenerator;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.GlassFluidPipeBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.SmartFluidPipeBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.SmartFluidPipeGenerator;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock;
|
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankGenerator;
|
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankGenerator;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankItem;
|
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankItem;
|
||||||
|
@ -72,7 +103,13 @@ import com.simibubi.create.content.contraptions.relays.elementary.BracketedKinet
|
||||||
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.content.contraptions.relays.elementary.ShaftBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.*;
|
import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.ClutchBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedBeltGenerator;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedCTBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.GearshiftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock;
|
import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator;
|
import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator;
|
||||||
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
|
import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock;
|
||||||
|
@ -84,23 +121,53 @@ import com.simibubi.create.content.logistics.block.chute.ChuteGenerator;
|
||||||
import com.simibubi.create.content.logistics.block.chute.ChuteItem;
|
import com.simibubi.create.content.logistics.block.chute.ChuteItem;
|
||||||
import com.simibubi.create.content.logistics.block.chute.SmartChuteBlock;
|
import com.simibubi.create.content.logistics.block.chute.SmartChuteBlock;
|
||||||
import com.simibubi.create.content.logistics.block.depot.DepotBlock;
|
import com.simibubi.create.content.logistics.block.depot.DepotBlock;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.*;
|
import com.simibubi.create.content.logistics.block.depot.EjectorBlock;
|
||||||
import com.simibubi.create.content.logistics.block.funnel.*;
|
import com.simibubi.create.content.logistics.block.depot.EjectorItem;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.AbstractDiodeGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.PoweredLatchBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.PoweredLatchGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.PulseRepeaterBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.PulseRepeaterGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.ToggleLatchBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.ToggleLatchGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.AndesiteFunnelBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.FunnelGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.FunnelItem;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.FunnelMovementBehaviour;
|
||||||
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.inventories.CreativeCrateBlock;
|
import com.simibubi.create.content.logistics.block.inventories.CreativeCrateBlock;
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock;
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.*;
|
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.ContactMovementBehaviour;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.ContentObserverBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkGenerator;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlock;
|
||||||
import com.simibubi.create.content.palettes.MetalBlock;
|
import com.simibubi.create.content.palettes.MetalBlock;
|
||||||
import com.simibubi.create.content.schematics.block.SchematicTableBlock;
|
import com.simibubi.create.content.schematics.block.SchematicTableBlock;
|
||||||
import com.simibubi.create.content.schematics.block.SchematicannonBlock;
|
import com.simibubi.create.content.schematics.block.SchematicannonBlock;
|
||||||
import com.simibubi.create.foundation.block.ItemUseOverrides;
|
import com.simibubi.create.foundation.block.ItemUseOverrides;
|
||||||
import com.simibubi.create.foundation.config.StressConfigDefaults;
|
import com.simibubi.create.foundation.config.StressConfigDefaults;
|
||||||
import com.simibubi.create.foundation.data.*;
|
import com.simibubi.create.foundation.data.AssetLookup;
|
||||||
|
import com.simibubi.create.foundation.data.BlockStateGen;
|
||||||
|
import com.simibubi.create.foundation.data.BuilderTransformers;
|
||||||
|
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||||
|
import com.simibubi.create.foundation.data.ModelGen;
|
||||||
|
import com.simibubi.create.foundation.data.SharedProperties;
|
||||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||||
import com.simibubi.create.foundation.utility.DyeHelper;
|
import com.simibubi.create.foundation.utility.DyeHelper;
|
||||||
import com.simibubi.create.foundation.worldgen.OxidizingBlock;
|
import com.simibubi.create.foundation.worldgen.OxidizingBlock;
|
||||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.SoundType;
|
import net.minecraft.block.SoundType;
|
||||||
|
@ -119,15 +186,6 @@ 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;
|
||||||
|
|
||||||
import static com.simibubi.create.AllMovementBehaviours.addMovementBehaviour;
|
|
||||||
import static com.simibubi.create.AllTags.tagBlockAndItem;
|
|
||||||
import static com.simibubi.create.content.AllSections.SCHEMATICS;
|
|
||||||
import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock;
|
|
||||||
import static com.simibubi.create.foundation.data.BlockStateGen.oxidizedBlockstate;
|
|
||||||
import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures;
|
|
||||||
import static com.simibubi.create.foundation.data.ModelGen.customItemModel;
|
|
||||||
import static com.simibubi.create.foundation.data.ModelGen.oxidizedItemModel;
|
|
||||||
|
|
||||||
public class AllBlocks {
|
public class AllBlocks {
|
||||||
|
|
||||||
private static final CreateRegistrate REGISTRATE = Create.registrate()
|
private static final CreateRegistrate REGISTRATE = Create.registrate()
|
||||||
|
@ -423,6 +481,15 @@ public class AllBlocks {
|
||||||
.transform(customItemModel("_", "block"))
|
.transform(customItemModel("_", "block"))
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final BlockEntry<EjectorBlock> WEIGHTED_EJECTOR = REGISTRATE.block("weighted_ejector", EjectorBlock::new)
|
||||||
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.properties(Block.Properties::nonOpaque)
|
||||||
|
.blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p), 180))
|
||||||
|
.transform(StressConfigDefaults.setImpact(2.0))
|
||||||
|
.item(EjectorItem::new)
|
||||||
|
.transform(customItemModel())
|
||||||
|
.register();
|
||||||
|
|
||||||
public static final BlockEntry<ChuteBlock> CHUTE = REGISTRATE.block("chute", ChuteBlock::new)
|
public static final BlockEntry<ChuteBlock> CHUTE = REGISTRATE.block("chute", ChuteBlock::new)
|
||||||
.initialProperties(SharedProperties::softMetal)
|
.initialProperties(SharedProperties::softMetal)
|
||||||
.addLayer(() -> RenderType::getCutoutMipped)
|
.addLayer(() -> RenderType::getCutoutMipped)
|
||||||
|
|
|
@ -1,7 +1,18 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.base.*;
|
import com.simibubi.create.content.contraptions.base.BackHalfShaftInstance;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.*;
|
import com.simibubi.create.content.contraptions.base.HalfShaftInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.base.HorizontalHalfShaftInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.DrillInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.DrillRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PortableFluidInterfaceTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer;
|
import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity;
|
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterInstance;
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterInstance;
|
||||||
|
@ -60,8 +71,19 @@ import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheel
|
||||||
import com.simibubi.create.content.contraptions.fluids.PumpCogInstance;
|
import com.simibubi.create.content.contraptions.fluids.PumpCogInstance;
|
||||||
import com.simibubi.create.content.contraptions.fluids.PumpRenderer;
|
import com.simibubi.create.content.contraptions.fluids.PumpRenderer;
|
||||||
import com.simibubi.create.content.contraptions.fluids.PumpTileEntity;
|
import com.simibubi.create.content.contraptions.fluids.PumpTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.*;
|
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyRenderer;
|
||||||
import com.simibubi.create.content.contraptions.fluids.pipes.*;
|
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.actors.SpoutRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.FluidValveTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.SmartFluidPipeTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.StraightPipeTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.fluids.pipes.TransparentStraightPipeRenderer;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity;
|
import com.simibubi.create.content.contraptions.fluids.tank.CreativeFluidTankTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankRenderer;
|
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankRenderer;
|
||||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity;
|
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity;
|
||||||
|
@ -77,7 +99,13 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltInstance;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity;
|
import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.*;
|
import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeInstance;
|
import com.simibubi.create.content.contraptions.relays.gauge.GaugeInstance;
|
||||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer;
|
import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
||||||
|
@ -96,6 +124,8 @@ import com.simibubi.create.content.logistics.block.chute.SmartChuteRenderer;
|
||||||
import com.simibubi.create.content.logistics.block.chute.SmartChuteTileEntity;
|
import com.simibubi.create.content.logistics.block.chute.SmartChuteTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.depot.DepotRenderer;
|
import com.simibubi.create.content.logistics.block.depot.DepotRenderer;
|
||||||
import com.simibubi.create.content.logistics.block.depot.DepotTileEntity;
|
import com.simibubi.create.content.logistics.block.depot.DepotTileEntity;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorRenderer;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.AdjustablePulseRepeaterTileEntity;
|
import com.simibubi.create.content.logistics.block.diodes.AdjustablePulseRepeaterTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterInstance;
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterInstance;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterRenderer;
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterRenderer;
|
||||||
|
@ -108,7 +138,14 @@ import com.simibubi.create.content.logistics.block.inventories.CreativeCrateTile
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInstance;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInstance;
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer;
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.*;
|
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverInstance;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.ContentObserverTileEntity;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileEntity;
|
||||||
import com.simibubi.create.content.schematics.block.SchematicTableTileEntity;
|
import com.simibubi.create.content.schematics.block.SchematicTableTileEntity;
|
||||||
import com.simibubi.create.content.schematics.block.SchematicannonInstance;
|
import com.simibubi.create.content.schematics.block.SchematicannonInstance;
|
||||||
import com.simibubi.create.content.schematics.block.SchematicannonRenderer;
|
import com.simibubi.create.content.schematics.block.SchematicannonRenderer;
|
||||||
|
@ -578,6 +615,13 @@ public class AllTileEntities {
|
||||||
.renderer(() -> DepotRenderer::new)
|
.renderer(() -> DepotRenderer::new)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final TileEntityEntry<EjectorTileEntity> WEIGHTED_EJECTOR = Create.registrate()
|
||||||
|
.tileEntity("weighted_ejector", EjectorTileEntity::new)
|
||||||
|
.instance(() -> ShaftInstance::new)
|
||||||
|
.validBlocks(AllBlocks.WEIGHTED_EJECTOR)
|
||||||
|
.renderer(() -> EjectorRenderer::new)
|
||||||
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<FunnelTileEntity> FUNNEL = Create.registrate()
|
public static final TileEntityEntry<FunnelTileEntity> FUNNEL = Create.registrate()
|
||||||
.tileEntity("funnel", FunnelTileEntity::new)
|
.tileEntity("funnel", FunnelTileEntity::new)
|
||||||
.instance(() -> FunnelInstance::new)
|
.instance(() -> FunnelInstance::new)
|
||||||
|
|
|
@ -8,7 +8,6 @@ import java.util.List;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.CreateClient;
|
|
||||||
import com.simibubi.create.content.contraptions.KineticNetwork;
|
import com.simibubi.create.content.contraptions.KineticNetwork;
|
||||||
import com.simibubi.create.content.contraptions.RotationPropagator;
|
import com.simibubi.create.content.contraptions.RotationPropagator;
|
||||||
import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel;
|
import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel;
|
||||||
|
@ -40,7 +39,6 @@ import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public abstract class KineticTileEntity extends SmartTileEntity
|
public abstract class KineticTileEntity extends SmartTileEntity
|
||||||
implements ITickableTileEntity, IHaveGoggleInformation, IHaveHoveringInformation, IInstanceRendered {
|
implements ITickableTileEntity, IHaveGoggleInformation, IHaveHoveringInformation, IInstanceRendered {
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class BasinOperatorBlockItem extends BlockItem {
|
||||||
BlockState placedOnState = context.getWorld()
|
BlockState placedOnState = context.getWorld()
|
||||||
.getBlockState(placedOnPos);
|
.getBlockState(placedOnPos);
|
||||||
if (AllBlocks.BASIN.has(placedOnState) || AllBlocks.BELT.has(placedOnState)
|
if (AllBlocks.BASIN.has(placedOnState) || AllBlocks.BELT.has(placedOnState)
|
||||||
|| AllBlocks.DEPOT.has(placedOnState)) {
|
|| AllBlocks.DEPOT.has(placedOnState) || AllBlocks.WEIGHTED_EJECTOR.has(placedOnState)) {
|
||||||
if (context.getWorld()
|
if (context.getWorld()
|
||||||
.getBlockState(placedOnPos.up(2))
|
.getBlockState(placedOnPos.up(2))
|
||||||
.getMaterial()
|
.getMaterial()
|
||||||
|
|
|
@ -150,7 +150,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
|
||||||
if (stack.isEmpty())
|
if (stack.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE)
|
ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE)
|
||||||
.tryExportingToBeltFunnel(stack, itemMovementFacing.getOpposite());
|
.tryExportingToBeltFunnel(stack, itemMovementFacing.getOpposite(), false);
|
||||||
if (tryExportingToBeltFunnel != null) {
|
if (tryExportingToBeltFunnel != null) {
|
||||||
if (tryExportingToBeltFunnel.getCount() != stack.getCount()) {
|
if (tryExportingToBeltFunnel.getCount() != stack.getCount()) {
|
||||||
inventory.setStackInSlot(slot, tryExportingToBeltFunnel);
|
inventory.setStackInSlot(slot, tryExportingToBeltFunnel);
|
||||||
|
|
|
@ -128,7 +128,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI
|
||||||
Direction side = heldItem.insertedFrom;
|
Direction side = heldItem.insertedFrom;
|
||||||
|
|
||||||
ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE)
|
ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE)
|
||||||
.tryExportingToBeltFunnel(heldItem.stack, side.getOpposite());
|
.tryExportingToBeltFunnel(heldItem.stack, side.getOpposite(), false);
|
||||||
if (tryExportingToBeltFunnel != null) {
|
if (tryExportingToBeltFunnel != null) {
|
||||||
if (tryExportingToBeltFunnel.getCount() != heldItem.stack.getCount()) {
|
if (tryExportingToBeltFunnel.getCount() != heldItem.stack.getCount()) {
|
||||||
if (tryExportingToBeltFunnel.isEmpty())
|
if (tryExportingToBeltFunnel.isEmpty())
|
||||||
|
|
|
@ -132,7 +132,7 @@ public class BeltTunnelBlock extends Block implements ITE<BeltTunnelTileEntity>,
|
||||||
public void updateTunnel(IWorld world, BlockPos pos) {
|
public void updateTunnel(IWorld world, BlockPos pos) {
|
||||||
BlockState tunnel = world.getBlockState(pos);
|
BlockState tunnel = world.getBlockState(pos);
|
||||||
BlockState newTunnel = getTunnelState(world, pos);
|
BlockState newTunnel = getTunnelState(world, pos);
|
||||||
if (tunnel != newTunnel) {
|
if (tunnel != newTunnel && !world.isRemote()) {
|
||||||
world.setBlockState(pos, newTunnel, 3);
|
world.setBlockState(pos, newTunnel, 3);
|
||||||
TileEntity te = world.getTileEntity(pos);
|
TileEntity te = world.getTileEntity(pos);
|
||||||
if (te != null && (te instanceof BeltTunnelTileEntity))
|
if (te != null && (te instanceof BeltTunnelTileEntity))
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
package com.simibubi.create.content.logistics.block.belts.tunnel;
|
package com.simibubi.create.content.logistics.block.belts.tunnel;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlockPartials;
|
|
||||||
import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
|
|
||||||
import com.simibubi.create.content.logistics.block.FlapData;
|
|
||||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
|
||||||
import net.minecraft.util.Direction;
|
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
|
||||||
|
import com.simibubi.create.content.logistics.block.FlapData;
|
||||||
|
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.TileEntityInstance;
|
||||||
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
|
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.world.LightType;
|
||||||
|
|
||||||
public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity> implements IDynamicInstance {
|
public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
private final Map<Direction, ArrayList<InstanceKey<FlapData>>> tunnelFlaps;
|
private final Map<Direction, ArrayList<InstanceKey<FlapData>>> tunnelFlaps;
|
||||||
|
@ -63,6 +68,11 @@ public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity>
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldReset() {
|
||||||
|
return super.shouldReset() || tunnelFlaps.size() != tile.flaps.size();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beginFrame() {
|
public void beginFrame() {
|
||||||
tunnelFlaps.forEach((direction, keys) -> {
|
tunnelFlaps.forEach((direction, keys) -> {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBe
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.SidedFilteringBehaviour;
|
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.SidedFilteringBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions;
|
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour;
|
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour;
|
||||||
|
import com.simibubi.create.foundation.utility.Couple;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
@ -55,11 +56,13 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
|
|
||||||
ItemStack stackToDistribute;
|
ItemStack stackToDistribute;
|
||||||
float distributionProgress;
|
float distributionProgress;
|
||||||
List<Pair<BlockPos, Direction>> distributionTargets;
|
|
||||||
int distributionDistanceLeft;
|
int distributionDistanceLeft;
|
||||||
int distributionDistanceRight;
|
int distributionDistanceRight;
|
||||||
int previousOutputIndex;
|
int previousOutputIndex;
|
||||||
|
|
||||||
|
// <filtered, non-filtered>
|
||||||
|
Couple<List<Pair<BlockPos, Direction>>> distributionTargets;
|
||||||
|
|
||||||
private boolean syncedOutputActive;
|
private boolean syncedOutputActive;
|
||||||
private Set<BrassTunnelTileEntity> syncSet;
|
private Set<BrassTunnelTileEntity> syncSet;
|
||||||
|
|
||||||
|
@ -69,7 +72,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
|
|
||||||
public BrassTunnelTileEntity(TileEntityType<? extends BeltTunnelTileEntity> type) {
|
public BrassTunnelTileEntity(TileEntityType<? extends BeltTunnelTileEntity> type) {
|
||||||
super(type);
|
super(type);
|
||||||
distributionTargets = new ArrayList<>();
|
distributionTargets = Couple.create(ArrayList::new);
|
||||||
syncSet = new HashSet<>();
|
syncSet = new HashSet<>();
|
||||||
stackToDistribute = ItemStack.EMPTY;
|
stackToDistribute = ItemStack.EMPTY;
|
||||||
beltCapability = LazyOptional.empty();
|
beltCapability = LazyOptional.empty();
|
||||||
|
@ -113,7 +116,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (distributionProgress == -1) {
|
if (distributionProgress == -1) {
|
||||||
distributionTargets.clear();
|
distributionTargets.forEach(List::clear);
|
||||||
distributionDistanceLeft = 0;
|
distributionDistanceLeft = 0;
|
||||||
distributionDistanceRight = 0;
|
distributionDistanceRight = 0;
|
||||||
|
|
||||||
|
@ -137,27 +140,24 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
if (stackToDistribute.isEmpty())
|
if (stackToDistribute.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (boolean filterPass : Iterate.trueAndFalse) {
|
for (Pair<BrassTunnelTileEntity, Direction> pair : validOutputs) {
|
||||||
for (Pair<BrassTunnelTileEntity, Direction> pair : validOutputs) {
|
BrassTunnelTileEntity tunnel = pair.getKey();
|
||||||
BrassTunnelTileEntity tunnel = pair.getKey();
|
Direction output = pair.getValue();
|
||||||
Direction output = pair.getValue();
|
if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null)
|
||||||
if (filterPass && tunnel.flapFilterEmpty(output))
|
continue;
|
||||||
continue;
|
distributionTargets.get(!tunnel.flapFilterEmpty(output))
|
||||||
if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null)
|
.add(Pair.of(tunnel.pos, output));
|
||||||
continue;
|
int distance = tunnel.pos.getX() + tunnel.pos.getZ() - pos.getX() - pos.getZ();
|
||||||
distributionTargets.add(Pair.of(tunnel.pos, output));
|
if (distance < 0)
|
||||||
int distance = tunnel.pos.getX() + tunnel.pos.getZ() - pos.getX() - pos.getZ();
|
distributionDistanceLeft = Math.max(distributionDistanceLeft, -distance);
|
||||||
if (distance < 0)
|
else
|
||||||
distributionDistanceLeft = Math.max(distributionDistanceLeft, -distance);
|
distributionDistanceRight = Math.max(distributionDistanceRight, distance);
|
||||||
else
|
|
||||||
distributionDistanceRight = Math.max(distributionDistanceRight, distance);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!distributionTargets.isEmpty() && filterPass)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (distributionTargets.isEmpty())
|
if (distributionTargets.getFirst()
|
||||||
|
.isEmpty()
|
||||||
|
&& distributionTargets.getSecond()
|
||||||
|
.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (selectionMode.get() != SelectionMode.SYNCHRONIZE || syncedOutputActive) {
|
if (selectionMode.get() != SelectionMode.SYNCHRONIZE || syncedOutputActive) {
|
||||||
|
@ -167,9 +167,14 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (distributionProgress == 0) {
|
if (distributionProgress != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
distributionTargets.forEach(list -> {
|
||||||
|
if (stackToDistribute.isEmpty())
|
||||||
|
return;
|
||||||
List<Pair<BrassTunnelTileEntity, Direction>> validTargets = new ArrayList<>();
|
List<Pair<BrassTunnelTileEntity, Direction>> validTargets = new ArrayList<>();
|
||||||
for (Pair<BlockPos, Direction> pair : distributionTargets) {
|
for (Pair<BlockPos, Direction> pair : list) {
|
||||||
BlockPos tunnelPos = pair.getKey();
|
BlockPos tunnelPos = pair.getKey();
|
||||||
Direction output = pair.getValue();
|
Direction output = pair.getValue();
|
||||||
TileEntity te = world.getTileEntity(tunnelPos);
|
TileEntity te = world.getTileEntity(tunnelPos);
|
||||||
|
@ -177,18 +182,15 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
continue;
|
continue;
|
||||||
validTargets.add(Pair.of((BrassTunnelTileEntity) te, output));
|
validTargets.add(Pair.of((BrassTunnelTileEntity) te, output));
|
||||||
}
|
}
|
||||||
|
|
||||||
distribute(validTargets);
|
distribute(validTargets);
|
||||||
distributionProgress = -1;
|
distributionProgress = -1;
|
||||||
return;
|
});
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Random rand = new Random();
|
private static Random rand = new Random();
|
||||||
|
|
||||||
private void distribute(List<Pair<BrassTunnelTileEntity, Direction>> validTargets) {
|
private void distribute(List<Pair<BrassTunnelTileEntity, Direction>> validTargets) {
|
||||||
final int amountTargets = validTargets.size();
|
int amountTargets = validTargets.size();
|
||||||
if (amountTargets == 0)
|
if (amountTargets == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -204,18 +206,23 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
|
|
||||||
ItemStack toDistribute = null;
|
ItemStack toDistribute = null;
|
||||||
int leftovers = 0;
|
int leftovers = 0;
|
||||||
|
int remainingOutputs = amountTargets;
|
||||||
|
|
||||||
for (boolean simulate : Iterate.trueAndFalse) {
|
for (boolean simulate : Iterate.trueAndFalse) {
|
||||||
|
if (remainingOutputs == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
leftovers = 0;
|
leftovers = 0;
|
||||||
int index = indexStart;
|
int index = indexStart;
|
||||||
int stackSize = stackToDistribute.getCount();
|
int stackSize = stackToDistribute.getCount();
|
||||||
int splitStackSize = stackSize / amountTargets;
|
int splitStackSize = stackSize / remainingOutputs;
|
||||||
int splitRemainder = stackSize % amountTargets;
|
int splitRemainder = stackSize % remainingOutputs;
|
||||||
int visited = 0;
|
int visited = 0;
|
||||||
|
|
||||||
toDistribute = stackToDistribute.copy();
|
toDistribute = stackToDistribute.copy();
|
||||||
if (!force && simulate)
|
if (!(force || split) && simulate)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
while (visited < amountTargets) {
|
while (visited < amountTargets) {
|
||||||
Pair<BrassTunnelTileEntity, Direction> pair = validTargets.get(index);
|
Pair<BrassTunnelTileEntity, Direction> pair = validTargets.get(index);
|
||||||
BrassTunnelTileEntity tunnel = pair.getKey();
|
BrassTunnelTileEntity tunnel = pair.getKey();
|
||||||
|
@ -230,6 +237,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
if (remainder == null || remainder.getCount() == count) {
|
if (remainder == null || remainder.getCount() == count) {
|
||||||
if (force)
|
if (force)
|
||||||
return;
|
return;
|
||||||
|
if (split && simulate)
|
||||||
|
remainingOutputs--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,19 +466,22 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
compound.putBoolean("SyncedOutput", syncedOutputActive);
|
compound.putBoolean("SyncedOutput", syncedOutputActive);
|
||||||
compound.putBoolean("ConnectedLeft", connectedLeft);
|
compound.putBoolean("ConnectedLeft", connectedLeft);
|
||||||
compound.putBoolean("ConnectedRight", connectedRight);
|
compound.putBoolean("ConnectedRight", connectedRight);
|
||||||
|
|
||||||
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
|
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
|
||||||
compound.putFloat("DistributionProgress", distributionProgress);
|
compound.putFloat("DistributionProgress", distributionProgress);
|
||||||
compound.putInt("PreviousIndex", previousOutputIndex);
|
compound.putInt("PreviousIndex", previousOutputIndex);
|
||||||
compound.putInt("DistanceLeft", distributionDistanceLeft);
|
compound.putInt("DistanceLeft", distributionDistanceLeft);
|
||||||
compound.putInt("DistanceRight", distributionDistanceRight);
|
compound.putInt("DistanceRight", distributionDistanceRight);
|
||||||
compound.put("Targets", NBTHelper.writeCompoundList(distributionTargets, pair -> {
|
|
||||||
CompoundNBT nbt = new CompoundNBT();
|
for (boolean filtered : Iterate.trueAndFalse) {
|
||||||
nbt.put("Pos", NBTUtil.writeBlockPos(pair.getKey()));
|
compound.put(filtered ? "FilteredTargets" : "Targets",
|
||||||
nbt.putInt("Face", pair.getValue()
|
NBTHelper.writeCompoundList(distributionTargets.get(filtered), pair -> {
|
||||||
.getIndex());
|
CompoundNBT nbt = new CompoundNBT();
|
||||||
return nbt;
|
nbt.put("Pos", NBTUtil.writeBlockPos(pair.getKey()));
|
||||||
}));
|
nbt.putInt("Face", pair.getValue()
|
||||||
|
.getIndex());
|
||||||
|
return nbt;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
super.write(compound, clientPacket);
|
super.write(compound, clientPacket);
|
||||||
}
|
}
|
||||||
|
@ -487,11 +499,15 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
||||||
previousOutputIndex = compound.getInt("PreviousIndex");
|
previousOutputIndex = compound.getInt("PreviousIndex");
|
||||||
distributionDistanceLeft = compound.getInt("DistanceLeft");
|
distributionDistanceLeft = compound.getInt("DistanceLeft");
|
||||||
distributionDistanceRight = compound.getInt("DistanceRight");
|
distributionDistanceRight = compound.getInt("DistanceRight");
|
||||||
distributionTargets = NBTHelper.readCompoundList(compound.getList("Targets", NBT.TAG_COMPOUND), nbt -> {
|
|
||||||
BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos"));
|
for (boolean filtered : Iterate.trueAndFalse) {
|
||||||
Direction face = Direction.byIndex(nbt.getInt("Face"));
|
distributionTargets.set(filtered, NBTHelper
|
||||||
return Pair.of(pos, face);
|
.readCompoundList(compound.getList(filtered ? "FilteredTargets" : "Targets", NBT.TAG_COMPOUND), nbt -> {
|
||||||
});
|
BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos"));
|
||||||
|
Direction face = Direction.byIndex(nbt.getInt("Face"));
|
||||||
|
return Pair.of(pos, face);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
super.read(compound, clientPacket);
|
super.read(compound, clientPacket);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,379 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.AbstractFunnelBlock;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.nbt.ListNBT;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.util.Constants.NBT;
|
||||||
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
|
|
||||||
|
public class DepotBehaviour extends TileEntityBehaviour {
|
||||||
|
|
||||||
|
public static BehaviourType<DepotBehaviour> TYPE = new BehaviourType<>();
|
||||||
|
|
||||||
|
TransportedItemStack heldItem;
|
||||||
|
List<TransportedItemStack> incoming;
|
||||||
|
ItemStackHandler processingOutputBuffer;
|
||||||
|
DepotItemHandler itemHandler;
|
||||||
|
LazyOptional<DepotItemHandler> lazyItemHandler;
|
||||||
|
TransportedItemStackHandlerBehaviour transportedHandler;
|
||||||
|
Supplier<Integer> maxStackSize;
|
||||||
|
Supplier<Boolean> canAcceptItems;
|
||||||
|
Predicate<Direction> canFunnelsPullFrom;
|
||||||
|
boolean allowMerge;
|
||||||
|
|
||||||
|
public DepotBehaviour(SmartTileEntity te) {
|
||||||
|
super(te);
|
||||||
|
maxStackSize = () -> 64;
|
||||||
|
canAcceptItems = () -> true;
|
||||||
|
canFunnelsPullFrom = $ -> true;
|
||||||
|
incoming = new ArrayList<>();
|
||||||
|
itemHandler = new DepotItemHandler(this);
|
||||||
|
lazyItemHandler = LazyOptional.of(() -> itemHandler);
|
||||||
|
processingOutputBuffer = new ItemStackHandler(8) {
|
||||||
|
protected void onContentsChanged(int slot) {
|
||||||
|
te.notifyUpdate();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableMerging() {
|
||||||
|
allowMerge = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
|
||||||
|
World world = tileEntity.getWorld();
|
||||||
|
|
||||||
|
for (Iterator<TransportedItemStack> iterator = incoming.iterator(); iterator.hasNext();) {
|
||||||
|
TransportedItemStack ts = iterator.next();
|
||||||
|
if (!tick(ts))
|
||||||
|
continue;
|
||||||
|
if (world.isRemote)
|
||||||
|
continue;
|
||||||
|
if (heldItem == null) {
|
||||||
|
heldItem = ts;
|
||||||
|
} else {
|
||||||
|
if (!ItemHandlerHelper.canItemStacksStack(heldItem.stack, ts.stack)) {
|
||||||
|
Vec3d vec = VecHelper.getCenterOf(tileEntity.getPos());
|
||||||
|
InventoryHelper.spawnItemStack(tileEntity.getWorld(), vec.x, vec.y + .5f, vec.z, ts.stack);
|
||||||
|
} else {
|
||||||
|
heldItem.stack.grow(ts.stack.getCount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
iterator.remove();
|
||||||
|
tileEntity.notifyUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (heldItem == null)
|
||||||
|
return;
|
||||||
|
if (!tick(heldItem))
|
||||||
|
return;
|
||||||
|
|
||||||
|
BlockPos pos = tileEntity.getPos();
|
||||||
|
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
|
if (handleBeltFunnelOutput())
|
||||||
|
return;
|
||||||
|
|
||||||
|
BeltProcessingBehaviour processingBehaviour =
|
||||||
|
TileEntityBehaviour.get(world, pos.up(2), BeltProcessingBehaviour.TYPE);
|
||||||
|
if (processingBehaviour == null)
|
||||||
|
return;
|
||||||
|
if (!heldItem.locked && BeltProcessingBehaviour.isBlocked(world, pos))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ItemStack previousItem = heldItem.stack;
|
||||||
|
boolean wasLocked = heldItem.locked;
|
||||||
|
ProcessingResult result = wasLocked ? processingBehaviour.handleHeldItem(heldItem, transportedHandler)
|
||||||
|
: processingBehaviour.handleReceivedItem(heldItem, transportedHandler);
|
||||||
|
if (result == ProcessingResult.REMOVE) {
|
||||||
|
heldItem = null;
|
||||||
|
tileEntity.sendData();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
heldItem.locked = result == ProcessingResult.HOLD;
|
||||||
|
if (heldItem.locked != wasLocked || !previousItem.equals(heldItem.stack, false))
|
||||||
|
tileEntity.sendData();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean tick(TransportedItemStack heldItem) {
|
||||||
|
heldItem.prevBeltPosition = heldItem.beltPosition;
|
||||||
|
heldItem.prevSideOffset = heldItem.sideOffset;
|
||||||
|
float diff = .5f - heldItem.beltPosition;
|
||||||
|
if (diff > 1 / 512f) {
|
||||||
|
if (diff > 1 / 32f && !BeltHelper.isItemUpright(heldItem.stack))
|
||||||
|
heldItem.angle += 1;
|
||||||
|
heldItem.beltPosition += diff / 4f;
|
||||||
|
}
|
||||||
|
return diff < 1 / 16f;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleBeltFunnelOutput() {
|
||||||
|
BlockState funnel = getWorld().getBlockState(getPos().up());
|
||||||
|
Direction funnelFacing = AbstractFunnelBlock.getFunnelFacing(funnel);
|
||||||
|
if (funnelFacing == null || !canFunnelsPullFrom.test(funnelFacing.getOpposite()))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (int slot = 0; slot < processingOutputBuffer.getSlots(); slot++) {
|
||||||
|
ItemStack previousItem = processingOutputBuffer.getStackInSlot(slot);
|
||||||
|
if (previousItem.isEmpty())
|
||||||
|
continue;
|
||||||
|
ItemStack afterInsert = tileEntity.getBehaviour(DirectBeltInputBehaviour.TYPE)
|
||||||
|
.tryExportingToBeltFunnel(previousItem, null, false);
|
||||||
|
if (afterInsert == null)
|
||||||
|
return false;
|
||||||
|
if (previousItem.getCount() != afterInsert.getCount()) {
|
||||||
|
processingOutputBuffer.setStackInSlot(slot, afterInsert);
|
||||||
|
tileEntity.notifyUpdate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack previousItem = heldItem.stack;
|
||||||
|
ItemStack afterInsert = tileEntity.getBehaviour(DirectBeltInputBehaviour.TYPE)
|
||||||
|
.tryExportingToBeltFunnel(previousItem, null, false);
|
||||||
|
if (afterInsert == null)
|
||||||
|
return false;
|
||||||
|
if (previousItem.getCount() != afterInsert.getCount()) {
|
||||||
|
if (afterInsert.isEmpty())
|
||||||
|
heldItem = null;
|
||||||
|
else
|
||||||
|
heldItem.stack = afterInsert;
|
||||||
|
tileEntity.notifyUpdate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
if (lazyItemHandler != null)
|
||||||
|
lazyItemHandler.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(CompoundNBT compound, boolean clientPacket) {
|
||||||
|
if (heldItem != null)
|
||||||
|
compound.put("HeldItem", heldItem.serializeNBT());
|
||||||
|
compound.put("OutputBuffer", processingOutputBuffer.serializeNBT());
|
||||||
|
if (canMergeItems() && !incoming.isEmpty())
|
||||||
|
compound.put("Incoming", NBTHelper.writeCompoundList(incoming, TransportedItemStack::serializeNBT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(CompoundNBT compound, boolean clientPacket) {
|
||||||
|
heldItem = null;
|
||||||
|
if (compound.contains("HeldItem"))
|
||||||
|
heldItem = TransportedItemStack.read(compound.getCompound("HeldItem"));
|
||||||
|
processingOutputBuffer.deserializeNBT(compound.getCompound("OutputBuffer"));
|
||||||
|
if (canMergeItems()) {
|
||||||
|
ListNBT list = compound.getList("Incoming", NBT.TAG_COMPOUND);
|
||||||
|
incoming = NBTHelper.readCompoundList(list, TransportedItemStack::read);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSubBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||||
|
behaviours.add(new DirectBeltInputBehaviour(tileEntity).allowingBeltFunnels()
|
||||||
|
.setInsertionHandler(this::tryInsertingFromSide));
|
||||||
|
transportedHandler = new TransportedItemStackHandlerBehaviour(tileEntity, this::applyToAllItems)
|
||||||
|
.withStackPlacement(this::getWorldPositionOf);
|
||||||
|
behaviours.add(transportedHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getHeldItemStack() {
|
||||||
|
return heldItem == null ? ItemStack.EMPTY : heldItem.stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canMergeItems() {
|
||||||
|
return allowMerge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPresentStackSize() {
|
||||||
|
int cumulativeStackSize = 0;
|
||||||
|
cumulativeStackSize += getHeldItemStack().getCount();
|
||||||
|
for (int slot = 0; slot < processingOutputBuffer.getSlots(); slot++)
|
||||||
|
cumulativeStackSize += processingOutputBuffer.getStackInSlot(slot)
|
||||||
|
.getCount();
|
||||||
|
return cumulativeStackSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRemainingSpace() {
|
||||||
|
int cumulativeStackSize = getPresentStackSize();
|
||||||
|
for (TransportedItemStack transportedItemStack : incoming)
|
||||||
|
cumulativeStackSize += transportedItemStack.stack.getCount();
|
||||||
|
int fromGetter = maxStackSize.get();
|
||||||
|
return (fromGetter == 0 ? 64 : fromGetter) - cumulativeStackSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack insert(TransportedItemStack heldItem, boolean simulate) {
|
||||||
|
if (!canAcceptItems.get())
|
||||||
|
return heldItem.stack;
|
||||||
|
|
||||||
|
if (canMergeItems()) {
|
||||||
|
int remainingSpace = getRemainingSpace();
|
||||||
|
ItemStack inserted = heldItem.stack;
|
||||||
|
if (remainingSpace <= 0)
|
||||||
|
return inserted;
|
||||||
|
if (this.heldItem != null && !ItemHandlerHelper.canItemStacksStack(this.heldItem.stack, inserted))
|
||||||
|
return inserted;
|
||||||
|
|
||||||
|
ItemStack returned = ItemStack.EMPTY;
|
||||||
|
if (remainingSpace < inserted.getCount()) {
|
||||||
|
returned = ItemHandlerHelper.copyStackWithSize(heldItem.stack, inserted.getCount() - remainingSpace);
|
||||||
|
if (!simulate) {
|
||||||
|
TransportedItemStack copy = heldItem.copy();
|
||||||
|
copy.stack.setCount(remainingSpace);
|
||||||
|
if (this.heldItem != null)
|
||||||
|
incoming.add(copy);
|
||||||
|
else
|
||||||
|
this.heldItem = copy;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!simulate) {
|
||||||
|
if (this.heldItem != null)
|
||||||
|
incoming.add(heldItem);
|
||||||
|
else
|
||||||
|
this.heldItem = heldItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returned;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!simulate)
|
||||||
|
this.heldItem = heldItem;
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeldItem(TransportedItemStack heldItem) {
|
||||||
|
this.heldItem = heldItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeHeldItem() {
|
||||||
|
this.heldItem = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCenteredHeldItem(TransportedItemStack heldItem) {
|
||||||
|
this.heldItem = heldItem;
|
||||||
|
this.heldItem.beltPosition = 0.5f;
|
||||||
|
this.heldItem.prevBeltPosition = 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> LazyOptional<T> getItemCapability(Capability<T> cap, Direction side) {
|
||||||
|
return lazyItemHandler.cast();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemStack tryInsertingFromSide(TransportedItemStack transportedStack, Direction side, boolean simulate) {
|
||||||
|
ItemStack inserted = transportedStack.stack;
|
||||||
|
|
||||||
|
if (!getHeldItemStack().isEmpty() && !canMergeItems())
|
||||||
|
return inserted;
|
||||||
|
if (!isOutputEmpty() && !canMergeItems())
|
||||||
|
return inserted;
|
||||||
|
if (!canAcceptItems.get())
|
||||||
|
return inserted;
|
||||||
|
|
||||||
|
int size = transportedStack.stack.getCount();
|
||||||
|
transportedStack = transportedStack.copy();
|
||||||
|
transportedStack.beltPosition = side.getAxis()
|
||||||
|
.isVertical() ? .5f : 0;
|
||||||
|
transportedStack.insertedFrom = side;
|
||||||
|
transportedStack.prevSideOffset = transportedStack.sideOffset;
|
||||||
|
transportedStack.prevBeltPosition = transportedStack.beltPosition;
|
||||||
|
ItemStack remainder = insert(transportedStack, simulate);
|
||||||
|
if (remainder.getCount() != size)
|
||||||
|
tileEntity.notifyUpdate();
|
||||||
|
|
||||||
|
return remainder;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyToAllItems(float maxDistanceFromCentre,
|
||||||
|
Function<TransportedItemStack, TransportedResult> processFunction) {
|
||||||
|
if (heldItem == null)
|
||||||
|
return;
|
||||||
|
if (.5f - heldItem.beltPosition > maxDistanceFromCentre)
|
||||||
|
return;
|
||||||
|
|
||||||
|
boolean dirty = false;
|
||||||
|
TransportedItemStack transportedItemStack = heldItem;
|
||||||
|
ItemStack stackBefore = transportedItemStack.stack.copy();
|
||||||
|
TransportedResult result = processFunction.apply(transportedItemStack);
|
||||||
|
if (result == null || result.didntChangeFrom(stackBefore))
|
||||||
|
return;
|
||||||
|
|
||||||
|
dirty = true;
|
||||||
|
heldItem = null;
|
||||||
|
if (result.hasHeldOutput())
|
||||||
|
setCenteredHeldItem(result.getHeldOutput());
|
||||||
|
|
||||||
|
for (TransportedItemStack added : result.getOutputs()) {
|
||||||
|
if (getHeldItemStack().isEmpty()) {
|
||||||
|
setCenteredHeldItem(added);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ItemStack remainder = ItemHandlerHelper.insertItemStacked(processingOutputBuffer, added.stack, false);
|
||||||
|
Vec3d vec = VecHelper.getCenterOf(tileEntity.getPos());
|
||||||
|
InventoryHelper.spawnItemStack(tileEntity.getWorld(), vec.x, vec.y + .5f, vec.z, remainder);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dirty)
|
||||||
|
tileEntity.notifyUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return heldItem == null && isOutputEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOutputEmpty() {
|
||||||
|
for (int i = 0; i < processingOutputBuffer.getSlots(); i++)
|
||||||
|
if (!processingOutputBuffer.getStackInSlot(i)
|
||||||
|
.isEmpty())
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Vec3d getWorldPositionOf(TransportedItemStack transported) {
|
||||||
|
Vec3d offsetVec = new Vec3d(.5f, 14 / 16f, .5f);
|
||||||
|
return offsetVec.add(new Vec3d(tileEntity.getPos()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BehaviourType<?> getType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,27 +2,18 @@ package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
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.relays.belt.transport.TransportedItemStack;
|
|
||||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
import com.simibubi.create.foundation.item.ItemHelper;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
|
||||||
|
|
||||||
import mcp.MethodsReturnNonnullByDefault;
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.inventory.InventoryHelper;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.ActionResultType;
|
import net.minecraft.util.ActionResultType;
|
||||||
import net.minecraft.util.Direction;
|
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.BlockRayTraceResult;
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
|
@ -30,8 +21,6 @@ import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
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 net.minecraftforge.items.ItemStackHandler;
|
|
||||||
|
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
@MethodsReturnNonnullByDefault
|
@MethodsReturnNonnullByDefault
|
||||||
|
@ -65,74 +54,18 @@ public class DepotBlock extends Block implements ITE<DepotTileEntity>, IWrenchab
|
||||||
@Override
|
@Override
|
||||||
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||||
BlockRayTraceResult ray) {
|
BlockRayTraceResult ray) {
|
||||||
if (ray.getFace() != Direction.UP)
|
return SharedDepotBlockMethods.onUse(state, world, pos, player, hand, ray);
|
||||||
return ActionResultType.PASS;
|
|
||||||
if (world.isRemote)
|
|
||||||
return ActionResultType.SUCCESS;
|
|
||||||
|
|
||||||
withTileEntityDo(world, pos, te -> {
|
|
||||||
ItemStack heldItem = player.getHeldItem(hand);
|
|
||||||
boolean wasEmptyHanded = heldItem.isEmpty();
|
|
||||||
boolean shouldntPlaceItem = AllBlocks.MECHANICAL_ARM.isIn(heldItem);
|
|
||||||
|
|
||||||
ItemStack mainItemStack = te.getHeldItemStack();
|
|
||||||
if (!mainItemStack.isEmpty()) {
|
|
||||||
player.inventory.placeItemBackInInventory(world, mainItemStack);
|
|
||||||
te.setHeldItem(null);
|
|
||||||
}
|
|
||||||
ItemStackHandler outputs = te.processingOutputBuffer;
|
|
||||||
for (int i = 0; i < outputs.getSlots(); i++)
|
|
||||||
player.inventory.placeItemBackInInventory(world, outputs.extractItem(i, 64, false));
|
|
||||||
|
|
||||||
if (!wasEmptyHanded && !shouldntPlaceItem) {
|
|
||||||
TransportedItemStack transported = new TransportedItemStack(heldItem);
|
|
||||||
transported.insertedFrom = player.getHorizontalFacing();
|
|
||||||
transported.prevBeltPosition = .25f;
|
|
||||||
transported.beltPosition = .25f;
|
|
||||||
te.setHeldItem(transported);
|
|
||||||
player.setHeldItem(hand, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
te.markDirty();
|
|
||||||
te.sendData();
|
|
||||||
});
|
|
||||||
|
|
||||||
return ActionResultType.SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||||
if (!state.hasTileEntity() || state.getBlock() == newState.getBlock())
|
SharedDepotBlockMethods.onReplaced(state, worldIn, pos, newState, isMoving);
|
||||||
return;
|
|
||||||
withTileEntityDo(worldIn, pos, te -> {
|
|
||||||
ItemHelper.dropContents(worldIn, pos, te.processingOutputBuffer);
|
|
||||||
if (!te.getHeldItemStack()
|
|
||||||
.isEmpty())
|
|
||||||
InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), te.getHeldItemStack());
|
|
||||||
});
|
|
||||||
worldIn.removeTileEntity(pos);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLanded(IBlockReader worldIn, Entity entityIn) {
|
public void onLanded(IBlockReader worldIn, Entity entityIn) {
|
||||||
super.onLanded(worldIn, entityIn);
|
super.onLanded(worldIn, entityIn);
|
||||||
if (!AllBlocks.DEPOT.has(worldIn.getBlockState(entityIn.getPosition())))
|
SharedDepotBlockMethods.onLanded(worldIn, entityIn);
|
||||||
return;
|
|
||||||
if (!(entityIn instanceof ItemEntity))
|
|
||||||
return;
|
|
||||||
if (!entityIn.isAlive())
|
|
||||||
return;
|
|
||||||
if (entityIn.world.isRemote)
|
|
||||||
return;
|
|
||||||
ItemEntity itemEntity = (ItemEntity) entityIn;
|
|
||||||
DirectBeltInputBehaviour inputBehaviour =
|
|
||||||
TileEntityBehaviour.get(worldIn, entityIn.getPosition(), DirectBeltInputBehaviour.TYPE);
|
|
||||||
if (inputBehaviour == null)
|
|
||||||
return;
|
|
||||||
ItemStack remainder = inputBehaviour.handleInsertion(itemEntity.getItem(), Direction.DOWN, false);
|
|
||||||
itemEntity.setItem(remainder);
|
|
||||||
if (remainder.isEmpty())
|
|
||||||
itemEntity.remove();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -142,11 +75,7 @@ public class DepotBlock extends Block implements ITE<DepotTileEntity>, IWrenchab
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
||||||
try {
|
return SharedDepotBlockMethods.getComparatorInputOverride(blockState, worldIn, pos);
|
||||||
return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).itemHandler);
|
|
||||||
} catch (TileEntityException ignored) {
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,9 +8,9 @@ import net.minecraftforge.items.IItemHandler;
|
||||||
public class DepotItemHandler implements IItemHandler {
|
public class DepotItemHandler implements IItemHandler {
|
||||||
|
|
||||||
private static final int MAIN_SLOT = 0;
|
private static final int MAIN_SLOT = 0;
|
||||||
private DepotTileEntity te;
|
private DepotBehaviour te;
|
||||||
|
|
||||||
public DepotItemHandler(DepotTileEntity te) {
|
public DepotItemHandler(DepotBehaviour te) {
|
||||||
this.te = te;
|
this.te = te;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,16 +29,15 @@ public class DepotItemHandler implements IItemHandler {
|
||||||
if (slot != MAIN_SLOT)
|
if (slot != MAIN_SLOT)
|
||||||
return stack;
|
return stack;
|
||||||
if (!te.getHeldItemStack()
|
if (!te.getHeldItemStack()
|
||||||
.isEmpty())
|
.isEmpty() && !te.canMergeItems())
|
||||||
return stack;
|
return stack;
|
||||||
if (!te.isOutputEmpty())
|
if (!te.isOutputEmpty() && !te.canMergeItems())
|
||||||
return stack;
|
return stack;
|
||||||
if (!simulate) {
|
|
||||||
te.setHeldItem(new TransportedItemStack(stack));
|
ItemStack remainder = te.insert(new TransportedItemStack(stack), simulate);
|
||||||
te.markDirty();
|
if (!simulate && remainder != stack)
|
||||||
te.sendData();
|
te.tileEntity.notifyUpdate();
|
||||||
}
|
return remainder;
|
||||||
return ItemStack.EMPTY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,15 +54,14 @@ public class DepotItemHandler implements IItemHandler {
|
||||||
te.heldItem.stack = stack;
|
te.heldItem.stack = stack;
|
||||||
if (stack.isEmpty())
|
if (stack.isEmpty())
|
||||||
te.heldItem = null;
|
te.heldItem = null;
|
||||||
te.markDirty();
|
te.tileEntity.notifyUpdate();
|
||||||
te.sendData();
|
|
||||||
}
|
}
|
||||||
return extracted;
|
return extracted;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSlotLimit(int slot) {
|
public int getSlotLimit(int slot) {
|
||||||
return 64;
|
return slot == MAIN_SLOT ? te.maxStackSize.get() : 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Random;
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
@ -30,43 +31,54 @@ public class DepotRenderer extends SafeTileEntityRenderer<DepotTileEntity> {
|
||||||
@Override
|
@Override
|
||||||
protected void renderSafe(DepotTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
protected void renderSafe(DepotTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
int light, int overlay) {
|
int light, int overlay) {
|
||||||
|
renderItemsOf(te, partialTicks, ms, buffer, light, overlay, te.depotBehaviour);
|
||||||
|
}
|
||||||
|
|
||||||
TransportedItemStack transported = te.heldItem;
|
public static void renderItemsOf(SmartTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
|
int light, int overlay, DepotBehaviour depotBehaviour) {
|
||||||
|
|
||||||
|
TransportedItemStack transported = depotBehaviour.heldItem;
|
||||||
MatrixStacker msr = MatrixStacker.of(ms);
|
MatrixStacker msr = MatrixStacker.of(ms);
|
||||||
Vec3d itemPosition = VecHelper.getCenterOf(te.getPos());
|
Vec3d itemPosition = VecHelper.getCenterOf(te.getPos());
|
||||||
|
|
||||||
ms.push();
|
ms.push();
|
||||||
ms.translate(.5f, 15 / 16f, .5f);
|
ms.translate(.5f, 15 / 16f, .5f);
|
||||||
|
|
||||||
// Render main item
|
if (transported != null)
|
||||||
if (transported != null) {
|
depotBehaviour.incoming.add(transported);
|
||||||
|
|
||||||
|
// Render main items
|
||||||
|
for (TransportedItemStack tis : depotBehaviour.incoming) {
|
||||||
ms.push();
|
ms.push();
|
||||||
msr.nudge(0);
|
msr.nudge(0);
|
||||||
float offset = MathHelper.lerp(partialTicks, transported.prevBeltPosition, transported.beltPosition);
|
float offset = MathHelper.lerp(partialTicks, tis.prevBeltPosition, tis.beltPosition);
|
||||||
float sideOffset = MathHelper.lerp(partialTicks, transported.prevSideOffset, transported.sideOffset);
|
float sideOffset = MathHelper.lerp(partialTicks, tis.prevSideOffset, tis.sideOffset);
|
||||||
|
|
||||||
if (transported.insertedFrom.getAxis()
|
if (tis.insertedFrom.getAxis()
|
||||||
.isHorizontal()) {
|
.isHorizontal()) {
|
||||||
Vec3d offsetVec = new Vec3d(transported.insertedFrom.getOpposite()
|
Vec3d offsetVec = new Vec3d(tis.insertedFrom.getOpposite()
|
||||||
.getDirectionVec()).scale(.5f - offset);
|
.getDirectionVec()).scale(.5f - offset);
|
||||||
ms.translate(offsetVec.x, offsetVec.y, offsetVec.z);
|
ms.translate(offsetVec.x, offsetVec.y, offsetVec.z);
|
||||||
boolean alongX = transported.insertedFrom.rotateY()
|
boolean alongX = tis.insertedFrom.rotateY()
|
||||||
.getAxis() == Axis.X;
|
.getAxis() == Axis.X;
|
||||||
if (!alongX)
|
if (!alongX)
|
||||||
sideOffset *= -1;
|
sideOffset *= -1;
|
||||||
ms.translate(alongX ? sideOffset : 0, 0, alongX ? 0 : sideOffset);
|
ms.translate(alongX ? sideOffset : 0, 0, alongX ? 0 : sideOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack itemStack = transported.stack;
|
ItemStack itemStack = tis.stack;
|
||||||
int angle = transported.angle;
|
int angle = tis.angle;
|
||||||
Random r = new Random(0);
|
Random r = new Random(0);
|
||||||
renderItem(ms, buffer, light, overlay, itemStack, angle, r, itemPosition);
|
renderItem(ms, buffer, light, overlay, itemStack, angle, r, itemPosition);
|
||||||
ms.pop();
|
ms.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (transported != null)
|
||||||
|
depotBehaviour.incoming.remove(transported);
|
||||||
|
|
||||||
// Render output items
|
// Render output items
|
||||||
for (int i = 0; i < te.processingOutputBuffer.getSlots(); i++) {
|
for (int i = 0; i < depotBehaviour.processingOutputBuffer.getSlots(); i++) {
|
||||||
ItemStack stack = te.processingOutputBuffer.getStackInSlot(i);
|
ItemStack stack = depotBehaviour.processingOutputBuffer.getStackInSlot(i);
|
||||||
if (stack.isEmpty())
|
if (stack.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
ms.push();
|
ms.push();
|
||||||
|
|
|
@ -1,253 +1,35 @@
|
||||||
package com.simibubi.create.content.logistics.block.depot;
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
|
||||||
|
|
||||||
import net.minecraft.inventory.InventoryHelper;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.Vec3d;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
import net.minecraftforge.items.CapabilityItemHandler;
|
import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
|
||||||
import net.minecraftforge.items.ItemStackHandler;
|
|
||||||
|
|
||||||
public class DepotTileEntity extends SmartTileEntity {
|
public class DepotTileEntity extends SmartTileEntity {
|
||||||
|
|
||||||
TransportedItemStack heldItem;
|
DepotBehaviour depotBehaviour;
|
||||||
ItemStackHandler processingOutputBuffer;
|
|
||||||
|
|
||||||
DepotItemHandler itemHandler;
|
|
||||||
LazyOptional<DepotItemHandler> lazyItemHandler;
|
|
||||||
private TransportedItemStackHandlerBehaviour transportedHandler;
|
|
||||||
|
|
||||||
public DepotTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
public DepotTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||||
super(tileEntityTypeIn);
|
super(tileEntityTypeIn);
|
||||||
itemHandler = new DepotItemHandler(this);
|
|
||||||
lazyItemHandler = LazyOptional.of(() -> itemHandler);
|
|
||||||
processingOutputBuffer = new ItemStackHandler(8) {
|
|
||||||
protected void onContentsChanged(int slot) {
|
|
||||||
markDirty();
|
|
||||||
sendData();
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tick() {
|
|
||||||
super.tick();
|
|
||||||
if (heldItem == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
heldItem.prevBeltPosition = heldItem.beltPosition;
|
|
||||||
heldItem.prevSideOffset = heldItem.sideOffset;
|
|
||||||
float diff = .5f - heldItem.beltPosition;
|
|
||||||
if (diff > 1 / 512f) {
|
|
||||||
if (diff > 1 / 32f && !BeltHelper.isItemUpright(heldItem.stack))
|
|
||||||
heldItem.angle += 1;
|
|
||||||
heldItem.beltPosition += diff / 4f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (diff > 1 / 16f)
|
|
||||||
return;
|
|
||||||
if (world.isRemote)
|
|
||||||
return;
|
|
||||||
if (handleBeltFunnelOutput())
|
|
||||||
return;
|
|
||||||
|
|
||||||
BeltProcessingBehaviour processingBehaviour =
|
|
||||||
TileEntityBehaviour.get(world, pos.up(2), BeltProcessingBehaviour.TYPE);
|
|
||||||
if (processingBehaviour == null)
|
|
||||||
return;
|
|
||||||
if (!heldItem.locked && BeltProcessingBehaviour.isBlocked(world, pos))
|
|
||||||
return;
|
|
||||||
|
|
||||||
ItemStack previousItem = heldItem.stack;
|
|
||||||
boolean wasLocked = heldItem.locked;
|
|
||||||
ProcessingResult result = wasLocked ? processingBehaviour.handleHeldItem(heldItem, transportedHandler)
|
|
||||||
: processingBehaviour.handleReceivedItem(heldItem, transportedHandler);
|
|
||||||
if (result == ProcessingResult.REMOVE) {
|
|
||||||
heldItem = null;
|
|
||||||
sendData();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
heldItem.locked = result == ProcessingResult.HOLD;
|
|
||||||
if (heldItem.locked != wasLocked || !previousItem.equals(heldItem.stack, false))
|
|
||||||
sendData();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean handleBeltFunnelOutput() {
|
|
||||||
for (int slot = 0; slot < processingOutputBuffer.getSlots(); slot++) {
|
|
||||||
ItemStack previousItem = processingOutputBuffer.getStackInSlot(slot);
|
|
||||||
if (previousItem.isEmpty())
|
|
||||||
continue;
|
|
||||||
ItemStack afterInsert =
|
|
||||||
getBehaviour(DirectBeltInputBehaviour.TYPE).tryExportingToBeltFunnel(previousItem, null);
|
|
||||||
if (afterInsert == null)
|
|
||||||
return false;
|
|
||||||
if (previousItem.getCount() != afterInsert.getCount()) {
|
|
||||||
processingOutputBuffer.setStackInSlot(slot, afterInsert);
|
|
||||||
notifyUpdate();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack previousItem = heldItem.stack;
|
|
||||||
ItemStack afterInsert =
|
|
||||||
getBehaviour(DirectBeltInputBehaviour.TYPE).tryExportingToBeltFunnel(previousItem, null);
|
|
||||||
if (afterInsert == null)
|
|
||||||
return false;
|
|
||||||
if (previousItem.getCount() != afterInsert.getCount()) {
|
|
||||||
if (afterInsert.isEmpty())
|
|
||||||
heldItem = null;
|
|
||||||
else
|
|
||||||
heldItem.stack = afterInsert;
|
|
||||||
notifyUpdate();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
super.remove();
|
|
||||||
if (lazyItemHandler != null)
|
|
||||||
lazyItemHandler.invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(CompoundNBT compound, boolean clientPacket) {
|
|
||||||
if (heldItem != null)
|
|
||||||
compound.put("HeldItem", heldItem.serializeNBT());
|
|
||||||
compound.put("OutputBuffer", processingOutputBuffer.serializeNBT());
|
|
||||||
super.write(compound, clientPacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void read(CompoundNBT compound, boolean clientPacket) {
|
|
||||||
heldItem = null;
|
|
||||||
if (compound.contains("HeldItem"))
|
|
||||||
heldItem = TransportedItemStack.read(compound.getCompound("HeldItem"));
|
|
||||||
processingOutputBuffer.deserializeNBT(compound.getCompound("OutputBuffer"));
|
|
||||||
super.read(compound, clientPacket);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||||
behaviours.add(new DirectBeltInputBehaviour(this).allowingBeltFunnels()
|
behaviours.add(depotBehaviour = new DepotBehaviour(this));
|
||||||
.setInsertionHandler(this::tryInsertingFromSide));
|
depotBehaviour.addSubBehaviours(behaviours);
|
||||||
transportedHandler = new TransportedItemStackHandlerBehaviour(this, this::applyToAllItems)
|
|
||||||
.withStackPlacement(this::getWorldPositionOf);
|
|
||||||
behaviours.add(transportedHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack getHeldItemStack() {
|
|
||||||
return heldItem == null ? ItemStack.EMPTY : heldItem.stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeldItem(TransportedItemStack heldItem) {
|
|
||||||
this.heldItem = heldItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCenteredHeldItem(TransportedItemStack heldItem) {
|
|
||||||
this.heldItem = heldItem;
|
|
||||||
this.heldItem.beltPosition = 0.5f;
|
|
||||||
this.heldItem.prevBeltPosition = 0.5f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||||
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||||
return lazyItemHandler.cast();
|
return depotBehaviour.getItemCapability(cap, side);
|
||||||
return super.getCapability(cap, side);
|
return super.getCapability(cap, side);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack tryInsertingFromSide(TransportedItemStack transportedStack, Direction side, boolean simulate) {
|
|
||||||
ItemStack inserted = transportedStack.stack;
|
|
||||||
ItemStack empty = ItemStack.EMPTY;
|
|
||||||
|
|
||||||
if (!getHeldItemStack().isEmpty())
|
|
||||||
return inserted;
|
|
||||||
if (!isOutputEmpty())
|
|
||||||
return inserted;
|
|
||||||
if (simulate)
|
|
||||||
return empty;
|
|
||||||
|
|
||||||
transportedStack = transportedStack.copy();
|
|
||||||
transportedStack.beltPosition = side.getAxis()
|
|
||||||
.isVertical() ? .5f : 0;
|
|
||||||
transportedStack.insertedFrom = side;
|
|
||||||
transportedStack.prevSideOffset = transportedStack.sideOffset;
|
|
||||||
transportedStack.prevBeltPosition = transportedStack.beltPosition;
|
|
||||||
setHeldItem(transportedStack);
|
|
||||||
markDirty();
|
|
||||||
sendData();
|
|
||||||
|
|
||||||
return empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void applyToAllItems(float maxDistanceFromCentre,
|
|
||||||
Function<TransportedItemStack, TransportedResult> processFunction) {
|
|
||||||
if (heldItem == null)
|
|
||||||
return;
|
|
||||||
if (.5f - heldItem.beltPosition > maxDistanceFromCentre)
|
|
||||||
return;
|
|
||||||
|
|
||||||
boolean dirty = false;
|
|
||||||
TransportedItemStack transportedItemStack = heldItem;
|
|
||||||
ItemStack stackBefore = transportedItemStack.stack.copy();
|
|
||||||
TransportedResult result = processFunction.apply(transportedItemStack);
|
|
||||||
if (result == null || result.didntChangeFrom(stackBefore))
|
|
||||||
return;
|
|
||||||
|
|
||||||
dirty = true;
|
|
||||||
heldItem = null;
|
|
||||||
if (result.hasHeldOutput())
|
|
||||||
setCenteredHeldItem(result.getHeldOutput());
|
|
||||||
|
|
||||||
for (TransportedItemStack added : result.getOutputs()) {
|
|
||||||
if (getHeldItemStack().isEmpty()) {
|
|
||||||
setCenteredHeldItem(added);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ItemStack remainder = ItemHandlerHelper.insertItemStacked(processingOutputBuffer, added.stack, false);
|
|
||||||
Vec3d vec = VecHelper.getCenterOf(pos);
|
|
||||||
InventoryHelper.spawnItemStack(world, vec.x, vec.y + .5f, vec.z, remainder);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dirty) {
|
|
||||||
markDirty();
|
|
||||||
sendData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOutputEmpty() {
|
|
||||||
for (int i = 0; i < processingOutputBuffer.getSlots(); i++)
|
|
||||||
if (!processingOutputBuffer.getStackInSlot(i)
|
|
||||||
.isEmpty())
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Vec3d getWorldPositionOf(TransportedItemStack transported) {
|
|
||||||
Vec3d offsetVec = new Vec3d(.5f, 14 / 16f, .5f);
|
|
||||||
return offsetVec.add(new Vec3d(pos));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.AllShapes;
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorTileEntity.State;
|
||||||
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
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.util.math.Vec3d;
|
||||||
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.IWorldReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class EjectorBlock extends HorizontalKineticBlock implements ITE<EjectorTileEntity> {
|
||||||
|
|
||||||
|
public EjectorBlock(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getShape(BlockState p_220053_1_, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||||
|
ISelectionContext p_220053_4_) {
|
||||||
|
return AllShapes.DEPOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getSlipperiness(BlockState state, IWorldReader world, BlockPos pos, Entity entity) {
|
||||||
|
return getTileEntityOptional(world, pos).filter(ete -> ete.state == State.LAUNCHING)
|
||||||
|
.map($ -> 1f)
|
||||||
|
.orElse(super.getSlipperiness(state, world, pos, entity));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFallenUpon(World p_180658_1_, BlockPos p_180658_2_, Entity p_180658_3_, float p_180658_4_) {
|
||||||
|
Optional<EjectorTileEntity> tileEntityOptional = getTileEntityOptional(p_180658_1_, p_180658_2_);
|
||||||
|
if (tileEntityOptional.isPresent()) {
|
||||||
|
p_180658_3_.handleFallDamage(p_180658_4_, 0.0F);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.onFallenUpon(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLanded(IBlockReader worldIn, Entity entityIn) {
|
||||||
|
super.onLanded(worldIn, entityIn);
|
||||||
|
BlockPos position = entityIn.getPosition();
|
||||||
|
if (!AllBlocks.WEIGHTED_EJECTOR.has(worldIn.getBlockState(position)))
|
||||||
|
return;
|
||||||
|
if (!entityIn.isAlive())
|
||||||
|
return;
|
||||||
|
if (entityIn instanceof ItemEntity) {
|
||||||
|
SharedDepotBlockMethods.onLanded(worldIn, entityIn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<EjectorTileEntity> teProvider = getTileEntityOptional(worldIn, position);
|
||||||
|
if (!teProvider.isPresent())
|
||||||
|
return;
|
||||||
|
|
||||||
|
EjectorTileEntity ejectorTileEntity = teProvider.get();
|
||||||
|
if (ejectorTileEntity.getState() == State.RETRACTING)
|
||||||
|
return;
|
||||||
|
if (ejectorTileEntity.launcher.getHorizontalDistance() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (entityIn.onGround) {
|
||||||
|
entityIn.onGround = false;
|
||||||
|
Vec3d center = VecHelper.getCenterOf(position)
|
||||||
|
.add(0, 7 / 16f, 0);
|
||||||
|
Vec3d positionVec = entityIn.getPositionVec();
|
||||||
|
double diff = center.distanceTo(positionVec);
|
||||||
|
entityIn.setMotion(0, -0.125, 0);
|
||||||
|
Vec3d vec = center.add(positionVec)
|
||||||
|
.scale(.5f);
|
||||||
|
if (diff > 4 / 16f) {
|
||||||
|
entityIn.setPosition(vec.x, vec.y, vec.z);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ejectorTileEntity.launchAll();
|
||||||
|
ejectorTileEntity.notifyUpdate();
|
||||||
|
if (entityIn.world.isRemote)
|
||||||
|
AllPackets.channel.sendToServer(new EjectorTriggerPacket(ejectorTileEntity.getPos()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||||
|
BlockRayTraceResult ray) {
|
||||||
|
if (AllItems.WRENCH.isIn(player.getHeldItem(hand)))
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
return SharedDepotBlockMethods.onUse(state, world, pos, player, hand, ray);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||||
|
withTileEntityDo(worldIn, pos, EjectorTileEntity::dropFlyingItems);
|
||||||
|
SharedDepotBlockMethods.onReplaced(state, worldIn, pos, newState, isMoving);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Axis getRotationAxis(BlockState state) {
|
||||||
|
return state.get(HORIZONTAL_FACING)
|
||||||
|
.rotateY()
|
||||||
|
.getAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
||||||
|
return getRotationAxis(state) == face.getAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return AllTileEntities.WEIGHTED_EJECTOR.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<EjectorTileEntity> getTileEntityClass() {
|
||||||
|
return EjectorTileEntity.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasComparatorInputOverride(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
||||||
|
return SharedDepotBlockMethods.getComparatorInputOverride(blockState, worldIn, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
|
public class EjectorElytraPacket extends SimplePacketBase {
|
||||||
|
|
||||||
|
private BlockPos pos;
|
||||||
|
|
||||||
|
public EjectorElytraPacket(BlockPos pos) {
|
||||||
|
this.pos = pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EjectorElytraPacket(PacketBuffer buffer) {
|
||||||
|
pos = buffer.readBlockPos();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(PacketBuffer buffer) {
|
||||||
|
buffer.writeBlockPos(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(Supplier<Context> context) {
|
||||||
|
context.get()
|
||||||
|
.enqueueWork(() -> {
|
||||||
|
ServerPlayerEntity player = context.get()
|
||||||
|
.getSender();
|
||||||
|
if (player == null)
|
||||||
|
return;
|
||||||
|
World world = player.world;
|
||||||
|
if (world == null || !world.isBlockPresent(pos))
|
||||||
|
return;
|
||||||
|
TileEntity tileEntity = world.getTileEntity(pos);
|
||||||
|
if (tileEntity instanceof EjectorTileEntity)
|
||||||
|
((EjectorTileEntity) tileEntity).deployElytra(player);
|
||||||
|
});
|
||||||
|
context.get()
|
||||||
|
.setPacketHandled(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
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.util.ActionResultType;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
|
@EventBusSubscriber
|
||||||
|
public class EjectorItem extends BlockItem {
|
||||||
|
|
||||||
|
public EjectorItem(Block p_i48527_1_, Properties p_i48527_2_) {
|
||||||
|
super(p_i48527_1_, p_i48527_2_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onItemUse(ItemUseContext ctx) {
|
||||||
|
PlayerEntity player = ctx.getPlayer();
|
||||||
|
if (player != null && player.isSneaking())
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
return super.onItemUse(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState getStateForPlacement(BlockItemUseContext p_195945_1_) {
|
||||||
|
BlockState stateForPlacement = super.getStateForPlacement(p_195945_1_);
|
||||||
|
return stateForPlacement;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean onBlockPlaced(BlockPos pos, World world, PlayerEntity p_195943_3_, ItemStack p_195943_4_,
|
||||||
|
BlockState p_195943_5_) {
|
||||||
|
if (world.isRemote)
|
||||||
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> EjectorTargetHandler.flushSettings(pos));
|
||||||
|
return super.onBlockPlaced(pos, world, p_195943_3_, p_195943_4_, p_195943_5_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayerBreakBlockWhileHolding(BlockState state, World world, BlockPos pos,
|
||||||
|
PlayerEntity p_195938_4_) {
|
||||||
|
return !p_195938_4_.isSneaking();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
|
public class EjectorPlacementPacket extends SimplePacketBase {
|
||||||
|
|
||||||
|
private int h, v;
|
||||||
|
private BlockPos pos;
|
||||||
|
private Direction facing;
|
||||||
|
|
||||||
|
public EjectorPlacementPacket(int h, int v, BlockPos pos, Direction facing) {
|
||||||
|
this.h = h;
|
||||||
|
this.v = v;
|
||||||
|
this.pos = pos;
|
||||||
|
this.facing = facing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EjectorPlacementPacket(PacketBuffer buffer) {
|
||||||
|
h = buffer.readInt();
|
||||||
|
v = buffer.readInt();
|
||||||
|
pos = buffer.readBlockPos();
|
||||||
|
facing = Direction.byIndex(buffer.readVarInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(PacketBuffer buffer) {
|
||||||
|
buffer.writeInt(h);
|
||||||
|
buffer.writeInt(v);
|
||||||
|
buffer.writeBlockPos(pos);
|
||||||
|
buffer.writeVarInt(facing.getIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(Supplier<Context> context) {
|
||||||
|
context.get()
|
||||||
|
.enqueueWork(() -> {
|
||||||
|
ServerPlayerEntity player = context.get()
|
||||||
|
.getSender();
|
||||||
|
if (player == null)
|
||||||
|
return;
|
||||||
|
World world = player.world;
|
||||||
|
if (world == null || !world.isBlockPresent(pos))
|
||||||
|
return;
|
||||||
|
TileEntity tileEntity = world.getTileEntity(pos);
|
||||||
|
BlockState state = world.getBlockState(pos);
|
||||||
|
if (tileEntity instanceof EjectorTileEntity)
|
||||||
|
((EjectorTileEntity) tileEntity).setTarget(h, v);
|
||||||
|
if (AllBlocks.WEIGHTED_EJECTOR.has(state))
|
||||||
|
world.setBlockState(pos, state.with(EjectorBlock.HORIZONTAL_FACING, facing));
|
||||||
|
});
|
||||||
|
context.get()
|
||||||
|
.setPacketHandled(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||||
|
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.render.SuperByteBuffer;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.IntAttached;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType;
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class EjectorRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
|
public EjectorRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
|
super(dispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isGlobalRenderer(KineticTileEntity p_188185_1_) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
|
int light, int overlay) {
|
||||||
|
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
|
||||||
|
|
||||||
|
EjectorTileEntity ejector = (EjectorTileEntity) te;
|
||||||
|
SuperByteBuffer model = AllBlockPartials.EJECTOR_TOP.renderOn(te.getBlockState());
|
||||||
|
IVertexBuilder vertexBuilder = buffer.getBuffer(RenderType.getSolid());
|
||||||
|
Vec3d rotationOffset = VecHelper.voxelSpace(0, 11.25, 0.75);
|
||||||
|
float lidProgress = ((EjectorTileEntity) te).getLidProgress(partialTicks);
|
||||||
|
float angle = lidProgress * 70;
|
||||||
|
|
||||||
|
applyLidAngle(te, rotationOffset, angle, model.matrixStacker());
|
||||||
|
model.light(light)
|
||||||
|
.renderInto(ms, vertexBuilder);
|
||||||
|
|
||||||
|
MatrixStacker msr = MatrixStacker.of(ms);
|
||||||
|
|
||||||
|
for (IntAttached<ItemStack> intAttached : ejector.launchedItems) {
|
||||||
|
ms.push();
|
||||||
|
float time = intAttached.getFirst() + partialTicks;
|
||||||
|
Vec3d launchedItemLocation = ejector.getLaunchedItemLocation(time);
|
||||||
|
msr.translate(launchedItemLocation.subtract(new Vec3d(te.getPos())));
|
||||||
|
Vec3d itemRotOffset = VecHelper.voxelSpace(0,3,0);
|
||||||
|
msr.translate(itemRotOffset);
|
||||||
|
msr.rotateY(AngleHelper.horizontalAngle(ejector.getFacing()));
|
||||||
|
msr.rotateX(time * 40);
|
||||||
|
msr.translateBack(itemRotOffset);
|
||||||
|
Minecraft.getInstance()
|
||||||
|
.getItemRenderer()
|
||||||
|
.renderItem(intAttached.getValue(), TransformType.GROUND, light, overlay, ms, buffer);
|
||||||
|
ms.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
DepotBehaviour behaviour = te.getBehaviour(DepotBehaviour.TYPE);
|
||||||
|
if (behaviour == null || behaviour.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ms.push();
|
||||||
|
applyLidAngle(te, rotationOffset, angle, msr);
|
||||||
|
msr.centre()
|
||||||
|
.rotateY(-180 - AngleHelper.horizontalAngle(te.getBlockState()
|
||||||
|
.get(EjectorBlock.HORIZONTAL_FACING)))
|
||||||
|
.unCentre();
|
||||||
|
DepotRenderer.renderItemsOf(te, partialTicks, ms, buffer, light, overlay, behaviour);
|
||||||
|
ms.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void applyLidAngle(KineticTileEntity te, Vec3d rotationOffset, float angle, MatrixStacker matrixStacker) {
|
||||||
|
matrixStacker.centre()
|
||||||
|
.rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState()
|
||||||
|
.get(EjectorBlock.HORIZONTAL_FACING)))
|
||||||
|
.unCentre()
|
||||||
|
.translate(rotationOffset)
|
||||||
|
.rotateX(-angle)
|
||||||
|
.translateBack(rotationOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
||||||
|
return shaft(getRotationAxisOf(te));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,269 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.CreateClient;
|
||||||
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
|
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||||
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.particles.RedstoneParticleData;
|
||||||
|
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.Direction.AxisDirection;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
|
import net.minecraft.util.math.RayTraceResult.Type;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
|
@EventBusSubscriber(value = Dist.CLIENT)
|
||||||
|
public class EjectorTargetHandler {
|
||||||
|
|
||||||
|
static BlockPos currentSelection;
|
||||||
|
static ItemStack currentItem;
|
||||||
|
static long lastHoveredBlockPos = -1;
|
||||||
|
static EntityLauncher launcher;
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void rightClickingBlocksSelectsThem(PlayerInteractEvent.RightClickBlock event) {
|
||||||
|
if (currentItem == null)
|
||||||
|
return;
|
||||||
|
BlockPos pos = event.getPos();
|
||||||
|
World world = event.getWorld();
|
||||||
|
if (!world.isRemote)
|
||||||
|
return;
|
||||||
|
PlayerEntity player = event.getPlayer();
|
||||||
|
if (player == null || player.isSpectator() || !player.isSneaking())
|
||||||
|
return;
|
||||||
|
|
||||||
|
String key = "weighted_ejector.target_set";
|
||||||
|
TextFormatting colour = TextFormatting.GOLD;
|
||||||
|
player.sendStatusMessage(new StringTextComponent(Lang.translate(key)).applyTextStyle(colour), true);
|
||||||
|
currentSelection = pos;
|
||||||
|
launcher = null;
|
||||||
|
event.setCanceled(true);
|
||||||
|
event.setCancellationResult(ActionResultType.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void leftClickingBlocksDeselectsThem(PlayerInteractEvent.LeftClickBlock event) {
|
||||||
|
if (currentItem == null)
|
||||||
|
return;
|
||||||
|
if (!event.getWorld().isRemote)
|
||||||
|
return;
|
||||||
|
if (!event.getPlayer()
|
||||||
|
.isSneaking())
|
||||||
|
return;
|
||||||
|
BlockPos pos = event.getPos();
|
||||||
|
if (pos.equals(currentSelection)) {
|
||||||
|
currentSelection = null;
|
||||||
|
launcher = null;
|
||||||
|
event.setCanceled(true);
|
||||||
|
event.setCancellationResult(ActionResultType.SUCCESS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void flushSettings(BlockPos pos) {
|
||||||
|
if (currentItem == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int h = 0;
|
||||||
|
int v = 0;
|
||||||
|
|
||||||
|
ClientPlayerEntity player = Minecraft.getInstance().player;
|
||||||
|
String key = "weighted_ejector.target_not_valid";
|
||||||
|
TextFormatting colour = TextFormatting.WHITE;
|
||||||
|
|
||||||
|
if (currentSelection == null)
|
||||||
|
key = "weighted_ejector.no_target";
|
||||||
|
|
||||||
|
Direction validTargetDirection = getValidTargetDirection(pos);
|
||||||
|
if (validTargetDirection == null) {
|
||||||
|
player.sendStatusMessage(new StringTextComponent(Lang.translate(key)).applyTextStyle(colour), true);
|
||||||
|
currentItem = null;
|
||||||
|
currentSelection = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
key = "weighted_ejector.targeting";
|
||||||
|
colour = TextFormatting.GREEN;
|
||||||
|
|
||||||
|
player.sendStatusMessage(new StringTextComponent(
|
||||||
|
Lang.translate(key, currentSelection.getX(), currentSelection.getY(), currentSelection.getZ()))
|
||||||
|
.applyTextStyle(colour),
|
||||||
|
true);
|
||||||
|
|
||||||
|
BlockPos diff = pos.subtract(currentSelection);
|
||||||
|
h = Math.abs(diff.getX() + diff.getZ());
|
||||||
|
v = -diff.getY();
|
||||||
|
|
||||||
|
AllPackets.channel.sendToServer(new EjectorPlacementPacket(h, v, pos, validTargetDirection));
|
||||||
|
currentSelection = null;
|
||||||
|
currentItem = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Direction getValidTargetDirection(BlockPos pos) {
|
||||||
|
if (currentSelection == null)
|
||||||
|
return null;
|
||||||
|
if (VecHelper.onSameAxis(pos, currentSelection, Axis.Y))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
int xDiff = currentSelection.getX() - pos.getX();
|
||||||
|
int zDiff = currentSelection.getZ() - pos.getZ();
|
||||||
|
int max = AllConfigs.SERVER.kinetics.maxEjectorDistance.get();
|
||||||
|
|
||||||
|
if (Math.abs(xDiff) > max || Math.abs(zDiff) > max)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (xDiff == 0)
|
||||||
|
return Direction.getFacingFromAxis(zDiff < 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE, Axis.Z);
|
||||||
|
if (zDiff == 0)
|
||||||
|
return Direction.getFacingFromAxis(xDiff < 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE, Axis.X);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void tick() {
|
||||||
|
PlayerEntity player = Minecraft.getInstance().player;
|
||||||
|
|
||||||
|
if (player == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ItemStack heldItemMainhand = player.getHeldItemMainhand();
|
||||||
|
if (!AllBlocks.WEIGHTED_EJECTOR.isIn(heldItemMainhand)) {
|
||||||
|
currentItem = null;
|
||||||
|
} else {
|
||||||
|
if (heldItemMainhand != currentItem) {
|
||||||
|
currentSelection = null;
|
||||||
|
currentItem = heldItemMainhand;
|
||||||
|
}
|
||||||
|
drawOutline(currentSelection);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkForWrench(heldItemMainhand);
|
||||||
|
drawArc();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static void drawArc() {
|
||||||
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
boolean wrench = AllItems.WRENCH.isIn(mc.player.getHeldItemMainhand());
|
||||||
|
|
||||||
|
if (currentSelection == null)
|
||||||
|
return;
|
||||||
|
if (currentItem == null && !wrench)
|
||||||
|
return;
|
||||||
|
|
||||||
|
RayTraceResult objectMouseOver = mc.objectMouseOver;
|
||||||
|
if (!(objectMouseOver instanceof BlockRayTraceResult))
|
||||||
|
return;
|
||||||
|
BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult) objectMouseOver;
|
||||||
|
if (blockRayTraceResult.getType() == Type.MISS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BlockPos pos = blockRayTraceResult.getPos();
|
||||||
|
if (!wrench)
|
||||||
|
pos = pos.offset(blockRayTraceResult.getFace());
|
||||||
|
|
||||||
|
int xDiff = currentSelection.getX() - pos.getX();
|
||||||
|
int yDiff = currentSelection.getY() - pos.getY();
|
||||||
|
int zDiff = currentSelection.getZ() - pos.getZ();
|
||||||
|
int validX = Math.abs(zDiff) > Math.abs(xDiff) ? 0 : xDiff;
|
||||||
|
int validZ = Math.abs(zDiff) < Math.abs(xDiff) ? 0 : zDiff;
|
||||||
|
|
||||||
|
BlockPos validPos = currentSelection.add(validX, yDiff, validZ);
|
||||||
|
Direction d = getValidTargetDirection(validPos);
|
||||||
|
if (d == null)
|
||||||
|
return;
|
||||||
|
if (launcher == null || lastHoveredBlockPos != pos.toLong()) {
|
||||||
|
lastHoveredBlockPos = pos.toLong();
|
||||||
|
launcher = new EntityLauncher(Math.abs(validX + validZ), yDiff);
|
||||||
|
}
|
||||||
|
|
||||||
|
double totalFlyingTicks = launcher.getTotalFlyingTicks() + 3;
|
||||||
|
int segments = (((int) totalFlyingTicks) / 3) + 1;
|
||||||
|
double tickOffset = totalFlyingTicks / segments;
|
||||||
|
boolean valid = xDiff == validX && zDiff == validZ;
|
||||||
|
int intColor = valid ? 0x9ede73 : 0xff7171;
|
||||||
|
Vec3d color = ColorHelper.getRGB(intColor);
|
||||||
|
RedstoneParticleData data = new RedstoneParticleData((float) color.x, (float) color.y, (float) color.z, 1);
|
||||||
|
ClientWorld world = mc.world;
|
||||||
|
|
||||||
|
AxisAlignedBB bb = new AxisAlignedBB(0, 0, 0, 1, 0, 1).offset(currentSelection.add(-validX, -yDiff, -validZ));
|
||||||
|
CreateClient.outliner.chaseAABB("valid", bb)
|
||||||
|
.colored(intColor)
|
||||||
|
.lineWidth(1 / 16f);
|
||||||
|
|
||||||
|
for (int i = 0; i < segments; i++) {
|
||||||
|
double ticks = ((AnimationTickHolder.getRenderTime() / 3) % tickOffset) + i * tickOffset;
|
||||||
|
Vec3d vec = launcher.getGlobalPos(ticks, d, pos)
|
||||||
|
.add(xDiff - validX, 0, zDiff - validZ);
|
||||||
|
world.addParticle(data, vec.x, vec.y, vec.z, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkForWrench(ItemStack heldItem) {
|
||||||
|
if (!AllItems.WRENCH.isIn(heldItem))
|
||||||
|
return;
|
||||||
|
RayTraceResult objectMouseOver = Minecraft.getInstance().objectMouseOver;
|
||||||
|
if (!(objectMouseOver instanceof BlockRayTraceResult))
|
||||||
|
return;
|
||||||
|
BlockRayTraceResult result = (BlockRayTraceResult) objectMouseOver;
|
||||||
|
BlockPos pos = result.getPos();
|
||||||
|
|
||||||
|
TileEntity te = Minecraft.getInstance().world.getTileEntity(pos);
|
||||||
|
if (!(te instanceof EjectorTileEntity)) {
|
||||||
|
lastHoveredBlockPos = -1;
|
||||||
|
currentSelection = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastHoveredBlockPos == -1 || lastHoveredBlockPos != pos.toLong()) {
|
||||||
|
EjectorTileEntity ejector = (EjectorTileEntity) te;
|
||||||
|
if (!ejector.getTargetPosition()
|
||||||
|
.equals(ejector.getPos()))
|
||||||
|
currentSelection = ejector.getTargetPosition();
|
||||||
|
lastHoveredBlockPos = pos.toLong();
|
||||||
|
launcher = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastHoveredBlockPos != -1)
|
||||||
|
drawOutline(currentSelection);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void drawOutline(BlockPos selection) {
|
||||||
|
World world = Minecraft.getInstance().world;
|
||||||
|
if (currentSelection == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BlockPos pos = currentSelection;
|
||||||
|
BlockState state = world.getBlockState(pos);
|
||||||
|
VoxelShape shape = state.getShape(world, pos);
|
||||||
|
AxisAlignedBB boundingBox = shape.isEmpty() ? new AxisAlignedBB(BlockPos.ZERO) : shape.getBoundingBox();
|
||||||
|
CreateClient.outliner.showAABB("target", boundingBox.offset(pos))
|
||||||
|
.colored(0xffcb74)
|
||||||
|
.lineWidth(1 / 16f);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,496 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||||
|
import com.simibubi.create.content.logistics.block.funnel.AbstractFunnelBlock;
|
||||||
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.IntAttached;
|
||||||
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||||
|
import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.inventory.EquipmentSlotType;
|
||||||
|
import net.minecraft.item.ElytraItem;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.network.datasync.EntityDataManager;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.SoundCategory;
|
||||||
|
import net.minecraft.util.SoundEvents;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
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.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.util.Constants.NBT;
|
||||||
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
|
|
||||||
|
public class EjectorTileEntity extends KineticTileEntity {
|
||||||
|
|
||||||
|
List<IntAttached<ItemStack>> launchedItems;
|
||||||
|
ScrollValueBehaviour maxStackSize;
|
||||||
|
DepotBehaviour depotBehaviour;
|
||||||
|
EntityLauncher launcher;
|
||||||
|
LerpedFloat lidProgress;
|
||||||
|
State state;
|
||||||
|
|
||||||
|
public enum State {
|
||||||
|
CHARGED, LAUNCHING, RETRACTING;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EjectorTileEntity(TileEntityType<?> typeIn) {
|
||||||
|
super(typeIn);
|
||||||
|
launcher = new EntityLauncher(1, 0);
|
||||||
|
lidProgress = LerpedFloat.linear()
|
||||||
|
.startWithValue(1);
|
||||||
|
state = State.RETRACTING;
|
||||||
|
launchedItems = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||||
|
super.addBehaviours(behaviours);
|
||||||
|
behaviours.add(depotBehaviour = new DepotBehaviour(this));
|
||||||
|
|
||||||
|
maxStackSize = new ScrollValueBehaviour(Lang.translate("weighted_ejector.stack_size"), this, new EjectorSlot())
|
||||||
|
.between(0, 64)
|
||||||
|
.withFormatter(i -> i == 0 ? "*" : String.valueOf(i))
|
||||||
|
.onlyActiveWhen(() -> state == State.CHARGED)
|
||||||
|
.requiresWrench();
|
||||||
|
behaviours.add(maxStackSize);
|
||||||
|
|
||||||
|
depotBehaviour.maxStackSize = () -> maxStackSize.getValue();
|
||||||
|
depotBehaviour.canAcceptItems = () -> state == State.CHARGED;
|
||||||
|
depotBehaviour.canFunnelsPullFrom = side -> side != getFacing();
|
||||||
|
depotBehaviour.enableMerging();
|
||||||
|
depotBehaviour.addSubBehaviours(behaviours);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void launchAll() {
|
||||||
|
if (state != State.CHARGED && !(world.isRemote && state == State.LAUNCHING))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Direction facing = getFacing();
|
||||||
|
List<Entity> entities =
|
||||||
|
world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos).grow(-1 / 16f, 0, -1 / 16f));
|
||||||
|
|
||||||
|
// Launch Items
|
||||||
|
if (!world.isRemote)
|
||||||
|
launchItems();
|
||||||
|
|
||||||
|
// Launch Entities
|
||||||
|
for (Entity entity : entities) {
|
||||||
|
boolean isPlayerEntity = entity instanceof PlayerEntity;
|
||||||
|
if (!entity.isAlive())
|
||||||
|
continue;
|
||||||
|
if (entity instanceof ItemEntity)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
entity.onGround = false;
|
||||||
|
|
||||||
|
if (isPlayerEntity != world.isRemote)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
entity.setPosition(pos.getX() + .5f, pos.getY() + 1, pos.getZ() + .5f);
|
||||||
|
launcher.applyMotion(entity, facing);
|
||||||
|
|
||||||
|
if (!isPlayerEntity)
|
||||||
|
continue;
|
||||||
|
PlayerEntity playerEntity = (PlayerEntity) entity;
|
||||||
|
if (!(playerEntity.getItemStackFromSlot(EquipmentSlotType.CHEST)
|
||||||
|
.getItem() instanceof ElytraItem))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
playerEntity.rotationYaw = facing.getHorizontalAngle();
|
||||||
|
playerEntity.rotationPitch = -35;
|
||||||
|
playerEntity.setMotion(playerEntity.getMotion()
|
||||||
|
.scale(.75f));
|
||||||
|
deployElytra(playerEntity);
|
||||||
|
AllPackets.channel.sendToServer(new EjectorElytraPacket(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
lidProgress.chase(1, .8f, Chaser.EXP);
|
||||||
|
state = State.LAUNCHING;
|
||||||
|
|
||||||
|
if (!world.isRemote) {
|
||||||
|
world.playSound(null, pos, SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundCategory.BLOCKS, .5f, 1f);
|
||||||
|
world.playSound(null, pos, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, .125f, 1.4f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deployElytra(PlayerEntity playerEntity) {
|
||||||
|
EntityHack.setElytraFlying(playerEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void launchItems() {
|
||||||
|
ItemStack heldItemStack = depotBehaviour.getHeldItemStack();
|
||||||
|
Direction funnelFacing = getFacing().getOpposite();
|
||||||
|
|
||||||
|
if (AbstractFunnelBlock.getFunnelFacing(world.getBlockState(pos.up())) == funnelFacing) {
|
||||||
|
DirectBeltInputBehaviour directOutput = getBehaviour(DirectBeltInputBehaviour.TYPE);
|
||||||
|
|
||||||
|
if (depotBehaviour.heldItem != null) {
|
||||||
|
ItemStack remainder = directOutput.tryExportingToBeltFunnel(heldItemStack, funnelFacing, false);
|
||||||
|
if (remainder == null)
|
||||||
|
;
|
||||||
|
else if (remainder.isEmpty())
|
||||||
|
depotBehaviour.removeHeldItem();
|
||||||
|
else if (!remainder.isItemEqual(heldItemStack))
|
||||||
|
depotBehaviour.heldItem.stack = remainder;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Iterator<TransportedItemStack> iterator = depotBehaviour.incoming.iterator(); iterator.hasNext();) {
|
||||||
|
TransportedItemStack transportedItemStack = iterator.next();
|
||||||
|
ItemStack stack = transportedItemStack.stack;
|
||||||
|
ItemStack remainder = directOutput.tryExportingToBeltFunnel(stack, funnelFacing, false);
|
||||||
|
if (remainder == null)
|
||||||
|
;
|
||||||
|
else if (remainder.isEmpty())
|
||||||
|
iterator.remove();
|
||||||
|
else if (!remainder.isItemEqual(stack))
|
||||||
|
transportedItemStack.stack = remainder;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStackHandler outputs = depotBehaviour.processingOutputBuffer;
|
||||||
|
for (int i = 0; i < outputs.getSlots(); i++) {
|
||||||
|
ItemStack remainder =
|
||||||
|
directOutput.tryExportingToBeltFunnel(outputs.getStackInSlot(i), funnelFacing, false);
|
||||||
|
if (remainder != null)
|
||||||
|
outputs.setStackInSlot(i, remainder);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (depotBehaviour.heldItem != null) {
|
||||||
|
launchedItems.add(IntAttached.withZero(heldItemStack));
|
||||||
|
depotBehaviour.removeHeldItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (TransportedItemStack transportedItemStack : depotBehaviour.incoming)
|
||||||
|
launchedItems.add(IntAttached.withZero(transportedItemStack.stack));
|
||||||
|
depotBehaviour.incoming.clear();
|
||||||
|
|
||||||
|
ItemStackHandler outputs = depotBehaviour.processingOutputBuffer;
|
||||||
|
for (int i = 0; i < outputs.getSlots(); i++) {
|
||||||
|
ItemStack extractItem = outputs.extractItem(i, 64, false);
|
||||||
|
if (!extractItem.isEmpty())
|
||||||
|
launchedItems.add(IntAttached.withZero(extractItem));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Direction getFacing() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!AllBlocks.WEIGHTED_EJECTOR.has(blockState))
|
||||||
|
return Direction.UP;
|
||||||
|
Direction facing = blockState.get(EjectorBlock.HORIZONTAL_FACING);
|
||||||
|
return facing;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
|
||||||
|
boolean doLogic = !world.isRemote || isVirtual();
|
||||||
|
State prevState = state;
|
||||||
|
|
||||||
|
float maxTime = Math.max(3, (float) launcher.getTotalFlyingTicks());
|
||||||
|
|
||||||
|
for (Iterator<IntAttached<ItemStack>> iterator = launchedItems.iterator(); iterator.hasNext();) {
|
||||||
|
IntAttached<ItemStack> intAttached = iterator.next();
|
||||||
|
if (intAttached.exceeds((int) maxTime)) {
|
||||||
|
placeItemAtTarget(doLogic, maxTime, intAttached);
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
intAttached.increment();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == State.LAUNCHING) {
|
||||||
|
lidProgress.chase(1, .8f, Chaser.EXP);
|
||||||
|
lidProgress.tickChaser();
|
||||||
|
if (lidProgress.getValue() > 1 - 1 / 16f && doLogic) {
|
||||||
|
state = State.RETRACTING;
|
||||||
|
lidProgress.setValue(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == State.CHARGED) {
|
||||||
|
lidProgress.setValue(0);
|
||||||
|
if (doLogic)
|
||||||
|
ejectIfTriggered();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == State.RETRACTING) {
|
||||||
|
float value = MathHelper.clamp(lidProgress.getValue() - getWindUpSpeed(), 0, 1);
|
||||||
|
lidProgress.setValue(value);
|
||||||
|
|
||||||
|
int soundRate = (int) (1 / (getWindUpSpeed() * 5)) + 1;
|
||||||
|
float volume = .125f;
|
||||||
|
float pitch = 1.5f - lidProgress.getValue();
|
||||||
|
if (((int) world.getGameTime()) % soundRate == 0 && doLogic)
|
||||||
|
world.playSound(null, pos, SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF, SoundCategory.BLOCKS, volume,
|
||||||
|
pitch);
|
||||||
|
|
||||||
|
if (lidProgress.getValue() == 0 && doLogic) {
|
||||||
|
state = State.CHARGED;
|
||||||
|
lidProgress.setValue(0);
|
||||||
|
|
||||||
|
List<Entity> entities =
|
||||||
|
world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos).grow(-1 / 16f, 0, -1 / 16f));
|
||||||
|
for (Entity entity : entities)
|
||||||
|
if (!(entity instanceof PlayerEntity))
|
||||||
|
entity.setPosition(entity.getX(), entity.getY() + volume, entity.getZ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state != prevState)
|
||||||
|
notifyUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ejectIfTriggered() {
|
||||||
|
int presentStackSize = depotBehaviour.getPresentStackSize();
|
||||||
|
if (presentStackSize == 0)
|
||||||
|
return;
|
||||||
|
if (presentStackSize < maxStackSize.getValue())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Direction funnelFacing = getFacing().getOpposite();
|
||||||
|
if (AbstractFunnelBlock.getFunnelFacing(world.getBlockState(pos.up())) == funnelFacing) {
|
||||||
|
DirectBeltInputBehaviour directOutput = getBehaviour(DirectBeltInputBehaviour.TYPE);
|
||||||
|
if (depotBehaviour.heldItem != null) {
|
||||||
|
ItemStack tryFunnel =
|
||||||
|
directOutput.tryExportingToBeltFunnel(depotBehaviour.getHeldItemStack(), funnelFacing, true);
|
||||||
|
if (tryFunnel == null || !tryFunnel.isEmpty())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DirectBeltInputBehaviour targetOpenInv = getTargetOpenInv();
|
||||||
|
|
||||||
|
// Do not eject if target cannot accept held item
|
||||||
|
if (targetOpenInv != null && depotBehaviour.heldItem != null
|
||||||
|
&& targetOpenInv.handleInsertion(depotBehaviour.getHeldItemStack(), Direction.UP, true)
|
||||||
|
.isItemEqual(depotBehaviour.getHeldItemStack()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
launchAll();
|
||||||
|
notifyUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void placeItemAtTarget(boolean doLogic, float maxTime, IntAttached<ItemStack> intAttached) {
|
||||||
|
if (!doLogic)
|
||||||
|
return;
|
||||||
|
|
||||||
|
DirectBeltInputBehaviour targetOpenInv = getTargetOpenInv();
|
||||||
|
if (targetOpenInv != null) {
|
||||||
|
ItemStack remainder = targetOpenInv.handleInsertion(intAttached.getValue(), Direction.UP, false);
|
||||||
|
intAttached.setSecond(remainder);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intAttached.getValue()
|
||||||
|
.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Vec3d ejectVec = getLaunchedItemLocation(maxTime);
|
||||||
|
Vec3d ejectMotionVec = getLaunchedItemMotion(maxTime);
|
||||||
|
ItemEntity item = new ItemEntity(world, ejectVec.x, ejectVec.y, ejectVec.z, intAttached.getValue());
|
||||||
|
item.setMotion(ejectMotionVec);
|
||||||
|
item.setDefaultPickupDelay();
|
||||||
|
world.addEntity(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DirectBeltInputBehaviour getTargetOpenInv() {
|
||||||
|
return TileEntityBehaviour.get(world, pos.up(launcher.getVerticalDistance())
|
||||||
|
.offset(getFacing(), Math.max(1, launcher.getHorizontalDistance())), DirectBeltInputBehaviour.TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vec3d getLaunchedItemLocation(float time) {
|
||||||
|
return launcher.getGlobalPos(time, getFacing().getOpposite(), pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vec3d getLaunchedItemMotion(float time) {
|
||||||
|
return launcher.getGlobalVelocity(time, getFacing().getOpposite(), pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dropFlyingItems() {
|
||||||
|
for (IntAttached<ItemStack> intAttached : launchedItems) {
|
||||||
|
Vec3d ejectVec = getLaunchedItemLocation(intAttached.getFirst());
|
||||||
|
Vec3d ejectMotionVec = getLaunchedItemMotion(intAttached.getFirst());
|
||||||
|
ItemEntity item = new ItemEntity(world, 0, 0, 0, intAttached.getValue());
|
||||||
|
item.setPos(ejectVec.x, ejectVec.y, ejectVec.z);
|
||||||
|
item.setMotion(ejectMotionVec);
|
||||||
|
item.setDefaultPickupDelay();
|
||||||
|
world.addEntity(item);
|
||||||
|
}
|
||||||
|
launchedItems.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getWindUpSpeed() {
|
||||||
|
int hd = launcher.getHorizontalDistance();
|
||||||
|
int vd = launcher.getVerticalDistance();
|
||||||
|
|
||||||
|
float speedFactor = Math.abs(getSpeed()) / 256f;
|
||||||
|
float distanceFactor;
|
||||||
|
if (hd == 0 && vd == 0)
|
||||||
|
distanceFactor = 1;
|
||||||
|
else
|
||||||
|
distanceFactor = 1 * MathHelper.sqrt(Math.pow(hd, 2) + Math.pow(vd, 2));
|
||||||
|
return speedFactor / distanceFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void write(CompoundNBT compound, boolean clientPacket) {
|
||||||
|
super.write(compound, clientPacket);
|
||||||
|
compound.putInt("HorizontalDistance", launcher.getHorizontalDistance());
|
||||||
|
compound.putInt("VerticalDistance", launcher.getVerticalDistance());
|
||||||
|
NBTHelper.writeEnum(compound, "State", state);
|
||||||
|
compound.put("Lid", lidProgress.writeNBT());
|
||||||
|
compound.put("LaunchedItems",
|
||||||
|
NBTHelper.writeCompoundList(launchedItems, ia -> ia.serializeNBT(ItemStack::serializeNBT)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void read(CompoundNBT compound, boolean clientPacket) {
|
||||||
|
super.read(compound, clientPacket);
|
||||||
|
int horizontalDistance = compound.getInt("HorizontalDistance");
|
||||||
|
int verticalDistance = compound.getInt("VerticalDistance");
|
||||||
|
|
||||||
|
if (launcher == null || launcher.getHorizontalDistance() != horizontalDistance
|
||||||
|
|| launcher.getVerticalDistance() != verticalDistance) {
|
||||||
|
launcher.set(horizontalDistance, verticalDistance);
|
||||||
|
launcher.clamp(AllConfigs.SERVER.kinetics.maxEjectorDistance.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
state = NBTHelper.readEnum(compound, "State", State.class);
|
||||||
|
lidProgress.readNBT(compound.getCompound("Lid"), clientPacket);
|
||||||
|
launchedItems = NBTHelper.readCompoundList(compound.getList("LaunchedItems", NBT.TAG_COMPOUND),
|
||||||
|
nbt -> IntAttached.read(nbt, ItemStack::read));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTarget(int horizontalDistance, int verticalDistance) {
|
||||||
|
launcher.set(Math.max(1, horizontalDistance), verticalDistance);
|
||||||
|
if (horizontalDistance == 0 && verticalDistance == 0) {
|
||||||
|
state = State.CHARGED;
|
||||||
|
lidProgress.startWithValue(0);
|
||||||
|
}
|
||||||
|
sendData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockPos getTargetPosition() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!AllBlocks.WEIGHTED_EJECTOR.has(blockState))
|
||||||
|
return pos;
|
||||||
|
Direction facing = blockState.get(EjectorBlock.HORIZONTAL_FACING);
|
||||||
|
return pos.offset(facing, launcher.getHorizontalDistance())
|
||||||
|
.up(launcher.getVerticalDistance());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||||
|
if (isItemHandlerCap(cap))
|
||||||
|
return depotBehaviour.getItemCapability(cap, side);
|
||||||
|
return super.getCapability(cap, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldRenderAsTE() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getLidProgress(float pt) {
|
||||||
|
return lidProgress.getValue(pt);
|
||||||
|
}
|
||||||
|
|
||||||
|
public State getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public AxisAlignedBB getRenderBoundingBox() {
|
||||||
|
return INFINITE_EXTENT_AABB;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public double getMaxRenderDistanceSquared() {
|
||||||
|
return super.getMaxRenderDistanceSquared() * 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static abstract class EntityHack extends Entity {
|
||||||
|
|
||||||
|
public EntityHack(EntityType<?> p_i48580_1_, World p_i48580_2_) {
|
||||||
|
super(p_i48580_1_, p_i48580_2_);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setElytraFlying(Entity e) {
|
||||||
|
EntityDataManager data = e.getDataManager();
|
||||||
|
data.set(FLAGS, (byte) (data.get(FLAGS) | 1 << 7));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EjectorSlot extends ValueBoxTransform.Sided {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Vec3d getLocalOffset(BlockState state) {
|
||||||
|
return new Vec3d(.5, 13 / 16f, .5).add(VecHelper.rotate(new Vec3d(0, 0, -.3), angle(state), Axis.Y));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void rotate(BlockState state, MatrixStack ms) {
|
||||||
|
MatrixStacker.of(ms)
|
||||||
|
.rotateY(angle(state))
|
||||||
|
.rotateX(90);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected float angle(BlockState state) {
|
||||||
|
float horizontalAngle = AllBlocks.WEIGHTED_EJECTOR.has(state)
|
||||||
|
? AngleHelper.horizontalAngle(state.get(EjectorBlock.HORIZONTAL_FACING))
|
||||||
|
: 0;
|
||||||
|
return horizontalAngle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isSideActive(BlockState state, Direction direction) {
|
||||||
|
return direction == Direction.UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getScale() {
|
||||||
|
return 0.2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Vec3d getSouthLocation() {
|
||||||
|
return Vec3d.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket;
|
||||||
|
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
|
public class EjectorTriggerPacket extends TileEntityConfigurationPacket<EjectorTileEntity> {
|
||||||
|
|
||||||
|
public EjectorTriggerPacket(BlockPos pos) {
|
||||||
|
super(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EjectorTriggerPacket(PacketBuffer buffer) {
|
||||||
|
super(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void writeSettings(PacketBuffer buffer) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void readSettings(PacketBuffer buffer) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applySettings(EjectorTileEntity te) {
|
||||||
|
te.launchAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,140 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class EntityLauncher {
|
||||||
|
|
||||||
|
private int horizontalDistance;
|
||||||
|
private int verticalDistance;
|
||||||
|
private double yMotion;
|
||||||
|
private double xMotion;
|
||||||
|
private double totalFlyingTicks;
|
||||||
|
|
||||||
|
public EntityLauncher(int horizontalDistance, int verticalDistance) {
|
||||||
|
set(horizontalDistance, verticalDistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clamp(int max) {
|
||||||
|
set(Math.min(horizontalDistance, max),
|
||||||
|
MathHelper.signum(verticalDistance) * Math.min(Math.abs(verticalDistance), max));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int horizontalDistance, int verticalDistance) {
|
||||||
|
this.horizontalDistance = horizontalDistance;
|
||||||
|
this.verticalDistance = verticalDistance;
|
||||||
|
recalculateTrajectory();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void applyMotion(Entity entity, Direction facing) {
|
||||||
|
Vec3d motionVec = new Vec3d(0, yMotion, xMotion);
|
||||||
|
motionVec = VecHelper.rotate(motionVec, AngleHelper.horizontalAngle(facing), Axis.Y);
|
||||||
|
entity.setMotion(motionVec.x, motionVec.y, motionVec.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHorizontalDistance() {
|
||||||
|
return horizontalDistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVerticalDistance() {
|
||||||
|
return verticalDistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getTotalFlyingTicks() {
|
||||||
|
return totalFlyingTicks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vec3d getGlobalPos(double t, Direction d, BlockPos launcher) {
|
||||||
|
Vec3d start = new Vec3d(launcher.getX() + .5f, launcher.getY() + .5f, launcher.getZ() + .5f);
|
||||||
|
Vec3d vec = new Vec3d(0, y(t), x(t));
|
||||||
|
return VecHelper.rotate(vec, 180 + AngleHelper.horizontalAngle(d), Axis.Y)
|
||||||
|
.add(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vec3d getGlobalVelocity(double t, Direction d, BlockPos launcher) {
|
||||||
|
return VecHelper.rotate(new Vec3d(0, dy(t), dx(t)), 180 + AngleHelper.horizontalAngle(d), Axis.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float x(double t) {
|
||||||
|
return (float) (xMotion * -10.6033 * (-1 + Math.pow(0.91, t)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public float y(double t) {
|
||||||
|
double f = Math.pow(0.98, t);
|
||||||
|
return (float) (yMotion * -49.4983 * f + 49.4983 * yMotion - 194.033 * f - 3.92 * t + 194.033);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float dx(double t) {
|
||||||
|
return (float) (xMotion * Math.pow(0.91, t));
|
||||||
|
}
|
||||||
|
|
||||||
|
public float dy(double t) {
|
||||||
|
double f = Math.pow(0.98, t);
|
||||||
|
return (float) (yMotion * f + ((f - 1) / (0.98 - 1)) * -0.0784);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void recalculateTrajectory() {
|
||||||
|
double xTarget = this.horizontalDistance;
|
||||||
|
double yTarget = this.verticalDistance;
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Iterated:
|
||||||
|
* Horizontal Motion fh(x) = x * 0.91
|
||||||
|
* Vertical Motion fv(x) = (x - 0.08) * 0.98
|
||||||
|
* (Gravity modification ignored)
|
||||||
|
* > See LivingEntity.travel()
|
||||||
|
*
|
||||||
|
** n-th Iterative
|
||||||
|
* (= given initial velocity x, motion after t ticks)
|
||||||
|
* X'(x, t) = x * 0.91^t
|
||||||
|
* Y'(x, t) = x * 0.98^t + ((0.98^t - 1) / (0.98 - 1)) * -0.0784
|
||||||
|
*
|
||||||
|
** integral
|
||||||
|
* (= given intial velocity x, location offset after t ticks)
|
||||||
|
* X(x, t) = -10.6033x * (-1 + 0.91^t)
|
||||||
|
* Y(x, t) = -49.4983x * 0.98^t + 49.4983x - 194.033 * 0.98^t - 3.92t + 194.033
|
||||||
|
*
|
||||||
|
** argmax y
|
||||||
|
* (= given initial y velocity, ticks at which y reaches top)
|
||||||
|
* tPeak(x) = log(98 / (25x + 98)) / (2*log(7) - 2*log(5) - log(2))
|
||||||
|
*
|
||||||
|
** max y
|
||||||
|
* (= given initial y velocity, height offset at tPeak)
|
||||||
|
* yPeak(x) = 889.636 + 49.4983x + 0.032928/(98 + 25x) + 194.033 * log(1/(98 + 25x))
|
||||||
|
*
|
||||||
|
** yPeak inverse (Zelo's approximation)
|
||||||
|
* (= given yPeak, initial y velocity required to reach it at max)
|
||||||
|
* yMotion(h) = sqrt(2h/13) + 0.015h
|
||||||
|
*
|
||||||
|
** Y'(x, t) inverse (Simi's approximation)
|
||||||
|
* (= given yTarget and initial y velocity, elapsed ticks when arc hits yTarget on its way down)
|
||||||
|
* t*(x, v) = sqrt(yPeak(v) - x) * 4.87 + 0.115 * (yPeak(v) - x) + tPeak(v)
|
||||||
|
*
|
||||||
|
** xMotion
|
||||||
|
* (= given t* and xTarget, initial x velocity such that X'(x, t*) = xTarget)
|
||||||
|
* xMotion(t, x) = x / (-10.6033 * (-1 + 0.91^t));
|
||||||
|
*
|
||||||
|
** xError
|
||||||
|
* Interpolated correction function from observed inaccuracies in-game
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
double xError = (-0.0007 * Math.pow(xTarget + .5, 2) + 0.484)
|
||||||
|
- (Math.min(5, yTarget) / 5) * Math.min(1, 0.076 * xTarget - 0.0014 * xTarget * xTarget);
|
||||||
|
|
||||||
|
double yPeak = Math.max(0, yTarget + (xTarget + .5) / 8f) + (xTarget <= 1 ? 1 : 4);
|
||||||
|
yMotion = Math.sqrt(2 * yPeak / 13) + 0.015 * yPeak;
|
||||||
|
double tPeak = Math.log(98 / (25 * yMotion + 98)) / (2 * Math.log(7) - 2 * Math.log(5) - Math.log(2));
|
||||||
|
totalFlyingTicks = Math.sqrt(yPeak - yMotion) * 4.87 + 0.115 * (yPeak - yMotion) + tPeak;
|
||||||
|
xMotion = (xTarget - xError + .5) / (-10.6033 * (-1 + Math.pow(0.91, totalFlyingTicks)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.depot;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||||
|
import com.simibubi.create.foundation.item.ItemHelper;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.ActionResultType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
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.World;
|
||||||
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
|
|
||||||
|
public class SharedDepotBlockMethods {
|
||||||
|
|
||||||
|
protected static DepotBehaviour get(IBlockReader worldIn, BlockPos pos) {
|
||||||
|
return TileEntityBehaviour.get(worldIn, pos, DepotBehaviour.TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||||
|
BlockRayTraceResult ray) {
|
||||||
|
if (ray.getFace() != Direction.UP)
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
if (world.isRemote)
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
|
||||||
|
DepotBehaviour behaviour = get(world, pos);
|
||||||
|
if (behaviour == null)
|
||||||
|
return ActionResultType.PASS;
|
||||||
|
if (!behaviour.canAcceptItems.get())
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
|
||||||
|
ItemStack heldItem = player.getHeldItem(hand);
|
||||||
|
boolean wasEmptyHanded = heldItem.isEmpty();
|
||||||
|
boolean shouldntPlaceItem = AllBlocks.MECHANICAL_ARM.isIn(heldItem);
|
||||||
|
|
||||||
|
ItemStack mainItemStack = behaviour.getHeldItemStack();
|
||||||
|
if (!mainItemStack.isEmpty()) {
|
||||||
|
player.inventory.placeItemBackInInventory(world, mainItemStack);
|
||||||
|
behaviour.removeHeldItem();
|
||||||
|
}
|
||||||
|
ItemStackHandler outputs = behaviour.processingOutputBuffer;
|
||||||
|
for (int i = 0; i < outputs.getSlots(); i++)
|
||||||
|
player.inventory.placeItemBackInInventory(world, outputs.extractItem(i, 64, false));
|
||||||
|
|
||||||
|
if (!wasEmptyHanded && !shouldntPlaceItem) {
|
||||||
|
TransportedItemStack transported = new TransportedItemStack(heldItem);
|
||||||
|
transported.insertedFrom = player.getHorizontalFacing();
|
||||||
|
transported.prevBeltPosition = .25f;
|
||||||
|
transported.beltPosition = .25f;
|
||||||
|
behaviour.setHeldItem(transported);
|
||||||
|
player.setHeldItem(hand, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
behaviour.tileEntity.notifyUpdate();
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState,
|
||||||
|
boolean isMoving) {
|
||||||
|
if (!state.hasTileEntity() || state.getBlock() == newState.getBlock())
|
||||||
|
return;
|
||||||
|
DepotBehaviour behaviour = get(worldIn, pos);
|
||||||
|
if (behaviour == null)
|
||||||
|
return;
|
||||||
|
ItemHelper.dropContents(worldIn, pos, behaviour.processingOutputBuffer);
|
||||||
|
for (TransportedItemStack transportedItemStack : behaviour.incoming)
|
||||||
|
InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), transportedItemStack.stack);
|
||||||
|
if (!behaviour.getHeldItemStack()
|
||||||
|
.isEmpty())
|
||||||
|
InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), behaviour.getHeldItemStack());
|
||||||
|
worldIn.removeTileEntity(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onLanded(IBlockReader worldIn, Entity entityIn) {
|
||||||
|
if (!(entityIn instanceof ItemEntity))
|
||||||
|
return;
|
||||||
|
if (!entityIn.isAlive())
|
||||||
|
return;
|
||||||
|
if (entityIn.world.isRemote)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ItemEntity itemEntity = (ItemEntity) entityIn;
|
||||||
|
DirectBeltInputBehaviour inputBehaviour =
|
||||||
|
TileEntityBehaviour.get(worldIn, entityIn.getPosition(), DirectBeltInputBehaviour.TYPE);
|
||||||
|
if (inputBehaviour == null)
|
||||||
|
return;
|
||||||
|
ItemStack remainder = inputBehaviour.handleInsertion(itemEntity.getItem(), Direction.DOWN, false);
|
||||||
|
itemEntity.setItem(remainder);
|
||||||
|
if (remainder.isEmpty())
|
||||||
|
itemEntity.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
||||||
|
DepotBehaviour depotBehaviour = get(worldIn, pos);
|
||||||
|
if (depotBehaviour == null)
|
||||||
|
return 0;
|
||||||
|
return ItemHelper.calcRedstoneFromInventory(depotBehaviour.itemHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -228,7 +228,7 @@ public abstract class ArmInteractionPoint {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) {
|
boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) {
|
||||||
return AllBlocks.DEPOT.has(state);
|
return AllBlocks.DEPOT.has(state) || AllBlocks.WEIGHTED_EJECTOR.has(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import com.simibubi.create.content.curiosities.zapper.ZapperItem;
|
||||||
import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler;
|
import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler;
|
||||||
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperRenderHandler;
|
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperRenderHandler;
|
||||||
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperRenderHandler;
|
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperRenderHandler;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorTargetHandler;
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPointHandler;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPointHandler;
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||||
|
@ -114,6 +115,7 @@ public class ClientEvents {
|
||||||
ExtendoGripRenderHandler.tick();
|
ExtendoGripRenderHandler.tick();
|
||||||
// CollisionDebugger.tick();
|
// CollisionDebugger.tick();
|
||||||
ArmInteractionPointHandler.tick();
|
ArmInteractionPointHandler.tick();
|
||||||
|
EjectorTargetHandler.tick();
|
||||||
PlacementHelpers.tick();
|
PlacementHelpers.tick();
|
||||||
CreateClient.outliner.tickOutlines();
|
CreateClient.outliner.tickOutlines();
|
||||||
CreateClient.ghostBlocks.tickGhosts();
|
CreateClient.ghostBlocks.tickGhosts();
|
||||||
|
|
|
@ -15,6 +15,7 @@ public class CKinetics extends ConfigBase {
|
||||||
public ConfigInt kineticValidationFrequency = i(60, 5, "kineticValidationFrequency", Comments.kineticValidationFrequency);
|
public ConfigInt kineticValidationFrequency = i(60, 5, "kineticValidationFrequency", Comments.kineticValidationFrequency);
|
||||||
public ConfigFloat crankHungerMultiplier = f(.01f, 0, 1, "crankHungerMultiplier", Comments.crankHungerMultiplier);
|
public ConfigFloat crankHungerMultiplier = f(.01f, 0, 1, "crankHungerMultiplier", Comments.crankHungerMultiplier);
|
||||||
public ConfigInt minimumWindmillSails = i(8, 0, "minimumWindmillSails", Comments.minimumWindmillSails);
|
public ConfigInt minimumWindmillSails = i(8, 0, "minimumWindmillSails", Comments.minimumWindmillSails);
|
||||||
|
public ConfigInt maxEjectorDistance = i(32, 0, "maxEjectorDistance", Comments.maxEjectorDistance);
|
||||||
|
|
||||||
public ConfigGroup fan = group(1, "encasedFan", "Encased Fan");
|
public ConfigGroup fan = group(1, "encasedFan", "Encased Fan");
|
||||||
public ConfigInt fanPushDistance = i(20, 5, "fanPushDistance", Comments.fanPushDistance);
|
public ConfigInt fanPushDistance = i(20, 5, "fanPushDistance", Comments.fanPushDistance);
|
||||||
|
@ -81,6 +82,7 @@ public class CKinetics extends ConfigBase {
|
||||||
static String disableStress = "Disable the Stress mechanic altogether.";
|
static String disableStress = "Disable the Stress mechanic altogether.";
|
||||||
static String kineticValidationFrequency = "Game ticks between Kinetic Blocks checking whether their source is still valid.";
|
static String kineticValidationFrequency = "Game ticks between Kinetic Blocks checking whether their source is still valid.";
|
||||||
static String minimumWindmillSails = "Amount of sail-type blocks required for a windmill to assemble successfully.";
|
static String minimumWindmillSails = "Amount of sail-type blocks required for a windmill to assemble successfully.";
|
||||||
|
static String maxEjectorDistance = "Max Distance in blocks a Weighted Ejector can throw";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static enum DeployerAggroSetting {
|
public static enum DeployerAggroSetting {
|
||||||
|
|
|
@ -598,6 +598,14 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
||||||
.patternLine("A")
|
.patternLine("A")
|
||||||
.patternLine("I")),
|
.patternLine("I")),
|
||||||
|
|
||||||
|
WEIGHTED_EJECTOR = create(AllBlocks.WEIGHTED_EJECTOR).unlockedBy(I::andesiteCasing)
|
||||||
|
.viaShaped(b -> b.key('A', AllItems.GOLDEN_SHEET.get())
|
||||||
|
.key('D', AllBlocks.DEPOT.get())
|
||||||
|
.key('I', I.cog())
|
||||||
|
.patternLine("A")
|
||||||
|
.patternLine("D")
|
||||||
|
.patternLine("I")),
|
||||||
|
|
||||||
MECHANICAL_ARM = create(AllBlocks.MECHANICAL_ARM::get).unlockedBy(I::brassCasing)
|
MECHANICAL_ARM = create(AllBlocks.MECHANICAL_ARM::get).unlockedBy(I::brassCasing)
|
||||||
.returns(1)
|
.returns(1)
|
||||||
.viaShaped(b -> b.key('L', I.brassSheet())
|
.viaShaped(b -> b.key('L', I.brassSheet())
|
||||||
|
|
|
@ -1,11 +1,22 @@
|
||||||
package com.simibubi.create.foundation.networking;
|
package com.simibubi.create.foundation.networking;
|
||||||
|
|
||||||
|
import static net.minecraftforge.fml.network.NetworkDirection.PLAY_TO_CLIENT;
|
||||||
|
import static net.minecraftforge.fml.network.NetworkDirection.PLAY_TO_SERVER;
|
||||||
|
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionDisassemblyPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionDisassemblyPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionUpdatePacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionUpdatePacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.sync.*;
|
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionFluidPacket;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.sync.LimbSwingUpdatePacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingCreationPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingCreationPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartControllerUpdatePacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.MinecartControllerUpdatePacket;
|
||||||
import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket;
|
import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket;
|
||||||
|
@ -13,18 +24,26 @@ import com.simibubi.create.content.contraptions.relays.advanced.sequencer.Config
|
||||||
import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket;
|
import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket;
|
||||||
import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket;
|
import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket;
|
||||||
import com.simibubi.create.content.curiosities.zapper.ZapperBeamPacket;
|
import com.simibubi.create.content.curiosities.zapper.ZapperBeamPacket;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorElytraPacket;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorPlacementPacket;
|
||||||
|
import com.simibubi.create.content.logistics.block.depot.EjectorTriggerPacket;
|
||||||
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmPlacementPacket;
|
import com.simibubi.create.content.logistics.block.mechanicalArm.ArmPlacementPacket;
|
||||||
import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket;
|
import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket;
|
||||||
import com.simibubi.create.content.logistics.packet.ConfigureFlexcratePacket;
|
import com.simibubi.create.content.logistics.packet.ConfigureFlexcratePacket;
|
||||||
import com.simibubi.create.content.logistics.packet.ConfigureStockswitchPacket;
|
import com.simibubi.create.content.logistics.packet.ConfigureStockswitchPacket;
|
||||||
import com.simibubi.create.content.logistics.packet.FunnelFlapPacket;
|
import com.simibubi.create.content.logistics.packet.FunnelFlapPacket;
|
||||||
import com.simibubi.create.content.logistics.packet.TunnelFlapPacket;
|
import com.simibubi.create.content.logistics.packet.TunnelFlapPacket;
|
||||||
import com.simibubi.create.content.schematics.packet.*;
|
import com.simibubi.create.content.schematics.packet.ConfigureSchematicannonPacket;
|
||||||
|
import com.simibubi.create.content.schematics.packet.InstantSchematicPacket;
|
||||||
|
import com.simibubi.create.content.schematics.packet.SchematicPlacePacket;
|
||||||
|
import com.simibubi.create.content.schematics.packet.SchematicSyncPacket;
|
||||||
|
import com.simibubi.create.content.schematics.packet.SchematicUploadPacket;
|
||||||
import com.simibubi.create.foundation.command.ConfigureConfigPacket;
|
import com.simibubi.create.foundation.command.ConfigureConfigPacket;
|
||||||
import com.simibubi.create.foundation.command.HighlightPacket;
|
import com.simibubi.create.foundation.command.HighlightPacket;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringCountUpdatePacket;
|
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringCountUpdatePacket;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueUpdatePacket;
|
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueUpdatePacket;
|
||||||
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
||||||
|
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -36,13 +55,6 @@ import net.minecraftforge.fml.network.PacketDistributor;
|
||||||
import net.minecraftforge.fml.network.PacketDistributor.TargetPoint;
|
import net.minecraftforge.fml.network.PacketDistributor.TargetPoint;
|
||||||
import net.minecraftforge.fml.network.simple.SimpleChannel;
|
import net.minecraftforge.fml.network.simple.SimpleChannel;
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import static net.minecraftforge.fml.network.NetworkDirection.PLAY_TO_CLIENT;
|
|
||||||
import static net.minecraftforge.fml.network.NetworkDirection.PLAY_TO_SERVER;
|
|
||||||
|
|
||||||
public enum AllPackets {
|
public enum AllPackets {
|
||||||
|
|
||||||
// Client to Server
|
// Client to Server
|
||||||
|
@ -64,6 +76,9 @@ public enum AllPackets {
|
||||||
INSTANT_SCHEMATIC(InstantSchematicPacket.class, InstantSchematicPacket::new, PLAY_TO_SERVER),
|
INSTANT_SCHEMATIC(InstantSchematicPacket.class, InstantSchematicPacket::new, PLAY_TO_SERVER),
|
||||||
SYNC_SCHEMATIC(SchematicSyncPacket.class, SchematicSyncPacket::new, PLAY_TO_SERVER),
|
SYNC_SCHEMATIC(SchematicSyncPacket.class, SchematicSyncPacket::new, PLAY_TO_SERVER),
|
||||||
LEFT_CLICK(LeftClickPacket.class, LeftClickPacket::new, PLAY_TO_SERVER),
|
LEFT_CLICK(LeftClickPacket.class, LeftClickPacket::new, PLAY_TO_SERVER),
|
||||||
|
PLACE_EJECTOR(EjectorPlacementPacket.class, EjectorPlacementPacket::new, PLAY_TO_SERVER),
|
||||||
|
TRIGGER_EJECTOR(EjectorTriggerPacket.class, EjectorTriggerPacket::new, PLAY_TO_SERVER),
|
||||||
|
EJECTOR_ELYTRA(EjectorElytraPacket.class, EjectorElytraPacket::new, PLAY_TO_SERVER),
|
||||||
|
|
||||||
// Server to Client
|
// Server to Client
|
||||||
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT),
|
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT),
|
||||||
|
|
|
@ -307,6 +307,7 @@ public class PonderIndex {
|
||||||
.add(AllItems.BELT_CONNECTOR)
|
.add(AllItems.BELT_CONNECTOR)
|
||||||
.add(AllBlocks.CHUTE)
|
.add(AllBlocks.CHUTE)
|
||||||
.add(AllBlocks.DEPOT)
|
.add(AllBlocks.DEPOT)
|
||||||
|
.add(AllBlocks.WEIGHTED_EJECTOR)
|
||||||
.add(AllBlocks.BASIN)
|
.add(AllBlocks.BASIN)
|
||||||
.add(AllBlocks.ANDESITE_FUNNEL)
|
.add(AllBlocks.ANDESITE_FUNNEL)
|
||||||
.add(AllBlocks.BRASS_FUNNEL)
|
.add(AllBlocks.BRASS_FUNNEL)
|
||||||
|
@ -326,6 +327,7 @@ public class PonderIndex {
|
||||||
.add(AllBlocks.CHUTE)
|
.add(AllBlocks.CHUTE)
|
||||||
.add(AllBlocks.SMART_CHUTE)
|
.add(AllBlocks.SMART_CHUTE)
|
||||||
.add(AllBlocks.DEPOT)
|
.add(AllBlocks.DEPOT)
|
||||||
|
.add(AllBlocks.WEIGHTED_EJECTOR)
|
||||||
.add(AllBlocks.MECHANICAL_ARM)
|
.add(AllBlocks.MECHANICAL_ARM)
|
||||||
.add(AllBlocks.ANDESITE_FUNNEL)
|
.add(AllBlocks.ANDESITE_FUNNEL)
|
||||||
.add(AllBlocks.BRASS_FUNNEL)
|
.add(AllBlocks.BRASS_FUNNEL)
|
||||||
|
|
|
@ -98,7 +98,7 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public ItemStack tryExportingToBeltFunnel(ItemStack stack, @Nullable Direction side) {
|
public ItemStack tryExportingToBeltFunnel(ItemStack stack, @Nullable Direction side, boolean simulate) {
|
||||||
BlockPos funnelPos = tileEntity.getPos()
|
BlockPos funnelPos = tileEntity.getPos()
|
||||||
.up();
|
.up();
|
||||||
World world = getWorld();
|
World world = getWorld();
|
||||||
|
@ -112,8 +112,10 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour {
|
||||||
TileEntity te = world.getTileEntity(funnelPos);
|
TileEntity te = world.getTileEntity(funnelPos);
|
||||||
if (!(te instanceof FunnelTileEntity))
|
if (!(te instanceof FunnelTileEntity))
|
||||||
return null;
|
return null;
|
||||||
ItemStack insert = FunnelBlock.tryInsert(world, funnelPos, stack, false);
|
if (funnelState.get(BeltFunnelBlock.POWERED))
|
||||||
if (insert.getCount() != stack.getCount())
|
return stack;
|
||||||
|
ItemStack insert = FunnelBlock.tryInsert(world, funnelPos, stack, simulate);
|
||||||
|
if (insert.getCount() != stack.getCount() && !simulate)
|
||||||
((FunnelTileEntity) te).flap(true);
|
((FunnelTileEntity) te).flap(true);
|
||||||
return insert;
|
return insert;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.networking.AllPackets;
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
|
@ -33,6 +34,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
||||||
Function<Integer, String> formatter;
|
Function<Integer, String> formatter;
|
||||||
Function<Integer, String> unit;
|
Function<Integer, String> unit;
|
||||||
Function<StepContext, Integer> step;
|
Function<StepContext, Integer> step;
|
||||||
|
private Supplier<Boolean> isActive;
|
||||||
boolean needsWrench;
|
boolean needsWrench;
|
||||||
|
|
||||||
public ScrollValueBehaviour(String label, SmartTileEntity te, ValueBoxTransform slot) {
|
public ScrollValueBehaviour(String label, SmartTileEntity te, ValueBoxTransform slot) {
|
||||||
|
@ -47,6 +49,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
||||||
formatter = i -> Integer.toString(i);
|
formatter = i -> Integer.toString(i);
|
||||||
step = (c) -> 1;
|
step = (c) -> 1;
|
||||||
value = 0;
|
value = 0;
|
||||||
|
isActive = () -> true;
|
||||||
ticksUntilScrollPacket = -1;
|
ticksUntilScrollPacket = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,6 +126,11 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ScrollValueBehaviour onlyActiveWhen(Supplier<Boolean> condition) {
|
||||||
|
isActive = condition;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ScrollValueBehaviour withStepFunction(Function<StepContext, Integer> step) {
|
public ScrollValueBehaviour withStepFunction(Function<StepContext, Integer> step) {
|
||||||
this.step = step;
|
this.step = step;
|
||||||
return this;
|
return this;
|
||||||
|
@ -160,6 +168,10 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return isActive.get();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean testHit(Vec3d hit) {
|
public boolean testHit(Vec3d hit) {
|
||||||
BlockState state = tileEntity.getBlockState();
|
BlockState state = tileEntity.getBlockState();
|
||||||
Vec3d localHit = hit.subtract(new Vec3d(tileEntity.getPos()));
|
Vec3d localHit = hit.subtract(new Vec3d(tileEntity.getPos()));
|
||||||
|
|
|
@ -40,6 +40,8 @@ public class ScrollValueHandler {
|
||||||
ScrollValueBehaviour scrolling = TileEntityBehaviour.get(world, blockPos, ScrollValueBehaviour.TYPE);
|
ScrollValueBehaviour scrolling = TileEntityBehaviour.get(world, blockPos, ScrollValueBehaviour.TYPE);
|
||||||
if (scrolling == null)
|
if (scrolling == null)
|
||||||
return false;
|
return false;
|
||||||
|
if (!scrolling.isActive())
|
||||||
|
return false;
|
||||||
if (!mc.player.isAllowEdit())
|
if (!mc.player.isAllowEdit())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,9 @@ public class ScrollValueRenderer {
|
||||||
ScrollValueBehaviour behaviour = TileEntityBehaviour.get(world, pos, ScrollValueBehaviour.TYPE);
|
ScrollValueBehaviour behaviour = TileEntityBehaviour.get(world, pos, ScrollValueBehaviour.TYPE);
|
||||||
if (behaviour == null)
|
if (behaviour == null)
|
||||||
return;
|
return;
|
||||||
if (behaviour.needsWrench && !AllItems.WRENCH.isIn(Minecraft.getInstance().player.getHeldItemMainhand()))
|
if (!behaviour.isActive())
|
||||||
|
return;
|
||||||
|
if (behaviour.needsWrench && !AllItems.WRENCH.isIn(mc.player.getHeldItemMainhand()))
|
||||||
return;
|
return;
|
||||||
boolean highlight = behaviour.testHit(target.getHitVec());
|
boolean highlight = behaviour.testHit(target.getHitVec());
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
package com.simibubi.create.foundation.utility;
|
package com.simibubi.create.foundation.utility;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
|
||||||
public class IntAttached<V> extends Pair<Integer, V> {
|
public class IntAttached<V> extends Pair<Integer, V> {
|
||||||
|
|
||||||
protected IntAttached(Integer first, V second) {
|
protected IntAttached(Integer first, V second) {
|
||||||
|
@ -18,6 +22,10 @@ public class IntAttached<V> extends Pair<Integer, V> {
|
||||||
return first.intValue() == 0;
|
return first.intValue() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean exceeds(int value) {
|
||||||
|
return first.intValue() > value;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isOrBelowZero() {
|
public boolean isOrBelowZero() {
|
||||||
return first.intValue() <= 0;
|
return first.intValue() <= 0;
|
||||||
}
|
}
|
||||||
|
@ -34,4 +42,15 @@ public class IntAttached<V> extends Pair<Integer, V> {
|
||||||
return getSecond();
|
return getSecond();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompoundNBT serializeNBT(Function<V, CompoundNBT> serializer) {
|
||||||
|
CompoundNBT nbt = new CompoundNBT();
|
||||||
|
nbt.put("Item", serializer.apply(getValue()));
|
||||||
|
nbt.putInt("Location", getFirst());
|
||||||
|
return nbt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> IntAttached<T> read(CompoundNBT nbt, Function<CompoundNBT, T> deserializer) {
|
||||||
|
return IntAttached.with(nbt.getInt("Location"), deserializer.apply(nbt.getCompound("Item")));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,6 +444,12 @@
|
||||||
"create.mechanical_arm.summary": "Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
"create.mechanical_arm.summary": "Mechanical Arm has %1$s input(s) and %2$s output(s).",
|
||||||
"create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.",
|
"create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.",
|
||||||
|
|
||||||
|
"create.weighted_ejector.target_set": "Target Selected",
|
||||||
|
"create.weighted_ejector.target_not_valid": "Ejecting to Adjacent block (Target was not Valid)",
|
||||||
|
"create.weighted_ejector.no_target": "Ejecting to Adjacent block (No Target was Selected)",
|
||||||
|
"create.weighted_ejector.targeting": "Ejecting to [%1$s,%2$s,%3$s]",
|
||||||
|
"create.weighted_ejector.stack_size": "Ejected Stack Size",
|
||||||
|
|
||||||
"create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available",
|
"create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available",
|
||||||
|
|
||||||
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
"create.mechanical_arm.selection_mode.round_robin": "Round Robin",
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"3": "create:block/weighted_ejector_casing",
|
||||||
|
"7": "create:block/andesite_casing",
|
||||||
|
"particle": "create:block/weighted_ejector_top"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 2, 14],
|
||||||
|
"to": [16, 11, 16],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 10.5, 1, 15], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"west": {"uv": [7, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"up": {"uv": [0, 7, 8, 8], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 2, 16],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"west": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#7"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#7"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1, 2, 2],
|
||||||
|
"to": [15, 11, 14],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [9, 2.5, 15, 7], "texture": "#3"},
|
||||||
|
"west": {"uv": [9, 2.5, 15, 7], "texture": "#3"},
|
||||||
|
"up": {"uv": [0.5, 1, 7.5, 7], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [12, 11, 5],
|
||||||
|
"to": [15, 12, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 2, 7.5, 2.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"east": {"uv": [10.5, 2, 13.5, 2.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [6, 5.5, 7.5, 6], "texture": "#3"},
|
||||||
|
"west": {"uv": [6, 2.5, 6.5, 5.5], "rotation": 90, "texture": "#3"},
|
||||||
|
"up": {"uv": [6, 2.5, 7.5, 5.5], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1, 11, 5],
|
||||||
|
"to": [4, 12, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 5.5, 7.5, 6], "texture": "#3"},
|
||||||
|
"east": {"uv": [6, 2.5, 6.5, 5.5], "rotation": 90, "texture": "#3"},
|
||||||
|
"south": {"uv": [6, 2, 7.5, 2.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"west": {"uv": [10.5, 2, 13.5, 2.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [6, 2.5, 7.5, 5.5], "rotation": 180, "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 2, 0],
|
||||||
|
"to": [16, 11, 2],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 10.5, 16, 15], "texture": "#3"},
|
||||||
|
"east": {"uv": [7, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"west": {"uv": [0, 10.5, 1, 15], "texture": "#3"},
|
||||||
|
"up": {"uv": [0, 0, 8, 1], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [12, 9.5, -0.5],
|
||||||
|
"to": [14, 12.5, 2.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 0, 9, 1.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"west": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"down": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [2, 9.5, -0.5],
|
||||||
|
"to": [4, 12.5, 2.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 0, 9, 1.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"west": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"down": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "casing",
|
||||||
|
"origin": [0, 0, 0],
|
||||||
|
"children": [0, 1, 2, 3, 4, 5, 6, 7]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,247 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"0": "block/stripped_spruce_log_top",
|
||||||
|
"1": "create:block/axis",
|
||||||
|
"2": "block/stripped_spruce_log",
|
||||||
|
"3": "create:block/weighted_ejector_casing",
|
||||||
|
"4": "create:block/weighted_ejector_top",
|
||||||
|
"5": "create:block/weighted_ejector_inner",
|
||||||
|
"6": "create:block/axis_top",
|
||||||
|
"7": "create:block/andesite_casing",
|
||||||
|
"particle": "create:block/weighted_ejector_top"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 6, 6],
|
||||||
|
"to": [16, 10, 10],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"east": {"uv": [6, 6, 10, 10], "texture": "#6"},
|
||||||
|
"south": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"west": {"uv": [6, 6, 10, 10], "texture": "#6"},
|
||||||
|
"up": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#1"},
|
||||||
|
"down": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#1"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 9.5, -0.5],
|
||||||
|
"to": [12, 12.5, 2.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 0, 13, 1.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [12.5, 0, 13, 0.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [9, 0, 13, 1.5], "texture": "#3"},
|
||||||
|
"west": {"uv": [12.5, 0, 13, 0.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [9, 0, 13, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"down": {"uv": [9, 0, 13, 1.5], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 7, 1],
|
||||||
|
"to": [10, 11, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 8, 8, 12], "texture": "#0"},
|
||||||
|
"south": {"uv": [5, 10, 9, 14], "texture": "#2"},
|
||||||
|
"west": {"uv": [8, 8, 12, 12], "texture": "#0"},
|
||||||
|
"down": {"uv": [5, 10, 9, 14], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7.5, 5, 1],
|
||||||
|
"to": [8.5, 11, 7],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [2, 8, 8, 14], "texture": "#0"},
|
||||||
|
"south": {"uv": [13, 8, 14, 14], "texture": "#0"},
|
||||||
|
"west": {"uv": [8, 8, 14, 14], "texture": "#0"},
|
||||||
|
"down": {"uv": [13, 4, 14, 10], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0.9, 11, 1],
|
||||||
|
"to": [15.1, 13, 15],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"east": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"south": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"west": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"up": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#4"},
|
||||||
|
"down": {"uv": [1, 1, 15, 15], "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 2, 1],
|
||||||
|
"to": [9, 11, 2],
|
||||||
|
"rotation": {"angle": 0, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [3, 0, 4, 9], "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 4, 9], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 1], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 2, 0],
|
||||||
|
"to": [9, 11, 2],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"east": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 2, 2], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 2], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 2, 0],
|
||||||
|
"to": [9, 11, 2],
|
||||||
|
"rotation": {"angle": -45, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"east": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 2, 2], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 2], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 10, 1],
|
||||||
|
"to": [9, 12, 10],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 2, 2], "rotation": 180, "texture": "#2"},
|
||||||
|
"east": {"uv": [3, 0, 5, 9], "rotation": 90, "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 2], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 5, 9], "rotation": 270, "texture": "#2"},
|
||||||
|
"up": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 9], "rotation": 180, "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 10, 1],
|
||||||
|
"to": [9, 11, 10],
|
||||||
|
"rotation": {"angle": 0, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [3, 0, 4, 9], "rotation": 90, "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 1], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 4, 9], "rotation": 270, "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 2, 9], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 9], "rotation": 180, "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 2, 14],
|
||||||
|
"to": [16, 11, 16],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 10.5, 1, 15], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"west": {"uv": [7, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"up": {"uv": [0, 7, 8, 8], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 2, 16],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"west": {"uv": [0, 15, 8, 16], "texture": "#3"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#7"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#7"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1, 2, 2],
|
||||||
|
"to": [15, 11, 14],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [9, 2.5, 15, 7], "texture": "#3"},
|
||||||
|
"west": {"uv": [9, 2.5, 15, 7], "texture": "#3"},
|
||||||
|
"up": {"uv": [0.5, 1, 7.5, 7], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [12, 11, 5],
|
||||||
|
"to": [15, 12, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 2, 7.5, 2.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"east": {"uv": [10.5, 2, 13.5, 2.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [6, 5.5, 7.5, 6], "texture": "#3"},
|
||||||
|
"west": {"uv": [6, 2.5, 6.5, 5.5], "rotation": 90, "texture": "#3"},
|
||||||
|
"up": {"uv": [6, 2.5, 7.5, 5.5], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1, 11, 5],
|
||||||
|
"to": [4, 12, 11],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 5.5, 7.5, 6], "texture": "#3"},
|
||||||
|
"east": {"uv": [6, 2.5, 6.5, 5.5], "rotation": 90, "texture": "#3"},
|
||||||
|
"south": {"uv": [6, 2, 7.5, 2.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"west": {"uv": [10.5, 2, 13.5, 2.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [6, 2.5, 7.5, 5.5], "rotation": 180, "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 2, 0],
|
||||||
|
"to": [16, 11, 2],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.25, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 10.5, 16, 15], "texture": "#3"},
|
||||||
|
"east": {"uv": [7, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 10.5, 8, 15], "texture": "#3"},
|
||||||
|
"west": {"uv": [0, 10.5, 1, 15], "texture": "#3"},
|
||||||
|
"up": {"uv": [0, 0, 8, 1], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [12, 9.5, -0.5],
|
||||||
|
"to": [14, 12.5, 2.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 0, 9, 1.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"west": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"down": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [2, 9.5, -0.5],
|
||||||
|
"to": [4, 12.5, 2.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 0, 9, 1.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"west": {"uv": [14, 0, 15.5, 1.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"down": {"uv": [8, 0, 9, 1.5], "rotation": 180, "texture": "#3"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "Axle",
|
||||||
|
"origin": [0, 0, 0],
|
||||||
|
"children": [0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Panel",
|
||||||
|
"origin": [0, 0, 0],
|
||||||
|
"children": [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "casing",
|
||||||
|
"origin": [0, 0, 0],
|
||||||
|
"children": [10, 11, 12, 13, 14, 15, 16, 17]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"0": "block/stripped_spruce_log_top",
|
||||||
|
"2": "block/stripped_spruce_log",
|
||||||
|
"3": "create:block/weighted_ejector_casing",
|
||||||
|
"4": "create:block/weighted_ejector_top",
|
||||||
|
"5": "create:block/weighted_ejector_inner",
|
||||||
|
"particle": "create:block/weighted_ejector_top"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [4, 9.5, -0.5],
|
||||||
|
"to": [12, 12.5, 2.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 0, 13, 1.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [12.5, 0, 13, 0.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [9, 0, 13, 1.5], "texture": "#3"},
|
||||||
|
"west": {"uv": [12.5, 0, 13, 0.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [9, 0, 13, 1.5], "rotation": 180, "texture": "#3"},
|
||||||
|
"down": {"uv": [9, 0, 13, 1.5], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 7, 1],
|
||||||
|
"to": [10, 11, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 8, 8, 12], "texture": "#0"},
|
||||||
|
"south": {"uv": [5, 10, 9, 14], "texture": "#2"},
|
||||||
|
"west": {"uv": [8, 8, 12, 12], "texture": "#0"},
|
||||||
|
"down": {"uv": [5, 10, 9, 14], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7.5, 5, 1],
|
||||||
|
"to": [8.5, 11, 7],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [2, 8, 8, 14], "texture": "#0"},
|
||||||
|
"south": {"uv": [13, 8, 14, 14], "texture": "#0"},
|
||||||
|
"west": {"uv": [8, 8, 14, 14], "texture": "#0"},
|
||||||
|
"down": {"uv": [13, 4, 14, 10], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0.9, 11, 1],
|
||||||
|
"to": [15.1, 13, 15],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"east": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"south": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"west": {"uv": [1, 14, 15, 16], "texture": "#4"},
|
||||||
|
"up": {"uv": [1, 0, 15, 14], "rotation": 180, "texture": "#4"},
|
||||||
|
"down": {"uv": [1, 1, 15, 15], "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 2, 1],
|
||||||
|
"to": [9, 11, 2],
|
||||||
|
"rotation": {"angle": 0, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [3, 0, 4, 9], "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 4, 9], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 1], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 2, 0],
|
||||||
|
"to": [9, 11, 2],
|
||||||
|
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"east": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 2, 2], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 2], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 2, 0],
|
||||||
|
"to": [9, 11, 2],
|
||||||
|
"rotation": {"angle": -45, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"east": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 2, 2], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 2], "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 10, 1],
|
||||||
|
"to": [9, 12, 10],
|
||||||
|
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 2, 2], "rotation": 180, "texture": "#2"},
|
||||||
|
"east": {"uv": [3, 0, 5, 9], "rotation": 90, "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 2], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 5, 9], "rotation": 270, "texture": "#2"},
|
||||||
|
"up": {"uv": [3, 0, 5, 9], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 9], "rotation": 180, "texture": "#2"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [7, 10, 1],
|
||||||
|
"to": [9, 11, 10],
|
||||||
|
"rotation": {"angle": 0, "axis": "x", "origin": [8, 11, 1]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [3, 0, 4, 9], "rotation": 90, "texture": "#2"},
|
||||||
|
"south": {"uv": [3, 0, 5, 1], "texture": "#2"},
|
||||||
|
"west": {"uv": [3, 0, 4, 9], "rotation": 270, "texture": "#2"},
|
||||||
|
"up": {"uv": [0, 0, 2, 9], "texture": "#2"},
|
||||||
|
"down": {"uv": [3, 0, 5, 9], "rotation": 180, "texture": "#2"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "Panel",
|
||||||
|
"origin": [0, 0, 0],
|
||||||
|
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 487 B |
Binary file not shown.
After Width: | Height: | Size: 613 B |
Loading…
Add table
Reference in a new issue