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