001package net.minecraft.world;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.block.material.Material;
006import net.minecraft.tileentity.TileEntity;
007import net.minecraft.util.Vec3Pool;
008import net.minecraft.world.biome.BiomeGenBase;
009
010public interface IBlockAccess
011{
012    /**
013     * Returns the block ID at coords x,y,z
014     */
015    int getBlockId(int i, int j, int k);
016
017    /**
018     * Returns the TileEntity associated with a given block in X,Y,Z coordinates, or null if no TileEntity exists
019     */
020    TileEntity getBlockTileEntity(int i, int j, int k);
021
022    @SideOnly(Side.CLIENT)
023
024    /**
025     * Any Light rendered on a 1.8 Block goes through here
026     */
027    int getLightBrightnessForSkyBlocks(int i, int j, int k, int l);
028
029    /**
030     * Returns the block metadata at coords x,y,z
031     */
032    int getBlockMetadata(int i, int j, int k);
033
034    @SideOnly(Side.CLIENT)
035    float getBrightness(int i, int j, int k, int l);
036
037    @SideOnly(Side.CLIENT)
038
039    /**
040     * Returns how bright the block is shown as which is the block's light value looked up in a lookup table (light
041     * values aren't linear for brightness). Args: x, y, z
042     */
043    float getLightBrightness(int i, int j, int k);
044
045    /**
046     * Returns the block's material.
047     */
048    Material getBlockMaterial(int i, int j, int k);
049
050    @SideOnly(Side.CLIENT)
051
052    /**
053     * Returns true if the block at the specified coordinates is an opaque cube. Args: x, y, z
054     */
055    boolean isBlockOpaqueCube(int i, int j, int k);
056
057    /**
058     * Indicate if a material is a normal solid opaque cube.
059     */
060    boolean isBlockNormalCube(int i, int j, int k);
061
062    @SideOnly(Side.CLIENT)
063
064    /**
065     * Returns true if the block at the specified coordinates is empty
066     */
067    boolean isAirBlock(int i, int j, int k);
068
069    @SideOnly(Side.CLIENT)
070
071    /**
072     * Gets the biome for a given set of x/z coordinates
073     */
074    BiomeGenBase getBiomeGenForCoords(int i, int j);
075
076    @SideOnly(Side.CLIENT)
077
078    /**
079     * Returns current world height.
080     */
081    int getHeight();
082
083    @SideOnly(Side.CLIENT)
084
085    /**
086     * set by !chunk.getAreLevelsEmpty
087     */
088    boolean extendedLevelsInChunkCache();
089
090    @SideOnly(Side.CLIENT)
091
092    /**
093     * Returns true if the block at the given coordinate has a solid (buildable) top surface.
094     */
095    boolean doesBlockHaveSolidTopSurface(int i, int j, int k);
096
097    /**
098     * Return the Vec3Pool object for this world.
099     */
100    Vec3Pool getWorldVec3Pool();
101
102    /**
103     * Is this block powering in the specified direction Args: x, y, z, direction
104     */
105    int isBlockProvidingPowerTo(int i, int j, int k, int l);
106}