    001    package net.minecraft.tileentity;
    002
    003    import cpw.mods.fml.relauncher.Side;
    004    import cpw.mods.fml.relauncher.SideOnly;
    005    import net.minecraft.nbt.NBTTagCompound;
    006    import net.minecraft.network.packet.Packet;
    007    import net.minecraft.network.packet.Packet130UpdateSign;
    008
    009    public 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 var2 = 0; var2 < 4; ++var2)
    042            {
    043                this.signText[var2] = par1NBTTagCompound.getString("Text" + (var2 + 1));
    044
    045                if (this.signText[var2].length() > 15)
    046                {
    047                    this.signText[var2] = this.signText[var2].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[] var1 = new String[4];
    058            System.arraycopy(this.signText, 0, var1, 0, 4);
    059            return new Packet130UpdateSign(this.xCoord, this.yCoord, this.zCoord, var1);
    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    }