    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    }