001 package net.minecraft.block;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import java.util.Random;
006 import net.minecraft.block.material.Material;
007 import net.minecraft.creativetab.CreativeTabs;
008 import net.minecraft.enchantment.EnchantmentHelper;
009 import net.minecraft.entity.player.EntityPlayer;
010 import net.minecraft.item.ItemStack;
011 import net.minecraft.stats.StatList;
012 import net.minecraft.world.EnumSkyBlock;
013 import net.minecraft.world.IBlockAccess;
014 import net.minecraft.world.World;
015
016 public class BlockIce extends BlockBreakable
017 {
018 public BlockIce(int par1, int par2)
019 {
020 super(par1, par2, 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 var9 = this.createStackedBlock(par6);
059
060 if (var9 != null)
061 {
062 this.dropBlockAsItem_do(par1World, par3, par4, par5, var9);
063 }
064 }
065 else
066 {
067 if (par1World.provider.isHellWorld)
068 {
069 par1World.setBlockWithNotify(par3, par4, par5, 0);
070 return;
071 }
072
073 int var7 = EnchantmentHelper.getFortuneModifier(par2EntityPlayer);
074 this.dropBlockAsItem(par1World, par3, par4, par5, par6, var7);
075 Material var8 = par1World.getBlockMaterial(par3, par4 - 1, par5);
076
077 if (var8.blocksMovement() || var8.isLiquid())
078 {
079 par1World.setBlockWithNotify(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.setBlockWithNotify(par2, par3, par4, 0);
102 return;
103 }
104
105 this.dropBlockAsItem(par1World, par2, par3, par4, par1World.getBlockMetadata(par2, par3, par4), 0);
106 par1World.setBlockWithNotify(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 }