From 287db27ef0f9b26de104e274bd5e07a513250ac1 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 11 Nov 2020 19:00:31 +0100 Subject: [PATCH] The Funnel doesn't end here - Updated wrench model (Kryppers) - Funnels on depots and perpendicular to belts use a new model - Funnels at the end of belts - no longer have a directional constraint - can now be extended/retracted manually - now hold items back at the block boundary - Extracting Funnels on top of belts can now specify an amount no their filter, taking x items off a nearby stack when possible - Fixed some issues with belt/funnel interaction - Items reaching the end of a belt will still be regularly checked by perpendicular funnels in the space - Contraptions now render blocks in appropriate render layers - Straight diagonal Chutes now create an intersection when a funnel is directly above them - Attempted a safety fix to bracket removal from shafts and cogs - Fixed windmill structures not stalling when their attached network is overstressed --- src/generated/resources/.cache/cache | 40 +-- .../blockstates/andesite_belt_funnel.json | 128 +++++----- .../create/blockstates/brass_belt_funnel.json | 128 +++++----- .../assets/create/blockstates/fluid_pipe.json | 190 +++++++------- .../create/blockstates/radial_chassis.json | 72 +++--- ...on => andesite_belt_funnel__extended.json} | 4 +- ...desite_belt_funnel__powered_extended.json} | 4 +- ...ndesite_belt_funnel__powered_pulling.json} | 6 +- ...ndesite_belt_funnel__powered_pushing.json} | 6 +- ...esite_belt_funnel__powered_retracted.json} | 4 +- ...son => andesite_belt_funnel__pulling.json} | 6 +- ...son => andesite_belt_funnel__pushing.json} | 6 +- ...n => andesite_belt_funnel__retracted.json} | 4 +- ....json => brass_belt_funnel__extended.json} | 4 +- ... brass_belt_funnel__powered_extended.json} | 4 +- ...> brass_belt_funnel__powered_pulling.json} | 6 +- ...> brass_belt_funnel__powered_pushing.json} | 6 +- ...brass_belt_funnel__powered_retracted.json} | 4 +- ...d.json => brass_belt_funnel__pulling.json} | 6 +- ...d.json => brass_belt_funnel__pushing.json} | 6 +- ...json => brass_belt_funnel__retracted.json} | 4 +- .../java/com/simibubi/create/AllShapes.java | 19 +- .../ContraptionRenderer.java | 39 ++- .../bearing/MechanicalBearingTileEntity.java | 2 + .../BeltFunnelInteractionHandler.java | 71 ++++-- .../relays/belt/transport/BeltInventory.java | 4 +- .../relays/elementary/ShaftBlock.java | 6 + .../wrench/WrenchItemRenderer.java | 2 +- .../belts/tunnel/BrassTunnelTileEntity.java | 3 +- .../logistics/block/chute/ChuteBlock.java | 9 +- .../block/funnel/BeltFunnelBlock.java | 202 ++++++++++----- .../block/funnel/BeltFunnelGenerator.java | 9 +- .../logistics/block/funnel/FunnelBlock.java | 6 +- .../funnel/FunnelFilterSlotPositioning.java | 80 +++--- .../logistics/block/funnel/FunnelItem.java | 11 +- .../block/funnel/FunnelRenderer.java | 1 + .../block/funnel/FunnelTileEntity.java | 61 ++++- .../HorizontalInteractionFunnelBlock.java | 128 ---------- .../filtering/FilteringBehaviour.java | 9 +- .../foundation/utility/SuperByteBuffer.java | 4 + .../block/belt_funnel/block_connected.json | 232 ++++++++++++++++++ .../block/belt_funnel/block_extended.json | 13 +- .../block/belt_funnel/block_pulling.json | 160 ++++++++++++ .../block/belt_funnel/block_pushing.json | 160 ++++++++++++ .../block/belt_funnel/block_retracted.json | 13 +- .../create/models/item/wrench/gear.json | 93 +++---- .../create/models/item/wrench/item.json | 198 ++++++++------- .../block/andesite_funnel_neutral.png | Bin 0 -> 368 bytes .../block/andesite_funnel_plating.png | Bin 1229 -> 576 bytes .../textures/block/brass_funnel_neutral.png | Bin 0 -> 282 bytes .../textures/block/brass_funnel_plating.png | Bin 1157 -> 535 bytes .../assets/create/textures/item/wrench.png | Bin 0 -> 2371 bytes 52 files changed, 1432 insertions(+), 741 deletions(-) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_pull_extended.json => andesite_belt_funnel__extended.json} (67%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_push_powered_extended.json => andesite_belt_funnel__powered_extended.json} (68%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_pull_powered_extended.json => andesite_belt_funnel__powered_pulling.json} (56%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_push_powered_retracted.json => andesite_belt_funnel__powered_pushing.json} (56%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_pull_powered_retracted.json => andesite_belt_funnel__powered_retracted.json} (68%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_push_extended.json => andesite_belt_funnel__pulling.json} (55%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_pull_retracted.json => andesite_belt_funnel__pushing.json} (55%) rename src/generated/resources/assets/create/models/block/{andesite_belt_funnel_push_retracted.json => andesite_belt_funnel__retracted.json} (67%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_pull_extended.json => brass_belt_funnel__extended.json} (68%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_push_powered_extended.json => brass_belt_funnel__powered_extended.json} (69%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_pull_powered_extended.json => brass_belt_funnel__powered_pulling.json} (57%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_push_powered_retracted.json => brass_belt_funnel__powered_pushing.json} (57%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_pull_powered_retracted.json => brass_belt_funnel__powered_retracted.json} (69%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_push_extended.json => brass_belt_funnel__pulling.json} (55%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_pull_retracted.json => brass_belt_funnel__pushing.json} (55%) rename src/generated/resources/assets/create/models/block/{brass_belt_funnel_push_retracted.json => brass_belt_funnel__retracted.json} (68%) delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/funnel/HorizontalInteractionFunnelBlock.java create mode 100644 src/main/resources/assets/create/models/block/belt_funnel/block_connected.json create mode 100644 src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json create mode 100644 src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_neutral.png create mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_neutral.png create mode 100644 src/main/resources/assets/create/textures/item/wrench.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 6637c18cb..5a0ab6556 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -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 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -4c3e0500f9382d2e426e823fe876f57f4d7ee3b4 assets/create/blockstates/fluid_pipe.json +fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 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 @@ -329,7 +329,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 -bdd56f32ce0a148b6e466a55ab2777f69fc08cfc assets/create/blockstates/radial_chassis.json +8d7e653bfd9846e684a0d3725595714a19201017 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 @@ -424,14 +424,14 @@ cda6f9761431c5b8538f746db2dc55e5fb57bf01 assets/create/models/block/adjustable_p ce5e0cd1598cf2228bb77a68c304dd210f3848f8 assets/create/models/block/adjustable_repeater_powered.json c82a31943f5adb4a64c6db4c48c94cbce5d95bc4 assets/create/models/block/adjustable_repeater_powered_powering.json 51cf61f8bc25cf62b0e0c0705c75512809358ff0 assets/create/models/block/adjustable_repeater_powering.json -4b8c1db868de612ae6a49d9133db700ac6a3d688 assets/create/models/block/andesite_belt_funnel_pull_extended.json -eb7f1bfcd856bf302cb24dda09994ceef280fca2 assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json -d5d7c62b16aa3cfb279b4e3100f910c1782b5846 assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json -2d228eae550d573f4cad06ed6f6d51e4975fdde6 assets/create/models/block/andesite_belt_funnel_pull_retracted.json -2a3b929e3c24f70a0842b9ce56c175c4383e2598 assets/create/models/block/andesite_belt_funnel_push_extended.json -56a4d2e099fb285fd04ef095ced3bd7046835711 assets/create/models/block/andesite_belt_funnel_push_powered_extended.json -8a73d43517d64f873896631fbe7fccd085e1603a assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json -aff112cb4ca73f3b1f71e98ccd984ee286da2930 assets/create/models/block/andesite_belt_funnel_push_retracted.json +bcbe466da8b2172aa0f6e5c846b2e261632ceb6b assets/create/models/block/andesite_belt_funnel__extended.json +9218b0a053911071dbde66fdc97de7485a08c54e assets/create/models/block/andesite_belt_funnel__powered_extended.json +433daa4b4cb4b6bc12918b2e78c2141d941e78d8 assets/create/models/block/andesite_belt_funnel__powered_pulling.json +a3581f92b80a7adf2f933cfbeda43f88db7d8615 assets/create/models/block/andesite_belt_funnel__powered_pushing.json +14b6689a3c67bfb4fddbd062e9bdb0957e228a8c assets/create/models/block/andesite_belt_funnel__powered_retracted.json +657f22838ee3e8719fa33e1f85034043c4907310 assets/create/models/block/andesite_belt_funnel__pulling.json +59016d8f76df2920437168368cfba47bbf19d214 assets/create/models/block/andesite_belt_funnel__pushing.json +997495a40f20d13a6b7f6083bb8f519ff107ca28 assets/create/models/block/andesite_belt_funnel__retracted.json 4d412de3eb98dfee548a0dcdbae5d0168ac67123 assets/create/models/block/andesite_bricks.json 054ef3fff7f146dbf8adc92dc2b6d169c2bdb7a5 assets/create/models/block/andesite_bricks_slab.json 8784414839f6a5786bf43d6a7dff6c27bdf7fe46 assets/create/models/block/andesite_bricks_slab_top.json @@ -481,14 +481,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 0934933df6bfbb19a1b14cd0e3cab2c18d5a3ebc assets/create/models/block/brass_block.json 166a5c053a81e6aadc24509ed24dc144a7255969 assets/create/models/block/brass_casing.json 838e7ab4c0c9d89eacfa078daf64995e505db896 assets/create/models/block/brass_funnel.json diff --git a/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json b/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json index 369be6128..4bbd11c49 100644 --- a/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json +++ b/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json @@ -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 } } diff --git a/src/generated/resources/assets/create/blockstates/brass_belt_funnel.json b/src/generated/resources/assets/create/blockstates/brass_belt_funnel.json index 779a55e87..5f68caef4 100644 --- a/src/generated/resources/assets/create/blockstates/brass_belt_funnel.json +++ b/src/generated/resources/assets/create/blockstates/brass_belt_funnel.json @@ -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 } } diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 581373307..3b646b920 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -60,10 +60,10 @@ }, { "when": { - "south": "false", - "up": "true", "down": "false", - "north": "true" + "north": "true", + "up": "true", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lu_x" @@ -71,10 +71,10 @@ }, { "when": { - "south": "true", - "up": "true", "down": "false", - "north": "false" + "north": "false", + "up": "true", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_x" @@ -82,10 +82,10 @@ }, { "when": { - "south": "false", - "up": "false", "down": "true", - "north": "true" + "north": "true", + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_x" @@ -93,10 +93,10 @@ }, { "when": { - "south": "true", - "up": "false", "down": "true", - "north": "false" + "north": "false", + "up": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/rd_x" @@ -104,21 +104,21 @@ }, { "when": { - "south": "false", - "up": "true", "down": "true", - "north": "false" - }, - "apply": { - "model": "create:block/fluid_pipe/ud_x" - } - }, - { - "when": { - "south": "false", + "north": "false", "up": "true", - "down": "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": { - "south": "false", - "up": "false", "down": "true", - "north": "false" + "north": "false", + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -137,10 +137,10 @@ }, { "when": { - "south": "true", - "up": "false", "down": "false", - "north": "true" + "north": "true", + "up": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -148,10 +148,10 @@ }, { "when": { - "south": "false", - "up": "false", "down": "false", - "north": "true" + "north": "true", + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -159,10 +159,10 @@ }, { "when": { - "south": "true", - "up": "false", "down": "false", - "north": "false" + "north": "false", + "up": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -170,10 +170,10 @@ }, { "when": { - "south": "false", - "up": "false", "down": "false", - "north": "false" + "north": "false", + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/none_x" @@ -181,10 +181,10 @@ }, { "when": { - "south": "true", "west": "true", + "east": "false", "north": "false", - "east": "false" + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_y" @@ -192,10 +192,10 @@ }, { "when": { - "south": "true", "west": "false", + "east": "true", "north": "false", - "east": "true" + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_y" @@ -203,10 +203,10 @@ }, { "when": { - "south": "false", "west": "true", + "east": "false", "north": "true", - "east": "false" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_y" @@ -214,10 +214,10 @@ }, { "when": { - "south": "false", "west": "false", + "east": "true", "north": "true", - "east": "true" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_y" @@ -225,10 +225,10 @@ }, { "when": { - "south": "true", "west": "false", + "east": "false", "north": "true", - "east": "false" + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -236,10 +236,10 @@ }, { "when": { - "south": "true", "west": "false", + "east": "false", "north": "false", - "east": "false" + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -247,10 +247,10 @@ }, { "when": { - "south": "false", "west": "false", + "east": "false", "north": "true", - "east": "false" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -258,10 +258,10 @@ }, { "when": { - "south": "false", "west": "true", + "east": "true", "north": "false", - "east": "true" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -269,10 +269,10 @@ }, { "when": { - "south": "false", "west": "true", + "east": "false", "north": "false", - "east": "false" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -280,10 +280,10 @@ }, { "when": { - "south": "false", "west": "false", + "east": "true", "north": "false", - "east": "true" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -291,10 +291,10 @@ }, { "when": { - "south": "false", "west": "false", + "east": "false", "north": "false", - "east": "false" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/none_y" @@ -302,10 +302,10 @@ }, { "when": { - "up": "true", - "down": "false", "west": "false", - "east": "true" + "east": "true", + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_z" @@ -313,10 +313,10 @@ }, { "when": { - "up": "true", - "down": "false", "west": "true", - "east": "false" + "east": "false", + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_z" @@ -324,10 +324,10 @@ }, { "when": { - "up": "false", - "down": "true", "west": "false", - "east": "true" + "east": "true", + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_z" @@ -335,10 +335,10 @@ }, { "when": { - "up": "false", - "down": "true", "west": "true", - "east": "false" + "east": "false", + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_z" @@ -346,10 +346,10 @@ }, { "when": { - "up": "true", + "west": "false", + "east": "false", "down": "true", - "west": "false", - "east": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -357,10 +357,10 @@ }, { "when": { - "up": "true", + "west": "false", + "east": "false", "down": "false", - "west": "false", - "east": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -368,10 +368,10 @@ }, { "when": { - "up": "false", + "west": "false", + "east": "false", "down": "true", - "west": "false", - "east": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -379,10 +379,10 @@ }, { "when": { - "up": "false", - "down": "false", "west": "true", - "east": "true" + "east": "true", + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -390,10 +390,10 @@ }, { "when": { - "up": "false", - "down": "false", "west": "false", - "east": "true" + "east": "true", + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -401,10 +401,10 @@ }, { "when": { - "up": "false", - "down": "false", "west": "true", - "east": "false" + "east": "false", + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -412,10 +412,10 @@ }, { "when": { - "up": "false", - "down": "false", "west": "false", - "east": "false" + "east": "false", + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/none_z" diff --git a/src/generated/resources/assets/create/blockstates/radial_chassis.json b/src/generated/resources/assets/create/blockstates/radial_chassis.json index 1aa3d3728..9d00ea8b1 100644 --- a/src/generated/resources/assets/create/blockstates/radial_chassis.json +++ b/src/generated/resources/assets/create/blockstates/radial_chassis.json @@ -89,8 +89,8 @@ }, { "when": { - "axis": "x", - "sticky_west": "true" + "sticky_west": "true", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -99,8 +99,8 @@ }, { "when": { - "axis": "y", - "sticky_west": "true" + "sticky_west": "true", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -109,8 +109,8 @@ }, { "when": { - "axis": "z", - "sticky_west": "true" + "sticky_west": "true", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky", @@ -119,8 +119,8 @@ }, { "when": { - "axis": "x", - "sticky_west": "false" + "sticky_west": "false", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -129,8 +129,8 @@ }, { "when": { - "axis": "y", - "sticky_west": "false" + "sticky_west": "false", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -139,8 +139,8 @@ }, { "when": { - "axis": "z", - "sticky_west": "false" + "sticky_west": "false", + "axis": "z" }, "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", @@ -207,8 +207,8 @@ }, { "when": { - "axis": "x", - "sticky_east": "true" + "sticky_east": "true", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -217,8 +217,8 @@ }, { "when": { - "axis": "y", - "sticky_east": "true" + "sticky_east": "true", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -227,8 +227,8 @@ }, { "when": { - "axis": "z", - "sticky_east": "true" + "sticky_east": "true", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky" @@ -236,8 +236,8 @@ }, { "when": { - "axis": "x", - "sticky_east": "false" + "sticky_east": "false", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -246,8 +246,8 @@ }, { "when": { - "axis": "y", - "sticky_east": "false" + "sticky_east": "false", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -256,8 +256,8 @@ }, { "when": { - "axis": "z", - "sticky_east": "false" + "sticky_east": "false", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z" diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__extended.json similarity index 67% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__extended.json index f79ae5977..9e68f10d3 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__extended.json @@ -2,7 +2,9 @@ "parent": "create:block/belt_funnel/block_extended", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_extended.json similarity index 68% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_extended.json index 9921a4309..85b3cf6a7 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_extended.json @@ -2,7 +2,9 @@ "parent": "create:block/belt_funnel/block_extended", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_pulling.json similarity index 56% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_pulling.json index 4475b476b..70301fac8 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_pulling.json @@ -1,8 +1,10 @@ { - "parent": "create:block/belt_funnel/block_extended", + "parent": "create:block/belt_funnel/block_pulling", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_pushing.json similarity index 56% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_pushing.json index 38a2f735a..804891334 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_pushing.json @@ -1,8 +1,10 @@ { - "parent": "create:block/belt_funnel/block_retracted", + "parent": "create:block/belt_funnel/block_pushing", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_retracted.json similarity index 68% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_retracted.json index 4ade59fc5..6a6e4890d 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__powered_retracted.json @@ -2,7 +2,9 @@ "parent": "create:block/belt_funnel/block_retracted", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__pulling.json similarity index 55% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__pulling.json index 75b27092e..2e7f54321 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__pulling.json @@ -1,8 +1,10 @@ { - "parent": "create:block/belt_funnel/block_extended", + "parent": "create:block/belt_funnel/block_pulling", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__pushing.json similarity index 55% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__pushing.json index f77372c76..db852a0e1 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__pushing.json @@ -1,8 +1,10 @@ { - "parent": "create:block/belt_funnel/block_retracted", + "parent": "create:block/belt_funnel/block_pushing", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__retracted.json similarity index 67% rename from src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json rename to src/generated/resources/assets/create/models/block/andesite_belt_funnel__retracted.json index 91e243db3..533f700e6 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel__retracted.json @@ -2,7 +2,9 @@ "parent": "create:block/belt_funnel/block_retracted", "textures": { "particle": "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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__extended.json similarity index 68% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__extended.json index fadd65788..0fce1a25a 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__extended.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_extended.json similarity index 69% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_extended.json index 455499d7f..ff664c508 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_extended.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_pulling.json similarity index 57% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_pulling.json index 5133a0a73..b2afb7d4e 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_pulling.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_pushing.json similarity index 57% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_pushing.json index c5d444dd5..99b733775 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_pushing.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_retracted.json similarity index 69% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_retracted.json index d64a5168c..60060dfb5 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__powered_retracted.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__pulling.json similarity index 55% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__pulling.json index 98a177099..2975e7830 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__pulling.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__pushing.json similarity index 55% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__pushing.json index b4e776036..a1130fb8e 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__pushing.json @@ -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", diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel__retracted.json similarity index 68% rename from src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json rename to src/generated/resources/assets/create/models/block/brass_belt_funnel__retracted.json index 4f23ee54f..693ec38e6 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel__retracted.json @@ -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", diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 60f71a3e8..5daece9ab 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -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) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java index 92c2ba6c5..45049327f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java @@ -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; @@ -23,6 +24,7 @@ import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.Matrix4f; 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.BlockPos; 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 = new Compartment<>(); + public static final Compartment> 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 blockLayers = RenderType.getBlockLayers(); + + buffer.getBuffer(RenderType.getSolid()); + for (int i = 0; i < blockLayers.size(); i++) { + RenderType layer = blockLayers.get(i); + Pair 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.getWorld() != 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()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java index fda747d49..620c5a1b1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java @@ -94,6 +94,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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java index ad2d4e10f..3fa3d429c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java @@ -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; @@ -13,18 +14,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(); @@ -36,15 +38,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 (funnelState.has(BeltFunnelBlock.POWERED) && funnelState.get(BeltFunnelBlock.POWERED)) - return blocking; + if (world.isRemote || funnelState.has(BeltFunnelBlock.POWERED) && funnelState.get(BeltFunnelBlock.POWERED)) + if (blocking) + return true; + else + continue; TileEntity te = world.getTileEntity(funnelPos); if (!(te instanceof FunnelTileEntity)) @@ -54,20 +66,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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index 8271b56b8..32b9e61d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -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); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java index 434883193..9a19a0f95 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java @@ -22,6 +22,7 @@ import net.minecraft.fluid.IFluidState; 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) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java index 6bd89f42a..fc0828078 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java @@ -18,7 +18,7 @@ public class WrenchItemRenderer extends CustomRenderedItemModelRenderer parent; + + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final IProperty 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 +69,31 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock { } public BeltFunnelBlock(BlockEntry 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 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 +102,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.has(POWERED) && state.get(POWERED)) + 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 +181,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; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java index e047e1d0f..3cab09fdd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java @@ -33,20 +33,19 @@ public class BeltFunnelGenerator extends SpecialBlockStateGen { @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - boolean pushing = state.get(BeltFunnelBlock.PUSHING); boolean powered = state.has(BlockStateProperties.POWERED) && state.get(BeltFunnelBlock.POWERED); String shapeName = state.get(BeltFunnelBlock.SHAPE) .getName(); - 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)) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index a9a41f804..0084a6412 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -164,7 +164,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; @@ -177,7 +177,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 @@ -205,7 +205,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 diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java index c95d6b41a..f76caa4f0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java @@ -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; Vec3d 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(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java index 8afae31c4..1c8a21912 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java @@ -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; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java index 2c49402db..ed0f46a09 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java @@ -42,6 +42,7 @@ public class FunnelRenderer extends SmartTileEntityRenderer { msr.centre() .rotateY(horizontalAngle) .unCentre(); + ms.translate(0, 0, -te.getFlapOffset()); for (int segment = 0; segment <= 3; segment++) { ms.push(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index f57aee3ac..ca034a723 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -5,6 +5,8 @@ import java.util.function.Function; import java.util.function.Predicate; 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.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.foundation.config.AllConfigs; @@ -57,8 +59,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 +150,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 +161,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 +211,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 +259,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 diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/HorizontalInteractionFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/HorizontalInteractionFunnelBlock.java deleted file mode 100644 index 3216e1d8a..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/HorizontalInteractionFunnelBlock.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.simibubi.create.content.logistics.block.funnel; - -import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; -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.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.tileentity.TileEntity; -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"); - private BlockEntry parent; - - public HorizontalInteractionFunnelBlock(BlockEntry parent, Properties p_i48377_1_) { - super(p_i48377_1_); - this.parent = parent; - BlockState defaultState = getDefaultState().with(PUSHING, true); - if (hasPoweredProperty()) - defaultState = defaultState.with(POWERED, false); - setDefaultState(defaultState); - } - - public abstract boolean hasPoweredProperty(); - - @Override - public boolean hasTileEntity(BlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.FUNNEL.create(); - } - - @Override - protected void fillStateContainer(Builder p_206840_1_) { - if (hasPoweredProperty()) - p_206840_1_.add(POWERED); - super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, PUSHING)); - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext ctx) { - BlockState stateForPlacement = super.getStateForPlacement(ctx); - if (hasPoweredProperty()) - stateForPlacement = stateForPlacement.with(POWERED, ctx.getWorld() - .isBlockPowered(ctx.getPos())); - return stateForPlacement; - } - - @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())) { - p_196243_2_.removeTileEntity(p_196243_3_); - } - } - - @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 (!canStillInteract(state, world, pos)) { - BlockState parentState = parent.getDefaultState(); - if (state.has(POWERED) && state.get(POWERED)) - parentState = parentState.with(POWERED, true); - return parentState.with(FunnelBlock.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 (!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 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/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java index 0c4caec59..48c259053 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java @@ -19,6 +19,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.Vec3d; 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); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java index ce9c01c80..9e89d23c3 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java @@ -280,5 +280,9 @@ public class SuperByteBuffer { return ((int) sky) << 20 | ((int) block) << 4; } + + public boolean isEmpty() { + return template.limit() == 0; + } } diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_connected.json b/src/main/resources/assets/create/models/block/belt_funnel/block_connected.json new file mode 100644 index 000000000..447d36f7a --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_connected.json @@ -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] + } + ] + } + ] +} \ No newline at end of file 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 dca272755..073985dd2 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/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"}, diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json b/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json new file mode 100644 index 000000000..adfbea4bf --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_pulling.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json b/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json new file mode 100644 index 000000000..a1c751f64 --- /dev/null +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_pushing.json @@ -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] + } + ] +} \ 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 3eafc8c41..6336e2bd4 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 @@ -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"} } }, diff --git a/src/main/resources/assets/create/models/item/wrench/gear.json b/src/main/resources/assets/create/models/item/wrench/gear.json index 3142c72d7..05ffe5665 100644 --- a/src/main/resources/assets/create/models/item/wrench/gear.json +++ b/src/main/resources/assets/create/models/item/wrench/gear.json @@ -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"} } } ] diff --git a/src/main/resources/assets/create/models/item/wrench/item.json b/src/main/resources/assets/create/models/item/wrench/item.json index 65880cabe..656143148 100644 --- a/src/main/resources/assets/create/models/item/wrench/item.json +++ b/src/main/resources/assets/create/models/item/wrench/item.json @@ -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] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_neutral.png b/src/main/resources/assets/create/textures/block/andesite_funnel_neutral.png new file mode 100644 index 0000000000000000000000000000000000000000..dde5148369c0c683e494f5d8198ff84b36a71cc4 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh(0G|-osMx6FwB+LQ;;so3+B(`RYbu*sTk4yd$|}q2TiWb3g+p!Rqa9TO z%w@K0T2oWs;G{1WW~1O~Ad%y*o93nIYavq@q#Na+9OtY8G!h6@MNBsWDe00Rzu^Bk z0fV{;w<%B=XMsm#F#`kNeh_A~U=0SD(&*{p7@`q8^{hAFVFezRfEfOt7XqdWcpUx9 zA0@r1W0!V#xa zb3sgSquA{7vs+g0FLyU*Hu`-oAyPf~oUu#tB&&;4qE09JggsC0GLqoo{B^_bjCue7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_plating.png b/src/main/resources/assets/create/textures/block/andesite_funnel_plating.png index 71aacc4f3e3f7442a06ebb1c7e5938dee155e8d8..6f4ed26a87efe4e6efd91d69e794ece7e81e7b6b 100644 GIT binary patch delta 534 zcmX@hd4OetBnLAC1B1(wu45Aw73!k`d_r84(~^tJi=$$rmMopKWz(9b)|UFFrplVi zwvP6u_O_b(hOFFTZ(koDKi{qi6LfVAjg8DqO)M1hOt|0#b4%L4Lviv4DEG7{eP0nK+Eak-;eR&xVbmc59-m7K4HFjRd@km@|KD_P+S(1De%@!k)h09jv{y&O3O%K} zhGBlrQf3MMKJAB3uim#ZPg|mS*34C#R>}5yJT0kWcloeUf#uAk-C7e**RM}gIx^|Y zi<62>lI<#&3-&#!Is3R$nM39MEa}8qpO2fwZxQg>C-2br{!;3^PtQ$KRg;gHiXV7C zHF%yg6HD96c@M5|ggblNGT!ZqSB&@Cuw#MOS=IyT7x&DRN!&DJ-A)Ee>B7$p$2B&- zZt_mQX4B$%fBVUR3(pk2O1L~WoASS?->JTUAuhT0THqq%l{*gn&fR?Ya9_g~+ZgjF zAJ*+`kjPsQg~-?ZTfPin+a delta 1192 zcmV;Z1XugO1kDMM83+ad0047(di0SYAb$yPNLh0L01m?d01m?e$8V@)000DHNkl;&}SMse;-OutblNaG; zTqKhN(zd$#4@#v1qMb2RJP)?dC+#bxa^3dxzfVCt@bXJ9VDiGBxKmh>4x%FxS}y^A zXBO~aSC5oAW^plx?(Qh&=B`WIV1MdiS!~J8O5L|^KoN^aCC@J9BxgO9+KZW)%bN+* zgOVEBy9+mO=cQaJuDS8b%(Uc>?jOdl6X)>a^UpQ(B>TSmeq2a%zRj4hk(j-)fIWl# z=-bgL#uq;c)`u%J@^a<>|5L*6L%@4Cs0V7bB{T z#GOw3JarL{bGIG}#hj4-Z+~BB^hxbVc z2#S$A=U9>^ER990;LdqZ5F|n)1a&}UjWL3ChMJ_A>ru8e7OjB0Ao)l*DvK%+6(Kb+ zJ$+R)z5(5fv7RG=I{7Vnc+=s9C7% z)dNbTkp?tOik447wd)D3)5z?Nd1MyX9wuralgWuU2=1KF5Xf`P$)`U$-SkbUub|$h z$z*a{Pce-@)Y~t&sKr7nVEi=pipk%mFgiMlbK~O}8yk}}@zak;r_(}I+qq#4z1^w? z6m%nZPki;om)r8<$$ycP9&b+tcDgyh@okFf}kJi4P53SKH3i*SFhz?LHz4keuJ- zZmx(*c?Gw!W!%c-&6iI}h;jpbarK?3h40|22So(hshX(uO0`zBFB}fb=X)ZNK>CNz z(Ag10kMjU#=YL)7e(IHt8?v{rR~{k$5xGkPT!hg0a6zV>y*tG?LqVuf_URmL3kDClJc=pJM{9jb)`kO-l{1prIY3kj6-5EOo0000NS%G}50G|-oiV)qV5RJ}Qoy9d4m)A!hneII)-*iu}+qxFJA|LG;WhNadW2=T90FlRQ4OyKpkTbGi(`mJ@YLShd<_O1 z&Ij{aGr#@cpFP(wE?$Roicry+JIfc=X1Qx_4KvDeSu#7lIJDDHMB-LjX|~bkI1e=k zCQrSzQ~AG^&5?NGwlnEVQzD;_w1|wvSM#OzU#wr$vOZnQZn8620~87jp00i_>zopr E0El;DH~;_u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_plating.png b/src/main/resources/assets/create/textures/block/brass_funnel_plating.png index e8a3ca30e3a9d3b96aea94bebb3a256863f25b86..76fe0d5428e16964eabce4c7099bbcaa1c2bf2a5 100644 GIT binary patch delta 492 zcmZqWoX#>ql7pFnfx%@-*RhF;3iTcVJ|V81u{up58tYo@W|WzHI+%NTee|S!(;^@3 z#Wfa3rhD({b*l)`)zvjLHZn6cv9K_=wzGBg^zd+TafytG0GgGanAnkG24qMqUuOlP zN`m}?|6>OXXNC1%0o8C8ctjR6Fx2xMU|`@oz?gNdlaqmg(ZtimF~q|E?Bv@;%?3O! zsYf?WkeTDK{LBCUTPD4^;57N$R_jjvf{3>gEDR^FxX+&V=Hnz|(Ib;O^-ct+9pO~} zeKSTPNbu^K6&|aiET&5Nf7{R8vLfaCRFOa#2{|)|l@nY#HceLuyvVSwID329{zdOp^4F-5S+WeZn#Zj`gieH(db{(%|sui_aNw^!*`D$ljnj@&(? zphK~IqIZk@{J(YkG`l@MT&vAGaMP%gy=~^{1`R>!4~>g2-?gTe~DWM4f7lPT3 delta 1119 zcmV-l1fctu1ceEZ83+ad0047(di0SYAb$yPNLh0L01m+b01m+cxRGn^000CUNkla^*c16+#eX~VapAX43_5WHY`@fvi)Nv(t6%y_$L)yxAm~qm ztbPmk9}dYxgex^CXRWZ!LV@$4Aak37phj8h8m6MT zrABIf$9~1<_drB@bT5jU>MBfoBh%Rs4x_!FCXlAAw)V~G@K=^go3&~ypMPD)N8l@e z3XezD2Cp}XWD>A#FCx(>j%;6uf396b#<*!8*s^x9IH4P(@u%6RjI?f0?OfHBYs09k z_v66N3Cygo#gjw=kD`w;Z{8e4(-X5D85qQO+Zu7~`-?fVi4)Q;+m2qfvj2P~cC1^F zqAfXAe?|cgowg7P2T)#ChJObSqFAoh(1yh|wC!y1kLC2ArZQHgBc8|vziDe&)LxrXfXv9-E8MQzkxPN)GTYP|RCoPO_ zW%Zj$H^F$g`oKhXfg8p60OO2kKx25ZxS6jQA7F4R*#}Iad9o>-nmF42ajm`lX^T(e_X31UIhyn>&V(KeE9O1 zoieE!m|I^hwcf6E@-H^6!F#J3&=)CO>*?=naJ?=OJP55TPjJ-Pv?3I z0^YdSa%H^hIr~fv438!xZ8HU+`gsbTZ0{-1fQR9fg{PZY%=eOhWsBLzLV@&%<>b_W zc|)QJnDFRLC`=y@KUm&U2bw_(( zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@k}D?+{Ld+J1Oy1garmst4RZW6BhA?BxBF5_ z#j|T;tP!HSB{6RO_2+hf;1y!XE^(1ubM|_3*v#bf;W zJr#g48Iv)%up&i|_i$E;`rj}|*ZXCJtHl%x-b1ACv2)Mx1H5PSft_zQAHPE3d^Usp zfsxGK8Bca#6+dK~S2q)X)G!3uGOBS3_4m^<&V z0wJ^wQ@-%MF88Jz|3+*CgM7g(*kJQrU38|Gw&KNegdO|jyvm)*GzWkPYcqm@x)b?K zktvfeArvCuDB!0d@(@$#V1SszB)7p$j2YxeIBVmcLYHmepwlQVAcA8?k_Z@TAS)$? zeo7K(sBz@vm^pJ{;mR$?oHFN}OFlKKl~_{Yl1nL4YH1QB2}_nDB2`)qHKK%Z&9%5H zwbs_KXoKs9yBjQ8>!HVL!sH4p=<3#$;Jd2w$>uie_q_ooF zl~-A^>S`NW+i|DOJMXe(*WDi0jMcBK(Fb$CXN`=t!&tiP%8NBjmvXzHQ%?AB2F5}n zFkTJ=5Og@4d7+fTVeW9|Yd}(P0BgjDoJofIwmDi5{P`&T8P#jlWvmtkQ^Fsm(&Ics-eHyQ zS&fO9eWY3ynAGImPB>UE@aBD;da9N^4~- zTWp59l5W|-FE+_$mr5HYsu|0${c}zCE?@Y^(RI~b5^i)O>8_ezC1wo*qvo?=3uVs- za;W}R2$ZJ^ku|BJu)*X&v)%x2Xl};WjNrK@+hy>(sOtLSv3aa)SS)mrpd#sso4H9|gL7;qNwg12!j# zgWjUAVOsK_4&5@YEzTH8<5+@*t#`N{EI9NU-AAHOs^%Xr6v~WBtOzE80!z0EW8lpebPO%H{@@9 z08bZI0}{qnOiK$gmmBg{wf4A{_~#;@+xM{da97MnsxG%wvqn=NQ8fB)?m=4fm5)B< z?sP68O9NY(pUrE*0R!ue0EA4PL(&u zcs?-XJm0EB*}+*MShgT@I9le=1mox7h(yLCEHm8IWAc3Pv~wcUSdrB18F zH$C;Y4fktvkgcT_k1kK|xo`Thii`RmIEvkTqQ}i;xpoz|e0OdR>6YjHX?h)a|J6vY zT)Tb+w3ehe4&u1;6u1|fhBh7(rVZDK)f@8F)ljSZ5WR?2N$GB4)>4htyYT1$p%vL&$-c#Zgv>K zf&FfDpP%RHN@eP`${cd%eXyW%cgnF?v;P#3V(Vv1I`q+!UqWrSD57-$G-H5Z{WshV z^2PDzXH_Q8N^C2ctBl7&OTQXrYD66s5Kk0VHL4xXQV7Yg&Sm3#UA=dI1MrGx7^5MCf<^V$LudYX$qyS_! zeEN1>I?H1)TB(P+uBs|GW2V;$B<^uoi7%pvuuKJ^Q@dSo`svbQ_>LtN)jG} zO%(tDs;a8YxfiSay*?sS7_Eqs=+KX2KaQmfo~0iGkD>9rWw=|f@7KL>!(+$|MF*?3 z)w=GK$i}8BYHb+~v+N+V06a^C+h=%kkVS{w(3Sz~b*7Tg`dD9ReckCD0|1*U&r&*@ zR#i2h&+Q+F&mUisDTJGMZwlciZo*^ehX7~*e=)=z?1XlA+{CjywzSU>S|3&Ig!+}( z2?;l$^#K0eAu_0GL8j!Tsy>yH7r1MZ@*qa;-r0z6A@sC2gOdX+hMad|le pbh6oxvHRW0Mr7kzZtm9regne^H=-vv^6~%x002ovPDHLkV1fk@dsqMf literal 0 HcmV?d00001