From f79d168bc7a92ed3a193c66f31bdc8687c5c9678 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 25 Jun 2020 21:38:23 +0200 Subject: [PATCH] Directed Funneling and Chute Funnels - Added a funnel block variant that interacts with chutes horizontally (same item) - Belt and Chute Funnels now have a push/pull property - Removed Chute Ports --- src/generated/resources/.cache/cache | 20 +- .../create/blockstates/belt_funnel.json | 108 ++++++-- .../create/blockstates/chute_funnel.json | 64 +++++ .../assets/create/blockstates/chute_port.json | 19 -- .../resources/assets/create/lang/en_ud.json | 2 +- .../resources/assets/create/lang/en_us.json | 2 +- .../block/belt_funnel_pull_off_extended.json | 6 + .../block/belt_funnel_pull_off_retracted.json | 6 + .../block/belt_funnel_pull_on_extended.json | 6 + .../block/belt_funnel_pull_on_retracted.json | 6 + .../block/belt_funnel_push_on_extended.json | 6 + .../block/belt_funnel_push_on_retracted.json | 6 + .../models/block/chute_funnel_pull_off.json | 6 + .../models/block/chute_funnel_pull_on.json | 6 + .../models/block/chute_funnel_push_on.json | 6 + .../assets/create/models/item/chute_port.json | 3 - .../{chute_port.json => chute_funnel.json} | 2 +- .../java/com/simibubi/create/AllBlocks.java | 23 +- .../java/com/simibubi/create/AllShapes.java | 4 + .../logistics/block/chute/ChutePortBlock.java | 25 -- .../block/realityFunnel/BeltFunnelBlock.java | 79 +----- .../realityFunnel/BeltFunnelGenerator.java | 39 +++ .../block/realityFunnel/ChuteFunnelBlock.java | 39 +++ .../realityFunnel/ChuteFunnelGenerator.java | 39 +++ .../block/realityFunnel/FunnelItem.java | 21 +- .../HorizontalInteractionFunnelBlock.java | 90 +++++++ .../realityFunnel/RealityFunnelBlock.java | 62 +++-- .../block/belt_funnel/block_extended.json | 2 +- .../belt_funnel/block_extended_powered.json | 6 - .../block/belt_funnel/block_retracted.json | 2 +- .../belt_funnel/block_retracted_powered.json | 6 - .../models/block/chute_funnel/block.json | 248 ++++++++++++++++++ .../create/models/block/chute_port.json | 23 -- .../textures/block/belt_funnel_pull_off.png | Bin 0 -> 438 bytes .../textures/block/belt_funnel_pull_on.png | Bin 0 -> 433 bytes .../textures/block/belt_funnel_push_off.png | Bin 0 -> 423 bytes .../textures/block/belt_funnel_push_on.png | Bin 0 -> 426 bytes .../assets/create/textures/block/chute.png | Bin 1621 -> 1425 bytes .../create/textures/block/chute_port.png | Bin 1672 -> 0 bytes .../create/textures/block/funnel_off.png | Bin 370 -> 372 bytes .../create/textures/block/funnel_on.png | Bin 378 -> 370 bytes 41 files changed, 762 insertions(+), 220 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/chute_funnel.json delete mode 100644 src/generated/resources/assets/create/blockstates/chute_port.json create mode 100644 src/generated/resources/assets/create/models/block/belt_funnel_pull_off_extended.json create mode 100644 src/generated/resources/assets/create/models/block/belt_funnel_pull_off_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/belt_funnel_pull_on_extended.json create mode 100644 src/generated/resources/assets/create/models/block/belt_funnel_pull_on_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/belt_funnel_push_on_extended.json create mode 100644 src/generated/resources/assets/create/models/block/belt_funnel_push_on_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/chute_funnel_pull_off.json create mode 100644 src/generated/resources/assets/create/models/block/chute_funnel_pull_on.json create mode 100644 src/generated/resources/assets/create/models/block/chute_funnel_push_on.json delete mode 100644 src/generated/resources/assets/create/models/item/chute_port.json rename src/generated/resources/data/create/loot_tables/blocks/{chute_port.json => chute_funnel.json} (86%) delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/chute/ChutePortBlock.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelGenerator.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelBlock.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelGenerator.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/HorizontalInteractionFunnelBlock.java delete mode 100644 src/main/resources/assets/create/models/block/belt_funnel/block_extended_powered.json delete mode 100644 src/main/resources/assets/create/models/block/belt_funnel/block_retracted_powered.json create mode 100644 src/main/resources/assets/create/models/block/chute_funnel/block.json delete mode 100644 src/main/resources/assets/create/models/block/chute_port.json create mode 100644 src/main/resources/assets/create/textures/block/belt_funnel_pull_off.png create mode 100644 src/main/resources/assets/create/textures/block/belt_funnel_pull_on.png create mode 100644 src/main/resources/assets/create/textures/block/belt_funnel_push_off.png create mode 100644 src/main/resources/assets/create/textures/block/belt_funnel_push_on.png delete mode 100644 src/main/resources/assets/create/textures/block/chute_port.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 57f7d584f..345408e7c 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -17,7 +17,7 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets\create\blockstates\andesite_bric 398922758a6219544e5b85c91c9cf8a543b437e5 assets\create\blockstates\andesite_pillar.json f9fa6aa530eb0891a74eadfbebc663172a57147a assets\create\blockstates\basin.json 96a4fae5883eda130f8ec1a57d34534f6d0793c4 assets\create\blockstates\belt.json -fe0278550e4795cc9757e726b88db12b599ec9ef assets\create\blockstates\belt_funnel.json +9bbc9a2dc2428175ae0cadf7537ed6815e3e241d assets\create\blockstates\belt_funnel.json 40d10934934ea142d71fc6ce598b1455c3ad47b4 assets\create\blockstates\belt_observer.json 4325605fbdea60d5f54286c309c825bebcd74b95 assets\create\blockstates\belt_tunnel.json cf9045eb16e5299a1d917c4cb536289f49411276 assets\create\blockstates\birch_window.json @@ -32,7 +32,7 @@ b8dd6e505943e06706d0718ece620ab3cf943650 assets\create\blockstates\brass_casing. cbcdab42d01f8085db9e5f8db884f8adf7f17625 assets\create\blockstates\chiseled_scoria.json 291952556c52fba2af5bbd793c71af81abd27e71 assets\create\blockstates\chiseled_weathered_limestone.json 99def0a786714a337e2b1b17db844e4d1aee6234 assets\create\blockstates\chute.json -9ca4713c8efed79da6ab11354a25e5f8fbd6341c assets\create\blockstates\chute_port.json +dabf21c320b6d33486478cb0e4b4bbd62a753c7a assets\create\blockstates\chute_funnel.json 4947c261310445fa55b92038326ac82967d192dd assets\create\blockstates\clockwork_bearing.json 1f33834c685e3243882acfe20183fe64dfa872be assets\create\blockstates\clutch.json e5e3757e99c139d67b2a70288466d8a74d818841 assets\create\blockstates\cogwheel.json @@ -335,8 +335,8 @@ c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets\create\blockstates\weathered_lim c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_limestone_pillar.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json -5753bc985f4c202fe16387c32fb8ad80c631c933 assets\create\lang\en_ud.json -0640b1b64ac1a1e337178f932f22b0b2aea61d46 assets\create\lang\en_us.json +d6d4eaadc6f2c86dd69b8a818ca7352b85be52cd assets\create\lang\en_ud.json +0cc26662a5c436a5703926fe3509f0a9536ee737 assets\create\lang\en_us.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.json @@ -377,6 +377,12 @@ a033fbac3129bba9211c6c4a0e16c905643afa39 assets\create\models\block\andesite_cob 1c574ee47aeb6fcb305bfc95dd131e153b795a0e assets\create\models\block\andesite_cobblestone_wall_post.json 0ed983628e8868f77301bea1111570d3631f24fb assets\create\models\block\andesite_cobblestone_wall_side.json b1d0bb538fc8285b7d3fd77a977d78a104b83b62 assets\create\models\block\andesite_pillar.json +3928a75e18fc9fe02e3d72696e5dfddd40ef164c assets\create\models\block\belt_funnel_pull_off_extended.json +024fdab5f6bb0559bb18d2c3cffa1d5a7baf76e9 assets\create\models\block\belt_funnel_pull_off_retracted.json +eecd774d431bd9c30649e824421ead350b5333cd assets\create\models\block\belt_funnel_pull_on_extended.json +8e6e5caf8befa95d68280ecfaca9a07313570524 assets\create\models\block\belt_funnel_pull_on_retracted.json +5e93193368ebdf0fa4d53b19a306431e6d3ab099 assets\create\models\block\belt_funnel_push_on_extended.json +08f8ffc241e9a49a0981026602deb0230dd8258a assets\create\models\block\belt_funnel_push_on_retracted.json e8bfb63e0a4426f9d95cd111640169b218dead1b assets\create\models\block\belt_observer\detect.json a2e63810eceb028484b193ddf4315e1811950dc8 assets\create\models\block\belt_observer\detect_belt.json 034c308d46def892e6638ac0b3374849a6a88a26 assets\create\models\block\belt_observer\detect_belt_powered.json @@ -407,6 +413,9 @@ cd7751090cf3d55296b8e415d0af9b6f18d69770 assets\create\models\block\chiseled_gab d2e195aa2e90c712e51d855a9a4a334b52f62a69 assets\create\models\block\chiseled_limestone.json ac07568fa7b2d3fa84d0fe89a498514d30514291 assets\create\models\block\chiseled_scoria.json ecb2b85ee210dce329d2be66b98d0f0d4e6fc223 assets\create\models\block\chiseled_weathered_limestone.json +d3a156e746f890b8a0b92caa70b8eb6e690f0fb6 assets\create\models\block\chute_funnel_pull_off.json +5e4424fb63041a449ddffe143ee766018d064c8f assets\create\models\block\chute_funnel_pull_on.json +ac32d22841b5d37ef182869f605b9a97075f3d33 assets\create\models\block\chute_funnel_push_on.json f9a3f0939ea43b404eb2826b94211a25fca5ebc2 assets\create\models\block\clockwork_bearing.json 70406933cc4fa5471af6e562fd84a397347dba17 assets\create\models\block\copper_casing.json 1ef7060b0ca7e9c0bfc8151f98ca08da31862cda assets\create\models\block\crate\brass\bottom.json @@ -964,7 +973,6 @@ afd697168c9786eb80e54eccdc6a23afa6c7fb0e assets\create\models\item\chiseled_gabb a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets\create\models\item\chiseled_scoria.json 70232ce9b88119fb383717e2c1ad113f7aad6a99 assets\create\models\item\chiseled_weathered_limestone.json fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets\create\models\item\chute.json -3b91cda68b823bf8d49a2e0cccd1b7f7c090e103 assets\create\models\item\chute_port.json b1531a7bd3f7f27b9587d13e818a93dc2d088bc8 assets\create\models\item\clockwork_bearing.json 0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets\create\models\item\clutch.json dcb09deae110077bcddf090996b51cc66e9a7de3 assets\create\models\item\cogwheel.json @@ -1748,7 +1756,7 @@ ab820bbaaf67c6697dfbab33c05fb73b18c70bfb data\create\loot_tables\blocks\chiseled 43f446abd3c1c184a08645979edf620e59955a30 data\create\loot_tables\blocks\chiseled_scoria.json adde89e46b12de1eee6fd0c5cb98c5f45feefc15 data\create\loot_tables\blocks\chiseled_weathered_limestone.json 07ccc1576a71338cb73c4e06f8c28a2c86843877 data\create\loot_tables\blocks\chute.json -dcd45562a3459e5fd620727090d9c3c01c8ce0a4 data\create\loot_tables\blocks\chute_port.json +617f27876863dda6a16d6818231bc52de104fc70 data\create\loot_tables\blocks\chute_funnel.json 778b53c36d73b6e9c78fd6c091c9c3535c3c18f7 data\create\loot_tables\blocks\clockwork_bearing.json d76113310fc56eca6382d44df174096f2210d416 data\create\loot_tables\blocks\clutch.json 673ba3a5deae9133b917d16c9eb87fe4c2873c8a data\create\loot_tables\blocks\cogwheel.json diff --git a/src/generated/resources/assets/create/blockstates/belt_funnel.json b/src/generated/resources/assets/create/blockstates/belt_funnel.json index a692d1738..ebd56a413 100644 --- a/src/generated/resources/assets/create/blockstates/belt_funnel.json +++ b/src/generated/resources/assets/create/blockstates/belt_funnel.json @@ -1,63 +1,123 @@ { "variants": { - "facing=north,powered=false,shape=retracted": { + "facing=north,powered=false,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_off_retracted" + }, + "facing=south,powered=false,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_off_retracted", + "y": 180 + }, + "facing=west,powered=false,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_off_retracted", + "y": 270 + }, + "facing=east,powered=false,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_off_retracted", + "y": 90 + }, + "facing=north,powered=true,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_on_retracted" + }, + "facing=south,powered=true,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_on_retracted", + "y": 180 + }, + "facing=west,powered=true,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_on_retracted", + "y": 270 + }, + "facing=east,powered=true,pushing=false,shape=retracted": { + "model": "create:block/belt_funnel_pull_on_retracted", + "y": 90 + }, + "facing=north,powered=false,pushing=true,shape=retracted": { "model": "create:block/belt_funnel/block_retracted" }, - "facing=south,powered=false,shape=retracted": { + "facing=south,powered=false,pushing=true,shape=retracted": { "model": "create:block/belt_funnel/block_retracted", "y": 180 }, - "facing=west,powered=false,shape=retracted": { + "facing=west,powered=false,pushing=true,shape=retracted": { "model": "create:block/belt_funnel/block_retracted", "y": 270 }, - "facing=east,powered=false,shape=retracted": { + "facing=east,powered=false,pushing=true,shape=retracted": { "model": "create:block/belt_funnel/block_retracted", "y": 90 }, - "facing=north,powered=true,shape=retracted": { - "model": "create:block/belt_funnel/block_retracted_powered" + "facing=north,powered=true,pushing=true,shape=retracted": { + "model": "create:block/belt_funnel_push_on_retracted" }, - "facing=south,powered=true,shape=retracted": { - "model": "create:block/belt_funnel/block_retracted_powered", + "facing=south,powered=true,pushing=true,shape=retracted": { + "model": "create:block/belt_funnel_push_on_retracted", "y": 180 }, - "facing=west,powered=true,shape=retracted": { - "model": "create:block/belt_funnel/block_retracted_powered", + "facing=west,powered=true,pushing=true,shape=retracted": { + "model": "create:block/belt_funnel_push_on_retracted", "y": 270 }, - "facing=east,powered=true,shape=retracted": { - "model": "create:block/belt_funnel/block_retracted_powered", + "facing=east,powered=true,pushing=true,shape=retracted": { + "model": "create:block/belt_funnel_push_on_retracted", "y": 90 }, - "facing=north,powered=false,shape=extended": { + "facing=north,powered=false,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_off_extended" + }, + "facing=south,powered=false,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_off_extended", + "y": 180 + }, + "facing=west,powered=false,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_off_extended", + "y": 270 + }, + "facing=east,powered=false,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_off_extended", + "y": 90 + }, + "facing=north,powered=true,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_on_extended" + }, + "facing=south,powered=true,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_on_extended", + "y": 180 + }, + "facing=west,powered=true,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_on_extended", + "y": 270 + }, + "facing=east,powered=true,pushing=false,shape=extended": { + "model": "create:block/belt_funnel_pull_on_extended", + "y": 90 + }, + "facing=north,powered=false,pushing=true,shape=extended": { "model": "create:block/belt_funnel/block_extended" }, - "facing=south,powered=false,shape=extended": { + "facing=south,powered=false,pushing=true,shape=extended": { "model": "create:block/belt_funnel/block_extended", "y": 180 }, - "facing=west,powered=false,shape=extended": { + "facing=west,powered=false,pushing=true,shape=extended": { "model": "create:block/belt_funnel/block_extended", "y": 270 }, - "facing=east,powered=false,shape=extended": { + "facing=east,powered=false,pushing=true,shape=extended": { "model": "create:block/belt_funnel/block_extended", "y": 90 }, - "facing=north,powered=true,shape=extended": { - "model": "create:block/belt_funnel/block_extended_powered" + "facing=north,powered=true,pushing=true,shape=extended": { + "model": "create:block/belt_funnel_push_on_extended" }, - "facing=south,powered=true,shape=extended": { - "model": "create:block/belt_funnel/block_extended_powered", + "facing=south,powered=true,pushing=true,shape=extended": { + "model": "create:block/belt_funnel_push_on_extended", "y": 180 }, - "facing=west,powered=true,shape=extended": { - "model": "create:block/belt_funnel/block_extended_powered", + "facing=west,powered=true,pushing=true,shape=extended": { + "model": "create:block/belt_funnel_push_on_extended", "y": 270 }, - "facing=east,powered=true,shape=extended": { - "model": "create:block/belt_funnel/block_extended_powered", + "facing=east,powered=true,pushing=true,shape=extended": { + "model": "create:block/belt_funnel_push_on_extended", "y": 90 } } diff --git a/src/generated/resources/assets/create/blockstates/chute_funnel.json b/src/generated/resources/assets/create/blockstates/chute_funnel.json new file mode 100644 index 000000000..59a0eda96 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/chute_funnel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,powered=false,pushing=false": { + "model": "create:block/chute_funnel_pull_off" + }, + "facing=south,powered=false,pushing=false": { + "model": "create:block/chute_funnel_pull_off", + "y": 180 + }, + "facing=west,powered=false,pushing=false": { + "model": "create:block/chute_funnel_pull_off", + "y": 270 + }, + "facing=east,powered=false,pushing=false": { + "model": "create:block/chute_funnel_pull_off", + "y": 90 + }, + "facing=north,powered=true,pushing=false": { + "model": "create:block/chute_funnel_pull_on" + }, + "facing=south,powered=true,pushing=false": { + "model": "create:block/chute_funnel_pull_on", + "y": 180 + }, + "facing=west,powered=true,pushing=false": { + "model": "create:block/chute_funnel_pull_on", + "y": 270 + }, + "facing=east,powered=true,pushing=false": { + "model": "create:block/chute_funnel_pull_on", + "y": 90 + }, + "facing=north,powered=false,pushing=true": { + "model": "create:block/chute_funnel/block" + }, + "facing=south,powered=false,pushing=true": { + "model": "create:block/chute_funnel/block", + "y": 180 + }, + "facing=west,powered=false,pushing=true": { + "model": "create:block/chute_funnel/block", + "y": 270 + }, + "facing=east,powered=false,pushing=true": { + "model": "create:block/chute_funnel/block", + "y": 90 + }, + "facing=north,powered=true,pushing=true": { + "model": "create:block/chute_funnel_push_on" + }, + "facing=south,powered=true,pushing=true": { + "model": "create:block/chute_funnel_push_on", + "y": 180 + }, + "facing=west,powered=true,pushing=true": { + "model": "create:block/chute_funnel_push_on", + "y": 270 + }, + "facing=east,powered=true,pushing=true": { + "model": "create:block/chute_funnel_push_on", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/chute_port.json b/src/generated/resources/assets/create/blockstates/chute_port.json deleted file mode 100644 index dc926c2ca..000000000 --- a/src/generated/resources/assets/create/blockstates/chute_port.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "variants": { - "facing=north": { - "model": "create:block/chute_port" - }, - "facing=south": { - "model": "create:block/chute_port", - "y": 180 - }, - "facing=west": { - "model": "create:block/chute_port", - "y": 270 - }, - "facing=east": { - "model": "create:block/chute_port", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index a35239349..f35699efa 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -33,7 +33,7 @@ "block.create.chiseled_scoria": "\u0250\u0131\u0279o\u0254S p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", "block.create.chiseled_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u05DF\u01DDs\u0131\u0265\u0186", "block.create.chute": "\u01DD\u0287n\u0265\u0186", - "block.create.chute_port": "\u0287\u0279o\u0500 \u01DD\u0287n\u0265\u0186", + "block.create.chute_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287n\u0265\u0186", "block.create.clockwork_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186", "block.create.clutch": "\u0265\u0254\u0287n\u05DF\u0186", "block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index fcc292fd4..6697c96bb 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -36,7 +36,7 @@ "block.create.chiseled_scoria": "Chiseled Scoria", "block.create.chiseled_weathered_limestone": "Chiseled Weathered Limestone", "block.create.chute": "Chute", - "block.create.chute_port": "Chute Port", + "block.create.chute_funnel": "Chute Funnel", "block.create.clockwork_bearing": "Clockwork Bearing", "block.create.clutch": "Clutch", "block.create.cogwheel": "Cogwheel", diff --git a/src/generated/resources/assets/create/models/block/belt_funnel_pull_off_extended.json b/src/generated/resources/assets/create/models/block/belt_funnel_pull_off_extended.json new file mode 100644 index 000000000..d5b74c732 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/belt_funnel_pull_off_extended.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "2": "create:block/belt_funnel_pull_off" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_funnel_pull_off_retracted.json b/src/generated/resources/assets/create/models/block/belt_funnel_pull_off_retracted.json new file mode 100644 index 000000000..8139c8f3c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/belt_funnel_pull_off_retracted.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "2": "create:block/belt_funnel_pull_off" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_funnel_pull_on_extended.json b/src/generated/resources/assets/create/models/block/belt_funnel_pull_on_extended.json new file mode 100644 index 000000000..04c877bc1 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/belt_funnel_pull_on_extended.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "2": "create:block/belt_funnel_pull_on" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_funnel_pull_on_retracted.json b/src/generated/resources/assets/create/models/block/belt_funnel_pull_on_retracted.json new file mode 100644 index 000000000..a0e81c6cd --- /dev/null +++ b/src/generated/resources/assets/create/models/block/belt_funnel_pull_on_retracted.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "2": "create:block/belt_funnel_pull_on" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_funnel_push_on_extended.json b/src/generated/resources/assets/create/models/block/belt_funnel_push_on_extended.json new file mode 100644 index 000000000..94272c53b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/belt_funnel_push_on_extended.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "2": "create:block/belt_funnel_push_on" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/belt_funnel_push_on_retracted.json b/src/generated/resources/assets/create/models/block/belt_funnel_push_on_retracted.json new file mode 100644 index 000000000..a1800b8e0 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/belt_funnel_push_on_retracted.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "2": "create:block/belt_funnel_push_on" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/chute_funnel_pull_off.json b/src/generated/resources/assets/create/models/block/chute_funnel_pull_off.json new file mode 100644 index 000000000..f506327e4 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/chute_funnel_pull_off.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/chute_funnel/block", + "textures": { + "3": "create:block/belt_funnel_pull_off" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/chute_funnel_pull_on.json b/src/generated/resources/assets/create/models/block/chute_funnel_pull_on.json new file mode 100644 index 000000000..2ae11c5a2 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/chute_funnel_pull_on.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/chute_funnel/block", + "textures": { + "3": "create:block/belt_funnel_pull_on" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/chute_funnel_push_on.json b/src/generated/resources/assets/create/models/block/chute_funnel_push_on.json new file mode 100644 index 000000000..a41a5207c --- /dev/null +++ b/src/generated/resources/assets/create/models/block/chute_funnel_push_on.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/chute_funnel/block", + "textures": { + "3": "create:block/belt_funnel_push_on" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/chute_port.json b/src/generated/resources/assets/create/models/item/chute_port.json deleted file mode 100644 index 173b26be8..000000000 --- a/src/generated/resources/assets/create/models/item/chute_port.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/chute_port" -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/chute_port.json b/src/generated/resources/data/create/loot_tables/blocks/chute_funnel.json similarity index 86% rename from src/generated/resources/data/create/loot_tables/blocks/chute_port.json rename to src/generated/resources/data/create/loot_tables/blocks/chute_funnel.json index bd3837343..4f7095793 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/chute_port.json +++ b/src/generated/resources/data/create/loot_tables/blocks/chute_funnel.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "create:chute_port" + "name": "create:reality_funnel" } ], "conditions": [ diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index ed2b72bbb..cbfd936ee 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -78,7 +78,6 @@ import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.chute.ChuteBlock; import com.simibubi.create.content.logistics.block.chute.ChuteGenerator; import com.simibubi.create.content.logistics.block.chute.ChuteItem; -import com.simibubi.create.content.logistics.block.chute.ChutePortBlock; import com.simibubi.create.content.logistics.block.depot.DepotBlock; import com.simibubi.create.content.logistics.block.diodes.AbstractDiodeGenerator; import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterBlock; @@ -99,6 +98,9 @@ import com.simibubi.create.content.logistics.block.inventories.CreativeCrateBloc import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock; import com.simibubi.create.content.logistics.block.packager.PackagerBlock; import com.simibubi.create.content.logistics.block.realityFunnel.BeltFunnelBlock; +import com.simibubi.create.content.logistics.block.realityFunnel.BeltFunnelGenerator; +import com.simibubi.create.content.logistics.block.realityFunnel.ChuteFunnelBlock; +import com.simibubi.create.content.logistics.block.realityFunnel.ChuteFunnelGenerator; import com.simibubi.create.content.logistics.block.realityFunnel.FunnelItem; import com.simibubi.create.content.logistics.block.realityFunnel.RealityFunnelBlock; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock; @@ -720,12 +722,6 @@ public class AllBlocks { .transform(customItemModel("_", "block")) .register(); - public static final BlockEntry CHUTE_PORT = REGISTRATE.block("chute_port", ChutePortBlock::new) - .initialProperties(SharedProperties::softMetal) - .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.standardModel(c, p))) - .simpleItem() - .register(); - public static final BlockEntry PACKAGER = REGISTRATE.block("packager", PackagerBlock::new) .initialProperties(SharedProperties::softMetal) .transform(StressConfigDefaults.setImpact(4.0)) @@ -749,12 +745,13 @@ public class AllBlocks { public static final BlockEntry BELT_FUNNEL = REGISTRATE.block("belt_funnel", BeltFunnelBlock::new) .initialProperties(SharedProperties::softMetal) - .blockstate((c, p) -> p.horizontalBlock(c.get(), s -> { - String shape = s.get(BeltFunnelBlock.SHAPE) - .getName(); - return s.get(BeltFunnelBlock.POWERED) ? AssetLookup.partialBaseModel(c, p, shape, "powered") - : AssetLookup.partialBaseModel(c, p, shape); - })) + .blockstate(new BeltFunnelGenerator()::generate) + .loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get())) + .register(); + + public static final BlockEntry CHUTE_FUNNEL = REGISTRATE.block("chute_funnel", ChuteFunnelBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate(new ChuteFunnelGenerator()::generate) .loot((p, b) -> p.registerDropping(b, REALITY_FUNNEL.get())) .register(); diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 9404ed41c..cb9a26925 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -69,6 +69,10 @@ public class AllShapes { .add(1, 6, 1, 15, 10, 15) .add(0, 10, 0, 16, 16, 16) .forDirectional(UP), + CHUTE_FUNNEL = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14) + .add(1, 5, 1, 15, 16, 15) + .add(0, 8, 0, 16, 14, 16) + .forDirectional(UP), BELT_FUNNEL_RETRACTED = shape(3, -5, 14, 13, 13, 19).add(0, -5, 8, 16, 16, 14) .forHorizontal(NORTH), BELT_FUNNEL_DEFAULT = shape(3, -5, 12, 13, 13, 17).add(0, -5, 6, 16, 16, 12) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChutePortBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChutePortBlock.java deleted file mode 100644 index 021d743ba..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChutePortBlock.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.simibubi.create.content.logistics.block.chute; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalBlock; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.StateContainer.Builder; - -public class ChutePortBlock extends HorizontalBlock { - - public ChutePortBlock(Properties p_i48377_1_) { - super(p_i48377_1_); - } - - @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING)); - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext p_196258_1_) { - return getDefaultState().with(HORIZONTAL_FACING, p_196258_1_.getPlacementHorizontalFacing()); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java index fb7217329..14feeab13 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelBlock.java @@ -1,10 +1,8 @@ package com.simibubi.create.content.logistics.block.realityFunnel; -import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock.Slope; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.depot.DepotBlock; import com.simibubi.create.foundation.utility.Lang; @@ -12,33 +10,22 @@ import com.simibubi.create.foundation.utility.VoxelShaper; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalBlock; -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.IProperty; import net.minecraft.state.StateContainer.Builder; -import net.minecraft.state.properties.BlockStateProperties; -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.ILightReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; -import net.minecraft.world.World; -public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable { +public class BeltFunnelBlock extends HorizontalInteractionFunnelBlock { public static final IProperty SHAPE = EnumProperty.create("shape", Shape.class); - public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public enum Shape implements IStringSerializable { RETRACTED(AllShapes.BELT_FUNNEL_RETRACTED), EXTENDED(AllShapes.BELT_FUNNEL_EXTENDED); @@ -57,13 +44,12 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable { public BeltFunnelBlock(Properties p_i48377_1_) { super(p_i48377_1_); - setDefaultState(getDefaultState().with(SHAPE, Shape.RETRACTED) - .with(POWERED, false)); + setDefaultState(getDefaultState().with(SHAPE, Shape.RETRACTED)); } @Override protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, SHAPE, POWERED)); + super.fillStateContainer(p_206840_1_.add(SHAPE)); } @Override @@ -72,35 +58,13 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable { return state.get(SHAPE).shaper.get(state.get(HORIZONTAL_FACING)); } - @Override - public BlockState getStateForPlacement(BlockItemUseContext ctx) { - return updateShape(super.getStateForPlacement(ctx), ctx.getWorld(), ctx.getPos()).with(POWERED, ctx.getWorld() - .isBlockPowered(ctx.getPos())); - } - - @Override - public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, - PlayerEntity player) { - return AllBlocks.REALITY_FUNNEL.asStack(); - } - @Override public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world, BlockPos pos, BlockPos p_196271_6_) { - if (direction == Direction.DOWN && !isOnValidBelt(state, world, pos)) - return AllBlocks.REALITY_FUNNEL.getDefaultState() - .with(RealityFunnelBlock.FACING, state.get(HORIZONTAL_FACING)); if (direction == state.get(HORIZONTAL_FACING)) return updateShape(state, world, pos); - return state; - } - - @Override - public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { - return !world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING) - .getOpposite())) - .getShape(world, pos) - .isEmpty(); + else + return super.updatePostPlacement(state, direction, neighbour, world, pos, p_196271_6_); } public static boolean isOnValidBelt(BlockState state, IWorldReader world, BlockPos pos) { @@ -118,24 +82,7 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable { return true; } - @Override - public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, - boolean isMoving) { - if (worldIn.isRemote) - return; - - Direction blockFacing = state.get(HORIZONTAL_FACING) - .getOpposite(); - if (fromPos.equals(pos.offset(blockFacing))) - if (!isValidPosition(state, worldIn, pos)) - worldIn.destroyBlock(pos, true); - - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); - } - - private BlockState updateShape(BlockState state, ILightReader world, BlockPos pos) { + public static BlockState updateShape(BlockState state, ILightReader world, BlockPos pos) { state = state.with(SHAPE, Shape.RETRACTED); BlockState neighbour = world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING))); if (canConnectTo(state, neighbour)) @@ -143,21 +90,19 @@ public class BeltFunnelBlock extends HorizontalBlock implements IWrenchable { return state; } - private boolean canConnectTo(BlockState state, BlockState neighbour) { + private static boolean canConnectTo(BlockState state, BlockState neighbour) { if (neighbour.getBlock() instanceof BeltTunnelBlock) return true; - if (neighbour.getBlock() == this && neighbour.get(HORIZONTAL_FACING) == state.get(HORIZONTAL_FACING) - .getOpposite()) + if (neighbour.getBlock() instanceof BeltFunnelBlock + && neighbour.get(HORIZONTAL_FACING) == state.get(HORIZONTAL_FACING) + .getOpposite()) return true; return false; } @Override - public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - if (!context.getWorld().isRemote) - context.getWorld() - .setBlockState(context.getPos(), state.cycle(SHAPE)); - return ActionResultType.SUCCESS; + protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) { + return isOnValidBelt(state, world, pos); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelGenerator.java new file mode 100644 index 000000000..0b74af3fe --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/BeltFunnelGenerator.java @@ -0,0 +1,39 @@ +package com.simibubi.create.content.logistics.block.realityFunnel; + +import com.simibubi.create.foundation.data.AssetLookup; +import com.simibubi.create.foundation.data.SpecialBlockStateGen; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraftforge.client.model.generators.ModelFile; + +public class BeltFunnelGenerator extends SpecialBlockStateGen { + + @Override + protected int getXRotation(BlockState state) { + return 0; + } + + @Override + protected int getYRotation(BlockState state) { + return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180; + } + + @Override + public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, + BlockState state) { + boolean pushing = state.get(BeltFunnelBlock.PUSHING); + boolean powered = state.get(BeltFunnelBlock.POWERED); + String shapeName = state.get(BeltFunnelBlock.SHAPE) + .getName(); + if (pushing && !powered) + return AssetLookup.partialBaseModel(ctx, prov, shapeName); + String name = ctx.getName() + "_" + (pushing ? "push_" : "pull_") + (powered ? "on" : "off"); + return prov.models() + .withExistingParent(name + "_" + shapeName, prov.modLoc("block/" + ctx.getName() + "/block_" + shapeName)) + .texture("2", prov.modLoc("block/" + name)); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelBlock.java new file mode 100644 index 000000000..25f79c470 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelBlock.java @@ -0,0 +1,39 @@ +package com.simibubi.create.content.logistics.block.realityFunnel; + +import com.simibubi.create.AllShapes; +import com.simibubi.create.content.logistics.block.chute.ChuteBlock; + +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorldReader; + +public class ChuteFunnelBlock extends HorizontalInteractionFunnelBlock { + + public ChuteFunnelBlock(Properties p_i48377_1_) { + super(p_i48377_1_); + } + + public static boolean isOnValidChute(BlockState state, IWorldReader world, BlockPos pos) { + Direction direction = state.get(HORIZONTAL_FACING); + if (world.getBlockState(pos.offset(direction)) + .getBlock() instanceof ChuteBlock) + return true; + return false; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.CHUTE_FUNNEL.get(state.get(HORIZONTAL_FACING)); + } + + @Override + protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) { + return isOnValidChute(state, world, pos); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelGenerator.java new file mode 100644 index 000000000..98ce6320f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/ChuteFunnelGenerator.java @@ -0,0 +1,39 @@ +package com.simibubi.create.content.logistics.block.realityFunnel; + +import com.simibubi.create.foundation.data.AssetLookup; +import com.simibubi.create.foundation.data.SpecialBlockStateGen; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraftforge.client.model.generators.ModelFile; + +public class ChuteFunnelGenerator extends SpecialBlockStateGen { + + @Override + protected int getXRotation(BlockState state) { + return 0; + } + + @Override + protected int getYRotation(BlockState state) { + return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180; + } + + @Override + public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, + BlockState state) { + boolean pushing = state.get(ChuteFunnelBlock.PUSHING); + boolean powered = state.get(ChuteFunnelBlock.POWERED); + if (pushing && !powered) + return AssetLookup.partialBaseModel(ctx, prov); + String suffix = (pushing ? "push_" : "pull_") + (powered ? "on" : "off"); + String textureName = "belt_funnel_" + suffix; + String modelName = ctx.getName() + "_" + suffix; + return prov.models() + .withExistingParent(modelName, prov.modLoc("block/" + ctx.getName() + "/block")) + .texture("3", prov.modLoc("block/" + textureName)); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/FunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/FunnelItem.java index a546eb1a9..5dd0d6ed8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/FunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/FunnelItem.java @@ -7,6 +7,9 @@ import net.minecraft.block.BlockState; import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItemUseContext; import net.minecraft.util.Direction; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public class FunnelItem extends BlockItem { @@ -25,11 +28,25 @@ public class FunnelItem extends BlockItem { if (!direction.getAxis() .isHorizontal()) return state; + BlockState equivalentBeltFunnel = AllBlocks.BELT_FUNNEL.get() .getStateForPlacement(ctx) .with(BeltFunnelBlock.HORIZONTAL_FACING, direction); - if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, ctx.getWorld(), ctx.getPos())) - return equivalentBeltFunnel; + BlockState equivalentChuteFunnel = AllBlocks.CHUTE_FUNNEL.get() + .getStateForPlacement(ctx) + .with(ChuteFunnelBlock.HORIZONTAL_FACING, direction); + BlockState reversedChuteFunnel = equivalentChuteFunnel.rotate(Rotation.CLOCKWISE_180) + .cycle(ChuteFunnelBlock.PUSHING); + + World world = ctx.getWorld(); + BlockPos pos = ctx.getPos(); + if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, world, pos)) + return BeltFunnelBlock.updateShape(equivalentBeltFunnel, world, pos); + if (ChuteFunnelBlock.isOnValidChute(equivalentChuteFunnel, world, pos)) + return equivalentChuteFunnel; + if (ChuteFunnelBlock.isOnValidChute(reversedChuteFunnel, world, pos)) + return reversedChuteFunnel; + return state; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/HorizontalInteractionFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/HorizontalInteractionFunnelBlock.java new file mode 100644 index 000000000..57774d5c7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/HorizontalInteractionFunnelBlock.java @@ -0,0 +1,90 @@ +package com.simibubi.create.content.logistics.block.realityFunnel; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.HorizontalBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; + +public abstract class HorizontalInteractionFunnelBlock extends HorizontalBlock implements IWrenchable { + + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public static final BooleanProperty PUSHING = BooleanProperty.create("pushing"); + + public HorizontalInteractionFunnelBlock(Properties p_i48377_1_) { + super(p_i48377_1_); + setDefaultState(getDefaultState().with(PUSHING, true) + .with(POWERED, false)); + } + + @Override + protected void fillStateContainer(Builder p_206840_1_) { + super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, POWERED, PUSHING)); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext ctx) { + return super.getStateForPlacement(ctx).with(POWERED, ctx.getWorld() + .isBlockPowered(ctx.getPos())); + } + + @Override + public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, + PlayerEntity player) { + return AllBlocks.REALITY_FUNNEL.asStack(); + } + + @Override + public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world, + BlockPos pos, BlockPos p_196271_6_) { + if (!canStillInteract(state, world, pos)) + return AllBlocks.REALITY_FUNNEL.getDefaultState() + .with(RealityFunnelBlock.FACING, state.get(HORIZONTAL_FACING)); + return state; + } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { + return !world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING) + .getOpposite())) + .getShape(world, pos) + .isEmpty(); + } + + protected abstract boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos); + + @Override + public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + if (worldIn.isRemote) + return; + boolean previouslyPowered = state.get(POWERED); + if (previouslyPowered != worldIn.isBlockPowered(pos)) + worldIn.setBlockState(pos, state.cycle(POWERED), 2); + } + + @Override + public ActionResultType onWrenched(BlockState state, ItemUseContext context) { + if (!context.getWorld().isRemote) + context.getWorld() + .setBlockState(context.getPos(), state.cycle(PUSHING)); + return ActionResultType.SUCCESS; + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/RealityFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/RealityFunnelBlock.java index e3873d576..54db37f47 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/RealityFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/realityFunnel/RealityFunnelBlock.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.block.realityFunnel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; +import com.simibubi.create.content.logistics.block.chute.ChuteBlock; import com.simibubi.create.foundation.block.ProperDirectionalBlock; import net.minecraft.block.Block; @@ -22,7 +23,7 @@ import net.minecraft.world.World; public class RealityFunnelBlock extends ProperDirectionalBlock { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - + public RealityFunnelBlock(Properties p_i48415_1_) { super(p_i48415_1_); setDefaultState(getDefaultState().with(POWERED, false)); @@ -30,16 +31,24 @@ public class RealityFunnelBlock extends ProperDirectionalBlock { @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(FACING, context.getFace()) + Direction facing = context.getFace(); + if (facing.getAxis() + .isVertical() + && context.getWorld() + .getBlockState(context.getPos() + .offset(facing.getOpposite())) + .getBlock() instanceof ChuteBlock) + facing = facing.getOpposite(); + return getDefaultState().with(FACING, facing) .with(POWERED, context.getWorld() .isBlockPowered(context.getPos())); } - + @Override protected void fillStateContainer(Builder builder) { super.fillStateContainer(builder.add(POWERED)); } - + @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { @@ -49,13 +58,31 @@ public class RealityFunnelBlock extends ProperDirectionalBlock { @Override public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState p_196271_3_, IWorld world, BlockPos pos, BlockPos p_196271_6_) { - if (state.get(FACING) - .getAxis() - .isHorizontal() && direction == Direction.DOWN) { - BlockState equivalentFunnel = AllBlocks.BELT_FUNNEL.getDefaultState() - .with(BeltFunnelBlock.HORIZONTAL_FACING, state.get(FACING)); - if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos)) - return equivalentFunnel; + Direction facing = state.get(FACING); + if (facing.getAxis() + .isHorizontal()) { + if (direction == Direction.DOWN) { + BlockState equivalentFunnel = AllBlocks.BELT_FUNNEL.getDefaultState() + .with(BeltFunnelBlock.HORIZONTAL_FACING, facing) + .with(BeltFunnelBlock.POWERED, state.get(POWERED)); + if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos)) + return equivalentFunnel; + } + if (direction == facing) { + BlockState equivalentFunnel = AllBlocks.CHUTE_FUNNEL.getDefaultState() + .with(ChuteFunnelBlock.HORIZONTAL_FACING, facing) + .with(ChuteFunnelBlock.POWERED, state.get(POWERED)); + if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos)) + return equivalentFunnel; + } + if (direction == facing.getOpposite()) { + BlockState equivalentFunnel = AllBlocks.CHUTE_FUNNEL.getDefaultState() + .with(ChuteFunnelBlock.HORIZONTAL_FACING, facing.getOpposite()) + .cycle(ChuteFunnelBlock.PUSHING) + .with(ChuteFunnelBlock.POWERED, state.get(POWERED)); + if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos)) + return equivalentFunnel; + } } return state; } @@ -65,13 +92,6 @@ public class RealityFunnelBlock extends ProperDirectionalBlock { boolean isMoving) { if (worldIn.isRemote) return; - - Direction blockFacing = state.get(FACING) - .getOpposite(); - if (fromPos.equals(pos.offset(blockFacing))) - if (!isValidPosition(state, worldIn, pos)) - worldIn.destroyBlock(pos, true); - boolean previouslyPowered = state.get(POWERED); if (previouslyPowered != worldIn.isBlockPowered(pos)) worldIn.setBlockState(pos, state.cycle(POWERED), 2); @@ -79,10 +99,10 @@ public class RealityFunnelBlock extends ProperDirectionalBlock { @Override public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { - return !world.getBlockState(pos.offset(state.get(FACING) + Block block = world.getBlockState(pos.offset(state.get(FACING) .getOpposite())) - .getShape(world, pos) - .isEmpty(); + .getBlock(); + return !(block instanceof RealityFunnelBlock) && !(block instanceof HorizontalInteractionFunnelBlock); } } diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json b/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json index 5ada74bb1..bbdb5514d 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/funnel_off", + "2": "create:block/belt_funnel_push_off", "3": "create:block/funnel_back", "4": "create:block/funnel_plating", "particle": "create:block/brass_block" diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_extended_powered.json b/src/main/resources/assets/create/models/block/belt_funnel/block_extended_powered.json deleted file mode 100644 index a0fbb44b3..000000000 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_extended_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_funnel/block_extended", - "textures": { - "2": "create:block/funnel_on" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json b/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json index 7ff538d50..336419898 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/funnel_off", + "2": "create:block/belt_funnel_push_off", "3": "create:block/funnel_back", "4": "create:block/funnel_plating", "particle": "create:block/brass_block" diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_retracted_powered.json b/src/main/resources/assets/create/models/block/belt_funnel/block_retracted_powered.json deleted file mode 100644 index 65664520e..000000000 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_retracted_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/belt_funnel/block_retracted", - "textures": { - "2": "create:block/funnel_on" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/chute_funnel/block.json b/src/main/resources/assets/create/models/block/chute_funnel/block.json new file mode 100644 index 000000000..5a64bd828 --- /dev/null +++ b/src/main/resources/assets/create/models/block/chute_funnel/block.json @@ -0,0 +1,248 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "3": "create:block/belt_funnel_push_off", + "4": "create:block/funnel_plating", + "13": "create:block/chute", + "3_particle": "create:block/brass_block", + "particle": "create:block/brass_block", + "1_2": "create:block/funnel_back" + }, + "elements": [ + { + "name": "RightWall", + "from": [0, 0, 2], + "to": [2, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]}, + "faces": { + "north": {"uv": [14, 0, 16, 16], "texture": "#3_particle"}, + "east": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 0, 2, 16], "texture": "#3_particle"}, + "west": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#3"}, + "up": {"uv": [0, 0, 2, 6], "texture": "#3"}, + "down": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "LeftWall", + "from": [14, 0, 2], + "to": [16, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]}, + "faces": { + "north": {"uv": [0, 0, 2, 16], "texture": "#3_particle"}, + "east": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [14, 0, 16, 16], "texture": "#3_particle"}, + "west": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#3"}, + "up": {"uv": [14, 0, 16, 6], "texture": "#3"}, + "down": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "Top", + "from": [2, 14, 2], + "to": [14, 16, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]}, + "faces": { + "north": {"uv": [2, 0, 14, 2], "texture": "#3_particle"}, + "south": {"uv": [2, 0, 14, 2], "texture": "#3_particle"}, + "up": {"uv": [2, 0, 14, 6], "texture": "#3"}, + "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "Top", + "from": [2, 0, 2], + "to": [14, 2, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]}, + "faces": { + "north": {"uv": [2, 14, 14, 16], "texture": "#3_particle"}, + "south": {"uv": [2, 14, 14, 16], "texture": "#3_particle"}, + "up": {"uv": [2, 0, 14, 6], "texture": "#3"}, + "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#3"} + } + }, + { + "name": "F5", + "from": [11, 1.5, 3], + "to": [14, 14.5, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9.5]}, + "faces": { + "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} + } + }, + { + "name": "F6", + "from": [5, 1.5, 3], + "to": [8, 14.5, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9.5]}, + "faces": { + "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} + } + }, + { + "name": "F6", + "from": [8, 1.5, 3], + "to": [11, 14.5, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9.5]}, + "faces": { + "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} + } + }, + { + "name": "F7", + "from": [2, 1.5, 3], + "to": [5, 14.5, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9.5]}, + "faces": { + "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} + } + }, + { + "name": "BackExtension", + "from": [2, 2, 10], + "to": [14, 14, 14], + "faces": { + "east": {"uv": [13, 10, 15, 16], "texture": "#1_2"}, + "south": {"uv": [9, 0.5, 15, 6.5], "texture": "#1_2"}, + "west": {"uv": [13, 10, 15, 16], "rotation": 180, "texture": "#1_2"}, + "up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#1_2"}, + "down": {"uv": [13, 10, 15, 16], "rotation": 90, "texture": "#1_2"} + } + }, + { + "name": "MidExtension", + "from": [1, 1, 7], + "to": [15, 15, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]}, + "faces": { + "north": {"uv": [0, 9, 7, 16], "texture": "#1_2"}, + "east": {"uv": [11, 9, 13, 16], "rotation": 180, "texture": "#1_2"}, + "south": {"uv": [8.5, 0, 15.5, 7], "texture": "#1_2"}, + "west": {"uv": [11, 9, 13, 16], "texture": "#1_2"}, + "up": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#1_2"}, + "down": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#1_2"} + } + }, + { + "name": "Back", + "from": [3, 3, 14], + "to": [13, 13, 18], + "faces": { + "east": {"uv": [9.5, 9, 14.5, 11], "rotation": 90, "texture": "#4"}, + "south": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"}, + "west": {"uv": [9.5, 9, 14.5, 11], "rotation": 270, "texture": "#4"}, + "up": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, + "down": {"uv": [9.5, 9, 14.5, 11], "rotation": 180, "texture": "#4"} + } + }, + { + "name": "Back", + "from": [1.1, 1.1, -2.9], + "to": [14.9, 14.9, 2.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6]}, + "faces": { + "north": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#13"}, + "east": {"uv": [0, 13.5, 7, 16], "rotation": 90, "texture": "#13"}, + "west": {"uv": [0, 13.5, 7, 16], "rotation": 270, "texture": "#13"}, + "up": {"uv": [0, 13.5, 7, 16], "texture": "#13"}, + "down": {"uv": [0, 13.5, 7, 16], "rotation": 180, "texture": "#13"} + } + }, + { + "name": "Back", + "from": [2.1, 1.1, -6.7], + "to": [13.9, 4.9, -2.9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -54]}, + "faces": { + "north": {"uv": [9, 6, 15, 8], "texture": "#13"}, + "east": {"uv": [11, 6, 13, 8], "texture": "#13"}, + "south": {"uv": [0, 0, 7, 7], "texture": "#13"}, + "west": {"uv": [11, 6, 13, 8], "texture": "#13"}, + "up": {"uv": [8.5, 1, 15.5, 3], "rotation": 180, "texture": "#13"}, + "down": {"uv": [9, 4.5, 15, 6.5], "texture": "#13"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3.25, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 1, 0], + "scale": [0.5, 0.5, 0.5] + }, + "head": { + "rotation": [0, 90, 0] + }, + "fixed": { + "rotation": [0, 90, 0], + "translation": [0, 1.5, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "block", + "origin": [8, 8, 8], + "children": [ + { + "name": "BeltFunnel", + "origin": [9, -4, 8], + "children": [ + { + "name": "FrontSection", + "origin": [9, -4, 8], + "children": [0, 1, 2, 3, + { + "name": "Flap", + "origin": [8, 8, 8], + "children": [4, 5, 6, 7] + } + ] + }, + { + "name": "Extension", + "origin": [9, -4, 8], + "children": [8, 9] + }, + { + "name": "DELETABLEEXTENSION", + "origin": [9, -4, 8], + "children": [] + }, + { + "name": "DELETABLEEXTESNIONMID", + "origin": [35, 12, 4], + "children": [] + }, + { + "name": "Base", + "origin": [9, -4, 8], + "children": [10, 11] + } + ] + }, 12] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/chute_port.json b/src/main/resources/assets/create/models/block/chute_port.json deleted file mode 100644 index 631e2d653..000000000 --- a/src/main/resources/assets/create/models/block/chute_port.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "14": "create:block/chute_port", - "particle": "create:block/zinc_block" - }, - "elements": [ - { - "name": "Port", - "from": [0, 0, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [12, 0, 16, 4], "texture": "#14"}, - "east": {"uv": [0, 0, 4, 4], "texture": "#14"}, - "south": {"uv": [0, 0, 4, 4], "texture": "#14"}, - "west": {"uv": [0, 0, 4, 4], "texture": "#14"}, - "up": {"uv": [4, 4, 8, 8], "texture": "#14"}, - "down": {"uv": [0, 4, 4, 8], "texture": "#14"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/belt_funnel_pull_off.png b/src/main/resources/assets/create/textures/block/belt_funnel_pull_off.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb3fab83118246f4cdf9a81c2a2c01979af75c8 GIT binary patch literal 438 zcmV;n0ZIOeP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940ZU0lK~y+T#gV&8 z15pr$|GgwJ(SQ~fsVqzp2ufrX!KV-_Ye5?;A3zBD3|4}Vps}#APbmSx3lW4M7$Kmj zG0R?$GqbMEstHNq55w-6GygDWK5cJjUV-F#A<`)wN-2aP5QLIO%G45P{`Y;LXZtYO zxKOg-`2k%TXxv_4rLv5-t|Nw6&#yf^cA6*`Ejj1L44l{NkO?O9vpC+bVVo}V6z>$< zhZ|^jx?Bs#^>A9PVG7X{PZVprtGIu-fzA`KGSI%w9~1|hM<`5Bi21B~0*A~mRKxdN z%i^bKTkA!&G-t{CxtZ;_$Y#<~&}v`FccxI5ylF&6mLDkGwXUNExvcq>9!&8It6jVU=0ddUQ_7o&e7XSbN07*qoM6N<$g0Q-?1ONa4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/belt_funnel_pull_on.png b/src/main/resources/assets/create/textures/block/belt_funnel_pull_on.png new file mode 100644 index 0000000000000000000000000000000000000000..cb757e00fd5cc0b4ab859e96b971b86e7a20bb39 GIT binary patch literal 433 zcmV;i0Z#sjP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz0Y*tgK~y+T#gV&8 z13?sq|JmI{6I5)1q}sw13qeU(FW_6)*(>(GfI^-_UqM^3Pa{Y`yo3nCVlYS`V2D}v zI-WCT3)x^oQuxEqoS8Z2FmpapJK2;V`9X|qMuU_RaSTMUI!4A2sXfPG2n^j21{YQ> z8$lS+rH)4P4tted^aq|QNYwir;=S8Kxn!$-eo@Cwy$ol(v;nZ;ib#|I_3 zyPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TIy{R+A&A$duFE~3o$B26vb@uA)&DrkB z7V3>Aj?1SQgu)n-E*_k%@2`pPv2}_8?UJdDgA!UU`Ps$rov{>0QQMo7c6qKS^Rrm3 zUd8I-3WCQbJP%MwEIwNy?i<%Aj8DnkL>4!-tE51F_-D3mlrEI&i2{|9$WV|1QY1=~5M!){k6s{pr680N+Ci%F4@| RAb0=(002ovPDHLkV1nLau3!KF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/belt_funnel_push_on.png b/src/main/resources/assets/create/textures/block/belt_funnel_push_on.png new file mode 100644 index 0000000000000000000000000000000000000000..203afe626e08038f592f30eb3d130cb28a70d959 GIT binary patch literal 426 zcmV;b0agBqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T)xHYpQ`RH8i+oF82Ow7V+`ULh+?~poK~4R$6*M(zJ*ZxJM*Sg zEF%ab*>r8BwCkXLe__XSQ%g2#t!<(4Ei_tf zO1C8B(D{p^>3LvHK7H-!w>~FA7xJRK=zZBDvgP`tJh37sEBc U?nPy${Qv*}07*qoM6N<$g5B!2-2eap literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/chute.png b/src/main/resources/assets/create/textures/block/chute.png index d7c1b0a50a27ab8401ae4963bcc9be7628b5f0b4..a6d6bcf5795e8d5c2669855d6fbecf9fb94bcdda 100644 GIT binary patch delta 1356 zcmV-S1+)6q43P_vR(~c*L_t(oN41yFPh3?L$M1XdgJFKQASfgzx`R@V3T&F*g9y!qA}o{!RjfdP}vW@X`YIxR#X zrG3VcJookWnSHx}i*!0^t{02aM*&dfNE+k%t~4|x->{C)z|zu^yg&(njDj(3U~O$p z`ySTQ!J4`Gd4Ia%fmRYgJp<++KbCJ;$3HkYkd9h~<@tQxbaZq`Uz>vYz$zCBuqKnq zNFU{`+n~^K=JE~jajUB&9*tC$4}hfo zR)Y{o7H9*mwQNr-P_ASYSVLg3xV!)A0VL!4&J99ua&j_YP$QoJaVRA0GZdzHiC`-EUPy0dkcC=0_ouNn1rp zQJPA%HGfGw8IQ-L<#K7$-Q8tnPTHv~06RN7qL^&Zn9%o-jUrJf~7HmefpKJj{M@L7cHD!TXu6;7? zzxRraD~es+O;O*9Pshdr^843?1rxJzBLQrUh+DEpb{iR^PUxJeyLV;1CIX)o`x;8z z=YQqO^WZ!JH*O3E^?KbTtwQyp9^-67&DMhhON5|C=e>KMhwJe``}*O66=7f7((`|0 zOy&R48XoxO(Qm<*(a` zXR)xlwQDvvs+QfJ$ZEAFl6TBuZhsUs3oeSLEYQ^0wkOlS_UP4PnTAzJ<^+~CcY{*t zRzTf9`Ci~&YC1bRPexCJqdYvG|H}ez?9QD4cPrdWrTbF>+l8 z4kj1e3jt)ge{jzr2IRg~ymrkjKYiLz4)ivQRKC-&v&q O0000^CRHrD2!~~0)NGqiYng~S0 z0ym8bRu?Y#1G+S_&=})Z7ycLiXd+8ps7XapQm`emfSS+*6O5qN4(-fzrZdm;Igc~E zc~h+4W#@wbH5J#bqafippb&djH%8?A#?YF7PNqvWNJQkLgmh=ad0LU0vvjJ9CR&1Wa zdL~$N{=x;O>VJVG31FT97cO4ZcR0sux7#`~tFXLWF1wMD5uMvGupfwWl>lps#iGtp zo(zM**4fKDz{9O^CFyip*wu9o5uO?LJ7kT-c8FUV_dq-Z+O?wfD$0dkc0ti4Lnzi*?YDRmrcR$e9kOVdPlCiPM46E?kKnDjxjC%> z!=61)gh7D!y5hw^-f8z_E|(J-^^ry+djIIr=k)!)DzJE)A{tO!Ibi>GC>9H%D5FYq zxon@rlYi;7uVZMa;6_KQB8PMgQ~}u7*igk(gXM(%4%zKUR4PNdr&1}qqMZ5A$SzkF z1tu#}QTclzfauASCw25yfmv>INSH?qaiVdgQc*;PB$SycxzF4hRRVKmV3?qV-rGHXR6$XK?YmmYlCCM{#jnQkxlp-(* z0c%M1A>ujKiU)vqC@+-f@>#8lVv+C$LL{0SLGwT=47CW{XIGYWa`4fLyZ-x{duq?H zt{cXyqkUPQ#4D#xh1B=L<;%{OywL;}Bho^)BVlBXK4E)ao0-w``Ut!}KGstbf4*|( zc7M1Nfg?wbhOJi1WkjKQ(LUpZp&|XCEksCabe=i$rk)q=6#TXpC87c4D8Bc&BTyX3 z;l!1M%Va3OoGSEvPuGY&gdjRQJFBBdU^`&-|0U59ccVO?4@8*|DdlAp!Eo75)5ll)gpQAFpEYMNXF9_ z!fw<}lSmyu_L3?fj>IRB7!ne?7Jn}iFJfwL-n)0V$|RP5U2($_PI3Tvep>#A=xEzk zFUVOCB82PGf-hbADarv9TTJuPI8e?;wL)A+EhA4HdqI0SuxnOa#xpyq976~T@ck&{ zh7>K74d&7Zq0wyWe?^neKHa-!#pTVLw=_xd0DYgJ^C{OPl=mrj4ZyBt zD>rV2BrV@`K)ttHUCr$KRWKNW+S*-hQd9xNdsV=ng@pypRJ)QHlFIFdG=Kg_l>p@c z7vEj4YfG-xHr!p2jE#+^`}5AKCf{Fw*EAvT!?}L}#6WUR6M;4O01E&B07*qoM6N<$ Ef-xBQPyhe` diff --git a/src/main/resources/assets/create/textures/block/chute_port.png b/src/main/resources/assets/create/textures/block/chute_port.png deleted file mode 100644 index 88fd5a3f15139dec5cb0a8aa6122fc15ea5bfe75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1672 zcmX|CdpOkj8vp+0=8|Dz?3T>>nZ~52&X~%oT=E;q3`>c&O_Gr!kr|B3FfpMTY-T7^ zCy6t&U6eKEV3%@>Rym94oM~tZu@=WIqR7Zjb)NIb`@YZTeV_O8c|L!THOV@m_A*=gfn~?04T+)v>{j>HsG=X;s7vy_{pG}yvRviaxHJq zA)Y@cjF%V^djfDnBBFV;=o38Ho<^r_-7*756aaw3db%?XBprQq&4okSLp;yPDsfN8 zF+4A1jw0npYTWF7d#KHRlp{59$H_S?kAqwS-q^s3im)UwL-voGgZq5_XYIbakyWg! zZAqGbRUbAzRXum=-F2t%u)f63_Rgu~*!ksq-<$nX9;NEa9o}r@vde%w+xGK+Tf3R6 znaA7Ba&yJ^TGm}?OB0M!3I;M-##P-Nmk#J@Jfx(R@mKFnqtg}+#wTbKsv8<^R4A2s zB^{iB?y(1@yJo6^IE{Z~=%LuetYP`%1I+0+s$R8f*=p)G#6v3n?#uVNoz9@2JQk`gZgeS)bauEo)8jM4Uuj;*`4E2aJ4zv9r1TU< zsue!*#;^jEM1UbaC_}v*FIK#@ew1h~>`6AM2z8Xl;IIoF`MIS-;AN(i z^mK19xfgTn8TDj%aewWlrulVtu7UNl&Hq*vDqLLSJ2*V!H3Ynob*eSwEAg<@C%uTM z3j>OV1@F6|K^AM=1Zo=zreuo)(J?#w_H6C#TTwVRNspena1MhoEactKKp%hkCa*}t z^PV6K*4`{&IlOlLmEjaZFoFw4NUczS_}ft+B{g<2MD{S&(@u}Q;nsC@g)zI!UN@zj z`T8)h2qmE6p^y4$YHEW1jB^hn3c!|en)aGhojD|%`cI3*3pF{K^Ko?3V)fhmHoSIwv8WtGH``yQI!rT3iJwRg5N{O*mvT_Dd8u2pH* zQ#U*_uLe#|PTwXZCi>Ub*Sid>^89J0hL8rF2G4xgLup2jyYd zExj*amU&K1PTIhkPq0FJWh-+wZ*HGBwH%6hI@@aE28_*j^0{2D@9yGx8F=(`_tBN! zdd_(pka6~MCBA!kd3obNPA_7ZVzGYLtyGFJg~n%V*;ueR!Gs3)AAqhsx%4i7~%#i!A(JO4CooU>^f=#^0Zj2anJfNU5V z3PP2*r&gfo8Ah#f!nN?=#A74j4rS|=CnFMPda7?Cgtaw*%Fu^eYQYUOjckRbr;ag0 zp3!M%MS|z+KW#T>e-#r_C;n&qDPup9d*S^nALtkehcmitV|W)_7XJPxBe zDP6e@qvD4AU?)Z3>{$VFMm`#q!K%q*9dwfNQ$8Uy>uO(6pWYvn^A}~6cw&==U1y&B zLlfyPmAh()IfSc(1dp>}^a$7VUV?`XfRqXw8xK&BTq|3Sbe!LrPnzavEj zJs2C!{8H+dy3h#0oO`1w>VGQ(0*yR3{s$_$rwg_ScPw2tdkjUW#c+>%;pxJyK$xH_F&qrP7d$E{FL^}sZDw6Jk3`)*f%7Dr7%Y^M_ zcPdQ_OO8Ki5ZmgC5=c}+*cG{;U5&M^|C~Y2fJ@N(3N%!7bQDPZyz61!S|b^dP~sFkX*@e$&&+dI^O->L z*|gXwJwya;3#2x?Q3m(R<~v5<^)13JE)V7Sph6Rq28*siZhz7hgu;KfL&$o(S>Ud& z5%^aY-^_2Zt$`htXE;nCc+&T-is`=p;`&U#famDMNP{eXQDG7_i~8F9%q6&rJ3pPu z$x)T}w`Sf0&M`@llG!c8INO_%oi^nHR$)&nW!ARD6y|bhBjyyjN z6akyOz){OURZ$dxFXA&=R`znCMFux$~izm45tXzV5;F!6AxYtV%3}$ubsnShiqEf)Qh=k>L0Tx$$OR%fQQHM# z+lksPRAX%ysw*OmT_EU0BNvFYRN>MNK^X2Z{I>w`2V8{1d4Jh45dZ)H07*qoM6N<$ Ef}GojN&o-= diff --git a/src/main/resources/assets/create/textures/block/funnel_on.png b/src/main/resources/assets/create/textures/block/funnel_on.png index ae89427226bd0cafaca126f36c3f21774fcff339..eb51c22fea82ee60b1a25caf6d325d78c41e006a 100644 GIT binary patch delta 306 zcmV-20nPsU0`dZoNq@lr01m+cxRGn^00038NklV4e5JkVeCL$EHDG^c% z3W$VII12@Jsua*ug}iahD>cx=zC?XO;@ z4<5oc%W+fF@ZKZO0hfnq)QmdHIkpz~{;^QA=dSN}2FR?F#ebw|5SkPPCeeqvF(EeU z2^MJz!@sh4IeA527VboC(TAwB7gwU;E^^P;d@Nr;^XP=dO;Jm<7O^Ns!eZv!^Tr8* zS5Z%+d;i!Qg!{*4S_4Wc8F@Gt^RR^9O%|ec9-r&?qCw-fxK~-?gOW-vkm$t4E|7gE zO1p5%jZ!Y0b1S2=3xrNoa)HE0ReZE-ki%Wae>VXB0D&X0o!NcYoB#j-07*qoM6N<$ Ef)iDW^Z)<= delta 314 zcmV-A0mc6E0{Q}wNq@os01m?_!~W={%C$%3#>ma)a`f}s&a(dI!R{DfPXloX)u}ot&NGX$TK|5 zW{4ZSzO8X`lw&o0MkUE(;XpVSmcmEj1K%4`v%2