133 lines
3.9 KiB
Java
133 lines
3.9 KiB
Java
package org.bukkit.craftbukkit.block;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
import net.minecraft.network.chat.IChatBaseComponent;
|
|
import net.minecraft.world.level.block.entity.TileEntitySign;
|
|
import org.bukkit.DyeColor;
|
|
import org.bukkit.World;
|
|
import org.bukkit.block.Sign;
|
|
import org.bukkit.block.sign.Side;
|
|
import org.bukkit.block.sign.SignSide;
|
|
import org.bukkit.craftbukkit.block.sign.CraftSignSide;
|
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
|
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
|
import org.bukkit.entity.Player;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
public class CraftSign<T extends TileEntitySign> extends CraftBlockEntityState<T> implements Sign {
|
|
|
|
private final CraftSignSide front;
|
|
private final CraftSignSide back;
|
|
|
|
public CraftSign(World world, T tileEntity) {
|
|
super(world, tileEntity);
|
|
this.front = new CraftSignSide(this.getSnapshot().getFrontText());
|
|
this.back = new CraftSignSide(this.getSnapshot().getBackText());
|
|
}
|
|
|
|
@Override
|
|
public String[] getLines() {
|
|
return front.getLines();
|
|
}
|
|
|
|
@Override
|
|
public String getLine(int index) throws IndexOutOfBoundsException {
|
|
return front.getLine(index);
|
|
}
|
|
|
|
@Override
|
|
public void setLine(int index, String line) throws IndexOutOfBoundsException {
|
|
front.setLine(index, line);
|
|
}
|
|
|
|
@Override
|
|
public boolean isEditable() {
|
|
return !getSnapshot().isWaxed() && getSnapshot().playerWhoMayEdit != null;
|
|
}
|
|
|
|
@Override
|
|
public void setEditable(boolean editable) {
|
|
getSnapshot().setWaxed(!editable);
|
|
}
|
|
|
|
@Override
|
|
public boolean isGlowingText() {
|
|
return front.isGlowingText();
|
|
}
|
|
|
|
@Override
|
|
public void setGlowingText(boolean glowing) {
|
|
front.setGlowingText(glowing);
|
|
}
|
|
|
|
@NotNull
|
|
@Override
|
|
public SignSide getSide(Side side) {
|
|
Preconditions.checkArgument(side != null, "side == null");
|
|
|
|
switch (side) {
|
|
case FRONT:
|
|
return front;
|
|
case BACK:
|
|
return back;
|
|
default:
|
|
throw new IllegalArgumentException();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public DyeColor getColor() {
|
|
return front.getColor();
|
|
}
|
|
|
|
@Override
|
|
public void setColor(DyeColor color) {
|
|
front.setColor(color);
|
|
}
|
|
|
|
@Override
|
|
public void applyTo(T sign) {
|
|
front.applyLegacyStringToSignSide();
|
|
back.applyLegacyStringToSignSide();
|
|
|
|
super.applyTo(sign);
|
|
}
|
|
|
|
public static void openSign(Sign sign, Player player, Side side) {
|
|
Preconditions.checkArgument(sign != null, "sign == null");
|
|
Preconditions.checkArgument(side != null, "side == null");
|
|
Preconditions.checkArgument(sign.isPlaced(), "Sign must be placed");
|
|
Preconditions.checkArgument(sign.getWorld() == player.getWorld(), "Sign must be in same world as Player");
|
|
|
|
TileEntitySign handle = ((CraftSign<?>) sign).getTileEntity();
|
|
|
|
((CraftPlayer) player).getHandle().openTextEdit(handle, Side.FRONT == side);
|
|
}
|
|
|
|
public static IChatBaseComponent[] sanitizeLines(String[] lines) {
|
|
IChatBaseComponent[] components = new IChatBaseComponent[4];
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
if (i < lines.length && lines[i] != null) {
|
|
components[i] = CraftChatMessage.fromString(lines[i])[0];
|
|
} else {
|
|
components[i] = IChatBaseComponent.empty();
|
|
}
|
|
}
|
|
|
|
return components;
|
|
}
|
|
|
|
public static String[] revertComponents(IChatBaseComponent[] components) {
|
|
String[] lines = new String[components.length];
|
|
for (int i = 0; i < lines.length; i++) {
|
|
lines[i] = revertComponent(components[i]);
|
|
}
|
|
return lines;
|
|
}
|
|
|
|
private static String revertComponent(IChatBaseComponent component) {
|
|
return CraftChatMessage.fromComponent(component);
|
|
}
|
|
}
|