152 lines
4.3 KiB
Java

package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import net.minecraft.world.entity.Display;
import org.bukkit.Color;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.TextDisplay;
public class CraftTextDisplay extends CraftDisplay implements TextDisplay {
public CraftTextDisplay(CraftServer server, net.minecraft.world.entity.Display.TextDisplay entity) {
super(server, entity);
}
@Override
public net.minecraft.world.entity.Display.TextDisplay getHandle() {
return (net.minecraft.world.entity.Display.TextDisplay) super.getHandle();
}
@Override
public String toString() {
return "CraftTextDisplay";
}
@Override
public EntityType getType() {
return EntityType.TEXT_DISPLAY;
}
@Override
public String getText() {
return CraftChatMessage.fromComponent(getHandle().getText());
}
@Override
public void setText(String text) {
getHandle().setText(CraftChatMessage.fromString(text, true)[0]);
}
@Override
public int getLineWidth() {
return getHandle().getLineWidth();
}
@Override
public void setLineWidth(int width) {
getHandle().getEntityData().set(Display.TextDisplay.DATA_LINE_WIDTH_ID, width);
}
@Override
public Color getBackgroundColor() {
int color = getHandle().getBackgroundColor();
return (color == -1) ? null : Color.fromARGB(color);
}
@Override
public void setBackgroundColor(Color color) {
if (color == null) {
getHandle().getEntityData().set(Display.TextDisplay.DATA_BACKGROUND_COLOR_ID, -1);
} else {
getHandle().getEntityData().set(Display.TextDisplay.DATA_BACKGROUND_COLOR_ID, color.asARGB());
}
}
@Override
public byte getTextOpacity() {
return getHandle().getTextOpacity();
}
@Override
public void setTextOpacity(byte opacity) {
getHandle().setTextOpacity(opacity);
}
@Override
public boolean isShadowed() {
return getFlag(Display.TextDisplay.FLAG_SHADOW);
}
@Override
public void setShadowed(boolean shadow) {
setFlag(Display.TextDisplay.FLAG_SHADOW, shadow);
}
@Override
public boolean isSeeThrough() {
return getFlag(Display.TextDisplay.FLAG_SEE_THROUGH);
}
@Override
public void setSeeThrough(boolean seeThrough) {
setFlag(Display.TextDisplay.FLAG_SEE_THROUGH, seeThrough);
}
@Override
public boolean isDefaultBackground() {
return getFlag(Display.TextDisplay.FLAG_USE_DEFAULT_BACKGROUND);
}
@Override
public void setDefaultBackground(boolean defaultBackground) {
setFlag(Display.TextDisplay.FLAG_USE_DEFAULT_BACKGROUND, defaultBackground);
}
@Override
public TextAlignment getAlignment() {
Display.TextDisplay.Align nms = Display.TextDisplay.getAlign(getHandle().getFlags());
return TextAlignment.valueOf(nms.name());
}
@Override
public void setAlignment(TextAlignment alignment) {
Preconditions.checkArgument(alignment != null, "Alignment cannot be null");
switch (alignment) {
case LEFT:
setFlag(Display.TextDisplay.FLAG_ALIGN_LEFT, true);
setFlag(Display.TextDisplay.FLAG_ALIGN_RIGHT, false);
break;
case RIGHT:
setFlag(Display.TextDisplay.FLAG_ALIGN_LEFT, false);
setFlag(Display.TextDisplay.FLAG_ALIGN_RIGHT, true);
break;
case CENTER:
setFlag(Display.TextDisplay.FLAG_ALIGN_LEFT, false);
setFlag(Display.TextDisplay.FLAG_ALIGN_RIGHT, false);
break;
default:
throw new IllegalArgumentException("Unknown alignment " + alignment);
}
}
private boolean getFlag(int flag) {
return (getHandle().getFlags() & flag) != 0;
}
private void setFlag(int flag, boolean set) {
byte flagBits = getHandle().getFlags();
if (set) {
flagBits |= flag;
} else {
flagBits &= ~flag;
}
getHandle().setFlags(flagBits);
}
}