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
|
||||
b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.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
|
||||
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
|
||||
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
|
||||
|
@ -337,7 +337,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
|
|||
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.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
|
||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.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
|
||||
c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets/create/blockstates/weathered_limestone_cobblestone_wall.json
|
||||
c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_limestone_pillar.json
|
||||
c838c0792511ca2e14493b40032bb1370fac588a assets/create/blockstates/weighted_ejector.json
|
||||
512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json
|
||||
4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.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
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json
|
||||
3522bc1dd15fd219aaf506766fb96be5f65b1939 assets/create/lang/en_us.json
|
||||
d389c171d3d6a7382fb5b2e80b14e9bee53d8179 assets/create/lang/unfinished/de_de.json
|
||||
b3caab7bb37be53ea93895cbaae2081452cd095e assets/create/lang/unfinished/es_es.json
|
||||
0039068794faea032b0a39c954f142e2c8e4dfc1 assets/create/lang/unfinished/es_mx.json
|
||||
1e34083359caea11cf9fdbb3f04a5881ea62a55e assets/create/lang/unfinished/fr_fr.json
|
||||
c9abd10d296055f56877317a5c7dee14d0e33bf5 assets/create/lang/unfinished/it_it.json
|
||||
83298d57034c2bb54924dff2d9b5257502ac3b9a assets/create/lang/unfinished/ja_jp.json
|
||||
2c0e5fbfc813949d973e9f95af9501ed65b80b82 assets/create/lang/unfinished/ko_kr.json
|
||||
4b3b113e5f9351b741974bc18d13d9d648d38f91 assets/create/lang/unfinished/nl_nl.json
|
||||
9bddfffdf5349353d37d7003546c94799c6e812d assets/create/lang/unfinished/pt_br.json
|
||||
5119b6690e8faa7e25450674caebf3c9c53fd54b assets/create/lang/unfinished/ru_ru.json
|
||||
f11eb922b49753b60894f0dfe8baabe004d13e05 assets/create/lang/unfinished/zh_cn.json
|
||||
017a9c9cc6f4538c8c497097cbd59f590b4af160 assets/create/lang/unfinished/zh_tw.json
|
||||
ce0e5405da381a86625b908c569c5dbe347abdba assets/create/lang/en_ud.json
|
||||
5383435fbb7d8be0c6cdc8a4ebfae072645e461f assets/create/lang/en_us.json
|
||||
f67a8ceef1ec2091b53198e5509e80ac9e5b82c1 assets/create/lang/unfinished/de_de.json
|
||||
174bd2c5b0fe4560030c4b5f92dd795ce7785245 assets/create/lang/unfinished/es_es.json
|
||||
20783faf769c31e3d8200ebdc78256e6845e4fc6 assets/create/lang/unfinished/es_mx.json
|
||||
c33171dd6390d80e39beef5c1511e72e7515c390 assets/create/lang/unfinished/fr_fr.json
|
||||
38bff62b21ff5c241cab0e06cc161cd12162749e assets/create/lang/unfinished/it_it.json
|
||||
c5a21a9238d491434fac9552c2372b0e2c5a8612 assets/create/lang/unfinished/ja_jp.json
|
||||
fab3e5b787268d39fa3b1c31d923e9d4f4b66419 assets/create/lang/unfinished/ko_kr.json
|
||||
62f4a359bf78057eaf9a3ef73766ee5e25833ce6 assets/create/lang/unfinished/nl_nl.json
|
||||
4fd663de3f40c2e2c569de95cfce4167e8a42cb1 assets/create/lang/unfinished/pt_br.json
|
||||
d431bca588528894340f8619cfcd82013eb04635 assets/create/lang/unfinished/ru_ru.json
|
||||
752dee8e473eb96deaa7a6b1f8405a1313c99cec assets/create/lang/unfinished/zh_cn.json
|
||||
efe100b3543f98a16f4230b7278a66f9bd00166c assets/create/lang/unfinished/zh_tw.json
|
||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.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
|
||||
62cba55cef305e8fcbc545363919f75d702a617b assets/create/models/item/weathered_limestone_cobblestone_wall.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
|
||||
0cc80844db689404d4722c93f1002b0bed05edcd assets/create/models/item/whisk.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
|
||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.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
|
||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.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
|
||||
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
|
||||
e42093eecd00375bf95d562a6e845ab1a30d7991 data/create/advancements/recipes/create.base/crafting/kinetics/weighted_ejector.json
|
||||
7c146cc51139c2a8e287a60c8d645fa6f6f48cb1 data/create/advancements/recipes/create.base/crafting/kinetics/whisk.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
|
||||
|
@ -2688,6 +2691,7 @@ c2a62f12680d04ed4f586c501bb026e367243dd2 data/create/loot_tables/blocks/weathere
|
|||
a89f425c47c3831071b556697169a3124370aed7 data/create/loot_tables/blocks/weathered_limestone_cobblestone_stairs.json
|
||||
e8f3af61d9a2fd1ff5b32c9bb474ed005e6d70c4 data/create/loot_tables/blocks/weathered_limestone_cobblestone_wall.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
|
||||
969eda31556feb5a68e350762848d17453275fee data/create/loot_tables/blocks/white_seat.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
|
||||
057c889b0a306f44b8835c896663154ccd9ff12f data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.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
|
||||
d80a741d2f0d4f742217b43d7e4d37f003ec9f9d data/create/recipes/crafting/kinetics/white_sail.json
|
||||
f4d88aa2edea548d29cf2678a111d8bb5db7720a data/create/recipes/crafting/kinetics/white_seat.json
|
||||
|
|
|
@ -181,10 +181,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"west": "true",
|
||||
"south": "true",
|
||||
"north": "false"
|
||||
"west": "true",
|
||||
"north": "false",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lu_y"
|
||||
|
@ -192,10 +192,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "true",
|
||||
"west": "false",
|
||||
"south": "true",
|
||||
"north": "false"
|
||||
"west": "false",
|
||||
"north": "false",
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ru_y"
|
||||
|
@ -203,10 +203,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"west": "true",
|
||||
"south": "false",
|
||||
"north": "true"
|
||||
"west": "true",
|
||||
"north": "true",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ld_y"
|
||||
|
@ -214,10 +214,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "true",
|
||||
"west": "false",
|
||||
"south": "false",
|
||||
"north": "true"
|
||||
"west": "false",
|
||||
"north": "true",
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/rd_y"
|
||||
|
@ -225,10 +225,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"west": "false",
|
||||
"south": "true",
|
||||
"north": "true"
|
||||
"west": "false",
|
||||
"north": "true",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ud_y"
|
||||
|
@ -236,10 +236,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"west": "false",
|
||||
"south": "true",
|
||||
"north": "false"
|
||||
"west": "false",
|
||||
"north": "false",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ud_y"
|
||||
|
@ -247,10 +247,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"west": "false",
|
||||
"south": "false",
|
||||
"north": "true"
|
||||
"west": "false",
|
||||
"north": "true",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ud_y"
|
||||
|
@ -258,10 +258,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "true",
|
||||
"south": "false",
|
||||
"west": "true",
|
||||
"south": "false",
|
||||
"north": "false"
|
||||
"north": "false",
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lr_y"
|
||||
|
@ -269,10 +269,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"south": "false",
|
||||
"west": "true",
|
||||
"south": "false",
|
||||
"north": "false"
|
||||
"north": "false",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lr_y"
|
||||
|
@ -280,10 +280,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "true",
|
||||
"west": "false",
|
||||
"south": "false",
|
||||
"north": "false"
|
||||
"west": "false",
|
||||
"north": "false",
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lr_y"
|
||||
|
@ -291,10 +291,10 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "false",
|
||||
"west": "false",
|
||||
"south": "false",
|
||||
"north": "false"
|
||||
"west": "false",
|
||||
"north": "false",
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/none_y"
|
||||
|
@ -303,9 +303,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "true",
|
||||
"up": "true",
|
||||
"west": "false",
|
||||
"up": "true"
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lu_z"
|
||||
|
@ -314,9 +314,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "false",
|
||||
"up": "true",
|
||||
"west": "true",
|
||||
"up": "true"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ru_z"
|
||||
|
@ -325,9 +325,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "true",
|
||||
"east": "true",
|
||||
"up": "false",
|
||||
"west": "false",
|
||||
"up": "false"
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ld_z"
|
||||
|
@ -336,9 +336,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "true",
|
||||
"east": "false",
|
||||
"up": "false",
|
||||
"west": "true",
|
||||
"up": "false"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/rd_z"
|
||||
|
@ -347,9 +347,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "true",
|
||||
"east": "false",
|
||||
"up": "true",
|
||||
"west": "false",
|
||||
"up": "true"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ud_z"
|
||||
|
@ -358,9 +358,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "false",
|
||||
"up": "true",
|
||||
"west": "false",
|
||||
"up": "true"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ud_z"
|
||||
|
@ -369,9 +369,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "true",
|
||||
"east": "false",
|
||||
"up": "false",
|
||||
"west": "false",
|
||||
"up": "false"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/ud_z"
|
||||
|
@ -380,9 +380,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "true",
|
||||
"up": "false",
|
||||
"west": "true",
|
||||
"up": "false"
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lr_z"
|
||||
|
@ -391,9 +391,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "true",
|
||||
"up": "false",
|
||||
"west": "false",
|
||||
"up": "false"
|
||||
"east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lr_z"
|
||||
|
@ -402,9 +402,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "false",
|
||||
"up": "false",
|
||||
"west": "true",
|
||||
"up": "false"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/lr_z"
|
||||
|
@ -413,9 +413,9 @@
|
|||
{
|
||||
"when": {
|
||||
"down": "false",
|
||||
"east": "false",
|
||||
"up": "false",
|
||||
"west": "false",
|
||||
"up": "false"
|
||||
"east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/fluid_pipe/none_z"
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_south": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_south": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -39,8 +39,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_south": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_south": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky"
|
||||
|
@ -48,8 +48,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_south": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_south": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -59,8 +59,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_south": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_south": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -69,8 +69,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_south": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_south": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y"
|
||||
|
@ -78,8 +78,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_south": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_south": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -89,8 +89,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_west": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -99,8 +99,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_west": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -109,8 +109,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_west": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z_sticky",
|
||||
|
@ -119,8 +119,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_west": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -129,8 +129,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_west": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -139,8 +139,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_west": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z",
|
||||
|
@ -149,8 +149,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_north": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky"
|
||||
|
@ -158,8 +158,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_north": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -168,8 +168,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_north": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -178,8 +178,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_north": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x"
|
||||
|
@ -187,8 +187,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_north": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -197,8 +197,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_north": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -207,8 +207,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -217,8 +217,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -227,8 +227,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z_sticky"
|
||||
|
@ -236,8 +236,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -246,8 +246,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -256,8 +256,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"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_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.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_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",
|
||||
|
|
|
@ -395,6 +395,7 @@
|
|||
"block.create.weathered_limestone_cobblestone_stairs": "Weathered Limestone Cobblestone Stairs",
|
||||
"block.create.weathered_limestone_cobblestone_wall": "Weathered Limestone Cobblestone Wall",
|
||||
"block.create.weathered_limestone_pillar": "Weathered Limestone Pillar",
|
||||
"block.create.weighted_ejector": "Weighted Ejector",
|
||||
"block.create.white_sail": "White Sail",
|
||||
"block.create.white_seat": "White Seat",
|
||||
"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.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.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.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.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.description": "Components which help moving items around",
|
||||
"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.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.description": "Components used mostly for decorative purposes",
|
||||
"create.ponder.tag.kinetic_appliances": "Kinetic Appliances",
|
||||
"create.ponder.tag.kinetic_appliances.description": "Components which make use of Rotational Force",
|
||||
"create.ponder.tag.redstone": "Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1443",
|
||||
"_": "Missing Localizations: 1506",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"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_pillar": "Verwitterte Kalksteinsäule",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||
"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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 474",
|
||||
"_": "Missing Localizations: 537",
|
||||
|
||||
"_": "->------------------------] 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_wall": "Pared de adoquínes 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_seat": "Asiento 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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1373",
|
||||
"_": "Missing Localizations: 1436",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"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_pillar": "Pilar de Caliza Meteorizada",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "Vela Blanca",
|
||||
"block.create.white_seat": "Asiento Blanco",
|
||||
"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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1155",
|
||||
"_": "Missing Localizations: 1218",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"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_pillar": "Pillier de Calcaire altéré",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||
"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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 491",
|
||||
"_": "Missing Localizations: 554",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"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_pillar": "Pilastro di calcare consumato",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "Vela bianca",
|
||||
"block.create.white_seat": "Sedile bianco",
|
||||
"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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 498",
|
||||
"_": "Missing Localizations: 561",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"block.create.weathered_limestone_cobblestone_stairs": "風化した石灰岩の丸石の階段",
|
||||
"block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の壁",
|
||||
"block.create.weathered_limestone_pillar": "風化した石灰岩の柱",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "白色の帆",
|
||||
"block.create.white_seat": "白色のシート",
|
||||
"block.create.white_valve_handle": "白色のバルブハンドル",
|
||||
|
@ -1084,6 +1085,12 @@
|
|||
"create.mechanical_arm.summary": "メカニカルアームは%1$s個の搬入ブロックと%2$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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 544",
|
||||
"_": "Missing Localizations: 607",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단",
|
||||
"block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장",
|
||||
"block.create.weathered_limestone_pillar": "풍화된 석회암 기둥",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "하얀색 날개",
|
||||
"block.create.white_seat": "하얀색 좌석",
|
||||
"block.create.white_valve_handle": "하얀색 밸브 손잡이",
|
||||
|
@ -1084,6 +1085,12 @@
|
|||
"create.mechanical_arm.summary": "이 기계 팔은 %1$s개의 입력부와 %2$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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1642",
|
||||
"_": "Missing Localizations: 1705",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"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_pillar": "Verweerde Kalksteen Pilaar",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||
"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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1708",
|
||||
"_": "Missing Localizations: 1771",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"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_pillar": "Pilar de Calcário Resistido",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "UNLOCALIZED: White Sail",
|
||||
"block.create.white_seat": "UNLOCALIZED: White Seat",
|
||||
"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.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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 494",
|
||||
"_": "Missing Localizations: 557",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"block.create.weathered_limestone_cobblestone_stairs": "Ступени из известняк-булыжника",
|
||||
"block.create.weathered_limestone_cobblestone_wall": "Стена из известняк-булыжника",
|
||||
"block.create.weathered_limestone_pillar": "Колонна из выветренного известняка",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "Белый парус",
|
||||
"block.create.white_seat": "Белое сиденье",
|
||||
"block.create.white_valve_handle": "Белый ручной вентиль",
|
||||
|
@ -1084,6 +1085,12 @@
|
|||
"create.mechanical_arm.summary": "Механическая рука имеет %1$s вход(ов) и %2$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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 492",
|
||||
"_": "Missing Localizations: 555",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"block.create.weathered_limestone_cobblestone_stairs": "风化石灰岩圆石楼梯",
|
||||
"block.create.weathered_limestone_cobblestone_wall": "风化石灰岩圆石墙",
|
||||
"block.create.weathered_limestone_pillar": "竖纹风化石灰岩",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "白色风帆",
|
||||
"block.create.white_seat": "白色坐垫",
|
||||
"block.create.white_valve_handle": "白色阀门手轮",
|
||||
|
@ -1084,6 +1085,12 @@
|
|||
"create.mechanical_arm.summary": "动力臂的输入为%1$s,输出为%2$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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 497",
|
||||
"_": "Missing Localizations: 560",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -396,6 +396,7 @@
|
|||
"block.create.weathered_limestone_cobblestone_stairs": "碎風化石灰岩樓梯",
|
||||
"block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆",
|
||||
"block.create.weathered_limestone_pillar": "豎紋風化石灰岩",
|
||||
"block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector",
|
||||
"block.create.white_sail": "白色風帆",
|
||||
"block.create.white_seat": "白色坐墊",
|
||||
"block.create.white_valve_handle": "白色閥門開關",
|
||||
|
@ -1084,6 +1085,12 @@
|
|||
"create.mechanical_arm.summary": "機械手臂有%1$s 輸入以及 %2$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.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.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.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.description": "UNLOCALIZED: Components which help moving items around",
|
||||
"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.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.description": "UNLOCALIZED: Components used mostly for decorative purposes",
|
||||
"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.redstone": "UNLOCALIZED: Logic Components",
|
||||
"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.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_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.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_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.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",
|
||||
|
@ -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_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.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",
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/weighted_ejector/item"
|
||||
}
|
|
@ -28,8 +28,8 @@
|
|||
"trigger": "create:bracket_apply",
|
||||
"conditions": {
|
||||
"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"),
|
||||
|
||||
EJECTOR_TOP = get("weighted_ejector/top"),
|
||||
|
||||
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
|
||||
COUPLING_RING = getEntity("minecart_coupling/ring"),
|
||||
COUPLING_CONNECTOR = getEntity("minecart_coupling/connector")
|
||||
|
|
|
@ -1,10 +1,29 @@
|
|||
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.AllItemTags;
|
||||
import com.simibubi.create.content.AllSections;
|
||||
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.crafter.CrafterCTBehaviour;
|
||||
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.saw.SawBlock;
|
||||
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.ChassisCTBehaviour;
|
||||
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.ItemDrainBlock;
|
||||
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.FluidTankGenerator;
|
||||
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.CogwheelBlockItem;
|
||||
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.GaugeGenerator;
|
||||
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.SmartChuteBlock;
|
||||
import com.simibubi.create.content.logistics.block.depot.DepotBlock;
|
||||
import com.simibubi.create.content.logistics.block.diodes.*;
|
||||
import com.simibubi.create.content.logistics.block.funnel.*;
|
||||
import com.simibubi.create.content.logistics.block.depot.EjectorBlock;
|
||||
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.CreativeCrateBlock;
|
||||
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.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.schematics.block.SchematicTableBlock;
|
||||
import com.simibubi.create.content.schematics.block.SchematicannonBlock;
|
||||
import com.simibubi.create.foundation.block.ItemUseOverrides;
|
||||
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.utility.DyeHelper;
|
||||
import com.simibubi.create.foundation.worldgen.OxidizingBlock;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.Blocks;
|
||||
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.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 {
|
||||
|
||||
private static final CreateRegistrate REGISTRATE = Create.registrate()
|
||||
|
@ -422,6 +480,15 @@ public class AllBlocks {
|
|||
.item()
|
||||
.transform(customItemModel("_", "block"))
|
||||
.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)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
|
|
|
@ -1,7 +1,18 @@
|
|||
package com.simibubi.create;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.*;
|
||||
import com.simibubi.create.content.contraptions.components.actors.*;
|
||||
import com.simibubi.create.content.contraptions.base.BackHalfShaftInstance;
|
||||
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.CuckooClockTileEntity;
|
||||
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.PumpRenderer;
|
||||
import com.simibubi.create.content.contraptions.fluids.PumpTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.*;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.*;
|
||||
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyRenderer;
|
||||
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.FluidTankRenderer;
|
||||
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.BeltTileEntity;
|
||||
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.GaugeRenderer;
|
||||
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.depot.DepotRenderer;
|
||||
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.AdjustableRepeaterInstance;
|
||||
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.ArmRenderer;
|
||||
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.SchematicannonInstance;
|
||||
import com.simibubi.create.content.schematics.block.SchematicannonRenderer;
|
||||
|
@ -578,6 +615,13 @@ public class AllTileEntities {
|
|||
.renderer(() -> DepotRenderer::new)
|
||||
.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()
|
||||
.tileEntity("funnel", FunnelTileEntity::new)
|
||||
.instance(() -> FunnelInstance::new)
|
||||
|
|
|
@ -8,7 +8,6 @@ import java.util.List;
|
|||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.contraptions.KineticNetwork;
|
||||
import com.simibubi.create.content.contraptions.RotationPropagator;
|
||||
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.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.fml.DistExecutor;
|
||||
|
||||
public abstract class KineticTileEntity extends SmartTileEntity
|
||||
implements ITickableTileEntity, IHaveGoggleInformation, IHaveHoveringInformation, IInstanceRendered {
|
||||
|
|
|
@ -24,7 +24,7 @@ public class BasinOperatorBlockItem extends BlockItem {
|
|||
BlockState placedOnState = context.getWorld()
|
||||
.getBlockState(placedOnPos);
|
||||
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()
|
||||
.getBlockState(placedOnPos.up(2))
|
||||
.getMaterial()
|
||||
|
|
|
@ -150,7 +150,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity {
|
|||
if (stack.isEmpty())
|
||||
continue;
|
||||
ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE)
|
||||
.tryExportingToBeltFunnel(stack, itemMovementFacing.getOpposite());
|
||||
.tryExportingToBeltFunnel(stack, itemMovementFacing.getOpposite(), false);
|
||||
if (tryExportingToBeltFunnel != null) {
|
||||
if (tryExportingToBeltFunnel.getCount() != stack.getCount()) {
|
||||
inventory.setStackInSlot(slot, tryExportingToBeltFunnel);
|
||||
|
|
|
@ -128,7 +128,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI
|
|||
Direction side = heldItem.insertedFrom;
|
||||
|
||||
ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE)
|
||||
.tryExportingToBeltFunnel(heldItem.stack, side.getOpposite());
|
||||
.tryExportingToBeltFunnel(heldItem.stack, side.getOpposite(), false);
|
||||
if (tryExportingToBeltFunnel != null) {
|
||||
if (tryExportingToBeltFunnel.getCount() != heldItem.stack.getCount()) {
|
||||
if (tryExportingToBeltFunnel.isEmpty())
|
||||
|
|
|
@ -132,7 +132,7 @@ public class BeltTunnelBlock extends Block implements ITE<BeltTunnelTileEntity>,
|
|||
public void updateTunnel(IWorld world, BlockPos pos) {
|
||||
BlockState tunnel = world.getBlockState(pos);
|
||||
BlockState newTunnel = getTunnelState(world, pos);
|
||||
if (tunnel != newTunnel) {
|
||||
if (tunnel != newTunnel && !world.isRemote()) {
|
||||
world.setBlockState(pos, newTunnel, 3);
|
||||
TileEntity te = world.getTileEntity(pos);
|
||||
if (te != null && (te instanceof BeltTunnelTileEntity))
|
||||
|
|
|
@ -1,19 +1,24 @@
|
|||
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.Collection;
|
||||
import java.util.EnumMap;
|
||||
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 {
|
||||
|
||||
private final Map<Direction, ArrayList<InstanceKey<FlapData>>> tunnelFlaps;
|
||||
|
@ -62,6 +67,11 @@ public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity>
|
|||
tunnelFlaps.put(direction, flaps);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldReset() {
|
||||
return super.shouldReset() || tunnelFlaps.size() != tile.flaps.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
|
|
|
@ -101,9 +101,9 @@ public class BeltTunnelTileEntity extends SmartTileEntity implements IInstanceRe
|
|||
// Backwards compat
|
||||
if (!compound.contains("Sides") && compound.contains("Flaps"))
|
||||
sides.addAll(flaps.keySet());
|
||||
|
||||
|
||||
super.read(compound, clientPacket);
|
||||
|
||||
|
||||
if (clientPacket)
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this));
|
||||
}
|
||||
|
|
|
@ -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.scrollvalue.INamedIconOptions;
|
||||
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.Lang;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
@ -55,11 +56,13 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
|
||||
ItemStack stackToDistribute;
|
||||
float distributionProgress;
|
||||
List<Pair<BlockPos, Direction>> distributionTargets;
|
||||
int distributionDistanceLeft;
|
||||
int distributionDistanceRight;
|
||||
int previousOutputIndex;
|
||||
|
||||
// <filtered, non-filtered>
|
||||
Couple<List<Pair<BlockPos, Direction>>> distributionTargets;
|
||||
|
||||
private boolean syncedOutputActive;
|
||||
private Set<BrassTunnelTileEntity> syncSet;
|
||||
|
||||
|
@ -69,7 +72,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
|
||||
public BrassTunnelTileEntity(TileEntityType<? extends BeltTunnelTileEntity> type) {
|
||||
super(type);
|
||||
distributionTargets = new ArrayList<>();
|
||||
distributionTargets = Couple.create(ArrayList::new);
|
||||
syncSet = new HashSet<>();
|
||||
stackToDistribute = ItemStack.EMPTY;
|
||||
beltCapability = LazyOptional.empty();
|
||||
|
@ -113,7 +116,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
return;
|
||||
|
||||
if (distributionProgress == -1) {
|
||||
distributionTargets.clear();
|
||||
distributionTargets.forEach(List::clear);
|
||||
distributionDistanceLeft = 0;
|
||||
distributionDistanceRight = 0;
|
||||
|
||||
|
@ -137,27 +140,24 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
if (stackToDistribute.isEmpty())
|
||||
return;
|
||||
|
||||
for (boolean filterPass : Iterate.trueAndFalse) {
|
||||
for (Pair<BrassTunnelTileEntity, Direction> pair : validOutputs) {
|
||||
BrassTunnelTileEntity tunnel = pair.getKey();
|
||||
Direction output = pair.getValue();
|
||||
if (filterPass && tunnel.flapFilterEmpty(output))
|
||||
continue;
|
||||
if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null)
|
||||
continue;
|
||||
distributionTargets.add(Pair.of(tunnel.pos, output));
|
||||
int distance = tunnel.pos.getX() + tunnel.pos.getZ() - pos.getX() - pos.getZ();
|
||||
if (distance < 0)
|
||||
distributionDistanceLeft = Math.max(distributionDistanceLeft, -distance);
|
||||
else
|
||||
distributionDistanceRight = Math.max(distributionDistanceRight, distance);
|
||||
}
|
||||
|
||||
if (!distributionTargets.isEmpty() && filterPass)
|
||||
break;
|
||||
for (Pair<BrassTunnelTileEntity, Direction> pair : validOutputs) {
|
||||
BrassTunnelTileEntity tunnel = pair.getKey();
|
||||
Direction output = pair.getValue();
|
||||
if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null)
|
||||
continue;
|
||||
distributionTargets.get(!tunnel.flapFilterEmpty(output))
|
||||
.add(Pair.of(tunnel.pos, output));
|
||||
int distance = tunnel.pos.getX() + tunnel.pos.getZ() - pos.getX() - pos.getZ();
|
||||
if (distance < 0)
|
||||
distributionDistanceLeft = Math.max(distributionDistanceLeft, -distance);
|
||||
else
|
||||
distributionDistanceRight = Math.max(distributionDistanceRight, distance);
|
||||
}
|
||||
|
||||
if (distributionTargets.isEmpty())
|
||||
if (distributionTargets.getFirst()
|
||||
.isEmpty()
|
||||
&& distributionTargets.getSecond()
|
||||
.isEmpty())
|
||||
return;
|
||||
|
||||
if (selectionMode.get() != SelectionMode.SYNCHRONIZE || syncedOutputActive) {
|
||||
|
@ -167,9 +167,14 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
return;
|
||||
}
|
||||
|
||||
if (distributionProgress == 0) {
|
||||
if (distributionProgress != 0)
|
||||
return;
|
||||
|
||||
distributionTargets.forEach(list -> {
|
||||
if (stackToDistribute.isEmpty())
|
||||
return;
|
||||
List<Pair<BrassTunnelTileEntity, Direction>> validTargets = new ArrayList<>();
|
||||
for (Pair<BlockPos, Direction> pair : distributionTargets) {
|
||||
for (Pair<BlockPos, Direction> pair : list) {
|
||||
BlockPos tunnelPos = pair.getKey();
|
||||
Direction output = pair.getValue();
|
||||
TileEntity te = world.getTileEntity(tunnelPos);
|
||||
|
@ -177,18 +182,15 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
continue;
|
||||
validTargets.add(Pair.of((BrassTunnelTileEntity) te, output));
|
||||
}
|
||||
|
||||
distribute(validTargets);
|
||||
distributionProgress = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private static Random rand = new Random();
|
||||
|
||||
private void distribute(List<Pair<BrassTunnelTileEntity, Direction>> validTargets) {
|
||||
final int amountTargets = validTargets.size();
|
||||
int amountTargets = validTargets.size();
|
||||
if (amountTargets == 0)
|
||||
return;
|
||||
|
||||
|
@ -204,18 +206,23 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
|
||||
ItemStack toDistribute = null;
|
||||
int leftovers = 0;
|
||||
int remainingOutputs = amountTargets;
|
||||
|
||||
for (boolean simulate : Iterate.trueAndFalse) {
|
||||
if (remainingOutputs == 0)
|
||||
return;
|
||||
|
||||
leftovers = 0;
|
||||
int index = indexStart;
|
||||
int stackSize = stackToDistribute.getCount();
|
||||
int splitStackSize = stackSize / amountTargets;
|
||||
int splitRemainder = stackSize % amountTargets;
|
||||
int splitStackSize = stackSize / remainingOutputs;
|
||||
int splitRemainder = stackSize % remainingOutputs;
|
||||
int visited = 0;
|
||||
|
||||
toDistribute = stackToDistribute.copy();
|
||||
if (!force && simulate)
|
||||
if (!(force || split) && simulate)
|
||||
continue;
|
||||
|
||||
while (visited < amountTargets) {
|
||||
Pair<BrassTunnelTileEntity, Direction> pair = validTargets.get(index);
|
||||
BrassTunnelTileEntity tunnel = pair.getKey();
|
||||
|
@ -230,6 +237,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
if (remainder == null || remainder.getCount() == count) {
|
||||
if (force)
|
||||
return;
|
||||
if (split && simulate)
|
||||
remainingOutputs--;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -457,19 +466,22 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
compound.putBoolean("SyncedOutput", syncedOutputActive);
|
||||
compound.putBoolean("ConnectedLeft", connectedLeft);
|
||||
compound.putBoolean("ConnectedRight", connectedRight);
|
||||
|
||||
compound.put("StackToDistribute", stackToDistribute.serializeNBT());
|
||||
compound.putFloat("DistributionProgress", distributionProgress);
|
||||
compound.putInt("PreviousIndex", previousOutputIndex);
|
||||
compound.putInt("DistanceLeft", distributionDistanceLeft);
|
||||
compound.putInt("DistanceRight", distributionDistanceRight);
|
||||
compound.put("Targets", NBTHelper.writeCompoundList(distributionTargets, pair -> {
|
||||
CompoundNBT nbt = new CompoundNBT();
|
||||
nbt.put("Pos", NBTUtil.writeBlockPos(pair.getKey()));
|
||||
nbt.putInt("Face", pair.getValue()
|
||||
.getIndex());
|
||||
return nbt;
|
||||
}));
|
||||
|
||||
for (boolean filtered : Iterate.trueAndFalse) {
|
||||
compound.put(filtered ? "FilteredTargets" : "Targets",
|
||||
NBTHelper.writeCompoundList(distributionTargets.get(filtered), pair -> {
|
||||
CompoundNBT nbt = new CompoundNBT();
|
||||
nbt.put("Pos", NBTUtil.writeBlockPos(pair.getKey()));
|
||||
nbt.putInt("Face", pair.getValue()
|
||||
.getIndex());
|
||||
return nbt;
|
||||
}));
|
||||
}
|
||||
|
||||
super.write(compound, clientPacket);
|
||||
}
|
||||
|
@ -487,11 +499,15 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
|
|||
previousOutputIndex = compound.getInt("PreviousIndex");
|
||||
distributionDistanceLeft = compound.getInt("DistanceLeft");
|
||||
distributionDistanceRight = compound.getInt("DistanceRight");
|
||||
distributionTargets = NBTHelper.readCompoundList(compound.getList("Targets", NBT.TAG_COMPOUND), nbt -> {
|
||||
BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos"));
|
||||
Direction face = Direction.byIndex(nbt.getInt("Face"));
|
||||
return Pair.of(pos, face);
|
||||
});
|
||||
|
||||
for (boolean filtered : Iterate.trueAndFalse) {
|
||||
distributionTargets.set(filtered, NBTHelper
|
||||
.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);
|
||||
|
||||
|
|
|
@ -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 com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
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.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 net.minecraft.block.Block;
|
||||
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.tileentity.TileEntity;
|
||||
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;
|
||||
|
@ -30,8 +21,6 @@ import net.minecraft.util.math.shapes.ISelectionContext;
|
|||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
|
@ -65,74 +54,18 @@ public class DepotBlock extends Block implements ITE<DepotTileEntity>, IWrenchab
|
|||
@Override
|
||||
public 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;
|
||||
|
||||
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;
|
||||
return SharedDepotBlockMethods.onUse(state, world, pos, player, hand, ray);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
if (!state.hasTileEntity() || state.getBlock() == newState.getBlock())
|
||||
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);
|
||||
SharedDepotBlockMethods.onReplaced(state, worldIn, pos, newState, isMoving);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLanded(IBlockReader worldIn, Entity entityIn) {
|
||||
super.onLanded(worldIn, entityIn);
|
||||
if (!AllBlocks.DEPOT.has(worldIn.getBlockState(entityIn.getPosition())))
|
||||
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();
|
||||
SharedDepotBlockMethods.onLanded(worldIn, entityIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -142,11 +75,7 @@ public class DepotBlock extends Block implements ITE<DepotTileEntity>, IWrenchab
|
|||
|
||||
@Override
|
||||
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
||||
try {
|
||||
return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).itemHandler);
|
||||
} catch (TileEntityException ignored) {
|
||||
}
|
||||
return 0;
|
||||
return SharedDepotBlockMethods.getComparatorInputOverride(blockState, worldIn, pos);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,9 +8,9 @@ import net.minecraftforge.items.IItemHandler;
|
|||
public class DepotItemHandler implements IItemHandler {
|
||||
|
||||
private static final int MAIN_SLOT = 0;
|
||||
private DepotTileEntity te;
|
||||
private DepotBehaviour te;
|
||||
|
||||
public DepotItemHandler(DepotTileEntity te) {
|
||||
public DepotItemHandler(DepotBehaviour te) {
|
||||
this.te = te;
|
||||
}
|
||||
|
||||
|
@ -29,16 +29,15 @@ public class DepotItemHandler implements IItemHandler {
|
|||
if (slot != MAIN_SLOT)
|
||||
return stack;
|
||||
if (!te.getHeldItemStack()
|
||||
.isEmpty())
|
||||
.isEmpty() && !te.canMergeItems())
|
||||
return stack;
|
||||
if (!te.isOutputEmpty())
|
||||
if (!te.isOutputEmpty() && !te.canMergeItems())
|
||||
return stack;
|
||||
if (!simulate) {
|
||||
te.setHeldItem(new TransportedItemStack(stack));
|
||||
te.markDirty();
|
||||
te.sendData();
|
||||
}
|
||||
return ItemStack.EMPTY;
|
||||
|
||||
ItemStack remainder = te.insert(new TransportedItemStack(stack), simulate);
|
||||
if (!simulate && remainder != stack)
|
||||
te.tileEntity.notifyUpdate();
|
||||
return remainder;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,15 +54,14 @@ public class DepotItemHandler implements IItemHandler {
|
|||
te.heldItem.stack = stack;
|
||||
if (stack.isEmpty())
|
||||
te.heldItem = null;
|
||||
te.markDirty();
|
||||
te.sendData();
|
||||
te.tileEntity.notifyUpdate();
|
||||
}
|
||||
return extracted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlotLimit(int slot) {
|
||||
return 64;
|
||||
return slot == MAIN_SLOT ? te.maxStackSize.get() : 64;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Random;
|
|||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
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.renderer.SafeTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -30,43 +31,54 @@ public class DepotRenderer extends SafeTileEntityRenderer<DepotTileEntity> {
|
|||
@Override
|
||||
protected void renderSafe(DepotTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||
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);
|
||||
Vec3d itemPosition = VecHelper.getCenterOf(te.getPos());
|
||||
|
||||
ms.push();
|
||||
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();
|
||||
msr.nudge(0);
|
||||
float offset = MathHelper.lerp(partialTicks, transported.prevBeltPosition, transported.beltPosition);
|
||||
float sideOffset = MathHelper.lerp(partialTicks, transported.prevSideOffset, transported.sideOffset);
|
||||
float offset = MathHelper.lerp(partialTicks, tis.prevBeltPosition, tis.beltPosition);
|
||||
float sideOffset = MathHelper.lerp(partialTicks, tis.prevSideOffset, tis.sideOffset);
|
||||
|
||||
if (transported.insertedFrom.getAxis()
|
||||
if (tis.insertedFrom.getAxis()
|
||||
.isHorizontal()) {
|
||||
Vec3d offsetVec = new Vec3d(transported.insertedFrom.getOpposite()
|
||||
Vec3d offsetVec = new Vec3d(tis.insertedFrom.getOpposite()
|
||||
.getDirectionVec()).scale(.5f - offset);
|
||||
ms.translate(offsetVec.x, offsetVec.y, offsetVec.z);
|
||||
boolean alongX = transported.insertedFrom.rotateY()
|
||||
boolean alongX = tis.insertedFrom.rotateY()
|
||||
.getAxis() == Axis.X;
|
||||
if (!alongX)
|
||||
sideOffset *= -1;
|
||||
ms.translate(alongX ? sideOffset : 0, 0, alongX ? 0 : sideOffset);
|
||||
}
|
||||
|
||||
ItemStack itemStack = transported.stack;
|
||||
int angle = transported.angle;
|
||||
ItemStack itemStack = tis.stack;
|
||||
int angle = tis.angle;
|
||||
Random r = new Random(0);
|
||||
renderItem(ms, buffer, light, overlay, itemStack, angle, r, itemPosition);
|
||||
ms.pop();
|
||||
}
|
||||
|
||||
if (transported != null)
|
||||
depotBehaviour.incoming.remove(transported);
|
||||
|
||||
// Render output items
|
||||
for (int i = 0; i < te.processingOutputBuffer.getSlots(); i++) {
|
||||
ItemStack stack = te.processingOutputBuffer.getStackInSlot(i);
|
||||
for (int i = 0; i < depotBehaviour.processingOutputBuffer.getSlots(); i++) {
|
||||
ItemStack stack = depotBehaviour.processingOutputBuffer.getStackInSlot(i);
|
||||
if (stack.isEmpty())
|
||||
continue;
|
||||
ms.push();
|
||||
|
|
|
@ -1,253 +1,35 @@
|
|||
package com.simibubi.create.content.logistics.block.depot;
|
||||
|
||||
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.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.util.Direction;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
|
||||
public class DepotTileEntity extends SmartTileEntity {
|
||||
|
||||
TransportedItemStack heldItem;
|
||||
ItemStackHandler processingOutputBuffer;
|
||||
|
||||
DepotItemHandler itemHandler;
|
||||
LazyOptional<DepotItemHandler> lazyItemHandler;
|
||||
private TransportedItemStackHandlerBehaviour transportedHandler;
|
||||
DepotBehaviour depotBehaviour;
|
||||
|
||||
public DepotTileEntity(TileEntityType<?> 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
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
behaviours.add(new DirectBeltInputBehaviour(this).allowingBeltFunnels()
|
||||
.setInsertionHandler(this::tryInsertingFromSide));
|
||||
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;
|
||||
behaviours.add(depotBehaviour = new DepotBehaviour(this));
|
||||
depotBehaviour.addSubBehaviours(behaviours);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||
return lazyItemHandler.cast();
|
||||
return depotBehaviour.getItemCapability(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
|
||||
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.blockzapper.BlockzapperRenderHandler;
|
||||
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.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
|
@ -114,6 +115,7 @@ public class ClientEvents {
|
|||
ExtendoGripRenderHandler.tick();
|
||||
// CollisionDebugger.tick();
|
||||
ArmInteractionPointHandler.tick();
|
||||
EjectorTargetHandler.tick();
|
||||
PlacementHelpers.tick();
|
||||
CreateClient.outliner.tickOutlines();
|
||||
CreateClient.ghostBlocks.tickGhosts();
|
||||
|
|
|
@ -15,6 +15,7 @@ public class CKinetics extends ConfigBase {
|
|||
public ConfigInt kineticValidationFrequency = i(60, 5, "kineticValidationFrequency", Comments.kineticValidationFrequency);
|
||||
public ConfigFloat crankHungerMultiplier = f(.01f, 0, 1, "crankHungerMultiplier", Comments.crankHungerMultiplier);
|
||||
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 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 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 maxEjectorDistance = "Max Distance in blocks a Weighted Ejector can throw";
|
||||
}
|
||||
|
||||
public static enum DeployerAggroSetting {
|
||||
|
|
|
@ -317,7 +317,7 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
|||
.patternLine("P")
|
||||
.patternLine("A")
|
||||
.patternLine("P")),
|
||||
|
||||
|
||||
GANTRY_PINION = create(AllBlocks.GANTRY_CARRIAGE).unlockedBy(I::andesiteCasing)
|
||||
.viaShaped(b -> b.key('B', ItemTags.PLANKS)
|
||||
.key('S', I.cog())
|
||||
|
@ -598,6 +598,14 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
|||
.patternLine("A")
|
||||
.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)
|
||||
.returns(1)
|
||||
.viaShaped(b -> b.key('L', I.brassSheet())
|
||||
|
|
|
@ -1,11 +1,22 @@
|
|||
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.content.contraptions.components.structureMovement.ContraptionDisassemblyPacket;
|
||||
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.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.capability.MinecartControllerUpdatePacket;
|
||||
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.tools.ExtendoGripInteractionPacket;
|
||||
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.item.filter.FilterScreenPacket;
|
||||
import com.simibubi.create.content.logistics.packet.ConfigureFlexcratePacket;
|
||||
import com.simibubi.create.content.logistics.packet.ConfigureStockswitchPacket;
|
||||
import com.simibubi.create.content.logistics.packet.FunnelFlapPacket;
|
||||
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.HighlightPacket;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringCountUpdatePacket;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueUpdatePacket;
|
||||
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
||||
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
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.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 {
|
||||
|
||||
// Client to Server
|
||||
|
@ -64,6 +76,9 @@ public enum AllPackets {
|
|||
INSTANT_SCHEMATIC(InstantSchematicPacket.class, InstantSchematicPacket::new, PLAY_TO_SERVER),
|
||||
SYNC_SCHEMATIC(SchematicSyncPacket.class, SchematicSyncPacket::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
|
||||
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT),
|
||||
|
|
|
@ -307,6 +307,7 @@ public class PonderIndex {
|
|||
.add(AllItems.BELT_CONNECTOR)
|
||||
.add(AllBlocks.CHUTE)
|
||||
.add(AllBlocks.DEPOT)
|
||||
.add(AllBlocks.WEIGHTED_EJECTOR)
|
||||
.add(AllBlocks.BASIN)
|
||||
.add(AllBlocks.ANDESITE_FUNNEL)
|
||||
.add(AllBlocks.BRASS_FUNNEL)
|
||||
|
@ -326,6 +327,7 @@ public class PonderIndex {
|
|||
.add(AllBlocks.CHUTE)
|
||||
.add(AllBlocks.SMART_CHUTE)
|
||||
.add(AllBlocks.DEPOT)
|
||||
.add(AllBlocks.WEIGHTED_EJECTOR)
|
||||
.add(AllBlocks.MECHANICAL_ARM)
|
||||
.add(AllBlocks.ANDESITE_FUNNEL)
|
||||
.add(AllBlocks.BRASS_FUNNEL)
|
||||
|
|
|
@ -98,7 +98,7 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour {
|
|||
}
|
||||
|
||||
@Nullable
|
||||
public ItemStack tryExportingToBeltFunnel(ItemStack stack, @Nullable Direction side) {
|
||||
public ItemStack tryExportingToBeltFunnel(ItemStack stack, @Nullable Direction side, boolean simulate) {
|
||||
BlockPos funnelPos = tileEntity.getPos()
|
||||
.up();
|
||||
World world = getWorld();
|
||||
|
@ -112,8 +112,10 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour {
|
|||
TileEntity te = world.getTileEntity(funnelPos);
|
||||
if (!(te instanceof FunnelTileEntity))
|
||||
return null;
|
||||
ItemStack insert = FunnelBlock.tryInsert(world, funnelPos, stack, false);
|
||||
if (insert.getCount() != stack.getCount())
|
||||
if (funnelState.get(BeltFunnelBlock.POWERED))
|
||||
return stack;
|
||||
ItemStack insert = FunnelBlock.tryInsert(world, funnelPos, stack, simulate);
|
||||
if (insert.getCount() != stack.getCount() && !simulate)
|
||||
((FunnelTileEntity) te).flap(true);
|
||||
return insert;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue;
|
|||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
|
@ -33,6 +34,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
|||
Function<Integer, String> formatter;
|
||||
Function<Integer, String> unit;
|
||||
Function<StepContext, Integer> step;
|
||||
private Supplier<Boolean> isActive;
|
||||
boolean needsWrench;
|
||||
|
||||
public ScrollValueBehaviour(String label, SmartTileEntity te, ValueBoxTransform slot) {
|
||||
|
@ -47,6 +49,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
|||
formatter = i -> Integer.toString(i);
|
||||
step = (c) -> 1;
|
||||
value = 0;
|
||||
isActive = () -> true;
|
||||
ticksUntilScrollPacket = -1;
|
||||
}
|
||||
|
||||
|
@ -122,6 +125,11 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
|||
this.unit = unit;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ScrollValueBehaviour onlyActiveWhen(Supplier<Boolean> condition) {
|
||||
isActive = condition;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ScrollValueBehaviour withStepFunction(Function<StepContext, Integer> step) {
|
||||
this.step = step;
|
||||
|
@ -159,6 +167,10 @@ public class ScrollValueBehaviour extends TileEntityBehaviour {
|
|||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return isActive.get();
|
||||
}
|
||||
|
||||
public boolean testHit(Vec3d hit) {
|
||||
BlockState state = tileEntity.getBlockState();
|
||||
|
|
|
@ -40,6 +40,8 @@ public class ScrollValueHandler {
|
|||
ScrollValueBehaviour scrolling = TileEntityBehaviour.get(world, blockPos, ScrollValueBehaviour.TYPE);
|
||||
if (scrolling == null)
|
||||
return false;
|
||||
if (!scrolling.isActive())
|
||||
return false;
|
||||
if (!mc.player.isAllowEdit())
|
||||
return false;
|
||||
|
||||
|
|
|
@ -35,7 +35,9 @@ public class ScrollValueRenderer {
|
|||
ScrollValueBehaviour behaviour = TileEntityBehaviour.get(world, pos, ScrollValueBehaviour.TYPE);
|
||||
if (behaviour == null)
|
||||
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;
|
||||
boolean highlight = behaviour.testHit(target.getHitVec());
|
||||
|
||||
|
|
|
@ -1,37 +1,56 @@
|
|||
package com.simibubi.create.foundation.utility;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
|
||||
public class IntAttached<V> extends Pair<Integer, V> {
|
||||
|
||||
protected IntAttached(Integer first, V second) {
|
||||
super(first, second);
|
||||
}
|
||||
|
||||
|
||||
public static <V> IntAttached<V> with(int number, V value) {
|
||||
return new IntAttached<>(number, value);
|
||||
}
|
||||
|
||||
|
||||
public static <V> IntAttached<V> withZero(V value) {
|
||||
return new IntAttached<>(0, value);
|
||||
}
|
||||
|
||||
|
||||
public boolean isZero() {
|
||||
return first.intValue() == 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean exceeds(int value) {
|
||||
return first.intValue() > value;
|
||||
}
|
||||
|
||||
public boolean isOrBelowZero() {
|
||||
return first.intValue() <= 0;
|
||||
}
|
||||
|
||||
|
||||
public void increment() {
|
||||
first++;
|
||||
}
|
||||
|
||||
|
||||
public void decrement() {
|
||||
first--;
|
||||
}
|
||||
|
||||
|
||||
public V getValue() {
|
||||
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")));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -443,6 +443,12 @@
|
|||
"create.mechanical_arm.deposit_to": "Deposit items to %1$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.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",
|
||||
|
||||
|
|
|
@ -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…
Reference in a new issue