更改依赖加载为 onLoad 前加载

//TODO 在插件启动之前加载依赖
This commit is contained in:
Izzel_Aliz
2018-04-13 13:38:54 +08:00
parent 4e7fc42167
commit b941cac63f
5 changed files with 266 additions and 250 deletions

View File

@@ -45,22 +45,27 @@ public class TLib {
return tLib;
}
public static void init() {
new File(Main.getInst().getDataFolder(), "/libs").mkdirs();
tLib = new TLib();
DependencyInjector.inject(Main.getInst(), tLib);
public static void injectPluginManager() {
// 注入 PluginLoader 用于加载依赖
try {
Field field = Bukkit.getServer().getClass().getDeclaredField("pluginManager");
field.setAccessible(true);
field.set(Bukkit.getServer(), new TLibPluginManager());
tLib.getLogger().info("注入成功");
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
tLib.getLogger().fatal("注入失败");
}
}
public static void init() {
new File(Main.getInst().getDataFolder(), "/libs").mkdirs();
tLib = new TLib();
DependencyInjector.inject(Main.getInst(), tLib);
if (Bukkit.getPluginManager() instanceof TLibPluginManager)
tLib.getLogger().info("注入成功");
else
tLib.getLogger().fatal("注入失败");
}
public static void unload() {
tLib.getConfigWatcher().unregisterAll();
DependencyInjector.eject(Main.getInst(), tLib);

View File

@@ -43,7 +43,7 @@ public class DependencyInjector {
public static void eject(Plugin plugin, Object o) {
try {
ejectConfig(plugin, o);
} catch (NoClassDefFoundError ignored) {
} catch (Throwable ignored) {
}
}

View File

@@ -49,7 +49,9 @@ public class TLibPluginManager implements PluginManager {
@Override
public Plugin loadPlugin(File file) throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException {
return instance.loadPlugin(file);
Plugin plugin = instance.loadPlugin(file);
DependencyInjector.injectOnEnable(plugin);
return plugin;
}
@Override
@@ -92,7 +94,6 @@ public class TLibPluginManager implements PluginManager {
@Override
public void enablePlugin(Plugin plugin) {
DependencyInjector.injectOnEnable(plugin);
instance.enablePlugin(plugin);
}