    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    }