史诗级大饼,请叫我黑饼王。

This commit is contained in:
坏黑
2018-08-23 23:59:20 +08:00
parent 600ac49622
commit 24556b9f2a
64 changed files with 2683 additions and 944 deletions

View File

@@ -22,9 +22,11 @@ import me.skymc.taboolib.economy.EcoUtils;
import me.skymc.taboolib.entity.EntityUtils;
import me.skymc.taboolib.fileutils.ConfigUtils;
import me.skymc.taboolib.fileutils.FileUtils;
import me.skymc.taboolib.fileutils.TLogs;
import me.skymc.taboolib.inventory.ItemUtils;
import me.skymc.taboolib.inventory.speciaitem.SpecialItem;
import me.skymc.taboolib.itagapi.TagDataHandler;
import me.skymc.taboolib.javascript.ScriptHandler;
import me.skymc.taboolib.javashell.JavaShell;
import me.skymc.taboolib.listener.*;
import me.skymc.taboolib.message.ChatCatcher;
@@ -36,6 +38,7 @@ import me.skymc.taboolib.permission.PermissionUtils;
import me.skymc.taboolib.playerdata.DataUtils;
import me.skymc.taboolib.sign.SignUtils;
import me.skymc.taboolib.skript.SkriptHandler;
import me.skymc.taboolib.socket.TabooLibClient;
import me.skymc.taboolib.string.StringUtils;
import me.skymc.taboolib.string.language2.Language2;
import me.skymc.taboolib.support.SupportPlaceholder;
@@ -61,11 +64,12 @@ import java.net.InetAddress;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.Collectors;
/**
* @author sky
*/
public class Main extends JavaPlugin implements Listener {
public class Main extends JavaPlugin {
public Main() {
inst = this;
@@ -80,7 +84,6 @@ public class Main extends JavaPlugin implements Listener {
private static File playerDataFolder;
private static File serverDataFolder;
private static StorageType storageType = StorageType.LOCAL;
private static MySQLConnection connection = null;
private static Language2 exampleLanguage2;
private static boolean disable = false;
private static boolean started = false;
@@ -109,32 +112,23 @@ public class Main extends JavaPlugin implements Listener {
@Override
public void onLoad() {
disable = false;
// 载入配置
// 载入配置文件
saveDefaultConfig();
// 载入牛逼玩意儿
// 载入牛逼东西
TLib.init();
TLib.injectPluginManager();
// 网络检测
testInternet();
// 创建文件夹
setupDataFolder();
// 创建数据库
setupDatabase();
// 载入离线库文件
setupLibraries();
// 载入牛逼玩意儿
// 载入插件设置
TabooLibSettings.setup();
// 载入大饼
TLib.initPost();
// 注册连接池
// 载入连接池
HikariHandler.init();
}
@Override
public void onEnable() {
// 注册命令
registerCommands();
// 注册监听
registerListener();
// 注册插件配置
TabooLibSettings.register();
// 载入经济
EcoUtils.setupEconomy();
// 载入权限
@@ -146,32 +140,27 @@ public class Main extends JavaPlugin implements Listener {
// 载入周期管理器
TimeCycleManager.load();
// 启动脚本
JavaShell.javaShellSetup();
ScriptHandler.inst();
// 注册脚本
SkriptHandler.register();
// 注册头衔
TagDataHandler.init(this);
// 载入语言文件
exampleLanguage2 = new Language2("Language2", this);
// 启动数据库储存方法
if (getStorageType() == StorageType.SQL) {
GlobalDataManager.SQLMethod.startSQLMethod();
}
// 载入完成
TLocale.Logger.info("NOTIFY.SUCCESS-LOADED", getDescription().getAuthors().toString(), getDescription().getVersion(), String.valueOf(TabooLib.getVersion()));
// 文件保存
Bukkit.getScheduler().runTaskTimerAsynchronously(this, DataUtils::saveAllCaches, 20, 20 * 120);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> PlayerDataManager.saveAllCaches(true, false), 20, 20 * 60);
// 文件监控
TLib.getTLib().getConfigWatcher().addSimpleListener(new File(getDataFolder(), "config.yml"), () -> {
reloadConfig();
TLocale.Logger.info("CONFIG.RELOAD-SUCCESS", inst.getName(), "config.yml");
});
// 插件联动
new BukkitRunnable() {
@@ -181,14 +170,12 @@ public class Main extends JavaPlugin implements Listener {
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
new SupportPlaceholder(getInst(), "taboolib").hook();
}
// 载入 TLM 接口
TLM.getInst();
// 载入 SpecialItem 接口
SpecialItem.getInst().loadItems();
// 载入 TranslateUUID 工具
TranslateUUID.init();
// 面子工程
InputStream inputStream = FileUtils.getResource("motd.txt");
try {
@@ -198,14 +185,12 @@ public class Main extends JavaPlugin implements Listener {
}
} catch (IOException ignored) {
}
// 本地通讯网络
TabooLibClient.init();
}
}.runTask(this);
// 更新检测
new UpdateTask();
// 启动监控
new Metrics(this);
// 启动
started = true;
}
@@ -213,13 +198,11 @@ public class Main extends JavaPlugin implements Listener {
@Override
public void onDisable() {
disable = true;
// 如果插件尚未启动完成
if (!started) {
TLocale.Logger.error("NOTIFY.FAIL-DISABLE");
return;
}
// 保存数据
Bukkit.getOnlinePlayers().forEach(x -> DataUtils.saveOnline(x.getName()));
// 结束线程
@@ -238,12 +221,12 @@ public class Main extends JavaPlugin implements Listener {
TranslateUUID.cancel();
// 注销连接池
HikariHandler.closeDataSourceForce();
// 注销监听器
TListenerHandler.cancelListeners();
// 结束数据库储存方法
if (getStorageType() == StorageType.SQL) {
GlobalDataManager.SQLMethod.cancelSQLMethod();
}
// 清理数据
if (getStorageType() == StorageType.LOCAL && getConfig().getBoolean("DELETE-DATA")) {
getPlayerDataFolder().delete();
@@ -252,124 +235,14 @@ public class Main extends JavaPlugin implements Listener {
if (getStorageType() == StorageType.SQL && getConfig().getBoolean("DELETE-VARIABLE")) {
GlobalDataManager.clearInvalidVariables();
}
// 提示信息
TLocale.Logger.info("NOTIFY.SUCCESS-DISABLE");
// 结束连接
if (connection != null && connection.isConnection()) {
connection.closeConnection();
}
// 卸载牛逼玩意儿
TLib.unload();
// 关闭服务器
Bukkit.shutdown();
}
private void testInternet() {
try {
InetAddress inetAddress = InetAddress.getByName(getConfig().getString("TEST-URL", "aliyun.com"));
isInternetOnline = inetAddress.isReachable(10000);
} catch (Exception ignored) {
}
if (!isInternetOnline() && !isOfflineVersion() && !isLibrariesExists()) {
TLocale.Logger.error("TLIB.LOAD-FAIL-OFFLINE", getDescription().getVersion());
// 死锁
try {
Thread.sleep(Long.MAX_VALUE);
} catch (Exception ignored) {
}
}
}
private void setupDataFolder() {
playerDataFolder = new File(getConfig().getString("DATAURL.PLAYER-DATA"));
if (!playerDataFolder.exists()) {
playerDataFolder.mkdirs();
}
serverDataFolder = new File(getConfig().getString("DATAURL.SERVER-DATA"));
if (!serverDataFolder.exists()) {
serverDataFolder.mkdirs();
}
}
private void setupLibraries() {
if (!isOfflineVersion()) {
return;
}
for (Dependency dependency : TDependencyInjector.getDependencies(TLib.getTLib())) {
if (dependency.type() == Dependency.Type.LIBRARY && dependency.maven().matches(".*:.*:.*")) {
String fileName = String.join("-", dependency.maven().split(":")) + ".jar";
File targetFile = FileUtils.file(TLib.getTLib().getLibsFolder(), fileName);
InputStream inputStream = FileUtils.getResource("libs/" + fileName);
if (!targetFile.exists() && inputStream != null) {
FileUtils.inputStreamToFile(inputStream, FileUtils.file(TLib.getTLib().getLibsFolder(), fileName));
}
}
}
}
private void setupDatabase() {
DataUtils.addPluginData("TabooLibrary", null);
if (getConfig().getBoolean("MYSQL.ENABLE")) {
connection = new MySQLConnection(getConfig().getString("MYSQL.HOST"), getConfig().getString("MYSQL.USER"), getConfig().getString("MYSQL.POST"), getConfig().getString("MYSQL.PASSWORD"), getConfig().getString("MYSQL.DATABASE"), 30, this);
if (connection.isConnection()) {
connection.createTable(getTablePrefix() + "_playerdata", "username", "configuration");
connection.createTable(getTablePrefix() + "_plugindata", "name", "variable", "upgrade");
connection.createTable(getTablePrefix() + "_serveruuid", "uuid", "hash");
if (!connection.isExists(getTablePrefix() + "_serveruuid", "uuid", TabooLib.getServerUID())) {
connection.intoValue(getTablePrefix() + "_serveruuid", TabooLib.getServerUID(), StringUtils.hashKeyForDisk(getDataFolder().getPath()));
} else {
String hash = connection.getValue(getTablePrefix() + "_serveruuid", "uuid", TabooLib.getServerUID(), "hash").toString();
if (!hash.equals(StringUtils.hashKeyForDisk(getDataFolder().getPath()))) {
TLocale.Logger.error("NOTIFY.ERROR-SERVER-KEY");
TabooLib.resetServerUID();
Bukkit.shutdown();
}
}
} else {
TLocale.Logger.error("NOTIFY.ERROR-CONNECTION-FAIL");
Bukkit.shutdown();
}
storageType = StorageType.SQL;
}
}
private void registerCommands() {
getCommand("language2").setExecutor(new Language2Command());
getCommand("taboolibrarymodule").setExecutor(new TLMCommands());
TBaseCommand.registerCommand("taboolib", new TabooLibMainCommand());
TBaseCommand.registerCommand("tabooliblocale", new TabooLibLocaleCommand());
TBaseCommand.registerCommand("taboolibplugin", new TabooLibPluginCommand());
TBaseCommand.registerCommand("taboolibexecute", new TabooLibExecuteCommand());
TBaseCommand.registerCommand("translateuuid", new TranslateUUIDCommand());
}
private void registerListener() {
getServer().getPluginManager().registerEvents(this, this);
getServer().getPluginManager().registerEvents(new ListenerPlayerCommand(), this);
getServer().getPluginManager().registerEvents(new ListenerPlayerJump(), this);
getServer().getPluginManager().registerEvents(new ListenerPlayerJoinAndQuit(), this);
getServer().getPluginManager().registerEvents(new ChatCatcher(), this);
getServer().getPluginManager().registerEvents(new DataUtils(), this);
getServer().getPluginManager().registerEvents(new AnvilContainerAPI(), this);
getServer().getPluginManager().registerEvents(new ListenerPluginDisable(), this);
getServer().getPluginManager().registerEvents(new PlayerDataManager(), this);
getServer().getPluginManager().registerEvents(new ListenerItemListCommand(), this);
getServer().getPluginManager().registerEvents(new ListenerSoundsCommand(), this);
if (TabooLib.getVerint() > 10700) {
getServer().getPluginManager().registerEvents(new EntityUtils(), this);
getServer().getPluginManager().registerEvents(new SignUtils(), this);
}
if (Bukkit.getPluginManager().getPlugin("YUM") != null) {
getServer().getPluginManager().registerEvents(new ListenerNetWork(), this);
}
}
// *********************************
//
// Getter and Setter
@@ -409,7 +282,7 @@ public class Main extends JavaPlugin implements Listener {
}
public static MySQLConnection getConnection() {
return connection;
return null;
}
public static Language2 getExampleLanguage2() {
@@ -439,4 +312,26 @@ public class Main extends JavaPlugin implements Listener {
public static boolean isLibrariesExists() {
return TLib.getTLib().getLibsFolder().listFiles().length > 0;
}
// *********************************
//
// Private Setter
//
// *********************************
static void setIsInternetOnline(boolean isInternetOnline) {
Main.isInternetOnline = isInternetOnline;
}
static void setPlayerDataFolder(File playerDataFolder) {
Main.playerDataFolder = playerDataFolder;
}
static void setServerDataFolder(File serverDataFolder) {
Main.serverDataFolder = serverDataFolder;
}
static void setStorageType(StorageType storageType) {
Main.storageType = storageType;
}
}