001package net.minecraft.tileentity;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.nbt.NBTTagCompound;
006import net.minecraft.network.packet.Packet;
007import net.minecraft.network.packet.Packet130UpdateSign;
008
009public class TileEntitySign extends TileEntity
010{
011    /** An array of four strings storing the lines of text on the sign. */
012    public String[] signText = new String[] {"", "", "", ""};
013
014    /**
015     * The index of the line currently being edited. Only used on client side, but defined on both. Note this is only
016     * really used when the > < are going to be visible.
017     */
018    public int lineBeingEdited = -1;
019    private boolean isEditable = true;
020
021    /**
022     * Writes a tile entity to NBT.
023     */
024    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
025    {
026        super.writeToNBT(par1NBTTagCompound);
027        par1NBTTagCompound.setString("Text1", this.signText[0]);
028        par1NBTTagCompound.setString("Text2", this.signText[1]);
029        par1NBTTagCompound.setString("Text3", this.signText[2]);
030        par1NBTTagCompound.setString("Text4", this.signText[3]);
031    }
032
033    /**
034     * Reads a tile entity from NBT.
035     */
036    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
037    {
038        this.isEditable = false;
039        super.readFromNBT(par1NBTTagCompound);
040
041        for (int i = 0; i < 4; ++i)
042        {
043            this.signText[i] = par1NBTTagCompound.getString("Text" + (i + 1));
044
045            if (this.signText[i].length() > 15)
046            {
047                this.signText[i] = this.signText[i].substring(0, 15);
048            }
049        }
050    }
051
052    /**
053     * Overriden in a sign to provide the text.
054     */
055    public Packet getDescriptionPacket()
056    {
057        String[] astring = new String[4];
058        System.arraycopy(this.signText, 0, astring, 0, 4);
059        return new Packet130UpdateSign(this.xCoord, this.yCoord, this.zCoord, astring);
060    }
061
062    public boolean isEditable()
063    {
064        return this.isEditable;
065    }
066
067    @SideOnly(Side.CLIENT)
068
069    /**
070     * Sets the sign's isEditable flag to the specified parameter.
071     */
072    public void setEditable(boolean par1)
073    {
074        this.isEditable = par1;
075    }
076}