版本更新至:4.03
新增:TabooLib 离线版 新增:阻止在线版在无互联网且无依赖库的服务器上启动
This commit is contained in:
		
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
 | 
			
		||||
    <groupId>me.skymc</groupId>
 | 
			
		||||
    <artifactId>TabooLib</artifactId>
 | 
			
		||||
    <version>4.02</version>
 | 
			
		||||
    <version>4.03</version>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ import com.ilummc.tlib.resources.TLocale;
 | 
			
		||||
import com.ilummc.tlib.resources.TLocaleLoader;
 | 
			
		||||
import com.ilummc.tlib.util.IO;
 | 
			
		||||
import me.skymc.taboolib.Main;
 | 
			
		||||
import me.skymc.taboolib.fileutils.FileUtils;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.configuration.InvalidConfigurationException;
 | 
			
		||||
import org.bukkit.configuration.file.YamlConfiguration;
 | 
			
		||||
@@ -49,7 +50,7 @@ public class TLib {
 | 
			
		||||
            libsFolder.mkdirs();
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            String yamlText = new String(IO.readFully(TLib.class.getResourceAsStream("/lang/internal.yml")), Charset.forName("utf-8"));
 | 
			
		||||
            String yamlText = new String(IO.readFully(FileUtils.getResource("lang/internal.yml")), Charset.forName("utf-8"));
 | 
			
		||||
            internalLanguage = new YamlConfiguration();
 | 
			
		||||
            internalLanguage.loadFromString(yamlText);
 | 
			
		||||
        } catch (IOException | InvalidConfigurationException ignored) {
 | 
			
		||||
@@ -71,13 +72,14 @@ public class TLib {
 | 
			
		||||
        TLocaleLoader.init();
 | 
			
		||||
        PlaceholderHook.init();
 | 
			
		||||
        TLocaleLoader.load(Main.getInst(), false);
 | 
			
		||||
        TDependencyInjector.inject(Main.getInst(), tLib);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void initPost() {
 | 
			
		||||
        TDependencyInjector.inject(Main.getInst(), TLib.getTLib());
 | 
			
		||||
        try {
 | 
			
		||||
            Pool.init();
 | 
			
		||||
        } catch (Throwable ignored) {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void unload() {
 | 
			
		||||
 
 | 
			
		||||
@@ -52,8 +52,8 @@ public class TDependency {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static boolean downloadMaven(String url, String groupId, String artifactId, String version, File target, String dl) {
 | 
			
		||||
        if (Main.getInst().getConfig().getBoolean("OFFLINE-MODE")) {
 | 
			
		||||
            TLocale.Logger.warn("DEPENDENCY.OFFLINE-DEPENDENCY-WARN");
 | 
			
		||||
        if (Main.isOfflineVersion()) {
 | 
			
		||||
            TLocale.Logger.warn("DEPENDENCY.DOWNLOAD-OFFLINE");
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        AtomicBoolean failed = new AtomicBoolean(false);
 | 
			
		||||
 
 | 
			
		||||
@@ -13,9 +13,23 @@ import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
public class TDependencyInjector {
 | 
			
		||||
 | 
			
		||||
    public static Dependency[] getDependencies(Object o) {
 | 
			
		||||
        Dependency[] dependencies = new Dependency[0];
 | 
			
		||||
        Dependencies d = o.getClass().getAnnotation(Dependencies.class);
 | 
			
		||||
        if (d != null) {
 | 
			
		||||
            dependencies = d.value();
 | 
			
		||||
        }
 | 
			
		||||
        Dependency d2 = o.getClass().getAnnotation(Dependency.class);
 | 
			
		||||
        if (d2 != null) {
 | 
			
		||||
            dependencies = new Dependency[]{d2};
 | 
			
		||||
        }
 | 
			
		||||
        return dependencies;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void inject(Plugin plugin, Object o) {
 | 
			
		||||
        TLocaleLoader.load(plugin, true);
 | 
			
		||||
        injectDependencies(plugin, o);
 | 
			
		||||
@@ -135,17 +149,7 @@ public class TDependencyInjector {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void injectDependencies(Plugin plugin, Object o) {
 | 
			
		||||
        Dependency[] dependencies = new Dependency[0];
 | 
			
		||||
        {
 | 
			
		||||
            Dependencies d = o.getClass().getAnnotation(Dependencies.class);
 | 
			
		||||
            if (d != null) {
 | 
			
		||||
                dependencies = d.value();
 | 
			
		||||
            }
 | 
			
		||||
            Dependency d2 = o.getClass().getAnnotation(Dependency.class);
 | 
			
		||||
            if (d2 != null) {
 | 
			
		||||
                dependencies = new Dependency[]{d2};
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Dependency[] dependencies = getDependencies(o);
 | 
			
		||||
        if (dependencies.length != 0) {
 | 
			
		||||
            TLocale.Logger.info("DEPENDENCY.LOADING-START", plugin.getName());
 | 
			
		||||
            for (Dependency dependency : dependencies) {
 | 
			
		||||
@@ -167,5 +171,4 @@ public class TDependencyInjector {
 | 
			
		||||
            TLocale.Logger.info("DEPENDENCY.LOAD-COMPLETE");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ import me.skymc.taboocode.TabooCodeLang;
 | 
			
		||||
import me.skymc.taboolib.Main;
 | 
			
		||||
import me.skymc.taboolib.TabooLib;
 | 
			
		||||
import me.skymc.taboolib.fileutils.ConfigUtils;
 | 
			
		||||
import me.skymc.taboolib.fileutils.FileUtils;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.configuration.file.YamlConfiguration;
 | 
			
		||||
@@ -140,7 +141,7 @@ public class TLocaleLoader {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static YamlConfiguration getLocaleAtStream(Plugin plugin, File localeFile) {
 | 
			
		||||
        InputStream localeInputSteam = plugin.getClass().getResourceAsStream("/lang/" + localeFile.getName());
 | 
			
		||||
        InputStream localeInputSteam = FileUtils.getResource("lang/" + localeFile.getName());
 | 
			
		||||
        try {
 | 
			
		||||
            String yamlText = new String(IO.readFully(localeInputSteam), Charset.forName("utf-8"));
 | 
			
		||||
            YamlConfiguration yaml = new YamlConfiguration();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
package me.skymc.taboolib;
 | 
			
		||||
 | 
			
		||||
import com.ilummc.tlib.TLib;
 | 
			
		||||
import com.ilummc.tlib.inject.TConfigWatcher;
 | 
			
		||||
import com.ilummc.tlib.annotations.Dependency;
 | 
			
		||||
import com.ilummc.tlib.inject.TDependencyInjector;
 | 
			
		||||
import com.ilummc.tlib.resources.TLocale;
 | 
			
		||||
import me.skymc.taboolib.anvil.AnvilContainerAPI;
 | 
			
		||||
import me.skymc.taboolib.bstats.Metrics;
 | 
			
		||||
@@ -17,12 +18,12 @@ import me.skymc.taboolib.database.PlayerDataManager;
 | 
			
		||||
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.inventory.ItemUtils;
 | 
			
		||||
import me.skymc.taboolib.inventory.speciaitem.SpecialItem;
 | 
			
		||||
import me.skymc.taboolib.javashell.JavaShell;
 | 
			
		||||
import me.skymc.taboolib.listener.*;
 | 
			
		||||
import me.skymc.taboolib.message.ChatCatcher;
 | 
			
		||||
import me.skymc.taboolib.message.MsgUtils;
 | 
			
		||||
import me.skymc.taboolib.mysql.hikari.HikariHandler;
 | 
			
		||||
import me.skymc.taboolib.mysql.protect.MySQLConnection;
 | 
			
		||||
import me.skymc.taboolib.nms.item.DabItemUtils;
 | 
			
		||||
@@ -50,6 +51,8 @@ import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
import org.bukkit.scheduler.BukkitRunnable;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.net.InetAddress;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -57,6 +60,14 @@ import java.util.Random;
 | 
			
		||||
 */
 | 
			
		||||
public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
 | 
			
		||||
    public Main() {
 | 
			
		||||
        inst = this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public enum StorageType {
 | 
			
		||||
        LOCAL, SQL
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Plugin inst;
 | 
			
		||||
 | 
			
		||||
    private static net.milkbowl.vault.economy.Economy Economy;
 | 
			
		||||
@@ -65,7 +76,7 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
 | 
			
		||||
    private static File serverDataFolder;
 | 
			
		||||
 | 
			
		||||
    private static StorageType storageType;
 | 
			
		||||
    private static StorageType storageType = StorageType.LOCAL;
 | 
			
		||||
 | 
			
		||||
    private static boolean disable = false;
 | 
			
		||||
 | 
			
		||||
@@ -75,60 +86,10 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
 | 
			
		||||
    private static boolean started;
 | 
			
		||||
 | 
			
		||||
    private static boolean isInternetOnline = false;
 | 
			
		||||
 | 
			
		||||
    private FileConfiguration config = null;
 | 
			
		||||
 | 
			
		||||
    public static Plugin getInst() {
 | 
			
		||||
        return inst;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getPrefix() {
 | 
			
		||||
        return "§8[§3§lTabooLib§8] §7";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static net.milkbowl.vault.economy.Economy getEconomy() {
 | 
			
		||||
        return Economy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void setEconomy(net.milkbowl.vault.economy.Economy economy) {
 | 
			
		||||
        Economy = economy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static File getPlayerDataFolder() {
 | 
			
		||||
        return playerDataFolder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static File getServerDataFolder() {
 | 
			
		||||
        return serverDataFolder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static StorageType getStorageType() {
 | 
			
		||||
        return storageType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isDisable() {
 | 
			
		||||
        return disable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static MySQLConnection getConnection() {
 | 
			
		||||
        return connection;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Language2 getExampleLanguage2() {
 | 
			
		||||
        return exampleLanguage2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isStarted() {
 | 
			
		||||
        return started;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Random getRandom() {
 | 
			
		||||
        return NumberUtils.getRandom();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getTablePrefix() {
 | 
			
		||||
        return inst.getConfig().getString("MYSQL.PREFIX");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public FileConfiguration getConfig() {
 | 
			
		||||
        return config;
 | 
			
		||||
@@ -150,71 +111,31 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onLoad() {
 | 
			
		||||
        inst = this;
 | 
			
		||||
        disable = false;
 | 
			
		||||
 | 
			
		||||
        // 载入配置
 | 
			
		||||
        saveDefaultConfig();
 | 
			
		||||
 | 
			
		||||
        // 加载依赖
 | 
			
		||||
        // 载入牛逼玩意儿
 | 
			
		||||
        TLib.init();
 | 
			
		||||
        TLib.injectPluginManager();
 | 
			
		||||
 | 
			
		||||
        // 载入目录
 | 
			
		||||
        // 网络检测
 | 
			
		||||
        testInternet();
 | 
			
		||||
        // 创建文件夹
 | 
			
		||||
        setupDataFolder();
 | 
			
		||||
        // 注册配置
 | 
			
		||||
        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;
 | 
			
		||||
        } else {
 | 
			
		||||
            // 储存方式
 | 
			
		||||
            storageType = StorageType.LOCAL;
 | 
			
		||||
        }
 | 
			
		||||
        // 创建数据库
 | 
			
		||||
        setupDatabase();
 | 
			
		||||
        // 载入离线库文件
 | 
			
		||||
        setupLibraries();
 | 
			
		||||
        // 载入牛逼玩意儿
 | 
			
		||||
        TLib.initPost();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onEnable() {
 | 
			
		||||
        // 注册指令
 | 
			
		||||
        getCommand("language2").setExecutor(new Language2Command());
 | 
			
		||||
        getCommand("taboolibrarymodule").setExecutor(new TLMCommands());
 | 
			
		||||
        getCommand("tabooliblocale").setExecutor(new TabooLibLocaleCommand());
 | 
			
		||||
        BaseMainCommand.createCommandExecutor("taboolib", new TabooLibMainCommand());
 | 
			
		||||
        BaseMainCommand.createCommandExecutor("taboolibplugin", new TabooLibPluginMainCommand());
 | 
			
		||||
 | 
			
		||||
        // 注册命令
 | 
			
		||||
        registerCommands();
 | 
			
		||||
        // 注册监听
 | 
			
		||||
        registerListener();
 | 
			
		||||
 | 
			
		||||
        // 载入经济
 | 
			
		||||
        EcoUtils.setupEconomy();
 | 
			
		||||
        // 载入权限
 | 
			
		||||
@@ -243,6 +164,7 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
        // 文件保存
 | 
			
		||||
        Bukkit.getScheduler().runTaskTimerAsynchronously(this, DataUtils::saveAllCaches, 20, 20 * 120);
 | 
			
		||||
        Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> PlayerDataManager.saveAllCaches(true, false), 20, 20 * 60);
 | 
			
		||||
 | 
			
		||||
        // 文件监控
 | 
			
		||||
        TLib.getTLib().getConfigWatcher().addListener(new File(getDataFolder(), "config.yml"), null, obj -> {
 | 
			
		||||
            reloadConfig();
 | 
			
		||||
@@ -254,9 +176,11 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                // 载入 PlaceholderAPI 扩展
 | 
			
		||||
                if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
 | 
			
		||||
                    new SupportPlaceholder(getInst(), "taboolib").hook();
 | 
			
		||||
                }
 | 
			
		||||
                // 载入 ProtocolLib 扩展
 | 
			
		||||
                if (PacketUtils.isProtocolLibEnabled()) {
 | 
			
		||||
                    TagAPI.inst();
 | 
			
		||||
                }
 | 
			
		||||
@@ -328,12 +252,29 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
            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()) {
 | 
			
		||||
@@ -345,6 +286,56 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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());
 | 
			
		||||
        getCommand("tabooliblocale").setExecutor(new TabooLibLocaleCommand());
 | 
			
		||||
        BaseMainCommand.createCommandExecutor("taboolib", new TabooLibMainCommand());
 | 
			
		||||
        BaseMainCommand.createCommandExecutor("taboolibplugin", new TabooLibPluginMainCommand());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerListener() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(this, this);
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new ListenerPlayerCommand(), this);
 | 
			
		||||
@@ -368,7 +359,73 @@ public class Main extends JavaPlugin implements Listener {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public enum StorageType {
 | 
			
		||||
        LOCAL, SQL
 | 
			
		||||
    // *********************************
 | 
			
		||||
    //
 | 
			
		||||
    //        Getter and Setter
 | 
			
		||||
    //
 | 
			
		||||
    // *********************************
 | 
			
		||||
 | 
			
		||||
    public static Plugin getInst() {
 | 
			
		||||
        return inst;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getPrefix() {
 | 
			
		||||
        return "§8[§3§lTabooLib§8] §7";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static net.milkbowl.vault.economy.Economy getEconomy() {
 | 
			
		||||
        return Economy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void setEconomy(net.milkbowl.vault.economy.Economy economy) {
 | 
			
		||||
        Economy = economy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static File getPlayerDataFolder() {
 | 
			
		||||
        return playerDataFolder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static File getServerDataFolder() {
 | 
			
		||||
        return serverDataFolder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static StorageType getStorageType() {
 | 
			
		||||
        return storageType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isDisable() {
 | 
			
		||||
        return disable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static MySQLConnection getConnection() {
 | 
			
		||||
        return connection;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Language2 getExampleLanguage2() {
 | 
			
		||||
        return exampleLanguage2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isStarted() {
 | 
			
		||||
        return started;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Random getRandom() {
 | 
			
		||||
        return NumberUtils.getRandom();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getTablePrefix() {
 | 
			
		||||
        return inst.getConfig().getString("MYSQL.PREFIX");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isInternetOnline() {
 | 
			
		||||
        return isInternetOnline;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isOfflineVersion() {
 | 
			
		||||
        return inst.getResource("libs") != null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isLibrariesExists() {
 | 
			
		||||
        return TLib.getTLib().getLibsFolder().listFiles().length > 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package me.skymc.taboolib;
 | 
			
		||||
 | 
			
		||||
import me.skymc.taboolib.other.NumberUtils;
 | 
			
		||||
import me.skymc.taboolib.playerdata.DataUtils;
 | 
			
		||||
import net.md_5.bungee.api.ChatColor;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
@@ -37,11 +38,7 @@ public class TabooLib {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static double getPluginVersion() {
 | 
			
		||||
        try {
 | 
			
		||||
            return Double.valueOf(Main.getInst().getDescription().getVersion());
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            return 0D;
 | 
			
		||||
        }
 | 
			
		||||
        return NumberUtils.getDouble(Main.getInst().getDescription().getVersion());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getVersion() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
package me.skymc.taboolib.fileutils;
 | 
			
		||||
 | 
			
		||||
import ch.njol.util.Closeable;
 | 
			
		||||
import com.ilummc.tlib.util.IO;
 | 
			
		||||
import me.skymc.taboolib.Main;
 | 
			
		||||
import org.apache.commons.io.IOUtils;
 | 
			
		||||
 | 
			
		||||
import java.io.*;
 | 
			
		||||
@@ -8,7 +10,9 @@ import java.net.HttpURLConnection;
 | 
			
		||||
import java.net.URL;
 | 
			
		||||
import java.net.URLConnection;
 | 
			
		||||
import java.nio.channels.FileChannel;
 | 
			
		||||
import java.nio.charset.Charset;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
 | 
			
		||||
public class FileUtils {
 | 
			
		||||
 | 
			
		||||
@@ -43,6 +47,31 @@ public class FileUtils {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static InputStream getResource(String filename) {
 | 
			
		||||
        try {
 | 
			
		||||
            URL url = Main.class.getClassLoader().getResource(filename);
 | 
			
		||||
            if (url == null) {
 | 
			
		||||
                return null;
 | 
			
		||||
            } else {
 | 
			
		||||
                URLConnection connection = url.openConnection();
 | 
			
		||||
                connection.setUseCaches(false);
 | 
			
		||||
                return connection.getInputStream();
 | 
			
		||||
            }
 | 
			
		||||
        } catch (IOException ignored) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void inputStreamToFile(InputStream inputStream, File file) {
 | 
			
		||||
        try {
 | 
			
		||||
            String text = new String(IO.readFully(inputStream), Charset.forName("utf-8"));
 | 
			
		||||
            FileWriter fileWriter = new FileWriter(FileUtils.createNewFile(file));
 | 
			
		||||
            fileWriter.write(text);
 | 
			
		||||
            fileWriter.close();
 | 
			
		||||
        } catch (IOException ignored) {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 检测文件并创建
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -10,11 +10,6 @@ import java.util.Arrays;
 | 
			
		||||
 */
 | 
			
		||||
public class SQLColumn {
 | 
			
		||||
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        SQLColumn column2 = new SQLColumn(SQLColumnType.INT, "player_title", "无");
 | 
			
		||||
        System.out.println(column2.convertToCommand());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 类型
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -17,9 +17,8 @@ DATAURL:
 | 
			
		||||
# 启用后将收到来自其他插件的调试信息
 | 
			
		||||
DEBUG: false
 | 
			
		||||
 | 
			
		||||
# 是否启用离线模式
 | 
			
		||||
# 离线模式下将不会下载依赖
 | 
			
		||||
OFFLINE-MODE: false
 | 
			
		||||
# 网络连接测试地址
 | 
			
		||||
TEST-URL: 'aliyun.com'
 | 
			
		||||
 | 
			
		||||
# 下载依赖时启用的线程数
 | 
			
		||||
DOWNLOAD-POOL-SIZE: 4
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,18 @@
 | 
			
		||||
TLIB:
 | 
			
		||||
  INJECTION-SUCCESS: '注入成功'
 | 
			
		||||
  INJECTION-FAILED: '注入失败'
 | 
			
		||||
  LOAD-FAIL-OFFLINE:
 | 
			
		||||
  - '**********************************************'
 | 
			
		||||
  - '** TabooLib-{0} 无法在您的服务器上使用'
 | 
			
		||||
  - '**'
 | 
			
		||||
  - '** 您的服务器尚未连接互联网导致本插件无法正常载入'
 | 
			
		||||
  - '** 请使用离线版本或是手动下载依赖库文件'
 | 
			
		||||
  - '**'
 | 
			
		||||
  - '** 详情查阅: https://github.com/Bkm016/TabooLib'
 | 
			
		||||
  - '**********************************************'
 | 
			
		||||
  
 | 
			
		||||
DEPENDENCY:
 | 
			
		||||
  OFFLINE-DEPENDENCY-WARN: '已启用离线模式, 将不会下载第三方依赖库'
 | 
			
		||||
  DOWNLOAD-OFFLINE: '已启用离线模式, 将不会下载第三方依赖库'
 | 
			
		||||
  DOWNLOAD-CONNECTED: '  正在下载 {0} 大小 {1}'
 | 
			
		||||
  DOWNLOAD-PROGRESS: '    下载速度 {0} 进度 {1}'
 | 
			
		||||
  DOWNLOAD-SUCCESS: '  下载 {0} 完成'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user