feat: 添加简易Tellraw处理类

Signed-off-by: 502647092 <admin@yumc.pw>
merge/1/MERGE
502647092 2016-08-10 21:04:08 +08:00
parent 89b8139617
commit ffd2d25db6
2 changed files with 203 additions and 0 deletions

View File

@ -0,0 +1,60 @@
package pw.yumc.YumCore.tellraw;
/**
* Tellraw
*
* @since 2016810 7:10:36
* @author
*/
public class MessagePart {
/**
*
*/
public String text = "";
/**
*
*/
public String clickActionName;
/**
*
*/
public String clickActionData;
/**
*
*/
public String hoverActionName;
/**
*/
public String hoverActionData;
public MessagePart() {
this("");
}
public MessagePart(final String text) {
this.text = text;
}
public boolean hasText() {
return text != null && !text.isEmpty();
}
// {
// "text":"TestClick",
// "clickEvent":{"action":"run_command","value":"yum list"},
// "hoverEvent":{"action":"show_text","value":{"text":"§a点击查看插件列表"}}
// }
public void writeJson(final StringBuffer str) {
str.append("{");
str.append("\"text\":\"" + text + "\"");
if (clickActionName != null) {
str.append(",");
str.append(String.format("\"clickEvent\":{\"action\":\"%s\",\"value\":\"%s\"}", clickActionName, clickActionData));
}
if (hoverActionName != null) {
str.append(",");
str.append(String.format("\"hoverEvent\":{\"action\":\"%s\",\"value\":{\"text\":\"%s\"}", clickActionName, clickActionData));
}
str.append("}");
}
}

View File

@ -0,0 +1,143 @@
package pw.yumc.YumCore.tellraw;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* TellRaw
*
* @since 2016810 7:10:08
* @author
*/
public class Tellraw {
List<MessagePart> messageParts = new ArrayList<>();
public Tellraw command(final String command) {
onClick("run_command", command);
return this;
}
public void send(final CommandSender sender) {
if (sender instanceof Player) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + toJsonString());
} else {
sender.sendMessage(toOldMessageFormat());
}
}
public Tellraw suggest(final String command) {
onClick("suggest_command", command);
return this;
}
/**
*
*
* @param part
*
* @return {@link Tellraw}
*/
public Tellraw then(final MessagePart part) {
if (!latest().hasText()) {
throw new IllegalStateException("previous message part has no text");
}
messageParts.add(part);
return this;
}
/**
*
*
* @param text
*
* @return {@link Tellraw}
*/
public Tellraw then(final String text) {
then(new MessagePart(text));
return this;
}
public Tellraw tip(final String text) {
onHover("show_text", text);
return this;
}
public String toJsonString() {
final StringBuffer msg = new StringBuffer();
msg.append("[\"\"");
for (final MessagePart messagePart : messageParts) {
msg.append(",");
messagePart.writeJson(msg);
}
msg.append("]");
return null;
}
/**
*
* JSON
* <p>
*
* <ol>
* <li>.</li>
* <li>.</li>
* <li>.</li>
* </ol>
*
* </p>
* <p>
* {@link ChatColor#stripColor(String)}.
* </p>
*
* @return
*/
public String toOldMessageFormat() {
final StringBuilder result = new StringBuilder();
for (final MessagePart part : messageParts) {
result.append(part.text);
}
return result.toString();
}
/**
*
*
* @return
*/
private MessagePart latest() {
return messageParts.get(messageParts.size() - 1);
}
/**
*
*
* @param name
*
* @param data
*
*/
private void onClick(final String name, final String data) {
final MessagePart latest = latest();
latest.clickActionName = name;
latest.clickActionData = data;
}
/**
*
*
* @param name
*
* @param data
*
*/
private void onHover(final String name, final String data) {
final MessagePart latest = latest();
latest.hoverActionName = name;
latest.hoverActionData = data;
}
}