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