filename:
common/src/main/java/rearth/oritech/block/blocks/pipes/item/ItemPipeConnectionBlock.java
branch:
1.21
back to repo
package rearth.oritech.block.blocks.pipes.item;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.ShapeContext;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.Nullable;
import rearth.oritech.api.item.ItemApi;
import rearth.oritech.block.blocks.pipes.ExtractablePipeConnectionBlock;
import rearth.oritech.block.entity.pipes.GenericPipeInterfaceEntity;
import rearth.oritech.block.entity.pipes.ItemPipeInterfaceEntity;
import rearth.oritech.init.BlockContent;
import static rearth.oritech.block.blocks.pipes.item.ItemPipeBlock.ITEM_PIPE_DATA;
public class ItemPipeConnectionBlock extends ExtractablePipeConnectionBlock {
public ItemPipeConnectionBlock(Settings settings) {
super(settings);
}
@Override
public TriFunction<World, BlockPos, Direction, Boolean> apiValidationFunction() {
return ((world, pos, direction) -> ItemApi.BLOCK.find(world, pos, direction) != null);
}
@Nullable
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new ItemPipeInterfaceEntity(pos, state);
}
@Override
public BlockState getConnectionBlock() {
return BlockContent.ITEM_PIPE_CONNECTION.getDefaultState();
}
@Override
public BlockState getNormalBlock() {
return BlockContent.ITEM_PIPE.getDefaultState();
}
@Override
protected VoxelShape[] createShapes() {
VoxelShape inner = Block.createCuboidShape(6, 6, 6, 10, 10, 10);
VoxelShape north = Block.createCuboidShape(6, 6, 0, 10, 10, 6);
VoxelShape east = Block.createCuboidShape(0, 6, 6, 6, 10, 10);
VoxelShape south = Block.createCuboidShape(6, 6, 10, 10, 10, 16);
VoxelShape west = Block.createCuboidShape(10, 6, 6, 16, 10, 10);
VoxelShape up = Block.createCuboidShape(6, 10, 6, 10, 16, 10);
VoxelShape down = Block.createCuboidShape(6, 0, 6, 10, 6, 10);
return new VoxelShape[]{inner, north, west, south, east, up, down};
}
@Override
public String getPipeTypeName() {
return "item";
}
@Override
public boolean connectToOwnBlockType(Block block) {
return block instanceof ItemPipeBlock || block instanceof ItemPipeConnectionBlock || block instanceof ItemPipeDuctBlock;
}
@Override
public GenericPipeInterfaceEntity.PipeNetworkData getNetworkData(World world) {
return ITEM_PIPE_DATA.computeIfAbsent(world.getRegistryKey().getValue(), data -> new GenericPipeInterfaceEntity.PipeNetworkData());
}
public static class FramedItemPipeConnectionBlock extends ItemPipeConnectionBlock {
public FramedItemPipeConnectionBlock(Settings settings) {
super(settings);
}
@Override
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
return VoxelShapes.fullCube();
}
@Override
public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
return state.getOutlineShape(world, pos);
}
@Override
public BlockState getNormalBlock() {
return BlockContent.FRAMED_ITEM_PIPE.getDefaultState();
}
@Override
public BlockState getConnectionBlock() {
return BlockContent.FRAMED_ITEM_PIPE_CONNECTION.getDefaultState();
}
}
public static class TransparentItemPipeConnectionBlock extends ItemPipeConnectionBlock {
public TransparentItemPipeConnectionBlock(Settings settings) {
super(settings);
}
@Override
public BlockState getNormalBlock() {
return BlockContent.TRANSPARENT_ITEM_PIPE.getDefaultState();
}
@Override
public BlockState getConnectionBlock() {
return BlockContent.TRANSPARENT_ITEM_PIPE_CONNECTION.getDefaultState();
}
@Override
protected VoxelShape[] createShapes() {
VoxelShape inner = Block.createCuboidShape(5, 5, 5, 11, 11, 11);
VoxelShape north = Block.createCuboidShape(5, 5, 0, 11, 11, 5);
VoxelShape east = Block.createCuboidShape(0, 5, 5, 5, 11, 11);
VoxelShape south = Block.createCuboidShape(5, 5, 11, 11, 11, 16);
VoxelShape west = Block.createCuboidShape(11, 5, 5, 16, 11, 11);
VoxelShape up = Block.createCuboidShape(5, 11, 5, 11, 16, 11);
VoxelShape down = Block.createCuboidShape(5, 0, 5, 11, 5, 11);
return new VoxelShape[]{inner, north, west, south, east, up, down};
}
}
}