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