mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-16 18:53:41 +01:00
Down the Refactor rabbit hole
- Reworked tileentity behaviours for inventory interaction - Deployers no longer actively pull items from other inventories - Some more work on basins - Added a new inventory type wrapping an itemstack handler that automatically syncs the tile entity. It also implements IInventory for recipe shenanigans - Held items of a deployer can now only be extracted by other blocks if it does not match the filter - Fixed excess items not able to be extracted from deployers - Removed some things - Funnels no longer actively transpose items between chutes and inventories unless they are vertical - Chutes can now active pull and insert items from/to inventories above/below them
This commit is contained in:
parent
bf00406cad
commit
651e06a70a
129 changed files with 828 additions and 5822 deletions
|
@ -11,7 +11,6 @@ aaad1fc11aae17e209b0c3fbc9977c724c50c1ef assets/create/blockstates/andesite_belt
|
|||
da63a8be3191d6d72afef6c79e3aea3f607631f9 assets/create/blockstates/andesite_bricks_stairs.json
|
||||
a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets/create/blockstates/andesite_bricks_wall.json
|
||||
9999a75c7766781eadb12510a09264600bc846e4 assets/create/blockstates/andesite_casing.json
|
||||
7074f8af642b74edc26464bb627d919516c2de0a assets/create/blockstates/andesite_chute_funnel.json
|
||||
3af4ea3c44b5ebc7e1e3fb73fb8356faf067a613 assets/create/blockstates/andesite_cobblestone.json
|
||||
97adf53a7cb99d7652fb39adc957e9e34cbaca47 assets/create/blockstates/andesite_cobblestone_slab.json
|
||||
96b5284693da168ab8e0809d86515b5f1a7e763f assets/create/blockstates/andesite_cobblestone_stairs.json
|
||||
|
@ -30,7 +29,6 @@ cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window.
|
|||
fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets/create/blockstates/brass_belt_funnel.json
|
||||
8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json
|
||||
b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json
|
||||
e8583247cc7108c80320b739d7af121a890d79a8 assets/create/blockstates/brass_chute_funnel.json
|
||||
3057e1121117c0cd651c288cd8e2d46bdf64afb1 assets/create/blockstates/brass_funnel.json
|
||||
672eedcd3520c6d39603449165a23be9c612c620 assets/create/blockstates/brass_tunnel.json
|
||||
e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json
|
||||
|
@ -93,7 +91,6 @@ f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pill
|
|||
7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json
|
||||
656813b75dd3b901bf34f24df785e4b0fbe11aa6 assets/create/blockstates/encased_fluid_pipe.json
|
||||
e157d7f67b08493b71d7ffea8d622f4a64dbc155 assets/create/blockstates/encased_shaft.json
|
||||
1442ff1a0e404f99263ba99d734da1dfed03d4e3 assets/create/blockstates/extractor.json
|
||||
a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json
|
||||
180be26a75834cf9cdb881f969f77906e91cc36a assets/create/blockstates/fancy_andesite_bricks_slab.json
|
||||
d5d7762b80952052d0a7adf3081967cac3f3ba6c assets/create/blockstates/fancy_andesite_bricks_stairs.json
|
||||
|
@ -190,8 +187,6 @@ e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bri
|
|||
17c5a6c1dd094c9201ed90fdcebde620a8a39900 assets/create/blockstates/limestone_cobblestone_wall.json
|
||||
b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pillar.json
|
||||
69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json
|
||||
c793ab3aa6cf09d8d6d4136757629689f0365771 assets/create/blockstates/linked_extractor.json
|
||||
c5422866667331f1d5cf6753c0889747ee02762b assets/create/blockstates/linked_transposer.json
|
||||
84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json
|
||||
3b3250d6e209403a93d025604a8081087965016e assets/create/blockstates/mechanical_arm.json
|
||||
ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json
|
||||
|
@ -234,7 +229,6 @@ c46f0b62967cf483ec0720a9297c8ccc97f5547d assets/create/blockstates/overgrown_and
|
|||
2398939c8be07cac0dcb7ea710eb98e74b408e0c assets/create/blockstates/overgrown_limestone.json
|
||||
fbb651b8e4a72bf0a17a6bfdbf4eef680e9d4a5c assets/create/blockstates/overgrown_scoria.json
|
||||
9c8e210bdb29b2ab1535a25762498d7c03156444 assets/create/blockstates/overgrown_weathered_limestone.json
|
||||
5ab323fefdbfff04aa5c224bf5f0237f0598b3b2 assets/create/blockstates/packager.json
|
||||
ab93ff18b747607dbc1d8d7311a2737e302b92d1 assets/create/blockstates/paved_andesite.json
|
||||
89e88a0d2e7df66bac7ab11ac2c7b14812d8675f assets/create/blockstates/paved_andesite_slab.json
|
||||
f43d947077b3f4a11a9729c58709c56f09859da0 assets/create/blockstates/paved_andesite_stairs.json
|
||||
|
@ -337,14 +331,9 @@ f385988cb6fa9c48b5d59a6942ec50ed2b60c8bf assets/create/blockstates/stockpile_swi
|
|||
e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/stressometer.json
|
||||
8b0c2c7ac72529565b3339aa8df7565858100afa assets/create/blockstates/tiled_glass.json
|
||||
a2454400b1cf9889f70aebdc89c52a1be25f543c assets/create/blockstates/tiled_glass_pane.json
|
||||
e122bf687d991dd2d7a05670039da7937f96ca05 assets/create/blockstates/transposer.json
|
||||
a8094531617e27a545c4815ab2062bf0ffca3633 assets/create/blockstates/turntable.json
|
||||
d45450255fd7a64cfd2bd8856fd4cff01a49cc8d assets/create/blockstates/vertical_extractor.json
|
||||
69dfe8afaa8eb6105dae9f76ab8b7847bf90b8c6 assets/create/blockstates/vertical_framed_glass.json
|
||||
c4db76b9d36cfb098df0d158cb6f8b82768ebe14 assets/create/blockstates/vertical_framed_glass_pane.json
|
||||
0ecc57db2487ed6b370b9cc43d2a873c61d7c37e assets/create/blockstates/vertical_linked_extractor.json
|
||||
751b99625aca1b4122a0333bfaf93325d37eb003 assets/create/blockstates/vertical_linked_transposer.json
|
||||
02199afb5b6ebcbc8e11567df05f39eface39e39 assets/create/blockstates/vertical_transposer.json
|
||||
d995547bcd71603ba7378d8998098e462030bfd0 assets/create/blockstates/water_wheel.json
|
||||
f182669f7547964f9f2ef67916568556870def7b assets/create/blockstates/weathered_limestone.json
|
||||
27e6740834c0f673acc3531371512daa6dcab025 assets/create/blockstates/weathered_limestone_bricks.json
|
||||
|
@ -360,17 +349,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim
|
|||
a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json
|
||||
e4c4fa83b8549dec363bbda95fa9fda7b285de5c assets/create/lang/en_us.json
|
||||
e1a6b606458028f5c3b4afdc0a9e0cbd22d9e779 assets/create/lang/unfinished/de_de.json
|
||||
46c139da98fdee00d70a5fd893fc3eb4f03b8a0d assets/create/lang/unfinished/fr_fr.json
|
||||
ac0103512dff6e125cfa0df5c9a55cceef33a1f9 assets/create/lang/unfinished/it_it.json
|
||||
b22f04831c88799fcb69857ba16dbfa9df74aded assets/create/lang/unfinished/ja_jp.json
|
||||
8f72c330dbb5eb2b4631ffdb169e2b4a5bd98695 assets/create/lang/unfinished/ko_kr.json
|
||||
f7a3b075daf79ae600435c779a91c91a182771cd assets/create/lang/unfinished/nl_nl.json
|
||||
e65a45f531b6ae7a0818503c335366abb7a9ce20 assets/create/lang/unfinished/pt_br.json
|
||||
4251b8d5c5c45a162148776ccada3d7abeeb5bf1 assets/create/lang/unfinished/ru_ru.json
|
||||
c8c10a94bca76ee411246e29dbebba530a7f995c assets/create/lang/unfinished/zh_cn.json
|
||||
c87674f2935327f78657f1bb44b3b10b6697a548 assets/create/lang/en_ud.json
|
||||
ec8fc3f55847ad667752fdc06fc8b5de75253cf4 assets/create/lang/en_us.json
|
||||
bab998d2bbb0e24147e8dd34006bf94a4ad857e7 assets/create/lang/unfinished/de_de.json
|
||||
e3e51ea8e3e540a4f363610195050b0bbe8b452d assets/create/lang/unfinished/fr_fr.json
|
||||
b2bc925b69b276f03dbb30aa996e3b8677c9eb16 assets/create/lang/unfinished/it_it.json
|
||||
272aa6f6567b451a5204283f580f642990c04ce0 assets/create/lang/unfinished/ja_jp.json
|
||||
1e3115cbbdcb55dfa871ae31fc88cea78544fc5a assets/create/lang/unfinished/ko_kr.json
|
||||
e470b095bfc10d3fa7141a4d8860eaf093be9e62 assets/create/lang/unfinished/nl_nl.json
|
||||
1c3f2f8cf9d7d5280d7495da3b8c89481fd5dcee assets/create/lang/unfinished/pt_br.json
|
||||
a49430d7b66c52cde1880ccb7fd6123fb5ab2b2b assets/create/lang/unfinished/ru_ru.json
|
||||
5d569d86a3d8af114bb6b99a6410c3823d2191f8 assets/create/lang/unfinished/zh_cn.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
|
||||
|
@ -406,8 +395,6 @@ f1ba5c40d5e580d3c46d2eeab37b59263d0b0904 assets/create/models/block/andesite_bel
|
|||
f0a955282f7abd5ce0b412ec7b59024113ca970a assets/create/models/block/andesite_bricks_wall_post.json
|
||||
0ed2fa65af49b5c92c4e5c688c155e37d3d6b118 assets/create/models/block/andesite_bricks_wall_side.json
|
||||
b9943c5585fc081385ea49a4199efeb6c7c22423 assets/create/models/block/andesite_casing.json
|
||||
d89f1a04622290303729479ce5e19768f296a297 assets/create/models/block/andesite_chute_funnel_pull.json
|
||||
911cd82e8716a076a7760534de845f60db3534fb assets/create/models/block/andesite_chute_funnel_push.json
|
||||
77a045e855eb37d2da7ed8f7d27a85b9546c0ab8 assets/create/models/block/andesite_cobblestone.json
|
||||
7d816d54c85bc7d0cc8db9c68abcba960daa7b43 assets/create/models/block/andesite_cobblestone_slab.json
|
||||
5179ecd1f926bf3211a1a3f033dfd1d2368eeb20 assets/create/models/block/andesite_cobblestone_slab_top.json
|
||||
|
@ -457,10 +444,6 @@ ee79efc65b05d953784b00e573d37602629eb9e8 assets/create/models/block/brass_belt_f
|
|||
253e88f2c11006abdc87156dd409ed3944bb7295 assets/create/models/block/brass_belt_funnel_push_retracted.json
|
||||
0934933df6bfbb19a1b14cd0e3cab2c18d5a3ebc assets/create/models/block/brass_block.json
|
||||
166a5c053a81e6aadc24509ed24dc144a7255969 assets/create/models/block/brass_casing.json
|
||||
8c42d09a18fb17fe846365138d0f0d58c6a3c05e assets/create/models/block/brass_chute_funnel_pull.json
|
||||
7b3d2865ee7611940af017161aaabc7cb107225d assets/create/models/block/brass_chute_funnel_pull_powered.json
|
||||
78122dd0f7b65bd071974030682fa484c31d7ba2 assets/create/models/block/brass_chute_funnel_push.json
|
||||
7edf6b5c95f61071d8a9243a63e786765d6104a3 assets/create/models/block/brass_chute_funnel_push_powered.json
|
||||
6c617fc504cb2259263d24fc56c4735e455aac6d assets/create/models/block/brass_funnel.json
|
||||
2f152b82291b7fc994191b1ffb8ec6d65aec748b assets/create/models/block/brass_funnel_powered.json
|
||||
520087db8d479c66f85f3483af813fb668f27503 assets/create/models/block/brass_tunnel/cross.json
|
||||
|
@ -1126,7 +1109,6 @@ e974cd23a5456baef8b634f2d21fd8c3822931ab assets/create/models/item/dolomite_pill
|
|||
f2d6b88c3174de01e16da555236727efc33b490c assets/create/models/item/encased_belt.json
|
||||
250bd0716cc1f04b03892ab74eb0b3a0f32a6158 assets/create/models/item/encased_fan.json
|
||||
68833e2a7836c73776551565783a1d175b715c66 assets/create/models/item/extendo_grip.json
|
||||
956646df2a75ed651eabb403a3f9e1024538cd56 assets/create/models/item/extractor.json
|
||||
efcbd30ad7a7658c02a3dc3de5fa0f21d7f49b54 assets/create/models/item/fancy_andesite_bricks.json
|
||||
7ccd312084128c356307c7ca6e52c65d0a18907b assets/create/models/item/fancy_andesite_bricks_slab.json
|
||||
c8eee9d8df7af227eba051e4b9a7e48a79e682df assets/create/models/item/fancy_andesite_bricks_stairs.json
|
||||
|
@ -1230,8 +1212,6 @@ ebdf23b99b7895e347c29057c8070a6e16e56beb assets/create/models/item/limestone_cob
|
|||
8cd46904fd9709377d514e0faf9150ca317f6a9f assets/create/models/item/limestone_cobblestone_wall.json
|
||||
8065de871ad2fbaed711735561b8ed91a2ce0004 assets/create/models/item/limestone_pillar.json
|
||||
d245aa4994ff197b1ffeb7980d05f96bd20cdeb3 assets/create/models/item/linear_chassis.json
|
||||
eb0053df13e362e0a05be65252944f0c94eab3db assets/create/models/item/linked_extractor.json
|
||||
0242f25a8eb02b25f8b03344a1dfaf9ad0ab192c assets/create/models/item/linked_transposer.json
|
||||
d912be3e87f2beaa8e22747f867739139667241b assets/create/models/item/magenta_seat.json
|
||||
932facf4bf93b471e8630f4132a4284a9f4d0d39 assets/create/models/item/mechanical_arm.json
|
||||
49dcc373c33f6fc3760add10eb51bd96cd4fd028 assets/create/models/item/mechanical_bearing.json
|
||||
|
@ -1274,7 +1254,6 @@ e34c7bbdd4fcaa3a73c61584418bb159db49758b assets/create/models/item/overgrown_gra
|
|||
e73e4be7e7eafdf9635a3d72eb7fa05c2bc1e54b assets/create/models/item/overgrown_limestone.json
|
||||
a64a649428a2e130059f3f1f8de81b907621589f assets/create/models/item/overgrown_scoria.json
|
||||
3354b93677c87bfc82807503c8d658fc6ab114e2 assets/create/models/item/overgrown_weathered_limestone.json
|
||||
15baa926f7208040c437c920ae0c159a06057073 assets/create/models/item/packager.json
|
||||
014530344c8b7e53531e3c09095b6ed4839d5ab8 assets/create/models/item/paved_andesite.json
|
||||
bd81aa53b83c2f9683c024989d0305807cf28f5a assets/create/models/item/paved_andesite_slab.json
|
||||
c61f409eb1a24cf76017b677579cb0423a1951c6 assets/create/models/item/paved_andesite_stairs.json
|
||||
|
@ -1386,7 +1365,6 @@ bab8f78c319b2a79ed55c5d2a94b521ddaa44996 assets/create/models/item/stressometer.
|
|||
29d571a061e3addf92ee51bfc55d96edc3a517a5 assets/create/models/item/super_glue.json
|
||||
b1d3d00ff05908feacad06a86800da96cc9bc65d assets/create/models/item/tiled_glass.json
|
||||
8a2a81a8cbc52b6021e57107d79a32f73b82d8fe assets/create/models/item/tiled_glass_pane.json
|
||||
a9f6592275a4c8592e3c88a95fbe88bd93de67c6 assets/create/models/item/transposer.json
|
||||
c081317f106a2b04700aafde12c57445844c20ab assets/create/models/item/tree_fertilizer.json
|
||||
fb24881c4e92bbb7ffa54a71e0af6b1c66d84829 assets/create/models/item/turntable.json
|
||||
32f49b724af10c8d7e2ed5a3c82280e83b75f789 assets/create/models/item/vertical_framed_glass.json
|
||||
|
@ -2018,7 +1996,6 @@ b67ea51eaed1e847317829636cbf5967522e73d1 data/create/loot_tables/blocks/andesite
|
|||
0ba4528089294c5229e1904dc3191f604138cf8e data/create/loot_tables/blocks/andesite_bricks_stairs.json
|
||||
db2d27969cb53d9489e7c7e4bf60864fa89b29f4 data/create/loot_tables/blocks/andesite_bricks_wall.json
|
||||
cb36b039a511aca643fe674a63de8d6ad8478256 data/create/loot_tables/blocks/andesite_casing.json
|
||||
d3202a337c15c8b8ec41fa5879bb94327bb75057 data/create/loot_tables/blocks/andesite_chute_funnel.json
|
||||
906155b0d00438e695d34dd14b374d94e691460d data/create/loot_tables/blocks/andesite_cobblestone.json
|
||||
6d2f1bd619b131803d5bc9e393a2c67e03c39ff6 data/create/loot_tables/blocks/andesite_cobblestone_slab.json
|
||||
6b5393dab7d443da6d54debccbc8b060c6c9bdc7 data/create/loot_tables/blocks/andesite_cobblestone_stairs.json
|
||||
|
@ -2037,7 +2014,6 @@ a2313c9b7d114396fca3c86a740d23fce3873679 data/create/loot_tables/blocks/blaze_bu
|
|||
1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_belt_funnel.json
|
||||
70d9d4def43d5b31fa7cdc5ca5002c71cf4a90b0 data/create/loot_tables/blocks/brass_block.json
|
||||
8a14258ad5d79d9e4dc5a318905644b446196420 data/create/loot_tables/blocks/brass_casing.json
|
||||
1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_chute_funnel.json
|
||||
1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_funnel.json
|
||||
6c8e784677d1a843b6c707484c79751acdb46ebc data/create/loot_tables/blocks/brass_tunnel.json
|
||||
d415862a0abe20e8c5c2c8125bb672065330a9bc data/create/loot_tables/blocks/brown_seat.json
|
||||
|
@ -2100,7 +2076,6 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite
|
|||
9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json
|
||||
c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/encased_fluid_pipe.json
|
||||
b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json
|
||||
5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/extractor.json
|
||||
ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json
|
||||
31f2e6932505c68b28e92221a37144f69161c376 data/create/loot_tables/blocks/fancy_andesite_bricks_slab.json
|
||||
413c8bb80954679796cd9d18f808c28a7bdbe681 data/create/loot_tables/blocks/fancy_andesite_bricks_stairs.json
|
||||
|
@ -2197,8 +2172,6 @@ cb315814960850b5080598b89ee94c833b5048f7 data/create/loot_tables/blocks/limeston
|
|||
92fb16606f289ad33860270d098fad2522b24e09 data/create/loot_tables/blocks/limestone_cobblestone_wall.json
|
||||
371115e5ceb08c07a9ab2371509960c31e0baa8a data/create/loot_tables/blocks/limestone_pillar.json
|
||||
aa751d2e8a7889907c08c4bec6f6ca266230b6d7 data/create/loot_tables/blocks/linear_chassis.json
|
||||
dac789cf53b00eed34308848b5e267b7ccec090c data/create/loot_tables/blocks/linked_extractor.json
|
||||
7af5a13c9e10903b11732fbc01ae3299328216f0 data/create/loot_tables/blocks/linked_transposer.json
|
||||
9e5e017cd3b4f544f487a5ca22ef610a4addc8ec data/create/loot_tables/blocks/magenta_seat.json
|
||||
e64c32da44b7e92dbef36fcb448c42b9bd9ae47c data/create/loot_tables/blocks/mechanical_arm.json
|
||||
90ddf7b5c3b61758a4ad12a1e6ef16fe6ebf7794 data/create/loot_tables/blocks/mechanical_bearing.json
|
||||
|
@ -2241,7 +2214,6 @@ bab9f6fb35f2ba4aa45fd726a8e94f90ef155bfb data/create/loot_tables/blocks/overgrow
|
|||
4b4acf9026d68de21b5804903556a505f913a778 data/create/loot_tables/blocks/overgrown_limestone.json
|
||||
e0fc59a8645dae8f87e62b34c08014077e14de66 data/create/loot_tables/blocks/overgrown_scoria.json
|
||||
8af10a6b2d07ed1b84ce617502ad68044262e701 data/create/loot_tables/blocks/overgrown_weathered_limestone.json
|
||||
131cb27de9d0b44d2ec335055558b8039d6d5fb9 data/create/loot_tables/blocks/packager.json
|
||||
fc529ec8d55abf361ba1b8c38875839530b082c6 data/create/loot_tables/blocks/paved_andesite.json
|
||||
3658337cb8a5a6cdd7dd19dd8ac399b1397350d5 data/create/loot_tables/blocks/paved_andesite_slab.json
|
||||
4dbc7c7537e680e4e7c8a5ba4e4ed394d788b10d data/create/loot_tables/blocks/paved_andesite_stairs.json
|
||||
|
@ -2344,14 +2316,9 @@ ec2889e712702644092197a4b41a682fb953817d data/create/loot_tables/blocks/stockpil
|
|||
3479775008a256bc35f98b31655975f7d5c836b2 data/create/loot_tables/blocks/stressometer.json
|
||||
05e843ca6eb5e299bf41de123977a1045c120ad4 data/create/loot_tables/blocks/tiled_glass.json
|
||||
e999969f05d2625e61757aa82092d232b99f6e0a data/create/loot_tables/blocks/tiled_glass_pane.json
|
||||
b201436ae6d2ad5a7d47dca0ee8c7016b4c28fa5 data/create/loot_tables/blocks/transposer.json
|
||||
7b66ad2c48449bafd0cdbd086ac41218cb73a814 data/create/loot_tables/blocks/turntable.json
|
||||
5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/vertical_extractor.json
|
||||
028e293b5cd694017962f67dc80dba719f904e28 data/create/loot_tables/blocks/vertical_framed_glass.json
|
||||
d0156602dd5f4a274c293df67e19374820c72890 data/create/loot_tables/blocks/vertical_framed_glass_pane.json
|
||||
dac789cf53b00eed34308848b5e267b7ccec090c data/create/loot_tables/blocks/vertical_linked_extractor.json
|
||||
7af5a13c9e10903b11732fbc01ae3299328216f0 data/create/loot_tables/blocks/vertical_linked_transposer.json
|
||||
b201436ae6d2ad5a7d47dca0ee8c7016b4c28fa5 data/create/loot_tables/blocks/vertical_transposer.json
|
||||
2883c63ceb1273009dbf91cb0693756cadf79a1a data/create/loot_tables/blocks/water_wheel.json
|
||||
611d6195db52c074de484ec52d7ac9eb96b4ff10 data/create/loot_tables/blocks/weathered_limestone.json
|
||||
c1f379baad36a20fc767be094db10480a0378184 data/create/loot_tables/blocks/weathered_limestone_bricks.json
|
||||
|
@ -3064,7 +3031,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone
|
|||
0f3c993eb6dd3f37953f304b8fad15bf60469ef4 data/create/recipes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json
|
||||
6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json
|
||||
11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json
|
||||
4ace4302e3f0ee8ca063c150a046deab06c52710 data/create/tags/blocks/brittle.json
|
||||
10bed57f3eb989a643eb3609f177e30536f07965 data/create/tags/blocks/brittle.json
|
||||
246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json
|
||||
798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json
|
||||
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,pushing=false": {
|
||||
"model": "create:block/andesite_chute_funnel_pull"
|
||||
},
|
||||
"facing=south,pushing=false": {
|
||||
"model": "create:block/andesite_chute_funnel_pull",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,pushing=false": {
|
||||
"model": "create:block/andesite_chute_funnel_pull",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,pushing=false": {
|
||||
"model": "create:block/andesite_chute_funnel_pull",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,pushing=true": {
|
||||
"model": "create:block/andesite_chute_funnel_push"
|
||||
},
|
||||
"facing=south,pushing=true": {
|
||||
"model": "create:block/andesite_chute_funnel_push",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,pushing=true": {
|
||||
"model": "create:block/andesite_chute_funnel_push",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,pushing=true": {
|
||||
"model": "create:block/andesite_chute_funnel_push",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull"
|
||||
},
|
||||
"facing=south,powered=false,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull_powered"
|
||||
},
|
||||
"facing=south,powered=true,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,pushing=false": {
|
||||
"model": "create:block/brass_chute_funnel_pull_powered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push"
|
||||
},
|
||||
"facing=south,powered=false,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push_powered"
|
||||
},
|
||||
"facing=south,powered=true,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,pushing=true": {
|
||||
"model": "create:block/brass_chute_funnel_push_powered",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false": {
|
||||
"model": "create:block/extractor/horizontal"
|
||||
},
|
||||
"facing=south,powered=false": {
|
||||
"model": "create:block/extractor/horizontal",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false": {
|
||||
"model": "create:block/extractor/horizontal",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false": {
|
||||
"model": "create:block/extractor/horizontal",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_powered"
|
||||
},
|
||||
"facing=south,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_powered",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false": {
|
||||
"model": "create:block/extractor/horizontal_linked"
|
||||
},
|
||||
"facing=south,powered=false": {
|
||||
"model": "create:block/extractor/horizontal_linked",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false": {
|
||||
"model": "create:block/extractor/horizontal_linked",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false": {
|
||||
"model": "create:block/extractor/horizontal_linked",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_linked_powered"
|
||||
},
|
||||
"facing=south,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_linked_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_linked_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true": {
|
||||
"model": "create:block/extractor/horizontal_linked_powered",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false": {
|
||||
"model": "create:block/transposer/horizontal_linked"
|
||||
},
|
||||
"facing=south,powered=false": {
|
||||
"model": "create:block/transposer/horizontal_linked",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false": {
|
||||
"model": "create:block/transposer/horizontal_linked",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false": {
|
||||
"model": "create:block/transposer/horizontal_linked",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true": {
|
||||
"model": "create:block/transposer/horizontal_linked_powered"
|
||||
},
|
||||
"facing=south,powered=true": {
|
||||
"model": "create:block/transposer/horizontal_linked_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true": {
|
||||
"model": "create:block/transposer/horizontal_linked_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true": {
|
||||
"model": "create:block/transposer/horizontal_linked_powered",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"axis=x": {
|
||||
"model": "create:block/packager/block",
|
||||
"y": 90
|
||||
},
|
||||
"axis=z": {
|
||||
"model": "create:block/packager/block"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false": {
|
||||
"model": "create:block/transposer/block"
|
||||
},
|
||||
"facing=south,powered=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true": {
|
||||
"model": "create:block/transposer/block_powered"
|
||||
},
|
||||
"facing=south,powered=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical"
|
||||
},
|
||||
"facing=south,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_powered"
|
||||
},
|
||||
"facing=south,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"x": 180
|
||||
},
|
||||
"facing=west,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"x": 180
|
||||
},
|
||||
"facing=west,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_powered",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked"
|
||||
},
|
||||
"facing=south,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked_powered"
|
||||
},
|
||||
"facing=south,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,upward=false": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"x": 180
|
||||
},
|
||||
"facing=west,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=false,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"x": 180
|
||||
},
|
||||
"facing=west,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=true,upward=true": {
|
||||
"model": "create:block/extractor/vertical_linked_powered",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 90
|
||||
},
|
||||
"facing=west,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 90
|
||||
},
|
||||
"facing=west,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/vertical_linked_powered",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 90
|
||||
},
|
||||
"facing=west,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=false,upward=false": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 90
|
||||
},
|
||||
"facing=west,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,powered=true,upward=false": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=false,upward=true": {
|
||||
"model": "create:block/transposer/block",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,powered=true,upward=true": {
|
||||
"model": "create:block/transposer/block_powered",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,6 @@
|
|||
"block.create.andesite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.andesite_bricks_wall": "\u05DF\u05DF\u0250M s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.andesite_casing": "bu\u0131s\u0250\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.andesite_chute_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287n\u0265\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.andesite_cobblestone": "\u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.andesite_cobblestone_slab": "q\u0250\u05DFS \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
"block.create.andesite_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F",
|
||||
|
@ -31,7 +30,6 @@
|
|||
"block.create.brass_belt_funnel": "\u05DF\u01DDuun\u2132 \u0287\u05DF\u01DD\u15FA ss\u0250\u0279\u15FA",
|
||||
"block.create.brass_block": "\u029E\u0254o\u05DF\u15FA ss\u0250\u0279\u15FA",
|
||||
"block.create.brass_casing": "bu\u0131s\u0250\u0186 ss\u0250\u0279\u15FA",
|
||||
"block.create.brass_chute_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287n\u0265\u0186 ss\u0250\u0279\u15FA",
|
||||
"block.create.brass_funnel": "\u05DF\u01DDuun\u2132 ss\u0250\u0279\u15FA",
|
||||
"block.create.brass_tunnel": "\u05DF\u01DDuun\u27D8 ss\u0250\u0279\u15FA",
|
||||
"block.create.brown_seat": "\u0287\u0250\u01DDS u\u028Do\u0279\u15FA",
|
||||
|
@ -94,7 +92,6 @@
|
|||
"block.create.encased_fan": "u\u0250\u2132 p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.encased_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E",
|
||||
"block.create.fancy_andesite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132",
|
||||
"block.create.fancy_andesite_bricks_slab": "q\u0250\u05DFS s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132",
|
||||
"block.create.fancy_andesite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132",
|
||||
|
@ -191,8 +188,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780",
|
||||
"block.create.limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780",
|
||||
"block.create.linear_chassis": "s\u0131ss\u0250\u0265\u0186 \u0279\u0250\u01DDu\u0131\uA780",
|
||||
"block.create.linked_extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E p\u01DD\u029Eu\u0131\uA780",
|
||||
"block.create.linked_transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8 p\u01DD\u029Eu\u0131\uA780",
|
||||
"block.create.magenta_seat": "\u0287\u0250\u01DDS \u0250\u0287u\u01DDb\u0250W",
|
||||
"block.create.mechanical_arm": "\u026F\u0279\u2C6F \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
"block.create.mechanical_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
|
@ -235,7 +230,6 @@
|
|||
"block.create.overgrown_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 u\u028Do\u0279b\u0279\u01DD\u028CO",
|
||||
"block.create.overgrown_scoria": "\u0250\u0131\u0279o\u0254S u\u028Do\u0279b\u0279\u01DD\u028CO",
|
||||
"block.create.overgrown_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM u\u028Do\u0279b\u0279\u01DD\u028CO",
|
||||
"block.create.packager": "\u0279\u01DDb\u0250\u029E\u0254\u0250\u0500",
|
||||
"block.create.paved_andesite": "\u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u028C\u0250\u0500",
|
||||
"block.create.paved_andesite_slab": "q\u0250\u05DFS \u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u028C\u0250\u0500",
|
||||
"block.create.paved_andesite_stairs": "s\u0279\u0131\u0250\u0287S \u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u028C\u0250\u0500",
|
||||
|
@ -338,14 +332,9 @@
|
|||
"block.create.stressometer": "\u0279\u01DD\u0287\u01DD\u026Foss\u01DD\u0279\u0287S",
|
||||
"block.create.tiled_glass": "ss\u0250\u05DF\u2141 p\u01DD\u05DF\u0131\u27D8",
|
||||
"block.create.tiled_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u05DF\u0131\u27D8",
|
||||
"block.create.transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8",
|
||||
"block.create.turntable": "\u01DD\u05DFq\u0250\u0287u\u0279n\u27D8",
|
||||
"block.create.vertical_extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B",
|
||||
"block.create.vertical_framed_glass": "ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B",
|
||||
"block.create.vertical_framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B",
|
||||
"block.create.vertical_linked_extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E p\u01DD\u029Eu\u0131\uA780 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B",
|
||||
"block.create.vertical_linked_transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8 p\u01DD\u029Eu\u0131\uA780 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B",
|
||||
"block.create.vertical_transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B",
|
||||
"block.create.water_wheel": "\u05DF\u01DD\u01DD\u0265M \u0279\u01DD\u0287\u0250M",
|
||||
"block.create.weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
||||
"block.create.weathered_limestone_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM",
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
"block.create.andesite_bricks_stairs": "Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "Andesite Casing",
|
||||
"block.create.andesite_chute_funnel": "Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "Andesite Cobblestone Stairs",
|
||||
|
@ -34,7 +33,6 @@
|
|||
"block.create.brass_belt_funnel": "Brass Belt Funnel",
|
||||
"block.create.brass_block": "Brass Block",
|
||||
"block.create.brass_casing": "Brass Casing",
|
||||
"block.create.brass_chute_funnel": "Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "Brass Funnel",
|
||||
"block.create.brass_tunnel": "Brass Tunnel",
|
||||
"block.create.brown_seat": "Brown Seat",
|
||||
|
@ -97,7 +95,6 @@
|
|||
"block.create.encased_fan": "Encased Fan",
|
||||
"block.create.encased_fluid_pipe": "Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Encased Shaft",
|
||||
"block.create.extractor": "Extractor",
|
||||
"block.create.fancy_andesite_bricks": "Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "Fancy Andesite Bricks Stairs",
|
||||
|
@ -194,8 +191,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Limestone Pillar",
|
||||
"block.create.linear_chassis": "Linear Chassis",
|
||||
"block.create.linked_extractor": "Linked Extractor",
|
||||
"block.create.linked_transposer": "Linked Transposer",
|
||||
"block.create.magenta_seat": "Magenta Seat",
|
||||
"block.create.mechanical_arm": "Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Mechanical Bearing",
|
||||
|
@ -238,7 +233,6 @@
|
|||
"block.create.overgrown_limestone": "Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "Overgrown Weathered Limestone",
|
||||
"block.create.packager": "Packager",
|
||||
"block.create.paved_andesite": "Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "Paved Andesite Stairs",
|
||||
|
@ -341,14 +335,9 @@
|
|||
"block.create.stressometer": "Stressometer",
|
||||
"block.create.tiled_glass": "Tiled Glass",
|
||||
"block.create.tiled_glass_pane": "Tiled Glass Pane",
|
||||
"block.create.transposer": "Transposer",
|
||||
"block.create.turntable": "Turntable",
|
||||
"block.create.vertical_extractor": "Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "Vertical Framed Glass",
|
||||
"block.create.vertical_framed_glass_pane": "Vertical Framed Glass Pane",
|
||||
"block.create.vertical_linked_extractor": "Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "Vertical Transposer",
|
||||
"block.create.water_wheel": "Water Wheel",
|
||||
"block.create.weathered_limestone": "Weathered Limestone",
|
||||
"block.create.weathered_limestone_bricks": "Weathered Limestone Bricks",
|
||||
|
@ -1279,24 +1268,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRACTOR",
|
||||
"block.create.extractor.tooltip.summary": "_Takes_ _Items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.extractor.tooltip.condition1": "When Powered by Redstone",
|
||||
"block.create.extractor.tooltip.behaviour1": "_Pauses_ the Extractor.",
|
||||
"block.create.extractor.tooltip.condition2": "Active Belt pulling",
|
||||
"block.create.extractor.tooltip.behaviour2": "Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.",
|
||||
"block.create.extractor.tooltip.control1": "R-Click on Filter Space",
|
||||
"block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Extractor will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
|
||||
"block.create.transposer.tooltip": "TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.transposer.tooltip.condition1": "When Powered by Redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "_Pauses_ the Transposer.",
|
||||
"block.create.transposer.tooltip.condition2": "Active Belt pulling",
|
||||
"block.create.transposer.tooltip.behaviour2": "Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.",
|
||||
"block.create.transposer.tooltip.control1": "R-Click on Filter Space",
|
||||
"block.create.transposer.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
|
||||
"block.create.deployer.tooltip": "DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": "_Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.deployer.tooltip.condition1": "When Rotated",
|
||||
|
@ -1304,24 +1275,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "R-Clicked with Wrench",
|
||||
"block.create.deployer.tooltip.behaviour2": "Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "LINKED EXTRACTOR",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.",
|
||||
"block.create.linked_extractor.tooltip.condition1": "When Redstone Link Active",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "_Pauses_ the Extractor.",
|
||||
"block.create.linked_extractor.tooltip.control1": "R-Click on Filter Space",
|
||||
"block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Extractor will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
"block.create.linked_extractor.tooltip.control2": "R-Click on Frequency Space",
|
||||
"block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "When Redstone Link Active",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "_Pauses_ the Transposer.",
|
||||
"block.create.linked_transposer.tooltip.control1": "R-Click on Filter Space",
|
||||
"block.create.linked_transposer.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.",
|
||||
"block.create.linked_transposer.tooltip.control2": "R-Click on Frequency Space",
|
||||
"block.create.linked_transposer.tooltip.action2": "Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.",
|
||||
|
||||
"block.create.funnel.tooltip": "FUNNEL",
|
||||
"block.create.funnel.tooltip.summary": "_Collects_ _incoming_ _items_ and inserts them into the attached _Inventory_ if possible. Can collect items in the _world_ and items on a _belt_.",
|
||||
"block.create.funnel.tooltip.condition1": "Passive Belt pulling",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 821",
|
||||
"_": "Missing Localizations: 794",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "UNLOCALIZED: Andesite Casing",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "UNLOCALIZED: Brass Block",
|
||||
"block.create.brass_casing": "UNLOCALIZED: Brass Casing",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "Eingeschlossener Propeller",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Eingeschlossene Welle",
|
||||
"block.create.extractor": "Auswerfer",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Kalksteinsäule",
|
||||
"block.create.linear_chassis": "Schubgerüst",
|
||||
"block.create.linked_extractor": "Verknüpfter Auswerfer",
|
||||
"block.create.linked_transposer": "UNLOCALIZED: Linked Transposer",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Mechanisches Lager",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||
"block.create.tiled_glass": "Glasfliesen",
|
||||
"block.create.tiled_glass_pane": "Glasfliesenscheibe",
|
||||
"block.create.transposer": "UNLOCALIZED: Transposer",
|
||||
"block.create.turntable": "Drehtisch",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass",
|
||||
"block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "Wasserrad",
|
||||
"block.create.weathered_limestone": "Verwitterter Kalkstein",
|
||||
"block.create.weathered_limestone_bricks": "Verwitterte Kalksteinziegel",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "AUSWERFER",
|
||||
"block.create.extractor.tooltip.summary": "_Nimmt_ _Gegenstände_ von einem verbundenen _Behälter_ und wirft diese auf den Boden. Wird keine Gegenstände auswerfen, bis der Platz dafür frei ist. Kann einen Stack von Gegenständen als _Filter_ zugewiesen bekommen.",
|
||||
"block.create.extractor.tooltip.condition1": "Wenn durch Redstone aktiviert",
|
||||
"block.create.extractor.tooltip.behaviour1": "_Pausiert_ den Auswerfer",
|
||||
"block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.",
|
||||
"block.create.extractor.tooltip.control1": "R-Klick auf Filterplatz",
|
||||
"block.create.extractor.tooltip.action1": "Weist den momentan _gehaltenen_ _Stack_ als _Filter_ zu. Der Auswerfer zieht nur diesen _Gegenstandstyp_ und die _Anzahl_ des Stacks aus dem Behälter. ",
|
||||
|
||||
"block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.",
|
||||
"block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
|
||||
"block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench",
|
||||
"block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "VERKÜPFTER AUSWERFER",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Nimmt_ _Gegenstände_ von einem verbundenen _Behälter_ und wirft diese auf den Boden. Wird Gegenstände nicht auswerfen, bis der Platz frei ist. Kann einen Stack von Gegenständen zugewiesen bekommen. Kann aus Distanz mit einer _Redstone-Verbindung_ kontrolliert werden.",
|
||||
"block.create.linked_extractor.tooltip.condition1": "Wenn die Restone-Verbindung aktiv ist",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "Wird der Auswerfer _pausiert._",
|
||||
"block.create.linked_extractor.tooltip.control1": "R-Klick auf den Filterplatz",
|
||||
"block.create.linked_extractor.tooltip.action1": "Weist den momentan _gehaltenen_ _Stack_ als _Filter_ zu. Der Auswerfer zieht nur diesen _Gegenstandstyp_ und die _Anzahl_ des Stacks aus dem Behälter.",
|
||||
"block.create.linked_extractor.tooltip.control2": "R-Klick auf den Frequenzplatz",
|
||||
"block.create.linked_extractor.tooltip.action2": "Weist den momentan _gehaltenen_ _Gegenstand_ als Teil der gelisteten Frequenz zu. Wann auch immer eine übertragende _Redstone-Verbindung_ derselben Frequenz aktiv ist, pausiert dieser Auswerfer.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.",
|
||||
"block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space",
|
||||
"block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.",
|
||||
|
||||
"block.create.funnel.tooltip": "FLIEẞBANDTRICHTER",
|
||||
"block.create.funnel.tooltip.summary": "Sammelt eingehende Gegenstände auf einem _Mechanischen_ _Riemen_ und fügt diese in einen verbundenen _Behälter_ ein, wenn möglich. Muss direkt _auf_ dem Riemen sein, mit der Öffnung entgegen der Bewegungsrichtung des Riemens zeigend. Der Behälter muss auf der gleichen Höhe wie der Trichter sein.",
|
||||
"block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 425",
|
||||
"_": "Missing Localizations: 418",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "Boîtier en andésite",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "UNLOCALIZED: Brass Block",
|
||||
"block.create.brass_casing": "Boîtier en laiton",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "Ventilateur enfermé",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Arbre mécanique enfermé",
|
||||
"block.create.extractor": "Extracteur",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Pillier de calcaire",
|
||||
"block.create.linear_chassis": "Châssis linéaire",
|
||||
"block.create.linked_extractor": "Extracteur lié",
|
||||
"block.create.linked_transposer": "Transposeur lié",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Roulement mécanique",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "Stressomètre",
|
||||
"block.create.tiled_glass": "Verre carrelé",
|
||||
"block.create.tiled_glass_pane": "Vitre carrelé",
|
||||
"block.create.transposer": "Transposeur",
|
||||
"block.create.turntable": "Plaque tournante",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "Fenêtre en verre verticale",
|
||||
"block.create.vertical_framed_glass_pane": "Vitre encadrée verticale",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "Roue à eau",
|
||||
"block.create.weathered_limestone": "Calcaire patinées",
|
||||
"block.create.weathered_limestone_bricks": "Briques de calcaire patinées",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRACTEUR",
|
||||
"block.create.extractor.tooltip.summary": "_Prend_ des _objets_ d'un _inventaire_ attaché et les laisse tomber sur le sol. Ne laissera pas tomber les objets à moins que l'espace ne soit dégagé. Peut être affecté à une pile d'objets en tant que _filtre_.",
|
||||
"block.create.extractor.tooltip.condition1": "Lorsqu'alimenté par de la redstone",
|
||||
"block.create.extractor.tooltip.behaviour1": "Met l'extracteur en _pause_.",
|
||||
"block.create.extractor.tooltip.condition2": "Tirage actif du tapis roulant",
|
||||
"block.create.extractor.tooltip.behaviour2": "Les extracteurs peuvent extraire les objets _de_ _tapis_ renforcés de _boîtiers_ _en_ _laiton_. Lorsque l'extracteur est bloqué, le _tapis_ _roulant_ _va_ _caler_.",
|
||||
"block.create.extractor.tooltip.control1": "Clic droit sur l'espace du filtre",
|
||||
"block.create.extractor.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur extrait exclusivement les _types_ et _comptes_ des objets de la pile du filtre.",
|
||||
|
||||
"block.create.transposer.tooltip": "TRANSPOSEUR",
|
||||
"block.create.transposer.tooltip.summary": "_Prend_ les _objets_ d'un _inventaire_ attaché et les place immédiatement dans _l'inventaire_ cible. Peut être affecté à une pile d'objets en tant que _filtre_.",
|
||||
"block.create.transposer.tooltip.condition1": "Lorsqu'alimenté par de la redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "Met le transposeur en _pause_.",
|
||||
"block.create.transposer.tooltip.condition2": "Tirage actif du tapis roulant",
|
||||
"block.create.transposer.tooltip.behaviour2": "Les transposeurs peuvent extraire des éléments _de_ _tapis_ _roulants_ renforcés de _boîtiers_ _en_ _laiton_. Lorsque le transposeur est sauvegardé, le _tapis_ _roulant_ _va_ _caler_.",
|
||||
"block.create.transposer.tooltip.control1": "Clic droit sur l'espace du filtre",
|
||||
"block.create.transposer.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur tire exclusivement les _types_ et _comptes_ des objets de la pile du filtre.",
|
||||
|
||||
"block.create.deployer.tooltip": "DÉPLOYEUR",
|
||||
"block.create.deployer.tooltip.summary": "_Frappe_, _utilise_ et _active_. Cette machine essaiera _d'imiter_ un _joueur_ autant que possible. Peut _prendre_ et _déposer_ des _objets_ dans _l'inventaire_ adjacent. Peut être affecté à une pile d'éléments en tant que _filtre_.",
|
||||
"block.create.deployer.tooltip.condition1": "Lorsque tourné",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "Clic droit avec une clé",
|
||||
"block.create.deployer.tooltip.behaviour2": "Bascule le mode frappe. Dans le _mode_ _frappe_, le déployeur tentera d'utiliser son élément pour _casser_ les _blocs_ ou infliger des _dégats_ aux _entités_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "EXTRACTEUR LIÉ",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Prend_ les _objets_ d'un _inventaire_ attaché et les laisse tomber sur le sol. Ne laissera pas tomber les objets à moins que l'espace ne soit dégagé. Peut être assigné une pile d'éléments en tant que _filtre_. Peut être contrôlé à distance via une _liaison_ _redstone_.",
|
||||
"block.create.linked_extractor.tooltip.condition1": "Lorsque la liaison redstone est active",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "Met l'extracteur en _pause_.",
|
||||
"block.create.linked_extractor.tooltip.control1": "Clic droit sur l'espace du filtre",
|
||||
"block.create.linked_extractor.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur extrait exclusivement les _types_ et _comptes_ des objets de la pile du filtre.",
|
||||
"block.create.linked_extractor.tooltip.control2": "Clic droit sur l'espace des fréquences",
|
||||
"block.create.linked_extractor.tooltip.action2": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ dans le cadre de la fréquence écoutée. Chaque fois qu'une _liaison_ _redstone_ de la même fréquence est alimenté, cet extracteur s'arrête.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "TRANSPOSEUR LIÉ",
|
||||
"block.create.linked_transposer.tooltip.summary": "_Prend_ les _objets_ d'un _inventaire_ attaché et les place immédiatement dans _l'inventaire_ cible. Peut être affecté à une pile d'objets en tant que _filtre_. Peut être contrôlé à distance via une _liaison_ _redstone_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "Lorsque la liaison redstone est active",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "Met le transposeur en _pause_.",
|
||||
"block.create.linked_transposer.tooltip.control1": "Clic droit sur l'espace du filtre",
|
||||
"block.create.linked_transposer.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur tire exclusivement les _types_ et _comptes_ des objets de la pile du filtre.",
|
||||
"block.create.linked_transposer.tooltip.control2": "Clic droit sur l'espace des fréquences",
|
||||
"block.create.linked_transposer.tooltip.action2": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ dans le cadre de la fréquence écoutée. Chaque fois qu'une _liaison_ _redstone_ de la même fréquence est alimenté, ce transposeur s'arrête.",
|
||||
|
||||
"block.create.funnel.tooltip": "ENTONNOIR AMÉLIORÉ",
|
||||
"block.create.funnel.tooltip.summary": "_Collecte_ les _objets_ en _approche_ et les insère dans _l'inventaire_ attaché si possible. Peut collecter des objets dans le _monde_ et des objets sur un _tapis_ _roulant_.",
|
||||
"block.create.funnel.tooltip.condition1": "Passage de tapis roulant passif",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 409",
|
||||
"_": "Missing Localizations: 402",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "Involucro di Andesite",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "Blocco di Ottone",
|
||||
"block.create.brass_casing": "Involucro di Ottone",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "Ventilatore incassato",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Albero Incassato",
|
||||
"block.create.extractor": "Estrattore",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Pilastro di Calcare",
|
||||
"block.create.linear_chassis": "Telaio Lineare",
|
||||
"block.create.linked_extractor": "Estrattore Connesso",
|
||||
"block.create.linked_transposer": "Traspositore Connesso",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Supporto Meccanico",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "Stressometro",
|
||||
"block.create.tiled_glass": "Vetro Piastrellato",
|
||||
"block.create.tiled_glass_pane": "Pannello di Vetro Piastrellato",
|
||||
"block.create.transposer": "Traspositore",
|
||||
"block.create.turntable": "Piatto",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "Finestra Verticale Vetro",
|
||||
"block.create.vertical_framed_glass_pane": "Pannello di Finestra Verticale Vetro",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "Ruota d'Acqua",
|
||||
"block.create.weathered_limestone": "Calcare Consumato",
|
||||
"block.create.weathered_limestone_bricks": "Mattoni di Calcare Consumato",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "ESTRATTORE",
|
||||
"block.create.extractor.tooltip.summary": "_Prende_ _Oggetti_ da un _Inventario _ allegato e li lascia cadere a terra. Non lascerà cadere gli oggetti a meno che lo spazio non sia libero. Può essere assegnata una pila di oggetti come _filtro_.",
|
||||
"block.create.extractor.tooltip.condition1": "Quando alimentato da Redstone",
|
||||
"block.create.extractor.tooltip.behaviour1": "_Ferma_ l'Estrattore.",
|
||||
"block.create.extractor.tooltip.condition2": "Attiva Tiraggio del Nastro",
|
||||
"block.create.extractor.tooltip.behaviour2": "Gli estrattori possono estrarre oggetti _da_ _nastri_ rinforzati con un _involucro_ _di_ _ottone_. Quando l'estrattore è bloccato, il _nastro_ _si_ _arresterà_.",
|
||||
"block.create.extractor.tooltip.control1": "Clic-Destro sullo Spazio del Filtro",
|
||||
"block.create.extractor.tooltip.action1": "Assegna la _pila_ attualmente _trattenuta_ come _Filtro_. L'estrattore estrarrà esclusivamente il _tipo_ di oggetto e il _conteggio_ della pila come filtro.",
|
||||
|
||||
"block.create.transposer.tooltip": "TRASPOSITORE",
|
||||
"block.create.transposer.tooltip.summary": "_Prende_ _oggetti_ da un _inventario_ allegato e li inserisce immediatamente nell'_inventario_ di destinazione. Può essere assegnata una pila di oggetti come _filtro_.",
|
||||
"block.create.transposer.tooltip.condition1": "Quando Alimentato da Redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "_Ferma_ il Traspositore.",
|
||||
"block.create.transposer.tooltip.condition2": "Attiva Tiraggio del Nastro",
|
||||
"block.create.transposer.tooltip.behaviour2": "I Traspositori possono estrarre oggetti _dai_ _nastri_ rinforzati con un _involucro_ _di_ _ottone_. Quando viene eseguito il backup del traspositore, il _nastro_ _si_ _arresterà_.",
|
||||
"block.create.transposer.tooltip.control1": "Clic-Destro sullo Spazio del Filtro",
|
||||
"block.create.transposer.tooltip.action1": "Assegna la _pila_ attualmente _trattenuta_ come _Filtro_. L'estrattore estrarrà esclusivamente il _tipo_ di oggetto e il _conteggio_ della pila come filtro.",
|
||||
|
||||
"block.create.deployer.tooltip": "INSTALLATORE",
|
||||
"block.create.deployer.tooltip.summary": "_Punzoni_, _Usi_ e _Attivazioni_. Questa macchina proverà a _imitare_ un _giocatore_ il più possibile. Può _Prendere_ e _depositare_ _oggetti_ nell'_Inventario_ adiacente. Può essere assegnata una pila di oggetti come _filtro_.",
|
||||
"block.create.deployer.tooltip.condition1": "Quando Ruotato",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "Clic-Destro con la Chiave Inglese",
|
||||
"block.create.deployer.tooltip.behaviour2": "Attiva / disattiva la modalità di perforazione. In _modalità_ _pugno_, l'Installatore tenterà di usare il suo oggetto per _rompere_ _blocchi_ o _ferire_ _entità_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "ESTRATTORE CONNESSO",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Prende_ _gli_ _oggetti_ da un _Inventario_ attaccato e li lascia cadere a terra. Non lascerà cadere gli oggetti a meno che lo spazio non sia libero. Può essere assegnata una pila di oggetti come _filtro_. Può essere controllato a distanza tramite un _Collegamento_ _Redstone_.",
|
||||
"block.create.linked_extractor.tooltip.condition1": "Quando il Collegamento Redstone è attivo",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "_Ferma_ l'Estrattore.",
|
||||
"block.create.linked_extractor.tooltip.control1": "Clic-Destro sullo Spazio del Filtro",
|
||||
"block.create.linked_extractor.tooltip.action1": "Assegna la _pila_ attualmente _trattenuta_ come _Filtro_. L'estrattore estrarrà esclusivamente il _tipo_ di oggetto e il _conteggio_ della pila come filtro.",
|
||||
"block.create.linked_extractor.tooltip.control2": "Clic-Destro sullo Spazio di Frequenza",
|
||||
"block.create.linked_extractor.tooltip.action2": "Assegna l'_oggetto_ attualmente _trattenuto_ come parte della Frequenza ascoltata. Ogni volta che viene alimentato un _Collegamento_ _Redstone_ della stessa frequenza di trasmissione, questo estrattore si mette in pausa.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "TRASPOSITORE CONNESSO",
|
||||
"block.create.linked_transposer.tooltip.summary": "_Prende_ _oggetti_ da un _Inventario_ allegato e li inserisce immediatamente nell'_Inventario_ di destinazione. Può essere assegnata una pila di oggetti come _filtro_. Può essere controllato a distanza tramite un _Collegamento_ _Redstone_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "Quando il Collegamento Redstone è Attivo",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "_Ferma_ il Traspositore.",
|
||||
"block.create.linked_transposer.tooltip.control1": "Clic-Destro sullo Spazio del Filtro",
|
||||
"block.create.linked_transposer.tooltip.action1": "Assegna la _pila_ attualmente _tenuta_ come _Filtro_. Il Traspositore estrae solo gli oggetti che corrispondono al tipo di oggetto e al conteggio della pila di filtri.",
|
||||
"block.create.linked_transposer.tooltip.control2": "Clic-Destro sullo Spazio di Frequenza",
|
||||
"block.create.linked_transposer.tooltip.action2": "Assegna l'_oggetto_ attualmente _tenuto_ come parte della Frequenza ascoltata. Ogni volta che viene alimentato un _Collegamento_ _Redstone_ della stessa frequenza di trasmissione, questo Traspositore si ferma.",
|
||||
|
||||
"block.create.funnel.tooltip": "IMBUTO",
|
||||
"block.create.funnel.tooltip.summary": "_Raccoglie_ _gli_ _oggetti_ _in_ _arrivo_ e li inserisce nell'_inventario_ allegato, se possibile. Può raccogliere oggetti nel _mondo_ e oggetti su un _nastro_.",
|
||||
"block.create.funnel.tooltip.condition1": "Tirare il Nastro passivamente",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 404",
|
||||
"_": "Missing Localizations: 397",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "安山岩ケーシング",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "真鍮ブロック",
|
||||
"block.create.brass_casing": "真鍮ケーシング",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "ケース入りファン",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "ケース入りシャフト",
|
||||
"block.create.extractor": "エクストラクター",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "石灰岩の柱",
|
||||
"block.create.linear_chassis": "リニアシャーシ",
|
||||
"block.create.linked_extractor": "リンクされたエクストラクター",
|
||||
"block.create.linked_transposer": "リンクされたトランスポーザー",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "メカニカルベアリング",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "ストレスメーター",
|
||||
"block.create.tiled_glass": "タイルガラス",
|
||||
"block.create.tiled_glass_pane": "タイルガラス板",
|
||||
"block.create.transposer": "トランスポーザー",
|
||||
"block.create.turntable": "ターンテーブル",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "垂直ガラス窓",
|
||||
"block.create.vertical_framed_glass_pane": "垂直ガラス窓板",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "水車",
|
||||
"block.create.weathered_limestone": "風化した石灰岩",
|
||||
"block.create.weathered_limestone_bricks": "風化した石灰岩レンガ",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "抽出器",
|
||||
"block.create.extractor.tooltip.summary": "付属のインベントリから_アイテムを取り_、地面にドロップします。 スペースが空いていない限り、アイテムはドロップされません。 _フィルター_としてアイテムスタックを割り当てることができます。",
|
||||
"block.create.extractor.tooltip.condition1": "レッドストーン信号があるとき",
|
||||
"block.create.extractor.tooltip.behaviour1": "エクストラクタを_一時停止_します。",
|
||||
"block.create.extractor.tooltip.condition2": "アクティブベルト牽引されたとき",
|
||||
"block.create.extractor.tooltip.behaviour2": "エクストラクタは、_真ちゅう製のケーシング_で補強された_ベルトから_アイテムを引き出すことができます。 エクストラクタが詰まると、_ベルトが停止_します。",
|
||||
"block.create.extractor.tooltip.control1": "フィルタースペースを右クリック",
|
||||
"block.create.extractor.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。 エクストラクターは、アイテム_タイプ_とフィルタースタックの_数_を排他的に取得します。",
|
||||
|
||||
"block.create.transposer.tooltip": "トランスポーザー",
|
||||
"block.create.transposer.tooltip.summary": "取り付けされたインベントリから_アイテムを取得_し、すぐにターゲット_インベントリ_に入れます。 _フィルター_としてアイテムスタックを割り当てることができます。",
|
||||
"block.create.transposer.tooltip.condition1": "レッドストーン信号があるとき",
|
||||
"block.create.transposer.tooltip.behaviour1": "トランスポーザを_一時停止_します。",
|
||||
"block.create.transposer.tooltip.condition2": "アクティブベルト牽引されたとき",
|
||||
"block.create.transposer.tooltip.behaviour2": "トランスポーザーは、_真鍮のケーシングで補強_された_ベルトからアイテム_を引っ張ることができます。 トランスポーザがバックアップされると、_ベルトが停止_します。",
|
||||
"block.create.transposer.tooltip.control1": "フィルタースペースを右クリック",
|
||||
"block.create.transposer.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。トランスポーザーは、フィルタースタックのアイテムタイプと_カウント_を排他的にプルします。",
|
||||
|
||||
"block.create.deployer.tooltip": "デプロイヤ",
|
||||
"block.create.deployer.tooltip.summary": "_パンチ_、_使用_、_有効化_。 このマシンは、_プレイヤー_をできるだけ_真似_しようとします。 隣接するインベントリの_アイテムを受け取り_、_預ける_ことができます。 _フィルター_としてアイテムスタックを割り当てることができます。",
|
||||
"block.create.deployer.tooltip.condition1": "回転したとき",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "レンチで右クリックしたとき",
|
||||
"block.create.deployer.tooltip.behaviour2": "パンチモードを切り替えます。 _パンチモード_では、デプロイヤはそのアイテムを使用して_ブロックを壊したりエンティティを傷つけ_たりしようとします。",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "リンクエクストラクター",
|
||||
"block.create.linked_extractor.tooltip.summary": "取り付けてる_インベントリ_から_アイテムを取り_、それらを地面に落とします。 スペースが空いていない限り、アイテムはドロップされません。 _フィルター_としてアイテムスタックを割り当てることができます。 _レッドストーンリンク_を介してリモートで制御できます。",
|
||||
"block.create.linked_extractor.tooltip.condition1": "レッドストーンリンクがアクティブな場合",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "エクストラクタを_一時停止_します。",
|
||||
"block.create.linked_extractor.tooltip.control1": "フィルタースペースを右クリックしたとき",
|
||||
"block.create.linked_extractor.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。 エクストラクターは、_アイテムタイプ_とフィルタースタックの_数_を排他的に取得します。",
|
||||
"block.create.linked_extractor.tooltip.control2": "周波数スペースを右クリックしたとき",
|
||||
"block.create.linked_extractor.tooltip.action2": "リッスンされている周波数の一部として_現在保持_されているアイテムを割り当てます。 同じ周波数の送信_レッドストーンリンク_に動力が供給されると、このエクストラクターは一時停止します。",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "リンクされたトランスポーザー",
|
||||
"block.create.linked_transposer.tooltip.summary": "取り付けてる_インベントリ_から_アイテムを取得_し、すぐにターゲット_インベントリ_に入れます。 フィルターとしてアイテムスタックを割り当てることができます。 _レッドストーンリンク_を介してリモートで制御できます。",
|
||||
"block.create.linked_transposer.tooltip.condition1": "レッドストーンリンクがアクティブのとき",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "トランスポーザを_一時停止_します。",
|
||||
"block.create.linked_transposer.tooltip.control1": "フィルタースペースを右クリックしたとき",
|
||||
"block.create.linked_transposer.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。 トランスポーザーは、アイテム_タイプ_とフィルター_スタック_の数に一致するアイテムのみをプルします。",
|
||||
"block.create.linked_transposer.tooltip.control2": "周波数スペースを右クリックしたとき",
|
||||
"block.create.linked_transposer.tooltip.action2": "聴いてる周波数の一部として現在_保持されているアイテム_を割り当てます。 同じ周波数の送信レッドストーンリンクに動力が供給されると、このトランスポーザーは一時停止します。",
|
||||
|
||||
"block.create.funnel.tooltip": "漏斗",
|
||||
"block.create.funnel.tooltip.summary": "_入力アイテムを収集_し、可能な場合はそれらを取り付けた_インベントリ_に挿入します。 _世界_のアイテムや_ベルト_のアイテムを集めることができます。",
|
||||
"block.create.funnel.tooltip.condition1": "パッシブベルト引っ張り",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 409",
|
||||
"_": "Missing Localizations: 402",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "안산암 케이스",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "황동 블럭",
|
||||
"block.create.brass_casing": "황동 케이스",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "덮힌 환풍기",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "덮힌 축",
|
||||
"block.create.extractor": "추출기",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "석회암 기둥",
|
||||
"block.create.linear_chassis": "직선 섀시",
|
||||
"block.create.linked_extractor": "무선 추출기",
|
||||
"block.create.linked_transposer": "무선 트랜스포저",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "베어링",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "피로도 계측기",
|
||||
"block.create.tiled_glass": "타일 유리",
|
||||
"block.create.tiled_glass_pane": "타일 유리판",
|
||||
"block.create.transposer": "트랜스포저",
|
||||
"block.create.turntable": "돌림판",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "수직 유리",
|
||||
"block.create.vertical_framed_glass_pane": "수직 유리판",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "물레방아",
|
||||
"block.create.weathered_limestone": "풍화된 석회암",
|
||||
"block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRACTOR",
|
||||
"block.create.extractor.tooltip.summary": "_연결된_ _인벤토리_로부터 아이템을 꺼내 땅에 떨어뜨립니다. 공간이 비지 않았다면 아이템을 떨어뜨리지 않습니다. 개수/필터를 설정 가능합니다.",
|
||||
"block.create.extractor.tooltip.condition1": "레드스톤 신호를 받았을 때",
|
||||
"block.create.extractor.tooltip.behaviour1": "추출기를 _멈춥니다_.",
|
||||
"block.create.extractor.tooltip.condition2": "움직이는 벨트에 연결되었을 때",
|
||||
"block.create.extractor.tooltip.behaviour2": "추출기는 _황동_ _케이스_가 장착된 _벨트_에서 아이템을 빼낼 수 있습니다. 추출기가 막혔을 때는, 벨트가 _멈춥니다_.",
|
||||
"block.create.extractor.tooltip.control1": "필터 슬롯을 우클릭할 때",
|
||||
"block.create.extractor.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 추출기는 필터 설정에 맞춰 아이템을 빼낼 것입니다.",
|
||||
|
||||
"block.create.transposer.tooltip": "TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "연결된 인벤토리로부터 대상 인벤토리로 아이템을 _바로_ _이동_시킵니다. 개수/필터를 설정 가능합니다.",
|
||||
"block.create.transposer.tooltip.condition1": "레드스톤 신호를 받았을 때",
|
||||
"block.create.transposer.tooltip.behaviour1": "트랜스포저를 _멈춥니다_.",
|
||||
"block.create.transposer.tooltip.condition2": "움직이는 벨트에 연결되었을 때",
|
||||
"block.create.transposer.tooltip.behaviour2": "트랜스포저는 _황동_ _케이스_가 장착된 _벨트_에서 아이템을 빼낼 수 있습니다. 추출기가 막혔을 때는, 벨트가 _멈춥니다_.",
|
||||
"block.create.transposer.tooltip.control1": "필터 슬롯을 우클릭할 때",
|
||||
"block.create.transposer.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 트랜스포저는 필터 설정에 맞춰 아이템을 빼낼 것입니다.",
|
||||
|
||||
"block.create.deployer.tooltip": "DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": " _때리고_, _사용하고_ _작동시킵니다_. 이 장치는 _플레이어_를 가능한 한 _흉내내려할_ _것입니다_. 주변 인벤토리에서 아이템을 쓰거나 넣을 수 있습니다. 필터로 사용하는 아이템을 설정할 수 있습니다.",
|
||||
"block.create.deployer.tooltip.condition1": "회전될 때",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "렌치로 우클릭",
|
||||
"block.create.deployer.tooltip.behaviour2": "_펀치_ _모드_로 바꿉니다. 이 상태에서는 배포기가 아이템을 가지고 _부수거나_ _때리려고_ 할 것입니다.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "LINKED EXTRACTOR",
|
||||
"block.create.linked_extractor.tooltip.summary": "_연결된_ _인벤토리_로부터 아이템을 꺼내 땅에 떨어뜨립니다. 공간이 비지 않았다면 아이템을 떨어뜨리지 않습니다. 개수/필터를 설정 가능합니다. 레드스톤 링크를 통해 _무선으로_ 컨트롤 될 수 있습니다.",
|
||||
"block.create.linked_extractor.tooltip.condition1": "레드스톤 링크 신호를 받았을 때",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "추출기를 _멈춥니다_.",
|
||||
"block.create.linked_extractor.tooltip.control1": "필터 슬롯을 우클릭할 때",
|
||||
"block.create.linked_extractor.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 추출기는 필터 설정에 맞춰 아이템을 빼낼 것입니다.",
|
||||
"block.create.linked_extractor.tooltip.control2": "아이템을 들고 주파수 슬롯을 우클릭",
|
||||
"block.create.linked_extractor.tooltip.action2": "그 아이템으로 주파수를 설정합니다. _같은_ _주파수_의 레드스톤 링크가 신호를 보낸다면, 추출기는 멈출 것입니다.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "연결된 인벤토리로부터 대상 인벤토리로 아이템을 _바로_ _이동_시킵니다. 개수/필터를 설정 가능합니다. 레드스톤 링크를 통해 _무선으로_ 컨트롤 될 수 있습니다.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "레드스톤 링크 신호를 받았을 때",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "트랜스포저를 _멈춥니다_.",
|
||||
"block.create.linked_transposer.tooltip.control1": "필터 슬롯을 우클릭할 때",
|
||||
"block.create.linked_transposer.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 트랜스포저는 필터 설정에 맞춰 아이템을 빼낼 것입니다.",
|
||||
"block.create.linked_transposer.tooltip.control2": "아이템을 들고 주파수 슬롯을 우클릭",
|
||||
"block.create.linked_transposer.tooltip.action2": "그 아이템으로 주파수를 설정합니다. _같은_ _주파수_의 레드스톤 링크가 신호를 보낸다면, 트랜스포저는 멈출 것입니다.",
|
||||
|
||||
"block.create.funnel.tooltip": "FUNNEL",
|
||||
"block.create.funnel.tooltip.summary": "들어오는 아이템을 가능하면 _연결된_ _인벤토리_에 넣습니다. _벨트_ _위_의 아이템도 끌어올 수 있습니다.",
|
||||
"block.create.funnel.tooltip.condition1": "움직이는 벨트위에 있을 때",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 759",
|
||||
"_": "Missing Localizations: 732",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "UNLOCALIZED: Andesite Casing",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "UNLOCALIZED: Brass Block",
|
||||
"block.create.brass_casing": "UNLOCALIZED: Brass Casing",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "Omhulsde Ventilator",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Omhulsde Drijfas",
|
||||
"block.create.extractor": "Extractor",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Kalksteen Pillar",
|
||||
"block.create.linear_chassis": "Lineaar Frame",
|
||||
"block.create.linked_extractor": "Gelinkte Extractor",
|
||||
"block.create.linked_transposer": "UNLOCALIZED: Linked Transposer",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Mechanische Lager",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "Stressmeter",
|
||||
"block.create.tiled_glass": "Getegeld Glas",
|
||||
"block.create.tiled_glass_pane": "Getegeld Glazen Paneel",
|
||||
"block.create.transposer": "UNLOCALIZED: Transposer",
|
||||
"block.create.turntable": "Draaischijf",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass",
|
||||
"block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "Waterrad",
|
||||
"block.create.weathered_limestone": "Verweerde Kalksteen",
|
||||
"block.create.weathered_limestone_bricks": "Verweerde Kalksteenstenen",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRACTOR",
|
||||
"block.create.extractor.tooltip.summary": "_Haalt_ _objecten_ uit een aangesloten _inventaris_ en laat ze op de grond vallen. Laat items niet vallen totdat de ruimte is leeggemaakt. Kan een item-stapel worden toegewezen als een _filter._",
|
||||
"block.create.extractor.tooltip.condition1": "Wanneer aangestuurd door redstone",
|
||||
"block.create.extractor.tooltip.behaviour1": "_Pauzeerd_ de Extractor",
|
||||
"block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.",
|
||||
"block.create.extractor.tooltip.control1": "R-Klik op Filter Plek",
|
||||
"block.create.extractor.tooltip.action1": "Wijst momenteel _vastgehouden_ _stapel_ toe als de _Filter._ Extractor zal uitsluitend het object _type_ en _hoevelheid_ van de stapel op de grond gooien.",
|
||||
|
||||
"block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.",
|
||||
"block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
|
||||
"block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench",
|
||||
"block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "LINKED EXTRACTOR",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Haalt_ _objecten_ uit een aangesloten _inventaris_ en laat ze op de grond vallen. Laat items niet vallen totdat de ruimte is leeggemaakt. Kan een item-stapel worden toegewezen als een _filter._ Kan op afstand worden bediend via een _Redstone_ _Brug._",
|
||||
"block.create.linked_extractor.tooltip.condition1": "Wanneer Redstone verbinding actief is",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "_Pauzeerd_ de Extractor",
|
||||
"block.create.linked_extractor.tooltip.control1": "R-Klik op Filter Plek",
|
||||
"block.create.linked_extractor.tooltip.action1": "Wijst momenteel _vastgehouden_ _stapel_ toe als de _Filter._ Extractor zal uitsluitend het object _type_ en _hoevelheid_ van de stapel op de grond gooien.",
|
||||
"block.create.linked_extractor.tooltip.control2": "R-Klik op Frequency Plek",
|
||||
"block.create.linked_extractor.tooltip.action2": "Wijst momenteel _vastgehouden_ _object_ toe als onderdeel van de geluisterde frequentie. Wanneer een zendende _Redstone_ _Brug_ van dezelfde frequentie wordt ingeschakeld, pauzeert deze Extractor.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.",
|
||||
"block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space",
|
||||
"block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.",
|
||||
|
||||
"block.create.funnel.tooltip": "TRANSPORTBAND TRECHTER",
|
||||
"block.create.funnel.tooltip.summary": "Verzamelt inkomende items op een _Mechanische_ _Transportband_ en plaatst deze indien mogelijk in de bijgevoegde _Inventaris._ Moet zich direct op een transportband bevinden, met de opening tegenover de bewegingsrichting van de transportband. Het inventaris moet op dezelfde hoogte zijn als de trechter.",
|
||||
"block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 828",
|
||||
"_": "Missing Localizations: 801",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "UNLOCALIZED: Andesite Casing",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "UNLOCALIZED: Brass Block",
|
||||
"block.create.brass_casing": "UNLOCALIZED: Brass Casing",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "Ventilador Revestida",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Eixo Revestido",
|
||||
"block.create.extractor": "Extrator",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Pilar de Calcário",
|
||||
"block.create.linear_chassis": "Chassis de Translado",
|
||||
"block.create.linked_extractor": "Extrator Conectado",
|
||||
"block.create.linked_transposer": "UNLOCALIZED: Linked Transposer",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Rolamento Mecânico",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||
"block.create.tiled_glass": "Vidro Entalhado",
|
||||
"block.create.tiled_glass_pane": "Vidraça Entalhada",
|
||||
"block.create.transposer": "UNLOCALIZED: Transposer",
|
||||
"block.create.turntable": "Mesa giratória",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass",
|
||||
"block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "Roda de Água",
|
||||
"block.create.weathered_limestone": "Calcário Resistido",
|
||||
"block.create.weathered_limestone_bricks": "Tijolos de Calcário Resistido",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRATOR",
|
||||
"block.create.extractor.tooltip.summary": "_Pega_ _itens_ de um _Inventário_ conectado e os joga no chão. Não irá jogar Itens até o espaço ser limpo. Pode ser configurado como para ser um _filtro._",
|
||||
"block.create.extractor.tooltip.condition1": "Quando Ligado por Redstone",
|
||||
"block.create.extractor.tooltip.behaviour1": "_Para_ o Extractor",
|
||||
"block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.",
|
||||
"block.create.extractor.tooltip.control1": "B-Direito no Espaço de Filtro",
|
||||
"block.create.extractor.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Extrator irá apenas puxar apenas _tipo_ e _quantidade_ do item filtro.",
|
||||
|
||||
"block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.",
|
||||
"block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
|
||||
"block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench",
|
||||
"block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "EXTRATOR CONECTADO",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Pega_ _itens_ de um _Inventário_ e os joga no chão. Não vai jogar Itens até que o espaço ser limpo. Pode ser configurado como para ser um _filtro._ Pode ser controlado remotamente via _Conexão_ de _Redstone._",
|
||||
"block.create.linked_extractor.tooltip.condition1": "Quando Conexão de Redstone Ativa",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "_Para_ o Extrator",
|
||||
"block.create.linked_extractor.tooltip.control1": "B-Direito no Espaço de Filtro",
|
||||
"block.create.linked_extractor.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Extrator irá apenas puxar apenas _tipo_ e _quantidade_ do item filtro.",
|
||||
"block.create.linked_extractor.tooltip.control2": "B-Direito no Espaço de Frequência",
|
||||
"block.create.linked_extractor.tooltip.action2": "Configura a _pilha_ atualmente _presente_ como parte da Frequência a ouvir. Quando um _Conexão_ de _Redstone_ transmissor da mesma frequência é ligado, esse Extrator irá parar.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.",
|
||||
"block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space",
|
||||
"block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.",
|
||||
|
||||
"block.create.funnel.tooltip": "FUNIL DE ESTEIRA",
|
||||
"block.create.funnel.tooltip.summary": "Coleta itens passando numa _Esteira_ _Mecânica_ e os insere no _Inventário_ conetado, se possível. Precisa estar diretamente _sobre_ uma Esteira, com a abertura virada contra o movimento da Esteira. O inventário precisa estar na mesma altura que o funil.",
|
||||
"block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 822",
|
||||
"_": "Missing Localizations: 795",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs",
|
||||
"block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall",
|
||||
"block.create.andesite_casing": "UNLOCALIZED: Andesite Casing",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone",
|
||||
"block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab",
|
||||
"block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "UNLOCALIZED: Brass Block",
|
||||
"block.create.brass_casing": "UNLOCALIZED: Brass Casing",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "Вентилятор",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Вальный привод",
|
||||
"block.create.extractor": "Экстрактор",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
"block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab",
|
||||
"block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
|
||||
"block.create.limestone_pillar": "Известняковая колонна",
|
||||
"block.create.linear_chassis": "Поступательная рама",
|
||||
"block.create.linked_extractor": "Сигнальный экстрактор",
|
||||
"block.create.linked_transposer": "UNLOCALIZED: Linked Transposer",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "Механический подшипник",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone",
|
||||
"block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria",
|
||||
"block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "UNLOCALIZED: Paved Andesite",
|
||||
"block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab",
|
||||
"block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||
"block.create.tiled_glass": "Плиточное стекло",
|
||||
"block.create.tiled_glass_pane": "Плиточная стеклянная панель",
|
||||
"block.create.transposer": "UNLOCALIZED: Transposer",
|
||||
"block.create.turntable": "Поворотный стол",
|
||||
"block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor",
|
||||
"block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass",
|
||||
"block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane",
|
||||
"block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor",
|
||||
"block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer",
|
||||
"block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer",
|
||||
"block.create.water_wheel": "Водяное колесо",
|
||||
"block.create.weathered_limestone": "Обветренный известняк",
|
||||
"block.create.weathered_limestone_bricks": "Кирпичи из обветренного известняка",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRACTOR",
|
||||
"block.create.extractor.tooltip.summary": "_Извлекает_ _предметы_ из прилагаемого _инвентаря_ и бросает на землю. Не будет бросать предметы до тех пор, пока пространство не освободится. Может быть назначен _фильтр_ в виде стака предметов.",
|
||||
"block.create.extractor.tooltip.condition1": "Когда запитан",
|
||||
"block.create.extractor.tooltip.behaviour1": "_Приостанавливает_ экстрактор",
|
||||
"block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.",
|
||||
"block.create.extractor.tooltip.control1": "ПКМ по фильтру",
|
||||
"block.create.extractor.tooltip.action1": "Устанавливает _стак_ _в_ _руке_ в качестве _фильтра._ Экстрактор будет извлекать _определённый_ _предмет_ в _определённом_ _количестве_ по фильтру.",
|
||||
|
||||
"block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone",
|
||||
"block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling",
|
||||
"block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.",
|
||||
"block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.",
|
||||
|
||||
"block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.",
|
||||
"block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench",
|
||||
"block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "LINKED EXTRACTOR",
|
||||
"block.create.linked_extractor.tooltip.summary": "_Извлекает_ _предметы_ из прилагаемого _инвентаря_ и бросает на землю. Не будет бросать предметы до тех пор, пока пространство не освободится. Может быть назначен _фильтр_ в виде стака предметов. Может управляться дистанционно через _Передатчик_ _сигнала._",
|
||||
"block.create.linked_extractor.tooltip.condition1": "Когда соединение активно",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "_Приостанавливает_ экстрактор",
|
||||
"block.create.linked_extractor.tooltip.control1": "ПКМ по фильтру",
|
||||
"block.create.linked_extractor.tooltip.action1": "Устанавливает _стак_ _в_ _руке_ в качестве _фильтра._ Экстрактор будет извлекать _определённый_ _предмет_ в _определённом_ _количестве_ по фильтру.",
|
||||
"block.create.linked_extractor.tooltip.control2": "ПКМ по частоте",
|
||||
"block.create.linked_extractor.tooltip.action2": "Устанавливает _частоту_ для этого экстрактора. При передаче сигнала с передающего _Сигнального_ _соединения_ экстрактор будет приостановлен.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.",
|
||||
"block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.",
|
||||
"block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space",
|
||||
"block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.",
|
||||
"block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space",
|
||||
"block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.",
|
||||
|
||||
"block.create.funnel.tooltip": "BELT FUNNEL",
|
||||
"block.create.funnel.tooltip.summary": "Собирает входящие предметы на _Механической_ _ленте_ и по возможности кладет их в прилагаемый _инвентарь._ Должен быть непосредственно _над_ лентой, с проёмом, смотрящим против направления ленты. Инвентарь должен быть на той же высоте, что и воронка.",
|
||||
"block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 85",
|
||||
"_": "Missing Localizations: 82",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
|||
"block.create.andesite_bricks_stairs": "安山岩砖楼梯",
|
||||
"block.create.andesite_bricks_wall": "安山岩砖墙",
|
||||
"block.create.andesite_casing": "安山机壳",
|
||||
"block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel",
|
||||
"block.create.andesite_cobblestone": "安山岩圆石",
|
||||
"block.create.andesite_cobblestone_slab": "安山岩圆石台阶",
|
||||
"block.create.andesite_cobblestone_stairs": "安山岩圆石楼梯",
|
||||
|
@ -35,7 +34,6 @@
|
|||
"block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel",
|
||||
"block.create.brass_block": "黄铜块",
|
||||
"block.create.brass_casing": "黄铜机壳",
|
||||
"block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel",
|
||||
"block.create.brass_funnel": "UNLOCALIZED: Brass Funnel",
|
||||
"block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel",
|
||||
"block.create.brown_seat": "UNLOCALIZED: Brown Seat",
|
||||
|
@ -98,7 +96,6 @@
|
|||
"block.create.encased_fan": "鼓风机",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "齿轮箱",
|
||||
"block.create.extractor": "提取器",
|
||||
"block.create.fancy_andesite_bricks": "方纹安山岩砖",
|
||||
"block.create.fancy_andesite_bricks_slab": "方纹安山岩砖台阶",
|
||||
"block.create.fancy_andesite_bricks_stairs": "方纹安山岩砖楼梯",
|
||||
|
@ -195,8 +192,6 @@
|
|||
"block.create.limestone_cobblestone_wall": "石灰岩圆石墙",
|
||||
"block.create.limestone_pillar": "竖纹石灰岩",
|
||||
"block.create.linear_chassis": "机壳底盘",
|
||||
"block.create.linked_extractor": "无线提取器",
|
||||
"block.create.linked_transposer": "无线传输器",
|
||||
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
|
||||
"block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm",
|
||||
"block.create.mechanical_bearing": "动力轴承",
|
||||
|
@ -239,7 +234,6 @@
|
|||
"block.create.overgrown_limestone": "生草石灰岩",
|
||||
"block.create.overgrown_scoria": "生草熔渣",
|
||||
"block.create.overgrown_weathered_limestone": "生草风化石灰岩",
|
||||
"block.create.packager": "UNLOCALIZED: Packager",
|
||||
"block.create.paved_andesite": "安山岩铺路石",
|
||||
"block.create.paved_andesite_slab": "安山岩铺路石台阶",
|
||||
"block.create.paved_andesite_stairs": "安山岩铺路石楼梯",
|
||||
|
@ -342,14 +336,9 @@
|
|||
"block.create.stressometer": "应力表",
|
||||
"block.create.tiled_glass": "十字玻璃窗",
|
||||
"block.create.tiled_glass_pane": "十字玻璃窗板",
|
||||
"block.create.transposer": "传输器",
|
||||
"block.create.turntable": "转盘",
|
||||
"block.create.vertical_extractor": "竖直提取器",
|
||||
"block.create.vertical_framed_glass": "竖直边框玻璃",
|
||||
"block.create.vertical_framed_glass_pane": "竖直边框玻璃板",
|
||||
"block.create.vertical_linked_extractor": "竖直无限提取器",
|
||||
"block.create.vertical_linked_transposer": "竖直无线传输器",
|
||||
"block.create.vertical_transposer": "竖直传输器",
|
||||
"block.create.water_wheel": "水车",
|
||||
"block.create.weathered_limestone": "风化石灰岩",
|
||||
"block.create.weathered_limestone_bricks": "风化石灰岩砖",
|
||||
|
@ -1280,24 +1269,6 @@
|
|||
"block.create.creative_crate.tooltip.condition1": "当标记了物品时",
|
||||
"block.create.creative_crate.tooltip.behaviour1": "容器将会从虚空中提供_无限量_的标记物品,并且任何放置到容器中的物品都会被_送入虚空_",
|
||||
|
||||
"block.create.extractor.tooltip": "EXTRACTOR",
|
||||
"block.create.extractor.tooltip.summary": "从连接的_容器_里自动将物品_输出_到外面,如果前方已经有物品,则在物品被移动前不会继续输出. 可以设置_白名单过滤_.",
|
||||
"block.create.extractor.tooltip.condition1": "当提供红石信号时",
|
||||
"block.create.extractor.tooltip.behaviour1": "_暂停_自动输出",
|
||||
"block.create.extractor.tooltip.condition2": "放置在传送带上时",
|
||||
"block.create.extractor.tooltip.behaviour2": "当传送带被_黄铜机壳_加固时,使用提取器可以将传送带上的物品_提取_出来. 当提取器堵塞时,传送带将会停下.",
|
||||
"block.create.extractor.tooltip.control1": "当右键过滤框时",
|
||||
"block.create.extractor.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.",
|
||||
|
||||
"block.create.transposer.tooltip": "TRANSPOSER",
|
||||
"block.create.transposer.tooltip.summary": "将过滤框_白名单_中的物品_传输_到指定的容器.",
|
||||
"block.create.transposer.tooltip.condition1": "当给予红石信号时",
|
||||
"block.create.transposer.tooltip.behaviour1": "_暂停_传输.",
|
||||
"block.create.transposer.tooltip.condition2": "放置在传送带上时",
|
||||
"block.create.transposer.tooltip.behaviour2": "当传送带被_黄铜机壳_加固时,使用_传输器_可以将传送带上的物品_提取_出来. 当传输器堵塞时,传送带将会停下.",
|
||||
"block.create.transposer.tooltip.control1": "当右键过滤框时",
|
||||
"block.create.transposer.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.",
|
||||
|
||||
"block.create.deployer.tooltip": "DEPLOYER",
|
||||
"block.create.deployer.tooltip.summary": "它是一个_机械手_,将尽可能_模仿玩家_的行为,也能将方块从容器中取出并_放置_. 可以设置_白名单_.",
|
||||
"block.create.deployer.tooltip.condition1": "被供能时",
|
||||
|
@ -1305,24 +1276,6 @@
|
|||
"block.create.deployer.tooltip.condition2": "当使用扳手时",
|
||||
"block.create.deployer.tooltip.behaviour2": "将会启用拳头模式,在拳头模式之下,机械臂将会试图使用手中的物品_破坏方块_,或者_攻击实体_.",
|
||||
|
||||
"block.create.linked_extractor.tooltip": "LINKED EXTRACTOR",
|
||||
"block.create.linked_extractor.tooltip.summary": "从连接的_容器_里自动将物品_输出_到外面,如果前方已经有物品,则在物品被移动前不会继续输出. 可以设置_白名单过滤_.可以使用_无线红石信号终端_控制.",
|
||||
"block.create.linked_extractor.tooltip.condition1": "当无线红石信号激活时",
|
||||
"block.create.linked_extractor.tooltip.behaviour1": "_暂停_输出物品",
|
||||
"block.create.linked_extractor.tooltip.control1": "右键过滤框时",
|
||||
"block.create.linked_extractor.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.",
|
||||
"block.create.linked_extractor.tooltip.control2": "当右键提取器侧面的频道框时",
|
||||
"block.create.linked_extractor.tooltip.action2": "手持任意物品为其设置_频道_,将接收_无线红石终端_相应频道,可以用两个物品来组合标记频道.",
|
||||
|
||||
"block.create.linked_transposer.tooltip": "LINKED TRANSPOSER",
|
||||
"block.create.linked_transposer.tooltip.summary": "将过滤框_白名单_中的物品_传输_到指定的容器.能够使用_无线红石信号终端_控制",
|
||||
"block.create.linked_transposer.tooltip.condition1": "当无线红石信号触发时",
|
||||
"block.create.linked_transposer.tooltip.behaviour1": "暂停传输",
|
||||
"block.create.linked_transposer.tooltip.control1": "当右键过滤框时",
|
||||
"block.create.linked_transposer.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.",
|
||||
"block.create.linked_transposer.tooltip.control2": "当右键传输器侧面的频道框时",
|
||||
"block.create.linked_transposer.tooltip.action2": "手持任意物品为其设置_频道_,将接收_无线红石终端_相应频道,可以用两个物品来组合标记频道.",
|
||||
|
||||
"block.create.funnel.tooltip": "FUNNEL",
|
||||
"block.create.funnel.tooltip.summary": "接收传送带上的物品到_连接的容器_,必须放置在_正对_传送带的_方向_及_高度_.",
|
||||
"block.create.funnel.tooltip.condition1": "提取传送带物品",
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"particle": "create:block/andesite_casing",
|
||||
"3": "create:block/andesite_funnel_pull",
|
||||
"1_2": "create:block/andesite_funnel_back",
|
||||
"4": "create:block/andesite_funnel_plating"
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"particle": "create:block/andesite_casing",
|
||||
"3": "create:block/andesite_funnel_push",
|
||||
"1_2": "create:block/andesite_funnel_back",
|
||||
"4": "create:block/andesite_funnel_plating"
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"particle": "create:block/brass_casing",
|
||||
"3": "create:block/brass_funnel_pull",
|
||||
"1_2": "create:block/brass_funnel_back",
|
||||
"4": "create:block/brass_funnel_plating"
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"particle": "create:block/brass_casing",
|
||||
"3": "create:block/brass_funnel_pull_powered",
|
||||
"1_2": "create:block/brass_funnel_back",
|
||||
"4": "create:block/brass_funnel_plating"
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"particle": "create:block/brass_casing",
|
||||
"3": "create:block/brass_funnel_push",
|
||||
"1_2": "create:block/brass_funnel_back",
|
||||
"4": "create:block/brass_funnel_plating"
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/chute_funnel/block",
|
||||
"textures": {
|
||||
"particle": "create:block/brass_casing",
|
||||
"3": "create:block/brass_funnel_push_powered",
|
||||
"1_2": "create:block/brass_funnel_back",
|
||||
"4": "create:block/brass_funnel_plating"
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/extractor/horizontal"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/extractor/horizontal_linked"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/transposer/horizontal_linked"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/packager/item"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "create:block/transposer/block"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:andesite_funnel"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:brass_funnel"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:extractor"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:linked_extractor"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:linked_transposer"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:packager"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:transposer"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:extractor"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:linked_extractor"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:linked_transposer"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:transposer"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -7,10 +7,6 @@
|
|||
"create:pulley_magnet",
|
||||
"create:furnace_engine",
|
||||
"create:redstone_link",
|
||||
"create:extractor",
|
||||
"create:vertical_extractor",
|
||||
"create:linked_extractor",
|
||||
"create:vertical_linked_extractor",
|
||||
"#minecraft:doors",
|
||||
"minecraft:flower_pot",
|
||||
"minecraft:bell"
|
||||
|
|
|
@ -23,7 +23,6 @@ import com.simibubi.create.content.contraptions.components.actors.PortableStorag
|
|||
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.actors.StorageInterfaceMovement;
|
||||
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;
|
||||
|
@ -109,24 +108,16 @@ 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.extractor.ExtractorBlock;
|
||||
import com.simibubi.create.content.logistics.block.extractor.ExtractorMovementBehaviour;
|
||||
import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorBlock;
|
||||
import com.simibubi.create.content.logistics.block.extractor.VerticalExtractorGenerator;
|
||||
import com.simibubi.create.content.logistics.block.funnel.AndesiteBeltFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.AndesiteChuteFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.AndesiteFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelGenerator;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BrassBeltFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BrassChuteFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.ChuteFunnelGenerator;
|
||||
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.packager.PackagerBlock;
|
||||
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.NixieTubeBlock;
|
||||
|
@ -135,9 +126,6 @@ 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.logistics.block.transposer.LinkedTransposerBlock;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerBlock;
|
||||
import com.simibubi.create.content.logistics.block.transposer.VerticalTransposerGenerator;
|
||||
import com.simibubi.create.content.palettes.MetalBlock;
|
||||
import com.simibubi.create.content.schematics.block.SchematicTableBlock;
|
||||
import com.simibubi.create.content.schematics.block.SchematicannonBlock;
|
||||
|
@ -165,7 +153,6 @@ import net.minecraft.item.DyeColor;
|
|||
import net.minecraft.state.properties.PistonType;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.generators.ConfiguredModel;
|
||||
import net.minecraftforge.common.ToolType;
|
||||
|
@ -683,7 +670,7 @@ public class AllBlocks {
|
|||
public static final BlockEntry<PortableStorageInterfaceBlock> PORTABLE_STORAGE_INTERFACE =
|
||||
REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.onRegister(addMovementBehaviour(new StorageInterfaceMovement()))
|
||||
// .onRegister(addMovementBehaviour(new StorageInterfaceMovement()))
|
||||
.blockstate(BlockStateGen.directionalBlockProvider(false))
|
||||
.simpleItem()
|
||||
.register();
|
||||
|
@ -860,13 +847,6 @@ public class AllBlocks {
|
|||
.loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<AndesiteChuteFunnelBlock> ANDESITE_CHUTE_FUNNEL =
|
||||
REGISTRATE.block("andesite_chute_funnel", AndesiteChuteFunnelBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.blockstate(new ChuteFunnelGenerator("andesite")::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<BrassFunnelBlock> BRASS_FUNNEL =
|
||||
REGISTRATE.block("brass_funnel", BrassFunnelBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
|
@ -881,13 +861,6 @@ public class AllBlocks {
|
|||
.loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<BrassChuteFunnelBlock> BRASS_CHUTE_FUNNEL =
|
||||
REGISTRATE.block("brass_chute_funnel", BrassChuteFunnelBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(new ChuteFunnelGenerator("brass")::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<BeltTunnelBlock> ANDESITE_TUNNEL =
|
||||
REGISTRATE.block("andesite_tunnel", BeltTunnelBlock::new)
|
||||
.transform(BuilderTransformers.beltTunnel("andesite", new ResourceLocation("block/polished_andesite")))
|
||||
|
@ -908,21 +881,10 @@ public class AllBlocks {
|
|||
.transform(customItemModel("_", "block"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<RedstoneLinkBlock> REDSTONE_LINK =
|
||||
REGISTRATE.block("redstone_link", RedstoneLinkBlock::new)
|
||||
.initialProperties(SharedProperties::wooden)
|
||||
.tag(AllBlockTags.BRITTLE.tag)
|
||||
.blockstate(new RedstoneLinkGenerator()::generate)
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.item()
|
||||
.transform(customItemModel("_", "transmitter"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<NixieTubeBlock> NIXIE_TUBE = REGISTRATE.block("nixie_tube", NixieTubeBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.properties(p -> p.lightValue(5))
|
||||
.blockstate(new NixieTubeGenerator()::generate)
|
||||
.addLayer(() -> RenderType::getTranslucent)
|
||||
public static final BlockEntry<BeltObserverBlock> BELT_OBSERVER =
|
||||
REGISTRATE.block("belt_observer", BeltObserverBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.blockstate(BlockStateGen.beltObserver())
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.register();
|
||||
|
@ -945,93 +907,23 @@ public class AllBlocks {
|
|||
.transform(BuilderTransformers.crate("creative"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<BeltObserverBlock> BELT_OBSERVER =
|
||||
REGISTRATE.block("belt_observer", BeltObserverBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.blockstate(BlockStateGen.beltObserver())
|
||||
public static final BlockEntry<NixieTubeBlock> NIXIE_TUBE = REGISTRATE.block("nixie_tube", NixieTubeBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.properties(p -> p.lightValue(5))
|
||||
.blockstate(new NixieTubeGenerator()::generate)
|
||||
.addLayer(() -> RenderType::getTranslucent)
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<PackagerBlock> PACKAGER = REGISTRATE.block("packager", PackagerBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.transform(StressConfigDefaults.setImpact(4.0))
|
||||
.properties(Block.Properties::nonOpaque)
|
||||
.blockstate((c, p) -> p.getVariantBuilder(c.get())
|
||||
.forAllStates(s -> ConfiguredModel.builder()
|
||||
.modelFile(AssetLookup.partialBaseModel(c, p))
|
||||
.rotationY(s.get(PackagerBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0)
|
||||
.build()))
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<ExtractorBlock> EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
public static final BlockEntry<RedstoneLinkBlock> REDSTONE_LINK =
|
||||
REGISTRATE.block("redstone_link", RedstoneLinkBlock::new)
|
||||
.initialProperties(SharedProperties::wooden)
|
||||
.tag(AllBlockTags.BRITTLE.tag)
|
||||
.onRegister(addMovementBehaviour(new ExtractorMovementBehaviour()))
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/horizontal")))
|
||||
.item()
|
||||
.transform(customItemModel("_", "horizontal"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<ExtractorBlock.Vertical> VERTICAL_EXTRACTOR =
|
||||
REGISTRATE.block("vertical_extractor", ExtractorBlock.Vertical::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.tag(AllBlockTags.BRITTLE.tag)
|
||||
.blockstate(new VerticalExtractorGenerator(false)::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, EXTRACTOR.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<LinkedExtractorBlock> LINKED_EXTRACTOR = REGISTRATE
|
||||
.block("linked_extractor", LinkedExtractorBlock::new)
|
||||
.tag(AllBlockTags.BRITTLE.tag)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(new RedstoneLinkGenerator()::generate)
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, "extractor/horizontal_linked")))
|
||||
.item()
|
||||
.transform(customItemModel("extractor", "horizontal_linked"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<LinkedExtractorBlock.Vertical> VERTICAL_LINKED_EXTRACTOR =
|
||||
REGISTRATE.block("vertical_linked_extractor", LinkedExtractorBlock.Vertical::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.tag(AllBlockTags.BRITTLE.tag)
|
||||
.blockstate(new VerticalExtractorGenerator(true)::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, LINKED_EXTRACTOR.get()))
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<TransposerBlock> TRANSPOSER = REGISTRATE.block("transposer", TransposerBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/block"), 180))
|
||||
.item()
|
||||
.transform(customItemModel("_", "block"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<TransposerBlock.Vertical> VERTICAL_TRANSPOSER =
|
||||
REGISTRATE.block("vertical_transposer", TransposerBlock.Vertical::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(new VerticalTransposerGenerator(false)::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, TRANSPOSER.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<LinkedTransposerBlock> LINKED_TRANSPOSER =
|
||||
REGISTRATE.block("linked_transposer", LinkedTransposerBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.blockstate(
|
||||
(c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, "transposer/horizontal_linked"), 180))
|
||||
.item()
|
||||
.transform(customItemModel("transposer", "horizontal_linked"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<LinkedTransposerBlock.Vertical> VERTICAL_LINKED_TRANSPOSER =
|
||||
REGISTRATE.block("vertical_linked_transposer", LinkedTransposerBlock.Vertical::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(new VerticalTransposerGenerator(true)::generate)
|
||||
.loot((p, b) -> p.registerDropping(b, LINKED_TRANSPOSER.get()))
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.transform(customItemModel("_", "transmitter"))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<AnalogLeverBlock> ANALOG_LEVER =
|
||||
|
|
|
@ -30,11 +30,6 @@ public class AllShapes {
|
|||
MOTOR_BLOCK = shape(3, 0, 3, 13, 14, 13).forDirectional(),
|
||||
FOUR_VOXEL_POLE = shape(6, 0, 6, 10, 16, 10).forAxis(), SIX_VOXEL_POLE = shape(5, 0, 5, 11, 16, 11).forAxis(),
|
||||
EIGHT_VOXEL_POLE = shape(4, 0, 4, 12, 16, 12).forAxis(),
|
||||
EXTRACTOR = shape(4, 2, 11, 12, 10, 17).forDirectional(SOUTH)
|
||||
.withVerticalShapes(cuboid(4, 11, 4, 12, 17, 12)),
|
||||
TRANSPOSER = shape(4, 4, -1, 12, 12, 1).add(5, 5, 0, 11, 11, 16)
|
||||
.add(4, 4, 11, 12, 12, 17)
|
||||
.forDirectional(SOUTH),
|
||||
FURNACE_ENGINE = shape(1, 1, 0, 15, 15, 16).add(0, 0, 9, 16, 16, 14)
|
||||
.forHorizontal(Direction.SOUTH),
|
||||
PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 12, 16).add(3, 12, 3, 13, 16, 13)
|
||||
|
@ -73,10 +68,6 @@ public class AllShapes {
|
|||
.add(1, 6, 1, 15, 10, 15)
|
||||
.add(0, 10, 0, 16, 13, 16)
|
||||
.forDirectional(UP),
|
||||
CHUTE_FUNNEL = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14)
|
||||
.add(0, 8, 0, 16, 14, 16)
|
||||
.add(1, 5, 1, 15, 18, 15)
|
||||
.forDirectional(UP),
|
||||
BELT_FUNNEL_RETRACTED = shape(3, -5, 14, 13, 13, 19).add(0, -5, 8, 16, 16, 14)
|
||||
.forHorizontal(NORTH),
|
||||
BELT_FUNNEL_EXTENDED = shape(3, -4, 6, 13, 13, 17).add(2, -4, 10, 14, 14, 14)
|
||||
|
|
|
@ -62,7 +62,11 @@ import com.simibubi.create.content.contraptions.relays.advanced.sequencer.Sequen
|
|||
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.SplitShaftRenderer;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity;
|
||||
|
@ -81,19 +85,18 @@ import com.simibubi.create.content.logistics.block.depot.DepotTileEntity;
|
|||
import com.simibubi.create.content.logistics.block.diodes.AdjustablePulseRepeaterTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterRenderer;
|
||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.extractor.ExtractorTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelRenderer;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.inventories.CreativeCrateTileEntity;
|
||||
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.packager.PackagerRenderer;
|
||||
import com.simibubi.create.content.logistics.block.packager.PackagerTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.redstone.*;
|
||||
import com.simibubi.create.content.logistics.block.transposer.LinkedTransposerTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity;
|
||||
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.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.SchematicannonRenderer;
|
||||
import com.simibubi.create.content.schematics.block.SchematicannonTileEntity;
|
||||
|
@ -447,40 +450,10 @@ public class AllTileEntities {
|
|||
|
||||
public static final TileEntityEntry<FunnelTileEntity> FUNNEL = Create.registrate()
|
||||
.tileEntity("funnel", FunnelTileEntity::new)
|
||||
.validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.BRASS_CHUTE_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL, AllBlocks.ANDESITE_CHUTE_FUNNEL)
|
||||
.validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL)
|
||||
.renderer(() -> FunnelRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<PackagerTileEntity> PACKAGER = Create.registrate()
|
||||
.tileEntity("packager", PackagerTileEntity::new)
|
||||
.validBlocks(AllBlocks.PACKAGER)
|
||||
.renderer(() -> PackagerRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<ExtractorTileEntity> EXTRACTOR = Create.registrate()
|
||||
.tileEntity("extractor", ExtractorTileEntity::new)
|
||||
.validBlocks(AllBlocks.EXTRACTOR, AllBlocks.VERTICAL_EXTRACTOR)
|
||||
.renderer(() -> SmartTileEntityRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<LinkedExtractorTileEntity> LINKED_EXTRACTOR = Create.registrate()
|
||||
.tileEntity("linked_extractor", LinkedExtractorTileEntity::new)
|
||||
.validBlocks(AllBlocks.LINKED_EXTRACTOR, AllBlocks.VERTICAL_LINKED_EXTRACTOR)
|
||||
.renderer(() -> SmartTileEntityRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<TransposerTileEntity> TRANSPOSER = Create.registrate()
|
||||
.tileEntity("transposer", TransposerTileEntity::new)
|
||||
.validBlocks(AllBlocks.TRANSPOSER, AllBlocks.VERTICAL_TRANSPOSER)
|
||||
.renderer(() -> SmartTileEntityRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<LinkedTransposerTileEntity> LINKED_TRANSPOSER = Create.registrate()
|
||||
.tileEntity("linked_transposer", LinkedTransposerTileEntity::new)
|
||||
.validBlocks(AllBlocks.LINKED_TRANSPOSER, AllBlocks.VERTICAL_LINKED_TRANSPOSER)
|
||||
.renderer(() -> SmartTileEntityRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<BeltObserverTileEntity> BELT_OBSERVER = Create.registrate()
|
||||
.tileEntity("belt_observer", BeltObserverTileEntity::new)
|
||||
.validBlocks(AllBlocks.BELT_OBSERVER)
|
||||
|
|
|
@ -1,157 +1,157 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerBlock;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.SingleTargetAutoExtractingBehaviour;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTUtil;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class StorageInterfaceMovement extends MovementBehaviour {
|
||||
|
||||
private static final String _exporting_ = "Exporting";
|
||||
private static final String _delay_ = "Delay";
|
||||
private static final String _workingPos_ = "WorkingPos";
|
||||
|
||||
@Override
|
||||
public Vec3d getActiveAreaOffset(MovementContext context) {
|
||||
return new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec()).scale(.85f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||
Direction currentFacing = getCurrentFacing(context);
|
||||
TransposerTileEntity transposer = getValidTransposer(context.world, pos, currentFacing.getAxis());
|
||||
if (transposer == null)
|
||||
return;
|
||||
context.data.put(_workingPos_, NBTUtil.writeBlockPos(pos));
|
||||
context.data.putBoolean(_exporting_,
|
||||
TransposerBlock.getBlockFacing(transposer.getBlockState()) != currentFacing);
|
||||
context.stall = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(MovementContext context) {
|
||||
if (!context.data.contains(_workingPos_))
|
||||
return;
|
||||
if (context.world.isRemote)
|
||||
return;
|
||||
|
||||
BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_));
|
||||
TransposerTileEntity transposer = getValidTransposer(context.world, pos, getCurrentFacing(context).getAxis());
|
||||
if (transposer == null) {
|
||||
reset(context);
|
||||
return;
|
||||
}
|
||||
|
||||
int nextExtract = context.data.getInt(_delay_);
|
||||
if (nextExtract > 0) {
|
||||
nextExtract--;
|
||||
context.data.putInt(_delay_, nextExtract);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean extract = context.data.getBoolean(_exporting_);
|
||||
boolean success = false;
|
||||
IItemHandlerModifiable inv = context.contraption.inventory;
|
||||
SingleTargetAutoExtractingBehaviour extracting =
|
||||
TileEntityBehaviour.get(transposer, SingleTargetAutoExtractingBehaviour.TYPE);
|
||||
FilteringBehaviour filtering = TileEntityBehaviour.get(transposer, FilteringBehaviour.TYPE);
|
||||
|
||||
if (extract) {
|
||||
// Export from Contraption
|
||||
Predicate<ItemStack> test = extracting.getFilterTest();
|
||||
int exactAmount = extracting.getAmountToExtract();
|
||||
ItemStack itemExtracted = ItemStack.EMPTY;
|
||||
if (exactAmount != -1)
|
||||
itemExtracted = ItemHelper.extract(inv, test, exactAmount, false);
|
||||
else
|
||||
itemExtracted = ItemHelper.extract(inv, test, transposer::amountToExtract, false);
|
||||
|
||||
if (!itemExtracted.isEmpty()) {
|
||||
transposer.onExtract(itemExtracted);
|
||||
success = exactAmount == -1;
|
||||
}
|
||||
|
||||
} else {
|
||||
// Import to Contraption
|
||||
if (extracting != null) {
|
||||
extracting.setSynchronized(false);
|
||||
extracting.withAdditionalFilter(stack -> {
|
||||
if (filtering.anyAmount())
|
||||
return true;
|
||||
return ItemHandlerHelper.insertItemStacked(inv, stack, true).isEmpty();
|
||||
});
|
||||
|
||||
extracting.withAmountThreshold(stack -> {
|
||||
ItemStack tester = stack.copy();
|
||||
tester.setCount(tester.getMaxStackSize());
|
||||
return stack.getCount() - ItemHandlerHelper.insertItemStacked(inv, stack, true).getCount();
|
||||
});
|
||||
|
||||
extracting.setCallback(stack -> {
|
||||
ItemHandlerHelper.insertItemStacked(inv, stack, false);
|
||||
});
|
||||
|
||||
success = extracting.extract() && filtering.anyAmount();
|
||||
extracting.setSynchronized(true);
|
||||
transposer.applyFilteringCallbacks();
|
||||
extracting.setCallback(transposer::onExtract);
|
||||
}
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
reset(context);
|
||||
return;
|
||||
}
|
||||
|
||||
context.data.putInt(_delay_, AllConfigs.SERVER.logistics.extractorDelay.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopMoving(MovementContext context) {
|
||||
reset(context);
|
||||
}
|
||||
|
||||
public void reset(MovementContext context) {
|
||||
context.data.remove(_workingPos_);
|
||||
context.data.remove(_delay_);
|
||||
context.data.remove(_exporting_);
|
||||
context.stall = false;
|
||||
}
|
||||
|
||||
private TransposerTileEntity getValidTransposer(World world, BlockPos pos, Axis validAxis) {
|
||||
TileEntity te = world.getTileEntity(pos);
|
||||
if (!(te instanceof TransposerTileEntity))
|
||||
return null;
|
||||
if (TransposerBlock.getBlockFacing(world.getBlockState(pos)).getAxis() != validAxis)
|
||||
return null;
|
||||
if (world.isBlockPowered(pos))
|
||||
return null;
|
||||
return (TransposerTileEntity) te;
|
||||
}
|
||||
|
||||
private Direction getCurrentFacing(MovementContext context) {
|
||||
Vec3d directionVec = new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec());
|
||||
directionVec = VecHelper.rotate(directionVec, context.rotation.x, context.rotation.y, context.rotation.z);
|
||||
return Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z);
|
||||
}
|
||||
|
||||
}
|
||||
//package com.simibubi.create.content.contraptions.components.actors;
|
||||
//
|
||||
//import java.util.function.Predicate;
|
||||
//
|
||||
//import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||
//import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
//import com.simibubi.create.content.logistics.block.transposer.TransposerBlock;
|
||||
//import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity;
|
||||
//import com.simibubi.create.foundation.config.AllConfigs;
|
||||
//import com.simibubi.create.foundation.item.ItemHelper;
|
||||
//import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
//import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
//import com.simibubi.create.foundation.tileEntity.behaviour.inventory.SingleTargetAutoExtractingBehaviour;
|
||||
//import com.simibubi.create.foundation.utility.VecHelper;
|
||||
//
|
||||
//import net.minecraft.item.ItemStack;
|
||||
//import net.minecraft.nbt.NBTUtil;
|
||||
//import net.minecraft.tileentity.TileEntity;
|
||||
//import net.minecraft.util.Direction;
|
||||
//import net.minecraft.util.Direction.Axis;
|
||||
//import net.minecraft.util.math.BlockPos;
|
||||
//import net.minecraft.util.math.Vec3d;
|
||||
//import net.minecraft.world.World;
|
||||
//import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
//import net.minecraftforge.items.ItemHandlerHelper;
|
||||
//
|
||||
//public class StorageInterfaceMovement extends MovementBehaviour {
|
||||
//
|
||||
// private static final String _exporting_ = "Exporting";
|
||||
// private static final String _delay_ = "Delay";
|
||||
// private static final String _workingPos_ = "WorkingPos";
|
||||
//
|
||||
// @Override
|
||||
// public Vec3d getActiveAreaOffset(MovementContext context) {
|
||||
// return new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec()).scale(.85f);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||
// Direction currentFacing = getCurrentFacing(context);
|
||||
// TransposerTileEntity transposer = getValidTransposer(context.world, pos, currentFacing.getAxis());
|
||||
// if (transposer == null)
|
||||
// return;
|
||||
// context.data.put(_workingPos_, NBTUtil.writeBlockPos(pos));
|
||||
// context.data.putBoolean(_exporting_,
|
||||
// TransposerBlock.getBlockFacing(transposer.getBlockState()) != currentFacing);
|
||||
// context.stall = true;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void tick(MovementContext context) {
|
||||
// if (!context.data.contains(_workingPos_))
|
||||
// return;
|
||||
// if (context.world.isRemote)
|
||||
// return;
|
||||
//
|
||||
// BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_));
|
||||
// TransposerTileEntity transposer = getValidTransposer(context.world, pos, getCurrentFacing(context).getAxis());
|
||||
// if (transposer == null) {
|
||||
// reset(context);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// int nextExtract = context.data.getInt(_delay_);
|
||||
// if (nextExtract > 0) {
|
||||
// nextExtract--;
|
||||
// context.data.putInt(_delay_, nextExtract);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// boolean extract = context.data.getBoolean(_exporting_);
|
||||
// boolean success = false;
|
||||
// IItemHandlerModifiable inv = context.contraption.inventory;
|
||||
// SingleTargetAutoExtractingBehaviour extracting =
|
||||
// TileEntityBehaviour.get(transposer, SingleTargetAutoExtractingBehaviour.TYPE);
|
||||
// FilteringBehaviour filtering = TileEntityBehaviour.get(transposer, FilteringBehaviour.TYPE);
|
||||
//
|
||||
// if (extract) {
|
||||
// // Export from Contraption
|
||||
// Predicate<ItemStack> test = extracting.getFilterTest();
|
||||
// int exactAmount = extracting.getAmountFromFilter();
|
||||
// ItemStack itemExtracted = ItemStack.EMPTY;
|
||||
// if (exactAmount != -1)
|
||||
// itemExtracted = ItemHelper.extract(inv, test, exactAmount, false);
|
||||
// else
|
||||
// itemExtracted = ItemHelper.extract(inv, test, transposer::amountToExtract, false);
|
||||
//
|
||||
// if (!itemExtracted.isEmpty()) {
|
||||
// transposer.onExtract(itemExtracted);
|
||||
// success = exactAmount == -1;
|
||||
// }
|
||||
//
|
||||
// } else {
|
||||
// // Import to Contraption
|
||||
// if (extracting != null) {
|
||||
// extracting.setSynchronized(false);
|
||||
// extracting.withAdditionalFilter(stack -> {
|
||||
// if (filtering.anyAmount())
|
||||
// return true;
|
||||
// return ItemHandlerHelper.insertItemStacked(inv, stack, true).isEmpty();
|
||||
// });
|
||||
//
|
||||
// extracting.withAmountThreshold(stack -> {
|
||||
// ItemStack tester = stack.copy();
|
||||
// tester.setCount(tester.getMaxStackSize());
|
||||
// return stack.getCount() - ItemHandlerHelper.insertItemStacked(inv, stack, true).getCount();
|
||||
// });
|
||||
//
|
||||
// extracting.setCallback(stack -> {
|
||||
// ItemHandlerHelper.insertItemStacked(inv, stack, false);
|
||||
// });
|
||||
//
|
||||
// success = extracting.extract() && filtering.anyAmount();
|
||||
// extracting.setSynchronized(true);
|
||||
// transposer.applyFilteringCallbacks();
|
||||
// extracting.setCallback(transposer::onExtract);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (!success) {
|
||||
// reset(context);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// context.data.putInt(_delay_, AllConfigs.SERVER.logistics.extractorDelay.get());
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void stopMoving(MovementContext context) {
|
||||
// reset(context);
|
||||
// }
|
||||
//
|
||||
// public void reset(MovementContext context) {
|
||||
// context.data.remove(_workingPos_);
|
||||
// context.data.remove(_delay_);
|
||||
// context.data.remove(_exporting_);
|
||||
// context.stall = false;
|
||||
// }
|
||||
//
|
||||
// private TransposerTileEntity getValidTransposer(World world, BlockPos pos, Axis validAxis) {
|
||||
// TileEntity te = world.getTileEntity(pos);
|
||||
// if (!(te instanceof TransposerTileEntity))
|
||||
// return null;
|
||||
// if (TransposerBlock.getBlockFacing(world.getBlockState(pos)).getAxis() != validAxis)
|
||||
// return null;
|
||||
// if (world.isBlockPowered(pos))
|
||||
// return null;
|
||||
// return (TransposerTileEntity) te;
|
||||
// }
|
||||
//
|
||||
// private Direction getCurrentFacing(MovementContext context) {
|
||||
// Vec3d directionVec = new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec());
|
||||
// directionVec = VecHelper.rotate(directionVec, context.rotation.x, context.rotation.y, context.rotation.z);
|
||||
// return Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
|
|
@ -17,8 +17,8 @@ import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHan
|
|||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockFace;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
|
@ -33,6 +33,7 @@ import net.minecraft.util.Direction;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
|
@ -83,7 +84,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
protected boolean wasPoweredBefore;
|
||||
|
||||
protected GroupedItems groupedItemsBeforeCraft; // for rendering on client
|
||||
private InsertingBehaviour inserting;
|
||||
private InvManipulationBehaviour inserting;
|
||||
private EdgeInteractionBehaviour connectivity;
|
||||
|
||||
public MechanicalCrafterTileEntity(TileEntityType<? extends MechanicalCrafterTileEntity> type) {
|
||||
|
@ -99,7 +100,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
inserting = new InsertingBehaviour(this, Attachments.toward(this::getTargetFacing));
|
||||
inserting = new InvManipulationBehaviour(this, this::getTargetFace);
|
||||
connectivity = new EdgeInteractionBehaviour(this, ConnectedInputHandler::toggleConnection)
|
||||
.connectivity(ConnectedInputHandler::shouldConnect)
|
||||
.require(AllItems.WRENCH.get());
|
||||
|
@ -108,13 +109,17 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
}
|
||||
|
||||
public void blockChanged() {
|
||||
removeBehaviour(InsertingBehaviour.TYPE);
|
||||
inserting = new InsertingBehaviour(this, Attachments.toward(this::getTargetFacing));
|
||||
removeBehaviour(InvManipulationBehaviour.TYPE);
|
||||
inserting = new InvManipulationBehaviour(this, this::getTargetFace);
|
||||
putBehaviour(inserting);
|
||||
}
|
||||
|
||||
public Direction getTargetFacing() {
|
||||
return MechanicalCrafterBlock.getTargetDirection(world.getBlockState(pos));
|
||||
public BlockFace getTargetFace(World world, BlockPos pos, BlockState state) {
|
||||
return new BlockFace(pos, MechanicalCrafterBlock.getTargetDirection(state));
|
||||
}
|
||||
|
||||
public Direction getTargetDirection() {
|
||||
return MechanicalCrafterBlock.getTargetDirection(getBlockState());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -329,16 +334,16 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
|
||||
protected boolean isTargetingBelt() {
|
||||
DirectBeltInputBehaviour behaviour = getTargetingBelt();
|
||||
return behaviour != null && behaviour.canInsertFromSide(getTargetFacing());
|
||||
return behaviour != null && behaviour.canInsertFromSide(getTargetDirection());
|
||||
}
|
||||
|
||||
protected DirectBeltInputBehaviour getTargetingBelt() {
|
||||
BlockPos targetPos = pos.offset(getTargetFacing());
|
||||
BlockPos targetPos = pos.offset(getTargetDirection());
|
||||
return TileEntityBehaviour.get(world, targetPos, DirectBeltInputBehaviour.TYPE);
|
||||
}
|
||||
|
||||
public void tryInsert() {
|
||||
if (inserting.getInventory() == null && !isTargetingBelt()) {
|
||||
if (!inserting.hasInventory() && !isTargetingBelt()) {
|
||||
ejectWholeGrid();
|
||||
return;
|
||||
}
|
||||
|
@ -350,10 +355,10 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity {
|
|||
for (Entry<Pair<Integer, Integer>, ItemStack> entry : groupedItems.grid.entrySet()) {
|
||||
Pair<Integer, Integer> pair = entry.getKey();
|
||||
ItemStack stack = entry.getValue();
|
||||
Direction facing = getTargetFacing();
|
||||
BlockFace face = getTargetFace(world, pos, getBlockState());
|
||||
|
||||
ItemStack remainder = behaviour == null ? inserting.insert(stack.copy(), false)
|
||||
: behaviour.handleInsertion(stack, facing, false);
|
||||
ItemStack remainder = behaviour == null ? inserting.insert(stack.copy())
|
||||
: behaviour.handleInsertion(stack, face.getFace(), false);
|
||||
if (!remainder.isEmpty()) {
|
||||
stack.setCount(remainder.getCount());
|
||||
continue;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.simibubi.create.content.contraptions.components.deployer;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
||||
|
@ -74,11 +76,48 @@ public class DeployerItemHandler implements IItemHandlerModifiable {
|
|||
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
||||
if (amount == 0)
|
||||
return ItemStack.EMPTY;
|
||||
|
||||
ItemStack extractedFromOverflow = ItemStack.EMPTY;
|
||||
ItemStack returnToOverflow = ItemStack.EMPTY;
|
||||
|
||||
for (Iterator<ItemStack> iterator = te.overflowItems.iterator(); iterator.hasNext();) {
|
||||
ItemStack existing = iterator.next();
|
||||
if (existing.isEmpty()) {
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
int toExtract = Math.min(amount, existing.getMaxStackSize());
|
||||
if (existing.getCount() <= toExtract) {
|
||||
if (!simulate)
|
||||
iterator.remove();
|
||||
extractedFromOverflow = existing;
|
||||
break;
|
||||
}
|
||||
if (!simulate) {
|
||||
iterator.remove();
|
||||
returnToOverflow = ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract);
|
||||
}
|
||||
extractedFromOverflow = ItemHandlerHelper.copyStackWithSize(existing, toExtract);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!returnToOverflow.isEmpty())
|
||||
te.overflowItems.add(returnToOverflow);
|
||||
if (!extractedFromOverflow.isEmpty())
|
||||
return extractedFromOverflow;
|
||||
|
||||
ItemStack held = getHeld();
|
||||
if (amount == 0 || held.isEmpty())
|
||||
return ItemStack.EMPTY;
|
||||
if (!te.filtering.getFilter()
|
||||
.isEmpty() && te.filtering.test(held))
|
||||
return ItemStack.EMPTY;
|
||||
if (simulate)
|
||||
return held.copy().split(amount);
|
||||
return held.copy()
|
||||
.split(amount);
|
||||
|
||||
ItemStack toReturn = held.split(amount);
|
||||
te.markDirty();
|
||||
|
|
|
@ -3,27 +3,18 @@ package com.simibubi.create.content.contraptions.components.deployer;
|
|||
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.curiosities.tools.SandPaperItem;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.entity.item.ItemEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
|
@ -45,19 +36,10 @@ import net.minecraftforge.common.capabilities.Capability;
|
|||
import net.minecraftforge.common.util.Constants.NBT;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class DeployerTileEntity extends KineticTileEntity {
|
||||
|
||||
private static final List<Pair<BlockPos, Direction>> EXTRACTING_LOCATIONS = Arrays.asList(Direction.values())
|
||||
.stream()
|
||||
.map(d -> Pair.of(BlockPos.ZERO.offset(d), d.getOpposite()))
|
||||
.collect(Collectors.toList());
|
||||
private FilteringBehaviour filtering;
|
||||
private ExtractingBehaviour extracting;
|
||||
|
||||
protected State state;
|
||||
protected Mode mode;
|
||||
protected ItemStack heldItem = ItemStack.EMPTY;
|
||||
|
@ -66,8 +48,9 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
protected float reach;
|
||||
protected boolean boop = false;
|
||||
protected List<ItemStack> overflowItems = new ArrayList<>();
|
||||
private ListNBT deferredInventoryList;
|
||||
protected FilteringBehaviour filtering;
|
||||
private LazyOptional<IItemHandlerModifiable> invHandler;
|
||||
private ListNBT deferredInventoryList;
|
||||
|
||||
enum State {
|
||||
WAITING, EXPANDING, RETRACTING, DUMPING;
|
||||
|
@ -88,10 +71,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
filtering = new FilteringBehaviour(this, new DeployerFilterSlot());
|
||||
extracting = new ExtractingBehaviour(this, this::getExtractingLocations, this::onExtract);
|
||||
|
||||
behaviours.add(filtering);
|
||||
behaviours.add(extracting);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -117,10 +97,6 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
markDirty();
|
||||
}
|
||||
|
||||
protected List<Pair<BlockPos, Direction>> getExtractingLocations() {
|
||||
return EXTRACTING_LOCATIONS;
|
||||
}
|
||||
|
||||
protected int getTimerSpeed() {
|
||||
return (int) (getSpeed() == 0 ? 0 : MathHelper.clamp(Math.abs(getSpeed() * 2), 8, 512));
|
||||
}
|
||||
|
@ -147,8 +123,6 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
ItemStack stack = player.getHeldItemMainhand();
|
||||
if (state == State.WAITING) {
|
||||
if (!overflowItems.isEmpty()) {
|
||||
tryDisposeOfItems();
|
||||
if (!overflowItems.isEmpty())
|
||||
timer = getTimerSpeed() * 10;
|
||||
return;
|
||||
}
|
||||
|
@ -160,16 +134,10 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
sendData();
|
||||
return;
|
||||
}
|
||||
extracting.extract(1);
|
||||
if (!filtering.test(stack))
|
||||
timer = getTimerSpeed() * 10;
|
||||
return;
|
||||
}
|
||||
|
||||
if (filtering.getFilter()
|
||||
.isEmpty() && stack.isEmpty())
|
||||
extracting.extract(1);
|
||||
|
||||
Direction facing = getBlockState().get(FACING);
|
||||
if (mode == Mode.USE && !DeployerHandler.shouldActivate(stack, world, pos.offset(facing, 2))) {
|
||||
timer = getTimerSpeed() * 10;
|
||||
|
@ -213,7 +181,6 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
if (state == State.RETRACTING) {
|
||||
state = State.WAITING;
|
||||
timer = 500;
|
||||
returnAndDeposit();
|
||||
sendData();
|
||||
return;
|
||||
}
|
||||
|
@ -280,59 +247,6 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
heldItem = player.getHeldItemMainhand();
|
||||
}
|
||||
|
||||
protected void returnAndDeposit() {
|
||||
PlayerInventory inv = player.inventory;
|
||||
for (List<ItemStack> list : Arrays.asList(inv.armorInventory, inv.offHandInventory, inv.mainInventory)) {
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
ItemStack itemstack = list.get(i);
|
||||
if (itemstack.isEmpty())
|
||||
continue;
|
||||
|
||||
if (list == inv.mainInventory && i == inv.currentItem && filtering.test(itemstack))
|
||||
continue;
|
||||
|
||||
itemstack = insert(itemstack, false);
|
||||
if (!itemstack.isEmpty())
|
||||
ItemHelper.addToList(itemstack, overflowItems);
|
||||
list.set(i, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
heldItem = player.getHeldItemMainhand();
|
||||
}
|
||||
|
||||
protected void tryDisposeOfItems() {
|
||||
boolean noInv = extracting.getInventories()
|
||||
.isEmpty();
|
||||
for (Iterator<ItemStack> iterator = overflowItems.iterator(); iterator.hasNext();) {
|
||||
ItemStack itemStack = iterator.next();
|
||||
|
||||
if (noInv) {
|
||||
Vec3d offset = getMovementVector();
|
||||
Vec3d outPos = VecHelper.getCenterOf(pos)
|
||||
.add(offset.scale(-.65f));
|
||||
Vec3d motion = offset.scale(-.25f);
|
||||
ItemEntity e = new ItemEntity(world, outPos.x, outPos.y, outPos.z, itemStack.copy());
|
||||
e.setMotion(motion);
|
||||
world.addEntity(e);
|
||||
iterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
itemStack = insert(itemStack, false);
|
||||
if (itemStack.isEmpty())
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
protected ItemStack insert(ItemStack stack, boolean simulate) {
|
||||
for (IItemHandler inv : extracting.getInventories()) {
|
||||
stack = ItemHandlerHelper.insertItemStacked(inv, stack, simulate);
|
||||
if (stack.isEmpty())
|
||||
break;
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
protected Vec3d getMovementVector() {
|
||||
if (!AllBlocks.DEPLOYER.has(getBlockState()))
|
||||
return Vec3d.ZERO;
|
||||
|
|
|
@ -4,14 +4,16 @@ import java.util.ArrayList;
|
|||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.AllTags;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -30,7 +32,6 @@ import net.minecraft.util.math.AxisAlignedBB;
|
|||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
||||
|
||||
|
@ -141,14 +142,14 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
|||
}
|
||||
|
||||
public void renderParticles() {
|
||||
IItemHandler itemHandler = basinItemInv.orElse(null);
|
||||
BasinInventory inv = (BasinInventory) itemHandler;
|
||||
if (inv == null || world == null)
|
||||
Optional<BasinTileEntity> basin = getBasin();
|
||||
if (!basin.isPresent() || world == null)
|
||||
return;
|
||||
|
||||
for (int slot = 0; slot < inv.getInputHandler()
|
||||
.getSlots(); slot++) {
|
||||
ItemStack stackInSlot = itemHandler.getStackInSlot(slot);
|
||||
SmartInventory inputs = basin.get()
|
||||
.getInputInventory();
|
||||
for (int slot = 0; slot < inputs.getSlots(); slot++) {
|
||||
ItemStack stackInSlot = inputs.getStackInSlot(slot);
|
||||
if (stackInSlot.isEmpty())
|
||||
continue;
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ import java.util.List;
|
|||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInputInventory;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams;
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
|
@ -19,7 +19,7 @@ import net.minecraft.item.crafting.Ingredient;
|
|||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class MixingRecipe extends ProcessingRecipe<BasinInputInventory> {
|
||||
public class MixingRecipe extends ProcessingRecipe<SmartInventory> {
|
||||
|
||||
/**
|
||||
* For JEI purposes only
|
||||
|
@ -61,7 +61,7 @@ public class MixingRecipe extends ProcessingRecipe<BasinInputInventory> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(BasinInputInventory inv, @Nonnull World worldIn) {
|
||||
public boolean matches(SmartInventory inv, @Nonnull World worldIn) {
|
||||
if (inv.isEmpty())
|
||||
return false;
|
||||
|
||||
|
|
|
@ -7,10 +7,11 @@ import java.util.Optional;
|
|||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||
import com.simibubi.create.content.logistics.InWorldProcessing;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
@ -33,7 +34,6 @@ import net.minecraft.util.math.AxisAlignedBB;
|
|||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.common.util.Constants.NBT;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
|
@ -177,13 +177,13 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
|
|||
if (!world.isRemote) {
|
||||
pressedItems.clear();
|
||||
applyBasinRecipe();
|
||||
IItemHandler orElse = basinItemInv.orElse(null);
|
||||
if (basinItemInv.isPresent() && orElse instanceof BasinInventory) {
|
||||
BasinInventory inv = (BasinInventory) orElse;
|
||||
|
||||
for (int slot = 0; slot < inv.getInputHandler()
|
||||
.getSlots(); slot++) {
|
||||
ItemStack stackInSlot = inv.getStackInSlot(slot);
|
||||
Optional<BasinTileEntity> basin = getBasin();
|
||||
SmartInventory inputs = basin.get()
|
||||
.getInputInventory();
|
||||
if (basin.isPresent()) {
|
||||
for (int slot = 0; slot < inputs.getSlots(); slot++) {
|
||||
ItemStack stackInSlot = inputs.getStackInSlot(slot);
|
||||
if (stackInSlot.isEmpty())
|
||||
continue;
|
||||
pressedItems.add(stackInSlot);
|
||||
|
|
|
@ -18,10 +18,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.content.logistics.block.extractor.ExtractorBlock;
|
||||
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerBlock;
|
||||
|
||||
import net.minecraft.block.AbstractPressurePlateBlock;
|
||||
import net.minecraft.block.AbstractRailBlock;
|
||||
|
@ -95,8 +92,6 @@ public class BlockMovementTraits {
|
|||
|
||||
if (AllBlocks.BELT.has(blockState))
|
||||
return true;
|
||||
if (block instanceof ExtractorBlock)
|
||||
return true;
|
||||
return blockState.getPushReaction() != PushReaction.BLOCK;
|
||||
}
|
||||
|
||||
|
@ -143,8 +138,6 @@ public class BlockMovementTraits {
|
|||
return direction == Direction.DOWN;
|
||||
if (block instanceof DoorBlock)
|
||||
return direction == Direction.DOWN;
|
||||
if (block instanceof AttachedLogisticalBlock && !(block instanceof TransposerBlock))
|
||||
return direction == AttachedLogisticalBlock.getBlockFacing(state);
|
||||
if (block instanceof RedstoneLinkBlock)
|
||||
return direction.getOpposite() == state.get(RedstoneLinkBlock.FACING);
|
||||
if (block instanceof FlowerPotBlock)
|
||||
|
|
|
@ -147,7 +147,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren
|
|||
TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE);
|
||||
if (attachmentBehaviour == null)
|
||||
return false;
|
||||
return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace.getOpposite());
|
||||
return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace);
|
||||
}
|
||||
|
||||
public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
|
||||
|
@ -219,7 +219,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren
|
|||
for (Direction d : Iterate.directions)
|
||||
if (d != ignore)
|
||||
state = state.with(FACING_TO_PROPERTY_MAP.get(d),
|
||||
canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d.getOpposite()));
|
||||
canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d));
|
||||
|
||||
// See if it has enough connections
|
||||
Direction connectedDirection = null;
|
||||
|
|
|
@ -60,7 +60,7 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
|||
|
||||
try {
|
||||
BasinTileEntity te = getTileEntity(worldIn, pos);
|
||||
IItemHandlerModifiable inv = te.inventory.orElse(new ItemStackHandler(1));
|
||||
IItemHandlerModifiable inv = te.itemCapability.orElse(new ItemStackHandler(1));
|
||||
for (int slot = 0; slot < inv.getSlots(); slot++) {
|
||||
player.inventory.placeItemBackInInventory(worldIn, inv.getStackInSlot(slot));
|
||||
inv.setStackInSlot(slot, ItemStack.EMPTY);
|
||||
|
@ -83,7 +83,7 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
|||
return;
|
||||
ItemEntity itemEntity = (ItemEntity) entityIn;
|
||||
withTileEntityDo(worldIn, entityIn.getPosition(), te -> {
|
||||
ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputItemInventory, itemEntity.getItem()
|
||||
ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputInventory, itemEntity.getItem()
|
||||
.copy(), false);
|
||||
if (insertItem.isEmpty()) {
|
||||
itemEntity.remove();
|
||||
|
@ -115,8 +115,8 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
|||
return;
|
||||
TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE);
|
||||
withTileEntityDo(worldIn, pos, te -> {
|
||||
ItemHelper.dropContents(worldIn, pos, te.inputItemInventory);
|
||||
ItemHelper.dropContents(worldIn, pos, te.outputItemInventory);
|
||||
ItemHelper.dropContents(worldIn, pos, te.inputInventory);
|
||||
ItemHelper.dropContents(worldIn, pos, te.outputInventory);
|
||||
});
|
||||
worldIn.removeTileEntity(pos);
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
|||
@Override
|
||||
public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
|
||||
try {
|
||||
return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).inputItemInventory);
|
||||
return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).inputInventory);
|
||||
} catch (TileEntityException e) {
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
package com.simibubi.create.content.contraptions.processing;
|
||||
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class BasinInputInventory extends SmartInventory {
|
||||
|
||||
public BasinInputInventory(int slots, BasinTileEntity te) {
|
||||
super(slots, te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
||||
// Only insert if no other slot already has a 'full' stack of this item
|
||||
for (int i = 0; i < getSlots(); i++) {
|
||||
ItemStack stackInSlot = getStackInSlot(i);
|
||||
if (ItemHandlerHelper.canItemStacksStack(stack, stackInSlot)
|
||||
&& stackInSlot.getCount() == getStackLimit(i, stackInSlot))
|
||||
return stack;
|
||||
}
|
||||
|
||||
return super.insertItem(slot, stack, simulate);
|
||||
}
|
||||
|
||||
}
|
|
@ -7,9 +7,9 @@ import java.util.stream.Collectors;
|
|||
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.advancement.SimpleTrigger;
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.simple.DeferralBehaviour;
|
||||
import com.simibubi.create.foundation.utility.recipe.RecipeFinder;
|
||||
|
@ -27,7 +27,6 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
|||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
||||
|
@ -142,9 +141,11 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
|||
if (!basinItemInv.isPresent() || !basinFluidInv.isPresent())
|
||||
return;
|
||||
|
||||
BasinInventory inv = (BasinInventory) basinItemInv.orElse(null);
|
||||
IItemHandlerModifiable inputs = inv.getInputHandler();
|
||||
IItemHandlerModifiable outputs = inv.getOutputHandler();
|
||||
Optional<BasinTileEntity> basin = getBasin();
|
||||
if (!basin.isPresent())
|
||||
return;
|
||||
SmartInventory inputs = basin.get().getInputInventory();
|
||||
SmartInventory outputs = basin.get().getOutputInventory();
|
||||
List<ItemStack> containers = new ArrayList<>();
|
||||
|
||||
NonNullList<Ingredient> ingredients = lastRecipe.getIngredients();
|
||||
|
@ -172,9 +173,11 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
|||
AllTriggers.triggerForNearbyPlayers(trigger, world, pos, 4);
|
||||
}
|
||||
|
||||
outputs.allowInsertion();
|
||||
ItemHandlerHelper.insertItemStacked(outputs, lastRecipe.getRecipeOutput()
|
||||
.copy(), false); // TODO only works for single item output
|
||||
containers.forEach(stack -> ItemHandlerHelper.insertItemStacked(outputs, stack, false));
|
||||
outputs.forbidInsertion();
|
||||
|
||||
// Continue mixing
|
||||
gatherInputs();
|
||||
|
@ -183,7 +186,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
|||
sendData();
|
||||
}
|
||||
|
||||
getBasin().ifPresent(te -> te.contentsChanged = true);
|
||||
getBasin().ifPresent(BasinTileEntity::notifyChangeOfContents);
|
||||
}
|
||||
|
||||
protected List<IRecipe<?>> getMatchingRecipes() {
|
||||
|
|
|
@ -33,7 +33,7 @@ public class BasinRenderer extends SmartTileEntityRenderer<BasinTileEntity> {
|
|||
ms.translate(.5, .2f, .5);
|
||||
Random r = new Random(pos.hashCode());
|
||||
|
||||
IItemHandlerModifiable inv = basin.inventory.orElse(new ItemStackHandler());
|
||||
IItemHandlerModifiable inv = basin.itemCapability.orElse(new ItemStackHandler());
|
||||
for (int slot = 0; slot < inv.getSlots(); slot++) {
|
||||
ItemStack stack = inv.getStackInSlot(slot);
|
||||
if (stack.isEmpty())
|
||||
|
|
|
@ -6,6 +6,7 @@ import java.util.Optional;
|
|||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler;
|
||||
import com.simibubi.create.foundation.item.SmartInventory;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
|
@ -14,7 +15,6 @@ import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBe
|
|||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
|
@ -29,101 +29,26 @@ import net.minecraftforge.common.util.LazyOptional;
|
|||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
public class BasinTileEntity extends SmartTileEntity implements ITickableTileEntity {
|
||||
|
||||
public boolean contentsChanged;
|
||||
public BasinInputInventory inputInventory;
|
||||
protected SmartInventory outputInventory;
|
||||
protected LazyOptional<IItemHandlerModifiable> itemCapability;
|
||||
protected LazyOptional<CombinedFluidHandler> fluidCapability;
|
||||
|
||||
private boolean contentsChanged;
|
||||
private FilteringBehaviour filtering;
|
||||
|
||||
protected ItemStackHandler outputItemInventory = new ItemStackHandler(9) {
|
||||
protected void onContentsChanged(int slot) {
|
||||
sendData();
|
||||
markDirty();
|
||||
}
|
||||
};
|
||||
|
||||
public class BasinInputInventory extends RecipeWrapper {
|
||||
public BasinInputInventory() {
|
||||
super(inputItemInventory);
|
||||
}
|
||||
}
|
||||
|
||||
protected ItemStackHandler inputItemInventory = new ItemStackHandler(9) {
|
||||
protected void onContentsChanged(int slot) {
|
||||
contentsChanged = true;
|
||||
sendData();
|
||||
markDirty();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
|
||||
for (int i = 0; i < getSlots(); i++) {
|
||||
ItemStack stackInSlot = getStackInSlot(i);
|
||||
if (ItemHandlerHelper.canItemStacksStack(stack, stackInSlot))
|
||||
if (stackInSlot.getCount() == getStackLimit(i, stackInSlot))
|
||||
return stack;
|
||||
}
|
||||
return super.insertItem(slot, stack, simulate);
|
||||
}
|
||||
};
|
||||
|
||||
public static class BasinInventory extends CombinedInvWrapper {
|
||||
public BasinInventory(ItemStackHandler input, ItemStackHandler output) {
|
||||
super(input, output);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
||||
if (isInput(slot))
|
||||
return ItemStack.EMPTY;
|
||||
return super.extractItem(slot, amount, simulate);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
|
||||
if (!isInput(slot))
|
||||
return stack;
|
||||
return super.insertItem(slot, stack, simulate);
|
||||
}
|
||||
|
||||
public boolean isInput(int slot) {
|
||||
return getIndexForSlot(slot) == 0;
|
||||
}
|
||||
|
||||
public IItemHandlerModifiable getInputHandler() {
|
||||
return itemHandler[0];
|
||||
}
|
||||
|
||||
public IItemHandlerModifiable getOutputHandler() {
|
||||
return itemHandler[1];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
return 256;
|
||||
}
|
||||
|
||||
protected LazyOptional<IItemHandlerModifiable> inventory =
|
||||
LazyOptional.of(() -> new BasinInventory(inputItemInventory, outputItemInventory));
|
||||
|
||||
protected LazyOptional<CombinedFluidHandler> fluidInventory =
|
||||
LazyOptional.of(() -> new CombinedFluidHandler(9, 1000));
|
||||
|
||||
public BasinInputInventory recipeInventory;
|
||||
|
||||
public BasinTileEntity(TileEntityType<? extends BasinTileEntity> type) {
|
||||
super(type);
|
||||
inputInventory = new BasinInputInventory(9, this);
|
||||
inputInventory.withMaxStackSize(8).forbidExtraction();
|
||||
outputInventory = new SmartInventory(9, this).forbidInsertion();
|
||||
itemCapability = LazyOptional.of(() -> new CombinedInvWrapper(inputInventory, outputInventory));
|
||||
fluidCapability = LazyOptional.of(() -> new CombinedFluidHandler(9, 1000));
|
||||
contentsChanged = true;
|
||||
recipeInventory = new BasinInputInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -138,19 +63,19 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
|
|||
@Override
|
||||
protected void read(CompoundNBT compound, boolean clientPacket) {
|
||||
super.read(compound, clientPacket);
|
||||
inputItemInventory.deserializeNBT(compound.getCompound("InputItems"));
|
||||
outputItemInventory.deserializeNBT(compound.getCompound("OutputItems"));
|
||||
inputInventory.deserializeNBT(compound.getCompound("InputItems"));
|
||||
outputInventory.deserializeNBT(compound.getCompound("OutputItems"));
|
||||
if (compound.contains("fluids"))
|
||||
fluidInventory
|
||||
fluidCapability
|
||||
.ifPresent(combinedFluidHandler -> combinedFluidHandler.readFromNBT(compound.getList("fluids", 10)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(CompoundNBT compound, boolean clientPacket) {
|
||||
super.write(compound, clientPacket);
|
||||
compound.put("InputItems", inputItemInventory.serializeNBT());
|
||||
compound.put("OutputItems", outputItemInventory.serializeNBT());
|
||||
fluidInventory.ifPresent(combinedFuidHandler -> {
|
||||
compound.put("InputItems", inputInventory.serializeNBT());
|
||||
compound.put("OutputItems", outputInventory.serializeNBT());
|
||||
fluidCapability.ifPresent(combinedFuidHandler -> {
|
||||
ListNBT nbt = combinedFuidHandler.getListNBT();
|
||||
compound.put("fluids", nbt);
|
||||
});
|
||||
|
@ -163,8 +88,8 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
|
|||
@Override
|
||||
public void remove() {
|
||||
onEmptied();
|
||||
inventory.invalidate();
|
||||
fluidInventory.invalidate();
|
||||
itemCapability.invalidate();
|
||||
fluidCapability.invalidate();
|
||||
super.remove();
|
||||
}
|
||||
|
||||
|
@ -172,9 +97,9 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
|
|||
@Override
|
||||
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
|
||||
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||
return inventory.cast();
|
||||
return itemCapability.cast();
|
||||
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
|
||||
return fluidInventory.cast();
|
||||
return fluidCapability.cast();
|
||||
return super.getCapability(cap, side);
|
||||
}
|
||||
|
||||
|
@ -199,6 +124,24 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
|
|||
return filtering;
|
||||
}
|
||||
|
||||
public void notifyChangeOfContents() {
|
||||
contentsChanged = true;
|
||||
}
|
||||
|
||||
public SmartInventory getInputInventory() {
|
||||
return inputInventory;
|
||||
}
|
||||
|
||||
public SmartInventory getOutputInventory() {
|
||||
return outputInventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
return 256;
|
||||
}
|
||||
|
||||
class BasinValueBox extends ValueBoxTransform.Sided {
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,7 +5,7 @@ import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock;
|
|||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -49,7 +49,7 @@ public class BeltFunnelInteractionHandler {
|
|||
return true;
|
||||
|
||||
FunnelTileEntity funnelTE = (FunnelTileEntity) te;
|
||||
InsertingBehaviour inserting = TileEntityBehaviour.get(funnelTE, InsertingBehaviour.TYPE);
|
||||
InvManipulationBehaviour inserting = TileEntityBehaviour.get(funnelTE, InvManipulationBehaviour.TYPE);
|
||||
FilteringBehaviour filtering = TileEntityBehaviour.get(funnelTE, FilteringBehaviour.TYPE);
|
||||
|
||||
if (inserting == null)
|
||||
|
@ -58,7 +58,7 @@ public class BeltFunnelInteractionHandler {
|
|||
return true;
|
||||
|
||||
ItemStack before = currentItem.stack.copy();
|
||||
ItemStack remainder = inserting.insert(before, false);
|
||||
ItemStack remainder = inserting.insert(before);
|
||||
if (before.equals(remainder, false))
|
||||
return true;
|
||||
|
||||
|
|
|
@ -1,124 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerBlock;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.block.material.PushReaction;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class AttachedLogisticalBlock extends HorizontalBlock implements IWrenchable {
|
||||
|
||||
public static final BooleanProperty UPWARD = BooleanProperty.create("upward");
|
||||
|
||||
public AttachedLogisticalBlock(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
return ActionResultType.FAIL;
|
||||
}
|
||||
|
||||
protected abstract boolean isVertical();
|
||||
|
||||
protected abstract BlockState getVerticalDefaultState();
|
||||
|
||||
protected abstract BlockState getHorizontalDefaultState();
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
BlockState state = getDefaultState();
|
||||
|
||||
if (context.getFace().getAxis().isHorizontal()) {
|
||||
state = state.with(HORIZONTAL_FACING, context.getFace().getOpposite());
|
||||
} else {
|
||||
state = getVerticalDefaultState();
|
||||
state = state.with(UPWARD, context.getFace() != Direction.UP);
|
||||
state = state.with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing());
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
|
||||
PlayerEntity player) {
|
||||
if (isVertical())
|
||||
return getHorizontalDefaultState().getBlock().getPickBlock(state, target, world, pos, player);
|
||||
return super.getPickBlock(state, target, world, pos, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
|
||||
Direction facing = getBlockFacing(state);
|
||||
return canAttachToSide(worldIn, pos, facing);
|
||||
}
|
||||
|
||||
protected boolean canAttachToSide(IWorldReader worldIn, BlockPos pos, Direction facing) {
|
||||
BlockPos neighbourPos = pos.offset(facing);
|
||||
BlockState neighbour = worldIn.getBlockState(neighbourPos);
|
||||
|
||||
if (neighbour.getBlock() instanceof TransposerBlock)
|
||||
return false;
|
||||
if (AllBlocks.BELT.has(neighbour))
|
||||
return BeltBlock.canAccessFromSide(facing, neighbour);
|
||||
return !neighbour.getShape(worldIn, pos).isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
|
||||
Direction blockFacing = getBlockFacing(state);
|
||||
if (fromPos.equals(pos.offset(blockFacing))) {
|
||||
if (!isValidPosition(state, worldIn, pos)) {
|
||||
worldIn.destroyBlock(pos, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Direction getBlockFacing(BlockState state) {
|
||||
if (isVertical(state))
|
||||
return state.get(UPWARD) ? Direction.UP : Direction.DOWN;
|
||||
return state.get(HORIZONTAL_FACING);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
if (isVertical())
|
||||
builder.add(UPWARD);
|
||||
super.fillStateContainer(builder.add(HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
public static boolean isVertical(BlockState state) {
|
||||
Block block = state.getBlock();
|
||||
return ((block instanceof AttachedLogisticalBlock)
|
||||
&& (((AttachedLogisticalBlock) state.getBlock())).isVertical());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PushReaction getPushReaction(BlockState state) {
|
||||
return PushReaction.BLOCK;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.belts;
|
||||
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class BeltAttachableLogisticalBlock extends AttachedLogisticalBlock {
|
||||
|
||||
public BeltAttachableLogisticalBlock(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) {
|
||||
TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE);
|
||||
worldIn.removeTileEntity(pos);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -5,15 +5,17 @@ import java.util.List;
|
|||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock;
|
||||
import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity;
|
||||
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteBlock.Shape;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.ChuteFunnelBlock;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
|
||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
|
@ -39,6 +41,7 @@ import net.minecraftforge.common.capabilities.Capability;
|
|||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInformation {
|
||||
|
||||
|
@ -51,6 +54,9 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
LazyOptional<IItemHandler> lazyHandler;
|
||||
boolean canPickUpItems;
|
||||
|
||||
LazyOptional<IItemHandler> capAbove;
|
||||
LazyOptional<IItemHandler> capBelow;
|
||||
|
||||
public ChuteTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
super(tileEntityTypeIn);
|
||||
item = ItemStack.EMPTY;
|
||||
|
@ -58,6 +64,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
itemHandler = new ChuteItemHandler(this);
|
||||
lazyHandler = LazyOptional.of(() -> itemHandler);
|
||||
canPickUpItems = false;
|
||||
capAbove = LazyOptional.empty();
|
||||
capBelow = LazyOptional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -79,7 +87,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
return false;
|
||||
if (getItemMotion() > 0 && getInputChutes().isEmpty())
|
||||
return false;
|
||||
return blockState.get(ChuteBlock.FACING) == Direction.DOWN || blockState.get(ChuteBlock.SHAPE) == Shape.INTERSECTION;
|
||||
return blockState.get(ChuteBlock.FACING) == Direction.DOWN
|
||||
|| blockState.get(ChuteBlock.SHAPE) == Shape.INTERSECTION;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -91,17 +100,22 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
public void tick() {
|
||||
super.tick();
|
||||
canPickUpItems = canDirectlyInsert();
|
||||
if (item.isEmpty())
|
||||
return;
|
||||
|
||||
float itemMotion = getItemMotion();
|
||||
|
||||
if (item.isEmpty()) {
|
||||
if (itemMotion < 0)
|
||||
handleInputFromAbove();
|
||||
if (itemMotion > 0)
|
||||
handleInputFromBelow();
|
||||
return;
|
||||
}
|
||||
|
||||
float nextOffset = itemPosition.value + itemMotion;
|
||||
|
||||
if (itemMotion < 0) {
|
||||
if (nextOffset < .5f) {
|
||||
if (handleSideOutput())
|
||||
return;
|
||||
boolean success = handleDownwardOutput(true);
|
||||
if (!success)
|
||||
if (!handleDownwardOutput(true))
|
||||
nextOffset = .5f;
|
||||
else if (nextOffset < 0) {
|
||||
handleDownwardOutput(world.isRemote);
|
||||
|
@ -112,10 +126,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
|
||||
if (itemMotion > 0) {
|
||||
if (nextOffset > .5f) {
|
||||
if (handleSideOutput())
|
||||
return;
|
||||
boolean success = handleUpwardOutput(true);
|
||||
if (!success)
|
||||
if (!handleUpwardOutput(true))
|
||||
nextOffset = .5f;
|
||||
else if (nextOffset > 1) {
|
||||
handleUpwardOutput(world.isRemote);
|
||||
|
@ -127,6 +138,22 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
itemPosition.set(nextOffset);
|
||||
}
|
||||
|
||||
private void handleInputFromAbove() {
|
||||
if (!capAbove.isPresent())
|
||||
capAbove = grabCapability(Direction.UP);
|
||||
if (capAbove.isPresent())
|
||||
item =
|
||||
ItemHelper.extract(capAbove.orElse(null), Predicates.alwaysTrue(), ExtractionCountMode.UPTO, 16, false);
|
||||
}
|
||||
|
||||
private void handleInputFromBelow() {
|
||||
if (!capBelow.isPresent())
|
||||
capBelow = grabCapability(Direction.DOWN);
|
||||
if (capBelow.isPresent())
|
||||
item =
|
||||
ItemHelper.extract(capBelow.orElse(null), Predicates.alwaysTrue(), ExtractionCountMode.UPTO, 16, false);
|
||||
}
|
||||
|
||||
private boolean handleDownwardOutput(boolean simulate) {
|
||||
BlockState blockState = getBlockState();
|
||||
ChuteTileEntity targetChute = getTargetChute(blockState);
|
||||
|
@ -169,6 +196,15 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
return remainder.isEmpty();
|
||||
}
|
||||
|
||||
if (!capBelow.isPresent())
|
||||
capBelow = grabCapability(Direction.DOWN);
|
||||
if (capBelow.isPresent()) {
|
||||
ItemStack remainder = ItemHandlerHelper.insertItemStacked(capBelow.orElse(null), item, simulate);
|
||||
if (!simulate)
|
||||
setItem(ItemStack.EMPTY);
|
||||
return remainder.isEmpty();
|
||||
}
|
||||
|
||||
if (Block.hasSolidSideOnTop(world, pos.down()))
|
||||
return false;
|
||||
|
||||
|
@ -220,6 +256,15 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
return true;
|
||||
}
|
||||
|
||||
if (!capAbove.isPresent())
|
||||
capAbove = grabCapability(Direction.UP);
|
||||
if (capAbove.isPresent()) {
|
||||
ItemStack remainder = ItemHandlerHelper.insertItemStacked(capAbove.orElse(null), item, simulate);
|
||||
if (!simulate)
|
||||
setItem(ItemStack.EMPTY);
|
||||
return remainder.isEmpty();
|
||||
}
|
||||
|
||||
if (Block.hasSolidSide(stateAbove, world, pos.up(), Direction.DOWN))
|
||||
return false;
|
||||
if (!inputChutes.isEmpty())
|
||||
|
@ -237,25 +282,12 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
return true;
|
||||
}
|
||||
|
||||
private boolean handleSideOutput() {
|
||||
if (world.isRemote)
|
||||
return false;
|
||||
for (Direction direction : Iterate.horizontalDirections) {
|
||||
BlockPos funnelPos = pos.offset(direction);
|
||||
BlockState funnelState = world.getBlockState(funnelPos);
|
||||
if (AllBlocks.BRASS_CHUTE_FUNNEL.has(funnelState)) {
|
||||
if (funnelState.get(ChuteFunnelBlock.POWERED))
|
||||
continue;
|
||||
if (funnelState.get(ChuteFunnelBlock.HORIZONTAL_FACING) != direction.getOpposite())
|
||||
continue;
|
||||
if (funnelState.get(ChuteFunnelBlock.PUSHING))
|
||||
continue;
|
||||
ItemStack remainder = FunnelBlock.tryInsert(world, funnelPos, item.copy(), world.isRemote);
|
||||
if (remainder.getCount() != item.getCount() && !world.isRemote)
|
||||
setItem(remainder);
|
||||
}
|
||||
}
|
||||
return item.isEmpty();
|
||||
private LazyOptional<IItemHandler> grabCapability(Direction side) {
|
||||
BlockPos pos = this.pos.offset(side);
|
||||
TileEntity te = world.getTileEntity(pos);
|
||||
if (te == null || te instanceof ChuteTileEntity)
|
||||
return LazyOptional.empty();
|
||||
return te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite());
|
||||
}
|
||||
|
||||
public void setItem(ItemStack stack) {
|
||||
|
@ -319,7 +351,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
List<ChuteTileEntity> inputChutes = getInputChutes();
|
||||
if (!item.isEmpty())
|
||||
InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), item);
|
||||
super.remove();
|
||||
remove();
|
||||
if (targetChute != null) {
|
||||
targetChute.updatePull();
|
||||
targetChute.propagatePush();
|
||||
|
|
|
@ -1,127 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
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.World;
|
||||
|
||||
public class ExtractorBlock extends BeltAttachableLogisticalBlock {
|
||||
|
||||
public static BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
|
||||
public ExtractorBlock(Properties properties) {
|
||||
super(properties);
|
||||
setDefaultState(getDefaultState().with(POWERED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVertical() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getVerticalDefaultState() {
|
||||
return AllBlocks.VERTICAL_EXTRACTOR.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getHorizontalDefaultState() {
|
||||
return AllBlocks.EXTRACTOR.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
super.fillStateContainer(builder.add(POWERED));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.EXTRACTOR.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
return super.getStateForPlacement(context).with(POWERED, reactsToRedstone() && context.getWorld()
|
||||
.isBlockPowered(context.getPos()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving);
|
||||
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
if (!reactsToRedstone())
|
||||
return;
|
||||
|
||||
boolean previouslyPowered = state.get(POWERED);
|
||||
if (previouslyPowered != worldIn.isBlockPowered(pos))
|
||||
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
|
||||
}
|
||||
|
||||
protected boolean reactsToRedstone() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||
return AllShapes.EXTRACTOR.get(getBlockFacing(state));
|
||||
}
|
||||
|
||||
public static Vec3d getFilterSlotPosition(BlockState state) {
|
||||
float verticalOffset = (state.getBlock() instanceof ExtractorBlock) ? 10.5f : 12.5f;
|
||||
|
||||
Vec3d offsetForHorizontal = VecHelper.voxelSpace(8f, verticalOffset, 14f);
|
||||
Vec3d offsetForUpward = VecHelper.voxelSpace(8f, 14.15f, 3.5f);
|
||||
Vec3d offsetForDownward = VecHelper.voxelSpace(8f, 1.85f, 3.5f);
|
||||
Vec3d vec = offsetForHorizontal;
|
||||
|
||||
float yRot = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING));
|
||||
if (AttachedLogisticalBlock.isVertical(state))
|
||||
vec = state.get(AttachedLogisticalBlock.UPWARD) ? offsetForUpward : offsetForDownward;
|
||||
|
||||
return VecHelper.rotateCentered(vec, yRot, Axis.Y);
|
||||
}
|
||||
|
||||
public static Vec3d getFilterSlotOrientation(BlockState state) {
|
||||
float yRot = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING));
|
||||
float zRot = (AttachedLogisticalBlock.isVertical(state)) ? 0 : 90;
|
||||
return new Vec3d(0, yRot, zRot);
|
||||
}
|
||||
|
||||
public static class Vertical extends ExtractorBlock {
|
||||
public Vertical(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVertical() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.content.logistics.item.filter.FilterItem;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.item.ItemEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
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.Vec3d;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class ExtractorMovementBehaviour extends MovementBehaviour {
|
||||
|
||||
@Override
|
||||
public void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||
super.visitNewPosition(context, pos);
|
||||
|
||||
World world = context.world;
|
||||
VoxelShape collisionShape = world.getBlockState(pos).getCollisionShape(world, pos);
|
||||
if (!collisionShape.isEmpty())
|
||||
return;
|
||||
if (!world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos)).isEmpty())
|
||||
return;
|
||||
|
||||
ItemStack filter = getFilter(context);
|
||||
int amount = getFilterAmount(context);
|
||||
ItemStack dropped = ItemHelper.extract(context.contraption.inventory,
|
||||
stack -> FilterItem.test(context.world, stack, filter), amount == 0 ? 64 : amount, false);
|
||||
|
||||
if (dropped.isEmpty())
|
||||
return;
|
||||
if (world.isRemote)
|
||||
return;
|
||||
|
||||
Vec3d entityPos = context.position;
|
||||
Entity entityIn = null;
|
||||
Direction facing = AttachedLogisticalBlock.getBlockFacing(context.state);
|
||||
if (facing != Direction.DOWN)
|
||||
entityPos = entityPos.add(0, -0.5f, 0);
|
||||
|
||||
entityIn = new ItemEntity(world, entityPos.x, entityPos.y, entityPos.z, dropped);
|
||||
entityIn.setMotion(Vec3d.ZERO);
|
||||
((ItemEntity) entityIn).setPickupDelay(5);
|
||||
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, 1/16f, .1f);
|
||||
world.addEntity(entityIn);
|
||||
}
|
||||
|
||||
private ItemStack getFilter(MovementContext context) {
|
||||
return ItemStack.read(context.tileData.getCompound("Filter"));
|
||||
}
|
||||
|
||||
private int getFilterAmount(MovementContext context) {
|
||||
return context.tileData.getInt("FilterAmount");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import static net.minecraft.block.HorizontalBlock.HORIZONTAL_FACING;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.content.logistics.block.transposer.TransposerBlock;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class ExtractorSlots {
|
||||
|
||||
static class Filter extends ValueBoxTransform {
|
||||
|
||||
Vec3d offsetForHorizontal = VecHelper.voxelSpace(8f, 10.5f, 14f);
|
||||
Vec3d offsetForUpward = VecHelper.voxelSpace(8f, 14.15f, 3.5f);
|
||||
Vec3d offsetForDownward = VecHelper.voxelSpace(8f, 1.85f, 3.5f);
|
||||
|
||||
@Override
|
||||
protected Vec3d getLocalOffset(BlockState state) {
|
||||
Vec3d location = offsetForHorizontal;
|
||||
if (state.getBlock() instanceof TransposerBlock)
|
||||
location = location.add(0, 2 / 16f, 0);
|
||||
if (AttachedLogisticalBlock.isVertical(state))
|
||||
location = state.get(AttachedLogisticalBlock.UPWARD) ? offsetForUpward : offsetForDownward;
|
||||
return rotateHorizontally(state, location);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void rotate(BlockState state, MatrixStack ms) {
|
||||
float yRot = AngleHelper.horizontalAngle(state.get(HORIZONTAL_FACING));
|
||||
float xRot = (AttachedLogisticalBlock.isVertical(state)) ? 0 : 90;
|
||||
MatrixStacker.of(ms)
|
||||
.rotateY(yRot)
|
||||
.rotateX(xRot);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Link extends ValueBoxTransform.Dual {
|
||||
|
||||
public Link(boolean first) {
|
||||
super(first);
|
||||
}
|
||||
|
||||
Vec3d offsetForHorizontal = VecHelper.voxelSpace(11.5f, 4f, 14f);
|
||||
Vec3d offsetForUpward = VecHelper.voxelSpace(10f, 14f, 11.5f);
|
||||
Vec3d offsetForDownward = VecHelper.voxelSpace(10f, 2f, 11.5f);
|
||||
|
||||
@Override
|
||||
protected Vec3d getLocalOffset(BlockState state) {
|
||||
Vec3d location = offsetForHorizontal;
|
||||
if (state.getBlock() instanceof TransposerBlock)
|
||||
location = location.add(0, 2 / 16f, 0);
|
||||
if (!isFirst())
|
||||
location = location.add(0, 4 / 16f, 0);
|
||||
|
||||
if (AttachedLogisticalBlock.isVertical(state)) {
|
||||
location = state.get(AttachedLogisticalBlock.UPWARD) ? offsetForUpward : offsetForDownward;
|
||||
if (!isFirst())
|
||||
location = location.add(-4 / 16f, 0, 0);
|
||||
}
|
||||
|
||||
float yRot = AngleHelper.horizontalAngle(state.get(HORIZONTAL_FACING));
|
||||
location = VecHelper.rotateCentered(location, yRot, Axis.Y);
|
||||
return location;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void rotate(BlockState state, MatrixStack ms) {
|
||||
float horizontalAngle = AngleHelper.horizontalAngle(state.get(HORIZONTAL_FACING));
|
||||
boolean vertical = AttachedLogisticalBlock.isVertical(state);
|
||||
float yRot = vertical ? horizontalAngle + 180 : horizontalAngle + 270;
|
||||
float zRot = vertical ? (state.get(AttachedLogisticalBlock.UPWARD) ? 90 : 270) : 0;
|
||||
MatrixStacker.of(ms)
|
||||
.rotateY(yRot)
|
||||
.rotateZ(zRot);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,133 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.transport.BeltInventory;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.AutoExtractingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.SingleTargetAutoExtractingBehaviour;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.item.ItemEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class ExtractorTileEntity extends SmartTileEntity {
|
||||
|
||||
protected ExtractingBehaviour extracting;
|
||||
protected FilteringBehaviour filtering;
|
||||
protected boolean extractingToBelt;
|
||||
|
||||
public ExtractorTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
super(tileEntityTypeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
int delay = AllConfigs.SERVER.logistics.extractorDelay.get();
|
||||
extracting =
|
||||
new SingleTargetAutoExtractingBehaviour(this, () -> AttachedLogisticalBlock.getBlockFacing(getBlockState()),
|
||||
this::onExtract, delay).pauseWhen(this::isPowered).waitUntil(this::canExtract);
|
||||
behaviours.add(extracting);
|
||||
|
||||
filtering = new FilteringBehaviour(this, new ExtractorSlots.Filter()).withCallback(this::filterChanged);
|
||||
filtering.showCount();
|
||||
behaviours.add(filtering);
|
||||
}
|
||||
|
||||
protected void onExtract(ItemStack stack) {
|
||||
if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) {
|
||||
TileEntity te = world.getTileEntity(pos.down());
|
||||
if (te instanceof BeltTileEntity) {
|
||||
if (((BeltTileEntity) te).tryInsertingFromSide(Direction.UP, stack, false))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Vec3d entityPos = VecHelper.getCenterOf(getPos()).add(0, -0.5f, 0);
|
||||
Entity entityIn = null;
|
||||
Direction facing = AttachedLogisticalBlock.getBlockFacing(getBlockState());
|
||||
if (facing == Direction.DOWN)
|
||||
entityPos = entityPos.add(0, .5, 0);
|
||||
|
||||
entityIn = new ItemEntity(world, entityPos.x, entityPos.y, entityPos.z, stack);
|
||||
entityIn.setMotion(Vec3d.ZERO);
|
||||
((ItemEntity) entityIn).setPickupDelay(5);
|
||||
world.playSound(null, getPos(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f, .1f);
|
||||
world.addEntity(entityIn);
|
||||
}
|
||||
|
||||
protected boolean isAttachedToBelt() {
|
||||
Direction blockFacing = AttachedLogisticalBlock.getBlockFacing(getBlockState());
|
||||
return AllBlocks.BELT.has(world.getBlockState(pos.offset(blockFacing)));
|
||||
}
|
||||
|
||||
protected boolean isTargetingBelt() {
|
||||
if (!AllBlocks.BELT.has(world.getBlockState(pos.down())))
|
||||
return false;
|
||||
TileEntity te = world.getTileEntity(pos.down());
|
||||
if (te == null || !(te instanceof BeltTileEntity))
|
||||
return false;
|
||||
return ((KineticTileEntity) te).getSpeed() != 0;
|
||||
}
|
||||
|
||||
protected boolean isPowered() {
|
||||
return getBlockState().get(ExtractorBlock.POWERED);
|
||||
}
|
||||
|
||||
private void filterChanged(ItemStack stack) {
|
||||
|
||||
}
|
||||
|
||||
protected boolean canExtract() {
|
||||
if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) {
|
||||
TileEntity te = world.getTileEntity(pos.down());
|
||||
if (te instanceof BeltTileEntity) {
|
||||
BeltTileEntity belt = (BeltTileEntity) te;
|
||||
if (belt.getSpeed() == 0)
|
||||
return false;
|
||||
BeltTileEntity controller = belt.getControllerTE();
|
||||
if (controller != null) {
|
||||
BeltInventory inventory = controller.getInventory();
|
||||
if (inventory == null)
|
||||
return false;
|
||||
if (!inventory.canInsertAtFromSide(belt.index, Direction.UP))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
List<Entity> entitiesWithinAABBExcludingEntity =
|
||||
world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(getPos()));
|
||||
return entitiesWithinAABBExcludingEntity.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
((AutoExtractingBehaviour) extracting).setTicking(!isAttachedToBelt());
|
||||
super.tick();
|
||||
boolean onBelt = isTargetingBelt();
|
||||
if (extractingToBelt != onBelt) {
|
||||
extractingToBelt = onBelt;
|
||||
((AutoExtractingBehaviour) extracting)
|
||||
.setDelay(onBelt ? 0 : AllConfigs.SERVER.logistics.extractorDelay.get());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
|
||||
public class LinkedExtractorBlock extends ExtractorBlock {
|
||||
|
||||
public LinkedExtractorBlock(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getVerticalDefaultState() {
|
||||
return AllBlocks.VERTICAL_LINKED_EXTRACTOR.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getHorizontalDefaultState() {
|
||||
return AllBlocks.LINKED_EXTRACTOR.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.LINKED_EXTRACTOR.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean reactsToRedstone() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Pair<Vec3d, Vec3d> getFrequencySlotPosition(BlockState state) {
|
||||
float verticalOffset = (state.getBlock() instanceof ExtractorBlock) ? 4f : 6f;
|
||||
|
||||
Vec3d first = VecHelper.voxelSpace(11.5f, verticalOffset, 14f);
|
||||
Vec3d second = VecHelper.voxelSpace(11.5f, 4f + verticalOffset, 14f);
|
||||
|
||||
Vec3d firstUpward = VecHelper.voxelSpace(10f, 14f, 11.5f);
|
||||
Vec3d secondUpward = VecHelper.voxelSpace(6f, 14f, 11.5f);
|
||||
Vec3d firstDownward = VecHelper.voxelSpace(10f, 2f, 11.5f);
|
||||
Vec3d secondDownward = VecHelper.voxelSpace(6f, 2f, 11.5f);
|
||||
|
||||
float yRot = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING));
|
||||
if (AttachedLogisticalBlock.isVertical(state)) {
|
||||
Boolean up = state.get(AttachedLogisticalBlock.UPWARD);
|
||||
first = up ? firstUpward : firstDownward;
|
||||
second = up ? secondUpward : secondDownward;
|
||||
}
|
||||
|
||||
first = VecHelper.rotateCentered(first, yRot, Axis.Y);
|
||||
second = VecHelper.rotateCentered(second, yRot, Axis.Y);
|
||||
return Pair.of(first, second);
|
||||
}
|
||||
|
||||
public static Vec3d getFrequencySlotOrientation(BlockState state) {
|
||||
boolean vertical = AttachedLogisticalBlock.isVertical(state);
|
||||
float horizontalAngle = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING));
|
||||
|
||||
float xRot = vertical ? (state.get(UPWARD) ? 90 : 270) : 0;
|
||||
float yRot = vertical ? horizontalAngle + 180 : horizontalAngle + 270;
|
||||
float zRot = vertical ? 0 : 0;
|
||||
|
||||
return new Vec3d(xRot, yRot, zRot);
|
||||
}
|
||||
|
||||
public static class Vertical extends LinkedExtractorBlock {
|
||||
public Vertical(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVertical() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import static net.minecraft.state.properties.BlockStateProperties.POWERED;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkBehaviour;
|
||||
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
|
||||
public class LinkedExtractorTileEntity extends ExtractorTileEntity {
|
||||
|
||||
public boolean receivedSignal;
|
||||
public LinkBehaviour receiver;
|
||||
|
||||
public LinkedExtractorTileEntity(TileEntityType<? extends LinkedExtractorTileEntity> type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
Pair<ValueBoxTransform, ValueBoxTransform> slots = ValueBoxTransform.Dual.makeSlots(ExtractorSlots.Link::new);
|
||||
receiver = LinkBehaviour.receiver(this, slots, this::setSignal);
|
||||
behaviours.add(receiver);
|
||||
super.addBehaviours(behaviours);
|
||||
}
|
||||
|
||||
public void setSignal(int powered) {
|
||||
receivedSignal = powered > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (world.isRemote)
|
||||
return;
|
||||
if (receivedSignal != getBlockState().get(POWERED))
|
||||
world.setBlockState(pos, getBlockState().cycle(POWERED));
|
||||
}
|
||||
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.extractor;
|
||||
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
||||
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraftforge.client.model.generators.ModelFile;
|
||||
|
||||
public class VerticalExtractorGenerator extends SpecialBlockStateGen {
|
||||
|
||||
private boolean linked;
|
||||
|
||||
public VerticalExtractorGenerator(boolean linked) {
|
||||
this.linked = linked;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getXRotation(BlockState state) {
|
||||
return state.get(ExtractorBlock.Vertical.UPWARD) ? 180 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getYRotation(BlockState state) {
|
||||
return (state.get(ExtractorBlock.UPWARD) ? 0 : 180) + horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
|
||||
BlockState state) {
|
||||
return AssetLookup.forPowered(ctx, prov, "extractor/vertical" + (linked ? "_linked" : ""))
|
||||
.apply(state);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.funnel;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
|
||||
public class AndesiteChuteFunnelBlock extends ChuteFunnelBlock {
|
||||
|
||||
public AndesiteChuteFunnelBlock(Properties p_i48377_1_) {
|
||||
super(AllBlocks.ANDESITE_FUNNEL, p_i48377_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPoweredProperty() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -20,11 +20,4 @@ public class AndesiteFunnelBlock extends FunnelBlock {
|
|||
.with(BeltFunnelBlock.HORIZONTAL_FACING, facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getEquivalentChuteFunnel(IBlockReader world, BlockPos pos, BlockState state) {
|
||||
Direction facing = state.get(FACING);
|
||||
return AllBlocks.ANDESITE_CHUTE_FUNNEL.getDefaultState()
|
||||
.with(ChuteFunnelBlock.HORIZONTAL_FACING, facing);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.funnel;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
|
||||
public class BrassChuteFunnelBlock extends ChuteFunnelBlock {
|
||||
|
||||
public BrassChuteFunnelBlock(Properties p_i48377_1_) {
|
||||
super(AllBlocks.BRASS_FUNNEL, p_i48377_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPoweredProperty() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -56,12 +56,4 @@ public class BrassFunnelBlock extends FunnelBlock {
|
|||
.with(POWERED, state.get(POWERED));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getEquivalentChuteFunnel(IBlockReader world, BlockPos pos, BlockState state) {
|
||||
Direction facing = state.get(FACING);
|
||||
return AllBlocks.BRASS_CHUTE_FUNNEL.getDefaultState()
|
||||
.with(ChuteFunnelBlock.HORIZONTAL_FACING, facing)
|
||||
.with(POWERED, state.get(POWERED));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.funnel;
|
||||
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteBlock;
|
||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
|
||||
public abstract class ChuteFunnelBlock extends HorizontalInteractionFunnelBlock {
|
||||
|
||||
public ChuteFunnelBlock(BlockEntry<? extends FunnelBlock> parent, Properties p_i48377_1_) {
|
||||
super(parent, p_i48377_1_);
|
||||
}
|
||||
|
||||
public static boolean isOnValidChute(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
Direction direction = state.get(HORIZONTAL_FACING);
|
||||
if (world.getBlockState(pos.offset(direction))
|
||||
.getBlock() instanceof ChuteBlock)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
return AllShapes.CHUTE_FUNNEL.get(state.get(HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) {
|
||||
return isOnValidChute(state, world, pos);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.funnel;
|
||||
|
||||
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
||||
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraftforge.client.model.generators.ModelFile;
|
||||
|
||||
public class ChuteFunnelGenerator extends SpecialBlockStateGen {
|
||||
|
||||
private String type;
|
||||
|
||||
public ChuteFunnelGenerator(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getXRotation(BlockState state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getYRotation(BlockState state) {
|
||||
return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
|
||||
BlockState state) {
|
||||
boolean pushing = state.get(ChuteFunnelBlock.PUSHING);
|
||||
boolean powered = state.has(ChuteFunnelBlock.POWERED) && state.get(ChuteFunnelBlock.POWERED);
|
||||
String suffix = (pushing ? "push" : "pull") + (powered ? "_powered" : "");
|
||||
String textureName = type + "_funnel_" + suffix;
|
||||
String modelName = ctx.getName() + "_" + suffix;
|
||||
return prov.models()
|
||||
.withExistingParent(modelName, prov.modLoc("block/chute_funnel/block"))
|
||||
.texture("particle", prov.modLoc("block/" + type + "_casing"))
|
||||
.texture("3", prov.modLoc("block/" + textureName))
|
||||
.texture("1_2", prov.modLoc("block/" + type + "_funnel_back"))
|
||||
.texture("4", prov.modLoc("block/" + type + "_funnel_plating"));
|
||||
}
|
||||
|
||||
}
|
|
@ -10,7 +10,7 @@ import com.simibubi.create.foundation.block.ITE;
|
|||
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
@ -106,13 +106,14 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE<
|
|||
|
||||
public static ItemStack tryInsert(World worldIn, BlockPos pos, ItemStack toInsert, boolean simulate) {
|
||||
FilteringBehaviour filter = TileEntityBehaviour.get(worldIn, pos, FilteringBehaviour.TYPE);
|
||||
InsertingBehaviour inserter = TileEntityBehaviour.get(worldIn, pos, InsertingBehaviour.TYPE);
|
||||
InvManipulationBehaviour inserter = TileEntityBehaviour.get(worldIn, pos, InvManipulationBehaviour.TYPE);
|
||||
if (inserter == null)
|
||||
return toInsert;
|
||||
if (filter != null && !filter.test(toInsert))
|
||||
return toInsert;
|
||||
ItemStack remainder = inserter.insert(toInsert, simulate);
|
||||
return remainder;
|
||||
if (simulate)
|
||||
inserter.simulate();
|
||||
return inserter.insert(toInsert);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -148,22 +149,10 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE<
|
|||
if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos))
|
||||
return BeltFunnelBlock.updateShape(equivalentFunnel, world, pos);
|
||||
}
|
||||
if (direction == facing) {
|
||||
BlockState equivalentFunnel = getEquivalentChuteFunnel(null, null, state);
|
||||
if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos))
|
||||
return equivalentFunnel;
|
||||
}
|
||||
if (direction == facing.getOpposite()) {
|
||||
BlockState equivalentFunnel = getEquivalentChuteFunnel(null, null, state);
|
||||
if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos))
|
||||
return equivalentFunnel;
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
public abstract BlockState getEquivalentChuteFunnel(IBlockReader world, BlockPos pos, BlockState state);
|
||||
|
||||
public abstract BlockState getEquivalentBeltFunnel(IBlockReader world, BlockPos pos, BlockState state);
|
||||
|
||||
@Override
|
||||
|
|
|
@ -33,11 +33,6 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided {
|
|||
localOffset = VecHelper.rotateCentered(southLocation, AngleHelper.horizontalAngle(getSide()), Axis.Y);
|
||||
}
|
||||
|
||||
if (AllBlocks.BRASS_CHUTE_FUNNEL.has(state)) {
|
||||
Direction facing = state.get(ChuteFunnelBlock.HORIZONTAL_FACING);
|
||||
localOffset = localOffset.subtract(new Vec3d(facing.getDirectionVec()).scale(2 / 16f));
|
||||
}
|
||||
|
||||
return localOffset;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import net.minecraft.block.BlockState;
|
|||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Rotation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||
|
@ -44,22 +43,10 @@ public class FunnelItem extends BlockItem {
|
|||
FunnelBlock block = (FunnelBlock) getBlock();
|
||||
Block beltFunnelBlock = block.getEquivalentBeltFunnel(world, pos, state)
|
||||
.getBlock();
|
||||
Block chuteFunnelBlock = block.getEquivalentChuteFunnel(world, pos, state)
|
||||
.getBlock();
|
||||
|
||||
BlockState equivalentBeltFunnel = beltFunnelBlock.getStateForPlacement(ctx)
|
||||
.with(BeltFunnelBlock.HORIZONTAL_FACING, direction);
|
||||
BlockState equivalentChuteFunnel = chuteFunnelBlock.getStateForPlacement(ctx)
|
||||
.with(ChuteFunnelBlock.HORIZONTAL_FACING, direction);
|
||||
BlockState reversedChuteFunnel = equivalentChuteFunnel.rotate(Rotation.CLOCKWISE_180)
|
||||
.cycle(ChuteFunnelBlock.PUSHING);
|
||||
|
||||
if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, world, pos))
|
||||
return BeltFunnelBlock.updateShape(equivalentBeltFunnel, world, pos);
|
||||
if (ChuteFunnelBlock.isOnValidChute(equivalentChuteFunnel, world, pos))
|
||||
return equivalentChuteFunnel;
|
||||
if (ChuteFunnelBlock.isOnValidChute(reversedChuteFunnel, world, pos))
|
||||
return reversedChuteFunnel;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,9 @@
|
|||
package com.simibubi.create.content.logistics.block.funnel;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||
import com.simibubi.create.content.logistics.block.chute.ChuteTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
|
||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
|
@ -16,31 +12,26 @@ import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputB
|
|||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour.InterfaceProvider;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public class FunnelTileEntity extends SmartTileEntity {
|
||||
|
||||
private FilteringBehaviour filtering;
|
||||
private InsertingBehaviour inserting;
|
||||
private ExtractingBehaviour extracting;
|
||||
private DirectBeltInputBehaviour beltInputBehaviour;
|
||||
private InvManipulationBehaviour invManipulation;
|
||||
|
||||
int sendFlap;
|
||||
InterpolatedChasingValue flap;
|
||||
|
||||
static enum Mode {
|
||||
INVALID, PAUSED, COLLECT, BELT, CHUTE_SIDE, CHUTE_END
|
||||
INVALID, PAUSED, COLLECT, BELT
|
||||
}
|
||||
|
||||
public FunnelTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
|
@ -58,14 +49,6 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
return Mode.PAUSED;
|
||||
if (state.getBlock() instanceof BeltFunnelBlock)
|
||||
return Mode.BELT;
|
||||
if (state.getBlock() instanceof ChuteFunnelBlock)
|
||||
return Mode.CHUTE_SIDE;
|
||||
|
||||
Direction facing = FunnelBlock.getFunnelFacing(state);
|
||||
BlockState input = world.getBlockState(pos.offset(facing));
|
||||
|
||||
if (AllBlocks.CHUTE.has(input))
|
||||
return Mode.CHUTE_END;
|
||||
return Mode.COLLECT;
|
||||
}
|
||||
|
||||
|
@ -77,39 +60,6 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
tickAsBeltFunnel();
|
||||
if (world.isRemote)
|
||||
return;
|
||||
if (mode == Mode.CHUTE_SIDE)
|
||||
tickAsHorizontalChuteFunnel();
|
||||
if (mode == Mode.CHUTE_END)
|
||||
tickAsVerticalChuteFunnel();
|
||||
}
|
||||
|
||||
public void tickAsHorizontalChuteFunnel() {
|
||||
if (!getBlockState().get(ChuteFunnelBlock.PUSHING))
|
||||
return;
|
||||
BlockPos chutePos = pos.offset(FunnelBlock.getFunnelFacing(getBlockState()));
|
||||
TileEntity te = world.getTileEntity(chutePos);
|
||||
if (!(te instanceof ChuteTileEntity))
|
||||
return;
|
||||
ChuteTileEntity chute = (ChuteTileEntity) te;
|
||||
extracting.setCallback(stack -> chute.setItem(stack, .5f));
|
||||
extracting.withAdditionalFilter(stack -> chute.getItem()
|
||||
.isEmpty());
|
||||
extracting.extract();
|
||||
}
|
||||
|
||||
public void tickAsVerticalChuteFunnel() {
|
||||
Direction funnelFacing = FunnelBlock.getFunnelFacing(getBlockState());
|
||||
BlockPos chutePos = pos.offset(funnelFacing);
|
||||
TileEntity te = world.getTileEntity(chutePos);
|
||||
if (!(te instanceof ChuteTileEntity))
|
||||
return;
|
||||
ChuteTileEntity chute = (ChuteTileEntity) te;
|
||||
if (chute.getItemMotion() > 0 != (funnelFacing == Direction.UP))
|
||||
return;
|
||||
extracting.setCallback(stack -> chute.setItem(stack));
|
||||
extracting.withAdditionalFilter(stack -> chute.getItem()
|
||||
.isEmpty());
|
||||
extracting.extract();
|
||||
}
|
||||
|
||||
public void tickAsBeltFunnel() {
|
||||
|
@ -119,7 +69,8 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
if (world.isRemote)
|
||||
return;
|
||||
|
||||
if (!blockState.get(BeltFunnelBlock.PUSHING)) {
|
||||
Boolean pushing = blockState.get(BeltFunnelBlock.PUSHING);
|
||||
if (!pushing) {
|
||||
// Belts handle insertion from their side
|
||||
if (AllBlocks.BELT.has(world.getBlockState(pos.down())))
|
||||
return;
|
||||
|
@ -138,14 +89,12 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
if (!inputBehaviour.canInsertFromSide(facing))
|
||||
return;
|
||||
|
||||
extracting.setCallback(stack -> {
|
||||
ItemStack stack = invManipulation.extract(-1, s -> inputBehaviour.handleInsertion(s, facing, true)
|
||||
.isEmpty());
|
||||
if (stack.isEmpty())
|
||||
return;
|
||||
flap(false);
|
||||
inputBehaviour.handleInsertion(stack, facing, false);
|
||||
});
|
||||
|
||||
extracting.withAdditionalFilter(stack -> inputBehaviour.handleInsertion(stack, facing, true)
|
||||
.isEmpty());
|
||||
extracting.extract();
|
||||
}
|
||||
|
||||
private TransportedResult collectFromHandler(TransportedItemStack stack) {
|
||||
|
@ -153,7 +102,7 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
ItemStack toInsert = stack.stack.copy();
|
||||
if (!filtering.test(toInsert))
|
||||
return ignore;
|
||||
ItemStack remainder = inserting.insert(toInsert, false);
|
||||
ItemStack remainder = invManipulation.insert(toInsert);
|
||||
if (remainder.equals(stack.stack, false))
|
||||
return ignore;
|
||||
|
||||
|
@ -168,26 +117,19 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
Supplier<List<Pair<BlockPos, Direction>>> direction =
|
||||
Attachments.toward(() -> FunnelBlock.getFunnelFacing(getBlockState())
|
||||
.getOpposite());
|
||||
|
||||
inserting = new InsertingBehaviour(this, direction);
|
||||
extracting = new ExtractingBehaviour(this, direction);
|
||||
behaviours.add(inserting);
|
||||
behaviours.add(extracting);
|
||||
invManipulation = new InvManipulationBehaviour(this, InterfaceProvider.oppositeOfBlockFacing());
|
||||
behaviours.add(invManipulation);
|
||||
|
||||
filtering = new FilteringBehaviour(this, new FunnelFilterSlotPositioning()).showCountWhen(() -> {
|
||||
BlockState blockState = getBlockState();
|
||||
return blockState.getBlock() instanceof HorizontalInteractionFunnelBlock
|
||||
&& blockState.get(HorizontalInteractionFunnelBlock.PUSHING) || determineCurrentMode() == Mode.CHUTE_END;
|
||||
&& blockState.get(HorizontalInteractionFunnelBlock.PUSHING);
|
||||
});
|
||||
filtering.onlyActiveWhen(this::supportsFiltering);
|
||||
behaviours.add(filtering);
|
||||
|
||||
beltInputBehaviour = new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput)
|
||||
.setInsertionHandler(this::handleDirectBeltInput);
|
||||
behaviours.add(beltInputBehaviour);
|
||||
behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput)
|
||||
.setInsertionHandler(this::handleDirectBeltInput));
|
||||
}
|
||||
|
||||
private boolean supportsDirectBeltInput(Direction side) {
|
||||
|
@ -207,7 +149,9 @@ public class FunnelTileEntity extends SmartTileEntity {
|
|||
return inserted;
|
||||
if (determineCurrentMode() == Mode.PAUSED)
|
||||
return inserted;
|
||||
return inserting.insert(inserted, simulate);
|
||||
if (simulate)
|
||||
invManipulation.simulate();
|
||||
return invManipulation.insert(inserted);
|
||||
}
|
||||
|
||||
public void flap(boolean inward) {
|
||||
|
|
|
@ -14,7 +14,7 @@ import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
|
|||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
|
@ -336,7 +336,7 @@ public abstract class ArmInteractionPoint {
|
|||
@Override
|
||||
ItemStack insert(World world, ItemStack stack, boolean simulate) {
|
||||
FilteringBehaviour filtering = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE);
|
||||
InsertingBehaviour inserter = TileEntityBehaviour.get(world, pos, InsertingBehaviour.TYPE);
|
||||
InvManipulationBehaviour inserter = TileEntityBehaviour.get(world, pos, InvManipulationBehaviour.TYPE);
|
||||
BlockState state = world.getBlockState(pos);
|
||||
if (state.has(BlockStateProperties.POWERED) && state.get(BlockStateProperties.POWERED))
|
||||
return stack;
|
||||
|
@ -344,7 +344,9 @@ public abstract class ArmInteractionPoint {
|
|||
return stack;
|
||||
if (filtering != null && !filtering.test(stack))
|
||||
return stack;
|
||||
return inserter.insert(stack, simulate);
|
||||
if (simulate)
|
||||
inserter.simulate();
|
||||
return inserter.insert(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.packager;
|
||||
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.HorizontalAxisKineticBlock;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
|
||||
public class PackagerBlock extends HorizontalAxisKineticBlock {
|
||||
|
||||
public PackagerBlock(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.PACKAGER.create();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.packager;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||
|
||||
public class PackagerRenderer extends KineticTileEntityRenderer {
|
||||
|
||||
public PackagerRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||
super(dispatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||
int light, int overlay) {
|
||||
super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
|
||||
AllBlockPartials.PACKAGER_SEALER.renderOn(te.getBlockState())
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
||||
return shaft(te.getBlockState()
|
||||
.get(PackagerBlock.HORIZONTAL_AXIS));
|
||||
}
|
||||
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.packager;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
|
||||
public class PackagerTileEntity extends KineticTileEntity {
|
||||
|
||||
public PackagerTileEntity(TileEntityType<?> typeIn) {
|
||||
super(typeIn);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.transposer;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
|
||||
public class LinkedTransposerBlock extends TransposerBlock {
|
||||
|
||||
public LinkedTransposerBlock(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getVerticalDefaultState() {
|
||||
return AllBlocks.VERTICAL_LINKED_TRANSPOSER.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getHorizontalDefaultState() {
|
||||
return AllBlocks.LINKED_TRANSPOSER.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.LINKED_TRANSPOSER.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean reactsToRedstone() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class Vertical extends LinkedTransposerBlock {
|
||||
public Vertical(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVertical() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.transposer;
|
||||
|
||||
import static net.minecraft.state.properties.BlockStateProperties.POWERED;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.content.logistics.block.extractor.ExtractorSlots;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkBehaviour;
|
||||
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
|
||||
public class LinkedTransposerTileEntity extends TransposerTileEntity {
|
||||
|
||||
public boolean receivedSignal;
|
||||
public LinkBehaviour receiver;
|
||||
|
||||
public LinkedTransposerTileEntity(TileEntityType<? extends LinkedTransposerTileEntity> type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
Pair<ValueBoxTransform, ValueBoxTransform> slots = ValueBoxTransform.Dual.makeSlots(ExtractorSlots.Link::new);
|
||||
receiver = LinkBehaviour.receiver(this, slots, this::setSignal);
|
||||
behaviours.add(receiver);
|
||||
super.addBehaviours(behaviours);
|
||||
}
|
||||
|
||||
public void setSignal(int powered) {
|
||||
receivedSignal = powered > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (world.isRemote)
|
||||
return;
|
||||
if (receivedSignal != getBlockState().get(POWERED)) {
|
||||
world.setBlockState(pos, getBlockState().cycle(POWERED));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,145 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.transposer;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
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 TransposerBlock extends BeltAttachableLogisticalBlock {
|
||||
|
||||
public static BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||
|
||||
public TransposerBlock(Properties properties) {
|
||||
super(properties);
|
||||
setDefaultState(getDefaultState().with(POWERED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.TRANSPOSER.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
super.fillStateContainer(builder.add(POWERED));
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||
return AllShapes.TRANSPOSER.get(getBlockFacing(state));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVertical() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getVerticalDefaultState() {
|
||||
return AllBlocks.VERTICAL_TRANSPOSER.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState getHorizontalDefaultState() {
|
||||
return AllBlocks.TRANSPOSER.getDefaultState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
World world = context.getWorld();
|
||||
if (world.isRemote)
|
||||
return ActionResultType.SUCCESS;
|
||||
Direction blockFacing = getBlockFacing(state);
|
||||
BlockState newState = state;
|
||||
if (blockFacing.getAxis()
|
||||
.isHorizontal())
|
||||
newState = state.with(HORIZONTAL_FACING, blockFacing.getOpposite());
|
||||
else
|
||||
newState = state.cycle(UPWARD);
|
||||
BlockPos pos = context.getPos();
|
||||
world.setBlockState(pos, newState);
|
||||
TileEntity te = world.getTileEntity(pos);
|
||||
if (te instanceof TransposerTileEntity) {
|
||||
TransposerTileEntity transposer = (TransposerTileEntity) te;
|
||||
CompoundNBT compound = new CompoundNBT();
|
||||
transposer.write(compound);
|
||||
world.removeTileEntity(pos);
|
||||
world.setTileEntity(pos, TileEntity.create(compound));
|
||||
}
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||
BlockState stateForPlacement = super.getStateForPlacement(context);
|
||||
return stateForPlacement.with(POWERED, Boolean.valueOf(context.getWorld()
|
||||
.isBlockPowered(context.getPos())));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||
boolean isMoving) {
|
||||
if (worldIn.isRemote)
|
||||
return;
|
||||
|
||||
Direction blockFacing = getBlockFacing(state);
|
||||
if (fromPos.equals(pos.offset(blockFacing)) || fromPos.equals(pos.offset(blockFacing.getOpposite()))) {
|
||||
if (!isValidPosition(state, worldIn, pos)) {
|
||||
worldIn.destroyBlock(pos, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!reactsToRedstone())
|
||||
return;
|
||||
|
||||
boolean previouslyPowered = state.get(POWERED);
|
||||
if (previouslyPowered != worldIn.isBlockPowered(pos)) {
|
||||
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean reactsToRedstone() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static class Vertical extends TransposerBlock {
|
||||
public Vertical(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isVertical() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,97 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.transposer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock;
|
||||
import com.simibubi.create.content.logistics.block.extractor.ExtractorTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class TransposerTileEntity extends ExtractorTileEntity {
|
||||
|
||||
private InsertingBehaviour inserting;
|
||||
|
||||
public TransposerTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
super(tileEntityTypeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
inserting = new InsertingBehaviour(this,
|
||||
Attachments.toward(() -> AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite()));
|
||||
behaviours.add(inserting);
|
||||
applyFilteringCallbacks();
|
||||
}
|
||||
|
||||
public void applyFilteringCallbacks() {
|
||||
extracting.withAmountThreshold(this::amountToExtract).withAdditionalFilter(this::shouldExtract);
|
||||
}
|
||||
|
||||
public void filterChanged(ItemStack stack) {
|
||||
}
|
||||
|
||||
public int amountToExtract(ItemStack stack) {
|
||||
ItemStack tester = stack.copy();
|
||||
tester.setCount(64);
|
||||
return 64 - inserting.insert(tester, true).getCount();
|
||||
}
|
||||
|
||||
public boolean shouldExtract(ItemStack stack) {
|
||||
if (isTargetingBelt()) {
|
||||
Direction facing = AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite();
|
||||
BlockPos targetPos = pos.offset(facing);
|
||||
BeltTileEntity te = (BeltTileEntity) world.getTileEntity(targetPos);
|
||||
return te.tryInsertingFromSide(facing, stack, true);
|
||||
}
|
||||
|
||||
if (filtering.anyAmount())
|
||||
return true;
|
||||
return inserting.insert(stack, true).isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isTargetingBelt() {
|
||||
BlockPos targetPos = pos.offset(AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite());
|
||||
if (!AllBlocks.BELT.has(world.getBlockState(targetPos)))
|
||||
return false;
|
||||
TileEntity te = world.getTileEntity(targetPos);
|
||||
if (te == null || !(te instanceof BeltTileEntity))
|
||||
return false;
|
||||
return ((KineticTileEntity) te).getSpeed() != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canExtract() {
|
||||
return inserting.getInventory() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExtract(ItemStack stack) {
|
||||
if (isTargetingBelt()) {
|
||||
Direction facing = AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite();
|
||||
BlockPos targetPos = pos.offset(facing);
|
||||
BeltTileEntity te = (BeltTileEntity) world.getTileEntity(targetPos);
|
||||
if (te.tryInsertingFromSide(facing, stack, false))
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack remainder = inserting.insert(stack, false);
|
||||
if (!remainder.isEmpty())
|
||||
remainder = ItemHandlerHelper.insertItemStacked(extracting.getInventory(), remainder, false);
|
||||
if (!remainder.isEmpty())
|
||||
super.onExtract(remainder);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
package com.simibubi.create.content.logistics.block.transposer;
|
||||
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
||||
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraftforge.client.model.generators.ModelFile;
|
||||
|
||||
public class VerticalTransposerGenerator extends SpecialBlockStateGen {
|
||||
|
||||
private boolean linked;
|
||||
|
||||
public VerticalTransposerGenerator(boolean linked) {
|
||||
this.linked = linked;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getXRotation(BlockState state) {
|
||||
return state.get(TransposerBlock.Vertical.UPWARD) ? 270 : 90;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getYRotation(BlockState state) {
|
||||
return (state.get(TransposerBlock.Vertical.UPWARD) ? 180 : 0)
|
||||
+ horizontalAngle(state.get(TransposerBlock.Vertical.HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
|
||||
BlockState state) {
|
||||
return AssetLookup.forPowered(ctx, prov, "transposer/" + (linked ? "vertical_linked" : "block"))
|
||||
.apply(state);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,121 @@
|
|||
package com.simibubi.create.foundation.item;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SyncedTileEntity;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraftforge.common.util.INBTSerializable;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||
|
||||
public class SmartInventory extends RecipeWrapper implements IItemHandlerModifiable, INBTSerializable<CompoundNBT> {
|
||||
|
||||
private boolean extractionAllowed;
|
||||
private boolean insertionAllowed;
|
||||
private int stackSize;
|
||||
|
||||
public SmartInventory(int slots, SyncedTileEntity te) {
|
||||
super(new SyncedStackHandler(slots, te));
|
||||
insertionAllowed = true;
|
||||
extractionAllowed = true;
|
||||
stackSize = 64;
|
||||
}
|
||||
|
||||
public SmartInventory allowInsertion() {
|
||||
insertionAllowed = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SmartInventory allowExtraction() {
|
||||
extractionAllowed = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SmartInventory forbidInsertion() {
|
||||
insertionAllowed = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SmartInventory forbidExtraction() {
|
||||
extractionAllowed = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SmartInventory withMaxStackSize(int stackSize) {
|
||||
this.stackSize = stackSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlots() {
|
||||
return inv.getSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
||||
if (!insertionAllowed)
|
||||
return stack;
|
||||
return inv.insertItem(slot, stack, simulate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
||||
if (!extractionAllowed)
|
||||
return ItemStack.EMPTY;
|
||||
return inv.extractItem(slot, amount, simulate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlotLimit(int slot) {
|
||||
return Math.min(inv.getSlotLimit(slot), stackSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(int slot, ItemStack stack) {
|
||||
return inv.isItemValid(slot, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStackInSlot(int slot, ItemStack stack) {
|
||||
inv.setStackInSlot(slot, stack);
|
||||
}
|
||||
|
||||
public int getStackLimit(int slot, @Nonnull ItemStack stack) {
|
||||
return Math.min(getSlotLimit(slot), stack.getMaxStackSize());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundNBT serializeNBT() {
|
||||
return getInv().serializeNBT();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserializeNBT(CompoundNBT nbt) {
|
||||
getInv().deserializeNBT(nbt);
|
||||
}
|
||||
|
||||
private SyncedStackHandler getInv() {
|
||||
return (SyncedStackHandler) inv;
|
||||
}
|
||||
|
||||
private static class SyncedStackHandler extends ItemStackHandler {
|
||||
|
||||
private SyncedTileEntity te;
|
||||
|
||||
public SyncedStackHandler(int slots, SyncedTileEntity te) {
|
||||
super(slots);
|
||||
this.te = te;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onContentsChanged(int slot) {
|
||||
super.onContentsChanged(slot);
|
||||
te.notifyUpdate();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -55,4 +55,9 @@ public abstract class SyncedTileEntity extends TileEntity {
|
|||
return write(tag);
|
||||
}
|
||||
|
||||
public void notifyUpdate() {
|
||||
markDirty();
|
||||
sendData();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
package com.simibubi.create.foundation.tileEntity.behaviour.inventory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public class AutoExtractingBehaviour extends ExtractingBehaviour {
|
||||
|
||||
public static BehaviourType<AutoExtractingBehaviour> TYPE = new BehaviourType<>();
|
||||
|
||||
private int delay;
|
||||
private int timer;
|
||||
Supplier<Boolean> shouldExtract;
|
||||
Supplier<Boolean> shouldPause;
|
||||
private boolean ticking;
|
||||
|
||||
public AutoExtractingBehaviour(SmartTileEntity te, Supplier<List<Pair<BlockPos, Direction>>> attachments,
|
||||
Consumer<ItemStack> onExtract, int delay) {
|
||||
super(te, attachments, onExtract);
|
||||
shouldPause = () -> false;
|
||||
shouldExtract = () -> true;
|
||||
ticking = true;
|
||||
this.delay = delay;
|
||||
}
|
||||
|
||||
public AutoExtractingBehaviour pauseWhen(Supplier<Boolean> condition) {
|
||||
shouldPause = condition;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExtractingBehaviour waitUntil(Supplier<Boolean> condition) {
|
||||
this.shouldExtract = condition;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setDelay(int delay) {
|
||||
this.delay = delay;
|
||||
this.timer = delay;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean extract(int amount) {
|
||||
timer = delay;
|
||||
return super.extract(amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
if (!ticking)
|
||||
return;
|
||||
|
||||
if (getWorld().isRemote)
|
||||
return;
|
||||
|
||||
if (getShouldPause().get()) {
|
||||
timer = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (timer > 0) {
|
||||
timer--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!getShouldExtract().get())
|
||||
return;
|
||||
|
||||
extract();
|
||||
}
|
||||
|
||||
public void setTicking(boolean ticking) {
|
||||
this.ticking = ticking;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public Supplier<Boolean> getShouldExtract() {
|
||||
return shouldExtract;
|
||||
}
|
||||
|
||||
public Supplier<Boolean> getShouldPause() {
|
||||
return shouldPause;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,105 +0,0 @@
|
|||
package com.simibubi.create.foundation.tileEntity.behaviour.inventory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class ExtractingBehaviour extends InventoryManagementBehaviour {
|
||||
|
||||
public static BehaviourType<ExtractingBehaviour> TYPE = new BehaviourType<>();
|
||||
|
||||
private Function<ItemStack, Integer> customAmountFilter;
|
||||
private Predicate<ItemStack> customFilter;
|
||||
private Consumer<ItemStack> callback;
|
||||
|
||||
public ExtractingBehaviour(SmartTileEntity te, Supplier<List<Pair<BlockPos, Direction>>> attachments) {
|
||||
this(te, attachments, item -> {
|
||||
});
|
||||
}
|
||||
|
||||
public ExtractingBehaviour(SmartTileEntity te, Supplier<List<Pair<BlockPos, Direction>>> attachments,
|
||||
Consumer<ItemStack> onExtract) {
|
||||
super(te, attachments);
|
||||
customAmountFilter = stack -> 64;
|
||||
customFilter = stack -> true;
|
||||
setCallback(onExtract);
|
||||
}
|
||||
|
||||
public ExtractingBehaviour withAmountThreshold(Function<ItemStack, Integer> filter) {
|
||||
this.customAmountFilter = filter;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExtractingBehaviour withAdditionalFilter(Predicate<ItemStack> filter) {
|
||||
this.customFilter = filter;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean extract() {
|
||||
return extract(getAmountToExtract());
|
||||
}
|
||||
|
||||
public int getAmountToExtract() {
|
||||
int amount = -1;
|
||||
FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE);
|
||||
if (filter != null && !filter.anyAmount())
|
||||
amount = filter.getAmount();
|
||||
return amount;
|
||||
}
|
||||
|
||||
public boolean extract(int exactAmount) {
|
||||
if (getWorld().isRemote)
|
||||
return false;
|
||||
if (AllConfigs.SERVER.control.freezeExtractors.get())
|
||||
return false;
|
||||
|
||||
Predicate<ItemStack> test = getFilterTest();
|
||||
for (IItemHandler inv : getInventories()) {
|
||||
ItemStack extract = ItemStack.EMPTY;
|
||||
if (exactAmount != -1)
|
||||
extract = ItemHelper.extract(inv, test, exactAmount, false);
|
||||
else
|
||||
extract = ItemHelper.extract(inv, test, customAmountFilter, false);
|
||||
|
||||
if (!extract.isEmpty()) {
|
||||
callback.accept(extract);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public Predicate<ItemStack> getFilterTest() {
|
||||
Predicate<ItemStack> test = customFilter;
|
||||
FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE);
|
||||
if (filter != null)
|
||||
test = customFilter.and(filter::test);
|
||||
return test;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public void setCallback(Consumer<ItemStack> callback) {
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
package com.simibubi.create.foundation.tileEntity.behaviour.inventory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class InsertingBehaviour extends InventoryManagementBehaviour {
|
||||
|
||||
public static BehaviourType<InsertingBehaviour> TYPE = new BehaviourType<>();
|
||||
|
||||
public InsertingBehaviour(SmartTileEntity te, Supplier<List<Pair<BlockPos, Direction>>> attachments) {
|
||||
super(te, attachments);
|
||||
}
|
||||
|
||||
public ItemStack insert(ItemStack stack, boolean simulate) {
|
||||
for (IItemHandler inv : getInventories()) {
|
||||
stack = ItemHandlerHelper.insertItemStacked(inv, stack, simulate);
|
||||
if (stack.isEmpty())
|
||||
break;
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,169 @@
|
|||
package com.simibubi.create.foundation.tileEntity.behaviour.inventory;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
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.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockFace;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class InvManipulationBehaviour extends TileEntityBehaviour {
|
||||
|
||||
public static BehaviourType<InvManipulationBehaviour> TYPE = new BehaviourType<>();
|
||||
private InterfaceProvider target;
|
||||
private LazyOptional<IItemHandler> targetCapability;
|
||||
private boolean simulateNext;
|
||||
|
||||
public InvManipulationBehaviour(SmartTileEntity te, InterfaceProvider target) {
|
||||
super(te);
|
||||
setLazyTickRate(40);
|
||||
this.target = target;
|
||||
this.targetCapability = LazyOptional.empty();
|
||||
simulateNext = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Only simulate the upcoming operation
|
||||
*/
|
||||
public InvManipulationBehaviour simulate() {
|
||||
simulateNext = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean hasInventory() {
|
||||
return targetCapability.isPresent();
|
||||
}
|
||||
|
||||
public ItemStack extract() {
|
||||
return extract(getAmountFromFilter());
|
||||
}
|
||||
|
||||
public ItemStack extract(int amount) {
|
||||
return extract(amount, Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
public ItemStack extract(int amount, Predicate<ItemStack> filter) {
|
||||
return extract(amount, filter, ItemStack::getMaxStackSize);
|
||||
}
|
||||
|
||||
public ItemStack extract(int amount, Predicate<ItemStack> filter, Function<ItemStack, Integer> amountThreshold) {
|
||||
boolean shouldSimulate = simulateNext;
|
||||
simulateNext = false;
|
||||
|
||||
if (getWorld().isRemote)
|
||||
return ItemStack.EMPTY;
|
||||
if (AllConfigs.SERVER.control.freezeExtractors.get())
|
||||
return ItemStack.EMPTY;
|
||||
IItemHandler inventory = targetCapability.orElse(null);
|
||||
if (inventory == null)
|
||||
return ItemStack.EMPTY;
|
||||
|
||||
Predicate<ItemStack> test = getFilterTest(filter);
|
||||
ItemStack extract = ItemStack.EMPTY;
|
||||
if (amount != -1)
|
||||
extract = ItemHelper.extract(inventory, test, amount, shouldSimulate);
|
||||
else
|
||||
extract = ItemHelper.extract(inventory, test, amountThreshold, shouldSimulate);
|
||||
return extract;
|
||||
}
|
||||
|
||||
public ItemStack insert(ItemStack stack) {
|
||||
boolean shouldSimulate = simulateNext;
|
||||
simulateNext = false;
|
||||
IItemHandler inventory = targetCapability.orElse(null);
|
||||
if (inventory == null)
|
||||
return stack;
|
||||
return ItemHandlerHelper.insertItemStacked(inventory, stack, shouldSimulate);
|
||||
}
|
||||
|
||||
protected Predicate<ItemStack> getFilterTest(Predicate<ItemStack> customFilter) {
|
||||
Predicate<ItemStack> test = customFilter;
|
||||
FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE);
|
||||
if (filter != null)
|
||||
test = customFilter.and(filter::test);
|
||||
return test;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
super.initialize();
|
||||
findNewCapability();
|
||||
}
|
||||
|
||||
protected void onHandlerInvalidated(LazyOptional<IItemHandler> handler) {
|
||||
findNewCapability();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void lazyTick() {
|
||||
super.lazyTick();
|
||||
if (!targetCapability.isPresent())
|
||||
findNewCapability();
|
||||
}
|
||||
|
||||
protected int getAmountFromFilter() {
|
||||
int amount = -1;
|
||||
FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE);
|
||||
if (filter != null && !filter.anyAmount())
|
||||
amount = filter.getAmount();
|
||||
return amount;
|
||||
}
|
||||
|
||||
protected void findNewCapability() {
|
||||
BlockFace targetBlockFace = target.getTarget(getWorld(), tileEntity.getPos(), tileEntity.getBlockState())
|
||||
.getOpposite();
|
||||
BlockPos pos = targetBlockFace.getPos();
|
||||
World world = getWorld();
|
||||
|
||||
targetCapability = LazyOptional.empty();
|
||||
|
||||
if (!world.isBlockPresent(pos))
|
||||
return;
|
||||
TileEntity invTE = world.getTileEntity(pos);
|
||||
if (invTE == null)
|
||||
return;
|
||||
targetCapability =
|
||||
invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetBlockFace.getFace());
|
||||
if (targetCapability.isPresent())
|
||||
targetCapability.addListener(this::onHandlerInvalidated);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface InterfaceProvider {
|
||||
|
||||
public static InterfaceProvider towardBlockFacing() {
|
||||
return (w, p, s) -> new BlockFace(p, s.has(BlockStateProperties.FACING) ? s.get(BlockStateProperties.FACING)
|
||||
: s.get(BlockStateProperties.HORIZONTAL_FACING));
|
||||
}
|
||||
|
||||
public static InterfaceProvider oppositeOfBlockFacing() {
|
||||
return (w, p, s) -> new BlockFace(p,
|
||||
(s.has(BlockStateProperties.FACING) ? s.get(BlockStateProperties.FACING)
|
||||
: s.get(BlockStateProperties.HORIZONTAL_FACING)).getOpposite());
|
||||
}
|
||||
|
||||
public BlockFace getTarget(World world, BlockPos pos, BlockState blockState);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,111 +0,0 @@
|
|||
package com.simibubi.create.foundation.tileEntity.behaviour.inventory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public class InventoryManagementBehaviour extends TileEntityBehaviour {
|
||||
|
||||
Map<Pair<BlockPos, Direction>, LazyOptional<IItemHandler>> inventories;
|
||||
private Supplier<List<Pair<BlockPos, Direction>>> attachments;
|
||||
private List<IItemHandler> activeHandlers;
|
||||
|
||||
public static BehaviourType<InventoryManagementBehaviour> TYPE = new BehaviourType<>();
|
||||
|
||||
public InventoryManagementBehaviour(SmartTileEntity te, Supplier<List<Pair<BlockPos, Direction>>> attachments) {
|
||||
super(te);
|
||||
this.attachments = attachments;
|
||||
setLazyTickRate(20);
|
||||
activeHandlers = new ArrayList<>();
|
||||
inventories = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
super.initialize();
|
||||
attachments.get().forEach(offset -> inventories.put(offset, findInventory(offset)));
|
||||
lazyTick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void lazyTick() {
|
||||
super.lazyTick();
|
||||
activeHandlers.clear();
|
||||
for (Pair<BlockPos, Direction> pair : inventories.keySet()) {
|
||||
LazyOptional<IItemHandler> lazyOptional = inventories.get(pair);
|
||||
if (lazyOptional.isPresent()) {
|
||||
activeHandlers.add(lazyOptional.orElse(null));
|
||||
continue;
|
||||
}
|
||||
|
||||
lazyOptional = findInventory(pair);
|
||||
if (lazyOptional.isPresent())
|
||||
activeHandlers.add(lazyOptional.orElse(null));
|
||||
inventories.put(pair, lazyOptional);
|
||||
}
|
||||
}
|
||||
|
||||
public List<IItemHandler> getInventories() {
|
||||
return activeHandlers;
|
||||
}
|
||||
|
||||
public IItemHandler getInventory() {
|
||||
if (activeHandlers.isEmpty())
|
||||
return null;
|
||||
return activeHandlers.get(0);
|
||||
}
|
||||
|
||||
protected LazyOptional<IItemHandler> findInventory(Pair<BlockPos, Direction> offset) {
|
||||
BlockPos invPos = tileEntity.getPos().add(offset.getKey());
|
||||
World world = getWorld();
|
||||
|
||||
if (!world.isBlockPresent(invPos))
|
||||
return LazyOptional.empty();
|
||||
BlockState invState = world.getBlockState(invPos);
|
||||
|
||||
if (!invState.hasTileEntity())
|
||||
return LazyOptional.empty();
|
||||
TileEntity invTE = world.getTileEntity(invPos);
|
||||
if (invTE == null)
|
||||
return LazyOptional.empty();
|
||||
|
||||
LazyOptional<IItemHandler> inventory = invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY,
|
||||
offset.getValue());
|
||||
if (inventory == null) {
|
||||
return LazyOptional.empty();
|
||||
}
|
||||
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public static class Attachments {
|
||||
public static final Supplier<List<Pair<BlockPos, Direction>>> toward(Supplier<Direction> facing) {
|
||||
return () -> ImmutableList
|
||||
.of(Pair.of(new BlockPos(facing.get().getDirectionVec()), facing.get().getOpposite()));
|
||||
};
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue