Archived
0

Text: конвертация из legacy

This commit is contained in:
2021-04-29 18:56:54 +03:00
parent dc7b4a7ab0
commit ac0ebea708
4 changed files with 142 additions and 3 deletions

View File

@@ -4,8 +4,10 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.Getter;
import lombok.experimental.Accessors;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -43,11 +45,21 @@ public class Text {
@ToString
public static class Builder {
@Getter(onMethod = @__(@Nullable))
private StringBuilder contentBuilder;
private TextStyle.Builder styleBuilder;
private TextColor color;
private List<Text> children;
public Builder append(char content) {
if (this.contentBuilder == null) {
this.contentBuilder = new StringBuilder();
}
this.contentBuilder.append(content);
return this;
}
public Builder append(String content) {
if (this.contentBuilder == null) {
this.contentBuilder = new StringBuilder(content);

View File

@@ -20,10 +20,9 @@ public enum TextColor {
GREEN ("green", 'a'),
AQUA ("aqua", 'b'),
RED ("red", 'c'),
PUEPLE ("light_purple",'d'),
PURPLE ("light_purple",'d'),
YELLOW ("yellow", 'e'),
WHITE ("white", 'f'),
RESET ("reset", 'r');
WHITE ("white", 'f');
//@formatter:on
private final String name;

View File

@@ -5,10 +5,17 @@ import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import lombok.experimental.UtilityClass;
import mc.protocol.model.text.Text;
import mc.protocol.model.text.TextColor;
import mc.protocol.model.text.TextStyle;
import java.util.Map;
@UtilityClass
public class TextSerializer {
private static final Map<Character, TextStyle> legacyStyleCodes;
private static final Map<Character, TextColor> legacyColorCodes;
public JsonObject toJsonObject(Text text) {
JsonObject jsonObject = Json.object();
@@ -38,4 +45,85 @@ public class TextSerializer {
return jsonObject;
}
/**
* Преобразование строки вида "&4красный" в {@link Text}.
*
* @param string тест
* @return Text
*/
@SuppressWarnings({"java:S3776", "java:S2583", "java:S135"})
public Text fromPlain(String string) {
boolean flagSys = false;
Text.Builder rootTextBuilder = Text.builder();
Text.Builder textBuilder = rootTextBuilder;
for (char ch : string.toCharArray()) {
if (!flagSys) {
if ('&' == ch) {
flagSys = true;
} else {
textBuilder.append(ch);
}
continue;
}
if (!legacyStyleCodes.containsKey(ch) && !legacyColorCodes.containsKey(ch) && '&' == ch) {
textBuilder.append('&');
flagSys = false;
continue;
}
//noinspection ConstantConditions
if (textBuilder.contentBuilder() != null && textBuilder.contentBuilder().length() > 0) {
if (textBuilder != rootTextBuilder) {
rootTextBuilder.append(textBuilder.build());
}
textBuilder = Text.builder();
}
if (legacyStyleCodes.containsKey(ch)) {
textBuilder.style(legacyStyleCodes.get(ch));
} else {
textBuilder.color(legacyColorCodes.get(ch));
}
flagSys = false;
}
if (textBuilder != rootTextBuilder) {
rootTextBuilder.append(textBuilder.build());
}
return rootTextBuilder.build();
}
static {
legacyColorCodes = Map.ofEntries(
Map.entry('0', TextColor.BLACK),
Map.entry('1', TextColor.DARK_BLUE),
Map.entry('2', TextColor.DARK_GREEN),
Map.entry('3', TextColor.DARK_AQUA),
Map.entry('4', TextColor.DARK_RED),
Map.entry('5', TextColor.DARK_PUEPLE),
Map.entry('6', TextColor.GOLD),
Map.entry('7', TextColor.GRAY),
Map.entry('8', TextColor.DARK_GRAY),
Map.entry('9', TextColor.BLUE),
Map.entry('a', TextColor.GREEN),
Map.entry('b', TextColor.AQUA),
Map.entry('c', TextColor.RED),
Map.entry('d', TextColor.PURPLE),
Map.entry('e', TextColor.YELLOW),
Map.entry('f', TextColor.WHITE)
);
legacyStyleCodes = Map.of(
'k', TextStyle.OBFUSCATED,
'l', TextStyle.BOLD,
'm', TextStyle.STRIKETHOUGH,
'n', TextStyle.UNDERLINE,
'o', TextStyle.ITALIC
);
}
}