merge recent progress to 1.16

This commit is contained in:
grimmauld 2020-11-14 15:22:32 +01:00
commit 9ea09aef4c
94 changed files with 2899 additions and 698 deletions

View file

@ -5,7 +5,7 @@ f0d6baaabda94151134f569246d61a6e710c35a9 assets/create/blockstates/acacia_window
79c50afcea3a360783a5b3c73de9823511e9aed9 assets/create/blockstates/adjustable_pulse_repeater.json
1d730df54c9eae94063e37396d224fb3c87517e0 assets/create/blockstates/adjustable_repeater.json
9dd79bf5430f674e7d3e3fc7d59edee3d66e241e assets/create/blockstates/analog_lever.json
0a172dea0746027be3676e87271615f1307245a6 assets/create/blockstates/andesite_belt_funnel.json
dd468657a73fc2ad6e1ac08ace2996b6997d33e0 assets/create/blockstates/andesite_belt_funnel.json
585481e97c5066af63ea12fa5dd658798844d64c assets/create/blockstates/andesite_bricks.json
4e8d61aa2c8490301317ef747f67f0169ebfc2ed assets/create/blockstates/andesite_bricks_slab.json
da63a8be3191d6d72afef6c79e3aea3f607631f9 assets/create/blockstates/andesite_bricks_stairs.json
@ -29,7 +29,7 @@ a71ddf3291bd13d7877f2fe32c42f50407f99afb assets/create/blockstates/black_valve_h
ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json
4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json
9d7341a5cae5d47788c595167946dfb6441cebd1 assets/create/blockstates/blue_valve_handle.json
fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets/create/blockstates/brass_belt_funnel.json
ee1299a15fca849eb42bf81507f85a54c167bbfe assets/create/blockstates/brass_belt_funnel.json
8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json
b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json
3057e1121117c0cd651c288cd8e2d46bdf64afb1 assets/create/blockstates/brass_funnel.json
@ -137,7 +137,7 @@ fc652317e03b57c76e23a805da16a28d15254029 assets/create/blockstates/fancy_scoria_
fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json
b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json
8e532856c3c2b4e4e59c65a2a81a694e35d14658 assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json
5ba9fc9e7b29c76040329367cfb45affdd473404 assets/create/blockstates/fluid_pipe.json
3d97226b5e8d8f70ed08e45e78db1faf78d5e28b assets/create/blockstates/fluid_pipe.json
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
@ -210,6 +210,7 @@ e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bri
10513d55f7c621162a13d474d8f4eb54305d0f60 assets/create/blockstates/limestone_cobblestone_wall.json
b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pillar.json
69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json
07bae932a163b81f8749f98287b4fb4949fe0b8b assets/create/blockstates/lit_blaze_burner.json
85a58ac539775f90903d9ce66374f3f2ffd4fecf assets/create/blockstates/magenta_sail.json
84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json
3bfce5016e5c929b74368dc2d734e62ae34587a4 assets/create/blockstates/magenta_valve_handle.json
@ -329,7 +330,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
d2e6f19325be65457e94bea44fd52863c0f66be7 assets/create/blockstates/radial_chassis.json
143d66a7262ccd29f36784d6b064d4a13ba374b6 assets/create/blockstates/radial_chassis.json
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
@ -391,17 +392,17 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
be82e2e68c74c572e72979a6d4a5ec5e571931e2 assets/create/lang/en_ud.json
b953a264ec3044b955431fb988c0bafcb9b57388 assets/create/lang/en_us.json
97fe71d544f1bc7552e6c9d1f328ae02cb1a1947 assets/create/lang/unfinished/de_de.json
052819c4d2177bfc5cee9675300866d724f4b63f assets/create/lang/unfinished/fr_fr.json
67d67f305c83e021e2ae37e03b9bf4aa2661bc87 assets/create/lang/unfinished/it_it.json
b0e3fc5a71b5127b832e38daece78ca9db9ce303 assets/create/lang/unfinished/ja_jp.json
610f399864dfa9d7fd258570853f7d577c5aee31 assets/create/lang/unfinished/ko_kr.json
12215221adcb015c5c74dbfe5affa920cd570580 assets/create/lang/unfinished/nl_nl.json
ead7216188692e96fb060b35213f1ef6b0682e87 assets/create/lang/unfinished/pt_br.json
e9d95034f9b33eb8e41792740ed2d8c488af6676 assets/create/lang/unfinished/ru_ru.json
32a2c4af9a5247f3bc7a5c2f502376e1e580d8bc assets/create/lang/unfinished/zh_cn.json
69f3eb168fafdc42a2cba5c5821eeb87dbcdbce7 assets/create/lang/en_ud.json
83a8328bc741c1414536cda04dd9851c6b62fafe assets/create/lang/en_us.json
30e9741d978aa10141b4173ee805ff73306479c7 assets/create/lang/unfinished/de_de.json
1179406deedf240244a3f1d2c46c5f50c5fd9d28 assets/create/lang/unfinished/fr_fr.json
c78ed168a8891e4b8689f7040d75b69886ec8624 assets/create/lang/unfinished/it_it.json
859806f0d375938e07db1bb64abddade04f3d54b assets/create/lang/unfinished/ja_jp.json
5cb7908df97c2080dd393a22da71409881cc2ae4 assets/create/lang/unfinished/ko_kr.json
87b31c690863eb570b90d83f612af0dd0069c0b0 assets/create/lang/unfinished/nl_nl.json
71aaab91d665a02decbb2230698311b34e3b6936 assets/create/lang/unfinished/pt_br.json
e88e4e5ad08f7b49ee08d5715d02eba1886b5bb0 assets/create/lang/unfinished/ru_ru.json
55655931d8773aab371710fb30b075005a8f34db assets/create/lang/unfinished/zh_cn.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
@ -424,14 +425,14 @@ fde9ff3520cd7d2cc2926cf95cad8c7ec5bdcae9 assets/create/models/block/adjustable_p
ce5e0cd1598cf2228bb77a68c304dd210f3848f8 assets/create/models/block/adjustable_repeater_powered.json
b62a75c96400bf75287091ce324727f00754bf31 assets/create/models/block/adjustable_repeater_powered_powering.json
ea279b9b1a2d1eab8a69e5e35627ada170013b89 assets/create/models/block/adjustable_repeater_powering.json
bd552b6d51736cf04a7fb215585d7d7111b918f7 assets/create/models/block/andesite_belt_funnel_pull_extended.json
904e7f37e843a6a803bec41f5296bfa27dc490f2 assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json
27340414ae404c55fe10d35fb47c677070acb440 assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json
2c4c06839846545ef6352fd099cf8c9b7b37f266 assets/create/models/block/andesite_belt_funnel_pull_retracted.json
82f0aec90405c6fd55640af7ff838e1bb0df19ec assets/create/models/block/andesite_belt_funnel_push_extended.json
04af9301845d528abe5814af8a8e76accafddabd assets/create/models/block/andesite_belt_funnel_push_powered_extended.json
f266353d3116e5e87dc91f446d00cf74c15e89c8 assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json
fc615c44a852238de92162b08034c29701f45430 assets/create/models/block/andesite_belt_funnel_push_retracted.json
10832d276445d8a5f94413de1979349db1364ec4 assets/create/models/block/andesite_belt_funnel__extended.json
d01611179d3ed6c013f4f649127239772cbdeba3 assets/create/models/block/andesite_belt_funnel__powered_extended.json
ed52e27fd7d645c25dc9dc58a44f29be12cb6d5e assets/create/models/block/andesite_belt_funnel__powered_pulling.json
3c8ed64100de95994580a8e6e24c7b72f2332081 assets/create/models/block/andesite_belt_funnel__powered_pushing.json
240230f29d092505d47c83ae59f5c908e4bf4932 assets/create/models/block/andesite_belt_funnel__powered_retracted.json
c862af2b37ccfd0123e9e96a5400be82033bbdd3 assets/create/models/block/andesite_belt_funnel__pulling.json
884aaf754de0bfd51690aab6e01f775419728cf7 assets/create/models/block/andesite_belt_funnel__pushing.json
7b1888eec72c04677a3dfb709b04ad10d08d74d0 assets/create/models/block/andesite_belt_funnel__retracted.json
de448acc19ddd984f2599ce9ce5bf9489235fdc9 assets/create/models/block/andesite_bricks.json
3d285d395c45662a0ffe89c0259f519285cae899 assets/create/models/block/andesite_bricks_slab.json
6eecf3e3d3f184aa69d224bbb3b82b5164a8726b assets/create/models/block/andesite_bricks_slab_top.json
@ -483,14 +484,14 @@ c86a455b8e85ef190261718726b344cf15ba1e4f assets/create/models/block/bracket/shaf
8fa9ce896412af894d7c431a50104445d91b1d4d assets/create/models/block/bracket/shaft/ground_wooden.json
3956168840aca9425d3bf240650406c1dbc8ea66 assets/create/models/block/bracket/shaft/wall_metal.json
7aaa2fbdb618e8aab7e0da19a5393e1eaa608623 assets/create/models/block/bracket/shaft/wall_wooden.json
24dff9a8d22c9a88286d2b7d08384ac9f281a512 assets/create/models/block/brass_belt_funnel_pull_extended.json
c9c5f53c9d4f6cf6f509452e91cab1ba5b57f807 assets/create/models/block/brass_belt_funnel_pull_powered_extended.json
addcf821a2348c0985bf9a72229355cfab818069 assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json
332c7b8bf2feb635290b05788b61ead0b2cc813a assets/create/models/block/brass_belt_funnel_pull_retracted.json
094a5aedd53295aaa9b78deedf7899f9875dc5d8 assets/create/models/block/brass_belt_funnel_push_extended.json
44d2cf63398e5e4c39f43412a00d7f0213d8703c assets/create/models/block/brass_belt_funnel_push_powered_extended.json
07eb19291e5c6108e9e25f57f512747bc48352dd assets/create/models/block/brass_belt_funnel_push_powered_retracted.json
6ff63956c71363f198588aca3fd849ad4e0c8863 assets/create/models/block/brass_belt_funnel_push_retracted.json
3fac6b1da6a81fc44a1ffe1e13dc6cfe37c3b738 assets/create/models/block/brass_belt_funnel__extended.json
2d10825bfd94419d5dbb4e60187127c4a1ce1526 assets/create/models/block/brass_belt_funnel__powered_extended.json
5ff7e01c5b65eb210a054556068d75426b547d9b assets/create/models/block/brass_belt_funnel__powered_pulling.json
e981727fd71e32ea2ecb8e057dfe123f1b940101 assets/create/models/block/brass_belt_funnel__powered_pushing.json
bc23a91f300e46761bb14c597fad39c3d414e84d assets/create/models/block/brass_belt_funnel__powered_retracted.json
dfc6250e28e12ff193a45891978ec50c406fc0c2 assets/create/models/block/brass_belt_funnel__pulling.json
5409325494780afe32e6e30377314e2992ca4aa5 assets/create/models/block/brass_belt_funnel__pushing.json
97410a12b7c1461f88fb633f26ff566a0636b627 assets/create/models/block/brass_belt_funnel__retracted.json
2b1ca994d2feec8321fdb0388028c20d40326eb7 assets/create/models/block/brass_block.json
2e67c147d7c69aabd9ab9f7aa80f60671d5a03aa assets/create/models/block/brass_casing.json
838e7ab4c0c9d89eacfa078daf64995e505db896 assets/create/models/block/brass_funnel.json
@ -2393,6 +2394,7 @@ 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
4005c244387ea824202c4c7cd44403e537d9766b data/create/loot_tables/blocks/lit_blaze_burner.json
28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/magenta_sail.json
9e5e017cd3b4f544f487a5ca22ef610a4addc8ec data/create/loot_tables/blocks/magenta_seat.json
517e983d7387ec0d86845d4cf3deaa6d68c71170 data/create/loot_tables/blocks/magenta_valve_handle.json
@ -2804,7 +2806,7 @@ d73a0ed13112e001dad61d6ea66fd729c86e7b62 data/create/recipes/crushing/nether_qua
70116a5a9d1f93ae377e1526ca99582190cf2e3e data/create/recipes/crushing/nether_wart_block_quark.json
0dfe5092af96fbaeddaace6d3b1c45fa6f4cf7fe data/create/recipes/crushing/netherrack.json
71397f0ae2e175181195b8b2894d108e0cdc3da7 data/create/recipes/crushing/obsidian.json
88d7ab3d6407010876e328f5f20a4ed9ddda7e3e data/create/recipes/crushing/prismarine_crystals.json
0185e8d17cc17b0ac822169f4b2968d95468b4a2 data/create/recipes/crushing/prismarine_crystals.json
42299b3a0596c7743404496205854ac2324aedd7 data/create/recipes/crushing/redstone_ore.json
94589aa3171fcfda8eed76000d53a36ea6fd7e53 data/create/recipes/crushing/sand.json
dc4cf8b759f5eeee0ccfa6aaad204fbeea487b7f data/create/recipes/crushing/wool.json
@ -3303,8 +3305,8 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone
6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json
11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json
f9ecec40e11a87de73c9dc7c2963c1cb10b1a180 data/create/tags/blocks/brittle.json
246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json
551299f2f784435859bef13057c2b033eaefc784 data/create/tags/blocks/fan_transparent.json
13b55d6e905a02403d2e95e9ba2357f99c5f2241 data/create/tags/blocks/fan_heaters.json
3bc64e3a1e7980237435b1770a9ba2102d57fcd4 data/create/tags/blocks/fan_transparent.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/create/tags/blocks/non_movable.json
c9ac7e3e5ec18554e7184168d65e9b8e44ef5610 data/create/tags/blocks/sails.json
6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json

View file

@ -1,123 +1,123 @@
{
"variants": {
"facing=north,powered=false,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_retracted"
"facing=north,powered=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel__retracted"
},
"facing=south,powered=false,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_retracted",
"facing=south,powered=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel__retracted",
"y": 180
},
"facing=west,powered=false,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_retracted",
"facing=west,powered=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel__retracted",
"y": 270
},
"facing=east,powered=false,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_retracted",
"facing=east,powered=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel__retracted",
"y": 90
},
"facing=north,powered=true,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_powered_retracted"
"facing=north,powered=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel__powered_retracted"
},
"facing=south,powered=true,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_powered_retracted",
"facing=south,powered=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel__powered_retracted",
"y": 180
},
"facing=west,powered=true,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_powered_retracted",
"facing=west,powered=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel__powered_retracted",
"y": 270
},
"facing=east,powered=true,pushing=false,shape=retracted": {
"model": "create:block/andesite_belt_funnel_pull_powered_retracted",
"facing=east,powered=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel__powered_retracted",
"y": 90
},
"facing=north,powered=false,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_retracted"
"facing=north,powered=false,shape=extended": {
"model": "create:block/andesite_belt_funnel__extended"
},
"facing=south,powered=false,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_retracted",
"facing=south,powered=false,shape=extended": {
"model": "create:block/andesite_belt_funnel__extended",
"y": 180
},
"facing=west,powered=false,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_retracted",
"facing=west,powered=false,shape=extended": {
"model": "create:block/andesite_belt_funnel__extended",
"y": 270
},
"facing=east,powered=false,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_retracted",
"facing=east,powered=false,shape=extended": {
"model": "create:block/andesite_belt_funnel__extended",
"y": 90
},
"facing=north,powered=true,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_powered_retracted"
"facing=north,powered=true,shape=extended": {
"model": "create:block/andesite_belt_funnel__powered_extended"
},
"facing=south,powered=true,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_powered_retracted",
"facing=south,powered=true,shape=extended": {
"model": "create:block/andesite_belt_funnel__powered_extended",
"y": 180
},
"facing=west,powered=true,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_powered_retracted",
"facing=west,powered=true,shape=extended": {
"model": "create:block/andesite_belt_funnel__powered_extended",
"y": 270
},
"facing=east,powered=true,pushing=true,shape=retracted": {
"model": "create:block/andesite_belt_funnel_push_powered_retracted",
"facing=east,powered=true,shape=extended": {
"model": "create:block/andesite_belt_funnel__powered_extended",
"y": 90
},
"facing=north,powered=false,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_extended"
"facing=north,powered=false,shape=pushing": {
"model": "create:block/andesite_belt_funnel__pushing"
},
"facing=south,powered=false,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_extended",
"facing=south,powered=false,shape=pushing": {
"model": "create:block/andesite_belt_funnel__pushing",
"y": 180
},
"facing=west,powered=false,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_extended",
"facing=west,powered=false,shape=pushing": {
"model": "create:block/andesite_belt_funnel__pushing",
"y": 270
},
"facing=east,powered=false,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_extended",
"facing=east,powered=false,shape=pushing": {
"model": "create:block/andesite_belt_funnel__pushing",
"y": 90
},
"facing=north,powered=true,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_powered_extended"
"facing=north,powered=true,shape=pushing": {
"model": "create:block/andesite_belt_funnel__powered_pushing"
},
"facing=south,powered=true,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_powered_extended",
"facing=south,powered=true,shape=pushing": {
"model": "create:block/andesite_belt_funnel__powered_pushing",
"y": 180
},
"facing=west,powered=true,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_powered_extended",
"facing=west,powered=true,shape=pushing": {
"model": "create:block/andesite_belt_funnel__powered_pushing",
"y": 270
},
"facing=east,powered=true,pushing=false,shape=extended": {
"model": "create:block/andesite_belt_funnel_pull_powered_extended",
"facing=east,powered=true,shape=pushing": {
"model": "create:block/andesite_belt_funnel__powered_pushing",
"y": 90
},
"facing=north,powered=false,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_extended"
"facing=north,powered=false,shape=pulling": {
"model": "create:block/andesite_belt_funnel__pulling"
},
"facing=south,powered=false,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_extended",
"facing=south,powered=false,shape=pulling": {
"model": "create:block/andesite_belt_funnel__pulling",
"y": 180
},
"facing=west,powered=false,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_extended",
"facing=west,powered=false,shape=pulling": {
"model": "create:block/andesite_belt_funnel__pulling",
"y": 270
},
"facing=east,powered=false,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_extended",
"facing=east,powered=false,shape=pulling": {
"model": "create:block/andesite_belt_funnel__pulling",
"y": 90
},
"facing=north,powered=true,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_powered_extended"
"facing=north,powered=true,shape=pulling": {
"model": "create:block/andesite_belt_funnel__powered_pulling"
},
"facing=south,powered=true,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_powered_extended",
"facing=south,powered=true,shape=pulling": {
"model": "create:block/andesite_belt_funnel__powered_pulling",
"y": 180
},
"facing=west,powered=true,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_powered_extended",
"facing=west,powered=true,shape=pulling": {
"model": "create:block/andesite_belt_funnel__powered_pulling",
"y": 270
},
"facing=east,powered=true,pushing=true,shape=extended": {
"model": "create:block/andesite_belt_funnel_push_powered_extended",
"facing=east,powered=true,shape=pulling": {
"model": "create:block/andesite_belt_funnel__powered_pulling",
"y": 90
}
}

View file

@ -1,123 +1,123 @@
{
"variants": {
"facing=north,powered=false,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_retracted"
"facing=north,powered=false,shape=retracted": {
"model": "create:block/brass_belt_funnel__retracted"
},
"facing=south,powered=false,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_retracted",
"facing=south,powered=false,shape=retracted": {
"model": "create:block/brass_belt_funnel__retracted",
"y": 180
},
"facing=west,powered=false,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_retracted",
"facing=west,powered=false,shape=retracted": {
"model": "create:block/brass_belt_funnel__retracted",
"y": 270
},
"facing=east,powered=false,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_retracted",
"facing=east,powered=false,shape=retracted": {
"model": "create:block/brass_belt_funnel__retracted",
"y": 90
},
"facing=north,powered=true,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_powered_retracted"
"facing=north,powered=true,shape=retracted": {
"model": "create:block/brass_belt_funnel__powered_retracted"
},
"facing=south,powered=true,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_powered_retracted",
"facing=south,powered=true,shape=retracted": {
"model": "create:block/brass_belt_funnel__powered_retracted",
"y": 180
},
"facing=west,powered=true,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_powered_retracted",
"facing=west,powered=true,shape=retracted": {
"model": "create:block/brass_belt_funnel__powered_retracted",
"y": 270
},
"facing=east,powered=true,pushing=false,shape=retracted": {
"model": "create:block/brass_belt_funnel_pull_powered_retracted",
"facing=east,powered=true,shape=retracted": {
"model": "create:block/brass_belt_funnel__powered_retracted",
"y": 90
},
"facing=north,powered=false,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_retracted"
"facing=north,powered=false,shape=extended": {
"model": "create:block/brass_belt_funnel__extended"
},
"facing=south,powered=false,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_retracted",
"facing=south,powered=false,shape=extended": {
"model": "create:block/brass_belt_funnel__extended",
"y": 180
},
"facing=west,powered=false,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_retracted",
"facing=west,powered=false,shape=extended": {
"model": "create:block/brass_belt_funnel__extended",
"y": 270
},
"facing=east,powered=false,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_retracted",
"facing=east,powered=false,shape=extended": {
"model": "create:block/brass_belt_funnel__extended",
"y": 90
},
"facing=north,powered=true,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_powered_retracted"
"facing=north,powered=true,shape=extended": {
"model": "create:block/brass_belt_funnel__powered_extended"
},
"facing=south,powered=true,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_powered_retracted",
"facing=south,powered=true,shape=extended": {
"model": "create:block/brass_belt_funnel__powered_extended",
"y": 180
},
"facing=west,powered=true,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_powered_retracted",
"facing=west,powered=true,shape=extended": {
"model": "create:block/brass_belt_funnel__powered_extended",
"y": 270
},
"facing=east,powered=true,pushing=true,shape=retracted": {
"model": "create:block/brass_belt_funnel_push_powered_retracted",
"facing=east,powered=true,shape=extended": {
"model": "create:block/brass_belt_funnel__powered_extended",
"y": 90
},
"facing=north,powered=false,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_extended"
"facing=north,powered=false,shape=pushing": {
"model": "create:block/brass_belt_funnel__pushing"
},
"facing=south,powered=false,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_extended",
"facing=south,powered=false,shape=pushing": {
"model": "create:block/brass_belt_funnel__pushing",
"y": 180
},
"facing=west,powered=false,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_extended",
"facing=west,powered=false,shape=pushing": {
"model": "create:block/brass_belt_funnel__pushing",
"y": 270
},
"facing=east,powered=false,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_extended",
"facing=east,powered=false,shape=pushing": {
"model": "create:block/brass_belt_funnel__pushing",
"y": 90
},
"facing=north,powered=true,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_powered_extended"
"facing=north,powered=true,shape=pushing": {
"model": "create:block/brass_belt_funnel__powered_pushing"
},
"facing=south,powered=true,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_powered_extended",
"facing=south,powered=true,shape=pushing": {
"model": "create:block/brass_belt_funnel__powered_pushing",
"y": 180
},
"facing=west,powered=true,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_powered_extended",
"facing=west,powered=true,shape=pushing": {
"model": "create:block/brass_belt_funnel__powered_pushing",
"y": 270
},
"facing=east,powered=true,pushing=false,shape=extended": {
"model": "create:block/brass_belt_funnel_pull_powered_extended",
"facing=east,powered=true,shape=pushing": {
"model": "create:block/brass_belt_funnel__powered_pushing",
"y": 90
},
"facing=north,powered=false,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_extended"
"facing=north,powered=false,shape=pulling": {
"model": "create:block/brass_belt_funnel__pulling"
},
"facing=south,powered=false,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_extended",
"facing=south,powered=false,shape=pulling": {
"model": "create:block/brass_belt_funnel__pulling",
"y": 180
},
"facing=west,powered=false,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_extended",
"facing=west,powered=false,shape=pulling": {
"model": "create:block/brass_belt_funnel__pulling",
"y": 270
},
"facing=east,powered=false,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_extended",
"facing=east,powered=false,shape=pulling": {
"model": "create:block/brass_belt_funnel__pulling",
"y": 90
},
"facing=north,powered=true,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_powered_extended"
"facing=north,powered=true,shape=pulling": {
"model": "create:block/brass_belt_funnel__powered_pulling"
},
"facing=south,powered=true,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_powered_extended",
"facing=south,powered=true,shape=pulling": {
"model": "create:block/brass_belt_funnel__powered_pulling",
"y": 180
},
"facing=west,powered=true,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_powered_extended",
"facing=west,powered=true,shape=pulling": {
"model": "create:block/brass_belt_funnel__powered_pulling",
"y": 270
},
"facing=east,powered=true,pushing=true,shape=extended": {
"model": "create:block/brass_belt_funnel_push_powered_extended",
"facing=east,powered=true,shape=pulling": {
"model": "create:block/brass_belt_funnel__powered_pulling",
"y": 90
}
}

View file

@ -60,10 +60,10 @@
},
{
"when": {
"up": "true",
"down": "false",
"south": "false",
"north": "true"
"north": "true",
"up": "true",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lu_x"
@ -71,10 +71,10 @@
},
{
"when": {
"up": "true",
"down": "false",
"south": "true",
"north": "false"
"north": "false",
"up": "true",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ru_x"
@ -82,10 +82,10 @@
},
{
"when": {
"up": "false",
"down": "true",
"south": "false",
"north": "true"
"north": "true",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ld_x"
@ -93,10 +93,10 @@
},
{
"when": {
"up": "false",
"down": "true",
"south": "true",
"north": "false"
"north": "false",
"up": "false",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/rd_x"
@ -104,21 +104,21 @@
},
{
"when": {
"up": "true",
"down": "true",
"south": "false",
"north": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
}
},
{
"when": {
"north": "false",
"up": "true",
"down": "false",
"south": "false",
"north": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
}
},
{
"when": {
"down": "false",
"north": "false",
"up": "true",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
@ -126,10 +126,10 @@
},
{
"when": {
"up": "false",
"down": "true",
"south": "false",
"north": "false"
"north": "false",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
@ -137,10 +137,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"south": "true",
"north": "true"
"north": "true",
"up": "false",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lr_x"
@ -148,10 +148,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"south": "false",
"north": "true"
"north": "true",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_x"
@ -159,10 +159,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"south": "true",
"north": "false"
"north": "false",
"up": "false",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lr_x"
@ -170,10 +170,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"south": "false",
"north": "false"
"north": "false",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_x"
@ -182,9 +182,9 @@
{
"when": {
"west": "true",
"south": "true",
"east": "false",
"north": "false",
"east": "false"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lu_y"
@ -193,9 +193,9 @@
{
"when": {
"west": "false",
"south": "true",
"east": "true",
"north": "false",
"east": "true"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ru_y"
@ -204,9 +204,9 @@
{
"when": {
"west": "true",
"south": "false",
"east": "false",
"north": "true",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ld_y"
@ -215,9 +215,9 @@
{
"when": {
"west": "false",
"south": "false",
"east": "true",
"north": "true",
"east": "true"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/rd_y"
@ -226,9 +226,9 @@
{
"when": {
"west": "false",
"south": "true",
"east": "false",
"north": "true",
"east": "false"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_y"
@ -237,9 +237,9 @@
{
"when": {
"west": "false",
"south": "true",
"east": "false",
"north": "false",
"east": "false"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_y"
@ -248,9 +248,9 @@
{
"when": {
"west": "false",
"south": "false",
"east": "false",
"north": "true",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_y"
@ -259,9 +259,9 @@
{
"when": {
"west": "true",
"south": "false",
"east": "true",
"north": "false",
"east": "true"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_y"
@ -270,9 +270,9 @@
{
"when": {
"west": "true",
"south": "false",
"east": "false",
"north": "false",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_y"
@ -281,9 +281,9 @@
{
"when": {
"west": "false",
"south": "false",
"east": "true",
"north": "false",
"east": "true"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_y"
@ -292,9 +292,9 @@
{
"when": {
"west": "false",
"south": "false",
"east": "false",
"north": "false",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_y"
@ -302,10 +302,10 @@
},
{
"when": {
"up": "true",
"west": "false",
"down": "false",
"east": "true"
"east": "true",
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lu_z"
@ -313,10 +313,10 @@
},
{
"when": {
"up": "true",
"west": "true",
"down": "false",
"east": "false"
"east": "false",
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ru_z"
@ -324,10 +324,10 @@
},
{
"when": {
"up": "false",
"west": "false",
"down": "true",
"east": "true"
"east": "true",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ld_z"
@ -335,10 +335,10 @@
},
{
"when": {
"up": "false",
"west": "true",
"down": "true",
"east": "false"
"east": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/rd_z"
@ -346,10 +346,10 @@
},
{
"when": {
"up": "true",
"west": "false",
"down": "true",
"east": "false"
"east": "false",
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_z"
@ -357,10 +357,10 @@
},
{
"when": {
"up": "true",
"west": "false",
"down": "false",
"east": "false"
"east": "false",
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_z"
@ -368,10 +368,10 @@
},
{
"when": {
"up": "false",
"west": "false",
"down": "true",
"east": "false"
"east": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_z"
@ -379,10 +379,10 @@
},
{
"when": {
"up": "false",
"west": "true",
"down": "false",
"east": "true"
"east": "true",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_z"
@ -390,10 +390,10 @@
},
{
"when": {
"up": "false",
"west": "false",
"down": "false",
"east": "true"
"east": "true",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_z"
@ -401,10 +401,10 @@
},
{
"when": {
"up": "false",
"west": "true",
"down": "false",
"east": "false"
"east": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_z"
@ -412,10 +412,10 @@
},
{
"when": {
"up": "false",
"west": "false",
"down": "false",
"east": "false"
"east": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_z"

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "create:block/blaze_burner/block_with_fire"
}
}
}

View file

@ -89,8 +89,8 @@
},
{
"when": {
"sticky_west": "true",
"axis": "x"
"axis": "x",
"sticky_west": "true"
},
"apply": {
"model": "create:block/radial_chassis_side_x_sticky",
@ -99,8 +99,8 @@
},
{
"when": {
"sticky_west": "true",
"axis": "y"
"axis": "y",
"sticky_west": "true"
},
"apply": {
"model": "create:block/radial_chassis_side_y_sticky",
@ -109,8 +109,8 @@
},
{
"when": {
"sticky_west": "true",
"axis": "z"
"axis": "z",
"sticky_west": "true"
},
"apply": {
"model": "create:block/radial_chassis_side_z_sticky",
@ -119,8 +119,8 @@
},
{
"when": {
"sticky_west": "false",
"axis": "x"
"axis": "x",
"sticky_west": "false"
},
"apply": {
"model": "create:block/radial_chassis_side_x",
@ -129,8 +129,8 @@
},
{
"when": {
"sticky_west": "false",
"axis": "y"
"axis": "y",
"sticky_west": "false"
},
"apply": {
"model": "create:block/radial_chassis_side_y",
@ -139,8 +139,8 @@
},
{
"when": {
"sticky_west": "false",
"axis": "z"
"axis": "z",
"sticky_west": "false"
},
"apply": {
"model": "create:block/radial_chassis_side_z",
@ -149,8 +149,8 @@
},
{
"when": {
"axis": "x",
"sticky_north": "true"
"sticky_north": "true",
"axis": "x"
},
"apply": {
"model": "create:block/radial_chassis_side_x_sticky"
@ -158,8 +158,8 @@
},
{
"when": {
"axis": "y",
"sticky_north": "true"
"sticky_north": "true",
"axis": "y"
},
"apply": {
"model": "create:block/radial_chassis_side_y_sticky",
@ -168,8 +168,8 @@
},
{
"when": {
"axis": "z",
"sticky_north": "true"
"sticky_north": "true",
"axis": "z"
},
"apply": {
"model": "create:block/radial_chassis_side_x_sticky",
@ -178,8 +178,8 @@
},
{
"when": {
"axis": "x",
"sticky_north": "false"
"sticky_north": "false",
"axis": "x"
},
"apply": {
"model": "create:block/radial_chassis_side_x"
@ -187,8 +187,8 @@
},
{
"when": {
"axis": "y",
"sticky_north": "false"
"sticky_north": "false",
"axis": "y"
},
"apply": {
"model": "create:block/radial_chassis_side_y",
@ -197,8 +197,8 @@
},
{
"when": {
"axis": "z",
"sticky_north": "false"
"sticky_north": "false",
"axis": "z"
},
"apply": {
"model": "create:block/radial_chassis_side_x",

View file

@ -211,6 +211,7 @@
"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.lit_blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA \u0287\u0131\uA780",
"block.create.magenta_sail": "\u05DF\u0131\u0250S \u0250\u0287u\u01DDb\u0250W",
"block.create.magenta_seat": "\u0287\u0250\u01DDS \u0250\u0287u\u01DDb\u0250W",
"block.create.magenta_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u0250\u0287u\u01DDb\u0250W",

View file

@ -214,6 +214,7 @@
"block.create.limestone_cobblestone_wall": "Limestone Cobblestone Wall",
"block.create.limestone_pillar": "Limestone Pillar",
"block.create.linear_chassis": "Linear Chassis",
"block.create.lit_blaze_burner": "Lit Blaze Burner",
"block.create.magenta_sail": "Magenta Sail",
"block.create.magenta_seat": "Magenta Seat",
"block.create.magenta_valve_handle": "Magenta Valve Handle",
@ -584,6 +585,8 @@
"create.recipe.blockzapper_upgrade": "Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Sandpaper Polishing",
"create.recipe.mystery_conversion": "Mysterious Conversion",
"create.recipe.spout_filling": "Filling by Spout",
"create.recipe.draining": "Item Draining",
"create.recipe.processing.chance": "%1$s%% Chance",
"create.recipe.heat_requirement.none": "No Heating Required",
"create.recipe.heat_requirement.heated": "Heated",
@ -709,6 +712,9 @@
"create.logistics.fluid_filter": "Fluid Filter",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "Generator Stats:",
"create.gui.goggles.kinetic_stats": "Kinetic Stats:",
@ -749,7 +755,7 @@
"create.schematicAndQuill.noTarget": "Hold [Ctrl] to select Air blocks.",
"create.schematicAndQuill.abort": "Removed selection.",
"create.schematicAndQuill.title": "Schematic Name:",
"create.schematicAndQuill.convert": "Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "My Schematic",
"create.schematicAndQuill.saved": "Saved as %1$s",
@ -949,6 +955,7 @@
"create.mechanical_arm.extract_from": "Take items from %1$s",
"create.mechanical_arm.deposit_to": "Deposit items to %1$s",
"create.mechanical_arm.summary": "Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available",
@ -965,6 +972,15 @@
"create.tunnel.selection_mode.randomize": "Randomize",
"create.tunnel.selection_mode.synchronize": "Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "No Targets",
"create.hint.mechanical_arm_no_targets": "It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "Horizontal Funnels",
"create.hint.horizontal_funnel": "cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "Funnels facing upward",
"create.hint.upward_funnel": "can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "Update Bearing",
"create.hint.empty_bearing": "_Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "Hi :)",
"create.gui.config.overlay2": "This is a sample overlay",
"create.gui.config.overlay3": "Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1026",
"_": "Missing Localizations: 1041",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
"block.create.limestone_pillar": "Kalksteinsäule",
"block.create.linear_chassis": "Schubgerüst",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "Blockpistole",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "Chance: %1$s%%",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "Halte [Strg] zur Auswahl von Luft.",
"create.schematicAndQuill.abort": "Auswahl zurückgesetzt.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Mein Bauplan",
"create.schematicAndQuill.saved": "Gespeichert als %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 655",
"_": "Missing Localizations: 670",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"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.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "Blockzappeur portable",
"create.recipe.sandpaper_polishing": "Polissage au papier de verre",
"create.recipe.mystery_conversion": "Métamorphose chromatique",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% de chance",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "Statistiques du générateur:",
"create.gui.goggles.kinetic_stats": "Statistiques cinétiques:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "Enfoncez [Ctrl] pour sélectionner les blocs d'air.",
"create.schematicAndQuill.abort": "Sélection supprimée.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Mon schéma",
"create.schematicAndQuill.saved": "Sauvegardé en tant que %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 639",
"_": "Missing Localizations: 654",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
"block.create.limestone_pillar": "Pilastro di Calcare",
"block.create.linear_chassis": "Telaio Lineare",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Carta Vetrata Levigata",
"create.recipe.mystery_conversion": "Metamorfosi Cromatica",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% Possibilità",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "Statistiche del Generatore:",
"create.gui.goggles.kinetic_stats": "Statistiche Cinetiche:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "Premi [Ctrl] per selezionare il Blocco d'Aria.",
"create.schematicAndQuill.abort": "Selezione rimossa.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "La mia Schematica",
"create.schematicAndQuill.saved": "Salvata come %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 638",
"_": "Missing Localizations: 653",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
"block.create.limestone_pillar": "石灰岩の柱",
"block.create.linear_chassis": "リニアシャーシ",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "携帯型ブロックザッパー",
"create.recipe.sandpaper_polishing": "紙やすりでの研磨",
"create.recipe.mystery_conversion": "色彩変態",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%%チャンス",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "ジェネレータの統計:",
"create.gui.goggles.kinetic_stats": "動力の統計:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "[Ctrl] を押したままで空気ブロックを選択します",
"create.schematicAndQuill.abort": "選択を削除しました。",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "My Schematic",
"create.schematicAndQuill.saved": "%1$s として保存しました",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 639",
"_": "Missing Localizations: 654",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
"block.create.limestone_pillar": "석회암 기둥",
"block.create.linear_chassis": "직선 섀시",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "사포 연마",
"create.recipe.mystery_conversion": "?",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% 확률",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "주파수. #1",
"create.logistics.secondFrequency": "주파수. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "발전 상태:",
"create.gui.goggles.kinetic_stats": "가동 상태:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "[Ctrl]을 눌러 공기 블럭을 선택하기.",
"create.schematicAndQuill.abort": "위치 제거됨.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "내 청사진",
"create.schematicAndQuill.saved": "%1$s로 저장됨",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 967",
"_": "Missing Localizations: 982",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall",
"block.create.limestone_pillar": "Kalksteen Pillar",
"block.create.linear_chassis": "Lineaar Frame",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "Blokzapper",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% Kans",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "Houd [Ctrl] ingedrukt om een Lucht block te kiezen.",
"create.schematicAndQuill.abort": "Keuze verwijderd.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Mijn Bouwtekening",
"create.schematicAndQuill.saved": "Opgeslagen als %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1033",
"_": "Missing Localizations: 1048",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"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.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "Blockzapper Portátil",
"create.recipe.sandpaper_polishing": "UNLOCALIZED: Sandpaper Polishing",
"create.recipe.mystery_conversion": "UNLOCALIZED: Mysterious Conversion",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% de chance",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "UNLOCALIZED: Freq. #1",
"create.logistics.secondFrequency": "UNLOCALIZED: Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.",
"create.schematicAndQuill.abort": "Seleção removida.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Meu Esquema",
"create.schematicAndQuill.saved": "Salvo como %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 308",
"_": "Missing Localizations: 323",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "Стена из известняк-булыжника",
"block.create.limestone_pillar": "Известковая колонна",
"block.create.linear_chassis": "Линейное шасси",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "Ручная блоковая пушка",
"create.recipe.sandpaper_polishing": "Полировка наждачной бумагой",
"create.recipe.mystery_conversion": "Хроматический метаморфоз",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% шанса",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "Частота #1",
"create.logistics.secondFrequency": "Частота #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "Статистика генератора:",
"create.gui.goggles.kinetic_stats": "Кинетическая статистика:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "Удерживайте [Ctrl], чтобы выбрать воздушные блоки.",
"create.schematicAndQuill.abort": "Выделение убрано",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "Моя схематика",
"create.schematicAndQuill.saved": "Сохранено как %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 321",
"_": "Missing Localizations: 336",
"_": "->------------------------] Game Elements [------------------------<-",
@ -215,6 +215,7 @@
"block.create.limestone_cobblestone_wall": "石灰岩圆石墙",
"block.create.limestone_pillar": "竖纹石灰岩",
"block.create.linear_chassis": "机壳底盘",
"block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner",
"block.create.magenta_sail": "UNLOCALIZED: Magenta Sail",
"block.create.magenta_seat": "UNLOCALIZED: Magenta Seat",
"block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle",
@ -585,6 +586,8 @@
"create.recipe.blockzapper_upgrade": "UNLOCALIZED: Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "砂纸抛光",
"create.recipe.mystery_conversion": "化合物变异",
"create.recipe.spout_filling": "UNLOCALIZED: Filling by Spout",
"create.recipe.draining": "UNLOCALIZED: Item Draining",
"create.recipe.processing.chance": "%1$s%% 概率",
"create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required",
"create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated",
@ -710,6 +713,9 @@
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "频道. #1",
"create.logistics.secondFrequency": "频道. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "产能器状态:",
"create.gui.goggles.kinetic_stats": "动能状态:",
@ -750,7 +756,7 @@
"create.schematicAndQuill.noTarget": "按住Ctrl选择空气方块.",
"create.schematicAndQuill.abort": "删除选择.",
"create.schematicAndQuill.title": "UNLOCALIZED: Schematic Name:",
"create.schematicAndQuill.convert": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "UNLOCALIZED: Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "我的蓝图",
"create.schematicAndQuill.saved": "另存为 %1$s",
@ -950,6 +956,7 @@
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
@ -966,6 +973,15 @@
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "UNLOCALIZED: Horizontal Funnels",
"create.hint.horizontal_funnel": "UNLOCALIZED: cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "UNLOCALIZED: Funnels facing upward",
"create.hint.upward_funnel": "UNLOCALIZED: can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_extended",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_pull",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall",
"6": "create:block/andesite_funnel",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_extended",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_push",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall_powered",
"6": "create:block/andesite_funnel_powered",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_extended",
"parent": "create:block/belt_funnel/block_pulling",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_pull",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall_powered",
"6": "create:block/andesite_funnel_powered",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_retracted",
"parent": "create:block/belt_funnel/block_pushing",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_push",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall_powered",
"6": "create:block/andesite_funnel_powered",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_retracted",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_pull",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall_powered",
"6": "create:block/andesite_funnel_powered",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_extended",
"parent": "create:block/belt_funnel/block_pulling",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_push",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall",
"6": "create:block/andesite_funnel",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_retracted",
"parent": "create:block/belt_funnel/block_pushing",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_pull",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall",
"6": "create:block/andesite_funnel",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_retracted",
"textures": {
"particle": "minecraft:block/polished_andesite",
"2": "create:block/andesite_funnel_push",
"2": "create:block/andesite_funnel_neutral",
"2_1": "create:block/andesite_funnel_push",
"2_2": "create:block/andesite_funnel_pull",
"3": "create:block/andesite_funnel_back",
"5": "create:block/andesite_funnel_tall",
"6": "create:block/andesite_funnel",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_extended",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_pull",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_extended",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_push",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall_powered",
"6": "create:block/brass_funnel_powered",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_extended",
"parent": "create:block/belt_funnel/block_pulling",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_pull",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall_powered",
"6": "create:block/brass_funnel_powered",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_retracted",
"parent": "create:block/belt_funnel/block_pushing",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_push",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall_powered",
"6": "create:block/brass_funnel_powered",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_retracted",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_pull",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall_powered",
"6": "create:block/brass_funnel_powered",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_extended",
"parent": "create:block/belt_funnel/block_pulling",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_push",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",

View file

@ -1,8 +1,10 @@
{
"parent": "create:block/belt_funnel/block_retracted",
"parent": "create:block/belt_funnel/block_pushing",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_pull",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",

View file

@ -2,7 +2,9 @@
"parent": "create:block/belt_funnel/block_retracted",
"textures": {
"particle": "create:block/brass_block",
"2": "create:block/brass_funnel_push",
"2": "create:block/brass_funnel_neutral",
"2_1": "create:block/brass_funnel_push",
"2_2": "create:block/brass_funnel_pull",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",

View file

@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "create:empty_blaze_burner"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -7,18 +7,13 @@
],
"results": [
{
"item": "minecraft:prismarine_shard",
"count": 2
"item": "minecraft:quartz",
"count": 1
},
{
"item": "minecraft:quartz",
"count": 2,
"chance": 0.75
},
{
"item": "minecraft:prismarine_shard",
"count": 2,
"chance": 0.25
"chance": 0.5
},
{
"item": "minecraft:glowstone_dust",

View file

@ -2,6 +2,7 @@
"replace": false,
"values": [
"create:blaze_burner",
"create:lit_blaze_burner",
"minecraft:magma_block",
"minecraft:campfire",
"minecraft:lava",

View file

@ -2,6 +2,7 @@
"replace": false,
"values": [
"create:blaze_burner",
"create:lit_blaze_burner",
"create:sail_frame",
"#minecraft:fences",
"minecraft:iron_bars"

View file

@ -86,6 +86,7 @@ import com.simibubi.create.content.contraptions.processing.BasinGenerator;
import com.simibubi.create.content.contraptions.processing.BasinMovementBehaviour;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem;
import com.simibubi.create.content.contraptions.processing.burner.LitBlazeBurnerBlock;
import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock;
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock;
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftGenerator;
@ -446,6 +447,17 @@ public class AllBlocks {
.build()
.register();
public static final BlockEntry<LitBlazeBurnerBlock> LIT_BLAZE_BURNER =
REGISTRATE.block("lit_blaze_burner", LitBlazeBurnerBlock::new)
.initialProperties(SharedProperties::softMetal)
.properties(p -> p.luminance($ -> 12))
.addLayer(() -> RenderType::getCutoutMipped)
.tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag)
.loot((lt, block) -> lt.registerDropping(block, AllItems.EMPTY_BLAZE_BURNER.get()))
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), p.models()
.getExistingFile(p.modLoc("block/blaze_burner/block_with_fire"))))
.register();
public static final BlockEntry<DepotBlock> DEPOT = REGISTRATE.block("depot", DepotBlock::new)
.initialProperties(SharedProperties::stone)
.blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p)))
@ -615,7 +627,7 @@ public class AllBlocks {
.initialProperties(SharedProperties::softMetal)
.blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov)))
.addLayer(() -> RenderType::getCutoutMipped)
.item()
.item(BasinOperatorBlockItem::new)
.transform(customItemModel())
.register();

View file

@ -77,12 +77,27 @@ public class AllShapes {
.add(2, 6, 2, 14, 10, 14)
.add(0, 10, 0, 16, 13, 16)
.forDirectional(UP),
BELT_FUNNEL_RETRACTED = shape(2, -5, 14, 12, 14, 18).add(0, -5, 8, 16, 16, 14)
BELT_FUNNEL_RETRACTED = shape(2, -2, 14, 14, 14, 18).add(0, -5, 8, 16, 16, 14)
.forHorizontal(NORTH),
BELT_FUNNEL_EXTENDED = shape(2, -4, 14, 14, 14, 18).add(3, -4, 10, 13, 13, 14)
BELT_FUNNEL_EXTENDED = shape(2, -2, 14, 14, 14, 18).add(3, -4, 10, 13, 13, 14)
.add(2, -4, 6, 14, 14, 10)
.add(0, -5, 0, 16, 16, 6)
.forHorizontal(NORTH),
BELT_FUNNEL_PERPENDICULAR =
shape(2, -2, 14, 14, 14, 18)
.add(1, 8, 12, 15, 15, 14)
.add(0.1, 13, 7, 15.9, 15, 11)
.add(0.1, 9, 8, 15.9, 13, 12)
.add(0.1, 5, 9, 15.9, 9, 13)
.add(0.1, 1, 10, 15.9, 5, 14)
.add(0.1, -3, 11, 15.9, 1, 15)
.forHorizontal(NORTH),
BELT_FUNNEL_CONNECTED =
shape(2, -2, 14, 14, 14, 18)
.add(0, -5, 5, 16, 16, 11)
.add(2, -4, 2, 14, 14, -2)
.add(3, -2, 0, 13, 13, 16)
.forHorizontal(NORTH),
FLUID_VALVE = shape(3, -1, 3, 13, 17, 13).add(2, 2, 2, 14, 14, 14)
.forAxis(),
SMART_FLUID_PIPE_FLOOR = shape(4, 4, 0, 12, 12, 16).add(3, 3, 3, 13, 13, 13)

View file

@ -23,6 +23,7 @@ import com.simibubi.create.compat.jei.category.CrushingCategory;
import com.simibubi.create.compat.jei.category.FanBlastingCategory;
import com.simibubi.create.compat.jei.category.FanSmokingCategory;
import com.simibubi.create.compat.jei.category.FanWashingCategory;
import com.simibubi.create.compat.jei.category.ItemDrainCategory;
import com.simibubi.create.compat.jei.category.MechanicalCraftingCategory;
import com.simibubi.create.compat.jei.category.MillingCategory;
import com.simibubi.create.compat.jei.category.MixingCategory;
@ -32,8 +33,9 @@ import com.simibubi.create.compat.jei.category.PolishingCategory;
import com.simibubi.create.compat.jei.category.PressingCategory;
import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
import com.simibubi.create.compat.jei.category.SawingCategory;
import com.simibubi.create.compat.jei.category.SpoutCategory;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
import com.simibubi.create.content.contraptions.fluids.potion.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
@ -49,6 +51,7 @@ import mezz.jei.api.registration.IRecipeCatalystRegistration;
import mezz.jei.api.registration.IRecipeCategoryRegistration;
import mezz.jei.api.registration.IRecipeRegistration;
import mezz.jei.api.registration.ISubtypeRegistration;
import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.ICraftingRecipe;
@ -70,6 +73,7 @@ public class CreateJEI implements IModPlugin {
return ID;
}
public IIngredientManager ingredientManager;
final List<CreateRecipeCategory<?>> ALL = new ArrayList<>();
final CreateRecipeCategory<?>
@ -155,6 +159,18 @@ public class CreateJEI implements IModPlugin {
.recipeList(MysteriousItemConversionCategory::getRecipes)
.build(),
spoutFilling =
register("spout_filling", SpoutCategory::new).recipeList(() -> SpoutCategory.getRecipes(ingredientManager))
.recipes(AllRecipeTypes.FILLING)
.catalyst(AllBlocks.SPOUT::get)
.build(),
draining = register("draining", ItemDrainCategory::new)
.recipeList(() -> ItemDrainCategory.getRecipes(ingredientManager))
.recipes(AllRecipeTypes.EMPTYING)
.catalyst(AllBlocks.ITEM_DRAIN::get)
.build(),
autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new)
.recipes(
r -> (r.getType() == IRecipeType.CRAFTING && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.type)
@ -187,6 +203,7 @@ public class CreateJEI implements IModPlugin {
@Override
public void registerRecipes(IRecipeRegistration registration) {
ingredientManager = registration.getIngredientManager();
ALL.forEach(c -> c.recipes.forEach(s -> registration.addRecipes(s.get(), c.getUid())));
}
@ -213,9 +230,10 @@ public class CreateJEI implements IModPlugin {
}
CategoryBuilder<T> catalyst(Supplier<IItemProvider> supplier) {
return catalystStack(() -> new ItemStack(supplier.get().asItem()));
return catalystStack(() -> new ItemStack(supplier.get()
.asItem()));
}
CategoryBuilder<T> catalystStack(Supplier<ItemStack> supplier) {
category.recipeCatalysts.add(supplier);
return this;

View file

@ -140,19 +140,6 @@ public class BasinCategory extends CreateRecipeCategory<BasinRecipe> {
}
}
public List<FluidStack> withImprovedVisibility(List<FluidStack> stacks) {
return stacks.stream()
.map(this::withImprovedVisibility)
.collect(Collectors.toList());
}
public FluidStack withImprovedVisibility(FluidStack stack) {
FluidStack display = stack.copy();
int displayedAmount = (int) (stack.getAmount() * .75f) + 250;
display.setAmount(displayedAmount);
return display;
}
@Override
public void draw(BasinRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
List<Pair<Ingredient, MutableInt>> actualIngredients = ItemHelper.condenseIngredients(recipe.getIngredients());

View file

@ -107,6 +107,19 @@ public abstract class CreateRecipeCategory<T extends IRecipe<?>> implements IRec
.formatted(TextFormatting.GOLD));
});
}
public List<FluidStack> withImprovedVisibility(List<FluidStack> stacks) {
return stacks.stream()
.map(this::withImprovedVisibility)
.collect(Collectors.toList());
}
public FluidStack withImprovedVisibility(FluidStack stack) {
FluidStack display = stack.copy();
int displayedAmount = (int) (stack.getAmount() * .75f) + 250;
display.setAmount(displayedAmount);
return display;
}
protected static void addFluidTooltip(IGuiFluidStackGroup fluidStacks, List<FluidIngredient> inputs,
List<FluidStack> outputs) {

View file

@ -0,0 +1,138 @@
package com.simibubi.create.compat.jei.category;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.Create;
import com.simibubi.create.compat.jei.category.animations.AnimatedItemDrain;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
import com.simibubi.create.content.contraptions.processing.EmptyingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.PotionItem;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
public class ItemDrainCategory extends CreateRecipeCategory<EmptyingRecipe> {
AnimatedItemDrain drain;
public ItemDrainCategory() {
super(doubleItemIcon(AllBlocks.ITEM_DRAIN.get(), Items.WATER_BUCKET), emptyBackground(177, 50));
drain = new AnimatedItemDrain();
}
public static List<EmptyingRecipe> getRecipes(IIngredientManager ingredientManager) {
List<EmptyingRecipe> recipes = new ArrayList<>();
ingredientManager.getAllIngredients(VanillaTypes.ITEM)
.stream()
.forEach(stack -> {
if (stack.getItem() instanceof PotionItem) {
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
Ingredient potion = Ingredient.fromStacks(stack);
recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions"))
.withItemIngredients(potion)
.withFluidOutputs(fluidFromPotionItem)
.withSingleItemOutput(new ItemStack(Items.GLASS_BOTTLE))
.build());
return;
}
LazyOptional<IFluidHandlerItem> capability =
stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
if (!capability.isPresent())
return;
ItemStack copy = stack.copy();
capability = copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
IFluidHandlerItem handler = capability.orElse(null);
FluidStack extracted = handler.drain(1000, FluidAction.EXECUTE);
ItemStack result = handler.getContainer();
if (extracted.isEmpty())
return;
Ingredient ingredient = Ingredient.fromStacks(stack);
ResourceLocation itemName = stack.getItem()
.getRegistryName();
ResourceLocation fluidName = extracted.getFluid()
.getRegistryName();
recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new,
Create.asResource("empty_" + itemName.getNamespace() + "_" + itemName.getPath() + "_of_"
+ fluidName.getNamespace() + "_" + fluidName.getPath())).withItemIngredients(ingredient)
.withFluidOutputs(extracted)
.withSingleItemOutput(result)
.build());
});
return recipes;
}
@Override
public Class<? extends EmptyingRecipe> getRecipeClass() {
return EmptyingRecipe.class;
}
@Override
public void setIngredients(EmptyingRecipe recipe, IIngredients ingredients) {
ingredients.setInputIngredients(recipe.getIngredients());
if (!recipe.getRollableResults()
.isEmpty())
ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput());
if (!recipe.getFluidResults()
.isEmpty())
ingredients.setOutputs(VanillaTypes.FLUID, recipe.getFluidResults());
}
@Override
public void setRecipe(IRecipeLayout recipeLayout, EmptyingRecipe recipe, IIngredients ingredients) {
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
IGuiFluidStackGroup fluidStacks = recipeLayout.getFluidStacks();
FluidStack fluidOutput = recipe.getResultingFluid();
List<ItemStack> matchingIngredients = Arrays.asList(recipe.getIngredients()
.get(0)
.getMatchingStacks());
fluidStacks.init(0, true, 132, 8);
fluidStacks.set(0, withImprovedVisibility(fluidOutput));
itemStacks.init(0, true, 26, 7);
itemStacks.set(0, matchingIngredients);
itemStacks.init(1, false, 131, 26);
itemStacks.set(1, recipe.getRecipeOutput());
addFluidTooltip(fluidStacks, Collections.emptyList(), ImmutableList.of(fluidOutput));
}
@Override
public void draw(EmptyingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
AllGuiTextures.JEI_SLOT.draw(matrixStack, 131, 7);
AllGuiTextures.JEI_SLOT.draw(matrixStack, 26, 7);
getRenderedSlot(recipe, 0).draw(matrixStack, 131, 26);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 62, 37);
AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 73, 4);
drain.withFluid(recipe.getResultingFluid())
.draw(matrixStack, getBackground().getWidth() / 2 - 13, 40);
}
}

View file

@ -0,0 +1,152 @@
package com.simibubi.create.compat.jei.category;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.Create;
import com.simibubi.create.compat.jei.category.animations.AnimatedSpout;
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.gui.AllGuiTextures;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ingredient.IGuiFluidStackGroup;
import mezz.jei.api.gui.ingredient.IGuiItemStackGroup;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.runtime.IIngredientManager;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.PotionItem;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
public class SpoutCategory extends CreateRecipeCategory<FillingRecipe> {
AnimatedSpout spout;
public SpoutCategory() {
super(doubleItemIcon(AllBlocks.SPOUT.get(), Items.WATER_BUCKET), emptyBackground(177, 70));
spout = new AnimatedSpout();
}
public static List<FillingRecipe> getRecipes(IIngredientManager ingredientManager) {
List<FillingRecipe> recipes = new ArrayList<>();
ingredientManager.getAllIngredients(VanillaTypes.ITEM)
.stream()
.forEach(stack -> {
if (stack.getItem() instanceof PotionItem) {
FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack);
Ingredient bottle = Ingredient.fromItems(Items.GLASS_BOTTLE);
recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions"))
.withItemIngredients(bottle)
.withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem))
.withSingleItemOutput(stack)
.build());
return;
}
LazyOptional<IFluidHandlerItem> capability =
stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY);
if (!capability.isPresent())
return;
ingredientManager.getAllIngredients(VanillaTypes.FLUID)
.stream()
.forEach(fluidStack -> {
ItemStack copy = stack.copy();
copy.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
.ifPresent(fhi -> {
FluidStack fluidCopy = fluidStack.copy();
fluidCopy.setAmount(1000);
fhi.fill(fluidCopy, FluidAction.EXECUTE);
ItemStack container = fhi.getContainer();
if (container.isItemEqual(copy))
return;
Ingredient bucket = Ingredient.fromStacks(stack);
ResourceLocation itemName = stack.getItem()
.getRegistryName();
ResourceLocation fluidName = fluidCopy.getFluid()
.getRegistryName();
recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new,
Create.asResource("fill_" + itemName.getNamespace() + "_" + itemName.getPath()
+ "_with_" + fluidName.getNamespace() + "_" + fluidName.getPath()))
.withItemIngredients(bucket)
.withFluidIngredients(FluidIngredient.fromFluidStack(fluidCopy))
.withSingleItemOutput(container)
.build());
});
});
});
return recipes;
}
@Override
public Class<? extends FillingRecipe> getRecipeClass() {
return FillingRecipe.class;
}
@Override
public void setIngredients(FillingRecipe recipe, IIngredients ingredients) {
ingredients.setInputIngredients(recipe.getIngredients());
ingredients.setInputLists(VanillaTypes.FLUID, recipe.getFluidIngredients()
.stream()
.map(FluidIngredient::getMatchingFluidStacks)
.collect(Collectors.toList()));
if (!recipe.getRollableResults()
.isEmpty())
ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput());
if (!recipe.getFluidResults()
.isEmpty())
ingredients.setOutputs(VanillaTypes.FLUID, recipe.getFluidResults());
}
@Override
public void setRecipe(IRecipeLayout recipeLayout, FillingRecipe recipe, IIngredients ingredients) {
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
IGuiFluidStackGroup fluidStacks = recipeLayout.getFluidStacks();
FluidIngredient fluidIngredient = recipe.getRequiredFluid();
List<ItemStack> matchingIngredients = Arrays.asList(recipe.getIngredients()
.get(0)
.getMatchingStacks());
fluidStacks.init(0, true, 27, 32);
fluidStacks.set(0, withImprovedVisibility(fluidIngredient.getMatchingFluidStacks()));
itemStacks.init(0, true, 26, 50);
itemStacks.set(0, matchingIngredients);
itemStacks.init(1, false, 131, 50);
itemStacks.set(1, recipe.getRecipeOutput());
addFluidTooltip(fluidStacks, ImmutableList.of(fluidIngredient), Collections.emptyList());
}
@Override
public void draw(FillingRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
AllGuiTextures.JEI_SLOT.draw(matrixStack, 26, 31);
AllGuiTextures.JEI_SLOT.draw(matrixStack, 26, 50);
getRenderedSlot(recipe, 0).draw(matrixStack, 131, 50);
AllGuiTextures.JEI_SHADOW.draw(matrixStack, 62, 57);
AllGuiTextures.JEI_DOWN_ARROW.draw(matrixStack, 126, 29);
spout.withFluids(recipe.getRequiredFluid()
.getMatchingFluidStacks())
.draw(matrixStack, getBackground().getWidth() / 2 - 13, 22);
}
}

View file

@ -0,0 +1,47 @@
package com.simibubi.create.compat.jei.category.animations;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.GuiGameElement;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.fluids.FluidStack;
public class AnimatedItemDrain extends AnimatedKinetics {
private FluidStack fluid;
public AnimatedItemDrain withFluid(FluidStack fluid) {
this.fluid = fluid;
return this;
}
@Override
public void draw(MatrixStack matrixStack, int xOffset, int yOffset) {
matrixStack.push();
matrixStack.translate(xOffset, yOffset, 100);
matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f));
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 20;
GuiGameElement.of(AllBlocks.ITEM_DRAIN.getDefaultState())
.scale(scale)
.render(matrixStack);
Impl buffer = IRenderTypeBuffer.immediate(Tessellator.getInstance()
.getBuffer());
MatrixStack ms = new MatrixStack();
ms.scale(scale, -scale, scale);
float from = 2/16f;
float to = 1f - from;
FluidRenderer.renderTiledFluidBB(fluid, from, from, from, to, 3/4f, to, buffer, ms, 0xf000f0, false);
buffer.draw();
matrixStack.pop();
}
}

View file

@ -0,0 +1,89 @@
package com.simibubi.create.compat.jei.category.animations;
import static com.simibubi.create.foundation.utility.AnimationTickHolder.ticks;
import java.util.List;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.GuiGameElement;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.IRenderTypeBuffer.Impl;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.fluids.FluidStack;
public class AnimatedSpout extends AnimatedKinetics {
private List<FluidStack> fluids;
public AnimatedSpout withFluids(List<FluidStack> fluids) {
this.fluids = fluids;
return this;
}
@Override
public void draw(MatrixStack matrixStack, int xOffset, int yOffset) {
matrixStack.push();
matrixStack.translate(xOffset, yOffset, 100);
matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f));
matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f));
int scale = 20;
GuiGameElement.of(AllBlocks.SPOUT.getDefaultState())
.scale(scale)
.render(matrixStack);
float cycle = (ticks + Minecraft.getInstance()
.getRenderPartialTicks()) % 30;
float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0;
squeeze *= 20;
matrixStack.push();
GuiGameElement.of(AllBlockPartials.SPOUT_TOP)
.scale(scale)
.render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0);
GuiGameElement.of(AllBlockPartials.SPOUT_MIDDLE)
.scale(scale)
.render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0);
GuiGameElement.of(AllBlockPartials.SPOUT_BOTTOM)
.scale(scale)
.render(matrixStack);
matrixStack.translate(0, -3 * squeeze / 32f, 0);
matrixStack.pop();
GuiGameElement.of(AllBlocks.DEPOT.getDefaultState())
.atLocal(0, 2, 0)
.scale(scale)
.render(matrixStack);
Impl buffer = IRenderTypeBuffer.immediate(Tessellator.getInstance()
.getBuffer());
matrixStack.push();
matrixStack.scale(16, -16, 16);
float from = 2/16f;
float to = 1f - from;
FluidRenderer.renderTiledFluidBB(fluids.get(0), from, from, from, to, to, to, buffer, matrixStack, 0xf000f0, false);
matrixStack.pop();
float width = 1 / 128f * squeeze;
matrixStack.translate(scale / 2f, scale * 1.5f, scale / 2f);
matrixStack.scale(16, -16, 16);
matrixStack.translate(-width / 2, 0, -width / 2);
FluidRenderer.renderTiledFluidBB(fluids.get(0), 0, -0.001f, 0, width, 2.001f, width, buffer, matrixStack, 0xf000f0,
false);
buffer.draw();
matrixStack.pop();
}
}

View file

@ -18,11 +18,17 @@ public class BasinOperatorBlockItem extends BlockItem {
@Override
public ActionResultType tryPlace(BlockItemUseContext context) {
BlockPos placedOnPos = context.getPos().offset(context.getFace().getOpposite());
BlockState placedOnState = context.getWorld().getBlockState(placedOnPos);
if (AllBlocks.BASIN.has(placedOnState)) {
if (context.getWorld().getBlockState(placedOnPos.up(2)).getMaterial().isReplaceable())
BlockPos placedOnPos = context.getPos()
.offset(context.getFace()
.getOpposite());
BlockState placedOnState = context.getWorld()
.getBlockState(placedOnPos);
if (AllBlocks.BASIN.has(placedOnState) || AllBlocks.BELT.has(placedOnState)
|| AllBlocks.DEPOT.has(placedOnState)) {
if (context.getWorld()
.getBlockState(placedOnPos.up(2))
.getMaterial()
.isReplaceable())
context = BlockItemUseContext.func_221536_a(context, placedOnPos.up(2), Direction.UP);
else
return ActionResultType.FAIL;

View file

@ -6,7 +6,7 @@ import java.util.Optional;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
import com.simibubi.create.content.contraptions.fluids.FluidFX;
import com.simibubi.create.content.contraptions.fluids.potion.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
import com.simibubi.create.foundation.advancement.AllTriggers;

View file

@ -1,15 +1,16 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
import java.util.List;
import java.util.Random;
import org.apache.commons.lang3.tuple.Pair;
import org.lwjgl.opengl.GL11;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import com.simibubi.create.CreateClient;
import com.simibubi.create.foundation.utility.MatrixStacker;
import com.simibubi.create.foundation.utility.SuperByteBuffer;
import com.simibubi.create.foundation.utility.SuperByteBufferCache;
import com.simibubi.create.foundation.utility.SuperByteBufferCache.Compartment;
import com.simibubi.create.foundation.utility.TileEntityRenderHelper;
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
@ -22,6 +23,7 @@ import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
@ -30,28 +32,40 @@ import net.minecraft.util.math.vector.Matrix4f;
import net.minecraft.world.LightType;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.template.Template.BlockInfo;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.model.data.EmptyModelData;
public class ContraptionRenderer {
public static final Compartment<Contraption> CONTRAPTION = new Compartment<>();
public static final Compartment<Pair<Contraption, Integer>> CONTRAPTION = new Compartment<>();
protected static PlacementSimulationWorld renderWorld;
public static void render(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
renderStructure(world, c, ms, msLocal, buffer);
renderTileEntities(world, c, ms, msLocal, buffer);
if (buffer instanceof IRenderTypeBuffer.Impl)
((IRenderTypeBuffer.Impl) buffer).draw();
renderStructure(world, c, ms, msLocal, buffer);
renderActors(world, c, ms, msLocal, buffer);
}
protected static void renderStructure(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) {
IVertexBuilder translucent = buffer.getBuffer(RenderType.getTranslucent());
SuperByteBuffer contraptionBuffer = CreateClient.bufferCache.get(CONTRAPTION, c, () -> buildStructureBuffer(c));
Matrix4f model = msLocal.peek()
.getModel();
contraptionBuffer.light(model)
.renderInto(ms, translucent);
SuperByteBufferCache bufferCache = CreateClient.bufferCache;
List<RenderType> blockLayers = RenderType.getBlockLayers();
buffer.getBuffer(RenderType.getSolid());
for (int i = 0; i < blockLayers.size(); i++) {
RenderType layer = blockLayers.get(i);
Pair<Contraption, Integer> key = Pair.of(c, i);
SuperByteBuffer contraptionBuffer = bufferCache.get(CONTRAPTION, key, () -> buildStructureBuffer(c, layer));
if (contraptionBuffer.isEmpty())
continue;
Matrix4f model = msLocal.peek()
.getModel();
contraptionBuffer.light(model)
.renderInto(ms, buffer.getBuffer(layer));
}
}
private static void renderTileEntities(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
@ -59,10 +73,11 @@ public class ContraptionRenderer {
TileEntityRenderHelper.renderTileEntities(world, c.customRenderTEs, ms, msLocal, buffer);
}
private static SuperByteBuffer buildStructureBuffer(Contraption c) {
private static SuperByteBuffer buildStructureBuffer(Contraption c, RenderType layer) {
if (renderWorld == null || renderWorld.getWrappedWorld() != Minecraft.getInstance().world)
renderWorld = new PlacementSimulationWorld(Minecraft.getInstance().world);
ForgeHooksClient.setRenderLayer(layer);
MatrixStack ms = new MatrixStack();
BlockRendererDispatcher dispatcher = Minecraft.getInstance()
.getBlockRendererDispatcher();
@ -79,7 +94,9 @@ public class ContraptionRenderer {
if (state.getRenderType() == BlockRenderType.ENTITYBLOCK_ANIMATED)
continue;
if (!RenderTypeLookup.canRenderInLayer(state, layer))
continue;
IBakedModel originalModel = dispatcher.getModelForState(state);
ms.push();
ms.translate(info.pos.getX(), info.pos.getY(), info.pos.getZ());

View file

@ -6,6 +6,7 @@ import java.util.List;
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -22,6 +23,7 @@ import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.ITextComponent;
public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity implements IBearingTileEntity {
@ -96,6 +98,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
public float getAngularSpeed() {
float speed = (isWindmill() ? getGeneratedSpeed() : getSpeed()) * 3 / 10f;
if (getSpeed() == 0)
speed = 0;
if (world.isRemote) {
speed *= ServerSpeedProvider.get();
speed += clientAngleDiff / 3f;
@ -256,4 +260,27 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
return running;
}
@Override
public boolean addToTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
if (super.addToTooltip(tooltip, isPlayerSneaking))
return true;
if (isPlayerSneaking)
return false;
if (isWindmill())
return false;
if (getSpeed() == 0)
return false;
if (running)
return false;
BlockState state = getBlockState();
if (!(state.getBlock() instanceof BearingBlock))
return false;
BlockState attachedState = world.getBlockState(pos.offset(state.get(BearingBlock.FACING)));
if (attachedState.getMaterial()
.isReplaceable())
return false;
TooltipHelper.addHint(tooltip, "hint.empty_bearing");
return true;
}
}

View file

@ -0,0 +1,35 @@
package com.simibubi.create.content.contraptions.fluids.recipe;
import java.util.ArrayList;
import java.util.List;
import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe;
import net.minecraft.client.resources.ReloadListener;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
public class FluidTransferRecipes {
public static List<ItemStack> POTION_ITEMS = new ArrayList<>();
public static List<Item> FILLED_BUCKETS = new ArrayList<>();
public static final ReloadListener<Object> LISTENER = new ReloadListener<Object>() {
@Override
protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) {
return new Object();
}
@Override
protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) {
POTION_ITEMS.clear();
FILLED_BUCKETS.clear();
}
};
}

View file

@ -1,4 +1,4 @@
package com.simibubi.create.content.contraptions.fluids.potion;
package com.simibubi.create.content.contraptions.fluids.recipe;
import java.util.ArrayList;
import java.util.Collection;
@ -11,6 +11,7 @@ import java.util.stream.Collectors;
import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe;
import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler;
import com.simibubi.create.content.contraptions.processing.HeatCondition;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.fluid.FluidIngredient;
@ -34,7 +35,7 @@ import net.minecraftforge.registries.ForgeRegistries;
public class PotionMixingRecipeManager {
public static Map<Item, List<MixingRecipe>> ALL = new HashMap<>();
public static List<MixingRecipe> getAllBrewingRecipes() {
List<MixingRecipe> mixingRecipes = new ArrayList<>();

View file

@ -12,7 +12,7 @@ import net.minecraft.util.text.StringTextComponent;
public interface IHaveGoggleInformation {
DecimalFormat decimalFormat = new DecimalFormat("#.##");
String spacing = " ";
public static String spacing = " ";
ITextComponent componentSpacing = new StringTextComponent(spacing);
/**

View file

@ -33,6 +33,7 @@ import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemHandlerHelper;
@ -56,6 +57,14 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
super.fillStateContainer(p_206840_1_.add(FACING));
}
@Override
public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) {
TileEntity tileEntity = world.getTileEntity(pos.up());
if (tileEntity instanceof BasinOperatingTileEntity)
return false;
return true;
}
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {

View file

@ -1,5 +1,7 @@
package com.simibubi.create.content.contraptions.processing.burner;
import java.util.Random;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
@ -17,6 +19,7 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.FlintAndSteelItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
@ -36,6 +39,8 @@ import net.minecraft.util.Hand;
import net.minecraft.util.IItemProvider;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.NonNullList;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
@ -43,6 +48,8 @@ import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.util.FakePlayer;
@MethodsReturnNonnullByDefault
@ -61,10 +68,9 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
super.fillStateContainer(builder);
builder.add(HEAT_LEVEL);
}
@Override
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState p_220082_4_,
boolean p_220082_5_) {
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) {
if (world.isRemote)
return;
TileEntity tileEntity = world.getTileEntity(pos.up());
@ -104,6 +110,19 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
boolean dontConsume = player.isCreative();
boolean forceOverflow = !(player instanceof FakePlayer);
if (!state.hasTileEntity()) {
if (heldItem.getItem() instanceof FlintAndSteelItem) {
world.playSound(player, pos, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F,
world.rand.nextFloat() * 0.4F + 0.8F);
if (world.isRemote)
return ActionResultType.SUCCESS;
heldItem.damageItem(1, player, p -> p.sendBreakAnimation(hand));
world.setBlockState(pos, AllBlocks.LIT_BLAZE_BURNER.getDefaultState());
return ActionResultType.SUCCESS;
}
return ActionResultType.PASS;
}
if (!tryInsert(state, world, pos, dontConsume ? heldItem.copy() : heldItem, forceOverflow, false))
return ActionResultType.PASS;
return ActionResultType.SUCCESS;
@ -121,8 +140,11 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
if (!burnerTE.tryUpdateFuel(stack, forceOverflow, simulate))
return false;
if (!simulate && !world.isRemote)
if (!simulate && !world.isRemote) {
world.playSound(null, pos, SoundEvents.ENTITY_BLAZE_SHOOT, SoundCategory.BLOCKS,
.125f + world.rand.nextFloat() * .125f, .75f - world.rand.nextFloat() * .25f);
stack.shrink(1);
}
return true;
}
@ -181,6 +203,18 @@ public class BlazeBurnerBlock extends Block implements ITE<BlazeBurnerTileEntity
return builder;
}
@OnlyIn(Dist.CLIENT)
public void animateTick(BlockState state, World world, BlockPos pos, Random random) {
if (random.nextInt(10) != 0)
return;
if (!state.get(HEAT_LEVEL)
.isAtLeast(HeatLevel.SMOULDERING))
return;
world.playSound((double) ((float) pos.getX() + 0.5F), (double) ((float) pos.getY() + 0.5F),
(double) ((float) pos.getZ() + 0.5F), SoundEvents.BLOCK_CAMPFIRE_CRACKLE, SoundCategory.BLOCKS,
0.5F + random.nextFloat(), random.nextFloat() * 0.7F + 0.6F, false);
}
public enum HeatLevel implements IStringSerializable {
NONE, SMOULDERING, FADING, KINDLED, SEETHING,;

View file

@ -0,0 +1,108 @@
package com.simibubi.create.content.contraptions.processing.burner;
import java.util.Random;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllItems;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public class LitBlazeBurnerBlock extends Block {
// 1.16: add a soul fire variant
// public enum FlameType implements IStringSerializable {
// REGULAR, SOULFIRE;
//
// @Override
// public String getName() {
// return Lang.asId(name());
// }
//
// }
public LitBlazeBurnerBlock(Properties p_i48440_1_) {
super(p_i48440_1_);
}
@Override
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
BlockRayTraceResult blockRayTraceResult) {
ItemStack heldItem = player.getHeldItem(hand);
// Check for 'Shovels'
if (!heldItem.canHarvestBlock(Blocks.SNOW.getDefaultState()))
return ActionResultType.PASS;
world.playSound(player, pos, SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, SoundCategory.BLOCKS, .5f, 2);
if (world.isRemote)
return ActionResultType.SUCCESS;
if (!player.isCreative())
heldItem.damageItem(1, player, p -> p.sendBreakAnimation(hand));
world.setBlockState(pos, AllBlocks.BLAZE_BURNER.getDefaultState());
return ActionResultType.SUCCESS;
}
@Override
public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context) {
return AllBlocks.BLAZE_BURNER.get()
.getShape(state, reader, pos, context);
}
@Override
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
PlayerEntity player) {
return AllItems.EMPTY_BLAZE_BURNER.asStack();
}
@OnlyIn(Dist.CLIENT)
public void animateTick(BlockState p_180655_1_, World world, BlockPos pos, Random random) {
world.addOptionalParticle(ParticleTypes.LARGE_SMOKE, true,
(double) pos.getX() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1),
(double) pos.getY() + random.nextDouble() + random.nextDouble(),
(double) pos.getZ() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1), 0.0D,
0.07D, 0.0D);
if (random.nextInt(10) == 0) {
world.playSound((double) ((float) pos.getX() + 0.5F), (double) ((float) pos.getY() + 0.5F),
(double) ((float) pos.getZ() + 0.5F), SoundEvents.BLOCK_CAMPFIRE_CRACKLE, SoundCategory.BLOCKS,
0.25F + random.nextFloat() * .25f, random.nextFloat() * 0.7F + 0.6F, false);
}
if (random.nextInt(5) == 0) {
for (int i = 0; i < random.nextInt(1) + 1; ++i) {
world.addParticle(ParticleTypes.LAVA, (double) ((float) pos.getX() + 0.5F),
(double) ((float) pos.getY() + 0.5F), (double) ((float) pos.getZ() + 0.5F),
(double) (random.nextFloat() / 2.0F), 5.0E-5D, (double) (random.nextFloat() / 2.0F));
}
}
}
@Override
public VoxelShape getCollisionShape(BlockState state, IBlockReader reader, BlockPos pos,
ISelectionContext context) {
return AllBlocks.BLAZE_BURNER.get()
.getCollisionShape(state, reader, pos, context);
}
}

View file

@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.relays.belt.transport;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour;
@ -14,18 +15,19 @@ import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.items.ItemHandlerHelper;
public class BeltFunnelInteractionHandler {
public static boolean checkForFunnels(BeltInventory beltInventory, TransportedItemStack currentItem,
float nextOffset) {
boolean beltMovementPositive = beltInventory.beltMovementPositive;
int firstUpcomingSegment = (int) (currentItem.beltPosition + (beltMovementPositive ? .5f : -.5f));
int firstUpcomingSegment = (int) Math.floor(currentItem.beltPosition);
int step = beltMovementPositive ? 1 : -1;
firstUpcomingSegment = MathHelper.clamp(firstUpcomingSegment, 0, beltInventory.belt.beltLength - 1);
for (int segment = firstUpcomingSegment; beltMovementPositive ? segment + .5f <= nextOffset
: segment + .5f >= nextOffset; segment += step) {
for (int segment = firstUpcomingSegment; beltMovementPositive ? segment <= nextOffset
: segment + 1 >= nextOffset; segment += step) {
BlockPos funnelPos = BeltHelper.getPositionForOffset(beltInventory.belt, segment)
.up();
World world = beltInventory.belt.getWorld();
@ -37,15 +39,25 @@ public class BeltFunnelInteractionHandler {
boolean blocking = funnelFacing == movementFacing.getOpposite();
if (funnelFacing == movementFacing)
continue;
if (funnelState.get(BeltFunnelBlock.SHAPE) == Shape.PUSHING)
continue;
currentItem.beltPosition = segment + .5f;
float funnelEntry = segment + .5f;
if (funnelState.get(BeltFunnelBlock.SHAPE) == Shape.EXTENDED)
funnelEntry += .499f * (beltMovementPositive ? -1 : 1);
boolean hasCrossed = nextOffset > funnelEntry && beltMovementPositive
|| nextOffset < funnelEntry && !beltMovementPositive;
if (!hasCrossed)
return false;
if (blocking)
currentItem.beltPosition = funnelEntry;
if (world.isRemote)
return blocking;
if (funnelState.get(BeltFunnelBlock.PUSHING))
return blocking;
if (BlockHelper.hasBlockStateProperty(funnelState, BeltFunnelBlock.POWERED) && funnelState.get(BeltFunnelBlock.POWERED))
return blocking;
if (world.isRemote || funnelState.method_28500(BeltFunnelBlock.POWERED).orElse(false))
if (blocking)
return true;
else
continue;
TileEntity te = world.getTileEntity(funnelPos);
if (!(te instanceof FunnelTileEntity))
@ -55,20 +67,41 @@ public class BeltFunnelInteractionHandler {
InvManipulationBehaviour inserting = funnelTE.getBehaviour(InvManipulationBehaviour.TYPE);
FilteringBehaviour filtering = funnelTE.getBehaviour(FilteringBehaviour.TYPE);
if (inserting == null)
return blocking;
if (filtering != null && !filtering.test(currentItem.stack))
return blocking;
if (inserting == null || filtering != null && !filtering.test(currentItem.stack))
if (blocking)
return true;
else
continue;
ItemStack before = currentItem.stack.copy();
ItemStack remainder = inserting.insert(before);
if (before.equals(remainder, false))
return blocking;
int amountToExtract = funnelTE.getAmountToExtract();
ItemStack toInsert = currentItem.stack.copy();
if (amountToExtract > toInsert.getCount())
if (blocking)
return true;
else
continue;
if (amountToExtract != -1)
toInsert.setCount(amountToExtract);
ItemStack remainder = inserting.insert(toInsert);
if (toInsert.equals(remainder, false))
if (blocking)
return true;
else
continue;
int notFilled = currentItem.stack.getCount() - toInsert.getCount();
if (!remainder.isEmpty()) {
remainder.grow(notFilled);
} else if (notFilled > 0)
remainder = ItemHandlerHelper.copyStackWithSize(currentItem.stack, notFilled);
funnelTE.flap(true);
currentItem.stack = remainder;
beltInventory.belt.sendData();
return true;
if (blocking)
return true;
}
return false;

View file

@ -292,8 +292,8 @@ public class BeltInventory {
BlockPos lastPosition = BeltHelper.getPositionForOffset(belt, lastOffset);
BlockPos nextPosition = BeltHelper.getPositionForOffset(belt, beltMovementPositive ? belt.beltLength : -1);
if (AllBlocks.BRASS_BELT_FUNNEL.has(world.getBlockState(lastPosition.up())))
return Ending.FUNNEL;
// if (AllBlocks.BRASS_BELT_FUNNEL.has(world.getBlockState(lastPosition.up())))
// return Ending.FUNNEL;
DirectBeltInputBehaviour inputBehaviour =
TileEntityBehaviour.get(world, nextPosition, DirectBeltInputBehaviour.TYPE);

View file

@ -0,0 +1,5 @@
package com.simibubi.create.content.contraptions.relays.elementary;
public class CogWheelPlacementHelper {
}

View file

@ -22,6 +22,7 @@ import net.minecraft.fluid.Fluids;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity;
@ -49,6 +50,11 @@ public class ShaftBlock extends RotatedPillarKineticBlock implements IWaterLogga
public static boolean isShaft(BlockState state) {
return AllBlocks.SHAFT.has(state);
}
@Override
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
return IWrenchableWithBracket.super.onWrenched(state, context);
}
@Override
public PushReaction getPushReaction(BlockState state) {

View file

@ -18,7 +18,7 @@ public class WrenchItemRenderer extends CustomRenderedItemModelRenderer<WrenchMo
float worldTime = AnimationTickHolder.getRenderTick();
float angle = worldTime * -.5f % 360;
float xOffset = -1/32f;
float xOffset = -1/16f;
ms.translate(-xOffset, 0, 0);
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(angle));
ms.translate(xOffset, 0, 0);

View file

@ -9,6 +9,7 @@ import java.util.Optional;
import javax.annotation.Nullable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
@ -19,6 +20,7 @@ import com.simibubi.create.foundation.item.ItemHelper;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
import com.simibubi.create.foundation.utility.ColorHelper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.CampfireBlock;
@ -65,12 +67,12 @@ public class InWorldProcessing {
FluidState fluidState = reader.getFluidState(pos);
if (fluidState.getFluid() == Fluids.WATER || fluidState.getFluid() == Fluids.FLOWING_WATER)
return Type.SPLASHING;
if (blockState.getBlock() == Blocks.FIRE
|| (blockState.getBlock() == Blocks.CAMPFIRE && blockState.get(CampfireBlock.LIT))
Block block = blockState.getBlock();
if (block == Blocks.FIRE || AllBlocks.LIT_BLAZE_BURNER.has(blockState)
|| (block == Blocks.CAMPFIRE && blockState.get(CampfireBlock.LIT))
|| getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING)
return Type.SMOKING;
if (blockState.getBlock() == Blocks.LAVA
|| getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING))
if (block == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING))
return Type.BLASTING;
return null;
}

View file

@ -14,6 +14,7 @@ import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform;
@ -412,7 +413,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity {
return false;
if (funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING) != side.getOpposite())
return false;
return !funnelState.get(BeltFunnelBlock.PUSHING);
return funnelState.get(BeltFunnelBlock.SHAPE) == Shape.EXTENDED;
}
@Override

View file

@ -5,6 +5,7 @@ import java.util.Map;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
@ -150,7 +151,8 @@ public class ChuteBlock extends Block implements IWrenchable, ITE<ChuteTileEntit
@Override
public void neighborChanged(BlockState p_220069_1_, World world, BlockPos pos, Block p_220069_4_,
BlockPos neighbourPos, boolean p_220069_6_) {
if (pos.down().equals(neighbourPos))
if (pos.down()
.equals(neighbourPos))
withTileEntityDo(world, pos, ChuteTileEntity::blockBelowChanged);
}
@ -211,7 +213,10 @@ public class ChuteBlock extends Block implements IWrenchable, ITE<ChuteTileEntit
if (connections.get(Direction.EAST) && connections.get(Direction.WEST))
return state.with(SHAPE, Shape.INTERSECTION);
if (amtConnections == 1 && connections.get(facing)
&& !(above.getBlock() instanceof ChuteBlock && above.get(FACING) == Direction.DOWN))
&& !(above.getBlock() instanceof ChuteBlock && above.get(FACING) == Direction.DOWN)
&& !(above.getBlock() instanceof FunnelBlock && FunnelBlock.getFunnelFacing(above)
.getAxis()
.isVertical()))
return state.with(SHAPE, Shape.NORMAL);
return state.with(SHAPE, Shape.INTERSECTION);
}

View file

@ -2,39 +2,58 @@ package com.simibubi.create.content.logistics.block.funnel;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock;
import com.simibubi.create.content.contraptions.relays.belt.BeltSlope;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.content.logistics.block.depot.DepotBlock;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.utility.BlockHelper;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.VoxelShaper;
import com.tterrag.registrate.util.entry.BlockEntry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.HorizontalBlock;
import net.minecraft.client.particle.ParticleManager;
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.EnumProperty;
import net.minecraft.state.Property;
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.IStringSerializable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock {
public abstract class BeltFunnelBlock extends HorizontalBlock implements IWrenchable {
public static final Property<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
private BlockEntry<? extends FunnelBlock> parent;
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
public static final EnumProperty<Shape> SHAPE = EnumProperty.create("shape", Shape.class);
public enum Shape implements IStringSerializable {
RETRACTED(AllShapes.BELT_FUNNEL_RETRACTED), EXTENDED(AllShapes.BELT_FUNNEL_EXTENDED);
RETRACTED(AllShapes.BELT_FUNNEL_RETRACTED),
EXTENDED(AllShapes.BELT_FUNNEL_EXTENDED),
PUSHING(AllShapes.BELT_FUNNEL_PERPENDICULAR),
PULLING(AllShapes.BELT_FUNNEL_PERPENDICULAR);
// CONNECTED(AllShapes.BELT_FUNNEL_CONNECTED);
VoxelShaper shaper;
@ -49,35 +68,31 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock {
}
public BeltFunnelBlock(BlockEntry<? extends FunnelBlock> parent, Properties p_i48377_1_) {
super(parent, p_i48377_1_);
setDefaultState(getDefaultState().with(SHAPE, Shape.RETRACTED));
super(p_i48377_1_);
this.parent = parent;
BlockState defaultState = getDefaultState().with(SHAPE, Shape.RETRACTED);
if (hasPoweredProperty())
defaultState = defaultState.with(POWERED, false);
setDefaultState(defaultState);
}
public abstract boolean hasPoweredProperty();
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
BlockState state = super.getStateForPlacement(ctx);
return getStateForPosition(ctx.getWorld(), ctx.getPos(), state, ctx.getFace());
}
public BlockState getStateForPosition(World world, BlockPos pos, BlockState defaultState, Direction facing) {
BlockState state = defaultState.with(HORIZONTAL_FACING, facing);
BlockPos posBelow = pos.down();
BlockState stateBelow = world.getBlockState(posBelow);
if (!AllBlocks.BELT.has(stateBelow))
return state;
TileEntity teBelow = world.getTileEntity(posBelow);
if (teBelow == null || !(teBelow instanceof BeltTileEntity))
return state;
BeltTileEntity beltTileEntity = (BeltTileEntity) teBelow;
if (beltTileEntity.getSpeed() == 0)
return state;
Direction movementFacing = beltTileEntity.getMovementFacing();
return state.with(PUSHING, movementFacing == facing);
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return AllTileEntities.FUNNEL.create();
}
@Override
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
super.fillStateContainer(p_206840_1_.add(SHAPE));
if (hasPoweredProperty())
p_206840_1_.add(POWERED);
super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, SHAPE));
}
@Override
@ -86,13 +101,72 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock {
return state.get(SHAPE).shaper.get(state.get(HORIZONTAL_FACING));
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
BlockState stateForPlacement = super.getStateForPlacement(ctx);
BlockPos pos = ctx.getPos();
World world = ctx.getWorld();
Direction facing = ctx.getFace();
if (hasPoweredProperty())
stateForPlacement = stateForPlacement.with(POWERED, world.isBlockPowered(pos));
BlockState state = stateForPlacement.with(HORIZONTAL_FACING, facing);
return state.with(SHAPE, getShapeForPosition(world, pos, facing));
}
public static Shape getShapeForPosition(IBlockReader world, BlockPos pos, Direction facing) {
BlockPos posBelow = pos.down();
BlockState stateBelow = world.getBlockState(posBelow);
if (!AllBlocks.BELT.has(stateBelow))
return Shape.PUSHING;
Direction movementFacing = stateBelow.get(BeltBlock.HORIZONTAL_FACING);
return movementFacing.getAxis() != facing.getAxis() ? Shape.PUSHING : Shape.RETRACTED;
}
@Override
public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.hasTileEntity() && (state.getBlock() != newState.getBlock() && !FunnelBlock.isFunnel(newState)
|| !newState.hasTileEntity())) {
TileEntityBehaviour.destroy(world, pos, FilteringBehaviour.TYPE);
world.removeTileEntity(pos);
}
}
@Override
@OnlyIn(Dist.CLIENT)
public boolean addDestroyEffects(BlockState state, World world, BlockPos pos, ParticleManager manager) {
BlockHelper.addReducedDestroyEffects(state, world, pos, manager);
return true;
}
@Override
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
PlayerEntity player) {
return parent.asStack();
}
@Override
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world,
BlockPos pos, BlockPos p_196271_6_) {
if (direction == state.get(HORIZONTAL_FACING))
return updateShape(state, world, pos);
else
return super.updatePostPlacement(state, direction, neighbour, world, pos, p_196271_6_);
if (!isOnValidBelt(state, world, pos)) {
BlockState parentState = parent.getDefaultState();
if (state.method_28500(POWERED).orElse(false))
parentState = parentState.with(POWERED, true);
return parentState.with(FunnelBlock.FACING, state.get(HORIZONTAL_FACING));
}
Shape updatedShape = getShapeForPosition(world, pos, state.get(HORIZONTAL_FACING));
Shape currentShape = state.get(SHAPE);
if (updatedShape == currentShape)
return state;
// Don't revert wrenched states
if (updatedShape == Shape.PUSHING && currentShape == Shape.PULLING)
return state;
if (updatedShape == Shape.RETRACTED && currentShape == Shape.EXTENDED)
return state;
return state.with(SHAPE, updatedShape);
}
public static boolean isOnValidBelt(BlockState state, IWorldReader world, BlockPos pos) {
@ -106,45 +180,44 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock {
return true;
}
public static BlockState updateShape(BlockState state, IBlockReader world, BlockPos pos) {
state = state.with(SHAPE, Shape.RETRACTED);
Direction horizontalFacing = state.get(HORIZONTAL_FACING);
BlockState below = world.getBlockState(pos.down());
if (below.getBlock() instanceof BeltBlock && below.get(BeltBlock.HORIZONTAL_FACING)
.getAxis() != horizontalFacing.getAxis())
return state;
BlockState neighbour = world.getBlockState(pos.offset(horizontalFacing));
if (canConnectTo(state, neighbour))
return state.with(SHAPE, Shape.EXTENDED);
return state;
}
private static boolean canConnectTo(BlockState state, BlockState neighbour) {
if (neighbour.getBlock() instanceof BeltTunnelBlock)
return true;
if (neighbour.getBlock() instanceof BeltFunnelBlock
&& neighbour.get(HORIZONTAL_FACING) == state.get(HORIZONTAL_FACING)
.getOpposite())
return true;
return false;
@Override
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) {
if (!hasPoweredProperty())
return;
if (worldIn.isRemote)
return;
boolean previouslyPowered = state.get(POWERED);
if (previouslyPowered != worldIn.isBlockPowered(pos))
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
}
@Override
public void onReplaced(BlockState p_196243_1_, World p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_,
boolean p_196243_5_) {
if (p_196243_1_.hasTileEntity()
&& (p_196243_1_.getBlock() != p_196243_4_.getBlock() && !FunnelBlock.isFunnel(p_196243_4_)
|| !p_196243_4_.hasTileEntity())) {
TileEntityBehaviour.destroy(p_196243_2_, p_196243_3_, FilteringBehaviour.TYPE);
p_196243_2_.removeTileEntity(p_196243_3_);
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
World world = context.getWorld();
if (world.isRemote)
return ActionResultType.SUCCESS;
Shape shape = state.get(SHAPE);
Shape newShape = shape;
if (shape == Shape.PULLING)
newShape = Shape.PUSHING;
else if (shape == Shape.PUSHING)
newShape = Shape.PULLING;
else if (shape == Shape.EXTENDED)
newShape = Shape.RETRACTED;
else if (shape == Shape.RETRACTED) {
BlockState belt = world.getBlockState(context.getPos().down());
if (belt.getBlock() instanceof BeltBlock && belt.get(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL)
newShape = Shape.RETRACTED;
else
newShape = Shape.EXTENDED;
}
}
@Override
protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) {
return isOnValidBelt(state, world, pos);
if (newShape != shape)
world
.setBlockState(context.getPos(), state.with(SHAPE, newShape));
return ActionResultType.SUCCESS;
}
}

View file

@ -33,20 +33,19 @@ public class BeltFunnelGenerator extends SpecialBlockStateGen {
@Override
public <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
BlockState state) {
boolean pushing = state.get(BeltFunnelBlock.PUSHING);
boolean powered = state.method_28500(BlockStateProperties.POWERED).orElse(false);
String shapeName = state.get(BeltFunnelBlock.SHAPE)
.getString();
String pushingSuffix = (pushing ? "push" : "pull") ;
String poweredSuffix = powered ? "_powered" : "";
String name = ctx.getName() + "_" + pushingSuffix + poweredSuffix;
String textureName = type + "_funnel_" + pushingSuffix;
String name = ctx.getName() + "_" + poweredSuffix;
return prov.models()
.withExistingParent(name + "_" + shapeName, prov.modLoc("block/belt_funnel/block_" + shapeName))
.texture("particle", materialBlockTexture)
.texture("2", prov.modLoc("block/" + textureName))
.texture("2", prov.modLoc("block/" + type + "_funnel_neutral"))
.texture("2_1", prov.modLoc("block/" + type + "_funnel_push"))
.texture("2_2", prov.modLoc("block/" + type + "_funnel_pull"))
.texture("3", prov.modLoc("block/" + type + "_funnel_back"))
.texture("5", prov.modLoc("block/" + type + "_funnel_tall" + poweredSuffix))
.texture("6", prov.modLoc("block/" + type + "_funnel" + poweredSuffix))

View file

@ -165,7 +165,7 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE<
if (direction == Direction.DOWN) {
BlockState equivalentFunnel = getEquivalentBeltFunnel(null, null, state);
if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos))
return BeltFunnelBlock.updateShape(equivalentFunnel, world, pos);
return equivalentFunnel.with(BeltFunnelBlock.SHAPE, BeltFunnelBlock.getShapeForPosition(world, pos, facing));
}
}
return state;
@ -178,7 +178,7 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE<
Block block = world.getBlockState(pos.offset(state.get(FACING)
.getOpposite()))
.getBlock();
return !(block instanceof FunnelBlock) && !(block instanceof HorizontalInteractionFunnelBlock);
return !(block instanceof FunnelBlock) && !(block instanceof BeltFunnelBlock);
}
@Nullable
@ -206,7 +206,7 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE<
@Nullable
public static boolean isFunnel(BlockState state) {
return state.getBlock() instanceof FunnelBlock || state.getBlock() instanceof HorizontalInteractionFunnelBlock;
return state.getBlock() instanceof FunnelBlock || state.getBlock() instanceof BeltFunnelBlock;
}
@Override

View file

@ -1,7 +1,6 @@
package com.simibubi.create.content.logistics.block.funnel;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
import com.simibubi.create.foundation.utility.AngleHelper;
@ -24,11 +23,21 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided {
Direction funnelFacing = FunnelBlock.getFunnelFacing(state);
float stateAngle = AngleHelper.horizontalAngle(funnelFacing);
if (AllBlocks.BRASS_BELT_FUNNEL.has(state))
if (state.get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED)
return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 13, 7.5f), horizontalAngle, Axis.Y);
else
if (state.getBlock() instanceof BeltFunnelBlock) {
switch (state.get(BeltFunnelBlock.SHAPE)) {
// case CONNECTED:
// return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 15.5f, 8), stateAngle, Axis.Y);
case EXTENDED:
return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 15.5f, 13), stateAngle, Axis.Y);
case PULLING:
case PUSHING:
return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 12.1, 8.7f), horizontalAngle, Axis.Y);
default:
case RETRACTED:
return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 13, 7.5f), horizontalAngle, Axis.Y);
}
}
if (!funnelFacing.getAxis()
.isHorizontal()) {
@ -40,14 +49,10 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided {
.getAxis());
if (funnelFacing.getAxis() == Axis.Z)
verticalDirection = verticalDirection.getOpposite();
boolean reverse = state.getBlock() instanceof HorizontalInteractionFunnelBlock
&& !state.get(HorizontalInteractionFunnelBlock.PUSHING);
float yRot = -AngleHelper.horizontalAngle(verticalDirection) + 180;
float xRot = -90;
boolean alongX = funnelFacing.getAxis() == Axis.X;
float zRotLast = alongX ^ funnelFacing.getAxisDirection() == AxisDirection.POSITIVE ? 180 : 0;
if (reverse)
zRotLast += 180;
Vector3d vec = VecHelper.voxelSpace(8, 13, .5f);
vec = vec.subtract(.5, .5, .5);
@ -63,33 +68,37 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided {
protected void rotate(BlockState state, MatrixStack ms) {
Direction facing = FunnelBlock.getFunnelFacing(state);
if (!facing.getAxis()
.isVertical()
&& !(AllBlocks.BRASS_BELT_FUNNEL.has(state) && state.get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED)) {
Direction verticalDirection = DirectionHelper.rotateAround(getSide(), facing.rotateY()
.getAxis());
if (facing.getAxis() == Axis.Z)
verticalDirection = verticalDirection.getOpposite();
boolean reverse = state.getBlock() instanceof HorizontalInteractionFunnelBlock
&& !state.get(HorizontalInteractionFunnelBlock.PUSHING);
float yRot = -AngleHelper.horizontalAngle(verticalDirection) + 180;
float xRot = -90;
boolean alongX = facing.getAxis() == Axis.X;
float zRotLast = alongX ^ facing.getAxisDirection() == AxisDirection.POSITIVE ? 180 : 0;
if (reverse)
zRotLast += 180;
MatrixStacker.of(ms)
.rotateZ(alongX ? xRot : 0)
.rotateX(alongX ? 0 : xRot)
.rotateY(yRot)
.rotateZ(zRotLast);
if (facing.getAxis()
.isVertical()) {
super.rotate(state, ms);
return;
}
super.rotate(state, ms);
boolean isBeltFunnel = state.getBlock() instanceof BeltFunnelBlock;
if (isBeltFunnel && state.get(BeltFunnelBlock.SHAPE) != Shape.EXTENDED) {
Shape shape = state.get(BeltFunnelBlock.SHAPE);
super.rotate(state, ms);
if (shape == Shape.PULLING || shape == Shape.PUSHING)
MatrixStacker.of(ms).rotateX(-22.5f);
return;
}
Direction verticalDirection = DirectionHelper.rotateAround(getSide(), facing.rotateY()
.getAxis());
if (facing.getAxis() == Axis.Z)
verticalDirection = verticalDirection.getOpposite();
float yRot = -AngleHelper.horizontalAngle(verticalDirection) + 180;
float xRot = -90;
boolean alongX = facing.getAxis() == Axis.X;
float zRotLast = alongX ^ facing.getAxisDirection() == AxisDirection.POSITIVE ? 180 : 0;
MatrixStacker.of(ms)
.rotateZ(alongX ? xRot : 0)
.rotateX(alongX ? 0 : xRot)
.rotateY(yRot)
.rotateZ(zRotLast);
}
@Override
@ -99,9 +108,8 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided {
if (facing == null)
return false;
if (AllBlocks.BRASS_BELT_FUNNEL.has(state))
return state.get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED ? direction == facing
: direction == Direction.UP;
if (state.getBlock() instanceof BeltFunnelBlock)
return state.get(BeltFunnelBlock.SHAPE) != Shape.EXTENDED ? direction == facing : direction == Direction.UP;
return direction.getAxis() != facing.getAxis();
}

View file

@ -1,9 +1,12 @@
package com.simibubi.create.content.logistics.block.funnel;
import com.simibubi.create.content.logistics.block.chute.ChuteTileEntity;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.BlockItem;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@ -37,8 +40,12 @@ public class FunnelItem extends BlockItem {
return state;
Direction direction = state.get(FunnelBlock.FACING);
if (!direction.getAxis()
.isHorizontal())
.isHorizontal()) {
TileEntity tileEntity = world.getTileEntity(pos.offset(direction.getOpposite()));
if (tileEntity instanceof ChuteTileEntity && ((ChuteTileEntity) tileEntity).getItemMotion() > 0)
state = state.with(FunnelBlock.FACING, direction.getOpposite());
return state;
}
FunnelBlock block = (FunnelBlock) getBlock();
Block beltFunnelBlock = block.getEquivalentBeltFunnel(world, pos, state)
@ -46,7 +53,7 @@ public class FunnelItem extends BlockItem {
BlockState equivalentBeltFunnel = beltFunnelBlock.getStateForPlacement(ctx)
.with(BeltFunnelBlock.HORIZONTAL_FACING, direction);
if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, world, pos))
return BeltFunnelBlock.updateShape(equivalentBeltFunnel, world, pos);
return equivalentBeltFunnel;
return state;
}

View file

@ -42,6 +42,7 @@ public class FunnelRenderer extends SmartTileEntityRenderer<FunnelTileEntity> {
msr.centre()
.rotateY(horizontalAngle)
.unCentre();
ms.translate(0, 0, -te.getFlapOffset());
for (int segment = 0; segment <= 3; segment++) {
ms.push();

View file

@ -5,10 +5,16 @@ import java.util.function.Function;
import java.util.function.Predicate;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
import com.simibubi.create.content.contraptions.goggles.IHaveHoveringInformation;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.contraptions.relays.belt.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.config.AllConfigs;
import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
@ -22,11 +28,17 @@ 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;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
public class FunnelTileEntity extends SmartTileEntity {
public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringInformation {
private FilteringBehaviour filtering;
private InvManipulationBehaviour invManipulation;
@ -57,8 +69,16 @@ public class FunnelTileEntity extends SmartTileEntity {
if (FunnelBlock.getFunnelFacing(state) == Direction.UP && autoExtractor.hasInventory())
return Mode.HOPPER;
if (state.getBlock() instanceof BeltFunnelBlock) {
boolean pushing = state.get(BeltFunnelBlock.PUSHING);
return pushing ? Mode.PUSHING_TO_BELT : Mode.TAKING_FROM_BELT;
Shape shape = state.get(BeltFunnelBlock.SHAPE);
if (shape == Shape.PULLING)
return Mode.TAKING_FROM_BELT;
if (shape == Shape.PUSHING)
return Mode.PUSHING_TO_BELT;
BeltTileEntity belt = BeltHelper.getSegmentTE(world, pos.down());
if (belt != null)
return belt.getMovementFacing() == state.get(BeltFunnelBlock.HORIZONTAL_FACING) ? Mode.PUSHING_TO_BELT
: Mode.TAKING_FROM_BELT;
}
return Mode.COLLECT;
}
@ -140,9 +160,7 @@ public class FunnelTileEntity extends SmartTileEntity {
if (!inputBehaviour.canInsertFromSide(facing))
return;
int amountToExtract = invManipulation.getAmountFromFilter();
if (!filtering.isActive())
amountToExtract = 1;
int amountToExtract = getAmountToExtract();
ItemStack stack = invManipulation.extract(amountToExtract, s -> inputBehaviour.handleInsertion(s, facing, true)
.isEmpty());
if (stack.isEmpty())
@ -153,6 +171,15 @@ public class FunnelTileEntity extends SmartTileEntity {
startCooldown();
}
public int getAmountToExtract() {
if (!supportsAmountOnFilter())
return -1;
int amountToExtract = invManipulation.getAmountFromFilter();
if (!filtering.isActive())
amountToExtract = 1;
return amountToExtract;
}
private int startCooldown() {
return extractionCooldown = AllConfigs.SERVER.logistics.defaultExtractionTimer.get();
}
@ -194,12 +221,18 @@ public class FunnelTileEntity extends SmartTileEntity {
private boolean supportsAmountOnFilter() {
BlockState blockState = getBlockState();
boolean pushingToBelt = blockState.getBlock() instanceof HorizontalInteractionFunnelBlock
&& blockState.get(HorizontalInteractionFunnelBlock.PUSHING);
boolean beltFunnelsupportsAmount = false;
if (blockState.getBlock() instanceof BeltFunnelBlock) {
Shape shape = blockState.get(BeltFunnelBlock.SHAPE);
if (shape == Shape.PUSHING)
beltFunnelsupportsAmount = true;
else
beltFunnelsupportsAmount = BeltHelper.getSegmentTE(world, pos.down()) != null;
}
boolean hopper = FunnelBlock.getFunnelFacing(blockState) == Direction.UP && !world.getBlockState(pos.up())
.getMaterial()
.isReplaceable();
return pushingToBelt || hopper;
return beltFunnelsupportsAmount || hopper;
}
private boolean supportsDirectBeltInput(Direction side) {
@ -236,8 +269,26 @@ public class FunnelTileEntity extends SmartTileEntity {
}
public boolean hasFlap() {
return getBlockState().getBlock() instanceof BeltFunnelBlock
&& getBlockState().get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED;
BlockState blockState = getBlockState();
if (!(blockState.getBlock() instanceof BeltFunnelBlock))
return false;
return true;
}
public float getFlapOffset() {
BlockState blockState = getBlockState();
if (!(blockState.getBlock() instanceof BeltFunnelBlock))
return 0;
switch (blockState.get(BeltFunnelBlock.SHAPE)) {
default:
case RETRACTED:
return 0;
case EXTENDED:
return 8 / 16f;
case PULLING:
case PUSHING:
return -2 / 16f;
}
}
@Override
@ -270,4 +321,46 @@ public class FunnelTileEntity extends SmartTileEntity {
.onFunnelTransfer(world, pos, stack);
}
@Override
// Hint players not to use funnels like 0.2 transposers
public boolean addToTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
if (isPlayerSneaking)
return false;
BlockState state = getBlockState();
if (!(state.getBlock() instanceof FunnelBlock))
return false;
Direction funnelFacing = FunnelBlock.getFunnelFacing(state);
if (world.getBlockState(pos.offset(funnelFacing.getOpposite()))
.getMaterial()
.isReplaceable())
return false;
BlockPos inputPos = pos.offset(funnelFacing);
TileEntity tileEntity = world.getTileEntity(inputPos);
if (tileEntity == null)
return false;
if (tileEntity instanceof BeltTileEntity)
return false;
if (tileEntity instanceof SawTileEntity)
return false;
if (tileEntity instanceof ChuteTileEntity)
return false;
LazyOptional<IItemHandler> capability = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY);
if (!capability.isPresent())
return false;
if (funnelFacing == Direction.DOWN) {
TooltipHelper.addHint(tooltip, "hint.upward_funnel");
return true;
}
if (!funnelFacing.getAxis()
.isHorizontal())
return false;
TooltipHelper.addHint(tooltip, "hint.horizontal_funnel");
return true;
}
}

View file

@ -14,6 +14,7 @@ import com.simibubi.create.foundation.utility.Lang;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@ -92,14 +93,28 @@ public class ArmInteractionPointHandler {
int removed = 0;
for (Iterator<ArmInteractionPoint> iterator = currentSelection.iterator(); iterator.hasNext();) {
ArmInteractionPoint point = iterator.next();
if (point.pos.withinDistance(pos, ArmTileEntity.getRange()))
if (point.pos.withinDistance(pos, ArmTileEntity.getRange()))
continue;
iterator.remove();
removed++;
}
if (removed > 0)
Minecraft.getInstance().player.sendStatusMessage(Lang.translate("mechanical_arm.points_outside_range", removed).formatted(TextFormatting.RED), true);
ClientPlayerEntity player = Minecraft.getInstance().player;
if (removed > 0) {
player.sendStatusMessage(Lang.createTranslationTextComponent("mechanical_arm.points_outside_range", removed)
.formatted(TextFormatting.RED), true);
} else {
int inputs = 0;
int outputs = 0;
for (ArmInteractionPoint armInteractionPoint : currentSelection) {
if (armInteractionPoint.mode == Mode.DEPOSIT)
outputs++;
else
inputs++;
}
player.sendStatusMessage(Lang.createTranslationTextComponent("mechanical_arm.summary", inputs, outputs)
.formatted(TextFormatting.WHITE), true);
}
AllPackets.channel.sendToServer(new ArmPlacementPacket(currentSelection, pos));
currentSelection.clear();

View file

@ -12,6 +12,7 @@ import com.simibubi.create.foundation.advancement.AllTriggers;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.gui.AllIcons;
import com.simibubi.create.foundation.gui.widgets.InterpolatedAngle;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform;
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions;
@ -32,6 +33,7 @@ import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.util.Constants.NBT;
@ -137,7 +139,7 @@ public class ArmTileEntity extends KineticTileEntity {
sendData();
}
}
@Override
@OnlyIn(Dist.CLIENT)
public AxisAlignedBB getRenderBoundingBox() {
@ -202,7 +204,7 @@ public class ArmTileEntity extends KineticTileEntity {
protected void searchForItem() {
if (redstoneLocked)
return;
boolean foundInput = false;
// for round robin, we start looking after the last used index, for default we
// start at 0;
@ -256,7 +258,7 @@ public class ArmTileEntity extends KineticTileEntity {
ArmInteractionPoint armInteractionPoint = outputs.get(i);
if (!armInteractionPoint.isStillValid(world))
continue;
ItemStack remainder = armInteractionPoint.insert(world, held, true);
if (remainder.equals(heldItem, false))
continue;
@ -345,7 +347,7 @@ public class ArmTileEntity extends KineticTileEntity {
}
return stack;
}
public void redstoneUpdate() {
if (world.isRemote)
return;
@ -441,6 +443,21 @@ public class ArmTileEntity extends KineticTileEntity {
return AllConfigs.SERVER.logistics.mechanicalArmRange.get();
}
@Override
public boolean addToTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
if (super.addToTooltip(tooltip, isPlayerSneaking))
return true;
if (isPlayerSneaking)
return false;
if (!inputs.isEmpty())
return false;
if (!outputs.isEmpty())
return false;
TooltipHelper.addHint(tooltip, "hint.mechanical_arm_no_targets");
return true;
}
private class SelectionModeValueBox extends CenteredSideValueBoxTransform {
public SelectionModeValueBox() {

View file

@ -4,7 +4,8 @@ import com.simibubi.create.Create;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionHandler;
import com.simibubi.create.content.contraptions.components.structureMovement.train.CouplingPhysics;
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController;
import com.simibubi.create.content.contraptions.fluids.potion.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.fluids.recipe.FluidTransferRecipes;
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
import com.simibubi.create.content.contraptions.wrench.WrenchItem;
import com.simibubi.create.content.schematics.ServerSchematicLoader;
import com.simibubi.create.foundation.command.AllCommands;
@ -90,6 +91,7 @@ public class CommonEvents {
public static void registerReloadListeners(AddReloadListenerEvent event) {
event.addListener(RecipeFinder.LISTENER);
event.addListener(PotionMixingRecipeManager.LISTENER);
event.addListener(FluidTransferRecipes.LISTENER);
}
@SubscribeEvent

View file

@ -21,9 +21,8 @@ public class CrushingRecipeGen extends ProcessingRecipeGen {
.output(.25f, Items.BLAZE_POWDER, 3)),
PRISMARINE_CRYSTALS = create(() -> Items.PRISMARINE_CRYSTALS, b -> b.duration(150)
.output(Items.PRISMARINE_SHARD, 2)
.output(.75f, Items.QUARTZ, 2)
.output(.25f, Items.PRISMARINE_SHARD, 2)
.output(1f, Items.QUARTZ, 1)
.output(.5f, Items.QUARTZ, 2)
.output(.1f, Items.GLOWSTONE_DUST, 2)),
OBSIDIAN = create(() -> Blocks.OBSIDIAN, b -> b.duration(500)

View file

@ -1,5 +1,8 @@
package com.simibubi.create.foundation.item;
import static net.minecraft.util.text.TextFormatting.GOLD;
import static net.minecraft.util.text.TextFormatting.GRAY;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -12,6 +15,7 @@ import com.simibubi.create.AllItems;
import com.simibubi.create.content.AllSections;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineBlock;
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
import com.simibubi.create.content.curiosities.tools.AllToolTiers;
import com.simibubi.create.foundation.item.ItemDescription.Palette;
import com.simibubi.create.foundation.utility.Lang;
@ -46,6 +50,15 @@ public class TooltipHelper {
.formatted(colorFormat)).formatted(TextFormatting.DARK_GRAY);
}
public static void addHint(List<ITextComponent> tooltip, String hintKey, Object... messageParams) {
ITextComponent spacing = IHaveGoggleInformation.componentSpacing;
tooltip.add(spacing.copy().append(Lang.translate(hintKey + ".title")).formatted(GOLD));
ITextComponent hint = Lang.translate(hintKey);
List<ITextComponent> cutComponent = TooltipHelper.cutTextComponent(spacing.copy().append(hint), GRAY, TextFormatting.WHITE);
for (int i = 0; i < cutComponent.size(); i++)
tooltip.add((i == 0 ? StringTextComponent.EMPTY : spacing).copy().append(cutComponent.get(i)));
}
public static void referTo(IItemProvider item, Supplier<? extends IItemProvider> itemWithTooltip) {
tooltipReferrals.put(item.asItem(), () -> itemWithTooltip.get()
.asItem()

View file

@ -19,6 +19,7 @@ import net.minecraft.util.Direction;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.ItemHandlerHelper;
public class FilteringBehaviour extends TileEntityBehaviour {
@ -105,7 +106,7 @@ public class FilteringBehaviour extends TileEntityBehaviour {
recipeFilter = true;
return this;
}
public FilteringBehaviour forFluids() {
fluidFilter = true;
return this;
@ -142,9 +143,11 @@ public class FilteringBehaviour extends TileEntityBehaviour {
}
public void setFilter(ItemStack stack) {
boolean confirm = ItemHandlerHelper.canItemStacksStack(stack, filter);
filter = stack.copy();
callback.accept(filter);
count = (filter.getItem() instanceof FilterItem) ? 0 : Math.min(stack.getCount(), stack.getMaxStackSize());
count = !confirm ? 0
: (filter.getItem() instanceof FilterItem) ? 0 : Math.min(stack.getCount(), stack.getMaxStackSize());
forceClientState = true;
tileEntity.markDirty();
@ -177,7 +180,7 @@ public class FilteringBehaviour extends TileEntityBehaviour {
public boolean test(ItemStack stack) {
return !isActive() || filter.isEmpty() || FilterItem.test(tileEntity.getWorld(), stack, filter);
}
public boolean test(FluidStack stack) {
return !isActive() || filter.isEmpty() || FilterItem.test(tileEntity.getWorld(), stack, filter);
}

View file

@ -5,6 +5,7 @@ import com.simibubi.create.content.logistics.item.filter.FilterItem;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform;
import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform.Sided;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.RaycastHelper;
import net.minecraft.client.Minecraft;
@ -19,6 +20,9 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@ -26,6 +30,7 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.items.ItemHandlerHelper;
@EventBusSubscriber
public class FilteringHandler {
@ -56,27 +61,43 @@ public class FilteringHandler {
return;
if (behaviour.slotPositioning instanceof ValueBoxTransform.Sided)
((Sided) behaviour.slotPositioning).fromSide(ray.getFace());
if (!behaviour.testHit(ray.getHitVec()))
return;
if (behaviour.testHit(ray.getHitVec())) {
if (event.getSide() != LogicalSide.CLIENT) {
ItemStack heldItem = player.getHeldItem(hand)
.copy();
if (!player.isCreative()) {
if (behaviour.getFilter()
.getItem() instanceof FilterItem)
player.inventory.placeItemBackInInventory(world, behaviour.getFilter());
if (heldItem.getItem() instanceof FilterItem)
player.getHeldItem(hand)
.shrink(1);
}
if (heldItem.getItem() instanceof FilterItem)
heldItem.setCount(1);
behaviour.setFilter(heldItem);
ItemStack toApply = player.getHeldItem(hand)
.copy();
if (event.getSide() != LogicalSide.CLIENT) {
if (!player.isCreative()) {
if (behaviour.getFilter()
.getItem() instanceof FilterItem)
player.inventory.placeItemBackInInventory(world, behaviour.getFilter());
if (toApply.getItem() instanceof FilterItem)
player.getHeldItem(hand)
.shrink(1);
}
event.setCanceled(true);
event.setCancellationResult(ActionResultType.SUCCESS);
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .1f);
if (toApply.getItem() instanceof FilterItem)
toApply.setCount(1);
behaviour.setFilter(toApply);
} else {
ItemStack filter = behaviour.getFilter();
String feedback = "apply_click_again";
if (toApply.getItem() instanceof FilterItem || !behaviour.isCountVisible())
feedback = "apply";
else if (ItemHandlerHelper.canItemStacksStack(toApply, filter))
feedback = "apply_count";
String translationKey = world.getBlockState(pos)
.getBlock()
.getTranslationKey();
ITextComponent formattedText = new TranslationTextComponent(translationKey);
player.sendStatusMessage(Lang.createTranslationTextComponent("logistics.filter." + feedback, formattedText)
.formatted(TextFormatting.WHITE), true);
}
event.setCanceled(true);
event.setCancellationResult(ActionResultType.SUCCESS);
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .1f);
}
@OnlyIn(Dist.CLIENT)

View file

@ -0,0 +1,179 @@
package com.simibubi.create.foundation.utility;
import com.google.common.collect.ImmutableList;
import com.simibubi.create.Create;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.HashMap;
import java.util.Map;
import static com.simibubi.create.AllBlocks.*;
import static com.simibubi.create.AllItems.*;
import static com.simibubi.create.content.palettes.AllPaletteBlocks.*;
@Mod.EventBusSubscriber
@SuppressWarnings("unused")
public class RemapHelper {
private static final Map<String, ResourceLocation> reMap = new HashMap<>();
static {
reMap.put("toggle_latch", POWERED_TOGGLE_LATCH.getId());
// reMap.put("linked_extractor", );
reMap.put("limestone_stairs", Create.asResource("polished_limestone_stairs"));
// reMap.put("window_in_a_block", );
reMap.put("weathered_limestone_layers", Create.asResource("layered_weathered_limestone"));
reMap.put("stockswitch", STOCKPILE_SWITCH.getId());
reMap.put("indented_gabbro_slab", Create.asResource("polished_gabbro_slab"));
// reMap.put("vertical_extractor", );
reMap.put("andesite_layers", Create.asResource("layered_andesite"));
reMap.put("scoria_layers", Create.asResource("layered_scoria"));
// reMap.put("extractor", );
// reMap.put("linked_transposer", );
reMap.put("dark_scoria_tiles_stairs", Create.asResource("dark_scoria_bricks_stairs"));
reMap.put("redstone_latch", POWERED_LATCH.getId());
reMap.put("oak_glass", OAK_WINDOW.getId());
reMap.put("spruce_glass_pane", SPRUCE_WINDOW_PANE.getId());
reMap.put("dolomite_stairs", Create.asResource("polished_dolomite_stairs"));
reMap.put("contact", REDSTONE_CONTACT.getId());
reMap.put("paved_gabbro_bricks", Create.asResource("paved_gabbro"));
reMap.put("slightly_mossy_gabbro_bricks", Create.asResource("mossy_gabbro"));
reMap.put("limestone_wall", Create.asResource("polished_limestone_wall"));
reMap.put("acacia_glass_pane", ACACIA_WINDOW_PANE.getId());
reMap.put("dark_oak_glass", DARK_OAK_WINDOW.getId());
// reMap.put("vertical_linked_extractor", );
// reMap.put("vertical_funnel", );
// reMap.put("vertical_linked_transposer", );
reMap.put("dark_oak_glass_pane", DARK_OAK_WINDOW_PANE.getId());
reMap.put("belt_funnel", BRASS_BELT_FUNNEL.getId());
reMap.put("dark_scoria_tiles", Create.asResource("dark_scoria_bricks"));
reMap.put("acacia_glass", ACACIA_WINDOW.getId());
reMap.put("dark_scoria_tiles_slab", Create.asResource("dark_scoria_bricks_slab"));
reMap.put("weathered_limestone_stairs", Create.asResource("polished_weathered_limestone_stairs"));
reMap.put("dolomite_layers", Create.asResource("layered_dolomite"));
reMap.put("jungle_glass", JUNGLE_WINDOW.getId());
// reMap.put("transposer", );
reMap.put("iron_glass", ORNATE_IRON_WINDOW.getId());
reMap.put("limestone_slab", Create.asResource("polished_limestone_slab"));
reMap.put("entity_detector", CONTENT_OBSERVER.getId());
reMap.put("flexcrate", ADJUSTABLE_CRATE.getId());
reMap.put("scoria_slab", Create.asResource("polished_scoria_slab"));
reMap.put("birch_glass", BIRCH_WINDOW.getId());
reMap.put("saw", MECHANICAL_SAW.getId());
// reMap.put("vertical_transposer", );
reMap.put("flexpulsepeater", ADJUSTABLE_PULSE_REPEATER.getId());
reMap.put("dolomite_wall", Create.asResource("polished_dolomite_wall"));
reMap.put("gabbro_layers", Create.asResource("layered_gabbro"));
reMap.put("scoria_wall", Create.asResource("polished_scoria_wall"));
reMap.put("stress_gauge", STRESSOMETER.getId());
reMap.put("gabbro_slab", Create.asResource("polished_gabbro_slab"));
reMap.put("spruce_glass", SPRUCE_WINDOW.getId());
// reMap.put("cocoa_log", );
reMap.put("iron_glass_pane", ORNATE_IRON_WINDOW_PANE.getId());
reMap.put("birch_glass_pane", BIRCH_WINDOW_PANE.getId());
reMap.put("harvester", MECHANICAL_HARVESTER.getId());
reMap.put("dolomite_slab", Create.asResource("polished_dolomite_slab"));
reMap.put("plough", MECHANICAL_PLOUGH.getId());
reMap.put("mossy_gabbro_bricks", Create.asResource("overgrown_gabbro"));
reMap.put("paved_gabbro_bricks_slab", Create.asResource("paved_gabbro_slab"));
reMap.put("gabbro_wall", Create.asResource("polished_gabbro_wall"));
reMap.put("granite_layers", Create.asResource("layered_granite"));
reMap.put("indented_gabbro", Create.asResource("polished_gabbro"));
reMap.put("drill", MECHANICAL_DRILL.getId());
reMap.put("flexpeater", ADJUSTABLE_REPEATER.getId());
reMap.put("rotation_chassis", RADIAL_CHASSIS.getId());
reMap.put("scoria_stairs", Create.asResource("polished_scoria_stairs"));
reMap.put("weathered_limestone_wall", Create.asResource("polished_weathered_limestone_wall"));
reMap.put("belt_tunnel", BRASS_TUNNEL.getId());
reMap.put("redstone_bridge", REDSTONE_LINK.getId());
reMap.put("speed_gauge", SPEEDOMETER.getId());
reMap.put("diorite_layers", Create.asResource("layered_diorite"));
reMap.put("oak_glass_pane", OAK_WINDOW_PANE.getId());
reMap.put("translation_chassis", LINEAR_CHASSIS.getId());
// reMap.put("symmetry_tripleplane", Create.asResource(""));
reMap.put("weathered_limestone_slab", Create.asResource("polished_weathered_limestone_slab"));
reMap.put("gabbro_stairs", Create.asResource("polished_gabbro_stairs"));
reMap.put("limestone_layers", Create.asResource("layered_limestone"));
// reMap.put("symmetry_plane", Create.asResource(""));
reMap.put("translation_chassis_secondary", SECONDARY_LINEAR_CHASSIS.getId());
reMap.put("jungle_glass_pane", JUNGLE_WINDOW_PANE.getId());
reMap.put("piston_pole", PISTON_EXTENSION_POLE.getId());
// reMap.put("shadow_steel_sword", );
reMap.put("lapis_plate", LAPIS_SHEET.getId());
reMap.put("crushed_copper", CRUSHED_COPPER.getId());
reMap.put("empty_blueprint", SCHEMATIC.getId());
// reMap.put("shadow_steel_mattock", );
// reMap.put("rose_quartz_sword", );
reMap.put("gold_sheet", GOLDEN_SHEET.getId());
reMap.put("flour", WHEAT_FLOUR.getId());
// reMap.put("encased_shaft", );
reMap.put("blueprint_and_quill", SCHEMATIC_AND_QUILL.getId());
reMap.put("crushed_iron", CRUSHED_IRON.getId());
// reMap.put("blazing_axe", );
reMap.put("slot_cover", CRAFTER_SLOT_COVER.getId());
reMap.put("blueprint", SCHEMATIC.getId());
reMap.put("symmetry_wand", WAND_OF_SYMMETRY.getId());
reMap.put("terrain_zapper", WORLDSHAPER.getId());
// reMap.put("blazing_sword", );
reMap.put("zinc_handle", HAND_CRANK.getId());
// reMap.put("rose_quartz_axe", );
// reMap.put("shadow_steel_pickaxe", );
reMap.put("placement_handgun", BLOCKZAPPER.getId());
reMap.put("crushed_zinc", CRUSHED_ZINC.getId());
// reMap.put("rose_quartz_pickaxe", );
// reMap.put("blazing_pickaxe", );
reMap.put("property_filter", ATTRIBUTE_FILTER.getId());
// reMap.put("blazing_shovel", );
reMap.put("crushed_gold", CRUSHED_GOLD.getId());
reMap.put("obsidian_dust", POWDERED_OBSIDIAN.getId());
// reMap.put("rose_quartz_shovel", );
}
@SubscribeEvent
public static void onRemapBlocks(RegistryEvent.MissingMappings<Block> event) {
ModContainer mod = ModList.get().getModContainerById(Create.ID).orElse(null);
if (mod == null)
return;
event.setModContainer(mod);
ImmutableList<RegistryEvent.MissingMappings.Mapping<Block>> mappings = event.getMappings();
for (RegistryEvent.MissingMappings.Mapping<Block> mapping : mappings) {
if (reMap.containsKey(mapping.key.getPath())) {
try {
Create.logger.warn("Remapping block '{}' to '{}'", mapping.key, reMap.get(mapping.key.getPath()));
mapping.remap(ForgeRegistries.BLOCKS.getValue(reMap.get(mapping.key.getPath())));
} catch (Throwable t) {
Create.logger.warn("Remapping block '{}' to '{}' failed: {}", mapping.key, reMap.get(mapping.key.getPath()), t);
}
}
}
}
@SubscribeEvent
public static void onRemapItems(RegistryEvent.MissingMappings<Item> event) {
ModContainer mod = ModList.get().getModContainerById(Create.ID).orElse(null);
if (mod == null)
return;
event.setModContainer(mod);
ImmutableList<RegistryEvent.MissingMappings.Mapping<Item>> mappings = event.getMappings();
for (RegistryEvent.MissingMappings.Mapping<Item> mapping : mappings) {
if (reMap.containsKey(mapping.key.getPath())) {
try {
Create.logger.warn("Remapping item '{}' to '{}'", mapping.key, reMap.get(mapping.key.getPath()));
mapping.remap(ForgeRegistries.ITEMS.getValue(reMap.get(mapping.key.getPath())));
} catch (Throwable t) {
Create.logger.warn("Remapping item '{}' to '{}' failed: {}", mapping.key, reMap.get(mapping.key.getPath()), t);
}
}
}
}
}

View file

@ -280,5 +280,9 @@ public class SuperByteBuffer {
return ((int) sky) << 20 | ((int) block) << 4;
}
public boolean isEmpty() {
return template.limit() == 0;
}
}

View file

@ -33,6 +33,8 @@
"create.recipe.blockzapper_upgrade": "Handheld Blockzapper",
"create.recipe.sandpaper_polishing": "Sandpaper Polishing",
"create.recipe.mystery_conversion": "Mysterious Conversion",
"create.recipe.spout_filling": "Filling by Spout",
"create.recipe.draining": "Item Draining",
"create.recipe.processing.chance": "%1$s%% Chance",
"create.recipe.heat_requirement.none": "No Heating Required",
@ -161,6 +163,10 @@
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "Applied extraction count to filter.",
"create.gui.goggles.generator_stats": "Generator Stats:",
"create.gui.goggles.kinetic_stats": "Kinetic Stats:",
"create.gui.goggles.at_current_speed": "At current Speed",
@ -205,7 +211,7 @@
"create.schematicAndQuill.noTarget": "Hold [Ctrl] to select Air blocks.",
"create.schematicAndQuill.abort": "Removed selection.",
"create.schematicAndQuill.title": "Schematic Name:",
"create.schematicAndQuill.convert": "Save and Deploy Immediately",
"create.schematicAndQuill.convetr": "Save and Deploy Immediately",
"create.schematicAndQuill.fallbackName": "My Schematic",
"create.schematicAndQuill.saved": "Saved as %1$s",
@ -415,6 +421,7 @@
"create.mechanical_arm.extract_from": "Take items from %1$s",
"create.mechanical_arm.deposit_to": "Deposit items to %1$s",
"create.mechanical_arm.summary": "Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.",
"create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available",
@ -431,6 +438,15 @@
"create.tunnel.selection_mode.randomize": "Randomize",
"create.tunnel.selection_mode.synchronize": "Synchronize Inputs",
"create.hint.mechanical_arm_no_targets.title": "No Targets",
"create.hint.mechanical_arm_no_targets": "It appears this _Mechnanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.horizontal_funnel.title": "Horizontal Funnels",
"create.hint.horizontal_funnel": "cannot transfer between inventories _directly_. Try running a _Mechanical_ _Belt_ or _Depot_ below your funnel to extract items from Inventories.",
"create.hint.upward_funnel.title": "Funnels facing upward",
"create.hint.upward_funnel": "can only transfer items inserted by _Arms_, fan-powered _Chutes_, or items _thrown_ at them. Try building some _Chutes_ if you are looking to move your items _vertically_.",
"create.hint.empty_bearing.title": "Update Bearing",
"create.hint.empty_bearing": "_Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.gui.config.overlay1": "Hi :)",
"create.gui.config.overlay2": "This is a sample overlay",
"create.gui.config.overlay3": "Click or drag with your mouse",

View file

@ -0,0 +1,232 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"2": "create:block/brass_funnel_neutral",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",
"7": "create:block/brass_funnel_plating",
"particle": "create:block/brass_block"
},
"elements": [
{
"name": "LeftWall",
"from": [14, -3, 5],
"to": [16, 0, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"north": {"uv": [8, 8, 9, 9.5], "texture": "#7"},
"east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"},
"south": {"uv": [15, 8, 16, 9.5], "texture": "#7"}
}
},
{
"name": "LeftWall",
"from": [0, -3, 5],
"to": [2, 0, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"north": {"uv": [15, 8, 16, 9.5], "texture": "#7"},
"south": {"uv": [8, 7.5, 9, 9], "texture": "#7"},
"west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"}
}
},
{
"name": "LeftWall",
"from": [0, 0, 5],
"to": [16, 16, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"north": {"uv": [8, 0, 16, 8], "texture": "#7"},
"east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"},
"south": {"uv": [8, 0, 16, 8], "texture": "#7"},
"west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"},
"up": {"uv": [0, 0, 8, 3], "texture": "#7"}
}
},
{
"name": "LeftBottom",
"from": [15, -5, 5],
"to": [16, -3, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"east": {"uv": [5, 15, 8, 16], "texture": "#7"},
"west": {"uv": [5, 15, 8, 16], "texture": "#7"},
"down": {"uv": [0, 0, 1, 6], "texture": "#particle"}
}
},
{
"name": "LeftBottom",
"from": [0, -5, 5],
"to": [1, -3, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"east": {"uv": [8, 15, 5, 16], "texture": "#7"},
"west": {"uv": [8, 15, 5, 16], "texture": "#7"},
"down": {"uv": [1, 0, 0, 6], "texture": "#particle"}
}
},
{
"name": "LeftBottom",
"from": [15, -5, 11],
"to": [16, -2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 11]},
"faces": {
"east": {"uv": [5, 14.5, 7.5, 16], "texture": "#7"},
"south": {"uv": [7.5, 13, 8, 14.5], "texture": "#7"},
"west": {"uv": [5.5, 14.5, 8, 16], "texture": "#7"},
"up": {"uv": [0, 0, 1, 5], "texture": "#particle"},
"down": {"uv": [0, 0, 1, 5], "texture": "#particle"}
}
},
{
"name": "LeftBottom",
"from": [0, -5, 11],
"to": [1, -2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 11]},
"faces": {
"east": {"uv": [8, 14.5, 5.5, 16], "texture": "#7"},
"south": {"uv": [8, 13, 7.5, 14.5], "texture": "#7"},
"west": {"uv": [7.5, 14.5, 5, 16], "texture": "#7"},
"up": {"uv": [1, 0, 0, 5], "texture": "#particle"},
"down": {"uv": [1, 0, 0, 5], "texture": "#particle"}
}
},
{
"name": "LeftBottom",
"from": [15, -5, 0],
"to": [16, -2, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"north": {"uv": [8, 13, 7.5, 14.5], "texture": "#7"},
"east": {"uv": [7.5, 14.5, 5, 16], "texture": "#7"},
"west": {"uv": [8, 14.5, 5.5, 16], "texture": "#7"},
"up": {"uv": [0, 5, 1, 0], "texture": "#particle"},
"down": {"uv": [0, 5, 1, 0], "texture": "#particle"}
}
},
{
"name": "LeftBottom",
"from": [0, -5, 0],
"to": [1, -2, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 5]},
"faces": {
"north": {"uv": [7.5, 13, 8, 14.5], "texture": "#7"},
"east": {"uv": [5.5, 14.5, 8, 16], "texture": "#7"},
"west": {"uv": [5, 14.5, 7.5, 16], "texture": "#7"},
"up": {"uv": [1, 5, 0, 0], "texture": "#particle"},
"down": {"uv": [1, 5, 0, 0], "texture": "#particle"}
}
},
{
"name": "BackExtension",
"from": [3, -2, 10],
"to": [13, 13, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]},
"faces": {
"east": {"uv": [9, 6, 16, 8], "rotation": 90, "texture": "#3"},
"west": {"uv": [9, 6, 16, 8], "rotation": 270, "texture": "#3"},
"up": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}
}
},
{
"name": "BackExtension",
"from": [3, -2, 2],
"to": [13, 13, 6],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 10]},
"faces": {
"east": {"uv": [9, 8, 16, 6], "rotation": 90, "texture": "#3"},
"west": {"uv": [9, 8, 16, 6], "rotation": 270, "texture": "#3"},
"up": {"uv": [9.5, 4, 14.5, 2], "texture": "#3"}
}
},
{
"name": "MidExtension",
"from": [2, -2, 8],
"to": [14, 14, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]},
"faces": {
"east": {"uv": [1, 6, 9, 8], "rotation": 90, "texture": "#3"},
"south": {"uv": [8, 0, 16, 6], "rotation": 270, "texture": "#3"},
"west": {"uv": [1, 8, 9, 6], "rotation": 90, "texture": "#3"},
"up": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}
}
},
{
"name": "MidExtension",
"from": [2, -2, 4],
"to": [14, 14, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]},
"faces": {
"north": {"uv": [8, 6, 16, 0], "rotation": 270, "texture": "#3"},
"east": {"uv": [1, 8, 9, 6], "rotation": 90, "texture": "#3"},
"west": {"uv": [1, 6, 9, 8], "rotation": 90, "texture": "#3"},
"up": {"uv": [8, 0, 6, 6], "rotation": 90, "texture": "#3"}
}
},
{
"name": "Back",
"from": [2.1, -2.1, -2.1],
"to": [13.9, 13.95, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 10]},
"faces": {
"north": {"uv": [15, 1, 9, 9], "texture": "#7"},
"east": {"uv": [0, 4, 16, 0], "rotation": 90, "texture": "#5"},
"south": {"uv": [0, 16, 16, 4], "rotation": 90, "texture": "#5"},
"west": {"uv": [0, 4, 16, 0], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 4, 12, 0], "texture": "#6"},
"down": {"uv": [0, 4, 12, 0], "rotation": 180, "texture": "#6"}
}
},
{
"name": "Back",
"from": [2.1, -2.1, 14],
"to": [13.9, 13.95, 18.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]},
"faces": {
"north": {"uv": [0, 4, 16, 16], "rotation": 90, "texture": "#5"},
"east": {"uv": [0, 0, 16, 4], "rotation": 90, "texture": "#5"},
"south": {"uv": [9, 1, 15, 9], "texture": "#7"},
"west": {"uv": [0, 0, 16, 4], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 0, 12, 4], "texture": "#6"},
"down": {"uv": [0, 0, 12, 4], "rotation": 180, "texture": "#6"}
}
},
{
"name": "RearBackPlate",
"from": [1, -5, 0],
"to": [15, -2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]},
"faces": {
"north": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"},
"south": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"},
"up": {"uv": [1, 0, 15, 16], "texture": "#particle"},
"down": {"uv": [1, 0, 15, 16], "texture": "#particle"}
}
}
],
"groups": [
{
"name": "BeltFunnel",
"origin": [9, -4, 8],
"children": [
{
"name": "FrontSection",
"origin": [9, -4, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8]
},
{
"name": "Extension",
"origin": [9, -4, 8],
"children": [9, 10, 11, 12]
},
{
"name": "Base",
"origin": [9, -4, 8],
"children": [13, 14, 15]
}
]
}
]
}

View file

@ -2,7 +2,7 @@
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"2": "create:block/brass_funnel_push",
"2": "create:block/brass_funnel_neutral",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",
@ -68,7 +68,7 @@
"to": [14, 16, 6],
"rotation": {"angle": 0, "axis": "y", "origin": [6, -8, 0]},
"faces": {
"north": {"uv": [1, 0, 7, 3], "texture": "#7"},
"north": {"uv": [9, 13, 15, 16], "texture": "#7"},
"south": {"uv": [9, 0, 15, 3], "texture": "#7"},
"up": {"uv": [1, 0, 7, 3], "texture": "#7"},
"down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#2"}
@ -140,18 +140,19 @@
{
"name": "RearBackPlate",
"from": [1, -5, 5],
"to": [15, -2, 16],
"to": [15, -2, 16.05],
"rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]},
"faces": {
"north": {"uv": [1, 13, 15, 16], "texture": "#particle"},
"south": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"},
"up": {"uv": [1, 5, 15, 16], "texture": "#particle"}
"up": {"uv": [1, 5, 15, 16], "texture": "#particle"},
"down": {"uv": [1, 0, 15, 11], "texture": "#particle"}
}
},
{
"name": "BackPlateLeft",
"from": [15, -5, 6],
"to": [16, -2, 16],
"to": [16, -2, 16.05],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]},
"faces": {
"east": {"uv": [0, 14.5, 5, 16], "texture": "#7"},
@ -163,7 +164,7 @@
{
"name": "BackPlateLeft",
"from": [0, -5, 6],
"to": [1, -2, 16],
"to": [1, -2, 16.05],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]},
"faces": {
"south": {"uv": [0, 14.5, 0.5, 16], "texture": "#7"},

View file

@ -0,0 +1,160 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",
"7": "create:block/brass_funnel_plating",
"2_2": "create:block/brass_funnel_pull",
"particle": "create:block/brass_block"
},
"elements": [
{
"name": "LeftWall",
"from": [14, -2, 6],
"to": [16.05, 1, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [0, 8, 1, 9.5], "texture": "#7"},
"east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2_2"},
"south": {"uv": [15, 8, 16, 9.5], "texture": "#7"},
"west": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2_2"},
"down": {"uv": [14, 0, 16, 6], "texture": "#2_2"}
}
},
{
"name": "LeftWall",
"from": [-0.05, -2, 6],
"to": [2, 1, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [7, 8, 8, 9.5], "texture": "#7"},
"east": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2_2"},
"south": {"uv": [8, 7.5, 9, 9], "texture": "#7"},
"west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2_2"},
"down": {"uv": [0, 0, 2, 6], "texture": "#2_2"}
}
},
{
"name": "LeftWall",
"from": [14, 1, 6],
"to": [16.05, 17, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [0, 0, 1, 8], "texture": "#7"},
"east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2_2"},
"south": {"uv": [15, 0, 16, 8], "texture": "#7"},
"west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2_2"},
"up": {"uv": [14, 0, 16, 6], "texture": "#2_2"}
}
},
{
"name": "LeftWall",
"from": [-0.05, 1, 6],
"to": [2, 17, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [7, 0, 8, 8], "texture": "#7"},
"east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2_2"},
"south": {"uv": [8, 0, 9, 8], "texture": "#7"},
"west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2_2"},
"up": {"uv": [16, 0, 14, 6], "texture": "#2_2"}
}
},
{
"name": "Top",
"from": [2, 11, 6],
"to": [14, 17, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [1, 0, 7, 3], "texture": "#7"},
"south": {"uv": [9, 0, 15, 3], "texture": "#7"},
"up": {"uv": [2, 0, 14, 6], "texture": "#2_2"},
"down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#2_2"}
}
},
{
"name": "Back",
"from": [2.1, -2.1, 14],
"to": [13.9, 13.95, 18.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8.1, 6]},
"faces": {
"north": {"uv": [0, 6, 6, 14], "texture": "#3"},
"east": {"uv": [0, 0, 16, 4], "rotation": 90, "texture": "#5"},
"south": {"uv": [9, 1, 15, 9], "texture": "#7"},
"west": {"uv": [0, 0, 16, 4], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 0, 12, 4], "texture": "#6"},
"down": {"uv": [0, 0, 12, 4], "rotation": 180, "texture": "#6"}
}
},
{
"name": "Back",
"from": [2.1, 2.9, 11.9],
"to": [13.9, 13.95, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8.1, 22]},
"faces": {
"east": {"uv": [5, 1, 16, 3], "rotation": 270, "texture": "#5"},
"west": {"uv": [5, 3, 16, 1], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 3, 12, 1], "texture": "#6"}
}
},
{
"name": "RearBackPlate",
"from": [0, -5, 13],
"to": [16, -2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]},
"faces": {
"north": {"uv": [0, 13, 8, 14.5], "texture": "#7"},
"east": {"uv": [6.5, 14.5, 8, 16], "texture": "#7"},
"south": {"uv": [0, 13, 8, 14.5], "texture": "#7"},
"west": {"uv": [0, 14.5, 1.5, 16], "texture": "#7"},
"up": {"uv": [0, 13, 8, 14.5], "texture": "#7"},
"down": {"uv": [0, 13, 8, 14.5], "texture": "#7"}
}
},
{
"name": "RearBackPlate",
"from": [2, 9.9, 9],
"to": [14, 11.9, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 6.9, 8]},
"faces": {
"down": {"uv": [2, 6, 14, 13], "texture": "#2_2"}
}
},
{
"from": [1, 8, 11],
"to": [15, 15, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 21]},
"faces": {
"east": {"uv": [1, 6.5, 4.5, 8], "rotation": 90, "texture": "#3"},
"south": {"uv": [8, 0, 11.5, 6], "rotation": 90, "texture": "#3"},
"west": {"uv": [1, 6, 4.5, 7.5], "rotation": 90, "texture": "#3"},
"up": {"uv": [6.5, 0, 8, 6], "rotation": 90, "texture": "#3"}
}
}
],
"groups": [
{
"name": "block_retracted",
"origin": [8, 8, 8],
"children": [
{
"name": "BeltFunnel",
"origin": [9, -4, 8],
"children": [
{
"name": "FrontSection",
"origin": [9, -4, 8],
"children": [0, 1, 2, 3, 4]
},
{
"name": "Base",
"origin": [9, -4, 8],
"children": [5, 6, 7, 8]
}
]
}, 9]
}
]
}

View file

@ -0,0 +1,160 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",
"7": "create:block/brass_funnel_plating",
"2_1": "create:block/brass_funnel_push",
"particle": "create:block/brass_block"
},
"elements": [
{
"name": "LeftWall",
"from": [14, -2, 6],
"to": [16.05, 1, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [0, 8, 1, 9.5], "texture": "#7"},
"east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2_1"},
"south": {"uv": [15, 8, 16, 9.5], "texture": "#7"},
"west": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2_1"},
"down": {"uv": [14, 0, 16, 6], "texture": "#2_1"}
}
},
{
"name": "LeftWall",
"from": [-0.05, -2, 6],
"to": [2, 1, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [7, 8, 8, 9.5], "texture": "#7"},
"east": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2_1"},
"south": {"uv": [8, 7.5, 9, 9], "texture": "#7"},
"west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2_1"},
"down": {"uv": [0, 0, 2, 6], "texture": "#2_1"}
}
},
{
"name": "LeftWall",
"from": [14, 1, 6],
"to": [16.05, 17, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [0, 0, 1, 8], "texture": "#7"},
"east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2_1"},
"south": {"uv": [15, 0, 16, 8], "texture": "#7"},
"west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2_1"},
"up": {"uv": [14, 0, 16, 6], "texture": "#2_1"}
}
},
{
"name": "LeftWall",
"from": [-0.05, 1, 6],
"to": [2, 17, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [7, 0, 8, 8], "texture": "#7"},
"east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2_1"},
"south": {"uv": [8, 0, 9, 8], "texture": "#7"},
"west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2_1"},
"up": {"uv": [16, 0, 14, 6], "texture": "#2_1"}
}
},
{
"name": "Top",
"from": [2, 11, 6],
"to": [14, 17, 12],
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 15, 12]},
"faces": {
"north": {"uv": [1, 0, 7, 3], "texture": "#7"},
"south": {"uv": [9, 0, 15, 3], "texture": "#7"},
"up": {"uv": [2, 0, 14, 6], "texture": "#2_1"},
"down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#2_1"}
}
},
{
"name": "Back",
"from": [2.1, -2.1, 14],
"to": [13.9, 13.95, 18.1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8.1, 6]},
"faces": {
"north": {"uv": [0, 6, 6, 14], "texture": "#3"},
"east": {"uv": [0, 0, 16, 4], "rotation": 90, "texture": "#5"},
"south": {"uv": [9, 1, 15, 9], "texture": "#7"},
"west": {"uv": [0, 0, 16, 4], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 0, 12, 4], "texture": "#6"},
"down": {"uv": [0, 0, 12, 4], "rotation": 180, "texture": "#6"}
}
},
{
"name": "Back",
"from": [2.1, 2.9, 11.9],
"to": [13.9, 13.95, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8.1, 22]},
"faces": {
"east": {"uv": [5, 1, 16, 3], "rotation": 270, "texture": "#5"},
"west": {"uv": [5, 3, 16, 1], "rotation": 270, "texture": "#5"},
"up": {"uv": [0, 3, 12, 1], "texture": "#6"}
}
},
{
"name": "RearBackPlate",
"from": [0, -5, 13],
"to": [16, -2, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]},
"faces": {
"north": {"uv": [0, 13, 8, 14.5], "texture": "#7"},
"east": {"uv": [6.5, 14.5, 8, 16], "texture": "#7"},
"south": {"uv": [0, 13, 8, 14.5], "texture": "#7"},
"west": {"uv": [0, 14.5, 1.5, 16], "texture": "#7"},
"up": {"uv": [0, 13, 8, 14.5], "texture": "#7"},
"down": {"uv": [0, 13, 8, 14.5], "texture": "#7"}
}
},
{
"name": "RearBackPlate",
"from": [2, 9.9, 9],
"to": [14, 11.9, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 6.9, 8]},
"faces": {
"down": {"uv": [2, 6, 14, 13], "texture": "#2_1"}
}
},
{
"from": [1, 8, 11],
"to": [15, 15, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 21]},
"faces": {
"east": {"uv": [1, 6.5, 4.5, 8], "rotation": 90, "texture": "#3"},
"south": {"uv": [8, 0, 11.5, 6], "rotation": 90, "texture": "#3"},
"west": {"uv": [1, 6, 4.5, 7.5], "rotation": 90, "texture": "#3"},
"up": {"uv": [6.5, 0, 8, 6], "rotation": 90, "texture": "#3"}
}
}
],
"groups": [
{
"name": "block_retracted",
"origin": [8, 8, 8],
"children": [
{
"name": "BeltFunnel",
"origin": [9, -4, 8],
"children": [
{
"name": "FrontSection",
"origin": [9, -4, 8],
"children": [0, 1, 2, 3, 4]
},
{
"name": "Base",
"origin": [9, -4, 8],
"children": [5, 6, 7, 8]
}
]
}, 9]
}
]
}

View file

@ -1,8 +1,9 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"texture_size": [32, 32],
"textures": {
"2": "create:block/brass_funnel_push",
"2": "create:block/brass_funnel_neutral",
"3": "create:block/brass_funnel_back",
"5": "create:block/brass_funnel_tall",
"6": "create:block/brass_funnel",
@ -124,7 +125,7 @@
{
"name": "RearBackPlate",
"from": [1, -5, 10],
"to": [15, -2, 16],
"to": [15, -2, 16.05],
"rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]},
"faces": {
"north": {"uv": [1, 13, 15, 16], "texture": "#particle"},
@ -135,26 +136,26 @@
{
"name": "BackPlateLeft",
"from": [15, -5, 14],
"to": [16, -2, 16],
"to": [16, -2, 16.05],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]},
"faces": {
"east": {"uv": [0, 14.5, 1, 16], "texture": "#7"},
"south": {"uv": [7.5, 14.5, 8, 16], "texture": "#7"},
"west": {"uv": [7, 14.5, 8, 16], "texture": "#7"},
"up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#7"},
"up": {"uv": [0, 15, 1, 14.5], "rotation": 270, "texture": "#7"},
"down": {"uv": [0, 0, 1, 2], "texture": "#particle"}
}
},
{
"name": "BackPlateLeft",
"from": [0, -5, 14],
"to": [1, -2, 16],
"to": [1, -2, 16.05],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]},
"faces": {
"east": {"uv": [8, 14.5, 7, 16], "texture": "#7"},
"south": {"uv": [0, 14.5, 0.5, 16], "texture": "#7"},
"west": {"uv": [1, 14.5, 0, 16], "texture": "#7"},
"up": {"uv": [0, 15, 5.5, 14.5], "rotation": 270, "texture": "#7"},
"up": {"uv": [0, 15, 1, 14.5], "rotation": 270, "texture": "#7"},
"down": {"uv": [0, 0, 1, 2], "texture": "#particle"}
}
},

View file

@ -0,0 +1,202 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"textures": {
"1": "create:block/blaze_burner_inner",
"2": "create:block/blaze_burner_side",
"3": "create:block/dark_metal_block",
"particle": "create:block/dark_metal_block",
"fire": "block/campfire_fire"
},
"elements": [
{
"name": "Brazier Sides 1",
"from": [2, 5, 2],
"to": [14, 14, 14],
"faces": {
"north": {"uv": [0, 6, 12, 15], "texture": "#2"},
"east": {"uv": [0, 6, 12, 15], "texture": "#2"},
"south": {"uv": [0, 6, 12, 15], "texture": "#2"},
"west": {"uv": [0, 6, 12, 15], "texture": "#2"}
}
},
{
"name": "Brazier Sides 2",
"from": [2, 5, 14],
"to": [14, 14, 15],
"faces": {
"north": {"uv": [12, 6, 0, 15], "texture": "#2"}
}
},
{
"name": "Brazier Sides 3",
"from": [1, 5, 2],
"to": [2, 14, 14],
"faces": {
"east": {"uv": [12, 6, 0, 15], "texture": "#2"}
}
},
{
"name": "Brazier Sides 4",
"from": [2, 5, 1],
"to": [14, 14, 2],
"faces": {
"south": {"uv": [12, 6, 0, 15], "texture": "#2"}
}
},
{
"name": "Brazier Sides 5",
"from": [14, 5, 2],
"to": [15, 14, 14],
"faces": {
"west": {"uv": [12, 6, 0, 15], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 1",
"from": [2, 14, 13],
"to": [14, 17, 14],
"rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]},
"faces": {
"south": {"uv": [0, 3, 12, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 2",
"from": [2, 14, 2],
"to": [3, 17, 14],
"rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]},
"faces": {
"west": {"uv": [0, 3, 12, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 3",
"from": [2, 14, 2],
"to": [14, 17, 3],
"rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]},
"faces": {
"north": {"uv": [0, 3, 12, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 4",
"from": [13, 14, 2],
"to": [14, 17, 14],
"rotation": {"angle": -45, "axis": "z", "origin": [14, 14, 8]},
"faces": {
"east": {"uv": [0, 3, 12, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 1b",
"from": [2, 14, 14],
"to": [14, 17, 15],
"rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]},
"faces": {
"north": {"uv": [12, 3, 0, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 1b",
"from": [1, 14, 2],
"to": [2, 17, 14],
"rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]},
"faces": {
"east": {"uv": [12, 3, 0, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 1b",
"from": [2, 14, 1],
"to": [14, 17, 2],
"rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]},
"faces": {
"south": {"uv": [12, 3, 0, 6], "texture": "#2"}
}
},
{
"name": "Brazier Spikes 1b",
"from": [14, 14, 2],
"to": [15, 17, 14],
"rotation": {"angle": -45, "axis": "z", "origin": [14, 14, 8]},
"faces": {
"west": {"uv": [12, 3, 0, 6], "texture": "#2"}
}
},
{
"name": "Base",
"from": [0, 0, 0],
"to": [16, 4, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [0.5, 8, 0.5]},
"faces": {
"north": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"},
"east": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"},
"south": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"},
"west": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "texture": "#1"},
"down": {"uv": [0, 0, 16, 16], "texture": "#3", "cullface": "down"}
}
},
{
"name": "Brazier bottom",
"from": [2, 4, 2],
"to": [14, 5, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [2.5, 8, 2.5]},
"faces": {
"north": {"uv": [0, 15, 12, 16], "texture": "#2"},
"east": {"uv": [0, 15, 12, 16], "texture": "#2"},
"south": {"uv": [0, 15, 12, 16], "texture": "#2"},
"west": {"uv": [0, 15, 12, 16], "texture": "#2"},
"up": {"uv": [2, 2, 14, 14], "texture": "#1"}
}
},
{
"from": [0.8, 1, 8],
"to": [15.2, 17, 8],
"shade": false,
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true},
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#fire"},
"south": {"uv": [0, 0, 16, 16], "texture": "#fire"}
}
},
{
"from": [8, 1, 0.8],
"to": [8, 17, 15.2],
"shade": false,
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true},
"faces": {
"east": {"uv": [0, 0, 16, 16], "texture": "#fire"},
"west": {"uv": [0, 0, 16, 16], "texture": "#fire"}
}
}
],
"display": {
"head": {
"translation": [0, 10.5, 0]
}
},
"groups": [
{
"name": "Brazier",
"origin": [0.5, 0.5, 0.5],
"children": [
{
"name": "Brazier Sides",
"origin": [0.5, 0.5, 0.5],
"children": [0, 1, 2, 3, 4]
},
{
"name": "Brazier Spikes",
"origin": [0.5, 0.5, 0.5],
"children": [5, 6, 7, 8, 9, 10, 11, 12]
}, 13, 14]
},
{
"name": "campfire",
"origin": [8, 8, 8],
"children": [15, 16]
}
]
}

View file

@ -2,63 +2,64 @@
"credit": "Made with Blockbench",
"parent": "create:item/wrench/item",
"textures": {
"0": "block/stripped_spruce_log"
"5": "create:item/wrench",
"particle": "create:item/wrench"
},
"elements": [
{
"name": "Cog",
"from": [8, 7, 6],
"to": [9, 8, 10],
"rotation": {"angle": -45, "axis": "y", "origin": [8.5, 7, 8]},
"faces": {
"north": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"east": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"south": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"west": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"up": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "Cog",
"from": [8, 7, 6],
"to": [9, 8, 10],
"rotation": {"angle": 45, "axis": "y", "origin": [8.5, 7, 8]},
"faces": {
"north": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"east": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"south": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"west": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"up": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"}
}
},
{
"name": "Cog",
"from": [8, 7, 6],
"to": [9, 8, 10],
"from": [8.5, 7, 6],
"to": [9.5, 8, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 7, 8]},
"faces": {
"north": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"east": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"south": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"west": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"up": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"},
"down": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"}
"north": {"uv": [10, 14, 12, 16], "texture": "#5"},
"east": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"south": {"uv": [10, 14, 12, 16], "texture": "#5"},
"west": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"up": {"uv": [2, 14, 10, 16], "rotation": 90, "texture": "#5"},
"down": {"uv": [2, 14, 10, 16], "rotation": 90, "texture": "#5"}
}
},
{
"name": "Cog",
"from": [6.5, 7, 7.5],
"to": [10.5, 8, 8.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 7, 8]},
"from": [8.5, 7, 6],
"to": [9.5, 8, 10],
"rotation": {"angle": 45, "axis": "y", "origin": [9, 7, 8]},
"faces": {
"north": {"uv": [3, 6, 7, 7], "rotation": 180, "texture": "#0"},
"east": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"},
"south": {"uv": [3, 6, 7, 7], "rotation": 180, "texture": "#0"},
"west": {"uv": [7, 4, 8, 5], "rotation": 180, "texture": "#0"},
"up": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"},
"down": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}
"north": {"uv": [10, 14, 12, 16], "texture": "#5"},
"east": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"south": {"uv": [10, 14, 12, 16], "texture": "#5"},
"west": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"up": {"uv": [2, 14, 10, 16], "rotation": 90, "texture": "#5"},
"down": {"uv": [2, 14, 10, 16], "rotation": 90, "texture": "#5"}
}
},
{
"name": "Cog",
"from": [7, 7, 7.5],
"to": [11, 8, 8.5],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 7, 8]},
"faces": {
"north": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"east": {"uv": [10, 14, 12, 16], "texture": "#5"},
"south": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"west": {"uv": [10, 14, 12, 16], "texture": "#5"},
"up": {"uv": [2, 14, 10, 16], "texture": "#5"},
"down": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"}
}
},
{
"name": "Cog",
"from": [7, 7, 7.5],
"to": [11, 8, 8.5],
"rotation": {"angle": 45, "axis": "y", "origin": [9, 7, 8]},
"faces": {
"north": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"east": {"uv": [10, 14, 12, 16], "texture": "#5"},
"south": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"},
"west": {"uv": [10, 14, 12, 16], "texture": "#5"},
"up": {"uv": [2, 14, 10, 16], "texture": "#5"},
"down": {"uv": [2, 14, 10, 16], "rotation": 180, "texture": "#5"}
}
}
]

View file

@ -1,18 +1,113 @@
{
"credit": "Made with Blockbench",
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"0": "block/stripped_spruce_log",
"1": "block/spruce_log",
"2": "create:block/brass_casing",
"3": "block/andesite",
"particle": "block/stripped_spruce_log"
"5": "create:item/wrench",
"particle": "create:item/wrench"
},
"elements": [
{
"name": "handle",
"from": [7.6, 0, 7.5],
"to": [8.6, 7, 8.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 8]},
"faces": {
"north": {"uv": [2, 0, 4, 14], "texture": "#5"},
"east": {"uv": [2, 0, 4, 14], "texture": "#5"},
"south": {"uv": [2, 0, 4, 14], "texture": "#5"},
"west": {"uv": [2, 0, 4, 14], "texture": "#5"},
"down": {"uv": [2, 12, 4, 14], "texture": "#5"}
}
},
{
"name": "handle",
"from": [6.5, 8.5, 7.5],
"to": [8.5, 14.5, 8.5],
"rotation": {"angle": 0, "axis": "y", "origin": [7.5, 20, 8]},
"faces": {
"north": {"uv": [12, 0, 16, 12], "texture": "#5"},
"east": {"uv": [14, 0, 16, 12], "texture": "#5"},
"south": {"uv": [16, 0, 12, 12], "texture": "#5"},
"west": {"uv": [16, 0, 14, 12], "texture": "#5"},
"up": {"uv": [5, 7, 7, 8], "rotation": 90, "texture": "#5"},
"down": {"uv": [0, 0, 1, 1], "texture": "#5"}
}
},
{
"name": "axle",
"from": [8.35355, 5, 7.14645],
"to": [9.35355, 12, 8.14645],
"rotation": {"angle": -45, "axis": "y", "origin": [8.5, 11, 8]},
"faces": {
"north": {"uv": [0, 0, 2, 14], "texture": "#5"},
"east": {"uv": [0, 2, 2, 16], "texture": "#5"},
"south": {"uv": [0, 0, 2, 14], "texture": "#5"},
"west": {"uv": [0, 2, 2, 16], "texture": "#5"},
"up": {"uv": [0, 0, 1, 1], "texture": "#5"},
"down": {"uv": [0, 0, 1, 1], "texture": "#5"}
}
},
{
"name": "top thing",
"from": [7, 14, 7],
"to": [11, 15, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 7]},
"faces": {
"north": {"uv": [4, 8, 12, 10], "texture": "#5"},
"east": {"uv": [4, 0, 8, 2], "texture": "#5"},
"south": {"uv": [12, 8, 4, 10], "texture": "#5"},
"west": {"uv": [4, 6, 8, 8], "rotation": 180, "texture": "#5"},
"up": {"uv": [4, 0, 8, 8], "rotation": 90, "texture": "#5"},
"down": {"uv": [8, 0, 12, 8], "rotation": 90, "texture": "#5"}
}
},
{
"name": "bottom thing",
"from": [8, 12, 7],
"to": [11, 13, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 7]},
"faces": {
"north": {"uv": [10, 8, 4, 10], "rotation": 180, "texture": "#5"},
"east": {"uv": [4, 0, 8, 2], "rotation": 180, "texture": "#5"},
"south": {"uv": [4, 8, 10, 10], "rotation": 180, "texture": "#5"},
"west": {"uv": [4, 6, 8, 8], "texture": "#5"},
"up": {"uv": [8, 0, 12, 6], "rotation": 90, "texture": "#5"},
"down": {"uv": [4, 0, 8, 6], "rotation": 90, "texture": "#5"}
}
},
{
"name": "gear case top",
"from": [6.4, 8, 7],
"to": [10.4, 9, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 11, 8]},
"faces": {
"north": {"uv": [4, 10, 12, 12], "texture": "#5"},
"east": {"uv": [4, 10, 6, 14], "rotation": 90, "texture": "#5"},
"south": {"uv": [12, 10, 4, 12], "texture": "#5"},
"west": {"uv": [4, 10, 6, 14], "rotation": 90, "texture": "#5"},
"up": {"uv": [4, 10, 12, 14], "rotation": 180, "texture": "#5"},
"down": {"uv": [6, 0, 9, 2], "texture": "#5"}
}
},
{
"name": "gear case",
"from": [7.5, 6, 7],
"to": [9.5, 7, 9],
"rotation": {"angle": 45, "axis": "y", "origin": [8.5, 11, 8]},
"faces": {
"north": {"uv": [12, 12, 16, 14], "texture": "#5"},
"east": {"uv": [12, 12, 16, 14], "texture": "#5"},
"south": {"uv": [12, 12, 16, 14], "texture": "#5"},
"west": {"uv": [12, 12, 16, 14], "texture": "#5"},
"up": {"uv": [12, 12, 16, 16], "texture": "#5"},
"down": {"uv": [12, 12, 16, 16], "texture": "#5"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [0, -180, 0],
"translation": [0, 3.75, 0]
"rotation": [0, 90, 0],
"translation": [0, 3.25, 0]
},
"thirdperson_lefthand": {
"translation": [0, 3.75, 0]
@ -40,90 +135,11 @@
"translation": [0.5, 0.5, 0]
}
},
"elements": [
"groups": [
{
"name": "handle",
"from": [7.5, 0, 7.5],
"to": [8.5, 14, 8.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 8]},
"faces": {
"north": {"uv": [1, 0, 2, 14], "texture": "#1"},
"east": {"uv": [1, 0, 2, 14], "texture": "#1"},
"south": {"uv": [1, 0, 2, 14], "texture": "#1"},
"west": {"uv": [1, 0, 2, 14], "texture": "#1"},
"up": {"uv": [0, 0, 1, 1], "texture": "#1"},
"down": {"uv": [0, 0, 1, 1], "texture": "#1"}
}
},
{
"name": "axle",
"from": [8.35355, 5, 7.14645],
"to": [9.35355, 12, 8.14645],
"rotation": {"angle": -45, "axis": "y", "origin": [8.5, 11, 8]},
"faces": {
"north": {"uv": [5, 2, 6, 9], "texture": "#3"},
"east": {"uv": [5, 2, 6, 9], "texture": "#3"},
"south": {"uv": [0, 0, 1, 7], "texture": "#3"},
"west": {"uv": [4, 3, 5, 10], "texture": "#3"},
"up": {"uv": [0, 0, 1, 1], "texture": "#3"},
"down": {"uv": [0, 0, 1, 1], "texture": "#3"}
}
},
{
"name": "top thing",
"from": [7, 14, 7],
"to": [11, 15, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 7]},
"faces": {
"north": {"uv": [6, 1, 10, 2], "texture": "#2"},
"east": {"uv": [6, 1, 8, 2], "texture": "#2"},
"south": {"uv": [6, 1, 10, 2], "texture": "#2"},
"west": {"uv": [6, 1, 8, 2], "texture": "#2"},
"up": {"uv": [5, 0, 9, 2], "texture": "#2"},
"down": {"uv": [6, 0, 10, 2], "texture": "#2"}
}
},
{
"name": "bottom thing",
"from": [8, 12, 7],
"to": [11, 13, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 7]},
"faces": {
"north": {"uv": [6, 1, 9, 2], "texture": "#2"},
"east": {"uv": [6, 1, 8, 2], "texture": "#2"},
"south": {"uv": [5, 1, 8, 2], "texture": "#2"},
"west": {"uv": [7, 1, 9, 2], "texture": "#2"},
"up": {"uv": [6, 0, 9, 2], "texture": "#2"},
"down": {"uv": [7, 0, 10, 2], "texture": "#2"}
}
},
{
"name": "gear case top",
"from": [7, 8, 7],
"to": [10, 9, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 11, 8]},
"faces": {
"north": {"uv": [10, 0, 13, 1], "texture": "#2"},
"east": {"uv": [7, 0, 9, 1], "texture": "#2"},
"south": {"uv": [7, 0, 10, 1], "texture": "#2"},
"west": {"uv": [9, 0, 11, 1], "texture": "#2"},
"up": {"uv": [7, 0, 10, 2], "texture": "#2"},
"down": {"uv": [6, 0, 9, 2], "texture": "#2"}
}
},
{
"name": "gear case",
"from": [7.5, 6.5, 7],
"to": [9.5, 7.5, 9],
"rotation": {"angle": 45, "axis": "y", "origin": [8.5, 11, 8]},
"faces": {
"north": {"uv": [0, 0, 2, 1], "texture": "#1"},
"east": {"uv": [0, 0, 2, 1], "texture": "#1"},
"south": {"uv": [0, 0, 2, 1], "texture": "#1"},
"west": {"uv": [0, 0, 2, 1], "texture": "#1"},
"up": {"uv": [0, 0, 2, 2], "texture": "#1"},
"down": {"uv": [0, 0, 2, 2], "texture": "#1"}
}
"name": "item",
"origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB