From 30bb894b7ce2a426bdfe9fa93456255053d02187 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 28 Apr 2021 21:18:28 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82:=20Text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/mc/protocol/model/ServerInfo.java | 2 + .../main/java/mc/protocol/model/lombok.config | 1 - .../java/mc/protocol/model/text/Text.java | 46 +++++++++++++++++++ .../java/mc/protocol/model/text/TextTest.java | 30 ++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) delete mode 100644 protocol/src/main/java/mc/protocol/model/lombok.config create mode 100644 protocol/src/main/java/mc/protocol/model/text/Text.java create mode 100644 protocol/src/test/java/mc/protocol/model/text/TextTest.java diff --git a/protocol/src/main/java/mc/protocol/model/ServerInfo.java b/protocol/src/main/java/mc/protocol/model/ServerInfo.java index 002d52b..6924d14 100644 --- a/protocol/src/main/java/mc/protocol/model/ServerInfo.java +++ b/protocol/src/main/java/mc/protocol/model/ServerInfo.java @@ -5,9 +5,11 @@ import lombok.Setter; import lombok.ToString; import lombok.RequiredArgsConstructor; import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import java.util.List; +@Accessors(fluent = true) @Getter @Setter @ToString diff --git a/protocol/src/main/java/mc/protocol/model/lombok.config b/protocol/src/main/java/mc/protocol/model/lombok.config deleted file mode 100644 index f4387a7..0000000 --- a/protocol/src/main/java/mc/protocol/model/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.accessors.fluent=true \ No newline at end of file diff --git a/protocol/src/main/java/mc/protocol/model/text/Text.java b/protocol/src/main/java/mc/protocol/model/text/Text.java new file mode 100644 index 0000000..94607a2 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/model/text/Text.java @@ -0,0 +1,46 @@ +package mc.protocol.model.text; + +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@EqualsAndHashCode +@ToString +public class Text { + + public static final Text EMPTY = of(""); + + private String content; + + Text(String content) { + this.content = content; + } + + public static Text of(String content) { + return new Text(content); + } + + public static Text.Builder builder() { + return new Text.Builder(); + } + + public static class Builder { + private String content; + + public Builder append(String content) { + if (this.content == null) { + this.content = content; + } else { + this.content += content; + } + return this; + } + + public Text build() { + if (content == null) { + return EMPTY; + } else { + return new Text(content); + } + } + } +} diff --git a/protocol/src/test/java/mc/protocol/model/text/TextTest.java b/protocol/src/test/java/mc/protocol/model/text/TextTest.java new file mode 100644 index 0000000..ed3d423 --- /dev/null +++ b/protocol/src/test/java/mc/protocol/model/text/TextTest.java @@ -0,0 +1,30 @@ +package mc.protocol.model.text; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TextTest { + + @Test + void emptyTest() { + Text actual = Text.builder().build(); + Text expected = Text.EMPTY; + + assertEquals(expected, actual); + } + + @Test + void contentTest() { + Text actual; + Text expected; + + actual = Text.builder().append("123").build(); + expected = new Text("123"); + assertEquals(expected, actual); + + actual = Text.builder().append("123").append("456").build(); + expected = new Text("123456"); + assertEquals(expected, actual); + } +} \ No newline at end of file From df4c1b7c71528b105a824798d4cb68ba99f1ee37 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 28 Apr 2021 21:27:38 +0300 Subject: [PATCH 2/4] =?UTF-8?q?Text:=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=20children?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/mc/protocol/model/text/Text.java | 26 ++++++++++++++++--- .../java/mc/protocol/model/text/TextTest.java | 24 +++++++++++++++-- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/protocol/src/main/java/mc/protocol/model/text/Text.java b/protocol/src/main/java/mc/protocol/model/text/Text.java index 94607a2..27041ec 100644 --- a/protocol/src/main/java/mc/protocol/model/text/Text.java +++ b/protocol/src/main/java/mc/protocol/model/text/Text.java @@ -1,5 +1,6 @@ package mc.protocol.model.text; +import com.google.common.collect.ImmutableList; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -10,13 +11,15 @@ public class Text { public static final Text EMPTY = of(""); private String content; + private ImmutableList children; - Text(String content) { + Text(String content, ImmutableList children) { this.content = content; + this.children = children; } public static Text of(String content) { - return new Text(content); + return new Text(content, null); } public static Text.Builder builder() { @@ -25,6 +28,7 @@ public class Text { public static class Builder { private String content; + private ImmutableList.Builder childrenBuilder; public Builder append(String content) { if (this.content == null) { @@ -35,11 +39,25 @@ public class Text { return this; } + public Builder append(Text text) { + if (text == null || EMPTY.equals(text)) { + return this; + } + + if (this.childrenBuilder == null) { + this.childrenBuilder = ImmutableList.builder(); + } + + this.childrenBuilder.add(text); + return this; + } + public Text build() { - if (content == null) { + if (content == null && childrenBuilder == null) { return EMPTY; } else { - return new Text(content); + return new Text(content, + childrenBuilder == null ? null : childrenBuilder.build()); } } } diff --git a/protocol/src/test/java/mc/protocol/model/text/TextTest.java b/protocol/src/test/java/mc/protocol/model/text/TextTest.java index ed3d423..9513bef 100644 --- a/protocol/src/test/java/mc/protocol/model/text/TextTest.java +++ b/protocol/src/test/java/mc/protocol/model/text/TextTest.java @@ -1,5 +1,6 @@ package mc.protocol.model.text; +import com.google.common.collect.ImmutableList; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -20,11 +21,30 @@ class TextTest { Text expected; actual = Text.builder().append("123").build(); - expected = new Text("123"); + expected = new Text("123", null); assertEquals(expected, actual); actual = Text.builder().append("123").append("456").build(); - expected = new Text("123456"); + expected = new Text("123456", null); + assertEquals(expected, actual); + } + + @Test + void childrenTest() { + Text actual; + Text expected; + + actual = Text.builder().append("123").append((Text) null).build(); + expected = new Text("123", null); + assertEquals(expected, actual); + + actual = Text.builder().append("123").append(Text.EMPTY).build(); + expected = new Text("123", null); + assertEquals(expected, actual); + + Text child = Text.of("456"); + actual = Text.builder().append("123").append(child).build(); + expected = new Text("123", ImmutableList.of(child)); assertEquals(expected, actual); } } \ No newline at end of file From b255980c05f016107adf11ceee7bb5e875ac235f Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 28 Apr 2021 21:42:35 +0300 Subject: [PATCH 3/4] =?UTF-8?q?Text:=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=91=D0=BD=20builder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/mc/protocol/model/text/Text.java | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/protocol/src/main/java/mc/protocol/model/text/Text.java b/protocol/src/main/java/mc/protocol/model/text/Text.java index 27041ec..cb4545b 100644 --- a/protocol/src/main/java/mc/protocol/model/text/Text.java +++ b/protocol/src/main/java/mc/protocol/model/text/Text.java @@ -4,6 +4,8 @@ import com.google.common.collect.ImmutableList; import lombok.EqualsAndHashCode; import lombok.ToString; +import java.util.LinkedList; + @EqualsAndHashCode @ToString public class Text { @@ -27,15 +29,10 @@ public class Text { } public static class Builder { - private String content; - private ImmutableList.Builder childrenBuilder; + private final LinkedList chain = new LinkedList<>(); public Builder append(String content) { - if (this.content == null) { - this.content = content; - } else { - this.content += content; - } + chain.add(content); return this; } @@ -44,21 +41,37 @@ public class Text { return this; } - if (this.childrenBuilder == null) { - this.childrenBuilder = ImmutableList.builder(); - } - - this.childrenBuilder.add(text); + chain.add(text); return this; } public Text build() { - if (content == null && childrenBuilder == null) { + if (chain.isEmpty()) { return EMPTY; - } else { - return new Text(content, - childrenBuilder == null ? null : childrenBuilder.build()); } + + StringBuilder contentBuilder = null; + ImmutableList.Builder childrenBuilder = null; + + for (Object element : chain) { + if (element instanceof String) { + if (contentBuilder == null) { + contentBuilder = new StringBuilder((String) element); + } else { + contentBuilder.append((String) element); + } + } else if (element instanceof Text) { + if (childrenBuilder == null) { + childrenBuilder = ImmutableList.builder(); + } + + childrenBuilder.add((Text) element); + } + } + + return new Text( + contentBuilder == null ? null : contentBuilder.toString(), + childrenBuilder == null ? null : childrenBuilder.build()); } } } From c722da2b0562afd3027c371825c7b5d38a60f453 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 28 Apr 2021 22:12:21 +0300 Subject: [PATCH 4/4] =?UTF-8?q?Text:=20=D1=83=D0=BF=D1=80=D0=BE=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=20builder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/mc/protocol/model/text/Text.java | 56 +++++++++---------- .../mc/protocol/model/text/TextColor.java | 31 ++++++++++ .../mc/protocol/model/text/TextStyle.java | 38 +++++++++++++ .../java/mc/protocol/model/text/TextTest.java | 32 +++-------- 4 files changed, 103 insertions(+), 54 deletions(-) create mode 100644 protocol/src/main/java/mc/protocol/model/text/TextColor.java create mode 100644 protocol/src/main/java/mc/protocol/model/text/TextStyle.java diff --git a/protocol/src/main/java/mc/protocol/model/text/Text.java b/protocol/src/main/java/mc/protocol/model/text/Text.java index cb4545b..0b5a8c3 100644 --- a/protocol/src/main/java/mc/protocol/model/text/Text.java +++ b/protocol/src/main/java/mc/protocol/model/text/Text.java @@ -1,10 +1,11 @@ package mc.protocol.model.text; -import com.google.common.collect.ImmutableList; import lombok.EqualsAndHashCode; import lombok.ToString; +import java.util.ArrayList; import java.util.LinkedList; +import java.util.List; @EqualsAndHashCode @ToString @@ -12,16 +13,32 @@ public class Text { public static final Text EMPTY = of(""); + private TextColor color; + private TextStyle style; private String content; - private ImmutableList children; + private List children; - Text(String content, ImmutableList children) { + Text(TextColor color, TextStyle style, String content, List children) { + this.color = color; + this.style = style; this.content = content; this.children = children; } public static Text of(String content) { - return new Text(content, null); + return new Text(null, null, content, null); + } + + public static Text of(TextColor color, String content) { + return new Text(color, null, content, null); + } + + public static Text of(TextStyle style, String content) { + return new Text(null, style, content, null); + } + + public static Text of(TextColor color, TextStyle style, String content) { + return new Text(color, style, content, null); } public static Text.Builder builder() { @@ -29,12 +46,7 @@ public class Text { } public static class Builder { - private final LinkedList chain = new LinkedList<>(); - - public Builder append(String content) { - chain.add(content); - return this; - } + private final LinkedList chain = new LinkedList<>(); public Builder append(Text text) { if (text == null || EMPTY.equals(text)) { @@ -50,28 +62,14 @@ public class Text { return EMPTY; } - StringBuilder contentBuilder = null; - ImmutableList.Builder childrenBuilder = null; + Text rootText = chain.pollFirst(); - for (Object element : chain) { - if (element instanceof String) { - if (contentBuilder == null) { - contentBuilder = new StringBuilder((String) element); - } else { - contentBuilder.append((String) element); - } - } else if (element instanceof Text) { - if (childrenBuilder == null) { - childrenBuilder = ImmutableList.builder(); - } - - childrenBuilder.add((Text) element); - } + if (!chain.isEmpty()) { + rootText.children = new ArrayList<>(); + rootText.children.addAll(chain); } - return new Text( - contentBuilder == null ? null : contentBuilder.toString(), - childrenBuilder == null ? null : childrenBuilder.build()); + return rootText; } } } diff --git a/protocol/src/main/java/mc/protocol/model/text/TextColor.java b/protocol/src/main/java/mc/protocol/model/text/TextColor.java new file mode 100644 index 0000000..ba0b1c2 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/model/text/TextColor.java @@ -0,0 +1,31 @@ +package mc.protocol.model.text; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum TextColor { + //@formatter:off + BLACK ("black", '0'), + DARK_BLUE ("dark_blue", '1'), + DARK_GREEN ("dark_green", '2'), + DARK_AQUA ("dark_aqua", '3'), + DARK_RED ("dark_red", '4'), + DARK_PUEPLE("dark_purple", '5'), + GOLD ("gold", '6'), + GRAY ("gray", '7'), + DARK_GRAY ("dark_gray", '8'), + BLUE ("blue", '9'), + GREEN ("green", 'a'), + AQUA ("aqua", 'b'), + RED ("red", 'c'), + PUEPLE ("light_purple",'d'), + YELLOW ("yellow", 'e'), + WHITE ("white", 'f'), + RESET ("reset", 'r'); + //@formatter:on + + private final String name; + private final char code; +} diff --git a/protocol/src/main/java/mc/protocol/model/text/TextStyle.java b/protocol/src/main/java/mc/protocol/model/text/TextStyle.java new file mode 100644 index 0000000..e4856e3 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/model/text/TextStyle.java @@ -0,0 +1,38 @@ +package mc.protocol.model.text; + +import lombok.*; +import lombok.experimental.Accessors; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder(builderClassName = "Builder") +@Accessors(fluent = true) +@Getter +@Setter(AccessLevel.PACKAGE) +@EqualsAndHashCode +@ToString +@SuppressWarnings("java:S1845") +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); + public static final TextStyle NONE = new TextStyle(null, null, null, null, null); + + private Boolean bold; + private Boolean italic; + private Boolean underline; + private Boolean strikethrough; + private Boolean obfuscated; + + void merge(TextStyle style) { + if (style.bold != null) this.bold = style.bold; + if (style.italic != null) this.italic = style.italic; + if (style.underline != null) this.underline = style.underline; + if (style.strikethrough != null) this.strikethrough = style.strikethrough; + if (style.obfuscated != null) this.obfuscated = style.obfuscated; + } +} diff --git a/protocol/src/test/java/mc/protocol/model/text/TextTest.java b/protocol/src/test/java/mc/protocol/model/text/TextTest.java index 9513bef..cbed53f 100644 --- a/protocol/src/test/java/mc/protocol/model/text/TextTest.java +++ b/protocol/src/test/java/mc/protocol/model/text/TextTest.java @@ -1,9 +1,10 @@ package mc.protocol.model.text; -import com.google.common.collect.ImmutableList; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; class TextTest { @@ -20,31 +21,12 @@ class TextTest { Text actual; Text expected; - actual = Text.builder().append("123").build(); - expected = new Text("123", null); + actual = Text.builder().append(Text.of("123")).build(); + expected = new Text(null, null, "123", null); assertEquals(expected, actual); - actual = Text.builder().append("123").append("456").build(); - expected = new Text("123456", null); - assertEquals(expected, actual); - } - - @Test - void childrenTest() { - Text actual; - Text expected; - - actual = Text.builder().append("123").append((Text) null).build(); - expected = new Text("123", null); - assertEquals(expected, actual); - - actual = Text.builder().append("123").append(Text.EMPTY).build(); - expected = new Text("123", null); - assertEquals(expected, actual); - - Text child = Text.of("456"); - actual = Text.builder().append("123").append(child).build(); - expected = new Text("123", ImmutableList.of(child)); + actual = Text.builder().append(Text.of("123")).append(Text.of("456")).build(); + expected = new Text(null, null, "123", List.of(Text.of("456"))); assertEquals(expected, actual); } } \ No newline at end of file