    001package net.minecraft.block;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.util.Random;
    006import net.minecraft.block.material.Material;
    007import net.minecraft.creativetab.CreativeTabs;
    008import net.minecraft.enchantment.EnchantmentHelper;
    009import net.minecraft.entity.player.EntityPlayer;
    010import net.minecraft.item.ItemStack;
    011import net.minecraft.stats.StatList;
    012import net.minecraft.world.EnumSkyBlock;
    013import net.minecraft.world.IBlockAccess;
    014import net.minecraft.world.World;
    015
    016public class BlockIce extends BlockBreakable
    017{
    018    public BlockIce(int par1)
    019    {
    020        super(par1, "ice", Material.ice, false);
    021        this.slipperiness = 0.98F;
    022        this.setTickRandomly(true);
    023        this.setCreativeTab(CreativeTabs.tabBlock);
    024    }
    025
    026    @SideOnly(Side.CLIENT)
    027
    028    /**
    029     * Returns which pass should this block be rendered on. 0 for solids and 1 for alpha
    030     */
    031    public int getRenderBlockPass()
    032    {
    033        return 1;
    034    }
    035
    036    @SideOnly(Side.CLIENT)
    037
    038    /**
    039     * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
    040     * coordinates.  Args: blockAccess, x, y, z, side
    041     */
    042    public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
    043    {
    044        return super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, 1 - par5);
    045    }
    046
    047    /**
    048     * Called when the player destroys a block with an item that can harvest it. (i, j, k) are the coordinates of the
    049     * block and l is the block's subtype/damage.
    050     */
    051    public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6)
    052    {
    053        par2EntityPlayer.addStat(StatList.mineBlockStatArray[this.blockID], 1);
    054        par2EntityPlayer.addExhaustion(0.025F);
    055
    056        if (this.canSilkHarvest() && EnchantmentHelper.getSilkTouchModifier(par2EntityPlayer))
    057        {
    058            ItemStack itemstack = this.createStackedBlock(par6);
    059
    060            if (itemstack != null)
    061            {
    062                this.dropBlockAsItem_do(par1World, par3, par4, par5, itemstack);
    063            }
    064        }
    065        else
    066        {
    067            if (par1World.provider.isHellWorld)
    068            {
    069                par1World.setBlockToAir(par3, par4, par5);
    070                return;
    071            }
    072
    073            int i1 = EnchantmentHelper.getFortuneModifier(par2EntityPlayer);
    074            this.dropBlockAsItem(par1World, par3, par4, par5, par6, i1);
    075            Material material = par1World.getBlockMaterial(par3, par4 - 1, par5);
    076
    077            if (material.blocksMovement() || material.isLiquid())
    078            {
    079                par1World.setBlock(par3, par4, par5, Block.waterMoving.blockID);
    080            }
    081        }
    082    }
    083
    084    /**
    085     * Returns the quantity of items to drop on block destruction.
    086     */
    087    public int quantityDropped(Random par1Random)
    088    {
    089        return 0;
    090    }
    091
    092    /**
    093     * Ticks the block if it's been scheduled
    094     */
    095    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
    096    {
    097        if (par1World.getSavedLightValue(EnumSkyBlock.Block, par2, par3, par4) > 11 - Block.lightOpacity[this.blockID])
    098        {
    099            if (par1World.provider.isHellWorld)
    100            {
    101                par1World.setBlockToAir(par2, par3, par4);
    102                return;
    103            }
    104
    105            this.dropBlockAsItem(par1World, par2, par3, par4, par1World.getBlockMetadata(par2, par3, par4), 0);
    106            par1World.setBlock(par2, par3, par4, Block.waterStill.blockID);
    107        }
    108    }
    109
    110    /**
    111     * Returns the mobility information of the block, 0 = free, 1 = can't push but can move over, 2 = total immobility
    112     * and stop pistons
    113     */
    114    public int getMobilityFlag()
    115    {
    116        return 0;
    117    }
    118}