The Funnel doesn't end here

- Updated wrench model (Kryppers)
- Funnels on depots and perpendicular to belts use a new model
- Funnels at the end of belts
    - no longer have a directional constraint
    - can now be extended/retracted manually
    - now hold items back at the block boundary
- Extracting Funnels on top of belts can now specify an amount no their filter, taking x items off a nearby stack when possible
- Fixed some issues with belt/funnel interaction
- Items reaching the end of a belt will still be regularly checked by perpendicular funnels in the space
- Contraptions now render blocks in appropriate render layers
- Straight diagonal Chutes now create an intersection when a funnel is directly above them
- Attempted a safety fix to bracket removal from shafts and cogs
- Fixed windmill structures not stalling when their attached network is overstressed
This commit is contained in:
simibubi 2020-11-11 19:00:31 +01:00
parent dbfe7f93fa
commit 287db27ef0
52 changed files with 1432 additions and 741 deletions

View file

@ -5,7 +5,7 @@ f0d6baaabda94151134f569246d61a6e710c35a9 assets/create/blockstates/acacia_window
79c50afcea3a360783a5b3c73de9823511e9aed9 assets/create/blockstates/adjustable_pulse_repeater.json
1d730df54c9eae94063e37396d224fb3c87517e0 assets/create/blockstates/adjustable_repeater.json
9dd79bf5430f674e7d3e3fc7d59edee3d66e241e assets/create/blockstates/analog_lever.json
0a172dea0746027be3676e87271615f1307245a6 assets/create/blockstates/andesite_belt_funnel.json
dd468657a73fc2ad6e1ac08ace2996b6997d33e0 assets/create/blockstates/andesite_belt_funnel.json
585481e97c5066af63ea12fa5dd658798844d64c assets/create/blockstates/andesite_bricks.json
4e8d61aa2c8490301317ef747f67f0169ebfc2ed assets/create/blockstates/andesite_bricks_slab.json
da63a8be3191d6d72afef6c79e3aea3f607631f9 assets/create/blockstates/andesite_bricks_stairs.json
@ -29,7 +29,7 @@ a71ddf3291bd13d7877f2fe32c42f50407f99afb assets/create/blockstates/black_valve_h
ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json
4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json
9d7341a5cae5d47788c595167946dfb6441cebd1 assets/create/blockstates/blue_valve_handle.json
fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets/create/blockstates/brass_belt_funnel.json
ee1299a15fca849eb42bf81507f85a54c167bbfe assets/create/blockstates/brass_belt_funnel.json
8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json
b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json
3057e1121117c0cd651c288cd8e2d46bdf64afb1 assets/create/blockstates/brass_funnel.json
@ -137,7 +137,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_
fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json
b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json
6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json
4c3e0500f9382d2e426e823fe876f57f4d7ee3b4 assets/create/blockstates/fluid_pipe.json
fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json
f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json
5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json
e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json
@ -329,7 +329,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
bdd56f32ce0a148b6e466a55ab2777f69fc08cfc assets/create/blockstates/radial_chassis.json
8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
@ -424,14 +424,14 @@ cda6f9761431c5b8538f746db2dc55e5fb57bf01 assets/create/models/block/adjustable_p
ce5e0cd1598cf2228bb77a68c304dd210f3848f8 assets/create/models/block/adjustable_repeater_powered.json
c82a31943f5adb4a64c6db4c48c94cbce5d95bc4 assets/create/models/block/adjustable_repeater_powered_powering.json
51cf61f8bc25cf62b0e0c0705c75512809358ff0 assets/create/models/block/adjustable_repeater_powering.json
4b8c1db868de612ae6a49d9133db700ac6a3d688 assets/create/models/block/andesite_belt_funnel_pull_extended.json
eb7f1bfcd856bf302cb24dda09994ceef280fca2 assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json
d5d7c62b16aa3cfb279b4e3100f910c1782b5846 assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json
2d228eae550d573f4cad06ed6f6d51e4975fdde6 assets/create/models/block/andesite_belt_funnel_pull_retracted.json
2a3b929e3c24f70a0842b9ce56c175c4383e2598 assets/create/models/block/andesite_belt_funnel_push_extended.json
56a4d2e099fb285fd04ef095ced3bd7046835711 assets/create/models/block/andesite_belt_funnel_push_powered_extended.json
8a73d43517d64f873896631fbe7fccd085e1603a assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json
aff112cb4ca73f3b1f71e98ccd984ee286da2930 assets/create/models/block/andesite_belt_funnel_push_retracted.json
bcbe466da8b2172aa0f6e5c846b2e261632ceb6b assets/create/models/block/andesite_belt_funnel__extended.json
9218b0a053911071dbde66fdc97de7485a08c54e assets/create/models/block/andesite_belt_funnel__powered_extended.json
433daa4b4cb4b6bc12918b2e78c2141d941e78d8 assets/create/models/block/andesite_belt_funnel__powered_pulling.json
a3581f92b80a7adf2f933cfbeda43f88db7d8615 assets/create/models/block/andesite_belt_funnel__powered_pushing.json
14b6689a3c67bfb4fddbd062e9bdb0957e228a8c assets/create/models/block/andesite_belt_funnel__powered_retracted.json
657f22838ee3e8719fa33e1f85034043c4907310 assets/create/models/block/andesite_belt_funnel__pulling.json
59016d8f76df2920437168368cfba47bbf19d214 assets/create/models/block/andesite_belt_funnel__pushing.json
997495a40f20d13a6b7f6083bb8f519ff107ca28 assets/create/models/block/andesite_belt_funnel__retracted.json
4d412de3eb98dfee548a0dcdbae5d0168ac67123 assets/create/models/block/andesite_bricks.json
054ef3fff7f146dbf8adc92dc2b6d169c2bdb7a5 assets/create/models/block/andesite_bricks_slab.json
8784414839f6a5786bf43d6a7dff6c27bdf7fe46 assets/create/models/block/andesite_bricks_slab_top.json
@ -481,14 +481,14 @@ c86a455b8e85ef190261718726b344cf15ba1e4f assets/create/models/block/bracket/shaf
8fa9ce896412af894d7c431a50104445d91b1d4d assets/create/models/block/bracket/shaft/ground_wooden.json
3956168840aca9425d3bf240650406c1dbc8ea66 assets/create/models/block/bracket/shaft/wall_metal.json
7aaa2fbdb618e8aab7e0da19a5393e1eaa608623 assets/create/models/block/bracket/shaft/wall_wooden.json
24dff9a8d22c9a88286d2b7d08384ac9f281a512 assets/create/models/block/brass_belt_funnel_pull_extended.json
c9c5f53c9d4f6cf6f509452e91cab1ba5b57f807 assets/create/models/block/brass_belt_funnel_pull_powered_extended.json
addcf821a2348c0985bf9a72229355cfab818069 assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json
332c7b8bf2feb635290b05788b61ead0b2cc813a assets/create/models/block/brass_belt_funnel_pull_retracted.json
094a5aedd53295aaa9b78deedf7899f9875dc5d8 assets/create/models/block/brass_belt_funnel_push_extended.json
44d2cf63398e5e4c39f43412a00d7f0213d8703c assets/create/models/block/brass_belt_funnel_push_powered_extended.json
07eb19291e5c6108e9e25f57f512747bc48352dd assets/create/models/block/brass_belt_funnel_push_powered_retracted.json
6ff63956c71363f198588aca3fd849ad4e0c8863 assets/create/models/block/brass_belt_funnel_push_retracted.json
3fac6b1da6a81fc44a1ffe1e13dc6cfe37c3b738 assets/create/models/block/brass_belt_funnel__extended.json
2d10825bfd94419d5dbb4e60187127c4a1ce1526 assets/create/models/block/brass_belt_funnel__powered_extended.json
5ff7e01c5b65eb210a054556068d75426b547d9b assets/create/models/block/brass_belt_funnel__powered_pulling.json
e981727fd71e32ea2ecb8e057dfe123f1b940101 assets/create/models/block/brass_belt_funnel__powered_pushing.json
bc23a91f300e46761bb14c597fad39c3d414e84d assets/create/models/block/brass_belt_funnel__powered_retracted.json
dfc6250e28e12ff193a45891978ec50c406fc0c2 assets/create/models/block/brass_belt_funnel__pulling.json
5409325494780afe32e6e30377314e2992ca4aa5 assets/create/models/block/brass_belt_funnel__pushing.json
97410a12b7c1461f88fb633f26ff566a0636b627 assets/create/models/block/brass_belt_funnel__retracted.json
0934933df6bfbb19a1b14cd0e3cab2c18d5a3ebc assets/create/models/block/brass_block.json
166a5c053a81e6aadc24509ed24dc144a7255969 assets/create/models/block/brass_casing.json
838e7ab4c0c9d89eacfa078daf64995e505db896 assets/create/models/block/brass_funnel.json

View file

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

View file

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

View file

@ -60,10 +60,10 @@
},
{
"when": {
"south": "false",
"up": "true",
"down": "false",
"north": "true"
"north": "true",
"up": "true",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lu_x"
@ -71,10 +71,10 @@
},
{
"when": {
"south": "true",
"up": "true",
"down": "false",
"north": "false"
"north": "false",
"up": "true",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ru_x"
@ -82,10 +82,10 @@
},
{
"when": {
"south": "false",
"up": "false",
"down": "true",
"north": "true"
"north": "true",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ld_x"
@ -93,10 +93,10 @@
},
{
"when": {
"south": "true",
"up": "false",
"down": "true",
"north": "false"
"north": "false",
"up": "false",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/rd_x"
@ -104,21 +104,21 @@
},
{
"when": {
"south": "false",
"up": "true",
"down": "true",
"north": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
}
},
{
"when": {
"south": "false",
"north": "false",
"up": "true",
"down": "false",
"north": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
}
},
{
"when": {
"down": "false",
"north": "false",
"up": "true",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
@ -126,10 +126,10 @@
},
{
"when": {
"south": "false",
"up": "false",
"down": "true",
"north": "false"
"north": "false",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_x"
@ -137,10 +137,10 @@
},
{
"when": {
"south": "true",
"up": "false",
"down": "false",
"north": "true"
"north": "true",
"up": "false",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lr_x"
@ -148,10 +148,10 @@
},
{
"when": {
"south": "false",
"up": "false",
"down": "false",
"north": "true"
"north": "true",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_x"
@ -159,10 +159,10 @@
},
{
"when": {
"south": "true",
"up": "false",
"down": "false",
"north": "false"
"north": "false",
"up": "false",
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lr_x"
@ -170,10 +170,10 @@
},
{
"when": {
"south": "false",
"up": "false",
"down": "false",
"north": "false"
"north": "false",
"up": "false",
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_x"
@ -181,10 +181,10 @@
},
{
"when": {
"south": "true",
"west": "true",
"east": "false",
"north": "false",
"east": "false"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lu_y"
@ -192,10 +192,10 @@
},
{
"when": {
"south": "true",
"west": "false",
"east": "true",
"north": "false",
"east": "true"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ru_y"
@ -203,10 +203,10 @@
},
{
"when": {
"south": "false",
"west": "true",
"east": "false",
"north": "true",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ld_y"
@ -214,10 +214,10 @@
},
{
"when": {
"south": "false",
"west": "false",
"east": "true",
"north": "true",
"east": "true"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/rd_y"
@ -225,10 +225,10 @@
},
{
"when": {
"south": "true",
"west": "false",
"east": "false",
"north": "true",
"east": "false"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_y"
@ -236,10 +236,10 @@
},
{
"when": {
"south": "true",
"west": "false",
"east": "false",
"north": "false",
"east": "false"
"south": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_y"
@ -247,10 +247,10 @@
},
{
"when": {
"south": "false",
"west": "false",
"east": "false",
"north": "true",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_y"
@ -258,10 +258,10 @@
},
{
"when": {
"south": "false",
"west": "true",
"east": "true",
"north": "false",
"east": "true"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_y"
@ -269,10 +269,10 @@
},
{
"when": {
"south": "false",
"west": "true",
"east": "false",
"north": "false",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_y"
@ -280,10 +280,10 @@
},
{
"when": {
"south": "false",
"west": "false",
"east": "true",
"north": "false",
"east": "true"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_y"
@ -291,10 +291,10 @@
},
{
"when": {
"south": "false",
"west": "false",
"east": "false",
"north": "false",
"east": "false"
"south": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_y"
@ -302,10 +302,10 @@
},
{
"when": {
"up": "true",
"down": "false",
"west": "false",
"east": "true"
"east": "true",
"down": "false",
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/lu_z"
@ -313,10 +313,10 @@
},
{
"when": {
"up": "true",
"down": "false",
"west": "true",
"east": "false"
"east": "false",
"down": "false",
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ru_z"
@ -324,10 +324,10 @@
},
{
"when": {
"up": "false",
"down": "true",
"west": "false",
"east": "true"
"east": "true",
"down": "true",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ld_z"
@ -335,10 +335,10 @@
},
{
"when": {
"up": "false",
"down": "true",
"west": "true",
"east": "false"
"east": "false",
"down": "true",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/rd_z"
@ -346,10 +346,10 @@
},
{
"when": {
"up": "true",
"west": "false",
"east": "false",
"down": "true",
"west": "false",
"east": "false"
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_z"
@ -357,10 +357,10 @@
},
{
"when": {
"up": "true",
"west": "false",
"east": "false",
"down": "false",
"west": "false",
"east": "false"
"up": "true"
},
"apply": {
"model": "create:block/fluid_pipe/ud_z"
@ -368,10 +368,10 @@
},
{
"when": {
"up": "false",
"west": "false",
"east": "false",
"down": "true",
"west": "false",
"east": "false"
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/ud_z"
@ -379,10 +379,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"west": "true",
"east": "true"
"east": "true",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_z"
@ -390,10 +390,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"west": "false",
"east": "true"
"east": "true",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_z"
@ -401,10 +401,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"west": "true",
"east": "false"
"east": "false",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/lr_z"
@ -412,10 +412,10 @@
},
{
"when": {
"up": "false",
"down": "false",
"west": "false",
"east": "false"
"east": "false",
"down": "false",
"up": "false"
},
"apply": {
"model": "create:block/fluid_pipe/none_z"

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -94,6 +94,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp
public float getAngularSpeed() {
float speed = (isWindmill() ? getGeneratedSpeed() : getSpeed()) * 3 / 10f;
if (getSpeed() == 0)
speed = 0;
if (world.isRemote) {
speed *= ServerSpeedProvider.get();
speed += clientAngleDiff / 3f;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -5,6 +5,8 @@ import java.util.function.Function;
import java.util.function.Predicate;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
import com.simibubi.create.foundation.config.AllConfigs;
@ -57,8 +59,16 @@ public class FunnelTileEntity extends SmartTileEntity {
if (FunnelBlock.getFunnelFacing(state) == Direction.UP && autoExtractor.hasInventory())
return Mode.HOPPER;
if (state.getBlock() instanceof BeltFunnelBlock) {
boolean pushing = state.get(BeltFunnelBlock.PUSHING);
return pushing ? Mode.PUSHING_TO_BELT : Mode.TAKING_FROM_BELT;
Shape shape = state.get(BeltFunnelBlock.SHAPE);
if (shape == Shape.PULLING)
return Mode.TAKING_FROM_BELT;
if (shape == Shape.PUSHING)
return Mode.PUSHING_TO_BELT;
BeltTileEntity belt = BeltHelper.getSegmentTE(world, pos.down());
if (belt != null)
return belt.getMovementFacing() == state.get(BeltFunnelBlock.HORIZONTAL_FACING) ? Mode.PUSHING_TO_BELT
: Mode.TAKING_FROM_BELT;
}
return Mode.COLLECT;
}
@ -140,9 +150,7 @@ public class FunnelTileEntity extends SmartTileEntity {
if (!inputBehaviour.canInsertFromSide(facing))
return;
int amountToExtract = invManipulation.getAmountFromFilter();
if (!filtering.isActive())
amountToExtract = 1;
int amountToExtract = getAmountToExtract();
ItemStack stack = invManipulation.extract(amountToExtract, s -> inputBehaviour.handleInsertion(s, facing, true)
.isEmpty());
if (stack.isEmpty())
@ -153,6 +161,15 @@ public class FunnelTileEntity extends SmartTileEntity {
startCooldown();
}
public int getAmountToExtract() {
if (!supportsAmountOnFilter())
return -1;
int amountToExtract = invManipulation.getAmountFromFilter();
if (!filtering.isActive())
amountToExtract = 1;
return amountToExtract;
}
private int startCooldown() {
return extractionCooldown = AllConfigs.SERVER.logistics.defaultExtractionTimer.get();
}
@ -194,12 +211,18 @@ public class FunnelTileEntity extends SmartTileEntity {
private boolean supportsAmountOnFilter() {
BlockState blockState = getBlockState();
boolean pushingToBelt = blockState.getBlock() instanceof HorizontalInteractionFunnelBlock
&& blockState.get(HorizontalInteractionFunnelBlock.PUSHING);
boolean beltFunnelsupportsAmount = false;
if (blockState.getBlock() instanceof BeltFunnelBlock) {
Shape shape = blockState.get(BeltFunnelBlock.SHAPE);
if (shape == Shape.PUSHING)
beltFunnelsupportsAmount = true;
else
beltFunnelsupportsAmount = BeltHelper.getSegmentTE(world, pos.down()) != null;
}
boolean hopper = FunnelBlock.getFunnelFacing(blockState) == Direction.UP && !world.getBlockState(pos.up())
.getMaterial()
.isReplaceable();
return pushingToBelt || hopper;
return beltFunnelsupportsAmount || hopper;
}
private boolean supportsDirectBeltInput(Direction side) {
@ -236,8 +259,26 @@ public class FunnelTileEntity extends SmartTileEntity {
}
public boolean hasFlap() {
return getBlockState().getBlock() instanceof BeltFunnelBlock
&& getBlockState().get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED;
BlockState blockState = getBlockState();
if (!(blockState.getBlock() instanceof BeltFunnelBlock))
return false;
return true;
}
public float getFlapOffset() {
BlockState blockState = getBlockState();
if (!(blockState.getBlock() instanceof BeltFunnelBlock))
return 0;
switch (blockState.get(BeltFunnelBlock.SHAPE)) {
default:
case RETRACTED:
return 0;
case EXTENDED:
return 8 / 16f;
case PULLING:
case PUSHING:
return -2 / 16f;
}
}
@Override

View file

@ -1,128 +0,0 @@
package com.simibubi.create.content.logistics.block.funnel;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.tterrag.registrate.util.entry.BlockEntry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.HorizontalBlock;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
public abstract class HorizontalInteractionFunnelBlock extends HorizontalBlock implements IWrenchable {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
public static final BooleanProperty PUSHING = BooleanProperty.create("pushing");
private BlockEntry<? extends FunnelBlock> parent;
public HorizontalInteractionFunnelBlock(BlockEntry<? extends FunnelBlock> parent, Properties p_i48377_1_) {
super(p_i48377_1_);
this.parent = parent;
BlockState defaultState = getDefaultState().with(PUSHING, true);
if (hasPoweredProperty())
defaultState = defaultState.with(POWERED, false);
setDefaultState(defaultState);
}
public abstract boolean hasPoweredProperty();
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return AllTileEntities.FUNNEL.create();
}
@Override
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
if (hasPoweredProperty())
p_206840_1_.add(POWERED);
super.fillStateContainer(p_206840_1_.add(HORIZONTAL_FACING, PUSHING));
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
BlockState stateForPlacement = super.getStateForPlacement(ctx);
if (hasPoweredProperty())
stateForPlacement = stateForPlacement.with(POWERED, ctx.getWorld()
.isBlockPowered(ctx.getPos()));
return stateForPlacement;
}
@Override
public void onReplaced(BlockState p_196243_1_, World p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_,
boolean p_196243_5_) {
if (p_196243_1_.hasTileEntity()
&& (p_196243_1_.getBlock() != p_196243_4_.getBlock() && !FunnelBlock.isFunnel(p_196243_4_)
|| !p_196243_4_.hasTileEntity())) {
p_196243_2_.removeTileEntity(p_196243_3_);
}
}
@Override
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
PlayerEntity player) {
return parent.asStack();
}
@Override
public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world,
BlockPos pos, BlockPos p_196271_6_) {
if (!canStillInteract(state, world, pos)) {
BlockState parentState = parent.getDefaultState();
if (state.has(POWERED) && state.get(POWERED))
parentState = parentState.with(POWERED, true);
return parentState.with(FunnelBlock.FACING, state.get(HORIZONTAL_FACING));
}
return state;
}
@Override
public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) {
return !world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING)
.getOpposite()))
.getShape(world, pos)
.isEmpty();
}
protected abstract boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos);
@Override
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) {
if (!hasPoweredProperty())
return;
if (worldIn.isRemote)
return;
boolean previouslyPowered = state.get(POWERED);
if (previouslyPowered != worldIn.isBlockPowered(pos))
worldIn.setBlockState(pos, state.cycle(POWERED), 2);
}
@Override
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
if (!context.getWorld().isRemote)
context.getWorld()
.setBlockState(context.getPos(), state.cycle(PUSHING));
return ActionResultType.SUCCESS;
}
}

View file

@ -19,6 +19,7 @@ import net.minecraft.util.Direction;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.ItemHandlerHelper;
public class FilteringBehaviour extends TileEntityBehaviour {
@ -142,9 +143,11 @@ public class FilteringBehaviour extends TileEntityBehaviour {
}
public void setFilter(ItemStack stack) {
boolean confirm = ItemHandlerHelper.canItemStacksStack(stack, filter);
filter = stack.copy();
callback.accept(filter);
count = (filter.getItem() instanceof FilterItem) ? 0 : Math.min(stack.getCount(), stack.getMaxStackSize());
count = !confirm ? 0
: (filter.getItem() instanceof FilterItem) ? 0 : Math.min(stack.getCount(), stack.getMaxStackSize());
forceClientState = true;
tileEntity.markDirty();

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB