From f58a7c84824f903461773cf3b831710c555c1486 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 14 Sep 2020 21:10:38 +0200 Subject: [PATCH] Fun with funnels - Reworked funnel assets - Andesite funnels can now be controlled via redstone input - Re-introduced creative mounted storage --- src/generated/resources/.cache/cache | 43 ++-- .../blockstates/andesite_belt_funnel.json | 92 +++++-- .../create/blockstates/andesite_funnel.json | 38 ++- .../andesite_belt_funnel_pull_extended.json | 6 +- ...ite_belt_funnel_pull_powered_extended.json | 11 + ...te_belt_funnel_pull_powered_retracted.json | 11 + .../andesite_belt_funnel_pull_retracted.json | 6 +- .../andesite_belt_funnel_push_extended.json | 6 +- ...ite_belt_funnel_push_powered_extended.json | 11 + ...te_belt_funnel_push_powered_retracted.json | 11 + .../andesite_belt_funnel_push_retracted.json | 6 +- .../create/models/block/andesite_funnel.json | 8 +- .../models/block/andesite_funnel_powered.json | 9 + .../brass_belt_funnel_pull_extended.json | 6 +- ...ass_belt_funnel_pull_powered_extended.json | 8 +- ...ss_belt_funnel_pull_powered_retracted.json | 8 +- .../brass_belt_funnel_pull_retracted.json | 6 +- .../brass_belt_funnel_push_extended.json | 6 +- ...ass_belt_funnel_push_powered_extended.json | 8 +- ...ss_belt_funnel_push_powered_retracted.json | 8 +- .../brass_belt_funnel_push_retracted.json | 6 +- .../create/models/block/brass_funnel.json | 8 +- .../models/block/brass_funnel_powered.json | 8 +- .../create/models/item/andesite_funnel.json | 8 +- .../create/models/item/brass_funnel.json | 8 +- .../com/simibubi/create/AllBlockPartials.java | 8 +- .../java/com/simibubi/create/AllBlocks.java | 4 +- .../java/com/simibubi/create/AllShapes.java | 18 +- .../MovedProjectileDispenserBehaviour.java | 2 +- .../structureMovement/Contraption.java | 51 ++-- .../structureMovement/MountedStorage.java | 104 +++++--- .../contraptions/relays/belt/BeltBlock.java | 44 ++-- .../block/funnel/AndesiteBeltFunnelBlock.java | 2 +- .../block/funnel/AndesiteFunnelBlock.java | 3 +- .../block/funnel/BeltFunnelGenerator.java | 23 +- .../block/funnel/BrassFunnelBlock.java | 35 --- .../logistics/block/funnel/FunnelBlock.java | 34 ++- .../funnel/FunnelFilterSlotPositioning.java | 43 +++- .../block/funnel/FunnelTileEntity.java | 12 +- ...entory.java => BottomlessItemHandler.java} | 22 +- .../inventories/CreativeCrateTileEntity.java | 23 +- .../foundation/data/BuilderTransformers.java | 16 +- .../create/foundation/utility/NBTHelper.java | 4 + .../block/belt_funnel/block_extended.json | 146 +++++------ .../block/belt_funnel/block_retracted.json | 184 ++++++-------- .../create/models/block/belt_funnel/flap.json | 15 +- .../create/models/block/funnel/block.json | 228 +++++------------- .../create/models/block/funnel/item.json | 193 +++++---------- .../create/textures/block/andesite_funnel.png | Bin 439 -> 469 bytes .../textures/block/andesite_funnel_back.png | Bin 984 -> 1276 bytes .../block/andesite_funnel_plating.png | Bin 1432 -> 1229 bytes .../block/andesite_funnel_powered.png | Bin 0 -> 470 bytes .../textures/block/andesite_funnel_pull.png | Bin 467 -> 479 bytes .../textures/block/andesite_funnel_push.png | Bin 455 -> 458 bytes .../textures/block/andesite_funnel_tall.png | Bin 0 -> 440 bytes .../block/andesite_funnel_tall_powered.png | Bin 0 -> 454 bytes .../create/textures/block/brass_funnel.png | Bin 337 -> 398 bytes .../textures/block/brass_funnel_back.png | Bin 964 -> 1251 bytes .../textures/block/brass_funnel_plating.png | Bin 1250 -> 1157 bytes .../textures/block/brass_funnel_powered.png | Bin 328 -> 390 bytes .../textures/block/brass_funnel_pull.png | Bin 391 -> 371 bytes .../block/brass_funnel_pull_powered.png | Bin 383 -> 0 bytes .../textures/block/brass_funnel_push.png | Bin 396 -> 380 bytes .../block/brass_funnel_push_powered.png | Bin 405 -> 0 bytes .../textures/block/brass_funnel_tall.png | Bin 0 -> 354 bytes .../block/brass_funnel_tall_powered.png | Bin 0 -> 358 bytes .../create/textures/block/brass_tunnel.png | Bin 1119 -> 1236 bytes .../textures/block/brass_tunnel_top.png | Bin 346 -> 464 bytes .../block/brass_tunnel_top_connected.png | Bin 3628 -> 1034 bytes .../block/brass_tunnel_top_window.png | Bin 508 -> 526 bytes 70 files changed, 755 insertions(+), 805 deletions(-) create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_funnel_powered.json rename src/main/java/com/simibubi/create/content/logistics/block/inventories/{CreativeCrateInventory.java => BottomlessItemHandler.java} (73%) create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_powered.png create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_tall.png create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_tall_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_pull_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_push_powered.png create mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_tall.png create mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_tall_powered.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 2a50961a2..33942da90 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 -aaad1fc11aae17e209b0c3fbc9977c724c50c1ef assets/create/blockstates/andesite_belt_funnel.json +0a172dea0746027be3676e87271615f1307245a6 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 @@ -15,7 +15,7 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets/create/blockstates/andesite_bric 97adf53a7cb99d7652fb39adc957e9e34cbaca47 assets/create/blockstates/andesite_cobblestone_slab.json 96b5284693da168ab8e0809d86515b5f1a7e763f assets/create/blockstates/andesite_cobblestone_stairs.json 82bd82270aff7d51e9239680ef4dd7b5c899ceb0 assets/create/blockstates/andesite_cobblestone_wall.json -2be950008c00513dfe39021b65c26eea8554ee20 assets/create/blockstates/andesite_funnel.json +11908c2f8603e61bec88010bc6d0890e6339c6b1 assets/create/blockstates/andesite_funnel.json 398922758a6219544e5b85c91c9cf8a543b437e5 assets/create/blockstates/andesite_pillar.json 1d2d8081581e07d9be4b382aede4f2de4401cc6b assets/create/blockstates/andesite_tunnel.json f9fa6aa530eb0891a74eadfbebc663172a57147a assets/create/blockstates/basin.json @@ -382,10 +382,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 -e4af27010c74bb5b1e79b6fccf1669526e1bb5e3 assets/create/models/block/andesite_belt_funnel_pull_extended.json -502916dc860e5ba971af51c640192b5ac02e574f assets/create/models/block/andesite_belt_funnel_pull_retracted.json -f1ba5c40d5e580d3c46d2eeab37b59263d0b0904 assets/create/models/block/andesite_belt_funnel_push_extended.json -5689f01354dcb8bf1547467c7c5b86468f962bce assets/create/models/block/andesite_belt_funnel_push_retracted.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 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 @@ -403,7 +407,8 @@ ad255a62a5f54b578db06e89fd7160001f905675 assets/create/models/block/andesite_cob a033fbac3129bba9211c6c4a0e16c905643afa39 assets/create/models/block/andesite_cobblestone_stairs_outer.json 1c574ee47aeb6fcb305bfc95dd131e153b795a0e assets/create/models/block/andesite_cobblestone_wall_post.json 0ed983628e8868f77301bea1111570d3631f24fb assets/create/models/block/andesite_cobblestone_wall_side.json -9febbf6fb88e726a89573c3788bd8348ba805b6d assets/create/models/block/andesite_funnel.json +51e851b15870c0922cfbe911ef1a2f22062969f3 assets/create/models/block/andesite_funnel.json +f28da6703691f1b08cfb49208f0f7bb0c5ca816d assets/create/models/block/andesite_funnel_powered.json b1d0bb538fc8285b7d3fd77a977d78a104b83b62 assets/create/models/block/andesite_pillar.json aaf2e4259bcfcedd3400e9acb2d64c0cf06f7fb1 assets/create/models/block/andesite_tunnel/cross.json 75f628178fa21a2bd301eea8d1cebf7e94f7d5cc assets/create/models/block/andesite_tunnel/straight.json @@ -434,18 +439,18 @@ fa79580db6187c864bc8148a41987ecdd1eb03b7 assets/create/models/block/belt_observe 95d4230eb366f5e7684820c9337e3956ed34042a assets/create/models/block/birch_window_pane_side_alt.json 97d79ab99c0fb278a9b5dc54e1c6563868f87b76 assets/create/models/block/black_seat.json e58b00a7222152d7facbe0e82f00933b974df747 assets/create/models/block/blue_seat.json -7f2ed408fb662a23a75c29398e75bb9deff4c2b5 assets/create/models/block/brass_belt_funnel_pull_extended.json -242c9972e2dc70671ffef4de15a31a74b800fcb4 assets/create/models/block/brass_belt_funnel_pull_powered_extended.json -3f88752bbf2d4d635cfadb9c7217035a74ff78e3 assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json -da2ae304a1b1e02b1ce03cd0205be66d824e16d6 assets/create/models/block/brass_belt_funnel_pull_retracted.json -91ba57aded6f4a99208a8812650f454b1a44fe8b assets/create/models/block/brass_belt_funnel_push_extended.json -ee79efc65b05d953784b00e573d37602629eb9e8 assets/create/models/block/brass_belt_funnel_push_powered_extended.json -1231141717d6609f0e3c282996b1739a2c790e0c assets/create/models/block/brass_belt_funnel_push_powered_retracted.json -253e88f2c11006abdc87156dd409ed3944bb7295 assets/create/models/block/brass_belt_funnel_push_retracted.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 0934933df6bfbb19a1b14cd0e3cab2c18d5a3ebc assets/create/models/block/brass_block.json 166a5c053a81e6aadc24509ed24dc144a7255969 assets/create/models/block/brass_casing.json -6c617fc504cb2259263d24fc56c4735e455aac6d assets/create/models/block/brass_funnel.json -2f152b82291b7fc994191b1ffb8ec6d65aec748b assets/create/models/block/brass_funnel_powered.json +838e7ab4c0c9d89eacfa078daf64995e505db896 assets/create/models/block/brass_funnel.json +6099ba0366065d15d3b2821474850a1ae85485ea assets/create/models/block/brass_funnel_powered.json 520087db8d479c66f85f3483af813fb668f27503 assets/create/models/block/brass_tunnel/cross.json 347ed67bf3426e323354e2d959fc9563dc7eeecd assets/create/models/block/brass_tunnel/straight.json a959e03ca339badb49fe58ba53d86a84352e91f3 assets/create/models/block/brass_tunnel/t_left.json @@ -1018,7 +1023,7 @@ d283f86cd05ed378efd82ce46cf49bc83783069b assets/create/models/item/andesite_bric 1ceb0e49f2c46f1d5414d5fd6edfc2bdd3afa6f7 assets/create/models/item/andesite_cobblestone_slab.json b0f664dd6de3d0ee9afcb6223fbcd53b97fa0d65 assets/create/models/item/andesite_cobblestone_stairs.json 4856d13a72ec0af9f10226b4a4bf0567eb580b9a assets/create/models/item/andesite_cobblestone_wall.json -0a9f5f6d552813029474dbbfa31e8443ed91adcd assets/create/models/item/andesite_funnel.json +7490819e7e5445019b6b8cb2538f12a5b6717a46 assets/create/models/item/andesite_funnel.json 75b8b00c2418b9660d35a7fabd0774925cf1c02f assets/create/models/item/andesite_pillar.json c0e35daccfb398947532e9499d6bda963387cd9c assets/create/models/item/andesite_tunnel.json bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json @@ -1031,7 +1036,7 @@ bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json 0e1977585128fc0ecef640f72e5fc5e9fb47ef92 assets/create/models/item/blue_seat.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets/create/models/item/brass_casing.json -ab045c951352806c3f632dda7b71573f93f60ac4 assets/create/models/item/brass_funnel.json +099961ca4a75b6ecfddd1db6dd29909276759f3b assets/create/models/item/brass_funnel.json 361f75a79de5007d7a99ad0a38103c9aa8c3017c assets/create/models/item/brass_hand.json 1786bdffa2ab5a07c88d2797db3d7b54461323c4 assets/create/models/item/brass_ingot.json a37be4a0ec9bf6c381527403c57ced4f81abd67c assets/create/models/item/brass_nugget.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 750bc272b..369be6128 100644 --- a/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json +++ b/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json @@ -1,64 +1,124 @@ { "variants": { - "facing=north,pushing=false,shape=retracted": { + "facing=north,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted" }, - "facing=south,pushing=false,shape=retracted": { + "facing=south,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted", "y": 180 }, - "facing=west,pushing=false,shape=retracted": { + "facing=west,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted", "y": 270 }, - "facing=east,pushing=false,shape=retracted": { + "facing=east,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted", "y": 90 }, - "facing=north,pushing=true,shape=retracted": { + "facing=north,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted" + }, + "facing=south,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted", + "y": 180 + }, + "facing=west,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted", + "y": 270 + }, + "facing=east,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted", + "y": 90 + }, + "facing=north,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted" }, - "facing=south,pushing=true,shape=retracted": { + "facing=south,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted", "y": 180 }, - "facing=west,pushing=true,shape=retracted": { + "facing=west,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted", "y": 270 }, - "facing=east,pushing=true,shape=retracted": { + "facing=east,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted", "y": 90 }, - "facing=north,pushing=false,shape=extended": { + "facing=north,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted" + }, + "facing=south,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted", + "y": 180 + }, + "facing=west,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted", + "y": 270 + }, + "facing=east,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted", + "y": 90 + }, + "facing=north,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended" }, - "facing=south,pushing=false,shape=extended": { + "facing=south,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended", "y": 180 }, - "facing=west,pushing=false,shape=extended": { + "facing=west,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended", "y": 270 }, - "facing=east,pushing=false,shape=extended": { + "facing=east,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended", "y": 90 }, - "facing=north,pushing=true,shape=extended": { + "facing=north,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended" + }, + "facing=south,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended", + "y": 180 + }, + "facing=west,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended", + "y": 270 + }, + "facing=east,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended", + "y": 90 + }, + "facing=north,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended" }, - "facing=south,pushing=true,shape=extended": { + "facing=south,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended", "y": 180 }, - "facing=west,pushing=true,shape=extended": { + "facing=west,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended", "y": 270 }, - "facing=east,pushing=true,shape=extended": { + "facing=east,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended", "y": 90 + }, + "facing=north,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended" + }, + "facing=south,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended", + "y": 180 + }, + "facing=west,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended", + "y": 270 + }, + "facing=east,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended", + "y": 90 } } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/andesite_funnel.json b/src/generated/resources/assets/create/blockstates/andesite_funnel.json index 29e935e43..9056622b7 100644 --- a/src/generated/resources/assets/create/blockstates/andesite_funnel.json +++ b/src/generated/resources/assets/create/blockstates/andesite_funnel.json @@ -1,30 +1,56 @@ { "variants": { - "facing=down": { + "facing=down,powered=false": { "model": "create:block/andesite_funnel", "x": 180 }, - "facing=up": { + "facing=up,powered=false": { "model": "create:block/andesite_funnel" }, - "facing=north": { + "facing=north,powered=false": { "model": "create:block/andesite_funnel", "x": 90 }, - "facing=south": { + "facing=south,powered=false": { "model": "create:block/andesite_funnel", "x": 90, "y": 180 }, - "facing=west": { + "facing=west,powered=false": { "model": "create:block/andesite_funnel", "x": 90, "y": 270 }, - "facing=east": { + "facing=east,powered=false": { "model": "create:block/andesite_funnel", "x": 90, "y": 90 + }, + "facing=down,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 180 + }, + "facing=up,powered=true": { + "model": "create:block/andesite_funnel_powered" + }, + "facing=north,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90 + }, + "facing=south,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90, + "y": 180 + }, + "facing=west,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90, + "y": 270 + }, + "facing=east,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90, + "y": 90 } } } \ No newline at end of file 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_pull_extended.json index da858b2fc..f79ae5977 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_pull_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_pull", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file 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_pull_powered_extended.json new file mode 100644 index 000000000..4475b476b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "particle": "block/polished_andesite", + "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", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file 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_pull_powered_retracted.json new file mode 100644 index 000000000..4ade59fc5 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "particle": "block/polished_andesite", + "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", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file 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_pull_retracted.json index 67b96635e..f77372c76 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_pull_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_pull", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file 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_push_extended.json index 105a02ccb..75b27092e 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_push_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_push", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file 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_push_powered_extended.json new file mode 100644 index 000000000..9921a4309 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "particle": "block/polished_andesite", + "2": "create:block/andesite_funnel_push", + "3": "create:block/andesite_funnel_back", + "5": "create:block/andesite_funnel_tall_powered", + "6": "create:block/andesite_funnel_powered", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file 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_push_powered_retracted.json new file mode 100644 index 000000000..38a2f735a --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "particle": "block/polished_andesite", + "2": "create:block/andesite_funnel_push", + "3": "create:block/andesite_funnel_back", + "5": "create:block/andesite_funnel_tall_powered", + "6": "create:block/andesite_funnel_powered", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file 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_push_retracted.json index 1284e8489..91e243db3 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_push_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_push", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_funnel.json b/src/generated/resources/assets/create/models/block/andesite_funnel.json index d16aeb312..1161539b1 100644 --- a/src/generated/resources/assets/create/models/block/andesite_funnel.json +++ b/src/generated/resources/assets/create/models/block/andesite_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/block", "textures": { - "2": "create:block/andesite_funnel_back", - "3": "create:block/andesite_funnel", - "4": "create:block/andesite_funnel_plating", - "particle": "create:block/andesite_casing" + "0": "create:block/andesite_funnel_plating", + "1": "create:block/andesite_casing", + "2": "create:block/andesite_funnel", + "3": "create:block/andesite_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_funnel_powered.json b/src/generated/resources/assets/create/models/block/andesite_funnel_powered.json new file mode 100644 index 000000000..a2a451715 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_funnel_powered.json @@ -0,0 +1,9 @@ +{ + "parent": "create:block/funnel/block", + "textures": { + "0": "create:block/andesite_funnel_plating", + "1": "create:block/andesite_casing", + "2": "create:block/andesite_funnel_powered", + "3": "create:block/andesite_funnel_back" + } +} \ No newline at end of file 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_pull_extended.json index 744a196ce..fadd65788 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_pull_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_pull_powered_extended.json index aa5aa7d49..5133a0a73 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_pull_powered_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_pull_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_pull_powered_retracted.json index 6bdee09e6..d64a5168c 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_pull_powered_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_pull_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_pull_retracted.json index 8121dc133..b4e776036 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_pull_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_push_extended.json index a52556ff0..98a177099 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_push_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_push_powered_extended.json index aa3f44366..455499d7f 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_push_powered_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_push_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_push_powered_retracted.json index fc08d9de8..c5d444dd5 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_push_powered_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_push_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file 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_push_retracted.json index 9dcab1608..4f23ee54f 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_push_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_funnel.json b/src/generated/resources/assets/create/models/block/brass_funnel.json index 959b75b9a..82a6b28f3 100644 --- a/src/generated/resources/assets/create/models/block/brass_funnel.json +++ b/src/generated/resources/assets/create/models/block/brass_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_casing" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_casing", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_funnel_powered.json b/src/generated/resources/assets/create/models/block/brass_funnel_powered.json index d1e5a5f36..6085c2466 100644 --- a/src/generated/resources/assets/create/models/block/brass_funnel_powered.json +++ b/src/generated/resources/assets/create/models/block/brass_funnel_powered.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel_powered", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_casing" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_casing", + "2": "create:block/brass_funnel_powered", + "3": "create:block/brass_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/andesite_funnel.json b/src/generated/resources/assets/create/models/item/andesite_funnel.json index b3601a41f..f0e8e8481 100644 --- a/src/generated/resources/assets/create/models/item/andesite_funnel.json +++ b/src/generated/resources/assets/create/models/item/andesite_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/item", "textures": { - "2": "create:block/andesite_funnel_back", - "3": "create:block/andesite_funnel", - "4": "create:block/andesite_funnel_plating", - "particle": "create:block/andesite_casing" + "0": "create:block/andesite_funnel_plating", + "1": "create:block/andesite_casing", + "2": "create:block/andesite_funnel", + "3": "create:block/andesite_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/brass_funnel.json b/src/generated/resources/assets/create/models/item/brass_funnel.json index 3e7642b35..82e8d4035 100644 --- a/src/generated/resources/assets/create/models/item/brass_funnel.json +++ b/src/generated/resources/assets/create/models/item/brass_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/item", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_casing" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_casing", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back" } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 19ea74364..cc08122af 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -64,7 +64,7 @@ public class AllBlockPartials { CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), CUCKOO_PIG = get("cuckoo_clock/pig"), CUCKOO_CREEPER = get("cuckoo_clock/creeper"), ROPE_COIL = get("rope_pulley/rope_coil"), ROPE_HALF = get("rope_pulley/rope_half"), ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"), - MILLSTONE_COG = get("millstone/inner"), PACKAGER_SEALER = get("packager/sealer"), + MILLSTONE_COG = get("millstone/inner"), SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), SYMMETRY_TRIPLEPLANE = get("symmetry_effect/tripleplane"), @@ -79,10 +79,8 @@ public class AllBlockPartials { MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), FLUID_PIPE_CASING = get("fluid_pipe/casing"), - - SPOUT_TOP = get("spout/top"), - SPOUT_MIDDLE = get("spout/middle"), - SPOUT_BOTTOM = get("spout/bottom"), + + SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"), COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), COUPLING_RING = getEntity("minecart_coupling/ring"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 4b3ffde0e..cab3ae747 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -843,7 +843,7 @@ public class AllBlocks { public static final BlockEntry ANDESITE_BELT_FUNNEL = REGISTRATE.block("andesite_belt_funnel", AndesiteBeltFunnelBlock::new) .initialProperties(SharedProperties::stone) - .blockstate(new BeltFunnelGenerator("andesite")::generate) + .blockstate(new BeltFunnelGenerator("andesite", new ResourceLocation("block/polished_andesite"))::generate) .loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get())) .register(); @@ -857,7 +857,7 @@ public class AllBlocks { public static final BlockEntry BRASS_BELT_FUNNEL = REGISTRATE.block("brass_belt_funnel", BrassBeltFunnelBlock::new) .initialProperties(SharedProperties::softMetal) - .blockstate(new BeltFunnelGenerator("brass")::generate) + .blockstate(new BeltFunnelGenerator("brass", Create.asResource("block/brass_block"))::generate) .loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get())) .register(); diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 38b6daf44..7b1739db2 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -60,18 +60,22 @@ public class AllShapes { NIXIE_TUBE_CEILING = shape(0, 12, 0, 16, 16, 16).add(9, 1, 5, 15, 16, 11) .add(1, 1, 5, 7, 16, 11) .forHorizontalAxis(), - FUNNEL = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14) - .add(1, 6, 1, 15, 10, 15) + FUNNEL = shape(2, -2, 2, 14, 2, 14).add(3, 2, 3, 13, 6, 13) + .add(2, 6, 2, 14, 10, 14) .add(0, 10, 0, 16, 16, 16) .forDirectional(UP), - FUNNEL_COLLISION = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14) - .add(1, 6, 1, 15, 10, 15) + FUNNEL_COLLISION = shape(2, -2, 2, 14, 2, 14).add(3, 2, 3, 13, 6, 13) + .add(2, 6, 2, 14, 10, 14) .add(0, 10, 0, 16, 13, 16) .forDirectional(UP), - BELT_FUNNEL_RETRACTED = shape(3, -5, 14, 13, 13, 19).add(0, -5, 8, 16, 16, 14) + BELT_FUNNEL_RETRACTED = + shape(2, -5, 14, 12, 14, 18) + .add(0, -5, 8, 16, 16, 14) .forHorizontal(NORTH), - BELT_FUNNEL_EXTENDED = shape(3, -4, 6, 13, 13, 17).add(2, -4, 10, 14, 14, 14) - .add(1, -4, 6, 15, 15, 10) + BELT_FUNNEL_EXTENDED = + shape(2, -4, 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), PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index 4a33392d5..aa332a1f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -22,7 +22,7 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp double x = pos.getX() + facing.x * .7 + .5; double y = pos.getY() + facing.y * .7 + .5; double z = pos.getZ() + facing.z * .7 + .5; - IProjectile iprojectile = this.getProjectileEntity(context.world, x, y, z, itemStack); + IProjectile iprojectile = this.getProjectileEntity(context.world, x, y, z, itemStack.copy()); if (iprojectile == null) return itemStack; Vec3d effectiveMovementVec = facing.scale(getProjectileVelocity()).add(context.motion); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index cbbca28be..6a88cc1a0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -17,11 +17,11 @@ import java.util.stream.Collectors; import javax.annotation.Nullable; -import com.simibubi.create.AllMovementBehaviours; import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.components.actors.SeatBlock; import com.simibubi.create.content.contraptions.components.actors.SeatEntity; @@ -503,36 +503,29 @@ public abstract class Contraption { }); superglue.clear(); - nbt.getList("Superglue", 10) - .forEach(c -> { - CompoundNBT comp = (CompoundNBT) c; - superglue.add(Pair.of(NBTUtil.readBlockPos(comp.getCompound("Pos")), - Direction.byIndex(comp.getByte("Direction")))); - }); + NBTHelper.iterateCompoundList(nbt.getList("Superglue", NBT.TAG_COMPOUND), c -> superglue + .add(Pair.of(NBTUtil.readBlockPos(c.getCompound("Pos")), Direction.byIndex(c.getByte("Direction"))))); + + seats.clear(); + NBTHelper.iterateCompoundList(nbt.getList("Seats", NBT.TAG_COMPOUND), c -> seats.add(NBTUtil.readBlockPos(c))); + + seatMapping.clear(); + NBTHelper.iterateCompoundList(nbt.getList("Passengers", NBT.TAG_COMPOUND), + c -> seatMapping.put(NBTUtil.readUniqueId(c.getCompound("Id")), c.getInt("Seat"))); storage.clear(); - nbt.getList("Storage", 10) - .forEach(c -> { - CompoundNBT comp = (CompoundNBT) c; - storage.put(NBTUtil.readBlockPos(comp.getCompound("Pos")), - new MountedStorage(comp.getCompound("Data"))); - }); - List list = storage.values() - .stream() - .map(MountedStorage::getItemHandler) - .collect(Collectors.toList()); - inventory = new CombinedInvWrapper(Arrays.copyOf(list.toArray(), list.size(), IItemHandlerModifiable[].class)); + NBTHelper.iterateCompoundList(nbt.getList("Storage", NBT.TAG_COMPOUND), c -> storage + .put(NBTUtil.readBlockPos(c.getCompound("Pos")), MountedStorage.deserialize(c.getCompound("Data")))); + + IItemHandlerModifiable[] handlers = new IItemHandlerModifiable[storage.size()]; + int index = 0; + for (MountedStorage mountedStorage : storage.values()) + handlers[index++] = mountedStorage.getItemHandler(); + inventory = new CombinedInvWrapper(handlers); if (nbt.contains("BoundsFront")) bounds = NBTHelper.readAABB(nbt.getList("BoundsFront", 5)); - getSeats().clear(); - NBTHelper.iterateCompoundList(nbt.getList("Seats", NBT.TAG_COMPOUND), - c -> getSeats().add(NBTUtil.readBlockPos(c))); - getSeatMapping().clear(); - NBTHelper.iterateCompoundList(nbt.getList("Passengers", NBT.TAG_COMPOUND), - c -> getSeatMapping().put(NBTUtil.readUniqueId(c.getCompound("Id")), c.getInt("Seat"))); - stalled = nbt.getBoolean("Stalled"); anchor = NBTUtil.readBlockPos(nbt.getCompound("Anchor")); } @@ -572,7 +565,7 @@ public abstract class Contraption { for (BlockPos pos : storage.keySet()) { CompoundNBT c = new CompoundNBT(); MountedStorage mountedStorage = storage.get(pos); - if (!mountedStorage.isWorking()) + if (!mountedStorage.isValid()) continue; c.put("Pos", NBTUtil.writeBlockPos(pos)); c.put("Data", mountedStorage.serialize()); @@ -612,7 +605,7 @@ public abstract class Contraption { public void removeBlocksFromWorld(IWorld world, BlockPos offset) { storage.values() - .forEach(MountedStorage::empty); + .forEach(MountedStorage::removeStorageFromWorld); glueToRemove.forEach(SuperGlueEntity::remove); for (boolean brittles : Iterate.trueAndFalse) { @@ -710,8 +703,8 @@ public abstract class Contraption { if (storage.containsKey(block.pos)) { MountedStorage mountedStorage = storage.get(block.pos); - if (mountedStorage.isWorking()) - mountedStorage.fill(tileEntity); + if (mountedStorage.isValid()) + mountedStorage.addStorageToWorld(tileEntity); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java index a6329a37a..e64dfc2df 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java @@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock; +import com.simibubi.create.content.logistics.block.inventories.BottomlessItemHandler; +import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.block.ChestBlock; import net.minecraft.item.ItemStack; @@ -18,21 +20,41 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; +//FIXME: More dynamic mounted storage in .4 public class MountedStorage { private static final ItemStackHandler dummyHandler = new ItemStackHandler(); ItemStackHandler handler; - boolean working; + boolean valid; private TileEntity te; + public static boolean canUseAsStorage(TileEntity te) { + if (te == null) + return false; + + if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) + return true; + if (AllTileEntities.CREATIVE_CRATE.is(te)) + return true; + if (te instanceof ShulkerBoxTileEntity) + return true; + if (te instanceof ChestTileEntity) + return true; + if (te instanceof BarrelTileEntity) + return true; + + LazyOptional capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); + return capability.orElse(null) instanceof ItemStackHandler; + } + public MountedStorage(TileEntity te) { this.te = te; handler = dummyHandler; } - public void empty() { - working = false; + public void removeStorageFromWorld() { + valid = false; if (te == null) return; @@ -64,7 +86,7 @@ public class MountedStorage { // te uses ItemStackHandler if (teHandler instanceof ItemStackHandler) { handler = (ItemStackHandler) teHandler; - working = true; + valid = true; return; } @@ -76,27 +98,25 @@ public class MountedStorage { handler.setStackInSlot(slot, inv.getStackInSlot(slot)); inv.setStackInSlot(slot, ItemStack.EMPTY); } - working = true; + valid = true; return; } } - public MountedStorage(CompoundNBT nbt) { - handler = new ItemStackHandler(); - working = nbt != null; - if (working) - handler.deserializeNBT(nbt); - } + public void addStorageToWorld(TileEntity te) { + // FIXME: More dynamic mounted storage in .4 + if (handler instanceof BottomlessItemHandler) + return; - public void fill(TileEntity te) { - IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - .orElse(dummyHandler); - if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable) { - IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; - for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) - inv.setStackInSlot(slot, handler.getStackInSlot(slot)); - } + LazyOptional capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); + IItemHandler teHandler = capability.orElse(null); + if (!(teHandler instanceof IItemHandlerModifiable)) + return; + + IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; + for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) + inv.setStackInSlot(slot, handler.getStackInSlot(slot)); } public IItemHandlerModifiable getItemHandler() { @@ -104,28 +124,38 @@ public class MountedStorage { } public CompoundNBT serialize() { - return working ? handler.serializeNBT() : null; + if (!valid) + return null; + CompoundNBT tag = handler.serializeNBT(); + + if (handler instanceof BottomlessItemHandler) { + NBTHelper.putMarker(tag, "Bottomless"); + tag.put("ProvidedStack", handler.getStackInSlot(0) + .serializeNBT()); + } + + return tag; } - public boolean isWorking() { - return working; + public static MountedStorage deserialize(CompoundNBT nbt) { + MountedStorage storage = new MountedStorage(null); + storage.handler = new ItemStackHandler(); + if (nbt == null) + return storage; + storage.valid = true; + + if (nbt.contains("Bottomless")) { + ItemStack providedStack = ItemStack.read(nbt.getCompound("ProvidedStack")); + storage.handler = new BottomlessItemHandler(() -> providedStack); + return storage; + } + + storage.handler.deserializeNBT(nbt); + return storage; } - public static boolean canUseAsStorage(TileEntity te) { - if (te == null) - return false; - if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) - return true; - if (te instanceof ShulkerBoxTileEntity) - return true; - if (te instanceof ChestTileEntity) - return true; - if (te instanceof BarrelTileEntity) - return true; - LazyOptional capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); - if (capability.isPresent() && capability.orElse(null) instanceof ItemStackHandler) - return true; - return false; + public boolean isValid() { + return valid; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 7e6c28f9e..db898b03c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -519,28 +519,28 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { boolean pushing = state.get(BeltFunnelBlock.PUSHING); - boolean powered = state.has(BeltFunnelBlock.POWERED) && state.get(BeltFunnelBlock.POWERED); + boolean powered = state.has(BlockStateProperties.POWERED) && state.get(BeltFunnelBlock.POWERED); String shapeName = state.get(BeltFunnelBlock.SHAPE) .getName(); - String suffix = (pushing ? "push" : "pull") + (powered ? "_powered" : ""); - String name = ctx.getName() + "_" + suffix; - String textureName = type + "_funnel_" + suffix; + + String pushingSuffix = (pushing ? "push" : "pull") ; + String poweredSuffix = powered ? "_powered" : ""; + String name = ctx.getName() + "_" + pushingSuffix + poweredSuffix; + String textureName = type + "_funnel_" + pushingSuffix; + return prov.models() .withExistingParent(name + "_" + shapeName, prov.modLoc("block/belt_funnel/block_" + shapeName)) - .texture("particle", prov.modLoc("block/" + type + "_casing")) + .texture("particle", materialBlockTexture) .texture("2", prov.modLoc("block/" + textureName)) .texture("3", prov.modLoc("block/" + type + "_funnel_back")) - .texture("4", prov.modLoc("block/" + type + "_funnel_plating")); + .texture("5", prov.modLoc("block/" + type + "_funnel_tall" + poweredSuffix)) + .texture("6", prov.modLoc("block/" + type + "_funnel" + poweredSuffix)) + .texture("7", prov.modLoc("block/" + type + "_funnel_plating")); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java index 971b62232..6ad5e81f0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java @@ -2,50 +2,15 @@ package com.simibubi.create.content.logistics.block.funnel; import com.simibubi.create.AllBlocks; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; -import net.minecraft.world.World; public class BrassFunnelBlock extends FunnelBlock { - public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public BrassFunnelBlock(Properties p_i48415_1_) { super(p_i48415_1_); - setDefaultState(getDefaultState().with(POWERED, false)); - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - return super.getStateForPlacement(context).with(POWERED, context.getWorld() - .isBlockPowered(context.getPos())); - } - - @Override - protected boolean canInsertIntoFunnel(BlockState state) { - return super.canInsertIntoFunnel(state) && !state.get(POWERED); - } - - @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED)); - } - - @Override - public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, - boolean isMoving) { - if (worldIn.isRemote) - return; - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); } @Override 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 57fddc094..4ad08eea1 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 @@ -5,7 +5,6 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.logistics.block.chute.ChuteBlock; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ProperDirectionalBlock; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -20,6 +19,8 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; +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; @@ -38,24 +39,35 @@ import net.minecraft.world.World; public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE { + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public FunnelBlock(Properties p_i48415_1_) { super(p_i48415_1_); + setDefaultState(getDefaultState().with(POWERED, false)); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { Direction facing = context.getFace(); - if (facing.getAxis() - .isVertical() - && context.getWorld() - .getBlockState(context.getPos() - .offset(facing.getOpposite())) - .getBlock() instanceof ChuteBlock) - facing = facing.getOpposite(); - return getDefaultState().with(FACING, facing); - + return getDefaultState().with(FACING, facing).with(POWERED, context.getWorld() + .isBlockPowered(context.getPos())); } + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(POWERED)); + } + + @Override + public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + if (worldIn.isRemote) + return; + boolean previouslyPowered = state.get(POWERED); + if (previouslyPowered != worldIn.isBlockPowered(pos)) + worldIn.setBlockState(pos, state.cycle(POWERED), 2); + } + @Override public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { @@ -183,7 +195,7 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE< } protected boolean canInsertIntoFunnel(BlockState state) { - return true; + return !state.get(POWERED); } @Nullable 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 c36ef6245..ea72f1ccf 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 @@ -19,21 +19,44 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { @Override protected Vec3d getLocalOffset(BlockState state) { + Direction side = getSide(); + float horizontalAngle = AngleHelper.horizontalAngle(side); + 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), - AngleHelper.horizontalAngle(getSide()), Axis.Y); + return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 13, 7.5f), horizontalAngle, Axis.Y); + else + return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 15.5f, 13), stateAngle, Axis.Y); - Vec3d localOffset = - getSide() == Direction.UP ? VecHelper.voxelSpace(8, 14.5f, 8) : VecHelper.voxelSpace(8, 1.5f, 8); - - if (getSide().getAxis() + if (!funnelFacing.getAxis() .isHorizontal()) { - Vec3d southLocation = VecHelper.voxelSpace(8, 8, 14.5f); - localOffset = VecHelper.rotateCentered(southLocation, AngleHelper.horizontalAngle(getSide()), Axis.Y); + Vec3d southLocation = VecHelper.voxelSpace(8, 13, 15.5f); + return VecHelper.rotateCentered(southLocation, horizontalAngle, Axis.Y); } - return localOffset; + Direction verticalDirection = DirectionHelper.rotateAround(getSide(), funnelFacing.rotateY() + .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); + vec = VecHelper.rotate(vec, zRotLast, Axis.Z); + vec = VecHelper.rotate(vec, yRot, Axis.Y); + vec = VecHelper.rotate(vec, alongX ? 0 : xRot, Axis.X); + vec = VecHelper.rotate(vec, alongX ? xRot : 0, Axis.Z); + vec = vec.add(.5, .5, .5); + return vec; } @Override @@ -78,7 +101,7 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { if (AllBlocks.BRASS_BELT_FUNNEL.has(state)) return state.get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED ? direction == facing - : direction != Direction.DOWN && direction.getAxis() != facing.getAxis(); + : direction == Direction.UP; return direction.getAxis() != facing.getAxis(); } 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 0f2541fc1..69f9e19c5 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 @@ -55,6 +55,7 @@ public class FunnelTileEntity extends SmartTileEntity { @Override public void tick() { super.tick(); + flap.tick(); Mode mode = determineCurrentMode(); if (mode == Mode.BELT) tickAsBeltFunnel(); @@ -65,7 +66,6 @@ public class FunnelTileEntity extends SmartTileEntity { public void tickAsBeltFunnel() { BlockState blockState = getBlockState(); Direction facing = blockState.get(BeltFunnelBlock.HORIZONTAL_FACING); - flap.tick(); if (world.isRemote) return; @@ -134,13 +134,17 @@ public class FunnelTileEntity extends SmartTileEntity { private boolean supportsDirectBeltInput(Direction side) { BlockState blockState = getBlockState(); - return blockState != null && blockState.getBlock() instanceof FunnelBlock - && blockState.get(FunnelBlock.FACING) == Direction.UP; + if (blockState == null) + return false; + if (!(blockState.getBlock() instanceof FunnelBlock)) + return false; + Direction direction = blockState.get(FunnelBlock.FACING); + return direction == Direction.UP || direction == side.getOpposite(); } private boolean supportsFiltering() { BlockState blockState = getBlockState(); - return blockState != null && blockState.has(BlockStateProperties.POWERED); + return AllBlocks.BRASS_BELT_FUNNEL.has(blockState) || AllBlocks.BRASS_FUNNEL.has(blockState); } private ItemStack handleDirectBeltInput(TransportedItemStack stack, Direction side, boolean simulate) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/BottomlessItemHandler.java similarity index 73% rename from src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java rename to src/main/java/com/simibubi/create/content/logistics/block/inventories/BottomlessItemHandler.java index 9b6736fef..36cc8906d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/BottomlessItemHandler.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.logistics.block.inventories; -import javax.annotation.Nullable; +import java.util.function.Supplier; + import javax.annotation.ParametersAreNonnullByDefault; import mcp.MethodsReturnNonnullByDefault; @@ -10,12 +11,12 @@ import net.minecraftforge.items.ItemStackHandler; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class CreativeCrateInventory extends ItemStackHandler { +public class BottomlessItemHandler extends ItemStackHandler { - private final CreativeCrateTileEntity te; + private Supplier suppliedItemStack; - public CreativeCrateInventory(@Nullable CreativeCrateTileEntity te) { - this.te = te; + public BottomlessItemHandler(Supplier suppliedItemStack) { + this.suppliedItemStack = suppliedItemStack; } @Override @@ -25,7 +26,7 @@ public class CreativeCrateInventory extends ItemStackHandler { @Override public ItemStack getStackInSlot(int slot) { - ItemStack stack = getProvidedItem(); + ItemStack stack = suppliedItemStack.get(); if (slot == 1) return ItemStack.EMPTY; if (stack == null) @@ -42,7 +43,7 @@ public class CreativeCrateInventory extends ItemStackHandler { @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - ItemStack stack = getProvidedItem(); + ItemStack stack = suppliedItemStack.get(); if (slot == 1) return ItemStack.EMPTY; if (stack == null) @@ -56,11 +57,4 @@ public class CreativeCrateInventory extends ItemStackHandler { public boolean isItemValid(int slot, ItemStack stack) { return true; } - - @Nullable - public ItemStack getProvidedItem() { - if (te != null) - return te.filter.getFilter(); - return ItemStack.EMPTY; - } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java index af0fba545..c7fe450ca 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java @@ -24,20 +24,18 @@ public class CreativeCrateTileEntity extends CrateTileEntity { public CreativeCrateTileEntity(TileEntityType type) { super(type); - inv = new CreativeCrateInventory(this); + inv = new BottomlessItemHandler(filtering::getFilter); itemHandler = LazyOptional.of(() -> inv); } - FilteringBehaviour filter; + FilteringBehaviour filtering; LazyOptional itemHandler; - private CreativeCrateInventory inv; + private BottomlessItemHandler inv; @Override public void addBehaviours(List behaviours) { - filter = createFilter(); - filter.onlyActiveWhen(this::filterVisible); - filter.withCallback(this::filterChanged); - behaviours.add(filter); + behaviours.add(filtering = createFilter().onlyActiveWhen(this::filterVisible) + .withCallback(this::filterChanged)); } private boolean filterVisible() { @@ -52,13 +50,14 @@ public class CreativeCrateTileEntity extends CrateTileEntity { CreativeCrateTileEntity otherCrate = getOtherCrate(); if (otherCrate == null) return; - if (ItemStack.areItemsEqual(filter, otherCrate.filter.getFilter())) + if (ItemStack.areItemsEqual(filter, otherCrate.filtering.getFilter())) return; - otherCrate.filter.setFilter(filter); + otherCrate.filtering.setFilter(filter); } @Override public void remove() { + super.remove(); if (itemHandler != null) itemHandler.invalidate(); } @@ -79,10 +78,10 @@ public class CreativeCrateTileEntity extends CrateTileEntity { if (otherCrate == null) return; - filter.withCallback($ -> { + filtering.withCallback($ -> { }); - filter.setFilter(otherCrate.filter.getFilter()); - filter.withCallback(this::filterChanged); + filtering.setFilter(otherCrate.filtering.getFilter()); + filtering.withCallback(this::filterChanged); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index ad2624a80..e437fba6b 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -61,20 +61,20 @@ public class BuilderTransformers { s.has(BlockStateProperties.POWERED) && s.get(BlockStateProperties.POWERED) ? "_powered" : ""; return p.models() .withExistingParent("block/" + type + "_funnel" + powered, p.modLoc("block/funnel/block")) - .texture("2", p.modLoc("block/" + type + "_funnel_back")) - .texture("3", p.modLoc("block/" + type + "_funnel" + powered)) - .texture("4", p.modLoc("block/" + type + "_funnel_plating")) - .texture("particle", particleTexture); + .texture("0", p.modLoc("block/" + type + "_funnel_plating")) + .texture("1", particleTexture) + .texture("2", p.modLoc("block/" + type + "_funnel" + powered)) + .texture("3", p.modLoc("block/" + type + "_funnel_back")); }; p.directionalBlock(c.get(), model); }) .item(FunnelItem::new) .model((c, p) -> { p.withExistingParent("item/" + type + "_funnel", p.modLoc("block/funnel/item")) - .texture("2", p.modLoc("block/" + type + "_funnel_back")) - .texture("3", p.modLoc("block/" + type + "_funnel")) - .texture("4", p.modLoc("block/" + type + "_funnel_plating")) - .texture("particle", particleTexture); + .texture("0", p.modLoc("block/" + type + "_funnel_plating")) + .texture("1", particleTexture) + .texture("2", p.modLoc("block/" + type + "_funnel")) + .texture("3", p.modLoc("block/" + type + "_funnel_back")); }) .build(); }; diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java b/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java index cdb413a78..37d6d532c 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java @@ -13,6 +13,10 @@ import net.minecraft.util.math.AxisAlignedBB; public class NBTHelper { + public static void putMarker(CompoundNBT nbt, String marker) { + nbt.putBoolean(marker, true); + } + public static > T readEnum(CompoundNBT nbt, String key, Class enumClass) { T[] enumConstants = enumClass.getEnumConstants(); String name = nbt.getString(key); 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 769dac047..8971e7e74 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 @@ -4,7 +4,9 @@ "textures": { "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating", + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating", "particle": "create:block/brass_block" }, "elements": [ @@ -14,9 +16,9 @@ "to": [16, 0, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [8, 13.5, 9, 15], "texture": "#4"}, + "north": {"uv": [0, 8, 1, 9.5], "texture": "#7"}, "east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "south": {"uv": [15, 8, 16, 9.5], "texture": "#7"}, "west": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"} } }, @@ -26,9 +28,9 @@ "to": [2, 0, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "north": {"uv": [7, 8, 8, 9.5], "texture": "#7"}, "east": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 13.5, 15, 15], "texture": "#4"}, + "south": {"uv": [8, 7.5, 9, 9], "texture": "#7"}, "west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"} } }, @@ -38,9 +40,9 @@ "to": [16, 16, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [8, 5.5, 9, 13.5], "texture": "#4"}, + "north": {"uv": [0, 0, 1, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [14, 0, 16, 6], "texture": "#2"} } @@ -51,9 +53,9 @@ "to": [2, 16, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "north": {"uv": [7, 0, 8, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 5.5, 15, 13.5], "texture": "#4"}, + "south": {"uv": [8, 0, 9, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [16, 0, 14, 6], "texture": "#2"} } @@ -64,10 +66,10 @@ "to": [14, 16, 6], "rotation": {"angle": 0, "axis": "y", "origin": [6, -8, 0]}, "faces": { - "north": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, - "south": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, - "up": {"uv": [2, 0, 14, 6], "texture": "#2"}, - "down": {"uv": [2, 0, 14, 6], "texture": "#particle"} + "north": {"uv": [1, 0, 7, 3], "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"} } }, { @@ -76,9 +78,9 @@ "to": [16, -3, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [8, 15, 8.5, 16], "texture": "#4"}, - "east": {"uv": [5, 15, 8, 16], "texture": "#4"}, - "west": {"uv": [5, 15, 8, 16], "texture": "#4"} + "north": {"uv": [0, 9.5, 0.5, 10.5], "texture": "#7"}, + "east": {"uv": [5, 15, 8, 16], "texture": "#7"}, + "west": {"uv": [5, 15, 8, 16], "texture": "#7"} } }, { @@ -87,60 +89,61 @@ "to": [1, -3, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [15.5, 15, 16, 16], "texture": "#4"}, - "east": {"uv": [8, 15, 5, 16], "texture": "#4"}, - "west": {"uv": [8, 15, 5, 16], "texture": "#4"} + "north": {"uv": [7.5, 9.5, 8, 10.5], "texture": "#7"}, + "east": {"uv": [8, 15, 5, 16], "texture": "#7"}, + "west": {"uv": [8, 15, 5, 16], "texture": "#7"} } }, { "name": "BackExtension", - "from": [2, -2, 10], - "to": [14, 14, 14], + "from": [3, -2, 10], + "to": [13, 13, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [9, 8, 11, 16], "texture": "#3"}, + "east": {"uv": [9, 6, 16, 8], "rotation": 90, "texture": "#3"}, "south": {"uv": [0, 0.5, 8, 6.5], "rotation": 90, "texture": "#3"}, - "west": {"uv": [9, 8, 11, 16], "texture": "#3"}, - "up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#3"} + "west": {"uv": [9, 6, 16, 8], "rotation": 270, "texture": "#3"}, + "up": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"} } }, { "name": "MidExtension", - "from": [1, -2, 6], - "to": [15, 15, 10], + "from": [2, -2, 6], + "to": [14, 14, 10], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "north": {"uv": [0, 7.5, 7, 16], "texture": "#3"}, - "east": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "south": {"uv": [0, 0, 8.5, 7], "rotation": 270, "texture": "#3"}, - "west": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "up": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#3"} + "north": {"uv": [0, 6, 6, 14], "texture": "#3"}, + "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": "BackBottom", - "from": [3.9, -3, 16], - "to": [12.1, 7, 26], - "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -5, 17]}, + "from": [3.9, -2, 18], + "to": [12.1, 2, 26], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 17]}, "faces": { - "east": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "south": {"uv": [1.5, 10, 6.5, 14], "rotation": 90, "texture": "#4"}, - "west": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "up": {"uv": [2.5, 10, 7.5, 14], "rotation": 270, "texture": "#4"}, - "down": {"uv": [0, 10, 5, 14], "rotation": 270, "texture": "#4"} + "east": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "south": {"uv": [8, 13, 12, 15], "rotation": 180, "texture": "#7"}, + "west": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "up": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"}, + "down": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"} } }, { "name": "Back", - "from": [2.9, -4.1, 14], - "to": [13.1, 13.1, 17], + "from": [2.1, -2.1, 14], + "to": [13.9, 13.9, 17.9], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "south": {"uv": [0, 0, 5, 8.5], "texture": "#4"}, - "west": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "up": {"uv": [0, 8.5, 5, 10], "texture": "#4"}, - "down": {"uv": [0, 8.5, 5, 10], "texture": "#4"} + "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"} } }, { @@ -150,7 +153,7 @@ "rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]}, "faces": { "north": {"uv": [1, 13, 15, 16], "texture": "#particle"}, - "south": {"uv": [0.5, 14.5, 7.5, 16], "texture": "#4"}, + "south": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"}, "up": {"uv": [1, 5, 15, 16], "texture": "#particle"} } }, @@ -160,9 +163,9 @@ "to": [16, -2, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [0, 14.5, 5, 16], "texture": "#4"}, - "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#4"}, - "up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#4"} + "east": {"uv": [0, 14.5, 5, 16], "texture": "#7"}, + "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#7"}, + "up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#7"} } }, { @@ -171,49 +174,12 @@ "to": [1, -2, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#4"}, - "west": {"uv": [5, 14.5, 0, 16], "texture": "#4"}, - "up": {"uv": [0, 15, 5.5, 14.5], "rotation": 270, "texture": "#4"} + "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#7"}, + "west": {"uv": [5, 14.5, 0, 16], "texture": "#7"}, + "up": {"uv": [0, 15, 5.5, 14.5], "rotation": 270, "texture": "#7"} } } ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, "groups": [ { "name": "BeltFunnel", 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 ee59d4be2..dc7f6c86c 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 @@ -4,7 +4,9 @@ "textures": { "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating", + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating", "particle": "create:block/brass_block" }, "elements": [ @@ -14,9 +16,9 @@ "to": [16, 0, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [8, 13.5, 9, 15], "texture": "#4"}, + "north": {"uv": [0, 8, 1, 9.5], "texture": "#7"}, "east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "south": {"uv": [15, 8, 16, 9.5], "texture": "#7"}, "west": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"} } }, @@ -26,9 +28,9 @@ "to": [2, 0, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "north": {"uv": [7, 8, 8, 9.5], "texture": "#7"}, "east": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 13.5, 15, 15], "texture": "#4"}, + "south": {"uv": [8, 7.5, 9, 9], "texture": "#7"}, "west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"} } }, @@ -38,9 +40,9 @@ "to": [16, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [8, 5.5, 9, 13.5], "texture": "#4"}, + "north": {"uv": [0, 0, 1, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [14, 0, 16, 6], "texture": "#2"} } @@ -51,9 +53,9 @@ "to": [2, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "north": {"uv": [7, 0, 8, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 5.5, 15, 13.5], "texture": "#4"}, + "south": {"uv": [8, 0, 9, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [16, 0, 14, 6], "texture": "#2"} } @@ -64,10 +66,20 @@ "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [6, -8, 8]}, "faces": { - "north": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, - "south": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, + "north": {"uv": [1, 0, 7, 3], "texture": "#7"}, + "south": {"uv": [9, 0, 15, 3], "texture": "#7"}, "up": {"uv": [2, 0, 14, 6], "texture": "#2"}, - "down": {"uv": [2, 0, 14, 6], "texture": "#particle"} + "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "Top", + "from": [2, -2, 12], + "to": [14, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [6, -14, 8]}, + "faces": { + "north": {"uv": [0, 8, 6, 14], "texture": "#3"}, + "south": {"uv": [9, 3, 15, 9.5], "texture": "#7"} } }, { @@ -76,9 +88,9 @@ "to": [16, -3, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [8, 15, 8.5, 16], "texture": "#4"}, - "east": {"uv": [5, 15, 8, 16], "texture": "#4"}, - "west": {"uv": [5, 15, 8, 16], "texture": "#4"} + "north": {"uv": [0, 9.5, 0.5, 10.5], "texture": "#7"}, + "east": {"uv": [5, 15, 8, 16], "texture": "#7"}, + "west": {"uv": [5, 15, 8, 16], "texture": "#7"} } }, { @@ -87,61 +99,35 @@ "to": [1, -3, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [15.5, 15, 16, 16], "texture": "#4"}, - "east": {"uv": [8, 15, 5, 16], "texture": "#4"}, - "west": {"uv": [8, 15, 5, 16], "texture": "#4"} - } - }, - { - "name": "BackExtension", - "from": [2, -2, 12], - "to": [14, 14, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, - "faces": { - "east": {"uv": [9, 8, 11, 16], "texture": "#3"}, - "south": {"uv": [0, 0.5, 8, 6.5], "rotation": 90, "texture": "#3"}, - "west": {"uv": [9, 8, 11, 16], "texture": "#3"}, - "up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#3"} - } - }, - { - "name": "MidExtension", - "from": [1, -2, 11], - "to": [15, 15, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, - "faces": { - "north": {"uv": [0, 7.5, 7, 16], "texture": "#3"}, - "east": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "south": {"uv": [0, 0, 8.5, 7], "rotation": 270, "texture": "#3"}, - "west": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "up": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#3"} + "north": {"uv": [7.5, 9.5, 8, 10.5], "texture": "#7"}, + "east": {"uv": [8, 15, 5, 16], "texture": "#7"}, + "west": {"uv": [8, 15, 5, 16], "texture": "#7"} } }, { "name": "BackBottom", - "from": [3.9, -5, 16], - "to": [12.1, 5, 26], - "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -5, 17]}, + "from": [3.9, -2, 18], + "to": [12.1, 2, 26], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 17]}, "faces": { - "north": {"uv": [1.5, 10, 6.5, 14], "rotation": 90, "texture": "#4"}, - "east": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "south": {"uv": [1.5, 10, 6.5, 14], "rotation": 90, "texture": "#4"}, - "west": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "up": {"uv": [2.5, 10, 7.5, 14], "rotation": 270, "texture": "#4"}, - "down": {"uv": [1, 10, 6, 14], "rotation": 270, "texture": "#4"} + "east": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "south": {"uv": [8, 13, 12, 15], "rotation": 180, "texture": "#7"}, + "west": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "up": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"}, + "down": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"} } }, { "name": "Back", - "from": [2.9, -4.1, 16], - "to": [13.1, 13.1, 19], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "from": [2.1, -2.1, 14], + "to": [13.9, 13.9, 17.9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8.1, 6]}, "faces": { - "east": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "south": {"uv": [0, 0, 5, 8.5], "texture": "#4"}, - "west": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "up": {"uv": [0, 8.5, 5, 10], "texture": "#4"}, - "down": {"uv": [0, 8.5, 5, 10], "texture": "#4"} + "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"} } }, { @@ -151,7 +137,7 @@ "rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]}, "faces": { "north": {"uv": [1, 13, 15, 16], "texture": "#particle"}, - "south": {"uv": [0.5, 14.5, 7.5, 16], "texture": "#4"}, + "south": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"}, "up": {"uv": [1, 10, 15, 16], "texture": "#particle"} } }, @@ -159,62 +145,36 @@ "name": "BackPlateLeft", "from": [15, -5, 14], "to": [16, -2, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [0, 14.5, 1, 16], "texture": "#4"}, - "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#4"}, - "up": {"uv": [0, 14.5, 1, 15], "rotation": 270, "texture": "#4"} + "east": {"uv": [0, 14.5, 1, 16], "texture": "#7"}, + "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#7"}, + "up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#7"} } }, { "name": "BackPlateLeft", "from": [0, -5, 14], "to": [1, -2, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#4"}, - "west": {"uv": [1, 14.5, 0, 16], "texture": "#4"}, - "up": {"uv": [0, 15, 1, 14.5], "rotation": 270, "texture": "#4"} + "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"} + } + }, + { + "from": [1, -2, 14], + "to": [15, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 22]}, + "faces": { + "east": {"uv": [1, 6, 9, 6.5], "rotation": 90, "texture": "#3"}, + "south": {"uv": [8, 0, 16, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [1, 6, 9, 6.5], "rotation": 90, "texture": "#3"}, + "up": {"uv": [6, 0, 6.5, 6], "rotation": 90, "texture": "#3"} } } ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, "groups": [ { "name": "BeltFunnel", @@ -223,19 +183,13 @@ { "name": "FrontSection", "origin": [9, -4, 8], - "children": [0, 1, 2, 3, 4, 5, 6] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [7, 8] + "children": [0, 1, 2, 3, 4, 5, 6, 7] }, { "name": "Base", "origin": [9, -4, 8], - "children": [9, 10, 11, 12, 13] + "children": [8, 9, 10, 11, 12] } ] - } - ] + }, 13] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_funnel/flap.json b/src/main/resources/assets/create/models/block/belt_funnel/flap.json index 328a8a1f5..2cc22b0b7 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/flap.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/flap.json @@ -1,6 +1,7 @@ { + "credit": "Made with Blockbench", "textures": { - "4": "create:block/brass_funnel_plating" + "4": "create:block/brass_funnel_back" }, "elements": [ { @@ -9,12 +10,12 @@ "to": [14, 10, 10], "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 9]}, "faces": { - "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}, - "east": {"uv": [6.5, 0, 7, 6.5], "texture": "#4"}, - "south": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}, - "west": {"uv": [7.5, 0, 8, 6.5], "texture": "#4"}, - "up": {"uv": [6.5, 0, 8, 0.5], "rotation": 180, "texture": "#4"}, - "down": {"uv": [6.5, 6, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [14, 8.5, 12.5, 15], "texture": "#4"}, + "east": {"uv": [13.5, 8.5, 14, 15], "texture": "#4"}, + "south": {"uv": [12.5, 8.5, 14, 15], "texture": "#4"}, + "west": {"uv": [12.5, 8.5, 13, 15], "texture": "#4"}, + "up": {"uv": [12.5, 8.5, 14, 9], "texture": "#4"}, + "down": {"uv": [12.5, 14.5, 14, 15], "texture": "#4"} } } ] diff --git a/src/main/resources/assets/create/models/block/funnel/block.json b/src/main/resources/assets/create/models/block/funnel/block.json index c9dab296d..9f46b9da0 100644 --- a/src/main/resources/assets/create/models/block/funnel/block.json +++ b/src/main/resources/assets/create/models/block/funnel/block.json @@ -2,210 +2,104 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_block" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_block", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back", + "particle": "#1" }, "elements": [ { - "name": "RightWall", - "from": [0, 10, 0], - "to": [2, 16, 16], + "from": [2.1, -1.9, 2.1], + "to": [13.9, 2, 13.9], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 7, 10]}, "faces": { - "north": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#particle"} + "north": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "east": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "up": {"uv": [0, 4, 12, 16], "texture": "#2"}, + "down": {"uv": [6, 8, 12, 14], "texture": "#3"} } }, { - "name": "LeftWall", - "from": [14, 10, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [0, 0, 2, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [14, 0, 16, 16], "texture": "#particle"} - } - }, - { - "name": "Top", "from": [2, 10, 14], "to": [14, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, 12]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 0, 14, 2], "texture": "#particle"} + "north": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "south": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "up": {"uv": [2, 14, 14, 16], "texture": "#1"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#1"} } }, { - "name": "Top", "from": [2, 10, 0], "to": [14, 16, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, -2]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 14, 14, 16], "texture": "#particle"} + "north": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "south": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "down": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#1"} } }, { - "name": "F4", - "from": [11, 14, 1.5], - "to": [14, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [0, 10, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "east": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [5, 14, 1.5], - "to": [8, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [14, 10, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "south": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "west": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "up": {"uv": [14, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [14, 0, 16, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [8, 14, 1.5], - "to": [11, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [2, 6, 2], + "to": [14, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 15, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "east": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 6], "texture": "#3"} } }, { - "name": "F6", - "from": [2, 14, 1.5], - "to": [5, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [2, 11, 2], + "to": [14, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 20, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "up": {"uv": [0, 8, 6, 14], "texture": "#3"} } }, { - "name": "BackExtension", - "from": [2, 2, 2], - "to": [14, 6, 14], + "from": [3, 2, 3], + "to": [13, 6, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 11, 10]}, "faces": { - "north": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "east": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "south": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "down": {"uv": [9, 0.5, 15, 6.5], "texture": "#2"} + "north": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "east": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "south": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "west": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"} } - }, - { - "name": "MidExtension", - "from": [1, 6, 1], - "to": [15, 10, 15], - "faces": { - "north": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "east": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "south": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "west": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "up": {"uv": [0, 9, 7, 16], "rotation": 180, "texture": "#2"}, - "down": {"uv": [8.5, 0, 15.5, 7], "texture": "#2"} - } - }, - { - "name": "Back", - "from": [3.1, -1.9, 3.1], - "to": [12.9, 2, 12.9], - "faces": { - "north": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "east": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "south": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "west": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "down": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "BeltFunnel", - "origin": [9, -4, 8], - "children": [ - { - "name": "FrontSection", - "origin": [9, -4, 8], - "children": [0, 1, 2, 3, - { - "name": "Flap", - "origin": [8, 8, 8], - "children": [4, 5, 6, 7] - } - ] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [8, 9] - }, - { - "name": "DELETABLEEXTENSION", - "origin": [9, -4, 8], - "children": [] - }, - { - "name": "DELETABLEEXTESNIONMID", - "origin": [35, 12, 4], - "children": [] - }, - { - "name": "Base", - "origin": [9, -4, 8], - "children": [10] - } - ] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/funnel/item.json b/src/main/resources/assets/create/models/block/funnel/item.json index e6d6c804e..62aa61fe0 100644 --- a/src/main/resources/assets/create/models/block/funnel/item.json +++ b/src/main/resources/assets/create/models/block/funnel/item.json @@ -2,133 +2,103 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_block" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_block", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back", + "particle": "#1" }, "elements": [ { - "name": "RightWall", - "from": [0, 10, 0], - "to": [2, 16, 16], + "from": [2.1, -1.9, 2.1], + "to": [13.9, 2, 13.9], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 7, 10]}, "faces": { - "north": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#particle"} + "north": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "east": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "up": {"uv": [0, 4, 12, 16], "texture": "#2"}, + "down": {"uv": [6, 8, 12, 14], "texture": "#3"} } }, { - "name": "LeftWall", - "from": [14, 10, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [0, 0, 2, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [14, 0, 16, 16], "texture": "#particle"} - } - }, - { - "name": "Top", "from": [2, 10, 14], "to": [14, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, 12]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 0, 14, 2], "texture": "#particle"} + "north": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "south": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "up": {"uv": [2, 14, 14, 16], "texture": "#1"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#1"} } }, { - "name": "Top", "from": [2, 10, 0], "to": [14, 16, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, -2]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 14, 14, 16], "texture": "#particle"} + "north": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "south": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "down": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#1"} } }, { - "name": "F4", - "from": [11, 14, 1.5], - "to": [14, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [0, 10, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "east": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [5, 14, 1.5], - "to": [8, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [14, 10, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "south": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "west": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "up": {"uv": [14, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [14, 0, 16, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [8, 14, 1.5], - "to": [11, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [2, 6, 2], + "to": [14, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 15, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "east": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 6], "texture": "#3"} } }, { - "name": "F6", - "from": [2, 14, 1.5], - "to": [5, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [2, 11, 2], + "to": [14, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 20, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "up": {"uv": [0, 8, 6, 14], "texture": "#3"} } }, { - "name": "BackExtension", - "from": [2, 2, 2], - "to": [14, 6, 14], + "from": [3, 2, 3], + "to": [13, 6, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 11, 10]}, "faces": { - "north": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "east": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "south": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "down": {"uv": [9, 0.5, 15, 6.5], "texture": "#2"} - } - }, - { - "name": "MidExtension", - "from": [1, 6, 1], - "to": [15, 10, 15], - "faces": { - "north": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "east": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "south": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "west": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "up": {"uv": [0, 9, 7, 16], "rotation": 180, "texture": "#2"}, - "down": {"uv": [8.5, 0, 15.5, 7], "texture": "#2"} - } - }, - { - "name": "Back", - "from": [3, -2, 3], - "to": [13, 2, 13], - "faces": { - "north": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "east": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "south": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "west": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "down": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"} + "north": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "east": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "south": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "west": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"} } } ], @@ -165,44 +135,5 @@ "fixed": { "scale": [0.5, 0.5, 0.5] } - }, - "groups": [ - { - "name": "BeltFunnel", - "origin": [9, -4, 8], - "children": [ - { - "name": "FrontSection", - "origin": [9, -4, 8], - "children": [0, 1, 2, 3, - { - "name": "Flap", - "origin": [8, 8, 8], - "children": [4, 5, 6, 7] - } - ] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [8, 9] - }, - { - "name": "DELETABLEEXTENSION", - "origin": [9, -4, 8], - "children": [] - }, - { - "name": "DELETABLEEXTESNIONMID", - "origin": [35, 12, 4], - "children": [] - }, - { - "name": "Base", - "origin": [9, -4, 8], - "children": [10] - } - ] - } - ] + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel.png b/src/main/resources/assets/create/textures/block/andesite_funnel.png index 9d4f35ea9400acc78876ff998f5d56bc71edebf9..9f795dc7b004d2a13903ce516fb88fbdead7abbf 100644 GIT binary patch delta 406 zcmV;H0crlX1JwhNNq@rt01m?e$8V@)0004MNkld_}?N$1lO5uA#_FHmuzNdI=g*4dE%ygD+m4; zp06&k2_Q+U0|5te7C)$VSh~jKdxTQ4ASj(-yuCNkZhMGPGk+iUXz`)>$ln_Emg>_{ z3e32rlFV)b)kYs~r>pV}D+X4_k>S46TrQ$OWRJ75*LA~`3L^3yc8YZYZZG)z)5Bw= z!L%$3=}a0gclX$*g8u#<)jnw*oSmQ>Dw{{-&+{^6J1Ut>elQyONG5D}eOJY?lrTe8 ztxgk_awRJ9NPh^)b0Dy6T@;Fvd-b}pN0&^8xC|a7KT*fvSJi8;LAC;(i;l4sZq|W^ zs-qNaJ3B$Pf`1k8bk|{_0=CCG3fPf(=b;8?IvXAc*u&;S4c07*qoM6N<$f=dUv Ae*gdg delta 375 zcmV--0f_$91GfW^Nq@lr01m+cxRGn^0003@Nkl%Sr<=6g`=DX4Tj+J)e3JP>Z~xhEm_T*CV2eT5Ru zxQXl`1LwSC04Zg;gXSq;kL+$RQ2D3CRLG+TB%8FYnk&nposHJlDnWag12-V(-9pZP=E=@c9F2OJK3cF)!BmO=^u5 z_zptfMbZk9v;`vWLNtnkAAoAH2vLusg7?sgIXdk+L@m%~Nb{owLYCd*@aP!Ct%K@R zOVe$H+}E6L!El&p%=*nh!a7H=$a&+a5p8m`C^v_Vjv~9hz0ofSqMCm8U#G!Nx;u)T zCwHq%!!piSod&zOywWX*qVFoxV7;@RGNuqVjUpJ1V0gnZrM|yHC0J#wjQ_p>_yP*o V!N&DNGdlnP002ovPDHLkV1nbNx1Rt2 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_back.png b/src/main/resources/assets/create/textures/block/andesite_funnel_back.png index 0cf5404047e77f8a0de822507dd252147793793e..3936bfd3bef73c33b31632b37dc77a286574330d 100644 GIT binary patch delta 1219 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_pull.png b/src/main/resources/assets/create/textures/block/andesite_funnel_pull.png index 4207c9e969d575404dd85d331a9fee30233fbdbb..bf0abd43f808a188cb90fd6da9afe800ac0e9914 100644 GIT binary patch delta 416 zcmV;R0bl;p1K$IXNq@fp01m$aI0aKA0004WNkl{~_dVV{M=P(FeWetLR5}Iw(T1!E$8o-9U|rTSpP|X(a(@AC*TLKSD{s)c^YV;j z!i4L2e4yWVVcYk}=ku)hTpz9G6(Vxu>3$Wr^#gQUXE>>CW35yS9X>za<-NQ5A=kze z2Jc1q8(_qAN{2b8uvgu}YGH{FcP@_tJqjzWU}ckBE3gME#S*vh;q+KE122f? zb%XzwW%09R-+xfCQ43mSqvEp~KN*~tI@sK);i7TFx}-6mF)1JeVLNq@iq01m(bYSxJf0004KNkliP!4 zk2VT<4>F33c`%R&f*1I{9~*N>r&8!k1-4yVQSHxfELDpbN{NhZ6YClHB@Vw* zfR}fT$8y}iEq@SRoQ3B3v1O`$wr+>cWVvIiX@Nqdu%-p58P_zHPM#8_Lz9|bdQWCL zrz<-?JuxqEb9u}&4YpNVRyz5v=%M>1W}b#c$rqf=T+?6&hexIbN_N(1u=-A2Q7D?p ypfsduNGFXcHTo3{j4@1V)3A~{H~)PB@C$j(*Y$~()(wOJ0000}Ui`sk zXJ%(-GxKSc-AW*Y0FkqDupe!(Pq?l-vY_JZv#nJRs=?~oI)D667wyh_c#uNBKY-`C za2!V^FE6dAz4g|DuE&r`OLYAJ_4^v)T=C-k1jRxcreUDbe1#fBHDr1&ssceR5VNWgQGxhAD1u`I p$2q12LFE3g8PDLa{C5H13xh|{5%Sr<=6g`>gJkqJtX$vhy ze4v6L_y_$BT@-Xv@h21%(T%J52EWCH8#f|u+-Y&ND6J2SZKsXBaU!(~!P$5q+}x9M zL+-hRHMScP34%g^=q>{1JYfJKM6!e8DIbsQI1FX{A@DA`uz&505)KAK^m+oVR!ilJ z3ri|?o;%=P9wr+iW18s35^TLTFCU&>F4POrxR diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_tall.png b/src/main/resources/assets/create/textures/block/andesite_funnel_tall.png new file mode 100644 index 0000000000000000000000000000000000000000..f6adf3328fc60bc684ebeced207c0aba46ba6edb GIT binary patch literal 440 zcmV;p0Z0CcP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ZmCnK~y+Tol@IQ z!cY*L(~v+Fij5kD-|z$UJ4pNqN%Y0UTfD>vzsgs?LZuQer7cpd;Bn^^4H(h1lbmdK z&z{Zfbkx<&wI0Q9xIaI`Du9X{9||t?()c1hyBC+3z9+Drp1bJxBNXM5k0Uv3`YW=x z)9#sfhC!iZOBtwdmeJ}A5&8p@uh>QKZayblMuK;$vER_aAT$L+DK-209Zr=zfiNH! z8DiTuYV{f(Ztt)yh5z;sq~}%6&fx(D!b~-fn!4(^9ER!i14$C2Qg#pxLlb{uqBROL zmOZ}<>?x(Gg8*61@yV&?TWd=ueTkR_6p|}j)VJ+DnqpQ^7i(>nML2c^J@!d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_tall_powered.png b/src/main/resources/assets/create/textures/block/andesite_funnel_tall_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..38e04735ccd9a534fd61a32b429cf3ca7f266fac GIT binary patch literal 454 zcmV;%0XhDOP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0b5B#K~y+Tom0C` z!$1%mTb9V7#K9s6IRz9nv{aO|d_yE!e!xWFbT)* zI*~#|gq)GakoCUKkiv_Kz;w?y~6j`3Fl^YyKbZa0!* zd-BnuV%Cs&NNo8Xsgn+@oT3y^-pHfT8X)Wi60fQi@Y-z5-Lf)x&8QqzbU)yIQy7LZ zdHWl7u^<}uBT-8!1-I;C=jvLHuuFU9v6yK=T|3$ikD;nm(plvq(ElhnNLC$OBT7&+Io}B$*XlYx2Kc7F=tx zLDrp;B(j2Qr30Df5|9pjdMwicJ5oA$NaM_ihY{{c#Yifb+S7K{M5h=H<6pm+<5}?0 wEw&@bh-~G3O7gkpZ{Vy>uXBN{+-x-Q0|p4I{AxO6UjP6A07*qoM6N<$g4uzn5FH;AUW8 z;05CM42%qd4FBQu3!qqDvn>NiUG9Waj6g0NFo6U=JpIhT4pa=%{27QrnviLb984WL z0J{Lh04b0Wb$7ue=WwTBrb zfCA|L2RZsH5W~U%9e};?^~Wy;17l^dz{eLKz%&f}`1Tu2fBOCdOb1pUL~#Lw10&;q zkRd?8fDePzfYhRkGl@eDA_PFL1bGo1Fo7Hlk|YGa{`vzB7j(cR03^6M*dROt02HX` zfM^$h0Bu}=nMXKr18i!Uz5xkhy#Pv3=m4G@i2XGYB?M6TKfXaM0)bE8e=uCR@QML! zBsT{eLvGMA25umm7l_|8Ffs@-{AYLpWJ>@sj7ApEYqkZF41Wwv-xydKzW(^dzz&oI zY5okvAVnY=qzRdZiG$R>`t*$fq!;W30cns{(!jT`j0_(>d}m-R^3nbe6(b7_Y%G8P z*Z>^^F@{OChjGRNjE_!(B5COQHU#DWaUEeRfsNJR7>0lwmv}6r3*n^G*w6lsL(8xlz}Oz zv7)tAv@xBT%s8)P=JWo~%$eM|FQ=gW!R5Q(<9z3Q=R4=ztAD-sVqT@=27PoPOoC~e z+$yDLZ*Py^Uw%xZzng6ukD7FSw@&SrMt5anbZxsqe)8>ho73i*`&CSiJr;a!2g?GQzc-97t5H77eqn8?=yr{(qfsT=GH4e(ZsjVw{yZA3LI4PGtw)xLIVsP&gbWO&iU4tOdHRvmt0P zCayjA<_U#sd1IyFG8ETv>WLWbHk$P0YZo-kvRH6OYHKTCMW@zsWn1 z{rCz#IC&V23%Fe#q#BTb>%*J)$p<0(X~lC-tHS0_T;a~H_fk&+PTY$kgJJ`Y9!}Gl zuR?rsxPSD}Jz4UT2iPNMKjY#1#$Wdn?sR&KHm?};$o-0%ZAB5&D#6JzJuunf_p4X` z8c8|u+E0^$W6xnPoEr<0+rUp=($q_CV8Dm3=GEtyCiz`}LdkU}jmCkZ$B$j-)-LZS z>y#T9@cv5=si2bT=K&xAfL+7axp+3dshA^4}Zl34k^KH$J;C)@O2aHCxRC)7QdrZD%Bt9 zfj|Uu1zzY*xBeI4TJ699-zz|Hjfy=8p+wwYDc9)ugGZ=r1s{-_KMEX#l4?PqHrNp* zhy$?OFEHpM<(l;aW8r?>zn2#VBS*6;_lzP>(W zg|@V`q>$%QZm|%qLf>A7F`moisJrzA3$~jFQEf(tT`O~k(i$6J8Ln^;WYOyC>aYP` zx#@+|eWS{OnVA`dQVtI|4e-v5|04mvLUcfHy?{0G>UPaA@o6hX4Qo07*qo IM6N<$f>(D@^Z)<= delta 905 zcmV;419tr53B(7GNq@lr01m+cxRGn^000A7NklFp&9Bz1`<>0(&Tg}5ekfl2!0_fx=FPnM&g@J?;^uxMm4D6Az=)43Q79D1@AsEH zi*vDgis(UE_Zp*8T)h9O&=5G0%$9yy1c6@Qx9&}88Hact18tRX#{m(K$BjypRidXe zPeY%>vW|fZvnd*yib~&$?zKtsw?t%IB9RacCE%8}+Hp7z323tR5BZ;fR`31;#HyuQ z)c%_LAk|B~<9{@?1(=jeEvPXKB~Xj(Dr#Iq3E(2){lrCtOJ+IHhvR^Td->RooI_5Q z$IAy8B(&0?z5_xQ)N#Y9G2GWtH~VlL(C{ddJ)1}38-f*apUAR8I{j2$Oa~$H9I$O{dt9D6q|3noM<n)T)pxl0R7fOC8H>pmaJd6@ZOIB1S5e671uYSEGowS~uuWd?P*ixME2e zp71ScLtn)3DwNeYCU7g_g}8pY%eeb0k1Ay{8QGZ2S$~(9Kp-F|(sf1G9A}#K1>!A6mvvz%6?@+dA)K;UntAozp{w8ljuloR}7fBABX{Y<6pJ;bSo8xK) fwfNRmO!OPkneZ2(L6gb=0000a^*c16+ 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 delta 235 zcmVTNe;jO01m(bYSxJf0003Tkyl@TCeSIK?+lDZKH3m>kqM|D3m;#6 z0MqAEZoI-98#1DtU@@GrKqxjq0SXFOtg!&2@x=zn5Re|cu>b?uVgnQlT-^Vu5DWkR lQ>34P2}+X<2HF4y1^`3gmA;A2eIx(?002ovPDHLkV1fjJUAzDQ diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_pull_powered.png b/src/main/resources/assets/create/textures/block/brass_funnel_pull_powered.png deleted file mode 100644 index d66a2d4aa620cfd312c3359ee373c1ce8bb06c34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXgNUb#V~B-+@*0kdf6pKNFq@I(hGpad6RRIT z|MJgpn_mBa?!?B8nl6v`FKT0GZro@TQSiSpnx~I1i)Z_KJGRe`4_^1j^W2fi;qi~F zProopn5Db+*T3e6r&_}Wm`iw$NR(ZXNityZ>R|rpt*|Xpp4W_JNo3H3{)c5B_1KIT z{Low>)h1@Wfzju_M8v@^hgm-xBIH&*@OTi!7MdF=a+ZH#RvE*`)&BP-9I6iL2~2p# z%9Yr}?{D9nne*xXJ|m-=A0Os6Zam@s+dia6$Kh|pj~|biXV{fL7QJ_4g5Xn@?!;c! z0Ec@FkNh2cG|V;}W761S+Aw3rjRVr$1`WDq4jT^~{X3s)K_EHJs5uz)uq bfq~)kiykG@^@_kSV_@)f^>bP0l+XkKMWvOV diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_push.png b/src/main/resources/assets/create/textures/block/brass_funnel_push.png index e214fb94f4e239007bd6c30db105e84bac29d5de..18eb093209d7edd08d91c34d8db4c6083e0c6675 100644 GIT binary patch delta 200 zcmV;(05|`P1N;JzNe;gN01m$aI0aKA0003Ikylwr`ExHY2ypym`0#@nPA4WCFuc6? znqk}irxV*u#|dqF^&7c2<^ zlMDeOV*i6h$ON>F1%3$uFdsQKU;q?0AOJQ%$3TqX$ceWYA&nfMxMBlmEFf#f7aJI{ z00V?#gH3>sfs6Y;6=LE4e~R=oFhOau!9W|pzyJV1fU#V<&RiD&0000CFq`Qc11rPVAHTo~&^6z_`WS3eO^++XPoU=a zKs6wFklI(DzA=FGg1sOh4bln$k@zBBA?_j*&^8wMB?Q2HPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940V+vEK~y+TW2^|# z{m;eln*jvaIa$CoI{5kh512-mfB&74fw3t>SM4?e7$a9IgmJr z-T}m~K7C^V=>>a1K$;gQ1OXqOer9lTR%W>W^evbVavcnSoD5U@?JFb0hY#Nw7>j(g z|AR%y1hkC>ehC3EA2~K)02DSLfHxL2fEW~T$g%Mf$Opv+C{{pfamE5nGojePhy@rR z6dP;;d<L!cUx7~Y|00000NkvXXu0mjfGkTl< diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_tall.png b/src/main/resources/assets/create/textures/block/brass_funnel_tall.png new file mode 100644 index 0000000000000000000000000000000000000000..8e5c56b33b0aba883d1244de7af899e0b7007abb GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!S9|fjv*HQYlE%14mk+Sy?cn?@q*Kq4V$+J z9trx$FwgbiJum+W%@v%{{R;&)7)X6m^U4-$w!`5E^4TKBvCSZhc4@*291zI zS({}%8KX7IZA~jS@3sw^FT4MjJGWxA9do9lPmq*mdKI;Vst02G6S%K!iX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_tall_powered.png b/src/main/resources/assets/create/textures/block/brass_funnel_tall_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..97543ea4dac987dce5ad64cdad5e7438e1db7f43 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!QY-Pjv*HQ$uZZHzW+b@`aMs$+PpM_l!OEU z_M}RMx{l_3j7QiTZ!A9A$GD`Q)1{{3m*kq6{Hr*orwRP!?67T+SjPW`NkLvmLHQJC z(j!)dQiTt1wUuY2>3q7#Chee?FlS2sFZqs1NW5@bN&JLIRqoFD8D37d0WqU#?sj+6;r`CO=XUPwU0_|~FF8Bs&dhJloPRUt%)M*9wYNu+hxtsw z(@LYRzS`4@@o)Inn+Mf7;xh`)ZO}mp8Cp37@wkJ3sl} zMOxS0Kn>Aan#<;jTHv>dIU3y3!MdOle#C1Tk9XBk=gOtjSRW0L06YUQkWJ^QHX5KZ zgr6HcO*KQG6o0i?19Jf32UclqjBy){)o{z3$Q5`a)5$dJvXL-=Kh^gxO`QMC>TYl1 z7P52WY8Gr{Ra*-?Ac)}nOvnTdUu`uT2B7NzH;muCeYZOQ{s-3R=qN#SBr{o0bNNMa zgmFxg@QZPH2k&t_5}{Inx29noIzOW7Vu8{S;~aX!^MBT*4|6L3*W{N2aQz5K>F9|E zz&JdIafwbCzy}v+Uk*ZZKs*P;`1C(1x*bn?y^ApU6Sv$t55vvGtfws^kOLBW0ldeV z!?+olQYbqDIEOI6_=@Jn(1aAg`%?S|fnNo3lj$`M9U(7eTt^r`4392($kP_VIbdcn zyw^i+8h@920^XZ^JqO0d#(cRlGp!^CbiSVh@{*8}6K`N#`gG*73!dge_+i+7@Bm*- zdIW?YNJ3n<0Pb^1NREaU0ht4s6#(SF*himVxvt*+?y|y-*wDXCeLX&vUGwTLg)x)Q zuHg)qEN`O8Z~kyz7LE}o>k$Eog0vt{-k7JJ&VS%dDEtc!|E0bal)Uf;J>iXcZ4^HV z#}Sjy-vc>2NiS}3r(&VMZp^SA23(_ZU384Y8gmV4U^1EMv_kY&F90X ze}A+-I{b{<^Ku_Q^1?B)e!j-?SW62%+0o4XxYDr^7)Opk@NvRr`0P_H)VV4~uWaq0 ztpcgT`Z zg8PLVo4_$0`t%pqvWH6_4k~0hfCzki?uWn;^uMs0FD=}Ls0i!G(E4DUHR!ip*heUU z#Pd|f(H$F#*1P9Ah=6@oH>FQHJ2*qeiyR+TW-R^FB-S3$>)4O+Omo97gBxmoPJM*1$_kY}T?j7sY;hl5Q)he@s1~f!Er(FI1urxh=E3vyM8pHq*xXFpJCGy6WLsY~Bkv9<D>qP*iBVmr#IxjTaQivXFUw;n19DuX+MgW-lslS~%58`fO z$?dJ-&w)pbfKYY>uns!qL;(NZ)R%)-1+tT2qbNnONUT@?80~#SU7nmt?|Aco!aW`6`Fj9s_}0h^^zWZ@d_&(Z zgJ@}ff{)YIMvJd2(R)>Z5MqmL?cB_#UonGt)0PH4&7iGR&mSbVo#L02OG86Fx0UF* z3idwVNNrogG%~W=`&fujw!lm15ozK7RHW>#O50sza~u<7=D`SFYZoZJV7)&CI3fy|-WXKG`OIn&v7{_ZJn}=_=2Z z$~(uj_-73`@+KwDYn_+N_0En~x^{h7;K;pSw=7ZtgzW0@U4dYKEj=bZ&I z5cHtViSv^MYi?3*4p<)!#ngHZ5;;IV`~GIp3H0~(E6Z|jn~@ELLWFzSY?i93s(8%H zfrlL=`T$VV0dvPfrg=V0G0AIrMXV@6xmXozi|Dg_AINpa@&n!aXvhe{Zo>NW8&jwhP}BRhy9L! zN|o9d*LO#UosQ?s^U}10?jPo-gFPHz%L4Wf+-SEK_+HHe_*e?%i!aAhze8%>df1Kqaiw<20e-<5Up^$TmakUBynbT=WQ=wvlrrt-SMa(j0~l|x=pOSCZYOT z)#tOaln(qB(k7!<3DjViIBF5%Yph(qaXCDm%`zSQ58bZ+16DuExUgB=@c;k{002ov JPDHLkV1iW2$9(_* delta 298 zcmV+_0oDG{1KI+RB#|)~f5HF&4#EKyC`y0;000?uMObuGZ)S9NVRB^vaA9d~bS`dX zbRaY?FfKAN@gQlH0002jNkl%wawtIC|)f9JUp@B1Run9he6bXut)<5iHNV1Zx_B z&Qwht!6cE6R0~{ypz3r47pw;tydt8p!~aK;&6r4L@EBo*<&!|-kh zi3tl`7zN|Tui%c2U&QFz@8HrMdpBs}iiI!K7+9zU11+yopnrhBx&O;_dRq}p{O4wR zI`f}%&YW{*PSdkTInT%bUPVGZ;>ls9lx+YxLX!0dpnYqvtoTSf zRNN!P_RC!zp=^VLa&Sd~?luU;2U+t#{J;PkP=xB-z$N~EUER=u zq@CL!k8t0xPr*^}@$+(-krzU8u;!zhgU+7x^0$4|5f&4Dzd9LJ(Ja}r1LD73EZm&x zqtJ)N5_7WZWBuSlnpj2GfJ-=FA8#yq}Ar4sXw8-8uch&WA0hkOXLcly$ukwSj^ z!OXy~d~q_DDQ)gCiHz5iqwQk@U4`{+$p6?6hyd9_{$Kr|FOyl=T0%xI+N}-7P(P?% z8Grf#ic(%s;4blf+7^kk7-nfL!yM0{LS1AZz}Neo)URL=F0Z@@aW?k53DrlDiPUrlSGZ z7sedwq`$;X?eHmUs!^xp`xc=I#4_QGQUS=YQXYv-wI-O+T=3 zeUZ$hHUQk0V9}6oQOyBwi?q1DAln{W-wz}=$mih$ t%Qq(|dB&Qm!un$O7 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 FV1l+s(BJ?7 delta 445 zcmV;u0Yd(c1pEV#Nq@os01mBb5QgW7!U5(uqw?Wb zlm-$lurZ-Dw*CMcVngE}G1}Pp6D(|uoxQb}@k#dH z*}I+HnVmW1sIYF6pxgNpmOr8Jgs=uEhs8}>>9%RVxFuc@J%85g!WyUXX0l#fK2SUv zCEiY+d~k9_YuPA8)gZO3-k5^ha*KAhm)QmZq0CA;M5_xkq=i*>@+t<_fS@{XbtM$n zB2>vAvzcloy=t-2~w9VFZ66Qy7I)fFa9> zTlT|=Kv-^EDS)Nel(77fRY3GZPuXD(%GpiXt~6U@8a45X2-N^G#-8=f>gof~Ki^}` zI}LUJY;a>i7pnsej-=_jgIH3h>(V==rZv8cn(^_gVm6JdjIs(y0X?2b&vEPe4XnXo nXl3~F-)Nd0-sHdNdYFCyL2;cS@kcIe00000NkvXXu0mjf)acm8