更新
This commit is contained in:
@@ -1,92 +1,105 @@
|
||||
package me.skymc.taboolib.string.language2;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.skymc.taboolib.fileutils.ConfigUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.skymc.taboolib.fileutils.ConfigUtils;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018年2月13日 下午2:37:07
|
||||
*/
|
||||
public class Language2 {
|
||||
|
||||
@Getter
|
||||
private FileConfiguration configuration;
|
||||
@Getter
|
||||
private File languageFile;
|
||||
@Getter
|
||||
private File languageFolder;
|
||||
@Getter
|
||||
private Plugin plugin;
|
||||
@Getter
|
||||
private String languageName;
|
||||
|
||||
public Language2(Plugin plugin) {
|
||||
this("zh_CN", plugin);
|
||||
}
|
||||
|
||||
public Language2(String languageName, Plugin plugin) {
|
||||
this.languageName = languageName;
|
||||
this.plugin = plugin;
|
||||
reload(languageName);
|
||||
}
|
||||
|
||||
public Language2Value get(String key) {
|
||||
return new Language2Value(this, key);
|
||||
}
|
||||
|
||||
public Language2Value get(String key, String... placeholder) {
|
||||
Language2Value value = new Language2Value(this, key);
|
||||
for (int i = 0 ; i < placeholder.length ; i++) {
|
||||
value.addPlaceholder("$" + i, placeholder[i]);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
reload(this.languageName);
|
||||
}
|
||||
|
||||
public void reload(String languageName) {
|
||||
createFolder(plugin);
|
||||
languageName = formatName(languageName);
|
||||
languageFile = new File(languageFolder, languageName);
|
||||
if (!languageFile.exists()) {
|
||||
if (plugin.getResource("Language2/" + languageName) == null) {
|
||||
try {
|
||||
throw new FileNotFoundException("语言文件 " + languageName + " 不存在");
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
} else {
|
||||
plugin.saveResource("Language2/" + languageName, true);
|
||||
}
|
||||
}
|
||||
configuration = ConfigUtils.load(plugin, languageFile);
|
||||
}
|
||||
|
||||
public String setPlaceholderAPI(Player player, String string) {
|
||||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null && player != null) {
|
||||
return PlaceholderAPI.setPlaceholders(player, string);
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
private String formatName(String name) {
|
||||
return name.contains(".yml") ? name : name + ".yml";
|
||||
}
|
||||
|
||||
private void createFolder(Plugin plugin) {
|
||||
languageFolder = new File(plugin.getDataFolder(), "Language2");
|
||||
if (!languageFolder.exists()) {
|
||||
languageFolder.mkdir();
|
||||
}
|
||||
}
|
||||
|
||||
private FileConfiguration configuration;
|
||||
private File languageFile;
|
||||
private File languageFolder;
|
||||
private Plugin plugin;
|
||||
private String languageName;
|
||||
|
||||
public FileConfiguration getConfiguration() {
|
||||
return configuration;
|
||||
}
|
||||
|
||||
public File getLanguageFile() {
|
||||
return languageFile;
|
||||
}
|
||||
|
||||
public File getLanguageFolder() {
|
||||
return languageFolder;
|
||||
}
|
||||
|
||||
public Plugin getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
public String getLanguageName() {
|
||||
return languageName;
|
||||
}
|
||||
|
||||
public Language2(Plugin plugin) {
|
||||
this("zh_CN", plugin);
|
||||
}
|
||||
|
||||
public Language2(String languageName, Plugin plugin) {
|
||||
this.languageName = languageName;
|
||||
this.plugin = plugin;
|
||||
reload(languageName);
|
||||
}
|
||||
|
||||
public Language2Value get(String key) {
|
||||
return new Language2Value(this, key);
|
||||
}
|
||||
|
||||
public Language2Value get(String key, String... placeholder) {
|
||||
Language2Value value = new Language2Value(this, key);
|
||||
for (int i = 0; i < placeholder.length; i++) {
|
||||
value.addPlaceholder("$" + i, placeholder[i]);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
reload(this.languageName);
|
||||
}
|
||||
|
||||
public void reload(String languageName) {
|
||||
createFolder(plugin);
|
||||
languageName = formatName(languageName);
|
||||
languageFile = new File(languageFolder, languageName);
|
||||
if (!languageFile.exists()) {
|
||||
if (plugin.getResource("Language2/" + languageName) == null) {
|
||||
try {
|
||||
throw new FileNotFoundException("语言文件 " + languageName + " 不存在");
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
} else {
|
||||
plugin.saveResource("Language2/" + languageName, true);
|
||||
}
|
||||
}
|
||||
configuration = ConfigUtils.load(plugin, languageFile);
|
||||
}
|
||||
|
||||
public String setPlaceholderAPI(Player player, String string) {
|
||||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null && player != null) {
|
||||
return PlaceholderAPI.setPlaceholders(player, string);
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
private String formatName(String name) {
|
||||
return name.contains(".yml") ? name : name + ".yml";
|
||||
}
|
||||
|
||||
private void createFolder(Plugin plugin) {
|
||||
languageFolder = new File(plugin.getDataFolder(), "Language2");
|
||||
if (!languageFolder.exists()) {
|
||||
languageFolder.mkdir();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,116 +1,112 @@
|
||||
package me.skymc.taboolib.string.language2;
|
||||
|
||||
import me.skymc.taboolib.string.language2.value.*;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Action;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Book;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Json;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Json2;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Sound;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Text;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Title;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018-03-08 22:45:56
|
||||
*/
|
||||
public class Language2Format implements Language2Line {
|
||||
|
||||
@Getter
|
||||
private Language2Value language2Value = null;
|
||||
|
||||
@Getter
|
||||
private List<Language2Line> language2Lines = new ArrayList<>();
|
||||
|
||||
public Language2Format(Player player, Language2Value value) {
|
||||
language2Value = value;
|
||||
// 语言类型
|
||||
Language2Type type = Language2Type.TEXT;
|
||||
// 递交数据
|
||||
List<String> values = new LinkedList<>();
|
||||
|
||||
// 遍历内容
|
||||
for (String line : value.getLanguageValue()) {
|
||||
// 文本类型
|
||||
if (line.contains("[text]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.TEXT;
|
||||
}
|
||||
// 大标题
|
||||
else if (line.contains("[title]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.TITLE;
|
||||
}
|
||||
// 小标题
|
||||
else if (line.contains("[action]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.ACTION;
|
||||
}
|
||||
// JSON
|
||||
else if (line.contains("[json]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.JSON;
|
||||
}
|
||||
// JSON2
|
||||
else if (line.contains("[json2]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.JSON2;
|
||||
}
|
||||
// 音效
|
||||
else if (line.contains("[sound]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.SOUND;
|
||||
}
|
||||
// 书本
|
||||
else if (line.contains("[book]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.BOOK;
|
||||
}
|
||||
else if (line.contains("[return]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
}
|
||||
// 默认
|
||||
else {
|
||||
// 追加内容
|
||||
values.add(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 识别内容
|
||||
*
|
||||
* @param player 玩家
|
||||
* @param list 数据
|
||||
* @param type 类型
|
||||
*/
|
||||
private void parseValue(Player player, List<String> list, Language2Type type) {
|
||||
if (list.size() == 0) {
|
||||
return;
|
||||
}
|
||||
// 变量转换
|
||||
List<String> listPlaceholder = language2Value.setPlaceholder(list, player);
|
||||
// 大标题
|
||||
|
||||
private Language2Value language2Value;
|
||||
private List<Language2Line> language2Lines = new ArrayList<>();
|
||||
|
||||
public Language2Value getLanguage2Value() {
|
||||
return language2Value;
|
||||
}
|
||||
|
||||
public List<Language2Line> getLanguage2Lines() {
|
||||
return language2Lines;
|
||||
}
|
||||
|
||||
public Language2Format(Player player, Language2Value value) {
|
||||
language2Value = value;
|
||||
// 语言类型
|
||||
Language2Type type = Language2Type.TEXT;
|
||||
// 递交数据
|
||||
List<String> values = new LinkedList<>();
|
||||
|
||||
// 遍历内容
|
||||
for (String line : value.getLanguageValue()) {
|
||||
// 文本类型
|
||||
if (line.contains("[text]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.TEXT;
|
||||
}
|
||||
// 大标题
|
||||
else if (line.contains("[title]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.TITLE;
|
||||
}
|
||||
// 小标题
|
||||
else if (line.contains("[action]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.ACTION;
|
||||
}
|
||||
// JSON
|
||||
else if (line.contains("[json]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.JSON;
|
||||
}
|
||||
// JSON2
|
||||
else if (line.contains("[json2]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.JSON2;
|
||||
}
|
||||
// 音效
|
||||
else if (line.contains("[sound]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.SOUND;
|
||||
}
|
||||
// 书本
|
||||
else if (line.contains("[book]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
// 更改类型
|
||||
type = Language2Type.BOOK;
|
||||
} else if (line.contains("[return]")) {
|
||||
// 递交数据
|
||||
parseValue(player, values, type);
|
||||
}
|
||||
// 默认
|
||||
else {
|
||||
// 追加内容
|
||||
values.add(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 识别内容
|
||||
*
|
||||
* @param player 玩家
|
||||
* @param list 数据
|
||||
* @param type 类型
|
||||
*/
|
||||
private void parseValue(Player player, List<String> list, Language2Type type) {
|
||||
if (list.size() == 0) {
|
||||
return;
|
||||
}
|
||||
// 变量转换
|
||||
List<String> listPlaceholder = language2Value.setPlaceholder(list, player);
|
||||
// 大标题
|
||||
switch (type) {
|
||||
case TITLE:
|
||||
language2Lines.add(new Language2Title(this, listPlaceholder));
|
||||
@@ -138,23 +134,23 @@ public class Language2Format implements Language2Line {
|
||||
default:
|
||||
language2Lines.add(new Language2Text(this, listPlaceholder));
|
||||
break;
|
||||
}
|
||||
// 清理数据
|
||||
list.clear();
|
||||
listPlaceholder.clear();
|
||||
}
|
||||
}
|
||||
// 清理数据
|
||||
list.clear();
|
||||
listPlaceholder.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (Language2Line line : language2Lines) {
|
||||
line.send(player);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (Language2Line line : language2Lines) {
|
||||
line.send(player);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
for (Language2Line line : language2Lines) {
|
||||
line.console();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void console() {
|
||||
for (Language2Line line : language2Lines) {
|
||||
line.console();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,214 +1,219 @@
|
||||
package me.skymc.taboolib.string.language2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import me.skymc.taboolib.string.language2.value.Language2Text;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.string.language2.value.Language2Text;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018年2月13日 下午3:05:15
|
||||
*/
|
||||
public class Language2Value {
|
||||
|
||||
@Getter
|
||||
private Language2 language;
|
||||
|
||||
@Getter
|
||||
private String languageKey;
|
||||
|
||||
@Getter
|
||||
private List<String> languageValue;
|
||||
|
||||
@Getter
|
||||
private LinkedHashMap<String, String> placeholder = new LinkedHashMap<>();
|
||||
|
||||
@Getter
|
||||
private boolean enablePlaceholderAPI = false;
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
*/
|
||||
public Language2Value(Language2 language, String languageKey) {
|
||||
// 如果语言文件不存在
|
||||
if (language == null || languageKey == null) {
|
||||
languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-0>]", "[return]");
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果语言文本不存在
|
||||
if (!language.getConfiguration().contains(languageKey)) {
|
||||
languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-1: " + languageKey + ">]", "[return]");
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果不是集合类型
|
||||
if (language.getConfiguration().get(languageKey) instanceof List) {
|
||||
// 设置文本
|
||||
languageValue = asColored(language.getConfiguration().getStringList(languageKey));
|
||||
// 追加结尾
|
||||
languageValue.add("[return]");
|
||||
// 是否启用PAPI
|
||||
if (languageValue.get(0).contains("[papi]")) {
|
||||
enablePlaceholderAPI = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// 设置文本
|
||||
languageValue = Arrays.asList(ChatColor.translateAlternateColorCodes('&', language.getConfiguration().getString(languageKey)), "[return]");
|
||||
}
|
||||
|
||||
// 初始化变量
|
||||
this.language = language;
|
||||
this.languageKey = languageKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 向玩家发送信息
|
||||
*
|
||||
* @param player
|
||||
*/
|
||||
public void send(Player player) {
|
||||
new Language2Format(player, this).send(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* 向玩家发送信息
|
||||
*
|
||||
* @param players 玩家
|
||||
*/
|
||||
public void send(List<Player> players) {
|
||||
for (Player player : players) {
|
||||
send(player);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 向指令发送者发送信息
|
||||
*
|
||||
* @param sender
|
||||
*/
|
||||
public void send(CommandSender sender) {
|
||||
if (sender instanceof Player) {
|
||||
send((Player) sender);
|
||||
}
|
||||
else {
|
||||
console();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 全服公告
|
||||
*/
|
||||
public void broadcast() {
|
||||
send(new ArrayList<>(Bukkit.getOnlinePlayers()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送到后台
|
||||
*/
|
||||
public void console() {
|
||||
new Language2Format(null, this).console();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文本
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String asString() {
|
||||
Language2Format format = new Language2Format(null, this);
|
||||
if (format.getLanguage2Lines().get(0) instanceof Language2Text) {
|
||||
Language2Text text = (Language2Text) format.getLanguage2Lines().get(0);
|
||||
return setPlaceholder(text.getText().get(0), null);
|
||||
}
|
||||
else {
|
||||
return languageValue.size() == 0 ? ChatColor.DARK_RED + "[<ERROR-1>]" : setPlaceholder(languageValue.get(0), null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文本集合
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<String> asStringList() {
|
||||
Language2Format format = new Language2Format(null, this);
|
||||
if (format.getLanguage2Lines().get(0) instanceof Language2Text) {
|
||||
Language2Text text = (Language2Text) format.getLanguage2Lines().get(0);
|
||||
return setPlaceholder(text.getText(), null);
|
||||
}
|
||||
else {
|
||||
return Collections.singletonList(languageValue.size() == 0 ? ChatColor.DARK_RED + "[<ERROR-1>]" : setPlaceholder(languageValue.get(0), null));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量替换
|
||||
*
|
||||
* @param value 替换文本
|
||||
* @param player 检测玩家
|
||||
* @return String
|
||||
*/
|
||||
public String setPlaceholder(String value, Player player) {
|
||||
for (Entry<String, String> entry : placeholder.entrySet()) {
|
||||
value = value.replace(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return isEnablePlaceholderAPI() ? this.language.setPlaceholderAPI(player, value) : value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量替换
|
||||
*
|
||||
* @param list 替换集合
|
||||
* @param player 检测玩家
|
||||
* @return {@link List}
|
||||
*/
|
||||
public List<String> setPlaceholder(List<String> list, Player player) {
|
||||
List<String> _list = new ArrayList<>(list);
|
||||
for (int i = 0 ; i < _list.size() ; i++) {
|
||||
_list.set(i, setPlaceholder(_list.get(i), player));
|
||||
}
|
||||
return _list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量替换构造
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return {@link Language2Value}
|
||||
*/
|
||||
public Language2Value addPlaceholder(String key, String value) {
|
||||
this.placeholder.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换颜色
|
||||
*
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
public List<String> asColored(List<String> list) {
|
||||
for (int i = 0 ; i < list.size() ; i++) {
|
||||
list.set(i, ChatColor.translateAlternateColorCodes('&', list.get(i)));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return asString();
|
||||
}
|
||||
|
||||
private Language2 language;
|
||||
|
||||
private String languageKey;
|
||||
|
||||
private List<String> languageValue;
|
||||
|
||||
private LinkedHashMap<String, String> placeholder = new LinkedHashMap<>();
|
||||
|
||||
private boolean enablePlaceholderAPI = false;
|
||||
|
||||
public Language2 getLanguage() {
|
||||
return language;
|
||||
}
|
||||
|
||||
public String getLanguageKey() {
|
||||
return languageKey;
|
||||
}
|
||||
|
||||
public List<String> getLanguageValue() {
|
||||
return languageValue;
|
||||
}
|
||||
|
||||
public LinkedHashMap<String, String> getPlaceholder() {
|
||||
return placeholder;
|
||||
}
|
||||
|
||||
public boolean isEnablePlaceholderAPI() {
|
||||
return enablePlaceholderAPI;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
*/
|
||||
public Language2Value(Language2 language, String languageKey) {
|
||||
// 如果语言文件不存在
|
||||
if (language == null || languageKey == null) {
|
||||
languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-0>]", "[return]");
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果语言文本不存在
|
||||
if (!language.getConfiguration().contains(languageKey)) {
|
||||
languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-1: " + languageKey + ">]", "[return]");
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果不是集合类型
|
||||
if (language.getConfiguration().get(languageKey) instanceof List) {
|
||||
// 设置文本
|
||||
languageValue = asColored(language.getConfiguration().getStringList(languageKey));
|
||||
// 追加结尾
|
||||
languageValue.add("[return]");
|
||||
// 是否启用PAPI
|
||||
if (languageValue.get(0).contains("[papi]")) {
|
||||
enablePlaceholderAPI = true;
|
||||
}
|
||||
} else {
|
||||
// 设置文本
|
||||
languageValue = Arrays.asList(ChatColor.translateAlternateColorCodes('&', language.getConfiguration().getString(languageKey)), "[return]");
|
||||
}
|
||||
|
||||
// 初始化变量
|
||||
this.language = language;
|
||||
this.languageKey = languageKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 向玩家发送信息
|
||||
*
|
||||
* @param player
|
||||
*/
|
||||
public void send(Player player) {
|
||||
new Language2Format(player, this).send(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* 向玩家发送信息
|
||||
*
|
||||
* @param players 玩家
|
||||
*/
|
||||
public void send(List<Player> players) {
|
||||
for (Player player : players) {
|
||||
send(player);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 向指令发送者发送信息
|
||||
*
|
||||
* @param sender
|
||||
*/
|
||||
public void send(CommandSender sender) {
|
||||
if (sender instanceof Player) {
|
||||
send((Player) sender);
|
||||
} else {
|
||||
console();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 全服公告
|
||||
*/
|
||||
public void broadcast() {
|
||||
send(new ArrayList<>(Bukkit.getOnlinePlayers()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送到后台
|
||||
*/
|
||||
public void console() {
|
||||
new Language2Format(null, this).console();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文本
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String asString() {
|
||||
Language2Format format = new Language2Format(null, this);
|
||||
if (format.getLanguage2Lines().get(0) instanceof Language2Text) {
|
||||
Language2Text text = (Language2Text) format.getLanguage2Lines().get(0);
|
||||
return setPlaceholder(text.getText().get(0), null);
|
||||
} else {
|
||||
return languageValue.size() == 0 ? ChatColor.DARK_RED + "[<ERROR-1>]" : setPlaceholder(languageValue.get(0), null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文本集合
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<String> asStringList() {
|
||||
Language2Format format = new Language2Format(null, this);
|
||||
if (format.getLanguage2Lines().get(0) instanceof Language2Text) {
|
||||
Language2Text text = (Language2Text) format.getLanguage2Lines().get(0);
|
||||
return setPlaceholder(text.getText(), null);
|
||||
} else {
|
||||
return Collections.singletonList(languageValue.size() == 0 ? ChatColor.DARK_RED + "[<ERROR-1>]" : setPlaceholder(languageValue.get(0), null));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量替换
|
||||
*
|
||||
* @param value 替换文本
|
||||
* @param player 检测玩家
|
||||
* @return String
|
||||
*/
|
||||
public String setPlaceholder(String value, Player player) {
|
||||
for (Entry<String, String> entry : placeholder.entrySet()) {
|
||||
value = value.replace(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return isEnablePlaceholderAPI() ? this.language.setPlaceholderAPI(player, value) : value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量替换
|
||||
*
|
||||
* @param list 替换集合
|
||||
* @param player 检测玩家
|
||||
* @return {@link List}
|
||||
*/
|
||||
public List<String> setPlaceholder(List<String> list, Player player) {
|
||||
List<String> _list = new ArrayList<>(list);
|
||||
for (int i = 0; i < _list.size(); i++) {
|
||||
_list.set(i, setPlaceholder(_list.get(i), player));
|
||||
}
|
||||
return _list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量替换构造
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return {@link Language2Value}
|
||||
*/
|
||||
public Language2Value addPlaceholder(String key, String value) {
|
||||
this.placeholder.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换颜色
|
||||
*
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
public List<String> asColored(List<String> list) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
list.set(i, ChatColor.translateAlternateColorCodes('&', list.get(i)));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return asString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.Main;
|
||||
import me.skymc.taboolib.TabooLib;
|
||||
import me.skymc.taboolib.display.ActionUtils;
|
||||
@@ -15,81 +7,94 @@ import me.skymc.taboolib.other.NumberUtils;
|
||||
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.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018年2月13日 下午3:58:07
|
||||
*/
|
||||
public class Language2Action implements Language2Line {
|
||||
|
||||
private static final String KEY_TEXT = " text: ";
|
||||
private static final String KEY_STAY = " repeat: ";
|
||||
|
||||
@Getter
|
||||
private String text = "";
|
||||
|
||||
@Getter
|
||||
private int repeat = 1;
|
||||
|
||||
@Getter
|
||||
private Language2Value value;
|
||||
|
||||
public Language2Action(Language2Format format, List<String> list) {
|
||||
// 变量初始化
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String message : list) {
|
||||
try {
|
||||
// 动作栏提示
|
||||
if (message.startsWith(KEY_TEXT)) {
|
||||
text = message.substring(KEY_TEXT.length());
|
||||
}
|
||||
// 持续时间
|
||||
if (message.startsWith(KEY_STAY)) {
|
||||
repeat = NumberUtils.getInteger(message.substring(KEY_STAY.length()));
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
// 识别异常
|
||||
text = ChatColor.DARK_RED + "[<ERROR-11: " + value.getLanguageKey() + ">]";
|
||||
}
|
||||
}
|
||||
|
||||
// 检查重复次数
|
||||
if (repeat < 0) {
|
||||
repeat = 1;
|
||||
text = ChatColor.DARK_RED + "[<ERROR-12: " + value.getLanguageKey() + ">]";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送给玩家
|
||||
*
|
||||
* @param player 玩家
|
||||
*/
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
// 检查版本
|
||||
if (TabooLib.getVerint() < 10800) {
|
||||
player.sendMessage(ChatColor.DARK_RED + "[<ERROR-30: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
else {
|
||||
new BukkitRunnable() {
|
||||
int times = 0;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ActionUtils.send(player, text);
|
||||
if ((times += 1) >= repeat) {
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInst(), 0, 20);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
private static final String KEY_TEXT = " text: ";
|
||||
private static final String KEY_STAY = " repeat: ";
|
||||
|
||||
private String text = "";
|
||||
|
||||
private int repeat = 1;
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public int getRepeat() {
|
||||
return repeat;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public Language2Action(Language2Format format, List<String> list) {
|
||||
// 变量初始化
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String message : list) {
|
||||
try {
|
||||
// 动作栏提示
|
||||
if (message.startsWith(KEY_TEXT)) {
|
||||
text = message.substring(KEY_TEXT.length());
|
||||
}
|
||||
// 持续时间
|
||||
if (message.startsWith(KEY_STAY)) {
|
||||
repeat = NumberUtils.getInteger(message.substring(KEY_STAY.length()));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 识别异常
|
||||
text = ChatColor.DARK_RED + "[<ERROR-11: " + value.getLanguageKey() + ">]";
|
||||
}
|
||||
}
|
||||
|
||||
// 检查重复次数
|
||||
if (repeat < 0) {
|
||||
repeat = 1;
|
||||
text = ChatColor.DARK_RED + "[<ERROR-12: " + value.getLanguageKey() + ">]";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送给玩家
|
||||
*
|
||||
* @param player 玩家
|
||||
*/
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
// 检查版本
|
||||
if (TabooLib.getVerint() < 10800) {
|
||||
player.sendMessage(ChatColor.DARK_RED + "[<ERROR-30: " + value.getLanguageKey() + ">]");
|
||||
} else {
|
||||
new BukkitRunnable() {
|
||||
int times = 0;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ActionUtils.send(player, text);
|
||||
if ((times += 1) >= repeat) {
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInst(), 0, 20);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,5 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
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;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.bookformatter.BookFormatter;
|
||||
import me.skymc.taboolib.bookformatter.action.ClickAction;
|
||||
import me.skymc.taboolib.bookformatter.action.HoverAction;
|
||||
@@ -25,190 +11,207 @@ import me.skymc.taboolib.other.NumberUtils;
|
||||
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 Language2Book 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_PAGE = " page: ";
|
||||
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, TextBuilder> options = new HashMap<>();
|
||||
|
||||
@Getter
|
||||
private BookBuilder book;
|
||||
|
||||
public Language2Book(Language2Format format, List<String> list, Player player) {
|
||||
// 变量
|
||||
this.player = player;
|
||||
this.value = format.getLanguage2Value();
|
||||
|
||||
// 获取书本设置
|
||||
formatOptions(list);
|
||||
// 书本
|
||||
book = BookFormatter.writtenBook();
|
||||
// 内容
|
||||
PageBuilder page = new PageBuilder();
|
||||
// 遍历内容
|
||||
for (String line : list) {
|
||||
// 翻页
|
||||
if (line.equals("[page]")) {
|
||||
book.addPages(page.build());
|
||||
page = new PageBuilder();
|
||||
}
|
||||
// 设置
|
||||
else 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)) {
|
||||
page.add("§4[<ERROR-50: " + format.getLanguage2Value().getLanguageKey() + ">]");
|
||||
}
|
||||
else {
|
||||
String[] line_split = line.split(optionFullName);
|
||||
try {
|
||||
// 单独一行
|
||||
if (line_split.length == 0) {
|
||||
page.add(options.get(optionName).build()).endLine();
|
||||
} else {
|
||||
// 前段
|
||||
page.add(line_split[0]);
|
||||
// 变量
|
||||
page.add(options.get(optionName).build());
|
||||
// 后段
|
||||
if (line_split.length >= 2) {
|
||||
// 获取文本
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 1 ; i < line_split.length ; i++) {
|
||||
|
||||
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_PAGE = " page: ";
|
||||
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+)>");
|
||||
|
||||
private Player player;
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
private HashMap<String, TextBuilder> options = new HashMap<>();
|
||||
|
||||
private BookBuilder book;
|
||||
|
||||
public static Pattern getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public HashMap<String, TextBuilder> getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
public BookBuilder getBook() {
|
||||
return book;
|
||||
}
|
||||
|
||||
public Language2Book(Language2Format format, List<String> list, Player player) {
|
||||
// 变量
|
||||
this.player = player;
|
||||
this.value = format.getLanguage2Value();
|
||||
|
||||
// 获取书本设置
|
||||
formatOptions(list);
|
||||
// 书本
|
||||
book = BookFormatter.writtenBook();
|
||||
// 内容
|
||||
PageBuilder page = new PageBuilder();
|
||||
// 遍历内容
|
||||
for (String line : list) {
|
||||
// 翻页
|
||||
if (line.equals("[page]")) {
|
||||
book.addPages(page.build());
|
||||
page = new PageBuilder();
|
||||
}
|
||||
// 设置
|
||||
else 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)) {
|
||||
page.add("§4[<ERROR-50: " + format.getLanguage2Value().getLanguageKey() + ">]");
|
||||
} else {
|
||||
String[] line_split = line.split(optionFullName);
|
||||
try {
|
||||
// 单独一行
|
||||
if (line_split.length == 0) {
|
||||
page.add(options.get(optionName).build()).endLine();
|
||||
} else {
|
||||
// 前段
|
||||
page.add(line_split[0]);
|
||||
// 变量
|
||||
page.add(options.get(optionName).build());
|
||||
// 后段
|
||||
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()) {
|
||||
page.add(line_split[1]).endLine();
|
||||
}
|
||||
} else {
|
||||
page.endLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
page.add("§4[<ERROR-51: " + format.getLanguage2Value().getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!find) {
|
||||
page.add(line).endLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
// 结尾
|
||||
book.addPages(page.build());
|
||||
}
|
||||
|
||||
private void formatOptions(List<String> list) {
|
||||
// 获取书本设置
|
||||
HashMap<String, List<String>> _options = getOptions(list);
|
||||
for (Entry<String, List<String>> entry : _options.entrySet()) {
|
||||
TextBuilder builder = new TextBuilder();
|
||||
// 遍历内容
|
||||
for (String _option : entry.getValue()) {
|
||||
if (_option.startsWith(KEY_TEXT)) {
|
||||
builder.text(_option.substring(KEY_TEXT.length()));
|
||||
}
|
||||
else if (_option.startsWith(KEY_COMMAND)) {
|
||||
builder.onClick(ClickAction.runCommand(_option.substring(KEY_COMMAND.length())));
|
||||
}
|
||||
else if (_option.startsWith(KEY_SUGGEST)) {
|
||||
builder.onClick(ClickAction.suggestCommand(_option.substring(KEY_SUGGEST.length())));
|
||||
}
|
||||
else if (_option.startsWith(KEY_URL)) {
|
||||
try {
|
||||
builder.onClick(ClickAction.openUrl(_option.substring(KEY_URL.length())));
|
||||
}
|
||||
catch (Exception e) {
|
||||
builder.text("§4[<ERROR-52: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
else if (_option.startsWith(KEY_PAGE)) {
|
||||
builder.onClick(ClickAction.changePage(NumberUtils.getInteger(_option.substring(KEY_PAGE.length()))));
|
||||
}
|
||||
else if (_option.startsWith(KEY_SHOWTEXT)) {
|
||||
builder.onHover(HoverAction.showText(_option.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);
|
||||
}
|
||||
builder.onHover(HoverAction.showItem(item));
|
||||
}
|
||||
}
|
||||
options.put(entry.getKey(), builder);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
// 更改文本
|
||||
line = sb.substring(0, sb.length() - optionFullName.length());
|
||||
// 如果后段还有变量
|
||||
if (!pattern.matcher(line).find()) {
|
||||
page.add(line_split[1]).endLine();
|
||||
}
|
||||
} else {
|
||||
page.endLine();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
page.add("§4[<ERROR-51: " + format.getLanguage2Value().getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!find) {
|
||||
page.add(line).endLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
// 结尾
|
||||
book.addPages(page.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
BookFormatter.forceOpen(player, book.build());
|
||||
}
|
||||
private void formatOptions(List<String> list) {
|
||||
// 获取书本设置
|
||||
HashMap<String, List<String>> _options = getOptions(list);
|
||||
for (Entry<String, List<String>> entry : _options.entrySet()) {
|
||||
TextBuilder builder = new TextBuilder();
|
||||
// 遍历内容
|
||||
for (String _option : entry.getValue()) {
|
||||
if (_option.startsWith(KEY_TEXT)) {
|
||||
builder.text(_option.substring(KEY_TEXT.length()));
|
||||
} else if (_option.startsWith(KEY_COMMAND)) {
|
||||
builder.onClick(ClickAction.runCommand(_option.substring(KEY_COMMAND.length())));
|
||||
} else if (_option.startsWith(KEY_SUGGEST)) {
|
||||
builder.onClick(ClickAction.suggestCommand(_option.substring(KEY_SUGGEST.length())));
|
||||
} else if (_option.startsWith(KEY_URL)) {
|
||||
try {
|
||||
builder.onClick(ClickAction.openUrl(_option.substring(KEY_URL.length())));
|
||||
} catch (Exception e) {
|
||||
builder.text("§4[<ERROR-52: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
} else if (_option.startsWith(KEY_PAGE)) {
|
||||
builder.onClick(ClickAction.changePage(NumberUtils.getInteger(_option.substring(KEY_PAGE.length()))));
|
||||
} else if (_option.startsWith(KEY_SHOWTEXT)) {
|
||||
builder.onHover(HoverAction.showText(_option.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);
|
||||
}
|
||||
builder.onHover(HoverAction.showItem(item));
|
||||
}
|
||||
}
|
||||
options.put(entry.getKey(), builder);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
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) {
|
||||
BookFormatter.forceOpen(player, book.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,5 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.inventory.ItemUtils;
|
||||
import me.skymc.taboolib.jsonformatter.JSONFormatter;
|
||||
import me.skymc.taboolib.jsonformatter.click.ClickEvent;
|
||||
@@ -21,145 +12,163 @@ 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.List;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018年2月13日 下午4:11:33
|
||||
*/
|
||||
public class Language2Json 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_ITEM = " item: ";
|
||||
|
||||
@Getter
|
||||
private Player player;
|
||||
|
||||
@Getter
|
||||
private Language2Value value;
|
||||
|
||||
@Getter
|
||||
private JSONFormatter json = new JSONFormatter();
|
||||
|
||||
@Getter
|
||||
private StringBuffer text = new StringBuffer();
|
||||
|
||||
public Language2Json(Language2Format format, List<String> list, Player player) {
|
||||
// 首次检测
|
||||
boolean isFirst = true;
|
||||
boolean isBreak = false;
|
||||
|
||||
// 变量初始化
|
||||
this.value = format.getLanguage2Value();
|
||||
this.player = player;
|
||||
|
||||
// 动作初始化
|
||||
ClickEvent clickEvent = null;
|
||||
HoverEvent hoverEvent = null;
|
||||
|
||||
// 文本初始化
|
||||
String current = ChatColor.DARK_RED + "[<ERROR-20: " + value.getLanguageKey() + ">]";
|
||||
|
||||
// 遍历文本
|
||||
for (String message : list) {
|
||||
try {
|
||||
// 如果是显示文本
|
||||
if (message.startsWith(KEY_TEXT)) {
|
||||
hoverEvent = new ShowTextEvent(message.replace("||", "\n").substring(KEY_TEXT.length()));
|
||||
}
|
||||
// 显示物品
|
||||
else if (message.startsWith(KEY_ITEM)) {
|
||||
ItemStack item = ItemUtils.getCacheItem(message.substring(KEY_ITEM.length()));
|
||||
if (item == null) {
|
||||
item = new ItemStack(Material.STONE);
|
||||
}
|
||||
hoverEvent = new ShowItemEvent(item);
|
||||
}
|
||||
// 执行指令
|
||||
else if (message.startsWith(KEY_COMMAND)) {
|
||||
clickEvent = new RunCommandEvent(message.substring(KEY_COMMAND.length()));
|
||||
}
|
||||
// 打印指令
|
||||
else if (message.startsWith(KEY_SUGGEST)) {
|
||||
clickEvent = new SuggestCommandEvent(message.substring(KEY_SUGGEST.length()));
|
||||
}
|
||||
// 打开连接
|
||||
else if (message.startsWith(KEY_URL)) {
|
||||
clickEvent = new OpenUrlEvent(message.substring(KEY_URL.length()));
|
||||
}
|
||||
// 换行
|
||||
else if (message.equals("[break]")) {
|
||||
append(current, clickEvent, hoverEvent);
|
||||
// 删除动作
|
||||
clickEvent = null;
|
||||
hoverEvent = null;
|
||||
// 换行
|
||||
json.newLine();
|
||||
// 标记
|
||||
isBreak = true;
|
||||
}
|
||||
// 新内容
|
||||
else {
|
||||
if (!isFirst && !isBreak) {
|
||||
append(current, clickEvent, hoverEvent);
|
||||
// 删除动作
|
||||
clickEvent = null;
|
||||
hoverEvent = null;
|
||||
}
|
||||
// 更新
|
||||
current = message;
|
||||
// 标记
|
||||
isFirst = false;
|
||||
isBreak = false;
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
// 识别异常
|
||||
json.append(ChatColor.DARK_RED + "[<ERROR-21: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
// 追加
|
||||
append(current, clickEvent, hoverEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送给玩家
|
||||
*
|
||||
* @param player 玩家
|
||||
*/
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
json.send(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(text.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 追加 JSON 内容
|
||||
*
|
||||
* @param current 文本
|
||||
* @param hoverEvent 显示动作
|
||||
*/
|
||||
private void append(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);
|
||||
}
|
||||
// 追加显示文本
|
||||
text.append(current);
|
||||
}
|
||||
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_ITEM = " item: ";
|
||||
|
||||
private Player player;
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
private JSONFormatter json = new JSONFormatter();
|
||||
|
||||
private StringBuffer text = new StringBuffer();
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public JSONFormatter getJson() {
|
||||
return json;
|
||||
}
|
||||
|
||||
public StringBuffer getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public Language2Json(Language2Format format, List<String> list, Player player) {
|
||||
// 首次检测
|
||||
boolean isFirst = true;
|
||||
boolean isBreak = false;
|
||||
|
||||
// 变量初始化
|
||||
this.value = format.getLanguage2Value();
|
||||
this.player = player;
|
||||
|
||||
// 动作初始化
|
||||
ClickEvent clickEvent = null;
|
||||
HoverEvent hoverEvent = null;
|
||||
|
||||
// 文本初始化
|
||||
String current = ChatColor.DARK_RED + "[<ERROR-20: " + value.getLanguageKey() + ">]";
|
||||
|
||||
// 遍历文本
|
||||
for (String message : list) {
|
||||
try {
|
||||
// 如果是显示文本
|
||||
if (message.startsWith(KEY_TEXT)) {
|
||||
hoverEvent = new ShowTextEvent(message.replace("||", "\n").substring(KEY_TEXT.length()));
|
||||
}
|
||||
// 显示物品
|
||||
else if (message.startsWith(KEY_ITEM)) {
|
||||
ItemStack item = ItemUtils.getCacheItem(message.substring(KEY_ITEM.length()));
|
||||
if (item == null) {
|
||||
item = new ItemStack(Material.STONE);
|
||||
}
|
||||
hoverEvent = new ShowItemEvent(item);
|
||||
}
|
||||
// 执行指令
|
||||
else if (message.startsWith(KEY_COMMAND)) {
|
||||
clickEvent = new RunCommandEvent(message.substring(KEY_COMMAND.length()));
|
||||
}
|
||||
// 打印指令
|
||||
else if (message.startsWith(KEY_SUGGEST)) {
|
||||
clickEvent = new SuggestCommandEvent(message.substring(KEY_SUGGEST.length()));
|
||||
}
|
||||
// 打开连接
|
||||
else if (message.startsWith(KEY_URL)) {
|
||||
clickEvent = new OpenUrlEvent(message.substring(KEY_URL.length()));
|
||||
}
|
||||
// 换行
|
||||
else if (message.equals("[break]")) {
|
||||
append(current, clickEvent, hoverEvent);
|
||||
// 删除动作
|
||||
clickEvent = null;
|
||||
hoverEvent = null;
|
||||
// 换行
|
||||
json.newLine();
|
||||
// 标记
|
||||
isBreak = true;
|
||||
}
|
||||
// 新内容
|
||||
else {
|
||||
if (!isFirst && !isBreak) {
|
||||
append(current, clickEvent, hoverEvent);
|
||||
// 删除动作
|
||||
clickEvent = null;
|
||||
hoverEvent = null;
|
||||
}
|
||||
// 更新
|
||||
current = message;
|
||||
// 标记
|
||||
isFirst = false;
|
||||
isBreak = false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 识别异常
|
||||
json.append(ChatColor.DARK_RED + "[<ERROR-21: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
// 追加
|
||||
append(current, clickEvent, hoverEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送给玩家
|
||||
*
|
||||
* @param player 玩家
|
||||
*/
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
json.send(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(text.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 追加 JSON 内容
|
||||
*
|
||||
* @param current 文本
|
||||
* @param hoverEvent 显示动作
|
||||
*/
|
||||
private void append(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);
|
||||
}
|
||||
// 追加显示文本
|
||||
text.append(current);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,5 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
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;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.inventory.ItemUtils;
|
||||
import me.skymc.taboolib.jsonformatter.JSONFormatter;
|
||||
import me.skymc.taboolib.jsonformatter.click.ClickEvent;
|
||||
@@ -26,185 +12,203 @@ 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;
|
||||
int lineNumberEnd = getLineNumberEnd(list);
|
||||
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++) {
|
||||
|
||||
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+)>");
|
||||
|
||||
private Player player;
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
private HashMap<String, JSONFormatter> options = new HashMap<>();
|
||||
|
||||
private JSONFormatter json = new JSONFormatter();
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public HashMap<String, JSONFormatter> getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
public JSONFormatter getJson() {
|
||||
return json;
|
||||
}
|
||||
|
||||
public Language2Json2(Language2Format format, List<String> list, Player player) {
|
||||
// 变量
|
||||
this.player = player;
|
||||
this.value = format.getLanguage2Value();
|
||||
|
||||
// 获取书本设置
|
||||
formatOptions(list);
|
||||
// 遍历内容
|
||||
int lineNumber = 0;
|
||||
int lineNumberEnd = getLineNumberEnd(list);
|
||||
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 < lineNumberEnd) {
|
||||
json.newLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int getLineNumberEnd(List<String> list) {
|
||||
int line = list.size();
|
||||
for (int i = 0 ; i < list.size(); i++) {
|
||||
if (list.get(i).startsWith("@option")) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
// 更改文本
|
||||
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 < lineNumberEnd) {
|
||||
json.newLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
json.send(player);
|
||||
}
|
||||
private int getLineNumberEnd(List<String> list) {
|
||||
int line = list.size();
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i).startsWith("@option")) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
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) {
|
||||
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() + ">]");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,47 +1,51 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.sound.SoundPack;
|
||||
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.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018-03-08 22:43:27
|
||||
*/
|
||||
public class Language2Sound implements Language2Line {
|
||||
|
||||
@Getter
|
||||
private List<SoundPack> sounds = new ArrayList<>();
|
||||
|
||||
@Getter
|
||||
private Language2Value value;
|
||||
|
||||
public Language2Sound(Language2Format format, List<String> list) {
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String line : list) {
|
||||
sounds.add(new SoundPack(line));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (SoundPack sound : sounds) {
|
||||
sound.play(player);
|
||||
}
|
||||
}
|
||||
private List<SoundPack> sounds = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
private Language2Value value;
|
||||
|
||||
public List<SoundPack> getSounds() {
|
||||
return sounds;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public Language2Sound(Language2Format format, List<String> list) {
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String line : list) {
|
||||
sounds.add(new SoundPack(line));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (SoundPack sound : sounds) {
|
||||
sound.play(player);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,45 +1,49 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import lombok.Getter;
|
||||
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.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018-03-08 22:43:27
|
||||
*/
|
||||
public class Language2Text implements Language2Line {
|
||||
|
||||
@Getter
|
||||
private List<String> text = new ArrayList<>();
|
||||
|
||||
@Getter
|
||||
private Language2Value value;
|
||||
|
||||
public Language2Text(Language2Format format, List<String> list) {
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
|
||||
private List<String> text = new ArrayList<>();
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
public List<String> getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public Language2Text(Language2Format format, List<String> list) {
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
text.addAll(list);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (String line : text) {
|
||||
player.sendMessage(line);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (String line : text) {
|
||||
player.sendMessage(line);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
for (String line : text) {
|
||||
Bukkit.getConsoleSender().sendMessage(line);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void console() {
|
||||
for (String line : text) {
|
||||
Bukkit.getConsoleSender().sendMessage(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,89 +1,103 @@
|
||||
package me.skymc.taboolib.string.language2.value;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.skymc.taboolib.TabooLib;
|
||||
import me.skymc.taboolib.display.TitleUtils;
|
||||
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.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
* @since 2018年2月13日 下午3:58:07
|
||||
*/
|
||||
public class Language2Title implements Language2Line {
|
||||
|
||||
private static final String KEY_TITLE = " title: ";
|
||||
private static final String KEY_SUBTITLE = " subtitle: ";
|
||||
private static final String KEY_STAYRULE = " stay: ";
|
||||
|
||||
@Getter
|
||||
private String title = "";
|
||||
|
||||
@Getter
|
||||
private String subtitle = "";
|
||||
|
||||
@Getter
|
||||
private int fade1 = 0;
|
||||
|
||||
@Getter
|
||||
private int fade2 = 0;
|
||||
|
||||
@Getter
|
||||
private int stay = 20;
|
||||
|
||||
@Getter
|
||||
private Language2Value value;
|
||||
|
||||
public Language2Title(Language2Format format, List<String> list) {
|
||||
// 变量初始化
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String message : list) {
|
||||
try {
|
||||
// 大标题
|
||||
if (message.startsWith(KEY_TITLE)) {
|
||||
title = message.substring(KEY_TITLE.length());
|
||||
}
|
||||
// 小标题
|
||||
else if (message.startsWith(KEY_SUBTITLE)) {
|
||||
subtitle = message.substring(KEY_SUBTITLE.length());
|
||||
}
|
||||
// 持续时间
|
||||
else if (message.startsWith(KEY_STAYRULE)) {
|
||||
String rule = message.substring(KEY_STAYRULE.length());
|
||||
fade1 = Integer.valueOf(rule.split("\\|")[0]);
|
||||
stay = Integer.valueOf(rule.split("\\|")[1]);
|
||||
fade2 = Integer.valueOf(rule.split("\\|")[2]);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
// 识别异常
|
||||
title = ChatColor.DARK_RED + "[<ERROR-10: " + value.getLanguageKey() + ">]";
|
||||
subtitle = ChatColor.DARK_RED + "[<ERROR-10: " + value.getLanguageKey() + ">]";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
// 检查版本
|
||||
if (TabooLib.getVerint() < 10800) {
|
||||
player.sendMessage(ChatColor.DARK_RED + "[<ERROR-31: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
else {
|
||||
TitleUtils.sendTitle(player, title, subtitle, fade1, stay, fade2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
private static final String KEY_TITLE = " title: ";
|
||||
private static final String KEY_SUBTITLE = " subtitle: ";
|
||||
private static final String KEY_STAYRULE = " stay: ";
|
||||
|
||||
private String title = "";
|
||||
|
||||
private String subtitle = "";
|
||||
|
||||
private int fade1 = 0;
|
||||
|
||||
private int fade2 = 0;
|
||||
|
||||
private int stay = 20;
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public String getSubtitle() {
|
||||
return subtitle;
|
||||
}
|
||||
|
||||
public int getFade1() {
|
||||
return fade1;
|
||||
}
|
||||
|
||||
public int getFade2() {
|
||||
return fade2;
|
||||
}
|
||||
|
||||
public int getStay() {
|
||||
return stay;
|
||||
}
|
||||
|
||||
public Language2Value getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public Language2Title(Language2Format format, List<String> list) {
|
||||
// 变量初始化
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String message : list) {
|
||||
try {
|
||||
// 大标题
|
||||
if (message.startsWith(KEY_TITLE)) {
|
||||
title = message.substring(KEY_TITLE.length());
|
||||
}
|
||||
// 小标题
|
||||
else if (message.startsWith(KEY_SUBTITLE)) {
|
||||
subtitle = message.substring(KEY_SUBTITLE.length());
|
||||
}
|
||||
// 持续时间
|
||||
else if (message.startsWith(KEY_STAYRULE)) {
|
||||
String rule = message.substring(KEY_STAYRULE.length());
|
||||
fade1 = Integer.valueOf(rule.split("\\|")[0]);
|
||||
stay = Integer.valueOf(rule.split("\\|")[1]);
|
||||
fade2 = Integer.valueOf(rule.split("\\|")[2]);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 识别异常
|
||||
title = ChatColor.DARK_RED + "[<ERROR-10: " + value.getLanguageKey() + ">]";
|
||||
subtitle = ChatColor.DARK_RED + "[<ERROR-10: " + value.getLanguageKey() + ">]";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
// 检查版本
|
||||
if (TabooLib.getVerint() < 10800) {
|
||||
player.sendMessage(ChatColor.DARK_RED + "[<ERROR-31: " + value.getLanguageKey() + ">]");
|
||||
} else {
|
||||
TitleUtils.sendTitle(player, title, subtitle, fade1, stay, fade2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[<ERROR-40: " + value.getLanguageKey() + ">]");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user