版本更新至:3.83
更新:Language2 工具类新增 [json2] 类型
This commit is contained in:
parent
7f8167156a
commit
cd65b08482
@ -14,6 +14,8 @@
|
|||||||
# 50: BOOK 语言类型指定 option 不存在
|
# 50: BOOK 语言类型指定 option 不存在
|
||||||
# 51: BOOK 语言类型识别异常
|
# 51: BOOK 语言类型识别异常
|
||||||
# 52: BOOK 语言类型 url 地址错误(http:// or https://)
|
# 52: BOOK 语言类型 url 地址错误(http:// or https://)
|
||||||
|
# 60: JSON2 语言类型指定 option 不存在
|
||||||
|
# 61: JSON2 语言类型识别异常
|
||||||
|
|
||||||
# 正常提示
|
# 正常提示
|
||||||
TEXT: '&f正常的提示'
|
TEXT: '&f正常的提示'
|
||||||
@ -112,3 +114,12 @@ BOOK-TEXT:
|
|||||||
- ' text: 测试'
|
- ' text: 测试'
|
||||||
- ' command: 执行命令'
|
- ' command: 执行命令'
|
||||||
- ' showtext: 显示文本'
|
- ' showtext: 显示文本'
|
||||||
|
|
||||||
|
# JSON2
|
||||||
|
JSON-NEW:
|
||||||
|
- '[json2]'
|
||||||
|
- '新 <@1> 内容 - 1'
|
||||||
|
- '新 <@1> 内容 - 2'
|
||||||
|
- '@option:1'
|
||||||
|
- ' text: JSON'
|
||||||
|
- ' showtext: 展示文本'
|
||||||
|
@ -6,7 +6,7 @@ website: http://www.15imc.com/index.html
|
|||||||
|
|
||||||
main: me.skymc.taboolib.Main
|
main: me.skymc.taboolib.Main
|
||||||
|
|
||||||
version: 3.829
|
version: 3.83
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
taboolib:
|
taboolib:
|
||||||
|
@ -20,11 +20,6 @@ public class Language2Format implements Language2Line {
|
|||||||
@Getter
|
@Getter
|
||||||
private List<Language2Line> language2Lines = new ArrayList<>();
|
private List<Language2Line> language2Lines = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
|
||||||
* 构造方法
|
|
||||||
*
|
|
||||||
* @param value 父类
|
|
||||||
*/
|
|
||||||
public Language2Format(Player player, Language2Value value) {
|
public Language2Format(Player player, Language2Value value) {
|
||||||
language2Value = value;
|
language2Value = value;
|
||||||
// 语言类型
|
// 语言类型
|
||||||
@ -62,6 +57,13 @@ public class Language2Format implements Language2Line {
|
|||||||
// 更改类型
|
// 更改类型
|
||||||
type = Language2Type.JSON;
|
type = Language2Type.JSON;
|
||||||
}
|
}
|
||||||
|
// JSON2
|
||||||
|
else if (line.contains("[json2]")) {
|
||||||
|
// 递交数据
|
||||||
|
parseValue(player, values, type);
|
||||||
|
// 更改类型
|
||||||
|
type = Language2Type.JSON2;
|
||||||
|
}
|
||||||
// 音效
|
// 音效
|
||||||
else if (line.contains("[sound]")) {
|
else if (line.contains("[sound]")) {
|
||||||
// 递交数据
|
// 递交数据
|
||||||
@ -101,7 +103,6 @@ public class Language2Format implements Language2Line {
|
|||||||
}
|
}
|
||||||
// 变量转换
|
// 变量转换
|
||||||
list = language2Value.setPlaceholder(list, player);
|
list = language2Value.setPlaceholder(list, player);
|
||||||
|
|
||||||
// 大标题
|
// 大标题
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TITLE:
|
case TITLE:
|
||||||
@ -115,6 +116,10 @@ public class Language2Format implements Language2Line {
|
|||||||
case JSON:
|
case JSON:
|
||||||
language2Lines.add(new Language2Json(this, list, player));
|
language2Lines.add(new Language2Json(this, list, player));
|
||||||
break;
|
break;
|
||||||
|
// JSON2
|
||||||
|
case JSON2:
|
||||||
|
language2Lines.add(new Language2Json2(this, list, player));
|
||||||
|
break;
|
||||||
// 音效
|
// 音效
|
||||||
case SOUND:
|
case SOUND:
|
||||||
language2Lines.add(new Language2Sound(this, list));
|
language2Lines.add(new Language2Sound(this, list));
|
||||||
@ -127,7 +132,6 @@ public class Language2Format implements Language2Line {
|
|||||||
language2Lines.add(new Language2Text(this, list));
|
language2Lines.add(new Language2Text(this, list));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清理数据
|
// 清理数据
|
||||||
list.clear();
|
list.clear();
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,11 @@ public enum Language2Type {
|
|||||||
*/
|
*/
|
||||||
JSON,
|
JSON,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON2 文本
|
||||||
|
*/
|
||||||
|
JSON2,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 大标题
|
* 大标题
|
||||||
*/
|
*/
|
||||||
|
@ -37,13 +37,13 @@ public class Language2Value {
|
|||||||
public Language2Value(Language2 language, String languageKey) {
|
public Language2Value(Language2 language, String languageKey) {
|
||||||
// 如果语言文件不存在
|
// 如果语言文件不存在
|
||||||
if (language == null || languageKey == null) {
|
if (language == null || languageKey == null) {
|
||||||
languageValue = Collections.singletonList(ChatColor.DARK_RED + "[<ERROR-0>]");
|
languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-0>]", "[return]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果语言文本不存在
|
// 如果语言文本不存在
|
||||||
if (!language.getConfiguration().contains(languageKey)) {
|
if (!language.getConfiguration().contains(languageKey)) {
|
||||||
languageValue = Collections.singletonList(ChatColor.DARK_RED + "[<ERROR-1: " + languageKey + ">]");
|
languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-1: " + languageKey + ">]", "[return]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,206 @@
|
|||||||
|
package me.skymc.taboolib.string.language2.value;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import me.skymc.taboolib.inventory.ItemUtils;
|
||||||
|
import me.skymc.taboolib.jsonformatter.JSONFormatter;
|
||||||
|
import me.skymc.taboolib.jsonformatter.click.ClickEvent;
|
||||||
|
import me.skymc.taboolib.jsonformatter.click.OpenUrlEvent;
|
||||||
|
import me.skymc.taboolib.jsonformatter.click.RunCommandEvent;
|
||||||
|
import me.skymc.taboolib.jsonformatter.click.SuggestCommandEvent;
|
||||||
|
import me.skymc.taboolib.jsonformatter.hover.HoverEvent;
|
||||||
|
import me.skymc.taboolib.jsonformatter.hover.ShowItemEvent;
|
||||||
|
import me.skymc.taboolib.jsonformatter.hover.ShowTextEvent;
|
||||||
|
import me.skymc.taboolib.string.language2.Language2Format;
|
||||||
|
import me.skymc.taboolib.string.language2.Language2Line;
|
||||||
|
import me.skymc.taboolib.string.language2.Language2Value;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author sky
|
||||||
|
* @since 2018-03-10 15:55:28
|
||||||
|
*/
|
||||||
|
public class Language2Json2 implements Language2Line {
|
||||||
|
|
||||||
|
private static final String KEY_TEXT = " text: ";
|
||||||
|
private static final String KEY_COMMAND = " command: ";
|
||||||
|
private static final String KEY_SUGGEST = " suggest: ";
|
||||||
|
private static final String KEY_URL = " url: ";
|
||||||
|
private static final String KEY_SHOWTEXT = " showtext: ";
|
||||||
|
private static final String KEY_SHOWITEM = " showitem: ";
|
||||||
|
private static final String KEY_OPTION = "@option:";
|
||||||
|
private static final Pattern pattern = Pattern.compile("<@(\\S+)>");
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private Player player;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private Language2Value value;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private HashMap<String, JSONFormatter> options = new HashMap<>();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private JSONFormatter json = new JSONFormatter();
|
||||||
|
|
||||||
|
public Language2Json2(Language2Format format, List<String> list, Player player) {
|
||||||
|
// 变量
|
||||||
|
this.player = player;
|
||||||
|
this.value = format.getLanguage2Value();
|
||||||
|
|
||||||
|
// 获取书本设置
|
||||||
|
formatOptions(list);
|
||||||
|
// 遍历内容
|
||||||
|
int lineNumber = 0;
|
||||||
|
for (String line : list) {
|
||||||
|
if (line.startsWith("@option")) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
Matcher matcher = pattern.matcher(line);
|
||||||
|
boolean find = false;
|
||||||
|
while (matcher.find()) {
|
||||||
|
find = true;
|
||||||
|
String optionName = matcher.group(1);
|
||||||
|
String optionFullName = "<@" + matcher.group(1) + ">";
|
||||||
|
// 判断设置是否存在
|
||||||
|
if (!options.containsKey(optionName)) {
|
||||||
|
json.append("§4[<ERROR-60: " + format.getLanguage2Value().getLanguageKey() + ">]");
|
||||||
|
} else {
|
||||||
|
String[] line_split = line.split(optionFullName);
|
||||||
|
try {
|
||||||
|
// 单独一行
|
||||||
|
if (line_split.length == 0) {
|
||||||
|
json.append(options.get(optionName));
|
||||||
|
} else {
|
||||||
|
// 前段
|
||||||
|
json.append(line_split[0]);
|
||||||
|
// 变量
|
||||||
|
json.append(options.get(optionName));
|
||||||
|
// 后段
|
||||||
|
if (line_split.length >= 2) {
|
||||||
|
// 获取文本
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 1 ; i < line_split.length ; i++) {
|
||||||
|
sb.append(line_split[i]).append(optionFullName);
|
||||||
|
}
|
||||||
|
// 更改文本
|
||||||
|
line = sb.substring(0, sb.length() - optionFullName.length());
|
||||||
|
// 如果后段还有变量
|
||||||
|
if (!pattern.matcher(line).find()) {
|
||||||
|
json.append(line_split[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
json.append("§4[<ERROR-61: " + format.getLanguage2Value().getLanguageKey() + ">]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!find) {
|
||||||
|
json.append(line);
|
||||||
|
}
|
||||||
|
if (lineNumber + 1 < list.size()) {
|
||||||
|
json.newLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void formatOptions(List<String> list) {
|
||||||
|
HashMap<String, List<String>> _options = getOptions(list);
|
||||||
|
for (Entry<String, List<String>> entry : _options.entrySet()) {
|
||||||
|
JSONFormatter jsonFormatter = new JSONFormatter();
|
||||||
|
String current = ChatColor.DARK_RED + "[<ERROR-20: " + value.getLanguageKey() + ">]";
|
||||||
|
ClickEvent clickEvent = null;
|
||||||
|
HoverEvent hoverEvent = null;
|
||||||
|
for (String _option : entry.getValue()) {
|
||||||
|
if (_option.startsWith(KEY_TEXT)) {
|
||||||
|
current = _option.substring(KEY_TEXT.length());
|
||||||
|
}
|
||||||
|
else if (_option.startsWith(KEY_COMMAND)) {
|
||||||
|
clickEvent = new RunCommandEvent(_option.substring(KEY_COMMAND.length()));
|
||||||
|
}
|
||||||
|
else if (_option.startsWith(KEY_SUGGEST)) {
|
||||||
|
clickEvent = new SuggestCommandEvent(_option.substring(KEY_SUGGEST.length()));
|
||||||
|
}
|
||||||
|
else if (_option.startsWith(KEY_URL)) {
|
||||||
|
clickEvent = new OpenUrlEvent(_option.substring(KEY_URL.length()));
|
||||||
|
}
|
||||||
|
else if (_option.startsWith(KEY_SHOWTEXT)) {
|
||||||
|
hoverEvent = new ShowTextEvent(_option.replace("||", "\n").substring(KEY_SHOWTEXT.length()));
|
||||||
|
}
|
||||||
|
else if (_option.startsWith(KEY_SHOWITEM)) {
|
||||||
|
ItemStack item = ItemUtils.getCacheItem(_option.substring(KEY_SHOWITEM.length()));
|
||||||
|
if (item == null) {
|
||||||
|
item = new ItemStack(Material.STONE);
|
||||||
|
}
|
||||||
|
hoverEvent = new ShowItemEvent(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
append(jsonFormatter, current, clickEvent, hoverEvent);
|
||||||
|
options.put(entry.getKey(), jsonFormatter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void append(JSONFormatter json, String current, ClickEvent clickEvent, HoverEvent hoverEvent) {
|
||||||
|
if (clickEvent == null && hoverEvent == null) {
|
||||||
|
json.append(current);
|
||||||
|
} else if (clickEvent != null && hoverEvent == null) {
|
||||||
|
json.appendClick(current, clickEvent);
|
||||||
|
} else if (clickEvent == null && hoverEvent != null) {
|
||||||
|
json.appendHover(current, hoverEvent);
|
||||||
|
} else {
|
||||||
|
json.appendHoverClick(current, hoverEvent, clickEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private HashMap<String, List<String>> getOptions(List<String> list) {
|
||||||
|
HashMap<String, List<String>> options_source = new HashMap<>();
|
||||||
|
List<String> option = new ArrayList<>();
|
||||||
|
// 遍历
|
||||||
|
String optionName = null;
|
||||||
|
boolean start = false;
|
||||||
|
// 遍历所有代码
|
||||||
|
for (String line : list) {
|
||||||
|
if (line.startsWith(KEY_OPTION)) {
|
||||||
|
// 如果已经开始检测
|
||||||
|
if (start) {
|
||||||
|
// 返回源码
|
||||||
|
options_source.put(optionName, new ArrayList<>(option));
|
||||||
|
// 清除源码
|
||||||
|
option.clear();
|
||||||
|
}
|
||||||
|
// 标签
|
||||||
|
start = true;
|
||||||
|
// 当前设置名称
|
||||||
|
optionName = line.substring(KEY_OPTION.length());
|
||||||
|
}
|
||||||
|
else if (start) {
|
||||||
|
option.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 返回最后设置
|
||||||
|
options_source.put(optionName, option);
|
||||||
|
return options_source;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void send(Player player) {
|
||||||
|
json.send(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void console() {
|
||||||
|
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user