package openblocks.common.block;
import net.minecraft.block.material.Material;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import openblocks.common.tileentity.TileEntitySprinkler;
import openmods.block.BlockRotationMode;
import openmods.geometry.BlockSpaceTransform;
import openmods.geometry.Orientation;
import openmods.infobook.BookDocumentation;
@BookDocumentation
public class BlockSprinkler extends OpenBlock {
public BlockSprinkler() {
super(Material.water);
setRotationMode(BlockRotationMode.TWO_DIRECTIONS);
setRenderMode(RenderMode.TESR_ONLY);
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
setBlockBoundsBasedOnState(world, x, y, z);
return super.getSelectedBoundingBoxFromPool(world, x, y, z);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
setBlockBoundsBasedOnState(world, x, y, z);
return super.getCollisionBoundingBoxFromPool(world, x, y, z);
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
TileEntitySprinkler sprinkler = getTileEntity(world, x, y, z, TileEntitySprinkler.class);
if (sprinkler != null) {
final Orientation orientation = sprinkler.getOrientation();
final AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(0.3, 0.0, 0.0, 0.7, 0.3, 1.0);
final AxisAlignedBB rotatedAabb = BlockSpaceTransform.instance.mapBlockToWorld(orientation, aabb);
setBlockBounds(rotatedAabb);
}
}
@Override
public boolean canPlaceBlockOnSide(World world, int x, int y, int z, ForgeDirection side) {
return isOnTopOfSolidBlock(world, x, y, z, side);
}
@Override
public boolean isReplaceable(IBlockAccess arg0, int arg1, int arg2, int arg3) {
return false;
}
}