package choonster.testmod3.block.pipe;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLiquid;
import net.minecraft.block.state.IBlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* A fluid pipe.
* <p>
* Test for this thread:
* http://www.minecraftforge.net/forum/index.php/topic,34448.0.html
*
* @author Choonster
*/
public class BlockPipeFluid extends BlockPipeBasic {
public BlockPipeFluid() {
super("fluid_pipe");
}
@Override
protected boolean isValidConnection(IBlockState ownState, IBlockState neighbourState, IBlockAccess world, BlockPos ownPos, EnumFacing neighbourDirection) {
// Connect if the neighbouring block is another pipe
if (super.isValidConnection(ownState, neighbourState, world, ownPos, neighbourDirection)) {
return true;
}
final BlockPos neighbourPos = ownPos.offset(neighbourDirection);
final Block neighbourBlock = neighbourState.getBlock();
// Connect if the neighbouring block has a TileEntity with an IFluidHandler for the adjacent face
if (neighbourBlock.hasTileEntity(neighbourState)) {
final TileEntity tileEntity = world.getTileEntity(neighbourPos);
return tileEntity != null && tileEntity.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, neighbourDirection.getOpposite());
}
// Connect if the neighbouring block is a fluid/liquid, FluidUtil.getFluidHandler will provide an IFluidHandler wrapper to drain from it
return neighbourBlock instanceof IFluidBlock || neighbourBlock instanceof BlockLiquid;
}
@SideOnly(Side.CLIENT)
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
}