001 package net.minecraft.src;
002
003 public class BlockPumpkin extends BlockDirectional
004 {
005 /** Boolean used to seperate different states of blocks */
006 private boolean blockType;
007
008 protected BlockPumpkin(int par1, int par2, boolean par3)
009 {
010 super(par1, Material.pumpkin);
011 this.blockIndexInTexture = par2;
012 this.setTickRandomly(true);
013 this.blockType = par3;
014 this.setCreativeTab(CreativeTabs.tabBlock);
015 }
016
017 /**
018 * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
019 */
020 public int getBlockTextureFromSideAndMetadata(int par1, int par2)
021 {
022 if (par1 == 1)
023 {
024 return this.blockIndexInTexture;
025 }
026 else if (par1 == 0)
027 {
028 return this.blockIndexInTexture;
029 }
030 else
031 {
032 int var3 = this.blockIndexInTexture + 1 + 16;
033
034 if (this.blockType)
035 {
036 ++var3;
037 }
038
039 return par2 == 2 && par1 == 2 ? var3 : (par2 == 3 && par1 == 5 ? var3 : (par2 == 0 && par1 == 3 ? var3 : (par2 == 1 && par1 == 4 ? var3 : this.blockIndexInTexture + 16)));
040 }
041 }
042
043 /**
044 * Returns the block texture based on the side being looked at. Args: side
045 */
046 public int getBlockTextureFromSide(int par1)
047 {
048 return par1 == 1 ? this.blockIndexInTexture : (par1 == 0 ? this.blockIndexInTexture : (par1 == 3 ? this.blockIndexInTexture + 1 + 16 : this.blockIndexInTexture + 16));
049 }
050
051 /**
052 * Called whenever the block is added into the world. Args: world, x, y, z
053 */
054 public void onBlockAdded(World par1World, int par2, int par3, int par4)
055 {
056 super.onBlockAdded(par1World, par2, par3, par4);
057
058 if (par1World.getBlockId(par2, par3 - 1, par4) == Block.blockSnow.blockID && par1World.getBlockId(par2, par3 - 2, par4) == Block.blockSnow.blockID)
059 {
060 if (!par1World.isRemote)
061 {
062 par1World.setBlock(par2, par3, par4, 0);
063 par1World.setBlock(par2, par3 - 1, par4, 0);
064 par1World.setBlock(par2, par3 - 2, par4, 0);
065 EntitySnowman var9 = new EntitySnowman(par1World);
066 var9.setLocationAndAngles((double)par2 + 0.5D, (double)par3 - 1.95D, (double)par4 + 0.5D, 0.0F, 0.0F);
067 par1World.spawnEntityInWorld(var9);
068 par1World.notifyBlockChange(par2, par3, par4, 0);
069 par1World.notifyBlockChange(par2, par3 - 1, par4, 0);
070 par1World.notifyBlockChange(par2, par3 - 2, par4, 0);
071 }
072
073 for (int var10 = 0; var10 < 120; ++var10)
074 {
075 par1World.spawnParticle("snowshovel", (double)par2 + par1World.rand.nextDouble(), (double)(par3 - 2) + par1World.rand.nextDouble() * 2.5D, (double)par4 + par1World.rand.nextDouble(), 0.0D, 0.0D, 0.0D);
076 }
077 }
078 else if (par1World.getBlockId(par2, par3 - 1, par4) == Block.blockSteel.blockID && par1World.getBlockId(par2, par3 - 2, par4) == Block.blockSteel.blockID)
079 {
080 boolean var5 = par1World.getBlockId(par2 - 1, par3 - 1, par4) == Block.blockSteel.blockID && par1World.getBlockId(par2 + 1, par3 - 1, par4) == Block.blockSteel.blockID;
081 boolean var6 = par1World.getBlockId(par2, par3 - 1, par4 - 1) == Block.blockSteel.blockID && par1World.getBlockId(par2, par3 - 1, par4 + 1) == Block.blockSteel.blockID;
082
083 if (var5 || var6)
084 {
085 par1World.setBlock(par2, par3, par4, 0);
086 par1World.setBlock(par2, par3 - 1, par4, 0);
087 par1World.setBlock(par2, par3 - 2, par4, 0);
088
089 if (var5)
090 {
091 par1World.setBlock(par2 - 1, par3 - 1, par4, 0);
092 par1World.setBlock(par2 + 1, par3 - 1, par4, 0);
093 }
094 else
095 {
096 par1World.setBlock(par2, par3 - 1, par4 - 1, 0);
097 par1World.setBlock(par2, par3 - 1, par4 + 1, 0);
098 }
099
100 EntityIronGolem var7 = new EntityIronGolem(par1World);
101 var7.setBit1FlagTo(true);
102 var7.setLocationAndAngles((double)par2 + 0.5D, (double)par3 - 1.95D, (double)par4 + 0.5D, 0.0F, 0.0F);
103 par1World.spawnEntityInWorld(var7);
104
105 for (int var8 = 0; var8 < 120; ++var8)
106 {
107 par1World.spawnParticle("snowballpoof", (double)par2 + par1World.rand.nextDouble(), (double)(par3 - 2) + par1World.rand.nextDouble() * 3.9D, (double)par4 + par1World.rand.nextDouble(), 0.0D, 0.0D, 0.0D);
108 }
109
110 par1World.notifyBlockChange(par2, par3, par4, 0);
111 par1World.notifyBlockChange(par2, par3 - 1, par4, 0);
112 par1World.notifyBlockChange(par2, par3 - 2, par4, 0);
113
114 if (var5)
115 {
116 par1World.notifyBlockChange(par2 - 1, par3 - 1, par4, 0);
117 par1World.notifyBlockChange(par2 + 1, par3 - 1, par4, 0);
118 }
119 else
120 {
121 par1World.notifyBlockChange(par2, par3 - 1, par4 - 1, 0);
122 par1World.notifyBlockChange(par2, par3 - 1, par4 + 1, 0);
123 }
124 }
125 }
126 }
127
128 /**
129 * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z
130 */
131 public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
132 {
133 int var5 = par1World.getBlockId(par2, par3, par4);
134 return (var5 == 0 || Block.blocksList[var5].blockMaterial.isGroundCover()) && par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4);
135 }
136
137 /**
138 * Called when the block is placed in the world.
139 */
140 public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
141 {
142 int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
143 par1World.setBlockMetadataWithNotify(par2, par3, par4, var6);
144 }
145 }