67 lines
2.5 KiB
Java
67 lines
2.5 KiB
Java
package mc.protocol.text;
|
|
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.util.Optional;
|
|
|
|
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
|
|
@Getter
|
|
@Setter
|
|
public class TextStyle {
|
|
public static final TextStyle BOLD = new TextStyle(true, null, null, null, null);
|
|
public static final TextStyle ITALIC = new TextStyle(null, true, null, null, null);
|
|
public static final TextStyle UNDERLINE = new TextStyle(null, null, true, null, null);
|
|
public static final TextStyle STRIKETHOUGH = new TextStyle(null, null, null, true, null);
|
|
public static final TextStyle OBFUSCATED = new TextStyle(null, null, null, null, true);
|
|
public static final TextStyle RESET = new TextStyle(false, false, false, false, false);
|
|
|
|
private static class OptionalBoolean {
|
|
private static final Optional<Boolean> TRUE = Optional.of(true);
|
|
private static final Optional<Boolean> FALSE = Optional.of(false);
|
|
private static final Optional<Boolean> NONE = Optional.empty();
|
|
|
|
static Optional<Boolean> of(boolean bool) {
|
|
return bool ? TRUE : FALSE;
|
|
}
|
|
|
|
static Optional<Boolean> of(@Nullable Boolean bool) {
|
|
if (bool != null) {
|
|
return of(bool.booleanValue());
|
|
}
|
|
return NONE;
|
|
}
|
|
}
|
|
|
|
private Optional<Boolean> bold;
|
|
private Optional<Boolean> italic;
|
|
private Optional<Boolean> underline;
|
|
private Optional<Boolean> strikethrough;
|
|
private Optional<Boolean> obfuscated;
|
|
|
|
public TextStyle(@Nullable Boolean bold,
|
|
@Nullable Boolean italic,
|
|
@Nullable Boolean underline,
|
|
@Nullable Boolean strikethrough,
|
|
@Nullable Boolean obfuscated) {
|
|
this.bold = OptionalBoolean.of(bold);
|
|
this.italic = OptionalBoolean.of(italic);
|
|
this.underline = OptionalBoolean.of(underline);
|
|
this.strikethrough = OptionalBoolean.of(strikethrough);
|
|
this.obfuscated = OptionalBoolean.of(obfuscated);
|
|
}
|
|
|
|
public void merge(TextStyle style) {
|
|
if (style.bold.isPresent()) this.bold = style.bold;
|
|
if (style.italic.isPresent()) this.italic = style.italic;
|
|
if (style.underline.isPresent()) this.underline = style.underline;
|
|
if (style.strikethrough.isPresent()) this.strikethrough = style.strikethrough;
|
|
if (style.obfuscated.isPresent()) this.obfuscated = style.obfuscated;
|
|
}
|
|
|
|
public static TextStyle none() {
|
|
return new TextStyle(null,null,null,null, null);
|
|
}
|
|
}
|