我有一个有趣的问题,我希望在启用任何其他插件之前首先启用特定的Bukkit插件。这已被证明是一项艰巨的任务。我无法使用plugin.yml
依赖选项,因为这些选项假设我知道在任何给定服务器上安装了哪些插件。我不在乎它是否先没有加载,但我确实需要它先启用。
我已经尝试了几种方法来实现这一点,但没有运气:
尝试1:
static{
try {
Bukkit.getPluginManager().loadPlugin(plug);
Bukkit.getPluginManager().enablePlugin(plugin);
} catch (UnknownDependencyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidPluginException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidDescriptionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
请允许我解释一下。静态似乎在大多数事情之前运行,包括插件加载。这意味着我还必须定义它何时加载。这通常不会成为问题,除非getDataFolder()
这样的非静态API对于文件路径不起作用。
public static File plug = new File("/plugins/Debugger");
因此,除非我错误地使用Paths,否则我不知道为什么会抛出异常。
注意:是的,我尝试了多种不同的路径,例如"plugins/Debugger"
或" Debugger.jar"和ECT。
方法2:
public void onLoad(){
Bukkit.getPluginManager().enablePlugin(plugin);
console.info("[Debugger] loaded first!");
}
这看起来好得令人难以置信,这种方法实际上似乎让我更接近于解决我的问题。每当插件加载时都会调用此方法,因此通过在onLoad
方法中启用插件,它实际上会导致插件首先启用;但加载时出现问题:
[00:15:08] [Server thread/ERROR]: null initializing Debugger v1.0.0 (Is it up to date?)
java.lang.NullPointerException
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:396) ~[craftbukkit.jar:git-Bukkit-0ebb9c7]
at me.doublehelix457.Debugger.Debugger.onLoad(Debugger.java:20) ~[?:?]
at org.bukkit.craftbukkit.v1_10_R1.CraftServer.loadPlugins(CraftServer.java:299) [craftbukkit.jar:git-Bukkit-0ebb9c7]
at org.bukkit.craftbukkit.v1_10_R1.CraftServer.reload(CraftServer.java:723) [craftbukkit.jar:git-Bukkit-0ebb9c7]
at org.bukkit.Bukkit.reload(Bukkit.java:548) [craftbukkit.jar:git-Bukkit-0ebb9c7]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [craftbukkit.jar:git-Bukkit-0ebb9c7]
尽管奇怪的null initializing Debugger
(调试器是测试插件名称),插件仍然设法首先启用?
所以它引用的行是Bukkit.getPluginManager().enablePlugin(plugin);
在线进行一些研究我注意到getServer()
之类的某些API在该方法中无效,我相信这可能意味着Bukkit
或PluginManager
可能尚不存在。
如果是这样,那么有解决方法吗?
那就是说,我愿意改进我目前的尝试,甚至尝试新的尝试,无论做什么工作。请不要问"为什么需要先启用插件?"我应该提一下,这个版本的bukkit是在1.10。
非常感谢任何有用的建议。
答案 0 :(得分:0)
所以现在我感到非常愚蠢。事实证明我所要做的就是做我的
plugin
变量非静态并定义它。所有麻烦只是为了改变
public static Debugger plugin;
至public Debugger plugin = this;
此更改适用于方法2。
好。我希望这有利于某人如何首先启用插件。