如何先启用 bukkit 插件?
How to enable a bukkit plugin first?
我有一个有趣的问题,我想在启用任何其他插件之前先启用特定的 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();
}
}
请允许我解释一下。静态似乎 运行 在大多数事情之前,包括插件加载。这意味着我还必须定义它何时加载。这通常不会有问题,除非非静态 API 像 getDataFolder()
对于文件路径不起作用。
public static File plug = new File("/plugins/Debugger");
所以除非我做错了我的路径,否则我不知道为什么会抛出异常。
注意:是的,我尝试了多种不同的路径,例如 "plugins/Debugger"
或 "Debugger.jar" 和 ECT。
方法二:
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
(Debugger 是测试插件名称)插件仍然设法首先启用?
所以它所指的行是 Bukkit.getPluginManager().enablePlugin(plugin);
在网上做了一些研究,我注意到某些 API,比如 getServer()
在该方法中不起作用,我相信这可能意味着 Bukkit
或 PluginManager
可能不会还存在。
如果是这种情况,是否有解决方法?
就是说,我愿意改进我目前的尝试,甚至尝试新的尝试,只要能完成工作。请不要问"Why do you need to enable the plugin first?"我应该提到这个版本的bukkit是在1.10上。
任何有用的建议将不胜感激。
所以现在我觉得真的很傻。结果我所要做的就是让我的
plugin
非静态变量并定义它。所有的麻烦只是为了改变
public static Debugger plugin;
至 public Debugger plugin = this;
此更改适用于方法 2。
嗯。我希望这对如何首先启用插件的人有所帮助。
我有一个有趣的问题,我想在启用任何其他插件之前先启用特定的 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();
}
}
请允许我解释一下。静态似乎 运行 在大多数事情之前,包括插件加载。这意味着我还必须定义它何时加载。这通常不会有问题,除非非静态 API 像 getDataFolder()
对于文件路径不起作用。
public static File plug = new File("/plugins/Debugger");
所以除非我做错了我的路径,否则我不知道为什么会抛出异常。
注意:是的,我尝试了多种不同的路径,例如 "plugins/Debugger"
或 "Debugger.jar" 和 ECT。
方法二:
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
(Debugger 是测试插件名称)插件仍然设法首先启用?
所以它所指的行是 Bukkit.getPluginManager().enablePlugin(plugin);
在网上做了一些研究,我注意到某些 API,比如 getServer()
在该方法中不起作用,我相信这可能意味着 Bukkit
或 PluginManager
可能不会还存在。
如果是这种情况,是否有解决方法?
就是说,我愿意改进我目前的尝试,甚至尝试新的尝试,只要能完成工作。请不要问"Why do you need to enable the plugin first?"我应该提到这个版本的bukkit是在1.10上。
任何有用的建议将不胜感激。
所以现在我觉得真的很傻。结果我所要做的就是让我的
plugin
非静态变量并定义它。所有的麻烦只是为了改变
public static Debugger plugin;
至 public Debugger plugin = this;
此更改适用于方法 2。
嗯。我希望这对如何首先启用插件的人有所帮助。