From 4721f5128de208bee24990b4c08a567330baf0ee Mon Sep 17 00:00:00 2001 From: Ridanis Date: Wed, 3 Apr 2024 12:37:28 +0200 Subject: [PATCH] VoxelShapes + Worm --- .../mod/blocks/BlockAtomicReconstructor.java | 21 + .../mod/blocks/BlockBioReactor.java | 19 + .../mod/blocks/BlockBreaker.java | 21 + .../mod/blocks/BlockCrusher.java | 27 +- .../mod/blocks/BlockDropper.java | 21 + .../mod/blocks/BlockFarmer.java | 27 +- .../mod/blocks/BlockFeeder.java | 9 +- .../mod/blocks/BlockLongRangeBreaker.java | 35 +- .../mod/blocks/CrystalClusterBlock.java | 27 +- .../mod/blocks/VoxelShapes.java | 1546 ++++++++++++++++- .../mod/entity/RenderWorm.java | 2 +- .../models/block/lamp_controller.json | 272 ++- .../models/block/oil_generator.json | 91 +- .../actuallyadditions/textures/item/worm.png | Bin 3380 -> 625 bytes 14 files changed, 1743 insertions(+), 375 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 42a6ac420..1da643f16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -29,6 +29,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; @@ -39,6 +40,8 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; @@ -91,6 +94,24 @@ public class BlockAtomicReconstructor extends FullyDirectionalBlock.Container im return InteractionResult.CONSUME; } + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(FACING)) { + case UP: + return VoxelShapes.AtomicReconstructorShapes.SHAPE_U; + case DOWN: + return VoxelShapes.AtomicReconstructorShapes.SHAPE_D; + case EAST: + return VoxelShapes.AtomicReconstructorShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.AtomicReconstructorShapes.SHAPE_S; + case WEST: + return VoxelShapes.AtomicReconstructorShapes.SHAPE_W; + default: + return VoxelShapes.AtomicReconstructorShapes.SHAPE_N; + } + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBioReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBioReactor.java index b4f0f9b27..6ba36d5c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBioReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBioReactor.java @@ -16,15 +16,20 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; import javax.annotation.Nullable; +import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; + public class BlockBioReactor extends DirectionalBlock.Container { public BlockBioReactor() { @@ -47,4 +52,18 @@ public class BlockBioReactor extends DirectionalBlock.Container { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { return this.openGui(world, player, pos, TileEntityBioReactor.class); } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(HORIZONTAL_FACING)) { + case EAST: + return VoxelShapes.BioReactorShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.BioReactorShapes.SHAPE_S; + case WEST: + return VoxelShapes.BioReactorShapes.SHAPE_W; + default: + return VoxelShapes.BioReactorShapes.SHAPE_N; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index 73fd0a458..d8133a23a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -17,12 +17,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; import javax.annotation.Nullable; @@ -59,4 +62,22 @@ public class BlockBreaker extends FullyDirectionalBlock.Container { return this.openGui(world, player, pos, TileEntityBreaker.class); } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(FACING)) { + case UP: + return VoxelShapes.BlockBreakerShapes.SHAPE_U; + case DOWN: + return VoxelShapes.BlockBreakerShapes.SHAPE_D; + case EAST: + return VoxelShapes.BlockBreakerShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.BlockBreakerShapes.SHAPE_S; + case WEST: + return VoxelShapes.BlockBreakerShapes.SHAPE_W; + default: + return VoxelShapes.BlockBreakerShapes.SHAPE_N; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrusher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrusher.java index 0c1f761c5..77ac44258 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrusher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrusher.java @@ -103,18 +103,17 @@ public class BlockCrusher extends BlockContainerBase { : 0; } - // TODO (Rid): Remove Shape -// @Override -// public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { -// switch (state.getValue(HORIZONTAL_FACING)) { -// case EAST: -// return VoxelShapes.GrinderShapes.SHAPE_E; -// case SOUTH: -// return VoxelShapes.GrinderShapes.SHAPE_S; -// case WEST: -// return VoxelShapes.GrinderShapes.SHAPE_W; -// default: -// return VoxelShapes.GrinderShapes.SHAPE_N; -// } -// } + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(HORIZONTAL_FACING)) { + case EAST: + return VoxelShapes.GrinderShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.GrinderShapes.SHAPE_S; + case WEST: + return VoxelShapes.GrinderShapes.SHAPE_W; + default: + return VoxelShapes.GrinderShapes.SHAPE_N; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 0d01777d1..c852d2d7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -16,12 +16,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; import javax.annotation.Nullable; @@ -51,4 +54,22 @@ public class BlockDropper extends FullyDirectionalBlock.Container { return this.openGui(world, player, pos, TileEntityDropper.class); } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(FACING)) { + case UP: + return VoxelShapes.BlockBreakerShapes.SHAPE_U; + case DOWN: + return VoxelShapes.BlockBreakerShapes.SHAPE_D; + case EAST: + return VoxelShapes.BlockBreakerShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.BlockBreakerShapes.SHAPE_S; + case WEST: + return VoxelShapes.BlockBreakerShapes.SHAPE_W; + default: + return VoxelShapes.BlockBreakerShapes.SHAPE_N; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFarmer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFarmer.java index 5087eabf8..c7ea799a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFarmer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFarmer.java @@ -51,18 +51,17 @@ public class BlockFarmer extends DirectionalBlock.Container { return this.openGui(worldIn, player, pos, TileEntityFarmer.class); } - // TODO (Rid): Remove Shape -// @Override -// public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { -// switch (state.getValue(FACING)) { -// case EAST: -// return VoxelShapes.FarmerShapes.SHAPE_E; -// case SOUTH: -// return VoxelShapes.FarmerShapes.SHAPE_S; -// case WEST: -// return VoxelShapes.FarmerShapes.SHAPE_W; -// default: -// return VoxelShapes.FarmerShapes.SHAPE_N; -// } -// } + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(FACING)) { + case EAST: + return VoxelShapes.FarmerShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.FarmerShapes.SHAPE_S; + case WEST: + return VoxelShapes.FarmerShapes.SHAPE_W; + default: + return VoxelShapes.FarmerShapes.SHAPE_N; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index 7129f5940..9d98e8e4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -51,9 +51,8 @@ public class BlockFeeder extends BlockContainerBase { return this.openGui(worldIn, player, pos, TileEntityFeeder.class); } - // TODO (Rid): Remove Shape -// @Override -// public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { -// return VoxelShapes.FEEDER_SHAPE; -// } + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + return VoxelShapes.FEEDER_SHAPE; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLongRangeBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLongRangeBreaker.java index d0d8f4d02..80753002b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLongRangeBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLongRangeBreaker.java @@ -55,22 +55,21 @@ public class BlockLongRangeBreaker extends FullyDirectionalBlock.Container { return this.openGui(world, player, pos, TileEntityLongRangeBreaker.class); } - // TODO (Rid) - Remove Shape -// @Override -// public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { -// switch (state.getValue(FACING)) { -// case UP: -// return VoxelShapes.DirectionalBlockBreakerShapes.SHAPE_U; -// case DOWN: -// return VoxelShapes.DirectionalBlockBreakerShapes.SHAPE_D; -// case EAST: -// return VoxelShapes.DirectionalBlockBreakerShapes.SHAPE_E; -// case SOUTH: -// return VoxelShapes.DirectionalBlockBreakerShapes.SHAPE_S; -// case WEST: -// return VoxelShapes.DirectionalBlockBreakerShapes.SHAPE_W; -// default: -// return VoxelShapes.DirectionalBlockBreakerShapes.SHAPE_N; -// } -// } + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + switch (state.getValue(FACING)) { + case UP: + return VoxelShapes.BlockBreakerShapes.SHAPE_U; + case DOWN: + return VoxelShapes.BlockBreakerShapes.SHAPE_D; + case EAST: + return VoxelShapes.BlockBreakerShapes.SHAPE_E; + case SOUTH: + return VoxelShapes.BlockBreakerShapes.SHAPE_S; + case WEST: + return VoxelShapes.BlockBreakerShapes.SHAPE_W; + default: + return VoxelShapes.BlockBreakerShapes.SHAPE_N; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/CrystalClusterBlock.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/CrystalClusterBlock.java index 6345c6564..ec617317d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/CrystalClusterBlock.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/CrystalClusterBlock.java @@ -31,18 +31,19 @@ import java.util.stream.Stream; public class CrystalClusterBlock extends FullyDirectionalBlock { public static final DirectionProperty FACING = BlockStateProperties.FACING; - public static final VoxelShape CRYSTAL_SHAPE = Stream.of( - Block.box(5, 4, 5, 10, 19, 10), Block.box(4, 0, 4, 11, 5, 11), - Block.box(3, 0, 3, 5, 4, 5), Block.box(10, 0, 3, 12, 2, 5), - Block.box(12, 0, 4, 13, 1, 5), Block.box(11, 0, 5, 12, 1, 6), - Block.box(10, 0, 10, 12, 3, 12), Block.box(3, 0, 10, 5, 1, 12), - Block.box(9, 0, 3, 10, 3, 4), Block.box(8, 0, 2, 11, 1, 4), - Block.box(4, 0, 2, 5, 2, 3), Block.box(5, 0, 3, 7, 1, 4), - Block.box(2, 0, 4, 4, 1, 6), Block.box(3, 0, 5, 4, 3, 6.5), - Block.box(3, 0, 9, 4, 2, 10), Block.box(2, 0, 8, 4, 1, 10), - Block.box(5, 0, 11, 7, 2, 13), Block.box(7, 0, 11, 11, 1, 13), - Block.box(10, 0, 9, 13, 1, 11), Block.box(11, 0, 7, 12, 3, 9) - ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR) ).get(); + // TODO: Remove - Duplicate +// public static final VoxelShape CRYSTAL_SHAPE = Stream.of( +// Block.box(5, 4, 5, 10, 19, 10), Block.box(4, 0, 4, 11, 5, 11), +// Block.box(3, 0, 3, 5, 4, 5), Block.box(10, 0, 3, 12, 2, 5), +// Block.box(12, 0, 4, 13, 1, 5), Block.box(11, 0, 5, 12, 1, 6), +// Block.box(10, 0, 10, 12, 3, 12), Block.box(3, 0, 10, 5, 1, 12), +// Block.box(9, 0, 3, 10, 3, 4), Block.box(8, 0, 2, 11, 1, 4), +// Block.box(4, 0, 2, 5, 2, 3), Block.box(5, 0, 3, 7, 1, 4), +// Block.box(2, 0, 4, 4, 1, 6), Block.box(3, 0, 5, 4, 3, 6.5), +// Block.box(3, 0, 9, 4, 2, 10), Block.box(2, 0, 8, 4, 1, 10), +// Block.box(5, 0, 11, 7, 2, 13), Block.box(7, 0, 11, 11, 1, 13), +// Block.box(10, 0, 9, 13, 1, 11), Block.box(11, 0, 7, 12, 3, 9) +// ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR) ).get(); public CrystalClusterBlock(Crystals crystal) { super(Block.Properties.of() @@ -60,6 +61,6 @@ public class CrystalClusterBlock extends FullyDirectionalBlock { @Override public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { - return CRYSTAL_SHAPE; + return VoxelShapes.CRYSTAL_CLUSTER_SHAPE; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/VoxelShapes.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/VoxelShapes.java index d7de0032b..07e53bd01 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/VoxelShapes.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/VoxelShapes.java @@ -5,6 +5,7 @@ import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import java.awt.*; import java.util.Optional; import java.util.stream.Stream; @@ -33,7 +34,56 @@ public class VoxelShapes { Block.box(0.5, -0.01, 12.5, 3.5, 1.99, 15.5), Block.box(12.5, -0.01, 12.5, 15.5, 1.99, 15.5) ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape CRYSTAL_CLUSTER_SHAPE = Stream.of(Block.box(5, 4, 5, 10, 19, 10), Block.box(4, 0, 4, 11, 5, 11), Block.box(3, 0, 3, 5, 4, 5), Block.box(10, 0, 3, 12, 2, 5), Block.box(12, 0, 4, 13, 1, 5), Block.box(11, 0, 5, 12, 1, 6), Block.box(10, 0, 10, 12, 3, 12), Block.box(3, 0, 10, 5, 1, 12), Block.box(9, 0, 3, 10, 3, 4), Block.box(8, 0, 2, 11, 1, 4), Block.box(4, 0, 2, 5, 2, 3), Block.box(5, 0, 3, 7, 1, 4), Block.box(2, 0, 4, 4, 1, 6), Block.box(3, 0, 5, 4, 3, 6.5), Block.box(3, 0, 9, 4, 2, 10), Block.box(2, 0, 8, 4, 1, 10), Block.box(5, 0, 11, 7, 2, 13), Block.box(7, 0, 11, 11, 1, 13), Block.box(10, 0, 9, 13, 1, 11), Block.box(11, 0, 7, 12, 3, 9)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape CRYSTAL_CLUSTER_SHAPE = Stream.of( + Block.box(4, 6, 4, 8, 10, 8), + Block.box(6, 2, 6, 10, 14, 10), + Block.box(4, 0, 4, 14, 2, 14), + Block.box(2, 0, 2, 8, 6, 8), + Block.box(8, 2, 8, 12, 8, 12), + Block.box(8, 0, 2, 12, 4, 6) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape PHANTOM_FACE = Stream.of( + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(0, 4, 4, 1, 12, 12), + Block.box(15, 4, 4, 16, 12, 12), + Block.box(4, 0, 4, 12, 1, 12), + Block.box(4, 15, 4, 12, 16, 12), + Block.box(4, 4, 15, 12, 12, 16), + Block.box(4, 4, 0, 12, 12, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape PHANTOM_BREAKER = Stream.of( + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(5, 5, 0, 11, 11, 1), + Block.box(15, 5, 5, 16, 11, 11), + Block.box(5, 15, 5, 11, 16, 11), + Block.box(5, 5, 15, 11, 11, 16), + Block.box(0, 5, 5, 1, 11, 11), + Block.box(5, 0, 5, 11, 1, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape DISPLAY_STAND_SHAPE = Stream.of( Block.box(1, 7, 0, 15, 8, 1), Block.box(0, 0, 0, 16, 1, 16), @@ -207,10 +257,38 @@ public class VoxelShapes { ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape ITEM_VIEWER_SHAPE = Stream.of(Block.box(15, 0, 1, 16, 1, 15), Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape HOPPING_ITEM_VIEWER_SHAPE = Stream.of(Block.box(0, 10, 0, 16, 11, 16), Block.box(1, 11, 1, 2, 15, 15), Block.box(14, 11, 1, 15, 15, 15), Block.box(2, 11, 1, 14, 15, 2), Block.box(2, 11, 14, 14, 15, 15), Block.box(4, 4, 4, 12, 10, 12), Block.box(6, 0, 6, 10, 4, 10), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 11, 0, 1, 15, 1), Block.box(0, 11, 15, 1, 15, 16), Block.box(15, 11, 15, 16, 15, 16), Block.box(15, 11, 0, 16, 15, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape BOOSTER_SHAPE = Stream.of(Block.box(5, 12, 12, 11, 13, 13), Block.box(6, 0, 6, 10, 16, 10), Block.box(5, 2, 5, 11, 3, 11), Block.box(5, 4, 12, 11, 5, 13), Block.box(5, 6, 12, 11, 7, 13), Block.box(5, 8, 12, 11, 9, 13), Block.box(5, 10, 12, 11, 11, 13), Block.box(5, 4, 3, 11, 5, 4), Block.box(5, 6, 3, 11, 7, 4), Block.box(5, 8, 3, 11, 9, 4), Block.box(5, 10, 3, 11, 11, 4), Block.box(5, 12, 3, 11, 13, 4), Block.box(3, 4, 5, 4, 5, 11), Block.box(3, 6, 5, 4, 7, 11), Block.box(3, 8, 5, 4, 9, 11), Block.box(3, 10, 5, 4, 11, 11), Block.box(3, 12, 5, 4, 13, 11), Block.box(12, 4, 5, 13, 5, 11), Block.box(12, 6, 5, 13, 7, 11), Block.box(12, 8, 5, 13, 9, 11), Block.box(12, 10, 5, 13, 11, 11), Block.box(12, 12, 5, 13, 13, 11), Block.box(5, 14, 5, 11, 15, 11), Block.box(4, 4, 11, 5, 5, 12), Block.box(4, 6, 11, 5, 7, 12), Block.box(4, 8, 11, 5, 9, 12), Block.box(4, 10, 11, 5, 11, 12), Block.box(4, 12, 11, 5, 13, 12), Block.box(4, 4, 4, 5, 5, 5), Block.box(4, 6, 4, 5, 7, 5), Block.box(4, 8, 4, 5, 9, 5), Block.box(4, 10, 4, 5, 11, 5), Block.box(4, 12, 4, 5, 13, 5), Block.box(11, 4, 4, 12, 5, 5), Block.box(11, 6, 4, 12, 7, 5), Block.box(11, 8, 4, 12, 9, 5), Block.box(11, 10, 4, 12, 11, 5), Block.box(11, 12, 4, 12, 13, 5), Block.box(11, 4, 11, 12, 5, 12), Block.box(11, 6, 11, 12, 7, 12), Block.box(11, 8, 11, 12, 9, 12), Block.box(11, 10, 11, 12, 11, 12), Block.box(11, 12, 11, 12, 13, 12)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape BOOSTER_SHAPE = Stream.of( + Block.box(6, 3, 6, 10, 16, 10), + Block.box(5, 14, 5, 11, 15, 11), + Block.box(5, 0, 5, 11, 3, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape PLAYER_INTERFACE_SHAPE = Stream.of(Block.box(15, 0, 1, 16, 1, 15), Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape COLLECTOR_SHAPE = Stream.of(Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(1, 1, 4, 2, 4, 12), Block.box(14, 1, 4, 15, 4, 12), Block.box(4, 1, 1, 12, 4, 2), Block.box(4, 1, 14, 12, 4, 15), Block.box(4, 14, 12, 12, 15, 14), Block.box(1, 12, 4, 2, 15, 12), Block.box(14, 12, 4, 15, 15, 12), Block.box(4, 12, 1, 12, 15, 2), Block.box(4, 12, 14, 12, 15, 15), Block.box(4, 14, 2, 12, 15, 4), Block.box(1, 1, 12, 2, 15, 14), Block.box(14, 1, 2, 15, 15, 4), Block.box(1, 1, 1, 4, 15, 2), Block.box(12, 1, 14, 15, 15, 15), Block.box(12, 14, 2, 14, 15, 14), Block.box(1, 1, 2, 2, 15, 4), Block.box(14, 1, 12, 15, 15, 14), Block.box(12, 1, 1, 15, 15, 2), Block.box(1, 1, 14, 4, 15, 15), Block.box(2, 14, 2, 4, 15, 14), Block.box(2, 2, 2, 14, 14, 14), Block.box(1, 0, 1, 15, 1, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SUPPRESSOR_SHAPE = Stream.of(Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(1, 14, 1, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(9, 13, 9, 13, 16, 13), Block.box(9, 2, 9, 13, 3, 13), Block.box(3, 13, 9, 7, 16, 13), Block.box(3, 2, 9, 7, 3, 13), Block.box(9, 13, 3, 13, 16, 7), Block.box(9, 2, 3, 13, 3, 7), Block.box(3, 13, 3, 7, 16, 7), Block.box(3, 2, 3, 7, 3, 7), Block.box(4, 3, 10, 6, 13, 12), Block.box(10, 3, 10, 12, 13, 12), Block.box(10, 3, 4, 12, 13, 6), Block.box(4, 3, 4, 6, 13, 6)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SUPPRESSOR_SHAPE = Stream.of( + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(1, 14, 1, 15, 15, 15), + Block.box(1, 0, 1, 15, 2, 15), + Block.box(9, 2, 3, 13, 14, 7), + Block.box(9, 15, 3, 13, 16, 7), + Block.box(3, 15, 3, 7, 16, 7), + Block.box(9, 2, 9, 13, 14, 13), + Block.box(9, 15, 9, 13, 16, 13), + Block.box(3, 2, 9, 7, 14, 13), + Block.box(3, 15, 9, 7, 16, 13), + Block.box(3, 2, 3, 7, 14, 7) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + // TODO: Remove? static final VoxelShape RELAY_SHAPE = Stream.of(Block.box(6, 4, 6, 7, 6, 7), Block.box(1, 0, 1, 15, 1, 15), Block.box(4, 2, 4, 12, 4, 12), Block.box(9, 4, 9, 10, 6, 10), Block.box(6, 4, 9, 7, 6, 10), Block.box(3, 1, 12, 4, 5, 13), Block.box(12, 1, 12, 13, 5, 13), Block.box(3, 1, 3, 4, 5, 4), Block.box(12, 1, 3, 13, 5, 4), Block.box(3, 4, 4, 4, 5, 12), Block.box(3, 1, 4, 4, 2, 12), Block.box(12, 4, 4, 13, 5, 12), Block.box(12, 1, 4, 13, 2, 12), Block.box(4, 4, 12, 12, 5, 13), Block.box(4, 4, 3, 12, 5, 4), Block.box(4, 1, 12, 12, 2, 13), Block.box(4, 1, 3, 12, 2, 4), Block.box(9, 4, 6, 10, 6, 7), Block.box(7, 4, 7, 9, 6, 9), Block.box(7, 6, 7, 9, 10, 9), Block.box(6.5, 5, 7, 7, 6, 9), Block.box(6.5, 7, 7, 7, 7.5, 9), Block.box(6.5, 9, 7, 7, 9.5, 9), Block.box(9, 5, 7, 9.5, 6, 9), Block.box(9, 7, 7, 9.5, 7.5, 9), Block.box(9, 9, 7, 9.5, 9.5, 9), Block.box(7, 5, 6.5, 9, 6, 7), Block.box(7, 7, 6.5, 9, 7.5, 7), Block.box(7, 9, 6.5, 9, 9.5, 7), Block.box(7, 5, 9, 9, 6, 9.5), Block.box(7, 7, 9, 9, 7.5, 9.5), Block.box(7, 9, 9, 9, 9.5, 9.5)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final class CoalGeneratorShapes { @@ -343,35 +421,258 @@ public class VoxelShapes { ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } - // TODO (Rid): Add Shape static class BlockBreakerShapes { - static final VoxelShape SHAPE_U = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(0, 1, 0, 1, 15, 1), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 3, 9, 16, 13, 13), Block.box(15, 3, 3, 16, 13, 7), Block.box(0, 3, 9, 1, 13, 13), Block.box(0, 3, 3, 1, 13, 7), Block.box(5, 15, 5, 11, 16, 11), Block.box(3, 15, 6, 5, 16, 10), Block.box(11, 15, 6, 13, 16, 10)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_D = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(15, 1, 15, 16, 15, 16), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(15, 3, 3, 16, 13, 7), Block.box(15, 3, 9, 16, 13, 13), Block.box(0, 3, 3, 1, 13, 7), Block.box(0, 3, 9, 1, 13, 13), Block.box(5, 0, 5, 11, 1, 11), Block.box(3, 0, 6, 5, 1, 10), Block.box(11, 0, 6, 13, 1, 10)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_N = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(15, 9, 3, 16, 13, 13), Block.box(15, 3, 3, 16, 7, 13), Block.box(0, 9, 3, 1, 13, 13), Block.box(0, 3, 3, 1, 7, 13), Block.box(5, 5, 0, 11, 11, 1), Block.box(3, 6, 0, 5, 10, 1), Block.box(11, 6, 0, 13, 10, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(15, 15, 0, 16, 16, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 0, 0, 15, 1, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(3, 9, 15, 13, 13, 16), Block.box(3, 3, 15, 13, 7, 16), Block.box(3, 9, 0, 13, 13, 1), Block.box(3, 3, 0, 13, 7, 1), Block.box(15, 5, 5, 16, 11, 11), Block.box(15, 6, 3, 16, 10, 5), Block.box(15, 6, 11, 16, 10, 13)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 0, 0, 16, 1, 1), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(0, 9, 3, 1, 13, 13), Block.box(0, 3, 3, 1, 7, 13), Block.box(15, 9, 3, 16, 13, 13), Block.box(15, 3, 3, 16, 7, 13), Block.box(5, 5, 15, 11, 11, 16), Block.box(11, 6, 15, 13, 10, 16), Block.box(3, 6, 15, 5, 10, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 0, 1, 16, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(3, 9, 0, 13, 13, 1), Block.box(3, 3, 0, 13, 7, 1), Block.box(3, 9, 15, 13, 13, 16), Block.box(3, 3, 15, 13, 7, 16), Block.box(0, 5, 5, 1, 11, 11), Block.box(0, 6, 11, 1, 10, 13), Block.box(0, 6, 3, 1, 10, 5)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_U = Stream.of( + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(5, 15, 5, 11, 16, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_D = Stream.of( + Block.box(15, 0, 1, 16, 1, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(5, 0, 5, 11, 1, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(5, 5, 0, 11, 11, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(15, 5, 5, 16, 11, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(5, 5, 15, 11, 11, 16) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 1, 1, 15, 15, 15), + Block.box(0, 5, 5, 1, 11, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + } + + static class AtomicReconstructorShapes { + static final VoxelShape SHAPE_U = Stream.of( + Block.box(0, 0, 15, 1, 16, 16), + Block.box(15, 0, 15, 16, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 0, 0, 16, 16, 1), + Block.box(0, 0, 0, 1, 16, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(1, 1, 14, 15, 15, 15), + Block.box(1, 1, 1, 15, 15, 2), + Block.box(6, 14, 10, 10, 15, 14), + Block.box(6, 14, 2, 10, 15, 6), + Block.box(2, 14, 2, 6, 15, 14), + Block.box(10, 14, 2, 14, 15, 14), + Block.box(14, 1, 2, 15, 15, 14), + Block.box(1, 1, 2, 2, 15, 14), + Block.box(2, 1, 2, 14, 2, 14), + Block.box(2, 13, 2, 14, 14, 14) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_D = Stream.of( + Block.box(0, 0, 15, 1, 16, 16), + Block.box(15, 0, 15, 16, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 16, 1), + Block.box(0, 0, 0, 1, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(1, 1, 14, 15, 15, 15), + Block.box(1, 1, 1, 15, 15, 2), + Block.box(6, 1, 10, 10, 2, 14), + Block.box(6, 1, 2, 10, 2, 6), + Block.box(2, 1, 2, 6, 2, 14), + Block.box(10, 1, 2, 14, 2, 14), + Block.box(14, 1, 2, 15, 15, 14), + Block.box(1, 1, 2, 2, 15, 14), + Block.box(2, 14, 2, 14, 15, 14), + Block.box(2, 2, 2, 14, 3, 14) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(1, 14, 1, 15, 15, 15), + Block.box(1, 1, 1, 15, 2, 15), + Block.box(6, 10, 1, 10, 14, 2), + Block.box(6, 2, 1, 10, 6, 2), + Block.box(2, 2, 1, 6, 14, 2), + Block.box(10, 2, 1, 14, 14, 2), + Block.box(14, 2, 1, 15, 14, 15), + Block.box(1, 2, 1, 2, 14, 15), + Block.box(2, 2, 14, 14, 14, 15), + Block.box(2, 2, 2, 14, 14, 3) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(1, 14, 1, 15, 15, 15), + Block.box(1, 1, 1, 15, 2, 15), + Block.box(14, 10, 6, 15, 14, 10), + Block.box(14, 2, 6, 15, 6, 10), + Block.box(14, 2, 2, 15, 14, 6), + Block.box(14, 2, 10, 15, 14, 14), + Block.box(1, 2, 14, 15, 14, 15), + Block.box(1, 2, 1, 15, 14, 2), + Block.box(1, 2, 2, 2, 14, 14), + Block.box(13, 2, 2, 14, 14, 14) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(1, 14, 1, 15, 15, 15), + Block.box(1, 1, 1, 15, 2, 15), + Block.box(6, 10, 14, 10, 14, 15), + Block.box(6, 2, 14, 10, 6, 15), + Block.box(10, 2, 14, 14, 14, 15), + Block.box(2, 2, 14, 6, 14, 15), + Block.box(1, 2, 1, 2, 14, 15), + Block.box(14, 2, 1, 15, 14, 15), + Block.box(2, 2, 1, 14, 14, 2), + Block.box(2, 2, 13, 14, 14, 14) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(1, 14, 1, 15, 15, 15), + Block.box(1, 1, 1, 15, 2, 15), + Block.box(1, 10, 6, 2, 14, 10), + Block.box(1, 2, 6, 2, 6, 10), + Block.box(1, 2, 10, 2, 14, 14), + Block.box(1, 2, 2, 2, 14, 6), + Block.box(1, 2, 1, 15, 14, 2), + Block.box(1, 2, 14, 15, 14, 15), + Block.box(14, 2, 2, 15, 14, 14), + Block.box(2, 2, 2, 3, 14, 14) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static class FarmerShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(11, 14, 4, 12, 15, 5), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(4, 11, 4, 12, 12, 12), Block.box(4, 14, 4, 5, 15, 5), Block.box(3, 12, 5, 4, 14, 11), Block.box(12, 12, 5, 13, 14, 11), Block.box(5, 12, 3, 11, 14, 4), Block.box(5, 12, 12, 11, 14, 13), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(2, 14, 2, 4, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(4, 14, 12, 12, 15, 14), Block.box(12, 14, 2, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(1, 0, 2, 2, 15, 14), Block.box(14, 0, 2, 15, 15, 14), Block.box(1, 0, 1, 5, 15, 2), Block.box(5, 5, 2, 11, 11, 3), Block.box(5, 0, 1, 11, 5, 2), Block.box(5, 11, 1, 11, 15, 2), Block.box(11, 0, 1, 15, 15, 2), Block.box(1, 0, 14, 15, 15, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(11, 14, 11, 12, 15, 12), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(4, 11, 4, 12, 12, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(5, 12, 3, 11, 14, 4), Block.box(5, 12, 12, 11, 14, 13), Block.box(12, 12, 5, 13, 14, 11), Block.box(3, 12, 5, 4, 14, 11), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 4, 4, 15, 12), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(2, 0, 1, 14, 15, 2), Block.box(2, 0, 14, 14, 15, 15), Block.box(14, 0, 1, 15, 15, 5), Block.box(13, 5, 5, 14, 11, 11), Block.box(14, 0, 5, 15, 5, 11), Block.box(14, 11, 5, 15, 15, 11), Block.box(14, 0, 11, 15, 15, 15), Block.box(1, 0, 1, 2, 15, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(4, 14, 11, 5, 15, 12), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(4, 11, 4, 12, 12, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(12, 12, 5, 13, 14, 11), Block.box(3, 12, 5, 4, 14, 11), Block.box(5, 12, 12, 11, 14, 13), Block.box(5, 12, 3, 11, 14, 4), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(12, 14, 2, 14, 15, 14), Block.box(4, 14, 12, 12, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(2, 14, 2, 4, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(14, 0, 2, 15, 15, 14), Block.box(1, 0, 2, 2, 15, 14), Block.box(11, 0, 14, 15, 15, 15), Block.box(5, 5, 13, 11, 11, 14), Block.box(5, 0, 14, 11, 5, 15), Block.box(5, 11, 14, 11, 15, 15), Block.box(1, 0, 14, 5, 15, 15), Block.box(1, 0, 1, 15, 15, 2)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(4, 14, 4, 5, 15, 5), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(4, 11, 4, 12, 12, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(5, 12, 12, 11, 14, 13), Block.box(5, 12, 3, 11, 14, 4), Block.box(3, 12, 5, 4, 14, 11), Block.box(12, 12, 5, 13, 14, 11), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 14, 4, 4, 15, 12), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(2, 0, 2, 14, 1, 14), Block.box(2, 0, 14, 14, 15, 15), Block.box(2, 0, 1, 14, 15, 2), Block.box(1, 0, 11, 2, 15, 15), Block.box(2, 5, 5, 3, 11, 11), Block.box(1, 0, 5, 2, 5, 11), Block.box(1, 11, 5, 2, 15, 11), Block.box(1, 0, 1, 2, 15, 5), Block.box(14, 0, 1, 15, 15, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - } - // TODO (Rid): Fix Shape - static class FluidCollectorShapes { - static final VoxelShape SHAPE_U = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(0, 1, 0, 1, 15, 1), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 3, 6, 16, 13, 10), Block.box(0, 3, 6, 1, 13, 10), Block.box(5, 15, 5, 11, 16, 11), Block.box(3, 15, 6, 5, 16, 10), Block.box(11, 15, 6, 13, 16, 10), Block.box(6, 15, 11, 10, 16, 13), Block.box(6, 15, 3, 10, 16, 5)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_D = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(15, 1, 15, 16, 15, 16), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(15, 3, 6, 16, 13, 10), Block.box(0, 3, 6, 1, 13, 10), Block.box(5, 0, 5, 11, 1, 11), Block.box(3, 0, 6, 5, 1, 10), Block.box(11, 0, 6, 13, 1, 10), Block.box(6, 0, 3, 10, 1, 5), Block.box(6, 0, 11, 10, 1, 13)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_N = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(15, 6, 3, 16, 10, 13), Block.box(0, 6, 3, 1, 10, 13), Block.box(5, 5, 0, 11, 11, 1), Block.box(3, 6, 0, 5, 10, 1), Block.box(11, 6, 0, 13, 10, 1), Block.box(6, 11, 0, 10, 13, 1), Block.box(6, 3, 0, 10, 5, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(15, 15, 0, 16, 16, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 0, 0, 15, 1, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(3, 6, 15, 13, 10, 16), Block.box(3, 6, 0, 13, 10, 1), Block.box(15, 5, 5, 16, 11, 11), Block.box(15, 6, 3, 16, 10, 5), Block.box(15, 6, 11, 16, 10, 13), Block.box(15, 11, 6, 16, 13, 10), Block.box(15, 3, 6, 16, 5, 10)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 0, 0, 16, 1, 1), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(0, 6, 3, 1, 10, 13), Block.box(15, 6, 3, 16, 10, 13), Block.box(5, 5, 15, 11, 11, 16), Block.box(11, 6, 15, 13, 10, 16), Block.box(3, 6, 15, 5, 10, 16), Block.box(6, 11, 15, 10, 13, 16), Block.box(6, 3, 15, 10, 5, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(1, 1, 1, 15, 15, 15), Block.box(0, 15, 0, 1, 16, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(3, 6, 0, 13, 10, 1), Block.box(3, 6, 15, 13, 10, 16), Block.box(0, 5, 5, 1, 11, 11), Block.box(0, 6, 11, 1, 10, 13), Block.box(0, 6, 3, 1, 10, 5), Block.box(0, 11, 6, 1, 13, 10), Block.box(0, 3, 6, 1, 5, 10)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - } - - static class FurnaceDoubleShapes { static final VoxelShape SHAPE_N = Stream.of( - Block.box(0, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), @@ -380,18 +681,346 @@ public class VoxelShapes { Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), + Block.box(5, 13, 5, 11, 14, 11), + Block.box(2, 14, 2, 5, 15, 14), + Block.box(5, 14, 2, 11, 15, 5), + Block.box(5, 14, 11, 11, 15, 14), + Block.box(11, 14, 2, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 1, 5, 15, 2), + Block.box(5, 5, 2, 11, 11, 3), + Block.box(5, 0, 1, 11, 5, 2), + Block.box(5, 11, 1, 11, 15, 2), + Block.box(11, 0, 1, 15, 15, 2), + Block.box(1, 0, 14, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(5, 13, 5, 11, 14, 11), + Block.box(2, 14, 2, 14, 15, 5), + Block.box(11, 14, 5, 14, 15, 11), + Block.box(2, 14, 5, 5, 15, 11), + Block.box(2, 14, 11, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(14, 0, 1, 15, 15, 5), + Block.box(13, 5, 5, 14, 11, 11), + Block.box(14, 0, 5, 15, 5, 11), + Block.box(14, 11, 5, 15, 15, 11), + Block.box(14, 0, 11, 15, 15, 15), + Block.box(1, 0, 1, 2, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(5, 13, 5, 11, 14, 11), + Block.box(11, 14, 2, 14, 15, 14), + Block.box(5, 14, 11, 11, 15, 14), + Block.box(5, 14, 2, 11, 15, 5), + Block.box(2, 14, 2, 5, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(11, 0, 14, 15, 15, 15), + Block.box(5, 5, 13, 11, 11, 14), + Block.box(5, 0, 14, 11, 5, 15), + Block.box(5, 11, 14, 11, 15, 15), + Block.box(1, 0, 14, 5, 15, 15), + Block.box(1, 0, 1, 15, 15, 2) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(5, 13, 5, 11, 14, 11), + Block.box(2, 14, 11, 14, 15, 14), + Block.box(2, 14, 5, 5, 15, 11), + Block.box(11, 14, 5, 14, 15, 11), + Block.box(2, 14, 2, 14, 15, 5), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(1, 0, 11, 2, 15, 15), + Block.box(2, 5, 5, 3, 11, 11), + Block.box(1, 0, 5, 2, 5, 11), + Block.box(1, 11, 5, 2, 15, 11), + Block.box(1, 0, 1, 2, 15, 5), + Block.box(14, 0, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + } + + static class BioReactorShapes { + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 2, 5, 15, 14), + Block.box(5, 14, 2, 11, 15, 5), + Block.box(5, 14, 11, 11, 15, 14), + Block.box(11, 14, 2, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(1, 0, 1, 15, 15, 2) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 2, 14, 15, 5), + Block.box(11, 14, 5, 14, 15, 11), + Block.box(2, 14, 5, 5, 15, 11), + Block.box(2, 14, 11, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(14, 0, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(11, 14, 2, 14, 15, 14), + Block.box(5, 14, 11, 11, 15, 14), + Block.box(5, 14, 2, 11, 15, 5), + Block.box(2, 14, 2, 5, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(1, 0, 14, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 11, 14, 15, 14), + Block.box(2, 14, 5, 5, 15, 11), + Block.box(11, 14, 5, 14, 15, 11), + Block.box(2, 14, 2, 14, 15, 5), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(1, 0, 1, 2, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + } + + static class FluidCollectorShapes { + static final VoxelShape SHAPE_U = Stream.of( + Block.box(1, 1, 1, 15, 14, 15), + Block.box(1, 14, 1, 6, 15, 15), + Block.box(10, 14, 1, 15, 15, 15), + Block.box(6, 14, 10, 10, 15, 15), + Block.box(6, 14, 1, 10, 15, 6), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(15, 15, 1, 16, 16, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_D = Stream.of( + Block.box(1, 2, 1, 15, 15, 15), + Block.box(1, 1, 1, 6, 2, 15), + Block.box(10, 1, 1, 15, 2, 15), + Block.box(6, 1, 10, 10, 2, 15), + Block.box(6, 1, 1, 10, 2, 6), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(1, 1, 2, 15, 15, 15), + Block.box(1, 1, 1, 6, 15, 2), + Block.box(10, 1, 1, 15, 15, 2), + Block.box(6, 10, 1, 10, 15, 2), + Block.box(6, 1, 1, 10, 6, 2), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(1, 1, 1, 14, 15, 15), + Block.box(14, 1, 1, 15, 15, 6), + Block.box(14, 1, 10, 15, 15, 15), + Block.box(14, 10, 6, 15, 15, 10), + Block.box(14, 1, 6, 15, 6, 10), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(1, 1, 1, 15, 15, 14), + Block.box(10, 1, 14, 15, 15, 15), + Block.box(1, 1, 14, 6, 15, 15), + Block.box(6, 10, 14, 10, 15, 15), + Block.box(6, 1, 14, 10, 6, 15), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(2, 1, 1, 15, 15, 15), + Block.box(1, 1, 10, 2, 15, 15), + Block.box(1, 1, 1, 2, 15, 6), + Block.box(1, 10, 6, 2, 15, 10), + Block.box(1, 1, 6, 2, 6, 10), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + } + + static class FurnaceDoubleShapes { + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 0, 0, 16, 1, 16), Block.box(1, 1, 2, 2, 15, 14), Block.box(14, 1, 2, 15, 15, 14), Block.box(1, 1, 14, 15, 15, 15), + Block.box(2, 14, 2, 14, 15, 14), Block.box(4, 7, 1, 12, 15, 2), Block.box(4, 1, 1, 12, 4, 2), Block.box(1, 1, 1, 4, 15, 2), Block.box(12, 1, 1, 15, 15, 2), Block.box(4, 4, 2, 12, 7, 3), - Block.box(2, 14, 2, 14, 15, 14) + Block.box(15, 4, 4, 16, 12, 12) ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape SHAPE_E = Stream.of( - Block.box(0, 0, 0, 16, 1, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), @@ -400,18 +1029,19 @@ public class VoxelShapes { Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 0, 0, 16, 1, 16), Block.box(2, 1, 1, 14, 15, 2), Block.box(2, 1, 14, 14, 15, 15), Block.box(1, 1, 1, 2, 15, 15), + Block.box(2, 14, 2, 14, 15, 14), Block.box(14, 7, 4, 15, 15, 12), Block.box(14, 1, 4, 15, 4, 12), Block.box(14, 1, 1, 15, 15, 4), Block.box(14, 1, 12, 15, 15, 15), Block.box(13, 4, 4, 14, 7, 12), - Block.box(2, 14, 2, 14, 15, 14) + Block.box(4, 4, 15, 12, 12, 16) ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape SHAPE_S = Stream.of( - Block.box(0, 0, 0, 16, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), @@ -420,18 +1050,19 @@ public class VoxelShapes { Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 0, 0, 16, 1, 16), Block.box(14, 1, 2, 15, 15, 14), Block.box(1, 1, 2, 2, 15, 14), Block.box(1, 1, 1, 15, 15, 2), + Block.box(2, 14, 2, 14, 15, 14), Block.box(4, 7, 14, 12, 15, 15), Block.box(4, 1, 14, 12, 4, 15), Block.box(12, 1, 14, 15, 15, 15), Block.box(1, 1, 14, 4, 15, 15), Block.box(4, 4, 13, 12, 7, 14), - Block.box(2, 14, 2, 14, 15, 14) + Block.box(0, 4, 4, 1, 12, 12) ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); static final VoxelShape SHAPE_W = Stream.of( - Block.box(0, 0, 0, 16, 1, 16), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), @@ -440,87 +1071,838 @@ public class VoxelShapes { Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 0, 0, 16, 1, 16), Block.box(2, 1, 14, 14, 15, 15), Block.box(2, 1, 1, 14, 15, 2), Block.box(14, 1, 1, 15, 15, 15), + Block.box(2, 14, 2, 14, 15, 14), Block.box(1, 7, 4, 2, 15, 12), Block.box(1, 1, 4, 2, 4, 12), Block.box(1, 1, 12, 2, 15, 15), Block.box(1, 1, 1, 2, 15, 4), Block.box(2, 4, 4, 3, 7, 12), - Block.box(2, 14, 2, 14, 15, 14) + Block.box(4, 4, 0, 12, 12, 1) ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class GrinderShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(0, 0, 0, 1, 1, 16), Block.box(14, 12, 4, 15, 15, 12), Block.box(1, 0, 4, 2, 4, 12), Block.box(14, 0, 4, 15, 4, 12), Block.box(4, 13, 4, 12, 14, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(3, 12, 5, 4, 14, 11), Block.box(12, 12, 5, 13, 14, 11), Block.box(5, 12, 3, 11, 14, 4), Block.box(5, 12, 12, 11, 14, 13), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(2, 14, 2, 4, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(4, 14, 12, 12, 15, 14), Block.box(12, 14, 2, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(1, 0, 2, 2, 15, 4), Block.box(14, 0, 2, 15, 15, 4), Block.box(1, 0, 12, 2, 15, 14), Block.box(14, 0, 12, 15, 15, 14), Block.box(1, 0, 1, 15, 15, 2), Block.box(1, 0, 14, 15, 15, 15), Block.box(13, 4, 4, 14, 12, 12), Block.box(2, 4, 4, 3, 12, 12), Block.box(3, 8, 0, 6, 10, 1), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(1, 12, 4, 2, 15, 12), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(0, 0, 0, 16, 1, 1), Block.box(4, 12, 14, 12, 15, 15), Block.box(4, 0, 1, 12, 4, 2), Block.box(4, 0, 14, 12, 4, 15), Block.box(4, 13, 4, 12, 14, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(5, 12, 3, 11, 14, 4), Block.box(5, 12, 12, 11, 14, 13), Block.box(12, 12, 5, 13, 14, 11), Block.box(3, 12, 5, 4, 14, 11), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 4, 4, 15, 12), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(12, 0, 1, 14, 15, 2), Block.box(12, 0, 14, 14, 15, 15), Block.box(2, 0, 1, 4, 15, 2), Block.box(2, 0, 14, 4, 15, 15), Block.box(14, 0, 1, 15, 15, 15), Block.box(1, 0, 1, 2, 15, 15), Block.box(4, 4, 13, 12, 12, 14), Block.box(4, 4, 2, 12, 12, 3), Block.box(15, 8, 3, 16, 10, 6), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(4, 12, 1, 12, 15, 2), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 12, 4, 2, 15, 12), Block.box(14, 0, 4, 15, 4, 12), Block.box(1, 0, 4, 2, 4, 12), Block.box(4, 13, 4, 12, 14, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(12, 12, 5, 13, 14, 11), Block.box(3, 12, 5, 4, 14, 11), Block.box(5, 12, 12, 11, 14, 13), Block.box(5, 12, 3, 11, 14, 4), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(12, 14, 2, 14, 15, 14), Block.box(4, 14, 12, 12, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(2, 14, 2, 4, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(14, 0, 12, 15, 15, 14), Block.box(1, 0, 12, 2, 15, 14), Block.box(14, 0, 2, 15, 15, 4), Block.box(1, 0, 2, 2, 15, 4), Block.box(1, 0, 14, 15, 15, 15), Block.box(1, 0, 1, 15, 15, 2), Block.box(2, 4, 4, 3, 12, 12), Block.box(13, 4, 4, 14, 12, 12), Block.box(10, 8, 15, 13, 10, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(14, 12, 4, 15, 15, 12), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(0, 0, 15, 16, 1, 16), Block.box(4, 12, 1, 12, 15, 2), Block.box(4, 0, 14, 12, 4, 15), Block.box(4, 0, 1, 12, 4, 2), Block.box(4, 13, 4, 12, 14, 12), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(5, 12, 12, 11, 14, 13), Block.box(5, 12, 3, 11, 14, 4), Block.box(3, 12, 5, 4, 14, 11), Block.box(12, 12, 5, 13, 14, 11), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 14, 4, 4, 15, 12), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(2, 0, 2, 14, 1, 14), Block.box(2, 0, 14, 4, 15, 15), Block.box(2, 0, 1, 4, 15, 2), Block.box(12, 0, 14, 14, 15, 15), Block.box(12, 0, 1, 14, 15, 2), Block.box(1, 0, 1, 2, 15, 15), Block.box(14, 0, 1, 15, 15, 15), Block.box(4, 4, 2, 12, 12, 3), Block.box(4, 4, 13, 12, 12, 14), Block.box(0, 8, 10, 1, 10, 13), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(4, 12, 14, 12, 15, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(1, 11, 5, 2, 15, 11), + Block.box(14, 11, 5, 15, 15, 11), + Block.box(1, 0, 5, 2, 5, 11), + Block.box(14, 0, 5, 15, 5, 11), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 2, 4, 15, 14), + Block.box(4, 14, 2, 12, 15, 4), + Block.box(4, 14, 12, 12, 15, 14), + Block.box(12, 14, 2, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(1, 0, 2, 2, 15, 5), + Block.box(14, 0, 2, 15, 15, 5), + Block.box(1, 0, 11, 2, 15, 14), + Block.box(14, 0, 11, 15, 15, 14), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(13, 4, 4, 14, 12, 12), + Block.box(2, 4, 4, 3, 12, 12), + Block.box(3, 8, 0, 6, 10, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(5, 11, 1, 11, 15, 2), + Block.box(5, 11, 14, 11, 15, 15), + Block.box(5, 0, 1, 11, 5, 2), + Block.box(5, 0, 14, 11, 5, 15), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 2, 14, 15, 4), + Block.box(12, 14, 4, 14, 15, 12), + Block.box(2, 14, 4, 4, 15, 12), + Block.box(2, 14, 12, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(11, 0, 1, 14, 15, 2), + Block.box(11, 0, 14, 14, 15, 15), + Block.box(2, 0, 1, 5, 15, 2), + Block.box(2, 0, 14, 5, 15, 15), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(4, 4, 13, 12, 12, 14), + Block.box(4, 4, 2, 12, 12, 3), + Block.box(15, 8, 3, 16, 10, 6) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(14, 11, 5, 15, 15, 11), + Block.box(1, 11, 5, 2, 15, 11), + Block.box(14, 0, 5, 15, 5, 11), + Block.box(1, 0, 5, 2, 5, 11), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(12, 14, 2, 14, 15, 14), + Block.box(4, 14, 12, 12, 15, 14), + Block.box(4, 14, 2, 12, 15, 4), + Block.box(2, 14, 2, 4, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(14, 0, 11, 15, 15, 14), + Block.box(1, 0, 11, 2, 15, 14), + Block.box(14, 0, 2, 15, 15, 5), + Block.box(1, 0, 2, 2, 15, 5), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(2, 4, 4, 3, 12, 12), + Block.box(13, 4, 4, 14, 12, 12), + Block.box(10, 8, 15, 13, 10, 16) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(5, 11, 14, 11, 15, 15), + Block.box(5, 11, 1, 11, 15, 2), + Block.box(5, 0, 14, 11, 5, 15), + Block.box(5, 0, 1, 11, 5, 2), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 12, 14, 15, 14), + Block.box(2, 14, 4, 4, 15, 12), + Block.box(12, 14, 4, 14, 15, 12), + Block.box(2, 14, 2, 14, 15, 4), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 14, 5, 15, 15), + Block.box(2, 0, 1, 5, 15, 2), + Block.box(11, 0, 14, 14, 15, 15), + Block.box(11, 0, 1, 14, 15, 2), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(4, 4, 2, 12, 12, 3), + Block.box(4, 4, 13, 12, 12, 14), + Block.box(0, 8, 10, 1, 10, 13) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class LampPowererShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(0, 0, 0, 1, 1, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(15, 0, 0, 16, 1, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(3, 3, 15, 13, 13, 16), Block.box(1, 14, 1, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(14, 2, 1, 15, 14, 15), Block.box(1, 2, 1, 2, 14, 15), Block.box(2, 2, 14, 14, 14, 15), Block.box(2, 2, 1, 14, 14, 2), Block.box(0, 7, 7, 1, 9, 10), Block.box(15, 7, 6, 16, 9, 9)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 3, 3, 1, 13, 13), Block.box(1, 14, 1, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(1, 2, 14, 15, 14, 15), Block.box(1, 2, 1, 15, 14, 2), Block.box(1, 2, 2, 2, 14, 14), Block.box(14, 2, 2, 15, 14, 14), Block.box(6, 7, 0, 9, 9, 1), Block.box(7, 7, 15, 10, 9, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(15, 0, 0, 16, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 0, 0, 15, 1, 1), Block.box(1, 0, 15, 15, 1, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(3, 3, 0, 13, 13, 1), Block.box(1, 14, 1, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(1, 2, 1, 2, 14, 15), Block.box(14, 2, 1, 15, 14, 15), Block.box(2, 2, 1, 14, 14, 2), Block.box(2, 2, 14, 14, 14, 15), Block.box(15, 7, 6, 16, 9, 9), Block.box(0, 7, 7, 1, 9, 10)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 3, 3, 16, 13, 13), Block.box(1, 14, 1, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(1, 2, 1, 15, 14, 2), Block.box(1, 2, 14, 15, 14, 15), Block.box(14, 2, 2, 15, 14, 14), Block.box(1, 2, 2, 2, 14, 14), Block.box(7, 7, 15, 10, 9, 16), Block.box(6, 7, 0, 9, 9, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 4, 4, 1, 12, 12), + Block.box(1, 1, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(4, 4, 0, 12, 12, 1), + Block.box(1, 1, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 4, 4, 16, 12, 12), + Block.box(1, 1, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(4, 4, 15, 12, 12, 16), + Block.box(1, 1, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class OilGeneratorShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(4, 3, 1.5, 12, 4, 2), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(12, 3, 1, 13, 4, 2), Block.box(3, 3, 1, 4, 4, 2), Block.box(3, 7, 1, 4, 8, 2), Block.box(12, 7, 1, 13, 8, 2), Block.box(4, 10, 0.5, 6, 11, 1), Block.box(4, 13, 0.5, 6, 14, 1), Block.box(3, 11, 0.5, 4, 13, 1), Block.box(6, 11, 0.5, 7, 13, 1), Block.box(4, 11, 0, 6, 13, 1), Block.box(5, 5, 1.5, 6, 6, 2), Block.box(6, 4, 1.5, 7, 5, 2), Block.box(10, 5, 1.5, 11, 6, 2), Block.box(9, 6, 1.5, 10, 7, 2), Block.box(4, 7, 1.5, 12, 8, 2), Block.box(3, 4, 1.5, 4, 7, 2), Block.box(12, 4, 1.5, 13, 7, 2), Block.box(2, 0, 2, 14, 1, 14), Block.box(5, 14, 6, 11, 15, 7), Block.box(5, 14, 8, 11, 15, 9), Block.box(5, 14, 10, 11, 15, 14), Block.box(5, 14, 2, 11, 15, 5), Block.box(11, 14, 2, 14, 15, 14), Block.box(2, 14, 2, 5, 15, 14), Block.box(1, 0, 2, 2, 15, 14), Block.box(14, 0, 2, 15, 15, 14), Block.box(1, 0, 14, 15, 15, 15), Block.box(3, 8, 1, 13, 15, 2), Block.box(3, 0, 1, 13, 3, 2), Block.box(1, 0, 1, 3, 15, 2), Block.box(13, 0, 1, 15, 15, 2), Block.box(5, 13, 5, 11, 14, 10), Block.box(2, 3, 2, 14, 8, 3), Block.box(0, 0, 15, 1, 1, 16), Block.box(15, 0, 15, 16, 1, 16), Block.box(15, 0, 0, 16, 1, 1), Block.box(0, 0, 0, 1, 1, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(14, 3, 12, 15, 4, 13), Block.box(14, 3, 3, 15, 4, 4), Block.box(14, 7, 3, 15, 8, 4), Block.box(14, 7, 12, 15, 8, 13), Block.box(15, 10, 4, 15.5, 11, 6), Block.box(15, 13, 4, 15.5, 14, 6), Block.box(15, 11, 3, 15.5, 13, 4), Block.box(15, 11, 6, 15.5, 13, 7), Block.box(15, 11, 4, 16, 13, 6), Block.box(14, 5, 5, 14.5, 6, 6), Block.box(14, 4, 6, 14.5, 5, 7), Block.box(14, 5, 10, 14.5, 6, 11), Block.box(14, 6, 9, 14.5, 7, 10), Block.box(14, 3, 4, 14.5, 4, 12), Block.box(14, 7, 4, 14.5, 8, 12), Block.box(14, 4, 3, 14.5, 7, 4), Block.box(14, 4, 12, 14.5, 7, 13), Block.box(2, 0, 2, 14, 1, 14), Block.box(9, 14, 5, 10, 15, 11), Block.box(7, 14, 5, 8, 15, 11), Block.box(2, 14, 5, 6, 15, 11), Block.box(11, 14, 5, 14, 15, 11), Block.box(2, 14, 11, 14, 15, 14), Block.box(2, 14, 2, 14, 15, 5), Block.box(2, 0, 1, 14, 15, 2), Block.box(2, 0, 14, 14, 15, 15), Block.box(1, 0, 1, 2, 15, 15), Block.box(14, 8, 3, 15, 15, 13), Block.box(14, 0, 3, 15, 3, 13), Block.box(14, 0, 1, 15, 15, 3), Block.box(14, 0, 13, 15, 15, 15), Block.box(6, 13, 5, 11, 14, 11), Block.box(13, 3, 2, 14, 8, 14), Block.box(0, 0, 0, 1, 1, 1), Block.box(0, 0, 15, 1, 1, 16), Block.box(15, 0, 15, 16, 1, 16), Block.box(15, 0, 0, 16, 1, 1)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(3, 3, 14, 4, 4, 15), Block.box(12, 3, 14, 13, 4, 15), Block.box(12, 7, 14, 13, 8, 15), Block.box(3, 7, 14, 4, 8, 15), Block.box(10, 10, 15, 12, 11, 15.5), Block.box(10, 13, 15, 12, 14, 15.5), Block.box(12, 11, 15, 13, 13, 15.5), Block.box(9, 11, 15, 10, 13, 15.5), Block.box(10, 11, 15, 12, 13, 16), Block.box(10, 5, 14, 11, 6, 14.5), Block.box(9, 4, 14, 10, 5, 14.5), Block.box(5, 5, 14, 6, 6, 14.5), Block.box(6, 6, 14, 7, 7, 14.5), Block.box(4, 3, 14, 12, 4, 14.5), Block.box(4, 7, 14, 12, 8, 14.5), Block.box(12, 4, 14, 13, 7, 14.5), Block.box(3, 4, 14, 4, 7, 14.5), Block.box(2, 0, 2, 14, 1, 14), Block.box(5, 14, 9, 11, 15, 10), Block.box(5, 14, 7, 11, 15, 8), Block.box(5, 14, 2, 11, 15, 6), Block.box(5, 14, 11, 11, 15, 14), Block.box(2, 14, 2, 5, 15, 14), Block.box(11, 14, 2, 14, 15, 14), Block.box(14, 0, 2, 15, 15, 14), Block.box(1, 0, 2, 2, 15, 14), Block.box(1, 0, 1, 15, 15, 2), Block.box(3, 8, 14, 13, 15, 15), Block.box(3, 0, 14, 13, 3, 15), Block.box(13, 0, 14, 15, 15, 15), Block.box(1, 0, 14, 3, 15, 15), Block.box(5, 13, 6, 11, 14, 11), Block.box(2, 3, 13, 14, 8, 14), Block.box(15, 0, 0, 16, 1, 1), Block.box(0, 0, 0, 1, 1, 1), Block.box(0, 0, 15, 1, 1, 16), Block.box(15, 0, 15, 16, 1, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(1, 3, 3, 2, 4, 4), Block.box(1, 3, 12, 2, 4, 13), Block.box(1, 7, 12, 2, 8, 13), Block.box(1, 7, 3, 2, 8, 4), Block.box(0.5, 10, 10, 1, 11, 12), Block.box(0.5, 13, 10, 1, 14, 12), Block.box(0.5, 11, 12, 1, 13, 13), Block.box(0.5, 11, 9, 1, 13, 10), Block.box(0, 11, 10, 1, 13, 12), Block.box(1.5, 5, 10, 2, 6, 11), Block.box(1.5, 4, 9, 2, 5, 10), Block.box(1.5, 5, 5, 2, 6, 6), Block.box(1.5, 6, 6, 2, 7, 7), Block.box(1.5, 3, 4, 2, 4, 12), Block.box(1.5, 7, 4, 2, 8, 12), Block.box(1.5, 4, 12, 2, 7, 13), Block.box(1.5, 4, 3, 2, 7, 4), Block.box(2, 0, 2, 14, 1, 14), Block.box(6, 14, 5, 7, 15, 11), Block.box(8, 14, 5, 9, 15, 11), Block.box(10, 14, 5, 14, 15, 11), Block.box(2, 14, 5, 5, 15, 11), Block.box(2, 14, 2, 14, 15, 5), Block.box(2, 14, 11, 14, 15, 14), Block.box(2, 0, 14, 14, 15, 15), Block.box(2, 0, 1, 14, 15, 2), Block.box(14, 0, 1, 15, 15, 15), Block.box(1, 8, 3, 2, 15, 13), Block.box(1, 0, 3, 2, 3, 13), Block.box(1, 0, 13, 2, 15, 15), Block.box(1, 0, 1, 2, 15, 3), Block.box(5, 13, 5, 10, 14, 11), Block.box(2, 3, 2, 3, 8, 14), Block.box(15, 0, 15, 16, 1, 16), Block.box(15, 0, 0, 16, 1, 1), Block.box(0, 0, 0, 1, 1, 1), Block.box(0, 0, 15, 1, 1, 16)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 0, 15, 1, 15, 16), + Block.box(15, 0, 15, 16, 15, 16), + Block.box(15, 0, 0, 16, 15, 1), + Block.box(0, 0, 0, 1, 15, 1), + Block.box(4, 10, 0, 6, 12, 1), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(5, 14, 6, 11, 15, 7), + Block.box(5, 14, 8, 11, 15, 9), + Block.box(5, 14, 10, 11, 15, 14), + Block.box(5, 14, 2, 11, 15, 5), + Block.box(11, 14, 2, 14, 15, 14), + Block.box(2, 14, 2, 5, 15, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(5, 13, 5, 11, 14, 10) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 0, 1, 15, 1), + Block.box(0, 0, 15, 1, 15, 16), + Block.box(15, 0, 15, 16, 15, 16), + Block.box(15, 0, 0, 16, 15, 1), + Block.box(15, 10, 4, 16, 12, 6), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(9, 14, 5, 10, 15, 11), + Block.box(7, 14, 5, 8, 15, 11), + Block.box(2, 14, 5, 6, 15, 11), + Block.box(11, 14, 5, 14, 15, 11), + Block.box(2, 14, 11, 14, 15, 14), + Block.box(2, 14, 2, 14, 15, 5), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(6, 13, 5, 11, 14, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 0, 0, 16, 15, 1), + Block.box(0, 0, 0, 1, 15, 1), + Block.box(0, 0, 15, 1, 15, 16), + Block.box(15, 0, 15, 16, 15, 16), + Block.box(10, 10, 15, 12, 12, 16), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(5, 14, 9, 11, 15, 10), + Block.box(5, 14, 7, 11, 15, 8), + Block.box(5, 14, 2, 11, 15, 6), + Block.box(5, 14, 11, 11, 15, 14), + Block.box(2, 14, 2, 5, 15, 14), + Block.box(11, 14, 2, 14, 15, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(5, 13, 6, 11, 14, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 15, 16, 15, 16), + Block.box(15, 0, 0, 16, 15, 1), + Block.box(0, 0, 0, 1, 15, 1), + Block.box(0, 0, 15, 1, 15, 16), + Block.box(0, 10, 10, 1, 12, 12), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(6, 14, 5, 7, 15, 11), + Block.box(8, 14, 5, 9, 15, 11), + Block.box(10, 14, 5, 14, 15, 11), + Block.box(2, 14, 5, 5, 15, 11), + Block.box(2, 14, 2, 14, 15, 5), + Block.box(2, 14, 11, 14, 15, 14), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(5, 13, 5, 10, 14, 11) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class MinerShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(0, 1, 15, 1, 15, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(15, 3, 3, 16, 13, 13), Block.box(0, 3, 3, 1, 13, 13), Block.box(4, 11, 4, 12, 12, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(3, 12, 5, 4, 14, 11), Block.box(12, 12, 5, 13, 14, 11), Block.box(5, 12, 3, 11, 14, 4), Block.box(5, 12, 12, 11, 14, 13), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(2, 14, 2, 4, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(4, 14, 12, 12, 15, 14), Block.box(12, 14, 2, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(1, 0, 2, 2, 15, 14), Block.box(14, 0, 2, 15, 15, 14), Block.box(1, 0, 1, 15, 15, 2), Block.box(1, 0, 14, 15, 15, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(3, 3, 15, 13, 13, 16), Block.box(3, 3, 0, 13, 13, 1), Block.box(4, 11, 4, 12, 12, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(5, 12, 3, 11, 14, 4), Block.box(5, 12, 12, 11, 14, 13), Block.box(12, 12, 5, 13, 14, 11), Block.box(3, 12, 5, 4, 14, 11), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 4, 4, 15, 12), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(2, 0, 1, 14, 15, 2), Block.box(2, 0, 14, 14, 15, 15), Block.box(14, 0, 1, 15, 15, 15), Block.box(1, 0, 1, 2, 15, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(15, 1, 0, 16, 15, 1), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(0, 3, 3, 1, 13, 13), Block.box(15, 3, 3, 16, 13, 13), Block.box(4, 11, 4, 12, 12, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(12, 12, 5, 13, 14, 11), Block.box(3, 12, 5, 4, 14, 11), Block.box(5, 12, 12, 11, 14, 13), Block.box(5, 12, 3, 11, 14, 4), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 12, 4, 12, 14, 5), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(12, 14, 2, 14, 15, 14), Block.box(4, 14, 12, 12, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(2, 14, 2, 4, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(14, 0, 2, 15, 15, 14), Block.box(1, 0, 2, 2, 15, 14), Block.box(1, 0, 14, 15, 15, 15), Block.box(1, 0, 1, 15, 15, 2)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(15, 1, 15, 16, 15, 16), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(3, 3, 0, 13, 13, 1), Block.box(3, 3, 15, 13, 13, 16), Block.box(4, 11, 4, 12, 12, 12), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(5, 12, 12, 11, 14, 13), Block.box(5, 12, 3, 11, 14, 4), Block.box(3, 12, 5, 4, 14, 11), Block.box(12, 12, 5, 13, 14, 11), Block.box(11, 12, 4, 12, 14, 5), Block.box(4, 12, 4, 5, 14, 5), Block.box(4, 12, 11, 5, 14, 12), Block.box(11, 12, 11, 12, 14, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 14, 4, 4, 15, 12), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(2, 0, 2, 14, 1, 14), Block.box(2, 0, 14, 14, 15, 15), Block.box(2, 0, 1, 14, 15, 2), Block.box(1, 0, 1, 2, 15, 15), Block.box(14, 0, 1, 15, 15, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 4, 4, 16, 12, 12), + Block.box(0, 4, 4, 1, 12, 12), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 2, 4, 15, 14), + Block.box(4, 14, 2, 12, 15, 4), + Block.box(4, 14, 12, 12, 15, 14), + Block.box(12, 14, 2, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(1, 0, 14, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(4, 4, 15, 12, 12, 16), + Block.box(4, 4, 0, 12, 12, 1), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 2, 14, 15, 4), + Block.box(12, 14, 4, 14, 15, 12), + Block.box(2, 14, 4, 4, 15, 12), + Block.box(2, 14, 12, 14, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(1, 0, 1, 2, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 4, 4, 1, 12, 12), + Block.box(15, 4, 4, 16, 12, 12), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(12, 14, 2, 14, 15, 14), + Block.box(4, 14, 12, 12, 15, 14), + Block.box(4, 14, 2, 12, 15, 4), + Block.box(2, 14, 2, 4, 15, 14), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(1, 0, 1, 15, 15, 2) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(4, 4, 0, 12, 12, 1), + Block.box(4, 4, 15, 12, 12, 16), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(2, 14, 12, 14, 15, 14), + Block.box(2, 14, 4, 4, 15, 12), + Block.box(12, 14, 4, 14, 15, 12), + Block.box(2, 14, 2, 14, 15, 4), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(14, 0, 1, 15, 15, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class LeafGeneratorShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(1, 0, 14, 15, 15, 15), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(5, 11, 0, 11, 12, 1), Block.box(0, 11, 5, 1, 12, 11), Block.box(15, 11, 5, 16, 12, 11), Block.box(5, 4, 0, 11, 5, 1), Block.box(0, 4, 5, 1, 5, 11), Block.box(15, 4, 5, 16, 5, 11), Block.box(4, 4, 0, 5, 12, 1), Block.box(0, 4, 4, 1, 12, 5), Block.box(15, 4, 4, 16, 12, 5), Block.box(11, 4, 0, 12, 12, 1), Block.box(0, 4, 11, 1, 12, 12), Block.box(15, 4, 11, 16, 12, 12), Block.box(4, 13, 4, 12, 14, 12), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(12, 14, 2, 14, 15, 14), Block.box(4, 14, 12, 12, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(2, 14, 2, 4, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(1, 0, 1, 15, 15, 2), Block.box(1, 0, 2, 2, 5, 14), Block.box(2, 1, 2, 3, 14, 14), Block.box(1, 11, 2, 2, 15, 14), Block.box(1, 5, 2, 2, 11, 5), Block.box(1, 5, 11, 2, 11, 14), Block.box(13, 1, 2, 14, 14, 14), Block.box(14, 11, 2, 15, 15, 14), Block.box(14, 5, 11, 15, 11, 14), Block.box(14, 5, 2, 15, 11, 5), Block.box(14, 0, 2, 15, 5, 14)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(1, 0, 1, 2, 15, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 11, 5, 16, 12, 11), Block.box(5, 11, 0, 11, 12, 1), Block.box(5, 11, 15, 11, 12, 16), Block.box(15, 4, 5, 16, 5, 11), Block.box(5, 4, 0, 11, 5, 1), Block.box(5, 4, 15, 11, 5, 16), Block.box(15, 4, 4, 16, 12, 5), Block.box(11, 4, 0, 12, 12, 1), Block.box(11, 4, 15, 12, 12, 16), Block.box(15, 4, 11, 16, 12, 12), Block.box(4, 4, 0, 5, 12, 1), Block.box(4, 4, 15, 5, 12, 16), Block.box(4, 13, 4, 12, 14, 12), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 14, 4, 4, 15, 12), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(2, 0, 2, 14, 1, 14), Block.box(14, 0, 1, 15, 15, 15), Block.box(2, 0, 1, 14, 5, 2), Block.box(2, 1, 2, 14, 14, 3), Block.box(2, 11, 1, 14, 15, 2), Block.box(11, 5, 1, 14, 11, 2), Block.box(2, 5, 1, 5, 11, 2), Block.box(2, 1, 13, 14, 14, 14), Block.box(2, 11, 14, 14, 15, 15), Block.box(2, 5, 14, 5, 11, 15), Block.box(11, 5, 14, 14, 11, 15), Block.box(2, 0, 14, 14, 5, 15)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(1, 0, 1, 15, 15, 2), Block.box(0, 0, 0, 1, 1, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(15, 0, 0, 16, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(5, 11, 15, 11, 12, 16), Block.box(15, 11, 5, 16, 12, 11), Block.box(0, 11, 5, 1, 12, 11), Block.box(5, 4, 15, 11, 5, 16), Block.box(15, 4, 5, 16, 5, 11), Block.box(0, 4, 5, 1, 5, 11), Block.box(11, 4, 15, 12, 12, 16), Block.box(15, 4, 11, 16, 12, 12), Block.box(0, 4, 11, 1, 12, 12), Block.box(4, 4, 15, 5, 12, 16), Block.box(15, 4, 4, 16, 12, 5), Block.box(0, 4, 4, 1, 12, 5), Block.box(4, 13, 4, 12, 14, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(2, 14, 2, 4, 15, 14), Block.box(4, 14, 2, 12, 15, 4), Block.box(4, 14, 12, 12, 15, 14), Block.box(12, 14, 2, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(1, 0, 14, 15, 15, 15), Block.box(14, 0, 2, 15, 5, 14), Block.box(13, 1, 2, 14, 14, 14), Block.box(14, 11, 2, 15, 15, 14), Block.box(14, 5, 11, 15, 11, 14), Block.box(14, 5, 2, 15, 11, 5), Block.box(2, 1, 2, 3, 14, 14), Block.box(1, 11, 2, 2, 15, 14), Block.box(1, 5, 2, 2, 11, 5), Block.box(1, 5, 11, 2, 11, 14), Block.box(1, 0, 2, 2, 5, 14)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(14, 0, 1, 15, 15, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 11, 5, 1, 12, 11), Block.box(5, 11, 15, 11, 12, 16), Block.box(5, 11, 0, 11, 12, 1), Block.box(0, 4, 5, 1, 5, 11), Block.box(5, 4, 15, 11, 5, 16), Block.box(5, 4, 0, 11, 5, 1), Block.box(0, 4, 11, 1, 12, 12), Block.box(4, 4, 15, 5, 12, 16), Block.box(4, 4, 0, 5, 12, 1), Block.box(0, 4, 4, 1, 12, 5), Block.box(11, 4, 15, 12, 12, 16), Block.box(11, 4, 0, 12, 12, 1), Block.box(4, 13, 4, 12, 14, 12), Block.box(11, 14, 11, 12, 15, 12), Block.box(11, 14, 4, 12, 15, 5), Block.box(4, 14, 4, 5, 15, 5), Block.box(4, 14, 11, 5, 15, 12), Block.box(2, 14, 2, 14, 15, 4), Block.box(12, 14, 4, 14, 15, 12), Block.box(2, 14, 4, 4, 15, 12), Block.box(2, 14, 12, 14, 15, 14), Block.box(2, 0, 2, 14, 1, 14), Block.box(1, 0, 1, 2, 15, 15), Block.box(2, 0, 14, 14, 5, 15), Block.box(2, 1, 13, 14, 14, 14), Block.box(2, 11, 14, 14, 15, 15), Block.box(2, 5, 14, 5, 11, 15), Block.box(11, 5, 14, 14, 11, 15), Block.box(2, 1, 2, 14, 14, 3), Block.box(2, 11, 1, 14, 15, 2), Block.box(11, 5, 1, 14, 11, 2), Block.box(2, 5, 1, 5, 11, 2), Block.box(2, 0, 1, 14, 5, 2)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(1, 0, 14, 15, 15, 15), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(1, 0, 1, 15, 15, 2), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 14, 2, 4, 15, 14), + Block.box(4, 14, 2, 12, 15, 4), + Block.box(4, 14, 12, 12, 15, 14), + Block.box(12, 14, 2, 14, 15, 14), + Block.box(4, 13, 4, 12, 14, 12) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(1, 0, 1, 2, 15, 15), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(14, 0, 1, 15, 15, 15), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 14, 2, 14, 15, 4), + Block.box(12, 14, 4, 14, 15, 12), + Block.box(2, 14, 4, 4, 15, 12), + Block.box(2, 14, 12, 14, 15, 14), + Block.box(4, 13, 4, 12, 14, 12) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(1, 0, 1, 15, 15, 2), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(1, 0, 2, 2, 15, 14), + Block.box(14, 0, 2, 15, 15, 14), + Block.box(1, 0, 14, 15, 15, 15), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(12, 14, 2, 14, 15, 14), + Block.box(4, 14, 12, 12, 15, 14), + Block.box(4, 14, 2, 12, 15, 4), + Block.box(2, 14, 2, 4, 15, 14), + Block.box(4, 13, 4, 12, 14, 12) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(14, 0, 1, 15, 15, 15), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(2, 0, 1, 14, 15, 2), + Block.box(2, 0, 14, 14, 15, 15), + Block.box(1, 0, 1, 2, 15, 15), + Block.box(2, 0, 2, 14, 1, 14), + Block.box(2, 14, 12, 14, 15, 14), + Block.box(2, 14, 4, 4, 15, 12), + Block.box(12, 14, 4, 14, 15, 12), + Block.box(2, 14, 2, 14, 15, 4), + Block.box(4, 13, 4, 12, 14, 12) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class LavaFactoryShapes { - static final VoxelShape SHAPE_N = Stream.of(Block.box(0, 0, 0, 1, 1, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 0, 15, 15, 1, 16), Block.box(1, 0, 0, 15, 1, 1), Block.box(15, 0, 0, 16, 1, 16), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(12, 15, 5, 13, 16, 11), Block.box(3, 15, 5, 4, 16, 11), Block.box(11, 14, 11, 12, 16, 12), Block.box(11, 14, 4, 12, 16, 5), Block.box(4, 14, 11, 5, 16, 12), Block.box(4, 14, 4, 5, 16, 5), Block.box(4, 13, 4, 12, 14, 12), Block.box(4, 14, 12, 12, 15, 15), Block.box(4, 14, 1, 12, 15, 4), Block.box(1, 14, 1, 4, 15, 15), Block.box(12, 14, 1, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(14, 2, 1, 15, 14, 15), Block.box(1, 2, 1, 2, 14, 15), Block.box(2, 2, 14, 14, 14, 15), Block.box(2, 2, 1, 14, 14, 2), Block.box(5, 15, 3, 11, 16, 4), Block.box(5, 15, 12, 11, 16, 13)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(0, 0, 0, 16, 1, 1), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 15, 16, 16, 16), Block.box(15, 15, 1, 16, 16, 15), Block.box(0, 15, 1, 1, 16, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(5, 15, 12, 11, 16, 13), Block.box(5, 15, 3, 11, 16, 4), Block.box(4, 14, 11, 5, 16, 12), Block.box(11, 14, 11, 12, 16, 12), Block.box(4, 14, 4, 5, 16, 5), Block.box(11, 14, 4, 12, 16, 5), Block.box(4, 13, 4, 12, 14, 12), Block.box(1, 14, 4, 4, 15, 12), Block.box(12, 14, 4, 15, 15, 12), Block.box(1, 14, 1, 15, 15, 4), Block.box(1, 14, 12, 15, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(1, 2, 14, 15, 14, 15), Block.box(1, 2, 1, 15, 14, 2), Block.box(1, 2, 2, 2, 14, 14), Block.box(14, 2, 2, 15, 14, 14), Block.box(12, 15, 5, 13, 16, 11), Block.box(3, 15, 5, 4, 16, 11)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(15, 0, 0, 16, 1, 16), Block.box(15, 15, 0, 16, 16, 16), Block.box(0, 15, 0, 1, 16, 16), Block.box(1, 15, 15, 15, 16, 16), Block.box(1, 15, 0, 15, 16, 1), Block.box(1, 0, 0, 15, 1, 1), Block.box(1, 0, 15, 15, 1, 16), Block.box(0, 0, 0, 1, 1, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(15, 1, 15, 16, 15, 16), Block.box(3, 15, 5, 4, 16, 11), Block.box(12, 15, 5, 13, 16, 11), Block.box(4, 14, 4, 5, 16, 5), Block.box(4, 14, 11, 5, 16, 12), Block.box(11, 14, 4, 12, 16, 5), Block.box(11, 14, 11, 12, 16, 12), Block.box(4, 13, 4, 12, 14, 12), Block.box(4, 14, 1, 12, 15, 4), Block.box(4, 14, 12, 12, 15, 15), Block.box(12, 14, 1, 15, 15, 15), Block.box(1, 14, 1, 4, 15, 15), Block.box(1, 1, 1, 15, 2, 15), Block.box(1, 2, 1, 2, 14, 15), Block.box(14, 2, 1, 15, 14, 15), Block.box(2, 2, 1, 14, 14, 2), Block.box(2, 2, 14, 14, 14, 15), Block.box(5, 15, 12, 11, 16, 13), Block.box(5, 15, 3, 11, 16, 4)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(0, 0, 15, 16, 1, 16), Block.box(0, 15, 15, 16, 16, 16), Block.box(0, 15, 0, 16, 16, 1), Block.box(0, 15, 1, 1, 16, 15), Block.box(15, 15, 1, 16, 16, 15), Block.box(15, 0, 1, 16, 1, 15), Block.box(0, 0, 1, 1, 1, 15), Block.box(0, 0, 0, 16, 1, 1), Block.box(15, 1, 15, 16, 15, 16), Block.box(15, 1, 0, 16, 15, 1), Block.box(0, 1, 0, 1, 15, 1), Block.box(0, 1, 15, 1, 15, 16), Block.box(5, 15, 3, 11, 16, 4), Block.box(5, 15, 12, 11, 16, 13), Block.box(11, 14, 4, 12, 16, 5), Block.box(4, 14, 4, 5, 16, 5), Block.box(11, 14, 11, 12, 16, 12), Block.box(4, 14, 11, 5, 16, 12), Block.box(4, 13, 4, 12, 14, 12), Block.box(12, 14, 4, 15, 15, 12), Block.box(1, 14, 4, 4, 15, 12), Block.box(1, 14, 12, 15, 15, 15), Block.box(1, 14, 1, 15, 15, 4), Block.box(1, 1, 1, 15, 2, 15), Block.box(1, 2, 1, 15, 14, 2), Block.box(1, 2, 14, 15, 14, 15), Block.box(14, 2, 2, 15, 14, 14), Block.box(1, 2, 2, 2, 14, 14), Block.box(3, 15, 5, 4, 16, 11), Block.box(12, 15, 5, 13, 16, 11)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(5, 14, 11, 11, 15, 15), + Block.box(5, 14, 1, 11, 15, 5), + Block.box(1, 14, 1, 5, 15, 15), + Block.box(11, 14, 1, 15, 15, 15), + Block.box(1, 0, 1, 15, 2, 15), + Block.box(14, 2, 1, 15, 14, 15), + Block.box(1, 2, 1, 2, 14, 15), + Block.box(2, 2, 14, 14, 14, 15), + Block.box(2, 2, 1, 14, 14, 2), + Block.box(4, 4, 0, 12, 12, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 15, 16, 16, 16), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(1, 14, 5, 5, 15, 11), + Block.box(11, 14, 5, 15, 15, 11), + Block.box(1, 14, 1, 15, 15, 5), + Block.box(1, 14, 11, 15, 15, 15), + Block.box(1, 0, 1, 15, 2, 15), + Block.box(1, 2, 14, 15, 14, 15), + Block.box(1, 2, 1, 15, 14, 2), + Block.box(1, 2, 2, 2, 14, 14), + Block.box(14, 2, 2, 15, 14, 14), + Block.box(15, 4, 4, 16, 12, 12) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(15, 15, 0, 16, 16, 16), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(5, 14, 1, 11, 15, 5), + Block.box(5, 14, 11, 11, 15, 15), + Block.box(11, 14, 1, 15, 15, 15), + Block.box(1, 14, 1, 5, 15, 15), + Block.box(1, 0, 1, 15, 2, 15), + Block.box(1, 2, 1, 2, 14, 15), + Block.box(14, 2, 1, 15, 14, 15), + Block.box(2, 2, 1, 14, 14, 2), + Block.box(2, 2, 14, 14, 14, 15), + Block.box(4, 4, 15, 12, 12, 16) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(0, 15, 15, 16, 16, 16), + Block.box(0, 15, 0, 16, 16, 1), + Block.box(0, 15, 1, 1, 16, 15), + Block.box(15, 15, 1, 16, 16, 15), + Block.box(15, 0, 1, 16, 1, 15), + Block.box(0, 0, 1, 1, 1, 15), + Block.box(0, 0, 0, 16, 1, 1), + Block.box(0, 0, 15, 16, 1, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(4, 13, 4, 12, 14, 12), + Block.box(11, 14, 5, 15, 15, 11), + Block.box(1, 14, 5, 5, 15, 11), + Block.box(1, 14, 11, 15, 15, 15), + Block.box(1, 14, 1, 15, 15, 5), + Block.box(1, 0, 1, 15, 2, 15), + Block.box(1, 2, 1, 15, 14, 2), + Block.box(1, 2, 14, 15, 14, 15), + Block.box(14, 2, 2, 15, 14, 14), + Block.box(1, 2, 2, 2, 14, 14), + Block.box(0, 4, 4, 1, 12, 12) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } - public static final VoxelShape FEEDER_SHAPE = ShapeBuilder.get() - .add(0, 15, 0, 1, 16, 16).add(15, 15, 0, 16, 16, 16) - .add(1, 15, 0, 15, 16, 1).add(1, 15, 15, 15, 16, 16).add(1, 0, 15, 15, 1, 16) - .add(1, 0, 0, 15, 1, 1).add(15, 0, 0, 16, 1, 16).add(0, 0, 0, 1, 1, 16) - .add(0, 1, 15, 1, 15, 16).add(15, 1, 15, 16, 15, 16).add(15, 1, 0, 16, 15, 1) - .add(0, 1, 0, 1, 15, 1).add(11, 14, 11, 12, 15, 12).add(11, 14, 4, 12, 15, 5) - .add(4, 14, 11, 5, 15, 12).add(4, 14, 4, 5, 15, 5).add(4, 13, 4, 12, 14, 12) - .add(4, 14, 12, 12, 15, 15).add(4, 14, 1, 12, 15, 4).add(1, 14, 1, 4, 15, 15) - .add(12, 14, 1, 15, 15, 15).add(1, 1, 1, 15, 2, 15).add(14, 2, 1, 15, 14, 15) - .add(1, 2, 1, 2, 14, 15).add(2, 2, 14, 14, 14, 15).add(2, 2, 1, 14, 14, 2) - .standardReduceBuild().get(); + public static final VoxelShape FEEDER_SHAPE = Stream.of( + Block.box(2, 2, 1, 14, 14, 2), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1), + Block.box(5, 13, 5, 11, 14, 11), + Block.box(5, 14, 11, 11, 15, 15), + Block.box(5, 14, 1, 11, 15, 5), + Block.box(1, 14, 1, 5, 15, 15), + Block.box(11, 14, 1, 15, 15, 15), + Block.box(1, 0, 1, 15, 2, 15), + Block.box(14, 2, 1, 15, 14, 15), + Block.box(1, 2, 1, 2, 14, 15), + Block.box(2, 2, 14, 14, 14, 15) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - public static final VoxelShape SOLIDIFIER_SHAPE = ShapeBuilder.get() - .add(15, 0, 1, 16, 1, 15).add(1, 1, 1, 15, 15, 15).add(0, 0, 0, 16, 1, 1) - .add(0, 0, 15, 16, 1, 16).add(0, 15, 0, 16, 16, 1).add(0, 15, 15, 16, 16, 16) - .add(0, 0, 1, 1, 1, 15).add(0, 15, 1, 1, 16, 15).add(15, 15, 1, 16, 16, 15) - .add(0, 1, 0, 1, 15, 1).add(0, 1, 15, 1, 15, 16).add(15, 1, 15, 16, 15, 16) - .add(15, 1, 0, 16, 15, 1) - .standardReduceBuild().get(); +// ShapeBuilder.get() +// .add(0, 15, 0, 1, 16, 16).add(15, 15, 0, 16, 16, 16) +// .add(1, 15, 0, 15, 16, 1).add(1, 15, 15, 15, 16, 16).add(1, 0, 15, 15, 1, 16) +// .add(1, 0, 0, 15, 1, 1).add(15, 0, 0, 16, 1, 16).add(0, 0, 0, 1, 1, 16) +// .add(0, 1, 15, 1, 15, 16).add(15, 1, 15, 16, 15, 16).add(15, 1, 0, 16, 15, 1) +// .add(0, 1, 0, 1, 15, 1).add(11, 14, 11, 12, 15, 12).add(11, 14, 4, 12, 15, 5) +// .add(4, 14, 11, 5, 15, 12).add(4, 14, 4, 5, 15, 5).add(4, 13, 4, 12, 14, 12) +// .add(4, 14, 12, 12, 15, 15).add(4, 14, 1, 12, 15, 4).add(1, 14, 1, 4, 15, 15) +// .add(12, 14, 1, 15, 15, 15).add(1, 1, 1, 15, 2, 15).add(14, 2, 1, 15, 14, 15) +// .add(1, 2, 1, 2, 14, 15).add(2, 2, 14, 14, 14, 15).add(2, 2, 1, 14, 14, 2) +// .standardReduceBuild().get(); + + public static final VoxelShape SOLIDIFIER_SHAPE = Stream.of( + Block.box(1, 0, 1, 15, 15, 15), + Block.box(0, 15, 0, 1, 16, 16), + Block.box(15, 15, 0, 16, 16, 16), + Block.box(1, 15, 0, 15, 16, 1), + Block.box(1, 15, 15, 15, 16, 16), + Block.box(1, 0, 15, 15, 1, 16), + Block.box(1, 0, 0, 15, 1, 1), + Block.box(15, 0, 0, 16, 1, 16), + Block.box(0, 0, 0, 1, 1, 16), + Block.box(0, 1, 15, 1, 15, 16), + Block.box(15, 1, 15, 16, 15, 16), + Block.box(15, 1, 0, 16, 15, 1), + Block.box(0, 1, 0, 1, 15, 1) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + +// ShapeBuilder.get() +// .add(15, 0, 1, 16, 1, 15).add(1, 1, 1, 15, 15, 15).add(0, 0, 0, 16, 1, 1) +// .add(0, 0, 15, 16, 1, 16).add(0, 15, 0, 16, 16, 1).add(0, 15, 15, 16, 16, 16) +// .add(0, 0, 1, 1, 1, 15).add(0, 15, 1, 1, 16, 15).add(15, 15, 1, 16, 16, 15) +// .add(0, 1, 0, 1, 15, 1).add(0, 1, 15, 1, 15, 16).add(15, 1, 15, 16, 15, 16) +// .add(15, 1, 0, 16, 15, 1) +// .standardReduceBuild().get(); static final class LaserRelayShapes { - static final VoxelShape SHAPE_U = Stream.of(Block.box(1, 0, 1, 15, 1, 15), Block.box(3, 1, 3, 13, 5, 13), Block.box(7, 4, 7, 9, 10, 9)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_D = Stream.of(Block.box(1, 15, 1, 15, 16, 15), Block.box(3, 11, 3, 13, 15, 13), Block.box(7, 6, 7, 9, 12, 9)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_N = Stream.of(Block.box(1, 1, 15, 15, 15, 16), Block.box(3, 3, 11, 13, 13, 15), Block.box(7, 7, 6, 9, 9, 12)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_E = Stream.of(Block.box(0, 1, 1, 1, 15, 15), Block.box(1, 3, 3, 5, 13, 13), Block.box(4, 7, 7, 10, 9, 9)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_S = Stream.of(Block.box(1, 1, 0, 15, 15, 1), Block.box(3, 3, 1, 13, 13, 5), Block.box(7, 7, 4, 9, 9, 10)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - static final VoxelShape SHAPE_W = Stream.of(Block.box(15, 1, 1, 16, 15, 15), Block.box(11, 3, 3, 15, 13, 13), Block.box(6, 7, 7, 12, 9, 9)).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_U = Stream.of( + Block.box(1, 0, 1, 15, 1, 15), + Block.box(4, 2, 4, 12, 4, 12), + Block.box(6, 4, 6, 7, 5, 7), + Block.box(9, 4, 9, 10, 5, 10), + Block.box(6, 4, 9, 7, 5, 10), + Block.box(3, 1, 12, 4, 5, 13), + Block.box(12, 1, 12, 13, 5, 13), + Block.box(3, 1, 3, 4, 5, 4), + Block.box(12, 1, 3, 13, 5, 4), + Block.box(3, 4, 4, 4, 5, 12), + Block.box(3, 1, 4, 4, 2, 12), + Block.box(12, 4, 4, 13, 5, 12), + Block.box(12, 1, 4, 13, 2, 12), + Block.box(4, 4, 12, 12, 5, 13), + Block.box(4, 4, 3, 12, 5, 4), + Block.box(4, 1, 12, 12, 2, 13), + Block.box(4, 1, 3, 12, 2, 4), + Block.box(9, 4, 6, 10, 5, 7), + Block.box(7, 4, 7, 9, 6, 9), + Block.box(7, 6, 7, 9, 11, 9), + Block.box(6, 5, 6, 10, 6, 10), + Block.box(6, 7, 6, 10, 8, 10), + Block.box(6, 9, 6, 10, 10, 10) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_D = Stream.of( + Block.box(1, 15, 1, 15, 16, 15), + Block.box(4, 12, 4, 12, 14, 12), + Block.box(6, 11, 6, 7, 12, 7), + Block.box(9, 11, 9, 10, 12, 10), + Block.box(6, 11, 9, 7, 12, 10), + Block.box(3, 11, 12, 4, 15, 13), + Block.box(12, 11, 12, 13, 15, 13), + Block.box(3, 11, 3, 4, 15, 4), + Block.box(12, 11, 3, 13, 15, 4), + Block.box(3, 11, 4, 4, 12, 12), + Block.box(3, 14, 4, 4, 15, 12), + Block.box(12, 11, 4, 13, 12, 12), + Block.box(12, 14, 4, 13, 15, 12), + Block.box(4, 11, 12, 12, 12, 13), + Block.box(4, 11, 3, 12, 12, 4), + Block.box(4, 14, 12, 12, 15, 13), + Block.box(4, 14, 3, 12, 15, 4), + Block.box(9, 11, 6, 10, 12, 7), + Block.box(7, 10, 7, 9, 12, 9), + Block.box(7, 5, 7, 9, 10, 9), + Block.box(6, 10, 6, 10, 11, 10), + Block.box(6, 8, 6, 10, 9, 10), + Block.box(6, 6, 6, 10, 7, 10) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_N = Stream.of( + Block.box(1, 1, 15, 15, 15, 16), + Block.box(4, 4, 12, 12, 12, 14), + Block.box(6, 6, 11, 7, 7, 12), + Block.box(9, 9, 11, 10, 10, 12), + Block.box(6, 9, 11, 7, 10, 12), + Block.box(3, 12, 11, 4, 13, 15), + Block.box(12, 12, 11, 13, 13, 15), + Block.box(3, 3, 11, 4, 4, 15), + Block.box(12, 3, 11, 13, 4, 15), + Block.box(3, 4, 11, 4, 12, 12), + Block.box(3, 4, 14, 4, 12, 15), + Block.box(12, 4, 11, 13, 12, 12), + Block.box(12, 4, 14, 13, 12, 15), + Block.box(4, 12, 11, 12, 13, 12), + Block.box(4, 3, 11, 12, 4, 12), + Block.box(4, 12, 14, 12, 13, 15), + Block.box(4, 3, 14, 12, 4, 15), + Block.box(9, 6, 11, 10, 7, 12), + Block.box(7, 7, 10, 9, 9, 12), + Block.box(7, 7, 5, 9, 9, 10), + Block.box(6, 6, 10, 10, 10, 11), + Block.box(6, 6, 8, 10, 10, 9), + Block.box(6, 6, 6, 10, 10, 7) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_E = Stream.of( + Block.box(0, 1, 1, 1, 15, 15), + Block.box(2, 4, 4, 4, 12, 12), + Block.box(4, 6, 6, 5, 7, 7), + Block.box(4, 9, 9, 5, 10, 10), + Block.box(4, 9, 6, 5, 10, 7), + Block.box(1, 12, 3, 5, 13, 4), + Block.box(1, 12, 12, 5, 13, 13), + Block.box(1, 3, 3, 5, 4, 4), + Block.box(1, 3, 12, 5, 4, 13), + Block.box(4, 4, 3, 5, 12, 4), + Block.box(1, 4, 3, 2, 12, 4), + Block.box(4, 4, 12, 5, 12, 13), + Block.box(1, 4, 12, 2, 12, 13), + Block.box(4, 12, 4, 5, 13, 12), + Block.box(4, 3, 4, 5, 4, 12), + Block.box(1, 12, 4, 2, 13, 12), + Block.box(1, 3, 4, 2, 4, 12), + Block.box(4, 6, 9, 5, 7, 10), + Block.box(4, 7, 7, 6, 9, 9), + Block.box(6, 7, 7, 11, 9, 9), + Block.box(5, 6, 6, 6, 10, 10), + Block.box(7, 6, 6, 8, 10, 10), + Block.box(9, 6, 6, 10, 10, 10) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_S = Stream.of( + Block.box(1, 1, 0, 15, 15, 1), + Block.box(4, 4, 2, 12, 12, 4), + Block.box(9, 6, 4, 10, 7, 5), + Block.box(6, 9, 4, 7, 10, 5), + Block.box(9, 9, 4, 10, 10, 5), + Block.box(12, 12, 1, 13, 13, 5), + Block.box(3, 12, 1, 4, 13, 5), + Block.box(12, 3, 1, 13, 4, 5), + Block.box(3, 3, 1, 4, 4, 5), + Block.box(12, 4, 4, 13, 12, 5), + Block.box(12, 4, 1, 13, 12, 2), + Block.box(3, 4, 4, 4, 12, 5), + Block.box(3, 4, 1, 4, 12, 2), + Block.box(4, 12, 4, 12, 13, 5), + Block.box(4, 3, 4, 12, 4, 5), + Block.box(4, 12, 1, 12, 13, 2), + Block.box(4, 3, 1, 12, 4, 2), + Block.box(6, 6, 4, 7, 7, 5), + Block.box(7, 7, 4, 9, 9, 6), + Block.box(7, 7, 6, 9, 9, 11), + Block.box(6, 6, 5, 10, 10, 6), + Block.box(6, 6, 7, 10, 10, 8), + Block.box(6, 6, 9, 10, 10, 10) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); + static final VoxelShape SHAPE_W = Stream.of( + Block.box(15, 1, 1, 16, 15, 15), + Block.box(12, 4, 4, 14, 12, 12), + Block.box(11, 6, 9, 12, 7, 10), + Block.box(11, 9, 6, 12, 10, 7), + Block.box(11, 9, 9, 12, 10, 10), + Block.box(11, 12, 12, 15, 13, 13), + Block.box(11, 12, 3, 15, 13, 4), + Block.box(11, 3, 12, 15, 4, 13), + Block.box(11, 3, 3, 15, 4, 4), + Block.box(11, 4, 12, 12, 12, 13), + Block.box(14, 4, 12, 15, 12, 13), + Block.box(11, 4, 3, 12, 12, 4), + Block.box(14, 4, 3, 15, 12, 4), + Block.box(11, 12, 4, 12, 13, 12), + Block.box(11, 3, 4, 12, 4, 12), + Block.box(14, 12, 4, 15, 13, 12), + Block.box(14, 3, 4, 15, 4, 12), + Block.box(11, 6, 6, 12, 7, 7), + Block.box(10, 7, 7, 12, 9, 9), + Block.box(5, 7, 7, 10, 9, 9), + Block.box(10, 6, 6, 11, 10, 10), + Block.box(8, 6, 6, 9, 10, 10), + Block.box(6, 6, 6, 7, 10, 10) + ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); } static final class TinyTorchShapes { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/RenderWorm.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/RenderWorm.java index 30ebccf37..be5d147a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/RenderWorm.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/RenderWorm.java @@ -46,7 +46,7 @@ public class RenderWorm extends EntityRenderer { public void render(EntityWorm entity, float partialTicks, float p_225623_3_, PoseStack matrix, MultiBufferSource buffer, int light) { boolean isSnail = entity.getCustomName().getString().equalsIgnoreCase("snail mail"); matrix.pushPose(); - matrix.translate(0, 0.7F, 0); + matrix.translate(0, 0.75F, 0); double boop = Util.getMillis() / 70D; matrix.mulPose(Axis.YP.rotationDegrees(-(float) (boop % 360))); matrix.translate(0,0,0.4); diff --git a/src/main/resources/assets/actuallyadditions/models/block/lamp_controller.json b/src/main/resources/assets/actuallyadditions/models/block/lamp_controller.json index 1715a2cae..8165f3299 100644 --- a/src/main/resources/assets/actuallyadditions/models/block/lamp_controller.json +++ b/src/main/resources/assets/actuallyadditions/models/block/lamp_controller.json @@ -11,73 +11,85 @@ }, "elements": [ { - "from": [0, 15, 0], - "to": [1, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 23, 8]}, + "from": [0, 4, 4], + "to": [1, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, "faces": { - "north": {"uv": [15, 0, 16, 1], "texture": "#base", "cullface": "north"}, - "east": {"uv": [15, 0, 16, 16], "rotation": 270, "texture": "#base"}, - "south": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "south"}, - "west": {"uv": [15, 0, 16, 16], "rotation": 90, "texture": "#base", "cullface": "west"}, - "up": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#base", "cullface": "up"}, - "down": {"uv": [15, 0, 16, 16], "texture": "#base"} + "north": {"uv": [4, 4, 5, 12], "texture": "#back"}, + "south": {"uv": [11, 4, 12, 12], "texture": "#back"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#back", "cullface": "west"}, + "up": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#back"}, + "down": {"uv": [12, 11, 4, 12], "rotation": 90, "texture": "#back"} } }, { - "from": [15, 15, 0], - "to": [16, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [23, 23, 8]}, + "from": [1, 1, 1], + "to": [15, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "north"}, - "east": {"uv": [15, 0, 16, 16], "rotation": 90, "texture": "#base", "cullface": "east"}, - "south": {"uv": [15, 0, 16, 1], "texture": "#base", "cullface": "south"}, - "west": {"uv": [15, 0, 16, 16], "rotation": 270, "texture": "#base"}, - "up": {"uv": [15, 0, 16, 16], "texture": "#base", "cullface": "up"}, - "down": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#base"} + "north": {"uv": [1, 1, 15, 15], "rotation": 180, "texture": "#front"}, + "east": {"uv": [1, 1, 15, 15], "texture": "#side"}, + "south": {"uv": [1, 1, 15, 15], "texture": "#5"}, + "west": {"uv": [1, 1, 15, 15], "texture": "#base"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#top"}, + "down": {"uv": [1, 1, 15, 15], "rotation": 180, "texture": "#top"} } }, { - "from": [1, 15, 0], - "to": [15, 16, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [9, 23, 8]}, + "from": [0, 1, 0], + "to": [1, 15, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#base", "cullface": "north"}, - "south": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base"}, - "up": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base", "cullface": "up"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base"} + "north": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "north"}, + "east": {"uv": [15, 1, 16, 15], "texture": "#base"}, + "south": {"uv": [15, 1, 16, 15], "texture": "#base"}, + "west": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "west"} } }, { - "from": [1, 15, 15], - "to": [15, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [9, 23, 23]}, + "from": [15, 1, 0], + "to": [16, 15, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 8]}, "faces": { - "north": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#base", "cullface": "south"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#base", "cullface": "up"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#base"} + "north": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "north"}, + "east": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "east"}, + "south": {"uv": [0, 1, 1, 15], "texture": "#base"}, + "west": {"uv": [0, 1, 1, 15], "texture": "#base"} } }, { - "from": [1, 0, 15], - "to": [15, 1, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 23]}, + "from": [15, 1, 15], + "to": [16, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 23]}, "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#base", "cullface": "south"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#base"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#base", "cullface": "down"} + "north": {"uv": [15, 1, 16, 15], "texture": "#base"}, + "east": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "east"}, + "south": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "south"}, + "west": {"uv": [15, 1, 16, 15], "texture": "#base"} } }, { - "from": [1, 0, 0], - "to": [15, 1, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]}, + "from": [0, 1, 15], + "to": [1, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 23]}, "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#base", "cullface": "north"}, - "south": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base"}, - "down": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base", "cullface": "down"} + "north": {"uv": [0, 1, 1, 15], "texture": "#base"}, + "east": {"uv": [0, 1, 1, 15], "texture": "#base"}, + "south": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "south"}, + "west": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "west"} + } + }, + { + "from": [0, 0, 0], + "to": [1, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, + "faces": { + "north": {"uv": [15, 15, 16, 16], "texture": "#base", "cullface": "north"}, + "east": {"uv": [0, 0, 1, 16], "rotation": 90, "texture": "#base"}, + "south": {"uv": [0, 15, 1, 16], "texture": "#base", "cullface": "south"}, + "west": {"uv": [0, 0, 1, 16], "rotation": 270, "texture": "#base", "cullface": "west"}, + "up": {"uv": [0, 0, 1, 16], "texture": "#base"}, + "down": {"uv": [0, 0, 1, 16], "rotation": 180, "texture": "#base", "cullface": "down"} } }, { @@ -94,135 +106,73 @@ } }, { - "from": [0, 0, 0], - "to": [1, 1, 16], - "faces": { - "north": {"uv": [15, 15, 16, 16], "texture": "#base", "cullface": "north"}, - "east": {"uv": [0, 0, 1, 16], "rotation": 90, "texture": "#base"}, - "south": {"uv": [0, 15, 1, 16], "texture": "#base", "cullface": "south"}, - "west": {"uv": [0, 0, 1, 16], "rotation": 270, "texture": "#base", "cullface": "west"}, - "up": {"uv": [0, 0, 1, 16], "texture": "#base"}, - "down": {"uv": [0, 0, 1, 16], "rotation": 180, "texture": "#base", "cullface": "down"} - } - }, - { - "from": [0, 1, 15], - "to": [1, 15, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 23]}, - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#base"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#base"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "south"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "west"} - } - }, - { - "from": [15, 1, 15], - "to": [16, 15, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [23, 9, 23]}, - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#base"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "east"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "south"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#base"} - } - }, - { - "from": [15, 1, 0], - "to": [16, 15, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [23, 9, 8]}, - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "north"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "east"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#base"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#base"} - } - }, - { - "from": [0, 1, 0], - "to": [1, 15, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "north"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#base"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#base"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "west"} - } - }, - { - "from": [1, 14, 1], - "to": [15, 15, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 21, 8]}, - "faces": { - "north": {"uv": [1, 1, 15, 2], "rotation": 180, "texture": "#front"}, - "east": {"uv": [1, 1, 15, 2], "texture": "#side"}, - "south": {"uv": [1, 1, 15, 2], "texture": "#back"}, - "west": {"uv": [1, 1, 15, 2], "texture": "#side"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#top"}, - "down": {"uv": [1, 1, 15, 15], "rotation": 180, "texture": "#base"} - } - }, - { - "from": [1, 1, 1], - "to": [15, 2, 15], - "faces": { - "north": {"uv": [1, 14, 15, 15], "texture": "#front"}, - "east": {"uv": [1, 14, 15, 15], "texture": "#side"}, - "south": {"uv": [1, 14, 15, 15], "rotation": 180, "texture": "#back"}, - "west": {"uv": [1, 14, 15, 15], "texture": "#side"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#base"}, - "down": {"uv": [1, 1, 15, 15], "rotation": 180, "texture": "#top"} - } - }, - { - "from": [14, 2, 1], - "to": [15, 14, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [22, 8, 8]}, - "faces": { - "north": {"uv": [1, 2, 2, 14], "texture": "#base"}, - "east": {"uv": [1, 2, 15, 14], "texture": "#side"}, - "south": {"uv": [14, 2, 15, 14], "texture": "#back"}, - "west": {"uv": [2, 2, 16, 14], "texture": "#base"} - } - }, - { - "from": [1, 2, 1], - "to": [2, 14, 15], + "from": [1, 0, 0], + "to": [15, 1, 1], "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]}, "faces": { - "north": {"uv": [14, 2, 15, 14], "texture": "#base"}, - "east": {"uv": [2, 2, 16, 14], "texture": "#base"}, - "south": {"uv": [1, 2, 2, 14], "texture": "#back"}, - "west": {"uv": [1, 2, 15, 14], "texture": "#back"} + "north": {"uv": [1, 15, 15, 16], "texture": "#base", "cullface": "north"}, + "south": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base"}, + "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base"}, + "down": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base", "cullface": "down"} } }, { - "from": [2, 2, 14], - "to": [14, 14, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 22]}, + "from": [1, 0, 15], + "to": [15, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 23]}, "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#base"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#5"} + "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#base"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#base", "cullface": "south"}, + "up": {"uv": [1, 15, 15, 16], "texture": "#base"}, + "down": {"uv": [1, 15, 15, 16], "texture": "#base", "cullface": "down"} } }, { - "from": [2, 2, 1], - "to": [14, 14, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9]}, + "from": [1, 15, 15], + "to": [15, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 23]}, "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#front"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#base"} + "north": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base"}, + "south": {"uv": [1, 0, 15, 1], "texture": "#base", "cullface": "south"}, + "up": {"uv": [1, 0, 15, 1], "texture": "#base", "cullface": "up"}, + "down": {"uv": [1, 0, 15, 1], "texture": "#base"} } }, { - "from": [0, 4, 4], - "to": [1, 12, 12], + "from": [1, 15, 0], + "to": [15, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]}, "faces": { - "north": {"uv": [4, 4, 5, 12], "texture": "#back"}, - "south": {"uv": [11, 4, 12, 12], "texture": "#back"}, - "west": {"uv": [4, 4, 12, 12], "texture": "#back", "cullface": "west"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#back"}, - "down": {"uv": [12, 11, 4, 12], "rotation": 90, "texture": "#back"} + "north": {"uv": [1, 0, 15, 1], "texture": "#base", "cullface": "north"}, + "south": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base"}, + "up": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base", "cullface": "up"}, + "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#base"} + } + }, + { + "from": [15, 15, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "north"}, + "east": {"uv": [15, 0, 16, 16], "rotation": 90, "texture": "#base", "cullface": "east"}, + "south": {"uv": [15, 0, 16, 1], "texture": "#base", "cullface": "south"}, + "west": {"uv": [15, 0, 16, 16], "rotation": 270, "texture": "#base"}, + "up": {"uv": [15, 0, 16, 16], "texture": "#base", "cullface": "up"}, + "down": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#base"} + } + }, + { + "from": [0, 15, 0], + "to": [1, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [15, 0, 16, 1], "texture": "#base", "cullface": "north"}, + "east": {"uv": [15, 0, 16, 16], "rotation": 270, "texture": "#base"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "south"}, + "west": {"uv": [15, 0, 16, 16], "rotation": 90, "texture": "#base", "cullface": "west"}, + "up": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#base", "cullface": "up"}, + "down": {"uv": [15, 0, 16, 16], "texture": "#base"} } } ], diff --git a/src/main/resources/assets/actuallyadditions/models/block/oil_generator.json b/src/main/resources/assets/actuallyadditions/models/block/oil_generator.json index 20e96548d..d0c122014 100644 --- a/src/main/resources/assets/actuallyadditions/models/block/oil_generator.json +++ b/src/main/resources/assets/actuallyadditions/models/block/oil_generator.json @@ -57,47 +57,51 @@ } }, { - "from": [0, 1, 15], + "from": [0, 0, 15], "to": [1, 15, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 23]}, "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#base"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#base"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "south"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "west"} + "north": {"uv": [0, 1, 1, 16], "texture": "#base"}, + "east": {"uv": [0, 1, 1, 16], "texture": "#base"}, + "south": {"uv": [0, 1, 1, 16], "texture": "#base", "cullface": "south"}, + "west": {"uv": [0, 1, 1, 16], "texture": "#base", "cullface": "west"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "down"} } }, { - "from": [15, 1, 15], + "from": [15, 0, 15], "to": [16, 15, 16], "rotation": {"angle": 0, "axis": "y", "origin": [23, 9, 23]}, "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#base"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "east"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "south"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#base"} + "north": {"uv": [15, 1, 16, 16], "texture": "#base"}, + "east": {"uv": [15, 1, 16, 16], "texture": "#base", "cullface": "east"}, + "south": {"uv": [15, 1, 16, 16], "texture": "#base", "cullface": "south"}, + "west": {"uv": [15, 1, 16, 16], "texture": "#base"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "down"} } }, { - "from": [15, 1, 0], + "from": [15, 0, 0], "to": [16, 15, 1], "rotation": {"angle": 0, "axis": "y", "origin": [23, 9, 8]}, "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "north"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#base", "cullface": "east"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#base"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#base"} + "north": {"uv": [0, 1, 1, 16], "texture": "#base", "cullface": "north"}, + "east": {"uv": [0, 1, 1, 16], "texture": "#base", "cullface": "east"}, + "south": {"uv": [0, 1, 1, 16], "texture": "#base"}, + "west": {"uv": [0, 1, 1, 16], "texture": "#base"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "down"} } }, { - "from": [0, 1, 0], + "from": [0, 0, 0], "to": [1, 15, 1], "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "north"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#base"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#base"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#base", "cullface": "west"} + "north": {"uv": [15, 1, 16, 16], "texture": "#base", "cullface": "north"}, + "east": {"uv": [15, 1, 16, 16], "texture": "#base"}, + "south": {"uv": [15, 1, 16, 16], "texture": "#base"}, + "west": {"uv": [15, 1, 16, 16], "texture": "#base", "cullface": "west"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#base", "cullface": "down"} } }, { @@ -236,53 +240,6 @@ "up": {"uv": [2, 2, 8, 7], "texture": "#animation"}, "down": {"uv": [0, 0, 12, 12], "texture": "#animation"} } - }, - { - "from": [0, 0, 15], - "to": [1, 1, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 23]}, - "faces": { - "north": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "east": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "south": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "south"}, - "west": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "west"}, - "down": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "down"} - } - }, - { - "from": [15, 0, 15], - "to": [16, 1, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 23]}, - "faces": { - "north": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "east": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "east"}, - "south": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "south"}, - "west": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "down": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "down"} - } - }, - { - "from": [15, 0, 0], - "to": [16, 1, 1], - "rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 8]}, - "faces": { - "north": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "north"}, - "east": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "east"}, - "south": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "west": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "down": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "down"} - } - }, - { - "from": [0, 0, 0], - "to": [1, 1, 1], - "faces": { - "north": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "north"}, - "east": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "south": {"uv": [2, 1, 3, 2], "texture": "#base"}, - "west": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "west"}, - "down": {"uv": [2, 1, 3, 2], "texture": "#base", "cullface": "down"} - } } ], "display": { diff --git a/src/main/resources/assets/actuallyadditions/textures/item/worm.png b/src/main/resources/assets/actuallyadditions/textures/item/worm.png index df4918cffe8cd0851f6b386a0f40ea444f33b176..5fc5584a315713d4e79318f13aeebdd10cdbde07 100644 GIT binary patch delta 580 zcmV-K0=xaR8u0{>IDY~oNkl7$FqITg0+7(7dcmsF= zc!sg)%zCz^4Vk!2aOd<=p4o3jol$$$!HrXRjW}66Uej`-j#-uO7%K z>MSP!I66OTMPvnV*fMuZD&7Vyt(wz4NGm<*XX*8WEKHi-Gn-<7%)BgAmDFC(}FhmQS0PYJ`X{tN+ zjR3MQXgyBj%{vsMs0J%iM+<;dZTJND3yFK| Sln_q<0000kDZB delta 3357 zcmV+&4dU|g1hg8EIDZOHX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHzp+MQEpR8#2| zJ@?-9LQ9B%luK_?6$l_wLW_VDktQl32@pz%A)(n7QNa;KMFbnjpojyGj)066Q7jCK z3fKqaA)=0hqlk*i`{8?|Yu3E?=FR@K*FNX0^PRKL2fzpnmVZbyQ8j=JsX`tR;Dg7+ z#^K~HK!FM*Z~zbpvt%K2{UZSY_f59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy001CkNK#Dz0D2_=0Dyx40Dt-a z004mL004C`008P>0026e000+nl3&F}0007CNklF|9LK-EMMbD3b}u0l zv#^Q6A|%4F76h@E)q{ufu>(Be&tlm@N)}}L z!^RTJmQZ3W!mrcQnQ{K?xOqt5?|(GRy!pQOhTre=`_3a~Mk5hGgCPa}fk2bENM_Re zHwz1|FrOXf>h=dHp)df@TsdTV?z)1tC-*rPQE~NBKLH>BY<$Uf1tL;PP-GSXfY#Q9 z;Q6zMW)?vr6CaKAajCM0bFBfqYYvkbFw>&|0N(!i#8)o&p;j#7z5Wq{Pk-N#NkAr& z6p%bPhv3Z#@Ew})B)0KdNfrrfRT?CKBPm>_u| z1x~9#GLts7`uXfIKOWJzE`Ol7GT|s&FfzfnfRPC+n;WKWIr6}X3D1WTY-NGuffP8& z{y>!RvG@bK?i^@@1)c)CJ5^|-lUUi@*q?pzPCxtR!Ay^Wmd;MD6^n?D=g3n)W}*~0 z0Rm3GKzIgggFRFWV!%|qg8@MQx(cnW3%A$5kuM$y7DUxJiQ_OdSVd&FiY<$tmgn&z1r>GjIYV#SYym-LAc(C>P3jjbHoiy>lQ{Y