package matteroverdrive.blocks; import matteroverdrive.blocks.includes.MOBlockContainer; import matteroverdrive.client.render.block.RendererBlockPipe; import matteroverdrive.tile.pipes.TileEntityPipe; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import java.util.List; public abstract class BlockPipe extends MOBlockContainer { public BlockPipe(Material material, String name) { super(material, name); this.useNeighborBrightness = true; this.setRotationType(-1); } @Override public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB bb, List list, Entity e) { float size = 0.34375f; float xMin = size; float yMin = size; float zMin = size; float xMax = 1 - size; float yMax = 1 - size; float zMax = 1 - size; this.setBlockBounds(xMin, yMin, zMin, xMax, yMax, zMax); super.addCollisionBoxesToList(world, x, y, z, bb, list, e); for(int i = 0;i < 6;i++) { ForgeDirection dir = ForgeDirection.values()[i]; if(isConnectableSide(dir,world,x,y,z)) { if(dir != null) { float xMinNew = xMin + size * dir.offsetX; float xMaxNew = xMax + size * dir.offsetX; float yMinNew = yMin + size * dir.offsetY; float yMaxNew = yMax + size * dir.offsetY; float zMinNew = zMin + size * dir.offsetZ; float zMaxNew = zMax + size * dir.offsetZ; this.setBlockBounds(xMinNew, yMinNew, zMinNew, xMaxNew, yMaxNew, zMaxNew); super.addCollisionBoxesToList(world, x, y, z, bb, list, e); } } } } @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { float size = 0.34375f; float xMin = size; float yMin = size; float zMin = size; float xMax = 1 - size; float yMax = 1 - size; float zMax = 1 - size; for(int i = 0;i < 6;i++) { ForgeDirection dir = ForgeDirection.values()[i]; if(isConnectableSide(dir, world, x, y, z)) { if(dir != null) { if (dir.offsetX < 0) { xMin = 0; } else if (dir.offsetX > 0) { xMax = 1; } if (dir.offsetY < 0) { yMin = 0; } else if (dir.offsetY > 0) { yMax = 1; } if (dir.offsetZ < 0) { zMin = 0; } else if (dir.offsetZ > 0) { zMax = 1; } } } } this.setBlockBounds(xMin, yMin, zMin, xMax, yMax, zMax); } @Override public void onBlockPlacedBy(World World, int x, int y, int z, EntityLivingBase player, ItemStack item) { } public boolean isConnectableSide(ForgeDirection dir, IBlockAccess world, int x, int y, int z) { TileEntityPipe pipe = (TileEntityPipe) world.getTileEntity(x, y, z); return pipe != null && pipe.isConnectableSide(dir); } @Override public int getRenderType() { return RendererBlockPipe.rendererID; } @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } }