001    package net.minecraft.tileentity;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import net.minecraft.command.ICommandManager;
006    import net.minecraft.command.ICommandSender;
007    import net.minecraft.nbt.NBTTagCompound;
008    import net.minecraft.network.packet.Packet;
009    import net.minecraft.network.packet.Packet132TileEntityData;
010    import net.minecraft.server.MinecraftServer;
011    import net.minecraft.util.ChunkCoordinates;
012    import net.minecraft.world.World;
013    
014    public class TileEntityCommandBlock extends TileEntity implements ICommandSender
015    {
016        /** The command this block will execute when powered. */
017        private String command = "";
018    
019        /**
020         * Sets the command this block will execute when powered.
021         */
022        public void setCommand(String par1Str)
023        {
024            this.command = par1Str;
025            this.onInventoryChanged();
026        }
027    
028        @SideOnly(Side.CLIENT)
029    
030        /**
031         * Return the command this command block is set to execute.
032         */
033        public String getCommand()
034        {
035            return this.command;
036        }
037    
038        /**
039         * Execute the command, called when the command block is powered.
040         */
041        public void executeCommandOnPowered(World par1World)
042        {
043            if (!par1World.isRemote)
044            {
045                MinecraftServer var2 = MinecraftServer.getServer();
046    
047                if (var2 != null && var2.isCommandBlockEnabled())
048                {
049                    ICommandManager var3 = var2.getCommandManager();
050                    var3.executeCommand(this, this.command);
051                }
052            }
053        }
054    
055        /**
056         * Gets the name of this command sender (usually username, but possibly "Rcon")
057         */
058        public String getCommandSenderName()
059        {
060            return "@";
061        }
062    
063        public void sendChatToPlayer(String par1Str) {}
064    
065        /**
066         * Returns true if the command sender is allowed to use the given command.
067         */
068        public boolean canCommandSenderUseCommand(int par1, String par2Str)
069        {
070            return par1 <= 2;
071        }
072    
073        /**
074         * Translates and formats the given string key with the given arguments.
075         */
076        public String translateString(String par1Str, Object ... par2ArrayOfObj)
077        {
078            return par1Str;
079        }
080    
081        /**
082         * Writes a tile entity to NBT.
083         */
084        public void writeToNBT(NBTTagCompound par1NBTTagCompound)
085        {
086            super.writeToNBT(par1NBTTagCompound);
087            par1NBTTagCompound.setString("Command", this.command);
088        }
089    
090        /**
091         * Reads a tile entity from NBT.
092         */
093        public void readFromNBT(NBTTagCompound par1NBTTagCompound)
094        {
095            super.readFromNBT(par1NBTTagCompound);
096            this.command = par1NBTTagCompound.getString("Command");
097        }
098    
099        /**
100         * Return the coordinates for this player as ChunkCoordinates.
101         */
102        public ChunkCoordinates getPlayerCoordinates()
103        {
104            return new ChunkCoordinates(this.xCoord, this.yCoord, this.zCoord);
105        }
106    
107        /**
108         * Overriden in a sign to provide the text.
109         */
110        public Packet getDescriptionPacket()
111        {
112            NBTTagCompound var1 = new NBTTagCompound();
113            this.writeToNBT(var1);
114            return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 2, var1);
115        }
116    }