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.setPlayerCreated(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.isReplaceable()) && 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 }