Ignore
This commit is contained in:
44
src/main/java/me/skymc/taboolib/string/ArrayUtils.java
Normal file
44
src/main/java/me/skymc/taboolib/string/ArrayUtils.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package me.skymc.taboolib.string;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
/**
|
||||
* @author Bkm016
|
||||
* @since 2018-04-16
|
||||
*/
|
||||
public class ArrayUtils {
|
||||
|
||||
public static <T> List<T> asList(T... args) {
|
||||
List<T> list = new ArrayList<>();
|
||||
Collections.addAll(list, args);
|
||||
return list;
|
||||
}
|
||||
|
||||
public static String[] addFirst(String[] args, String... value) {
|
||||
if (args.length < 1) {
|
||||
return value;
|
||||
}
|
||||
List<String> list = asList(args);
|
||||
for (int i = value.length - 1 ; i >= 0 ; i--) {
|
||||
list.add(0, value[i]);
|
||||
}
|
||||
return list.toArray(new String[0]);
|
||||
}
|
||||
|
||||
public static String[] removeFirst(String[] args) {
|
||||
if (args.length <= 1) {
|
||||
return null;
|
||||
}
|
||||
List<String> list = asList(args);
|
||||
list.remove(0);
|
||||
return list.toArray(new String[0]);
|
||||
}
|
||||
|
||||
public static String arrayJoin(String[] args, int start) {
|
||||
return IntStream.range(start, args.length).mapToObj(i -> args[i] + " ").collect(Collectors.joining()).trim();
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,13 @@
|
||||
package me.skymc.taboolib.string;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import me.skymc.taboolib.message.MsgUtils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
@@ -7,122 +15,112 @@ import java.io.InputStreamReader;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
import me.skymc.taboolib.message.MsgUtils;
|
||||
|
||||
@Deprecated
|
||||
public class Language {
|
||||
|
||||
private FileConfiguration conf = null;
|
||||
private String langName;
|
||||
private Plugin plugin;
|
||||
|
||||
public Language(Plugin plugin) {
|
||||
this("zh_CN", plugin, false);
|
||||
}
|
||||
|
||||
public Language(String name, Plugin plugin) {
|
||||
this(name, plugin, false);
|
||||
}
|
||||
|
||||
public Language(String name, Plugin plugin, boolean utf8) {
|
||||
this.plugin = plugin;
|
||||
this.langName = name;
|
||||
|
||||
File file = new File(getLanguageDir(), name + ".yml");
|
||||
if (!file.exists()) {
|
||||
plugin.saveResource("Language/" + name + ".yml", true);
|
||||
}
|
||||
|
||||
if (utf8) {
|
||||
reloadUTF8(this.langName);
|
||||
}
|
||||
else {
|
||||
reload(this.langName);
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getConfiguration() {
|
||||
return conf;
|
||||
}
|
||||
|
||||
public void send(CommandSender sender, String key) {
|
||||
sender.sendMessage(get(key));
|
||||
}
|
||||
|
||||
public void send(Player player, String key) {
|
||||
player.sendMessage(get(key));
|
||||
}
|
||||
|
||||
public void sendList(CommandSender sender, String key) {
|
||||
List<String> list = getList(key);
|
||||
for (String msg : list) {
|
||||
sender.sendMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendList(Player player, String key) {
|
||||
List<String> list = getList(key);
|
||||
for (String msg : list) {
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public String get(String key) {
|
||||
if (conf == null || conf.getString(key) == null) {
|
||||
return "§4[Language \"" + key + "\" Not Found]";
|
||||
}
|
||||
return conf.getString(key).replace("&", "§");
|
||||
}
|
||||
|
||||
public List<String> getList(String key) {
|
||||
if (conf == null || conf.getString(key) == null) {
|
||||
return Collections.singletonList("§4[Language \"" + key + "\" Not Found]");
|
||||
}
|
||||
List<String> list = conf.getStringList(key);
|
||||
for (int i = 0 ; i < list.size() ; i++) {
|
||||
list.set(i, list.get(i).replace("&", "§"));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
reload(langName);
|
||||
}
|
||||
|
||||
public void reload(String name) {
|
||||
File langFile = new File(getLanguageDir(), name + ".yml");
|
||||
if (!langFile.exists()) {
|
||||
MsgUtils.warn("语言文件 " + langName + " 不存在, 请更改配置文件");
|
||||
return;
|
||||
}
|
||||
conf = YamlConfiguration.loadConfiguration(langFile);
|
||||
}
|
||||
|
||||
public void reloadUTF8(String name) {
|
||||
File langFile = new File(getLanguageDir(), name + ".yml");
|
||||
if (!langFile.exists()) {
|
||||
MsgUtils.warn("语言文件 " + langName + " 不存在, 请更改配置文件");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
conf = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(langFile), Charsets.UTF_8));
|
||||
} catch (FileNotFoundException e) {
|
||||
conf = new YamlConfiguration();
|
||||
}
|
||||
}
|
||||
|
||||
private File getLanguageDir() {
|
||||
File dir = new File(plugin.getDataFolder(), "Language");
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
return dir;
|
||||
}
|
||||
private FileConfiguration conf = null;
|
||||
private String langName;
|
||||
private Plugin plugin;
|
||||
|
||||
public Language(Plugin plugin) {
|
||||
this("zh_CN", plugin, false);
|
||||
}
|
||||
|
||||
public Language(String name, Plugin plugin) {
|
||||
this(name, plugin, false);
|
||||
}
|
||||
|
||||
public Language(String name, Plugin plugin, boolean utf8) {
|
||||
this.plugin = plugin;
|
||||
this.langName = name;
|
||||
|
||||
File file = new File(getLanguageDir(), name + ".yml");
|
||||
if (!file.exists()) {
|
||||
plugin.saveResource("Language/" + name + ".yml", true);
|
||||
}
|
||||
|
||||
if (utf8) {
|
||||
reloadUTF8(this.langName);
|
||||
} else {
|
||||
reload(this.langName);
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getConfiguration() {
|
||||
return conf;
|
||||
}
|
||||
|
||||
public void send(CommandSender sender, String key) {
|
||||
sender.sendMessage(get(key));
|
||||
}
|
||||
|
||||
public void send(Player player, String key) {
|
||||
player.sendMessage(get(key));
|
||||
}
|
||||
|
||||
public void sendList(CommandSender sender, String key) {
|
||||
List<String> list = getList(key);
|
||||
for (String msg : list) {
|
||||
sender.sendMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendList(Player player, String key) {
|
||||
List<String> list = getList(key);
|
||||
for (String msg : list) {
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public String get(String key) {
|
||||
if (conf == null || conf.getString(key) == null) {
|
||||
return "§4[Language \"" + key + "\" Not Found]";
|
||||
}
|
||||
return conf.getString(key).replace("&", "§");
|
||||
}
|
||||
|
||||
public List<String> getList(String key) {
|
||||
if (conf == null || conf.getString(key) == null) {
|
||||
return Collections.singletonList("§4[Language \"" + key + "\" Not Found]");
|
||||
}
|
||||
List<String> list = conf.getStringList(key);
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
list.set(i, list.get(i).replace("&", "§"));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
reload(langName);
|
||||
}
|
||||
|
||||
public void reload(String name) {
|
||||
File langFile = new File(getLanguageDir(), name + ".yml");
|
||||
if (!langFile.exists()) {
|
||||
MsgUtils.warn("语言文件 " + langName + " 不存在, 请更改配置文件");
|
||||
return;
|
||||
}
|
||||
conf = YamlConfiguration.loadConfiguration(langFile);
|
||||
}
|
||||
|
||||
public void reloadUTF8(String name) {
|
||||
File langFile = new File(getLanguageDir(), name + ".yml");
|
||||
if (!langFile.exists()) {
|
||||
MsgUtils.warn("语言文件 " + langName + " 不存在, 请更改配置文件");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
conf = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(langFile), Charsets.UTF_8));
|
||||
} catch (FileNotFoundException e) {
|
||||
conf = new YamlConfiguration();
|
||||
}
|
||||
}
|
||||
|
||||
private File getLanguageDir() {
|
||||
File dir = new File(plugin.getDataFolder(), "Language");
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
return dir;
|
||||
}
|
||||
}
|
||||
@@ -33,4 +33,68 @@ public class StringUtils {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static double similarDegree(String strA, String strB){
|
||||
String newStrA = removeSign(max(strA, strB));
|
||||
String newStrB = removeSign(min(strA, strB));
|
||||
int temp = Math.max(newStrA.length(), newStrB.length());
|
||||
int temp2 = longestCommonSubstring(newStrA, newStrB).length();
|
||||
return temp2 * 1.0 / temp;
|
||||
}
|
||||
|
||||
private static String max(String strA, String strB) {
|
||||
return strA.length() >= strB.length() ? strA : strB;
|
||||
}
|
||||
|
||||
private static String min(String strA, String strB) {
|
||||
return strA.length() < strB.length() ? strA : strB;
|
||||
}
|
||||
|
||||
private static String removeSign(String str) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (char item : str.toCharArray()) {
|
||||
if (charReg(item)){
|
||||
sb.append(item);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static boolean charReg(char charValue) {
|
||||
return (charValue >= 0x4E00 && charValue <= 0X9FA5) || (charValue >= 'a' && charValue <= 'z') || (charValue >= 'A' && charValue <= 'Z') || (charValue >= '0' && charValue <= '9');
|
||||
}
|
||||
|
||||
private static String longestCommonSubstring(String strA, String strB) {
|
||||
char[] chars_strA = strA.toCharArray();
|
||||
char[] chars_strB = strB.toCharArray();
|
||||
int m = chars_strA.length;
|
||||
int n = chars_strB.length;
|
||||
|
||||
int[][] matrix = new int[m + 1][n + 1];
|
||||
for (int i = 1; i <= m; i++) {
|
||||
for (int j = 1; j <= n; j++) {
|
||||
if (chars_strA[i - 1] == chars_strB[j - 1]) {
|
||||
matrix[i][j] = matrix[i - 1][j - 1] + 1;
|
||||
} else {
|
||||
matrix[i][j] = Math.max(matrix[i][j - 1], matrix[i - 1][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char[] result = new char[matrix[m][n]];
|
||||
int currentIndex = result.length - 1;
|
||||
while (matrix[m][n] != 0) {
|
||||
if (matrix[n] == matrix[n - 1]) {
|
||||
n--;
|
||||
} else if (matrix[m][n] == matrix[m - 1][n]) {
|
||||
m--;
|
||||
} else {
|
||||
result[currentIndex] = chars_strA[m - 1];
|
||||
currentIndex--;
|
||||
n--;
|
||||
m--;
|
||||
}
|
||||
}
|
||||
return new String(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.skymc.taboolib.string.language2;
|
||||
|
||||
import com.ilummc.tlib.resources.TLocale;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.skymc.taboolib.fileutils.ConfigUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -74,10 +75,7 @@ public class Language2 {
|
||||
languageFile = new File(languageFolder, languageName);
|
||||
if (!languageFile.exists()) {
|
||||
if (plugin.getResource("Language2/" + languageName) == null) {
|
||||
try {
|
||||
throw new FileNotFoundException("语言文件 " + languageName + " 不存在");
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
TLocale.Logger.error("LANGUAGE2.FALL-NOTFOUND-FILE", languageName);
|
||||
} else {
|
||||
plugin.saveResource("Language2/" + languageName, true);
|
||||
}
|
||||
|
||||
@@ -142,15 +142,11 @@ public class Language2Format implements Language2Line {
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (Language2Line line : language2Lines) {
|
||||
line.send(player);
|
||||
}
|
||||
language2Lines.forEach(line -> line.send(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
for (Language2Line line : language2Lines) {
|
||||
line.console();
|
||||
}
|
||||
language2Lines.forEach(Language2Line::console);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
/**
|
||||
* @author sky
|
||||
@@ -96,9 +97,7 @@ public class Language2Value {
|
||||
* @param players 玩家
|
||||
*/
|
||||
public void send(List<Player> players) {
|
||||
for (Player player : players) {
|
||||
send(player);
|
||||
}
|
||||
players.forEach(this::send);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,9 +205,7 @@ public class Language2Value {
|
||||
* @return
|
||||
*/
|
||||
public List<String> asColored(List<String> list) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
list.set(i, ChatColor.translateAlternateColorCodes('&', list.get(i)));
|
||||
}
|
||||
IntStream.range(0, list.size()).forEach(i -> list.set(i, ChatColor.translateAlternateColorCodes('&', list.get(i))));
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ public class Language2Book implements Language2Line {
|
||||
// 遍历内容
|
||||
for (String line : list) {
|
||||
// 翻页
|
||||
if (line.equals("[page]")) {
|
||||
if ("[page]".equals(line)) {
|
||||
book.addPages(page.build());
|
||||
page = new PageBuilder();
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ public class Language2Json implements Language2Line {
|
||||
clickEvent = new OpenUrlEvent(message.substring(KEY_URL.length()));
|
||||
}
|
||||
// 换行
|
||||
else if (message.equals("[break]")) {
|
||||
else if ("[break]".equals(message)) {
|
||||
append(current, clickEvent, hoverEvent);
|
||||
// 删除动作
|
||||
clickEvent = null;
|
||||
|
||||
@@ -23,10 +23,7 @@ public class Language2Sound implements Language2Line {
|
||||
|
||||
public Language2Sound(Language2Format format, List<String> list) {
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
for (String line : list) {
|
||||
sounds.add(new SoundPack(line));
|
||||
}
|
||||
list.forEach(line -> sounds.add(new SoundPack(line)));
|
||||
}
|
||||
|
||||
public List<SoundPack> getSounds() {
|
||||
@@ -39,9 +36,7 @@ public class Language2Sound implements Language2Line {
|
||||
|
||||
@Override
|
||||
public void send(Player player) {
|
||||
for (SoundPack sound : sounds) {
|
||||
sound.play(player);
|
||||
}
|
||||
sounds.forEach(sound -> sound.play(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,12 +19,6 @@ public class Language2Text implements Language2Line {
|
||||
|
||||
private Language2Value value;
|
||||
|
||||
public Language2Text(Language2Format format, List<String> list) {
|
||||
this.value = format.getLanguage2Value();
|
||||
// 遍历文本
|
||||
text.addAll(list);
|
||||
}
|
||||
|
||||
public List<String> getText() {
|
||||
return text;
|
||||
}
|
||||
@@ -33,17 +27,18 @@ public class Language2Text implements Language2Line {
|
||||
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);
|
||||
}
|
||||
text.forEach(player::sendMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void console() {
|
||||
for (String line : text) {
|
||||
Bukkit.getConsoleSender().sendMessage(line);
|
||||
}
|
||||
text.forEach(line -> Bukkit.getConsoleSender().sendMessage(line));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user