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