package net.glowstone.block.entity; import net.glowstone.block.GlowBlock; import net.glowstone.block.GlowBlockState; import net.glowstone.block.state.GlowSign; import net.glowstone.entity.GlowPlayer; import net.glowstone.util.TextMessage; import net.glowstone.util.nbt.CompoundTag; import org.bukkit.Material; import java.util.Arrays; public class TESign extends TileEntity { private final TextMessage[] lines = new TextMessage[4]; public TESign(GlowBlock block) { super(block); setSaveId("Sign"); if (block.getType() != Material.WALL_SIGN && block.getType() != Material.SIGN_POST) { throw new IllegalArgumentException("Sign must be WALL_SIGN or SIGN_POST, got " + block.getType()); } Arrays.fill(lines, new TextMessage("")); } @Override public void update(GlowPlayer player) { player.sendSignChange(getBlock().getLocation(), lines); } @Override public void loadNbt(CompoundTag tag) { super.loadNbt(tag); for (int i = 0; i < lines.length; ++i) { String key = "Text" + (i + 1); if (tag.isString(key)) { lines[i] = TextMessage.decode(tag.getString(key)); } } } @Override public void saveNbt(CompoundTag tag) { super.saveNbt(tag); for (int i = 0; i < lines.length; ++i) { tag.putString("Text" + (i + 1), lines[i].encode()); } } @Override public GlowBlockState getState() { return new GlowSign(block); } /** * Set the lines of text on the sign. * @param text The lines of text. * @throws IllegalArgumentException If the wrong number of lines is provided. */ public void setLines(String[] text) { if (text.length != lines.length) { throw new IllegalArgumentException("Provided lines were length " + text.length + ", must be " + lines.length); } for (int i = 0; i < lines.length; ++i) { lines[i] = new TextMessage(text[i] == null ? "" : text[i]); } } /** * Get the lines of text on the sign. * @return The sign's lines. */ public String[] getLines() { String[] result = new String[lines.length]; for (int i = 0; i < result.length; ++i) { result[i] = lines[i].flatten(); } return result; } }