From eedd848f237529b2e616712f8e73234c001f5739 Mon Sep 17 00:00:00 2001 From: MoonLake Date: Thu, 15 Jun 2017 22:04:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=BA=93=20v1.0=20=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 16 +++ .../moonlake/chat/ChatClickEvent.java | 53 +++++++- .../minecraft/moonlake/chat/ChatColor.java | 100 +++++++++++++++ .../moonlake/chat/ChatComponent.java | 56 +++++++++ .../moonlake/chat/ChatComponentBase.java | 11 ++ .../moonlake/chat/ChatComponentFancy.java | 101 +++++++++++++++ .../moonlake/chat/ChatComponentKeybind.java | 26 +++- .../moonlake/chat/ChatComponentScore.java | 46 +++++++ .../moonlake/chat/ChatComponentSelector.java | 30 ++++- .../moonlake/chat/ChatComponentText.java | 32 ++++- .../chat/ChatComponentTranslation.java | 35 ++++++ .../moonlake/chat/ChatHoverEvent.java | 48 ++++++++ .../moonlake/chat/ChatSerializer.java | 43 +++++++ .../minecraft/moonlake/chat/ChatStyle.java | 115 ++++++++++++++++++ 14 files changed, 708 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index a19e790..2083348 100644 --- a/pom.xml +++ b/pom.xml @@ -74,6 +74,22 @@ ${project.artifactId}-${project.version} + + org.apache.maven.plugins + maven-assembly-plugin + + jar-with-dependencies + + + + mark-assembly + package + + single + + + + org.apache.maven.plugins maven-source-plugin diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatClickEvent.java b/src/main/java/com/minecraft/moonlake/chat/ChatClickEvent.java index 805308a..9b962b1 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatClickEvent.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatClickEvent.java @@ -18,20 +18,43 @@ package com.minecraft.moonlake.chat; +/** + *

ChatClickEvent

+ * 聊天组件点击事件 + * + * @version 1.0 + * @author Month_Light + */ public class ChatClickEvent { private final Action action; private final String value; + /** + * 聊天组件点击事件构造函数 + * + * @param action 交互类型 + * @param value 值 + */ public ChatClickEvent(Action action, String value) { this.action = action; this.value = value; } + /** + * 获取此聊天组件点击事件的交互类型 + * + * @return 交互类型 + */ public Action getAction() { return action; } + /** + * 获取此聊天组件点击事件的值 + * + * @return 值 + */ public String getValue() { return value; } @@ -62,15 +85,43 @@ public String toString() { '}'; } + /** + *

Action

+ * 聊天组件点击事件交互类型 + * + * @version 1.0 + * @author Month_Light + */ public enum Action { - + + /** + * 交互类型: 打开链接 + */ OPEN_URL, + /** + * 交互类型: 打开文件 + */ OPEN_FILE, + /** + * 交互类型: 执行命令 + */ RUN_COMMAND, + /** + * 交互类型: 替换命令 + */ SUGGEST_COMMAND, + /** + * 交互类型: 改变页面 + */ CHANGE_PAGE, ; + /** + * 从名称返回聊天组件点击事件交互类型 + * + * @param name 名称 + * @return Action + */ public static Action fromName(String name) { return Action.valueOf(name.toUpperCase()); } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatColor.java b/src/main/java/com/minecraft/moonlake/chat/ChatColor.java index f4f36fa..5a3a1b3 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatColor.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatColor.java @@ -18,52 +18,152 @@ package com.minecraft.moonlake.chat; +/** + *

ChatColor

+ * 聊天组件颜色 + * + * @version 1.0 + * @author Month_Light + */ public enum ChatColor { + /** + *
\u00260 黑色
+ */ BLACK('0'), + /** + *
\u00261 深蓝
+ */ DARK_BLUE('1'), + /** + *
\u00262 深绿
+ */ DARK_GREEN('2'), + /** + *
\u00263 深青
+ */ DARK_AQUA('3'), + /** + *
\u00264 深红
+ */ DARK_RED('4'), + /** + *
\u00265 深紫
+ */ DARK_PURPLE('5'), + /** + *
\u00266 橙色
+ */ GOLD('6'), + /** + *
\u00267 灰色
+ */ GRAY('7'), + /** + *
\u00268 深灰
+ */ DARK_GRAY('8'), + /** + *
\u00269 蓝色
+ */ BLUE('9'), + /** + *
\u0026a 绿色
+ */ GREEN('a'), + /** + *
\u0026b 青色
+ */ AQUA('b'), + /** + *
\u0026c 红色
+ */ RED('c'), + /** + *
\u0026d 紫色
+ */ LIGHT_PURPLE('d'), + /** + *
\u0026e 黄色
+ */ YELLOW('e'), + /** + *
\u0026f 白色
+ */ WHITE('f'), + /** + *
\u0026k 随机字符
+ */ OBFUSCATED('k', true), + /** + *
\u0026l 文字加粗
+ */ BOLD('l', true), + /** + *
\u0026m 文字删除线
+ */ STRIKETHROUGH('m', true), + /** + *
\u0026n 文字下划线
+ */ UNDERLINE('n', true), + /** + *
\u0026o 文字斜体
+ */ ITALIC('o', true), + /** + *
\u0026r 重置
+ */ RESET('r'), ; private final char code; private final boolean format; + /** + * 聊天组件颜色构造函数 + * + * @param code 颜色码 + */ ChatColor(char code) { this(code, false); } + /** + * 聊天组件颜色构造函数 + * + * @param code 颜色码 + * @param format 是否文字格式符 + */ ChatColor(char code, boolean format) { this.code = code; this.format = format; } + /** + * 获取此聊天组件颜色的颜色码 + * + * @return 颜色嘛 + */ public char getCode() { return code; } + /** + * 获取此聊天组件颜色是否为文字格式符 + * + * @return 是否文字格式符 + */ public boolean isFormat() { return format; } + /** + * 从名称返回聊天组件颜色 + * + * @param name 名称 + * @return ChatColor + */ public static ChatColor fromName(String name) { return ChatColor.valueOf(name.toUpperCase()); } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponent.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponent.java index e35e16a..017275a 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponent.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponent.java @@ -20,23 +20,79 @@ import java.util.List; +/** + *

ChatComponent

+ * 聊天组件接口 + * + * @version 1.0 + * @author Month_Light + */ public interface ChatComponent { + /** + * 获取此聊天组件的聊天样式对象 + * + * @return 聊天样式对象 + */ ChatStyle getStyle(); + /** + * 设置此聊天组件的聊天样式对象 + * + * @param style 聊天样式对象 + * @throws IllegalArgumentException 如果聊天样式对象为 {@code null} 则抛出异常 + */ ChatComponent setStyle(ChatStyle style); + /** + * 获取此聊天组件附加组件列表 + * + * @return 附加组件列表 + */ List getExtras(); + /** + * 获取此聊天组件附加组件列表大小 + * + * @return 附加组件列表大小 + */ int getExtraSize(); + /** + * 将指定文本附加到此聊天组件的附加列表中 + * + * @param text 文本 + * @throws IllegalArgumentException 如果文本对象为 {@code null} 则抛出异常 + */ ChatComponent append(String text); + /** + * 将指定聊天组件附加到此聊天组件的附加列表中 + * + * @param extra 附加 + * @throws IllegalArgumentException 如果附加对象为 {@code null} 则抛出异常 + */ ChatComponent append(ChatComponent extra); + /** + * 将此聊天组件转换为 Json 格式字符串 + * + * @return Json + */ String toJson(); + /** + * 将此聊天组件转换为源文本内容 + * + * @return 源文本内容 + */ String toRaw(); + /** + * 将此聊天组件转换为源文本内容 + * + * @param color 是否附加颜色 + * @return 源文本内容 + */ String toRaw(boolean color); } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentBase.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentBase.java index 1af9aab..0b9fd16 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentBase.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentBase.java @@ -23,11 +23,22 @@ import java.util.ArrayList; import java.util.List; +/** + *

ChatComponentBase

+ * 聊天组件基础抽象实现类 + * + * @version 1.0 + * @author Month_Light + * @see ChatComponent + */ public abstract class ChatComponentBase implements ChatComponent { private ChatStyle style; private List extras; + /** + * 聊天组件基础抽象实现类构造函数 + */ ChatComponentBase() { this.extras = new ArrayList<>(); } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentFancy.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentFancy.java index 30f5a38..445e838 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentFancy.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentFancy.java @@ -24,68 +24,140 @@ import java.util.Collection; import java.util.List; +/** + *

ChatComponentFancy

+ * 聊天花式组件类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatComponentFancy { private List extras; + /** + * 聊天花式组件类构造函数 + * + * @param text 文本内容 + */ public ChatComponentFancy(String text) { this.extras = new ArrayList<>(); this.then(text); } + /** + * 初始化设置下一个聊天文本组件 + * + * @param text 文本内容 + * @throws IllegalArgumentException 如果文本内容对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy then(String text) { Validate.notNull(text, "The text object is null."); return then(new ChatComponentText(text)); } + /** + * 初始化设置下一个聊天组件 + * + * @param component 聊天组件 + * @throws IllegalArgumentException 如果聊天组件对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy then(ChatComponent component) { Validate.notNull(component, "The component object is null."); extras.add(component); return this; } + /** + * 设置当前聊天组件的聊天颜色属性 + * + * @param color 聊天颜色 + * @throws IllegalArgumentException 如果聊天颜色对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy color(ChatColor color) { Validate.notNull(color, "The chat color object is null."); getLast().getStyle().setColor(color); return this; } + /** + * 设置当前聊天组件的聊天点击事件打开文件属性 + * + * @param path 文件路径 + * @throws IllegalArgumentException 如果文件路径对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy file(String path) { Validate.notNull(path, "The path object is null."); getLast().getStyle().setClickEvent(new ChatClickEvent(ChatClickEvent.Action.OPEN_FILE, path)); return this; } + /** + * 设置当前聊天组件的聊天点击事件打开链接属性 + * + * @param url 链接 + * @throws IllegalArgumentException 如果链接对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy link(String url) { Validate.notNull(url, "The url object is null."); getLast().getStyle().setClickEvent(new ChatClickEvent(ChatClickEvent.Action.OPEN_URL, url)); return this; } + /** + * 设置当前聊天组件的聊天点击事件替换命令属性 + * + * @param command 命令 + * @throws IllegalArgumentException 如果命令对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy suggest(String command) { Validate.notNull(command, "The command object is null."); getLast().getStyle().setClickEvent(new ChatClickEvent(ChatClickEvent.Action.SUGGEST_COMMAND, command)); return this; } + /** + * 设置当前聊天组件的聊天点击事件执行命令属性 + * + * @param command 命令 + * @throws IllegalArgumentException 如果命令对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy command(String command) { Validate.notNull(command, "The command object is null."); getLast().getStyle().setClickEvent(new ChatClickEvent(ChatClickEvent.Action.RUN_COMMAND, command)); return this; } + /** + * 设置当前聊天组件的 Shift 点击文字插入内容 + * + * @param insertion 插入内容 + * @throws IllegalArgumentException 如果插入内容对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy insert(String insertion) { Validate.notNull(insertion, "The insertion object is null."); getLast().getStyle().setInsertion(insertion); return this; } + /** + * 设置当前聊天组件的聊天移动上事件显示文本 + * + * @param text 显示文本 + * @throws IllegalArgumentException 如果显示文本对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy tooltipText(String text) { Validate.notNull(text, "The text object is null."); getLast().getStyle().setHoverEvent(new ChatHoverEvent(ChatHoverEvent.Action.SHOW_TEXT, new ChatComponentText(text))); return this; } + /** + * 设置当前聊天组件的聊天移动上事件显示多行文本 + * + * @param texts 多行文本 + * @throws IllegalArgumentException 如果多行文本对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy tooltipTexts(String... texts) { Validate.notNull(texts, "The texts object is null."); StringBuilder builder = new StringBuilder(); @@ -97,29 +169,58 @@ public ChatComponentFancy tooltipTexts(String... texts) { return tooltipText(builder.toString()); } + /** + * 设置当前聊天组件的聊天移动上事件显示多行文本 + * + * @param collection 文本集合 + * @throws IllegalArgumentException 如果文本集合对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy tooltipTexts(Collection collection) { Validate.notNull(collection, "The collection object is null."); return tooltipTexts(collection.toArray(new String[collection.size()])); } + /** + * 设置当前聊天组件的聊天移动上事件显示物品 + * + * @param item 物品 NBT 数据 + * @throws IllegalArgumentException 如果物品 {@code NBT} 数据对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy tooltipItem(String item) { Validate.notNull(item, "The item object is null."); getLast().getStyle().setHoverEvent(new ChatHoverEvent(ChatHoverEvent.Action.SHOW_ITEM, new ChatComponentText(item))); return this; } + /** + * 将指定聊天花式组件和此聊天花式组件连接 + * + * @param componentFancy 聊天花式组件 + * @throws IllegalArgumentException 如果聊天花式组件对象为 {@code null} 则抛出异常 + */ public ChatComponentFancy join(ChatComponentFancy componentFancy) { Validate.notNull(componentFancy, "The component fancy object is null."); extras.addAll(componentFancy.extras); return this; } + /** + * 将此聊天花式组件构建为 {@link ChatComponent} 对象 + * + * @return ChatComponent + * @see ChatComponent + */ public ChatComponent build() { ChatComponent component = new ChatComponentText(""); component.getExtras().addAll(extras); return component; } + /** + * 获取当前聊天花式组件列表内最后一个聊天组件 + * + * @return 最后一个聊天组件 + */ protected ChatComponent getLast() { return extras.get(extras.size() - 1); } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentKeybind.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentKeybind.java index dcda5d0..2a5fac3 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentKeybind.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentKeybind.java @@ -18,27 +18,51 @@ package com.minecraft.moonlake.chat; +/** + *

ChatComponentKeybind

+ * 聊天热键绑定类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatComponentKeybind extends ChatComponentBase { private String keybind; + /** + * 聊天热键绑定类构造函数 + */ public ChatComponentKeybind() { } + /** + * 聊天热键绑定类构造函数 + * + * @param keybind 热键绑定 + */ public ChatComponentKeybind(String keybind) { this.keybind = keybind; } + /** + * 获取此聊天热键绑定组件的热键绑定 + * + * @return 热键绑定 + */ public String getKeybind() { return keybind; } + /** + * 设置此聊天热键绑定组件的热键绑定 + * + * @param keyBind 热键绑定 + */ public ChatComponentKeybind setKeybind(String keyBind) { this.keybind = keyBind; return this; } - @Override public boolean equals(Object obj) { if(obj == this) diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentScore.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentScore.java index 8fc597a..bd202ce 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentScore.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentScore.java @@ -18,42 +18,88 @@ package com.minecraft.moonlake.chat; +/** + *

ChatComponentScore

+ * 聊天分数组件类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatComponentScore extends ChatComponentBase { private String name; private String objective; private String value; + /** + * 聊天分数组件类构造函数 + */ public ChatComponentScore() { } + /** + * 聊天分数组件类构造函数 + * + * @param name 名称 + * @param objective 计分板目标 + */ public ChatComponentScore(String name, String objective) { this.name = name; this.objective = objective; } + /** + * 获取此聊天分数组件的名称 + * + * @return 名称 + */ public String getName() { return name; } + /** + * 设置此聊天分数组件的名称 + * + * @param name 名称 + */ public ChatComponentScore setName(String name) { this.name = name; return this; } + /** + * 获取此聊天分数组件的计分板目标 + * + * @return 计分板目标 + */ public String getObjective() { return objective; } + /** + * 设置此聊天分数组件的计分板目标 + * + * @param objective 计分板目标 + */ public ChatComponentScore setObjective(String objective) { this.objective = objective; return this; } + /** + * 获取此聊天分数组件的计分板值 + * + * @return 计分板值 + */ public String getValue() { return value; } + /** + * 设置此聊天分数组件的计分板值 + * + * @param value 计分板值 + */ public ChatComponentScore setValue(String value) { this.value = value; return this; diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentSelector.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentSelector.java index 646d07e..1f80c5e 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentSelector.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentSelector.java @@ -18,23 +18,51 @@ package com.minecraft.moonlake.chat; +import com.minecraft.moonlake.validate.Validate; + +/** + *

ChatComponentSelector

+ * 聊天选择器组件类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatComponentSelector extends ChatComponentBase { private String selector; + /** + * 聊天选择器组件类构造函数 + */ public ChatComponentSelector() { } + /** + * 聊天选择器组件类构造函数 + * + * @param selector 选择器 + */ public ChatComponentSelector(String selector) { this.selector = selector; } + /** + * 获取此聊天选择器组件的选择器 + * + * @return 选择器 + */ public String getSelector() { return selector; } + /** + * 设置此聊天选择器组件的选择器 + * + * @param selector 选择器 + * @throws IllegalArgumentException 如果选择器对象为 {@code null} 则抛出异常 + */ public ChatComponentSelector setSelector(String selector) { - if(selector.startsWith("@")) + if(Validate.checkNotNull(selector).startsWith("@")) this.selector = selector; else this.selector = "@" + selector; diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentText.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentText.java index 0e5ce3f..b8621ef 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentText.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentText.java @@ -18,22 +18,52 @@ package com.minecraft.moonlake.chat; +import com.minecraft.moonlake.validate.Validate; + +/** + *

ChatComponentText

+ * 聊天文本组件类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatComponentText extends ChatComponentBase { private String text; + /** + * 聊天文本组件类构造函数 + * + * @param text 文本 + */ public ChatComponentText(String text) { this.text = text; } + /** + * 聊天文本组件类构造函数 + * + * @param text 文本组件 + * @throws IllegalArgumentException 如果文本组件对象为 {@code null} 则抛出异常 + */ public ChatComponentText(ChatComponentText text) { - this.text = text.getText(); + this.text = Validate.checkNotNull(text).getText(); } + /** + * 获取此聊天文本组件的文本内容 + * + * @return 文本内容 + */ public String getText() { return text; } + /** + * 设置此聊天文本组件的文本内容 + * + * @param text 文本内容 + */ public ChatComponentText setText(String text) { this.text = text; return this; diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatComponentTranslation.java b/src/main/java/com/minecraft/moonlake/chat/ChatComponentTranslation.java index 383186d..a1eebd9 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatComponentTranslation.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatComponentTranslation.java @@ -22,33 +22,68 @@ import java.util.Arrays; import java.util.List; +/** + *

ChatComponentTranslation

+ * 聊天翻译组件类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatComponentTranslation extends ChatComponentBase { private String key; private List withs; + /** + * 聊天翻译组件类构造函数 + */ public ChatComponentTranslation() { } + /** + * 聊天翻译组件类构造函数 + * + * @param key 键 + */ public ChatComponentTranslation(String key) { this.key = key; this.withs = new ArrayList<>(); } + /** + * 将指定翻译参数添加到此聊天翻译组件内 + * + * @param with 翻译参数 + */ public ChatComponentTranslation addWiths(Object... with) { withs.addAll(Arrays.asList(with)); return this; } + /** + * 获取此聊天翻译组件的键 + * + * @return 键 + */ public String getKey() { return key; } + /** + * 设置此聊天翻译组件的键 + * + * @param key 键 + */ public ChatComponentTranslation setKey(String key) { this.key = key; return this; } + /** + * 获取此聊天翻译组件的翻译参数列表 + * + * @return 翻译参数列表 + */ public List getWiths() { return withs; } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatHoverEvent.java b/src/main/java/com/minecraft/moonlake/chat/ChatHoverEvent.java index 6345826..412a416 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatHoverEvent.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatHoverEvent.java @@ -18,20 +18,43 @@ package com.minecraft.moonlake.chat; +/** + *

ChatHoverEvent

+ * 聊天组件移动上事件 + * + * @version 1.0 + * @author Month_Light + */ public class ChatHoverEvent { private final Action action; private final ChatComponent value; + /** + * 聊天组件移动上事件构造函数 + * + * @param action + * @param value + */ public ChatHoverEvent(Action action, ChatComponent value) { this.action = action; this.value = value; } + /** + * 获取此聊天组件移动上事件的交互类型 + * + * @return 交互类型 + */ public Action getAction() { return action; } + /** + * 获取此聊天组件移动上事件的值 + * + * @return 值 + */ public ChatComponent getValue() { return value; } @@ -62,14 +85,39 @@ public String toString() { '}'; } + /** + *

Action

+ * 聊天组件移动上事件交互类型 + * + * @version 1.0 + * @author Month_Light + */ public enum Action { + /** + * 交互类型: 显示文本 + */ SHOW_TEXT, + /** + * 交互类型: 显示成就 + */ SHOW_ACHIEVEMENT, + /** + * 交互类型: 显示物品 + */ SHOW_ITEM, + /** + * 交互类型: 显示实体 + */ SHOW_ENTITY, ; + /** + * 从名称返回聊天组件移动上事件交互类型 + * + * @param name 名称 + * @return Action + */ public static Action fromName(String name) { return Action.valueOf(name.toUpperCase()); } diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatSerializer.java b/src/main/java/com/minecraft/moonlake/chat/ChatSerializer.java index f1df214..875a5e1 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatSerializer.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatSerializer.java @@ -27,6 +27,13 @@ import java.lang.reflect.Type; import java.util.Map; +/** + *

ChatSerializer

+ * 聊天组件序列化类 + * + * @version 1.0 + * @author Month_Light + */ public final class ChatSerializer { private final static Gson GSON; @@ -38,13 +45,29 @@ public final class ChatSerializer { .create(); } + /** + * 聊天组件序列化类构造函数 + */ private ChatSerializer() { } + /** + * 将指定聊天组件转换为源文本内容 + * + * @param chatComponent 聊天组件 + * @return 源文本内容 + */ public static String toRaw(ChatComponent chatComponent) { return toRaw(chatComponent, true); } + /** + * 将指定聊天组件转换为源文本内容 + * + * @param chatComponent 聊天组件 + * @param color 是否附加颜色 + * @return 源文本内容 + */ public static String toRaw(ChatComponent chatComponent, boolean color) { StringBuilder builder = new StringBuilder(); toRaw0(chatComponent, color, builder); @@ -61,11 +84,24 @@ private static void toRaw0(ChatComponent chatComponent, boolean color, StringBui toRaw0(extra, color, builder); } + /** + * 将指定聊天组件转换为 Json 格式内容 + * + * @param chatComponent 聊天组件 + * @return Json + */ public static String toJson(ChatComponent chatComponent) { Validate.notNull(chatComponent, "The chat component object is null."); return GSON.toJson(chatComponent); } + /** + * 将指定 Json 格式的聊天内容转换为聊天组件 + * + * @param json Json + * @return ChatComponent + * @throws JsonParseException 如果解析 Json 时错误则抛出异常 + */ public static ChatComponent fromJson(String json) { Validate.notNull(json, "The json object is null."); try { @@ -77,6 +113,13 @@ public static ChatComponent fromJson(String json) { } } + /** + * 将指定 Json 格式 (宽容模式) 的聊天内容转换为聊天组件 + * + * @param json Json + * @return ChatComponent + * @throws JsonParseException 如果解析 Json 时错误则抛出异常 + */ public static ChatComponent fromJsonLenient(String json) { Validate.notNull(json, "The json object is null."); try { diff --git a/src/main/java/com/minecraft/moonlake/chat/ChatStyle.java b/src/main/java/com/minecraft/moonlake/chat/ChatStyle.java index ce29f08..ab670be 100644 --- a/src/main/java/com/minecraft/moonlake/chat/ChatStyle.java +++ b/src/main/java/com/minecraft/moonlake/chat/ChatStyle.java @@ -18,6 +18,13 @@ package com.minecraft.moonlake.chat; +/** + *

ChatStyle

+ * 聊天组件样式类 + * + * @version 1.0 + * @author Month_Light + */ public class ChatStyle { private ChatStyle parent; @@ -31,6 +38,9 @@ public class ChatStyle { ChatHoverEvent hoverEvent; String insertion; + /** + * 聊天组件样式 ROOT 类 + */ private final static ChatStyle ROOT = new ChatStyle() { @Override public ChatColor getColor() { @@ -133,96 +143,201 @@ public String toString() { } }; + /** + * 获取此聊天组件样式的颜色属性 + * + * @return 颜色属性 + */ public ChatColor getColor() { return color != null ? color : getParent().getColor(); } + /** + * 获取此聊天组件样式的加粗属性 + * + * @return 加粗属性 + */ public boolean getBold() { return bold != null ? bold : getParent().getBold(); } + /** + * 获取此聊天组件样式的斜体属性 + * + * @return 斜体属性 + */ public boolean getItalic() { return italic != null ? italic : getParent().getItalic(); } + /** + * 获取此聊天组件样式的删除线属性 + * + * @return 删除线属性 + */ public boolean getStrikethrough() { return strikethrough != null ? strikethrough : getParent().getStrikethrough(); } + /** + * 获取此聊天组件样式的下划线属性 + * + * @return 下划线属性 + */ public boolean getUnderlined() { return underlined != null ? underlined : getParent().getUnderlined(); } + /** + * 获取此聊天组件样式的随机字符属性 + * + * @return 随机字符属性 + */ public boolean getObfuscated() { return obfuscated != null ? obfuscated : getParent().getObfuscated(); } + /** + * 获取此聊天组件样式的点击事件属性 + * + * @return 点击事件属性 + */ public ChatClickEvent getClickEvent() { return clickEvent != null ? clickEvent : getParent().getClickEvent(); } + /** + * 获取此聊天组件样式的移动上事件属性 + * + * @return 移动上事件属性 + */ public ChatHoverEvent getHoverEvent() { return hoverEvent != null ? hoverEvent : getParent().getHoverEvent(); } + /** + * 获取此聊天组件样式的插入内容属性 + * + * @return 插入内容属性 + */ public String getInsertion() { return insertion != null ? insertion : getParent().getInsertion(); } + /** + * 设置此聊天组件样式的颜色属性 + * + * @param color 颜色属性 + */ public ChatStyle setColor(ChatColor color) { this.color = color; return this; } + /** + * 设置此聊天组件样式的加粗属性 + * + * @param bold 加粗属性 + */ public ChatStyle setBold(Boolean bold) { this.bold = bold; return this; } + /** + * 设置此聊天组件样式的斜体属性 + * + * @param italic 斜体属性 + */ public ChatStyle setItalic(Boolean italic) { this.italic = italic; return this; } + /** + * 设置此聊天组件样式的删除线属性 + * + * @param strikethrough 删除线属性 + */ public ChatStyle setStrikethrough(Boolean strikethrough) { this.strikethrough = strikethrough; return this; } + /** + * 设置此聊天组件样式的下划线属性 + * + * @param underlined 下划线属性 + */ public ChatStyle setUnderlined(Boolean underlined) { this.underlined = underlined; return this; } + /** + * 设置此聊天组件样式的随机字符属性 + * + * @param obfuscated 随机字符属性 + */ public ChatStyle setObfuscated(Boolean obfuscated) { this.obfuscated = obfuscated; return this; } + /** + * 设置此聊天组件样式的点击事件属性 + * + * @param clickEvent 点击事件属性 + */ public ChatStyle setClickEvent(ChatClickEvent clickEvent) { this.clickEvent = clickEvent; return this; } + /** + * 设置此聊天组件样式的移动上事件属性 + * + * @param hoverEvent 移动上事件属性 + */ public ChatStyle setHoverEvent(ChatHoverEvent hoverEvent) { this.hoverEvent = hoverEvent; return this; } + /** + * 设置此聊天组件样式的插入内容属性 + * + * @param insertion 插入内容属性 + */ public ChatStyle setInsertion(String insertion) { this.insertion = insertion; return this; } + /** + * 设置此聊天组件样式的父样式属性 + * + * @param parent 父样式属性 + */ public ChatStyle setParent(ChatStyle parent) { this.parent = parent; return this; } + /** + * 获取此聊天组件样式是否为空 + * + * @return 是否为空 + */ public boolean isEmpty() { return color == null && bold == null && italic == null && strikethrough == null && underlined == null && obfuscated == null && clickEvent == null && hoverEvent == null && insertion == null; } + /** + * 获取此聊天组件样式的父样式属性 + * + * @return 父样式属性 + */ private ChatStyle getParent() { return parent != null ? parent : ROOT; }