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.client.renderer.texture.IconRegister; 008import net.minecraft.creativetab.CreativeTabs; 009import net.minecraft.util.Icon; 010import net.minecraft.world.IBlockAccess; 011import net.minecraft.world.World; 012 013public class BlockMycelium extends Block 014{ 015 @SideOnly(Side.CLIENT) 016 private Icon field_94422_a; 017 @SideOnly(Side.CLIENT) 018 private Icon field_94421_b; 019 020 protected BlockMycelium(int par1) 021 { 022 super(par1, Material.grass); 023 this.setTickRandomly(true); 024 this.setCreativeTab(CreativeTabs.tabBlock); 025 } 026 027 @SideOnly(Side.CLIENT) 028 029 /** 030 * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata 031 */ 032 public Icon getBlockTextureFromSideAndMetadata(int par1, int par2) 033 { 034 return par1 == 1 ? this.field_94422_a : (par1 == 0 ? Block.dirt.getBlockTextureFromSide(par1) : this.field_94336_cN); 035 } 036 037 /** 038 * Ticks the block if it's been scheduled 039 */ 040 public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) 041 { 042 if (!par1World.isRemote) 043 { 044 if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2) 045 { 046 par1World.func_94575_c(par2, par3, par4, Block.dirt.blockID); 047 } 048 else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9) 049 { 050 for (int l = 0; l < 4; ++l) 051 { 052 int i1 = par2 + par5Random.nextInt(3) - 1; 053 int j1 = par3 + par5Random.nextInt(5) - 3; 054 int k1 = par4 + par5Random.nextInt(3) - 1; 055 int l1 = par1World.getBlockId(i1, j1 + 1, k1); 056 057 if (par1World.getBlockId(i1, j1, k1) == Block.dirt.blockID && par1World.getBlockLightValue(i1, j1 + 1, k1) >= 4 && par1World.getBlockLightOpacity(i1, j1 + 1, k1) <= 2) 058 { 059 par1World.func_94575_c(i1, j1, k1, this.blockID); 060 } 061 } 062 } 063 } 064 } 065 066 /** 067 * Returns the ID of the items to drop on destruction. 068 */ 069 public int idDropped(int par1, Random par2Random, int par3) 070 { 071 return Block.dirt.idDropped(0, par2Random, par3); 072 } 073 074 @SideOnly(Side.CLIENT) 075 076 /** 077 * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side 078 */ 079 public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) 080 { 081 if (par5 == 1) 082 { 083 return this.field_94422_a; 084 } 085 else if (par5 == 0) 086 { 087 return Block.dirt.getBlockTextureFromSide(par5); 088 } 089 else 090 { 091 Material material = par1IBlockAccess.getBlockMaterial(par2, par3 + 1, par4); 092 return material != Material.snow && material != Material.craftedSnow ? this.field_94336_cN : this.field_94421_b; 093 } 094 } 095 096 @SideOnly(Side.CLIENT) 097 public void func_94332_a(IconRegister par1IconRegister) 098 { 099 this.field_94336_cN = par1IconRegister.func_94245_a("mycel_side"); 100 this.field_94422_a = par1IconRegister.func_94245_a("mycel_top"); 101 this.field_94421_b = par1IconRegister.func_94245_a("snow_side"); 102 } 103 104 @SideOnly(Side.CLIENT) 105 106 /** 107 * A randomly called display update to be able to add particles or other items for display 108 */ 109 public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random) 110 { 111 super.randomDisplayTick(par1World, par2, par3, par4, par5Random); 112 113 if (par5Random.nextInt(10) == 0) 114 { 115 par1World.spawnParticle("townaura", (double)((float)par2 + par5Random.nextFloat()), (double)((float)par3 + 1.1F), (double)((float)par4 + par5Random.nextFloat()), 0.0D, 0.0D, 0.0D); 116 } 117 } 118}