版本更新至 3.54
大更新! 新增:Language2 工具, wiki已添加该工具使用帮助
This commit is contained in:
		@@ -28,6 +28,7 @@ import me.skymc.taboolib.anvil.AnvilContainerAPI;
 | 
				
			|||||||
import me.skymc.taboolib.bstats.Metrics;
 | 
					import me.skymc.taboolib.bstats.Metrics;
 | 
				
			||||||
import me.skymc.taboolib.client.LogClient;
 | 
					import me.skymc.taboolib.client.LogClient;
 | 
				
			||||||
import me.skymc.taboolib.commands.MainCommands;
 | 
					import me.skymc.taboolib.commands.MainCommands;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.commands.language.Language2Command;
 | 
				
			||||||
import me.skymc.taboolib.commands.sub.itemlist.listener.ItemLibraryPatch;
 | 
					import me.skymc.taboolib.commands.sub.itemlist.listener.ItemLibraryPatch;
 | 
				
			||||||
import me.skymc.taboolib.database.PlayerDataManager;
 | 
					import me.skymc.taboolib.database.PlayerDataManager;
 | 
				
			||||||
import me.skymc.taboolib.database.GlobalDataManager;
 | 
					import me.skymc.taboolib.database.GlobalDataManager;
 | 
				
			||||||
@@ -45,6 +46,7 @@ import me.skymc.taboolib.message.MsgUtils;
 | 
				
			|||||||
import me.skymc.taboolib.mysql.protect.MySQLConnection;
 | 
					import me.skymc.taboolib.mysql.protect.MySQLConnection;
 | 
				
			||||||
import me.skymc.taboolib.sign.SignUtils;
 | 
					import me.skymc.taboolib.sign.SignUtils;
 | 
				
			||||||
import me.skymc.taboolib.string.StringUtils;
 | 
					import me.skymc.taboolib.string.StringUtils;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.Language2;
 | 
				
			||||||
import me.skymc.taboolib.support.SupportPlaceholder;
 | 
					import me.skymc.taboolib.support.SupportPlaceholder;
 | 
				
			||||||
import me.skymc.taboolib.team.TagUtils;
 | 
					import me.skymc.taboolib.team.TagUtils;
 | 
				
			||||||
import me.skymc.taboolib.timecycle.TimeCycleManager;
 | 
					import me.skymc.taboolib.timecycle.TimeCycleManager;
 | 
				
			||||||
@@ -80,6 +82,8 @@ public class Main extends JavaPlugin implements Listener {
 | 
				
			|||||||
    private FileConfiguration config = null;
 | 
					    private FileConfiguration config = null;
 | 
				
			||||||
    @Getter
 | 
					    @Getter
 | 
				
			||||||
    private static LogClient client;
 | 
					    private static LogClient client;
 | 
				
			||||||
 | 
					    @Getter
 | 
				
			||||||
 | 
					    private static Language2 exampleLangauge2;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public static Random getRandom() {
 | 
					    public static Random getRandom() {
 | 
				
			||||||
		return NumberUtils.getRand();
 | 
							return NumberUtils.getRand();
 | 
				
			||||||
@@ -163,6 +167,7 @@ public class Main extends JavaPlugin implements Listener {
 | 
				
			|||||||
	public void onEnable() {
 | 
						public void onEnable() {
 | 
				
			||||||
		// 注册指令
 | 
							// 注册指令
 | 
				
			||||||
		getCommand("taboolib").setExecutor(new MainCommands());
 | 
							getCommand("taboolib").setExecutor(new MainCommands());
 | 
				
			||||||
 | 
							getCommand("language2").setExecutor(new Language2Command());
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// 注册监听
 | 
							// 注册监听
 | 
				
			||||||
		registerListener();
 | 
							registerListener();
 | 
				
			||||||
@@ -178,6 +183,8 @@ public class Main extends JavaPlugin implements Listener {
 | 
				
			|||||||
		TimeCycleManager.load();
 | 
							TimeCycleManager.load();
 | 
				
			||||||
		// 启动脚本
 | 
							// 启动脚本
 | 
				
			||||||
		JavaShell.javaShellSetup();
 | 
							JavaShell.javaShellSetup();
 | 
				
			||||||
 | 
							// 载入语言文件
 | 
				
			||||||
 | 
							exampleLangauge2 = new Language2("Language2", this);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// 启动数据库储存方法
 | 
							// 启动数据库储存方法
 | 
				
			||||||
		if (getStorageType() == StorageType.SQL) {
 | 
							if (getStorageType() == StorageType.SQL) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,56 +56,54 @@ public class MainCommands implements CommandExecutor{
 | 
				
			|||||||
			sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
				
			||||||
			sender.sendMessage("<EFBFBD><EFBFBD>c /taboolib importdata <20><>f- <20><>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD>ݿ<DDBF>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>8(<28>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>)");
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>c /taboolib importdata <20><>f- <20><>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD>ݿ<DDBF>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>8(<28>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>)");
 | 
				
			||||||
			sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("itemreload") || args[0].equalsIgnoreCase("ireload")) {
 | 
							else if (args[0].equalsIgnoreCase("itemreload") || args[0].equalsIgnoreCase("ireload")) {
 | 
				
			||||||
			ItemUtils.reloadItemCache();
 | 
								ItemUtils.reloadItemCache();
 | 
				
			||||||
			ItemUtils.reloadItemName();
 | 
								ItemUtils.reloadItemName();
 | 
				
			||||||
			MsgUtils.send(sender, "<EFBFBD><EFBFBD><EFBFBD>سɹ<EFBFBD>");
 | 
								MsgUtils.send(sender, "<EFBFBD><EFBFBD><EFBFBD>سɹ<EFBFBD>");
 | 
				
			||||||
			return true;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("save")) {
 | 
							else if (args[0].equalsIgnoreCase("save")) {
 | 
				
			||||||
			return new SaveCommand(sender, args).command();
 | 
								new SaveCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("enchants")) {
 | 
							else if (args[0].equalsIgnoreCase("enchants")) {
 | 
				
			||||||
			return new EnchantCommand(sender, args).command();
 | 
								new EnchantCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("potions")) {
 | 
							else if (args[0].equalsIgnoreCase("potions")) {
 | 
				
			||||||
			return new PotionCommand(sender, args).command();
 | 
								new PotionCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("flags")) {
 | 
							else if (args[0].equalsIgnoreCase("flags")) {
 | 
				
			||||||
			return new FlagCommand(sender, args).command();
 | 
								new FlagCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("attributes")) {
 | 
							else if (args[0].equalsIgnoreCase("attributes")) {
 | 
				
			||||||
			return new AttributesCommand(sender, args).command();
 | 
								new AttributesCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("slots")) {
 | 
							else if (args[0].equalsIgnoreCase("slots")) {
 | 
				
			||||||
			return new SlotCommand(sender, args).command();
 | 
								new SlotCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("importdata")) {
 | 
							else if (args[0].equalsIgnoreCase("importdata")) {
 | 
				
			||||||
			return new ImportCommand(sender, args).command();
 | 
								new ImportCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("iteminfo")) {
 | 
							else if (args[0].equalsIgnoreCase("iteminfo")) {
 | 
				
			||||||
			return new InfoCommand(sender, args).command();
 | 
								new InfoCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("itemlist")) {
 | 
							else if (args[0].equalsIgnoreCase("itemlist")) {
 | 
				
			||||||
			return new ItemListCommand(sender, args).command();
 | 
								new ItemListCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("item") || args[0].equalsIgnoreCase("i")) {
 | 
							else if (args[0].equalsIgnoreCase("item") || args[0].equalsIgnoreCase("i")) {
 | 
				
			||||||
			return new ItemCommand(sender, args).command();
 | 
								new ItemCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("setvariable")) {
 | 
							else if (args[0].equalsIgnoreCase("setvariable")) {
 | 
				
			||||||
			return new VariableSetCommand(sender, args).command();
 | 
								new VariableSetCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("getvariable")) {
 | 
							else if (args[0].equalsIgnoreCase("getvariable")) {
 | 
				
			||||||
			return new VariableGetCommand(sender, args).command();
 | 
								new VariableGetCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (args[0].equalsIgnoreCase("shell") || args[0].equalsIgnoreCase("s")) {
 | 
							else if (args[0].equalsIgnoreCase("shell") || args[0].equalsIgnoreCase("s")) {
 | 
				
			||||||
			return new ShellCommand(sender, args).command();
 | 
								new ShellCommand(sender, args);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			MsgUtils.send(sender, "&4ָ<34><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
 | 
								MsgUtils.send(sender, "&4ָ<34><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return false;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.commands.language;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.Material;
 | 
				
			||||||
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
 | 
					import org.bukkit.command.CommandExecutor;
 | 
				
			||||||
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import me.skymc.taboolib.Main;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.message.MsgUtils;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.Language2Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>5:11:01
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Language2Command implements CommandExecutor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
 | 
				
			||||||
 | 
							if (args.length == 0) {
 | 
				
			||||||
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
				
			||||||
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>b<EFBFBD><EFBFBD>l----- <20><>3<EFBFBD><33>lTabooLib Commands <20><>b<EFBFBD><62>l-----");
 | 
				
			||||||
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
				
			||||||
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>7 /language2 reload <20><>f- <20><>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD>");
 | 
				
			||||||
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>7 /language2 send [<5B><><EFBFBD><EFBFBD>] [<5B><><EFBFBD><EFBFBD>] <<3C><><EFBFBD><EFBFBD>> <20><>f- <20><>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ");
 | 
				
			||||||
 | 
								sender.sendMessage("<EFBFBD><EFBFBD>f");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (args[0].equalsIgnoreCase("reload")) {
 | 
				
			||||||
 | 
								MsgUtils.send(sender, "<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..");
 | 
				
			||||||
 | 
								long time = System.currentTimeMillis();
 | 
				
			||||||
 | 
								Main.getExampleLangauge2().reload();
 | 
				
			||||||
 | 
								MsgUtils.send(sender, "<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><>ʱ: &f" + (System.currentTimeMillis() - time) + "ms");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (args[0].equalsIgnoreCase("send")) {
 | 
				
			||||||
 | 
								if (args.length < 3) {
 | 
				
			||||||
 | 
									MsgUtils.send(sender, "<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
									Player player = Bukkit.getPlayerExact(args[1]);
 | 
				
			||||||
 | 
									if (player == null) {
 | 
				
			||||||
 | 
										MsgUtils.send(sender, "<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										// ʱ<><CAB1>
 | 
				
			||||||
 | 
										long time = System.currentTimeMillis();
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
										Language2Value value = Main.getExampleLangauge2().get(args[2]);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										if (args.length > 3) {
 | 
				
			||||||
 | 
											int i = 0;
 | 
				
			||||||
 | 
											for (String variable : args[3].split("\\|")) {
 | 
				
			||||||
 | 
												value.addPlaceholder("$" + i, variable);
 | 
				
			||||||
 | 
												i++;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
										value.send(player);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										if (sender instanceof Player && ((Player) sender).getItemInHand().getType().equals(Material.COMMAND)) {
 | 
				
			||||||
 | 
											MsgUtils.send(sender, "<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>Ϣ<EFBFBD>ѷ<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD>ʱ: &f" + (System.currentTimeMillis() - time) + "ms");
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										142
									
								
								src/main/src/me/skymc/taboolib/string/language2/Language2.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								src/main/src/me/skymc/taboolib/string/language2/Language2.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.string.language2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.io.FileNotFoundException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>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;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD>췽<EFBFBD><ECB7BD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param plugin <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Language2(Plugin plugin) {
 | 
				
			||||||
 | 
							this("zh_CN", plugin);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD>췽<EFBFBD><ECB7BD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param languageName <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
						 * @param plugin <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Language2(String languageName, Plugin plugin) {
 | 
				
			||||||
 | 
							this.languageName = languageName;
 | 
				
			||||||
 | 
							this.plugin = plugin;
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
							reload(languageName);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param key <20><>
 | 
				
			||||||
 | 
						 * @return {@link Language2Value}
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Language2Value get(String key) {
 | 
				
			||||||
 | 
							return new Language2Value(this, key);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void reload() {
 | 
				
			||||||
 | 
							reload(this.languageName);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param languageName <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void reload(String languageName) {
 | 
				
			||||||
 | 
							// <20><>ʼ<EFBFBD><CABC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
 | 
				
			||||||
 | 
							createFolder(plugin);
 | 
				
			||||||
 | 
							// <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							languageName = formatName(languageName);
 | 
				
			||||||
 | 
							// <20><>ȡ<EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
 | 
							languageFile = new File(languageFolder, languageName);
 | 
				
			||||||
 | 
							// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (!languageFile.exists()) {
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
								if (plugin.getResource("Language2/" + languageName) == null) {
 | 
				
			||||||
 | 
									try {
 | 
				
			||||||
 | 
										throw new FileNotFoundException("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> " + languageName + " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									catch (Exception e) {
 | 
				
			||||||
 | 
										// TODO: handle exception
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ
 | 
				
			||||||
 | 
									plugin.saveResource("Language2/" + languageName, true);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							configuration = ConfigUtils.load(plugin, languageFile);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * PlaceholderAPI <20><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param player <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * @param string <20>ı<EFBFBD>
 | 
				
			||||||
 | 
						 * @return String
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public String setPlaceholderAPI(Player player, String string) {
 | 
				
			||||||
 | 
							if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null && player != null) {
 | 
				
			||||||
 | 
								return PlaceholderAPI.setPlaceholders(player, string);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return string;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƹ<EFBFBD>ʽ<EFBFBD><CABD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param name <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * @return String
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private String formatName(String name) {
 | 
				
			||||||
 | 
							return name.contains(".yml") ? name : name + ".yml";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>г<EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param plugin
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private void createFolder(Plugin plugin) {
 | 
				
			||||||
 | 
							languageFolder = new File(plugin.getDataFolder(), "Language2");
 | 
				
			||||||
 | 
							if (!languageFolder.exists()) {
 | 
				
			||||||
 | 
								languageFolder.mkdir();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.string.language2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>3:14:00
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public enum Language2Type {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * һ<><D2BB><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						TEXT,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * JSON <20>ı<EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						JSON,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						TITLE,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * С<><D0A1><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						ACTION,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,227 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.string.language2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.LinkedHashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.ChatColor;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.type.Language2Action;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.type.Language2Json;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.type.Language2Title;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>3:05:15
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Language2Value {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private Language2 language;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private String languageKey;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private List<String> languageValue;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private Language2Type languageType;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private LinkedHashMap<String, String> placeholder = new LinkedHashMap<>();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private boolean enablePlaceholderAPI;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD>췽<EFBFBD><ECB7BD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Language2Value(Language2 language, String languageKey) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (language == null || languageKey == null) {
 | 
				
			||||||
 | 
								languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-0>]");
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (!language.getConfiguration().contains(languageKey)) {
 | 
				
			||||||
 | 
								languageValue = Arrays.asList(ChatColor.DARK_RED + "[<ERROR-1: " + languageKey + ">]");
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (language.getConfiguration().get(languageKey) instanceof List) {
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								languageValue = asColored(language.getConfiguration().getStringList(languageKey));
 | 
				
			||||||
 | 
								// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
								String type = languageValue.get(0).toLowerCase();
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
								if (type.contains("[json]")) {
 | 
				
			||||||
 | 
									languageType = Language2Type.JSON;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (type.contains("[title]")) {
 | 
				
			||||||
 | 
									languageType = Language2Type.TITLE;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (type.contains("[action]")) {
 | 
				
			||||||
 | 
									languageType = Language2Type.ACTION;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									languageType = Language2Type.TEXT;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>PAPI
 | 
				
			||||||
 | 
								if (type.contains("[papi]")) {
 | 
				
			||||||
 | 
									enablePlaceholderAPI = true;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									enablePlaceholderAPI = false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
								languageValue.remove(0);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								languageValue = Arrays.asList(ChatColor.translateAlternateColorCodes('&', language.getConfiguration().getString(languageKey)));
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
								languageType = Language2Type.TEXT;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							this.language = language;
 | 
				
			||||||
 | 
							this.languageKey = languageKey;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param player
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void send(Player player) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (languageType == Language2Type.TITLE) {
 | 
				
			||||||
 | 
								// ʶ<><CAB6><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								Language2Title title = new Language2Title(this);
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								title.send(player);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							else if (languageType == Language2Type.ACTION) {
 | 
				
			||||||
 | 
								// ʶ<><CAB6><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								Language2Action action = new Language2Action(this);
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								action.send(player);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// JSON<4F><4E><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							else if (languageType == Language2Type.JSON) {
 | 
				
			||||||
 | 
								// ʶ<><CAB6><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								Language2Json json = new Language2Json(this, player);
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								json.send(player);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								for (String message : languageValue) {
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
									if (player != null) {
 | 
				
			||||||
 | 
										player.sendMessage(setPlaceholder(message, player));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										Bukkit.getConsoleSender().sendMessage(setPlaceholder(message, player));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param players <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void send(List<Player> players) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (languageType == Language2Type.TITLE) {
 | 
				
			||||||
 | 
								// ʶ<><CAB6><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								Language2Title title = new Language2Title(this);
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								players.forEach(x -> title.send(x));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							else if (languageType == Language2Type.ACTION) {
 | 
				
			||||||
 | 
								// ʶ<><CAB6><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								Language2Action action = new Language2Action(this);
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								players.forEach(x -> action.send(x));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// JSON<4F><4E><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							else if (languageType == Language2Type.JSON) {
 | 
				
			||||||
 | 
								for (Player player : players) {
 | 
				
			||||||
 | 
									// ʶ<><CAB6><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
									Language2Json json = new Language2Json(this, player);
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
									json.send(player);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								for (Player player : players) {
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
									for (String message : languageValue) {
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
										if (player != null) {
 | 
				
			||||||
 | 
											player.sendMessage(setPlaceholder(message, player));
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
 | 
											Bukkit.getConsoleSender().sendMessage(setPlaceholder(message, player));
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD>滻
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param value <20>滻<EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
						 * @param player <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * @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;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><E6BBBB><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param key <20><>
 | 
				
			||||||
 | 
						 * @param value ֵ
 | 
				
			||||||
 | 
						 * @return {@link Language2Value}
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Language2Value addPlaceholder(String key, String value) {
 | 
				
			||||||
 | 
							this.placeholder.put(key, value);
 | 
				
			||||||
 | 
							return this;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20>滻<EFBFBD><E6BBBB>ɫ
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @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;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.string.language2.type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.message.MsgUtils;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.other.NumberUtils;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.Language2Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>3:58:07
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Language2Action {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						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(Language2Value value) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
							this.value = value;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
							for (String message : value.getLanguageValue()) {
 | 
				
			||||||
 | 
								try {
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
 | 
				
			||||||
 | 
									if (message.startsWith(KEY_TEXT)) {
 | 
				
			||||||
 | 
										text = message.substring(KEY_TEXT.length());
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | 
				
			||||||
 | 
									if (message.startsWith(KEY_STAY)) {
 | 
				
			||||||
 | 
										repeat = NumberUtils.getInteger(message.substring(KEY_STAY.length()));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								catch (Exception e) {
 | 
				
			||||||
 | 
									// ʶ<><CAB6><EFBFBD>쳣
 | 
				
			||||||
 | 
									text = ChatColor.DARK_RED + "[<ERROR-11: " + value.getLanguageKey() + ">]";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							if (repeat < 0) {
 | 
				
			||||||
 | 
								repeat = 1;
 | 
				
			||||||
 | 
								text = ChatColor.DARK_RED + "[<ERROR-12: " + value.getLanguageKey() + ">]";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param player <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void send(Player player) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD>汾
 | 
				
			||||||
 | 
							if (TabooLib.getVerint() < 10800) {
 | 
				
			||||||
 | 
								player.sendMessage(ChatColor.DARK_RED + "[<ERROR-30: " + value.getLanguageKey() + ">]");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							else if (player != null) {
 | 
				
			||||||
 | 
								new BukkitRunnable() {
 | 
				
			||||||
 | 
									int times = 0;
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									@Override
 | 
				
			||||||
 | 
									public void run() {
 | 
				
			||||||
 | 
										ActionUtils.send(player, value.setPlaceholder(text, player));
 | 
				
			||||||
 | 
										if ((times += 1) >= repeat) {
 | 
				
			||||||
 | 
											cancel();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}.runTaskTimer(Main.getInst(), 0, 20);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								Bukkit.getConsoleSender().sendMessage(value.setPlaceholder(text, player));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.string.language2.type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.ChatColor;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.jsonformatter.JSONFormatter;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.jsonformatter.click.ClickEvent;
 | 
				
			||||||
 | 
					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.ShowTextEvent;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.Language2Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>4:11:33
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Language2Json {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private static final String KEY_TEXT = "    text: ";
 | 
				
			||||||
 | 
						private static final String KEY_COMMAND = "    command: ";
 | 
				
			||||||
 | 
						private static final String KEY_SUGGEST = "    suggest: ";
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private Player player;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private Language2Value value;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private JSONFormatter json = new JSONFormatter();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Getter
 | 
				
			||||||
 | 
						private StringBuffer text = new StringBuffer();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public Language2Json(Language2Value value, Player player) {
 | 
				
			||||||
 | 
							// <20>ı<EFBFBD><C4B1><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
							String current = ChatColor.DARK_RED + "[<ERROR-20: " + value.getLanguageKey() + ">]";
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20>״μ<D7B4><CEBC><EFBFBD>
 | 
				
			||||||
 | 
							boolean isFirst = true;
 | 
				
			||||||
 | 
							boolean isBreak = false;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
							this.value = value;
 | 
				
			||||||
 | 
							this.player = player;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
							ClickEvent clickEvent = null;
 | 
				
			||||||
 | 
							HoverEvent hoverEvent = null;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
							for (String message : value.getLanguageValue()) {
 | 
				
			||||||
 | 
								try {
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
									if (message.startsWith(KEY_TEXT)) {
 | 
				
			||||||
 | 
										hoverEvent = new ShowTextEvent(message.replace("||", "\n").substring(KEY_TEXT.length()));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// ִ<><D6B4>ָ<EFBFBD><D6B8>
 | 
				
			||||||
 | 
									else if (message.startsWith(KEY_COMMAND)) {
 | 
				
			||||||
 | 
										clickEvent = new RunCommandEvent(message.substring(KEY_COMMAND.length()));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// <20><>ӡָ<D3A1><D6B8>
 | 
				
			||||||
 | 
									else if (message.startsWith(KEY_SUGGEST)) {
 | 
				
			||||||
 | 
										clickEvent = new SuggestCommandEvent(message.substring(KEY_SUGGEST.length()));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
									else if (message.equals("[break]")) {
 | 
				
			||||||
 | 
										append(current, clickEvent, hoverEvent);
 | 
				
			||||||
 | 
										// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										clickEvent = null;
 | 
				
			||||||
 | 
										hoverEvent = null;
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										json.newLine();
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										isBreak = true;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										if (!isFirst && !isBreak) {
 | 
				
			||||||
 | 
											append(current, clickEvent, hoverEvent);
 | 
				
			||||||
 | 
											// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
											clickEvent = null;
 | 
				
			||||||
 | 
											hoverEvent = null;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										current = message;
 | 
				
			||||||
 | 
										// <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
										isFirst = false;
 | 
				
			||||||
 | 
										isBreak = false;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								catch (Exception e) {
 | 
				
			||||||
 | 
									// ʶ<><CAB6><EFBFBD>쳣
 | 
				
			||||||
 | 
									json.append(ChatColor.DARK_RED + "[<ERROR-21: " + value.getLanguageKey() + ">]");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <><D7B7>
 | 
				
			||||||
 | 
							append(current, clickEvent, hoverEvent);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param player <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void send(Player player) {
 | 
				
			||||||
 | 
							if (player != null) {
 | 
				
			||||||
 | 
								json.send(player);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								Bukkit.getConsoleSender().sendMessage(text.toString());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <><D7B7> JSON <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param current <20>ı<EFBFBD>
 | 
				
			||||||
 | 
						 * @param clickevent <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * @param hoverEvent <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private void append(String current, ClickEvent clickEvent, HoverEvent hoverEvent) {
 | 
				
			||||||
 | 
							if (clickEvent == null && hoverEvent == null) {
 | 
				
			||||||
 | 
								// <20><><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
								json.append(value.setPlaceholder(current, player));
 | 
				
			||||||
 | 
							} else if (clickEvent != null && hoverEvent == null) {
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
								json.appendClick(value.setPlaceholder(current, player), clickEvent);
 | 
				
			||||||
 | 
							} else if (clickEvent == null && hoverEvent != null) {
 | 
				
			||||||
 | 
								// <20><><EFBFBD><EFBFBD>ʾ
 | 
				
			||||||
 | 
								json.appendHover(value.setPlaceholder(current, player), hoverEvent);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								// ȫ<><C8AB>
 | 
				
			||||||
 | 
								json.appendHoverClick(value.setPlaceholder(current, player), hoverEvent, clickEvent);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <><D7B7><EFBFBD><EFBFBD>ʾ<EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
							text.append(current);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					package me.skymc.taboolib.string.language2.type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					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.message.MsgUtils;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.string.language2.Language2Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author sky
 | 
				
			||||||
 | 
					 * @since 2018<31><38>2<EFBFBD><32>13<31><33> <20><><EFBFBD><EFBFBD>3:58:07
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Language2Title {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						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(Language2Value value) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
							this.value = value;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | 
				
			||||||
 | 
							for (String message : value.getLanguageValue()) {
 | 
				
			||||||
 | 
								try {
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
									if (message.startsWith(KEY_TITLE)) {
 | 
				
			||||||
 | 
										title = message.substring(KEY_TITLE.length());
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// С<><D0A1><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
									else if (message.startsWith(KEY_SUBTITLE)) {
 | 
				
			||||||
 | 
										subtitle = message.substring(KEY_SUBTITLE.length());
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | 
				
			||||||
 | 
									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) {
 | 
				
			||||||
 | 
									// ʶ<><CAB6><EFBFBD>쳣
 | 
				
			||||||
 | 
									title = ChatColor.DARK_RED + "[<ERROR-10: " + value.getLanguageKey() + ">]";
 | 
				
			||||||
 | 
									subtitle = ChatColor.DARK_RED + "[<ERROR-10: " + value.getLanguageKey() + ">]";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * <20><><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param player <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void send(Player player) {
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD>汾
 | 
				
			||||||
 | 
							if (TabooLib.getVerint() < 10800) {
 | 
				
			||||||
 | 
								player.sendMessage(ChatColor.DARK_RED + "[<ERROR-31: " + value.getLanguageKey() + ">]");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
							else if (player != null) {
 | 
				
			||||||
 | 
								TitleUtils.sendTitle(player, value.setPlaceholder(title, player), value.setPlaceholder(subtitle, player), fade1, stay, fade2);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								Bukkit.getConsoleSender().sendMessage(value.setPlaceholder(title, player) + ", " + value.setPlaceholder(subtitle, player));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										66
									
								
								src/resources/Language2/Language2.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/resources/Language2/Language2.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					# UTF-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 错误代码:
 | 
				
			||||||
 | 
					#   0:语言文件不存在
 | 
				
			||||||
 | 
					#   1:语言文本不存在
 | 
				
			||||||
 | 
					#   10: 大标题语言类型识别异常
 | 
				
			||||||
 | 
					#   11: 动作栏语言类型识别异常
 | 
				
			||||||
 | 
					#   12: 动作栏重复次数异常
 | 
				
			||||||
 | 
					#   20: JSON 空文本异常
 | 
				
			||||||
 | 
					#   21: JSON 语言类型识别异常
 | 
				
			||||||
 | 
					#   30: 大标题不兼容当前版本服务器
 | 
				
			||||||
 | 
					#   31: 动作栏不兼容当前版本服务器
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 正常提示
 | 
				
			||||||
 | 
					TEXT: '&f正常的提示'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JSON提示 + 占位符
 | 
				
			||||||
 | 
					# 占位符注释可以追加到任何类型之后
 | 
				
			||||||
 | 
					PAPI-TEXT:
 | 
				
			||||||
 | 
					- '[json][papi]'
 | 
				
			||||||
 | 
					- '&f变量提示, 玩家名称: %player_name%'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JSON提示
 | 
				
			||||||
 | 
					JSON-NORMAL-TEXT:
 | 
				
			||||||
 | 
					- '[json]'
 | 
				
			||||||
 | 
					- '提示信息 - 1'
 | 
				
			||||||
 | 
					- '    text: 这是一个一般提示'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JSON提示
 | 
				
			||||||
 | 
					JSON-COMMAND-TEXT:
 | 
				
			||||||
 | 
					- '[json]'
 | 
				
			||||||
 | 
					- '提示信息 - 2'
 | 
				
			||||||
 | 
					- '    text: 点击执行指令'
 | 
				
			||||||
 | 
					- '    command: /say %player% 牛逼'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JSON提示
 | 
				
			||||||
 | 
					JSON-SUGGEST-TEXT:
 | 
				
			||||||
 | 
					- '[json]'
 | 
				
			||||||
 | 
					- '提示信息 - 3'
 | 
				
			||||||
 | 
					- '    text: 点击打印指令'
 | 
				
			||||||
 | 
					- '    suggest: /say %player% 牛逼'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JSON提示
 | 
				
			||||||
 | 
					# [breka] 注释为 JSON 提示类型中的换行符
 | 
				
			||||||
 | 
					JSON-MULTILINE-TEXT:
 | 
				
			||||||
 | 
					- '[json]'
 | 
				
			||||||
 | 
					- '提示信息 - 4'
 | 
				
			||||||
 | 
					- '    text: 这是一段换行提示1'
 | 
				
			||||||
 | 
					- '&a (单行追加内容)'
 | 
				
			||||||
 | 
					- '[break]'
 | 
				
			||||||
 | 
					- '提示信息 - 6'
 | 
				
			||||||
 | 
					- '    text: 这是一段换行提示3'
 | 
				
			||||||
 | 
					- '&a (单行追加内容)'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 大标题提示
 | 
				
			||||||
 | 
					TITLE-TEXT:
 | 
				
			||||||
 | 
					- '[title]'
 | 
				
			||||||
 | 
					- '    title: 大标题'
 | 
				
			||||||
 | 
					- '    subtitle: 小标题'
 | 
				
			||||||
 | 
					- '    stay: 10|40|10'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 动作栏提示
 | 
				
			||||||
 | 
					ACTION-TEXT:
 | 
				
			||||||
 | 
					- '[action]'
 | 
				
			||||||
 | 
					- '    text: 动作栏提示'
 | 
				
			||||||
 | 
					- '    repeat: 10'
 | 
				
			||||||
@@ -12,6 +12,9 @@ commands:
 | 
				
			|||||||
  taboolib:
 | 
					  taboolib:
 | 
				
			||||||
    aliases: [tlib]
 | 
					    aliases: [tlib]
 | 
				
			||||||
    permission: taboolib.admin
 | 
					    permission: taboolib.admin
 | 
				
			||||||
 | 
					  language2:
 | 
				
			||||||
 | 
					    aliases: [lang2]
 | 
				
			||||||
 | 
					    permission: taboolib.admin
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
loadbefore: [Vault]
 | 
					loadbefore: [Vault]
 | 
				
			||||||
soft-depend: [PlaceholderAPI]
 | 
					soft-depend: [PlaceholderAPI]
 | 
				
			||||||
		Reference in New Issue
	
	Block a user