001    package net.minecraft.block;
002    
003    import java.util.Random;
004    import net.minecraft.block.material.Material;
005    import net.minecraft.entity.player.EntityPlayer;
006    import net.minecraft.tileentity.TileEntity;
007    import net.minecraft.tileentity.TileEntityCommandBlock;
008    import net.minecraft.world.World;
009    
010    public class BlockCommandBlock extends BlockContainer
011    {
012        public BlockCommandBlock(int par1)
013        {
014            super(par1, 184, Material.iron);
015        }
016    
017        /**
018         * Returns a new instance of a block's tile entity class. Called on placing the block.
019         */
020        public TileEntity createNewTileEntity(World par1World)
021        {
022            return new TileEntityCommandBlock();
023        }
024    
025        /**
026         * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
027         * their own) Args: x, y, z, neighbor blockID
028         */
029        public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
030        {
031            if (!par1World.isRemote)
032            {
033                boolean var6 = par1World.isBlockIndirectlyGettingPowered(par2, par3, par4);
034                int var7 = par1World.getBlockMetadata(par2, par3, par4);
035                boolean var8 = (var7 & 1) != 0;
036    
037                if (var6 && !var8)
038                {
039                    par1World.setBlockMetadata(par2, par3, par4, var7 | 1);
040                    par1World.scheduleBlockUpdate(par2, par3, par4, this.blockID, this.tickRate());
041                }
042                else if (!var6 && var8)
043                {
044                    par1World.setBlockMetadata(par2, par3, par4, var7 & -2);
045                }
046            }
047        }
048    
049        /**
050         * Ticks the block if it's been scheduled
051         */
052        public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
053        {
054            TileEntity var6 = par1World.getBlockTileEntity(par2, par3, par4);
055    
056            if (var6 != null && var6 instanceof TileEntityCommandBlock)
057            {
058                ((TileEntityCommandBlock)var6).executeCommandOnPowered(par1World);
059            }
060        }
061    
062        /**
063         * How many world ticks before ticking
064         */
065        public int tickRate()
066        {
067            return 1;
068        }
069    
070        /**
071         * Called upon block activation (right click on the block.)
072         */
073        public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
074        {
075            TileEntityCommandBlock var10 = (TileEntityCommandBlock)par1World.getBlockTileEntity(par2, par3, par4);
076    
077            if (var10 != null)
078            {
079                par5EntityPlayer.displayGUIEditSign(var10);
080            }
081    
082            return true;
083        }
084    }