diff --git a/src/main/java/com/ilummc/tlib/TLib.java b/src/main/java/com/ilummc/tlib/TLib.java index 435af77..8a5ac8a 100644 --- a/src/main/java/com/ilummc/tlib/TLib.java +++ b/src/main/java/com/ilummc/tlib/TLib.java @@ -19,7 +19,7 @@ public class TLib { private static TLib tLib; - @Logger("§3[§6TLib§3|{1}§3] §f{2}") + @Logger("§8[§3§lTabooLib§8][§r{1}§8] §f{2}") private TLogger tLogger; private TLibConfig config; @@ -45,7 +45,6 @@ public class TLib { return tLib; } - @SuppressWarnings({"unchecked"}) public static void init() { new File(Main.getInst().getDataFolder(), "/libs").mkdirs(); tLib = new TLib(); diff --git a/src/main/java/com/ilummc/tlib/dependency/TDependency.java b/src/main/java/com/ilummc/tlib/dependency/TDependency.java index b4bbcf2..e15e975 100644 --- a/src/main/java/com/ilummc/tlib/dependency/TDependency.java +++ b/src/main/java/com/ilummc/tlib/dependency/TDependency.java @@ -40,20 +40,30 @@ public class TDependency { if (file.exists()) { TDependencyLoader.addToPath(Main.getInst(), file); return true; - } else if (downloadMaven(repo, arr[0], arr[1], arr[2], file, url)) { - TDependencyLoader.addToPath(Main.getInst(), file); - return true; - } else return false; + } else { + boolean downloadFinish = false; + try { + downloadFinish = downloadMaven(repo, arr[0], arr[1], arr[2], file, url); + } catch (Exception ignored) { + } + if (downloadFinish) { + TDependencyLoader.addToPath(Main.getInst(), file); + } + return downloadFinish; + } } return false; } private static boolean downloadMaven(String url, String groupId, String artifactId, String version, File target, String dl) { + if (Main.getInst().getConfig().getBoolean("OFFLINE-MODE")) { + TLib.getTLib().getLogger().warn("已启用离线模式, 将不会下载第三方依赖库"); + return false; + } ReentrantLock lock = new ReentrantLock(); AtomicBoolean failed = new AtomicBoolean(false); EagletTask task = new EagletTask() - .url(dl == null ? url + "/" + groupId.replace('.', '/') + "/" + - artifactId + "/" + version + "/" + artifactId + "-" + version + ".jar" : dl) + .url(dl == null ? url + "/" + groupId.replace('.', '/') + "/" + artifactId + "/" + version + "/" + artifactId + "-" + version + ".jar" : dl) .file(target) .setThreads(TLib.getTLib().getConfig().getDownloadPoolSize()) .setOnStart(event -> lock.lock()) diff --git a/src/main/java/com/ilummc/tlib/inject/DependencyInjector.java b/src/main/java/com/ilummc/tlib/inject/DependencyInjector.java index e3e71e3..dc98f4c 100644 --- a/src/main/java/com/ilummc/tlib/inject/DependencyInjector.java +++ b/src/main/java/com/ilummc/tlib/inject/DependencyInjector.java @@ -15,10 +15,10 @@ import java.lang.reflect.Field; public class DependencyInjector { public static void inject(Plugin plugin, Object o) { - injectLogger(plugin, o); - injectPluginInstance(plugin, o); - injectDependencies(plugin, o); - injectConfig(plugin, o); + injectLogger(plugin, o); + injectPluginInstance(plugin, o); + injectDependencies(plugin, o); + injectConfig(plugin, o); } static void injectOnEnable(Plugin plugin) { @@ -41,7 +41,7 @@ public class DependencyInjector { field.setAccessible(true); TConfigInjector.saveConfig(plugin, o); TLib.getTLib().getLogger().info("插件 " + plugin + " 的配置 " + config.name() + " 已保存"); - } catch (IOException e) { + } catch (Exception e) { TLib.getTLib().getLogger().warn("插件 " + plugin + " 的配置 " + config.name() + " 保存失败"); } } @@ -85,9 +85,9 @@ public class DependencyInjector { } private static void injectLogger(Plugin plugin, Object o) { - for (Field field : o.getClass().getDeclaredFields()) { - try { - Logger logger; + for (Field field : o.getClass().getDeclaredFields()) { + try { + Logger logger; if ((logger = field.getAnnotation(Logger.class)) != null) { field.getType().asSubclass(TLogger.class); TLogger tLogger = new TLogger(logger.value(), plugin, logger.level()); @@ -97,7 +97,7 @@ public class DependencyInjector { } } catch (Exception ignored) { } - } + } } private static void injectPluginInstance(Plugin plugin, Object o) { @@ -126,28 +126,33 @@ public class DependencyInjector { } private static void injectDependencies(Plugin plugin, Object o) { - Dependency[] dependencies = new Dependency[0]; - { + Dependency[] dependencies = new Dependency[0]; { Dependencies d = o.getClass().getAnnotation(Dependencies.class); - if (d != null) dependencies = d.value(); + if (d != null) { + dependencies = d.value(); + } Dependency d2 = o.getClass().getAnnotation(Dependency.class); - if (d2 != null) dependencies = new Dependency[]{d2}; + if (d2 != null) { + dependencies = new Dependency[]{d2}; + } } if (dependencies.length != 0) { TLib.getTLib().getLogger().info("正在加载 " + plugin.getName() + " 插件所需的依赖"); for (Dependency dependency : dependencies) { - if (dependency.type() == Dependency.Type.PLUGIN) - if (TDependency.requestPlugin(dependency.plugin())) + if (dependency.type() == Dependency.Type.PLUGIN) { + if (TDependency.requestPlugin(dependency.plugin())) { TLib.getTLib().getLogger().info(" " + plugin.getName() + " 请求的插件 " + dependency.plugin() + " 加载成功。"); - else + } else { TLib.getTLib().getLogger().warn(" " + plugin.getName() + " 请求的插件 " + dependency.plugin() + " 加载失败。"); - if (dependency.type() == Dependency.Type.LIBRARY) - if (TDependency.requestLib(dependency.maven(), dependency.mavenRepo(), dependency.url())) - TLib.getTLib().getLogger().info(" " + plugin.getName() + " 请求的库文件 " + String.join(":", - dependency.maven()) + " 加载成功。"); - else - TLib.getTLib().getLogger().warn(" " + plugin.getName() + " 请求的库文件 " + String.join(":", - dependency.maven()) + " 加载失败。"); + } + } + if (dependency.type() == Dependency.Type.LIBRARY) { + if (TDependency.requestLib(dependency.maven(), dependency.mavenRepo(), dependency.url())) { + TLib.getTLib().getLogger().info(" " + plugin.getName() + " 请求的库文件 " + String.join(":", dependency.maven()) + " 加载成功。"); + } else { + TLib.getTLib().getLogger().warn(" " + plugin.getName() + " 请求的库文件 " + String.join(":", dependency.maven()) + " 加载失败。"); + } + } } TLib.getTLib().getLogger().info("依赖加载完成"); } diff --git a/src/main/java/com/ilummc/tlib/inject/TConfigInjector.java b/src/main/java/com/ilummc/tlib/inject/TConfigInjector.java index f599646..4d1c0e0 100644 --- a/src/main/java/com/ilummc/tlib/inject/TConfigInjector.java +++ b/src/main/java/com/ilummc/tlib/inject/TConfigInjector.java @@ -89,7 +89,7 @@ public class TConfigInjector { Files.write(arr, target); } - private static final List primitiveType = Lists.newArrayList(Integer.class, + private static final List> primitiveType = Lists.newArrayList(Integer.class, Double.class, Float.class, Boolean.class, Short.class, Byte.class, Character.class, Long.class, String.class); private static class Serializer { @@ -118,13 +118,13 @@ public class TConfigInjector { return map; } - @SuppressWarnings({"unchecked"}) + @SuppressWarnings({"unchecked", "rawtypes"}) private Object serialize(Object o) { try { if (o.getClass().isPrimitive() || primitiveType.contains(o.getClass())) { return o; } else if (o.getClass().isArray()) { - List list = new ArrayList(); + List list = new ArrayList<>(); int len = (int) o.getClass().getField("length").get(o); for (int i = 0; i < len; i++) { list.add(serialize(Array.get(o, i))); @@ -133,11 +133,11 @@ public class TConfigInjector { } else if (o instanceof Collection) { return ((Collection) o).stream().map(this::serialize).collect(Collectors.toList()); } else if (o instanceof Map) { - Map map = new LinkedHashMap<>(); + Map map = new LinkedHashMap<>(); ((Map) o).forEach((o1, o2) -> map.put((String) o1, serialize(o2))); return map; } else if (o instanceof ConfigurationSerializable) { - Map map = new LinkedHashMap(); + Map map = new LinkedHashMap<>(); map.put(ConfigurationSerialization.SERIALIZED_TYPE_KEY, ConfigurationSerialization.getAlias((Class) o.getClass())); map.putAll(((ConfigurationSerializable) o).serialize()); diff --git a/src/main/java/com/ilummc/tlib/util/TLogger.java b/src/main/java/com/ilummc/tlib/util/TLogger.java index e2f7bcb..325e430 100644 --- a/src/main/java/com/ilummc/tlib/util/TLogger.java +++ b/src/main/java/com/ilummc/tlib/util/TLogger.java @@ -47,17 +47,17 @@ public class TLogger { public void warn(String msg) { if (level <= WARN) - Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), "§6警告", msg)); + Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), "§6警告", "§6" + msg)); } public void error(String msg) { if (level <= ERROR) - Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), "§c错误", msg)); + Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), "§c错误", "§c" + msg)); } public void fatal(String msg) { if (level <= FATAL) - Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), "§4致命错误", msg)); + Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), "§4致命错误", "§4" + msg)); } } diff --git a/src/main/java/me/skymc/taboolib/Main.java b/src/main/java/me/skymc/taboolib/Main.java index f1733da..7cf75c6 100644 --- a/src/main/java/me/skymc/taboolib/Main.java +++ b/src/main/java/me/skymc/taboolib/Main.java @@ -64,8 +64,6 @@ public class Main extends JavaPlugin implements Listener { @Getter private static File serverDataFolder; @Getter - private static File docsFolder; - @Getter private static StorageType storageType; @Getter private static boolean disable = false; @@ -105,14 +103,12 @@ public class Main extends JavaPlugin implements Listener { @Override public void onLoad() { inst = this; disable = false; - - TLib.init(); - - // 启动监控 - new Metrics(this); - // 载入配置 saveDefaultConfig(); + + // 加载依赖 + TLib.init(); + // 载入目录 setupDataFolder(); // 注册配置 @@ -218,6 +214,8 @@ public class Main extends JavaPlugin implements Listener { // 更新检测 new UpdateTask(); + // 启动监控 + new Metrics(this); // 启动 started = true; @@ -286,16 +284,10 @@ public class Main extends JavaPlugin implements Listener { if (!playerDataFolder.exists()) { playerDataFolder.mkdirs(); } - serverDataFolder = new File(getConfig().getString("DATAURL.SERVER-DATA")); if (!serverDataFolder.exists()) { serverDataFolder.mkdirs(); } - - docsFolder = new File(getDataFolder(), "Document"); - if (!docsFolder.exists()) { - docsFolder.mkdirs(); - } } private void registerListener() { diff --git a/src/main/java/me/skymc/taboolib/inventory/ItemUtils.java b/src/main/java/me/skymc/taboolib/inventory/ItemUtils.java index 299884f..5f4420b 100644 --- a/src/main/java/me/skymc/taboolib/inventory/ItemUtils.java +++ b/src/main/java/me/skymc/taboolib/inventory/ItemUtils.java @@ -76,9 +76,13 @@ public class ItemUtils { } public static void LoadLib() { - itemdir = YamlConfiguration.loadConfiguration(new File(Main.getInst().getConfig().getString("DATAURL.ITEMDIR"))); - reloadItemName(); - reloadItemCache(); + try { + reloadItemName(); + reloadItemCache(); + itemdir = YamlConfiguration.loadConfiguration(new File(Main.getInst().getConfig().getString("DATAURL.ITEMDIR"))); + } catch (Exception e) { + MsgUtils.warn("物品库载入失败: &4" + e.getMessage()); + } } public static void loadItemsFile(File file, boolean finalFile) { @@ -135,7 +139,6 @@ public class ItemUtils { return item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : itemlib.get(item.getType() + ":" + data) == null ? item.getType().toString() : itemlib.get(item.getType() + ":" + data); } - @SuppressWarnings("deprecation") public static ItemStack getItemFromDir(String name) { if (itemdir != null) { return itemdir.getItemStack("item." + name); diff --git a/src/main/java/me/skymc/taboolib/string/language2/Language2Format.java b/src/main/java/me/skymc/taboolib/string/language2/Language2Format.java index b5bd00d..ccb1dff 100644 --- a/src/main/java/me/skymc/taboolib/string/language2/Language2Format.java +++ b/src/main/java/me/skymc/taboolib/string/language2/Language2Format.java @@ -2,6 +2,8 @@ package me.skymc.taboolib.string.language2; import lombok.Getter; import me.skymc.taboolib.string.language2.value.*; + +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -100,40 +102,41 @@ public class Language2Format implements Language2Line { private void parseValue(Player player, List list, Language2Type type) { if (list.size() == 0) { return; - } + } // 变量转换 - list = language2Value.setPlaceholder(list, player); + List listPlaceholder = language2Value.setPlaceholder(list, player); // 大标题 switch (type) { case TITLE: - language2Lines.add(new Language2Title(this, list)); + language2Lines.add(new Language2Title(this, listPlaceholder)); break; // 小标题 case ACTION: - language2Lines.add(new Language2Action(this, list)); + language2Lines.add(new Language2Action(this, listPlaceholder)); break; // JSON case JSON: - language2Lines.add(new Language2Json(this, list, player)); + language2Lines.add(new Language2Json(this, listPlaceholder, player)); break; // JSON2 case JSON2: - language2Lines.add(new Language2Json2(this, list, player)); + language2Lines.add(new Language2Json2(this, listPlaceholder, player)); break; // 音效 case SOUND: - language2Lines.add(new Language2Sound(this, list)); + language2Lines.add(new Language2Sound(this, listPlaceholder)); break; // 书本 case BOOK: - language2Lines.add(new Language2Book(this, list, player)); + language2Lines.add(new Language2Book(this, listPlaceholder, player)); break; default: - language2Lines.add(new Language2Text(this, list)); + language2Lines.add(new Language2Text(this, listPlaceholder)); break; } // 清理数据 list.clear(); + listPlaceholder.clear(); } @Override diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e819d77..eff92f7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -17,6 +17,10 @@ DATAURL: # 启用后将收到来自其他插件的调试信息 DEBUG: false +# 是否启用离线模式 +# 离线模式下将不会下载依赖 +OFFLINE-MODE: false + # 是否启用更新检测 UPDATE-CHECK: true