[英]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();
}
}
请允许我解释一下。 静态函数似乎先于大多数东西运行,包括插件加载。 这意味着我还必须定义何时加载。 这通常不会有问题,除非文件Path的非静态API(如getDataFolder()
不起作用。
public static File plug = new File("/plugins/Debugger");
因此,除非我的路径错误,否则我不知道为什么会引发异常。
注意:是的,我尝试了多个不同的路径,例如"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
奇怪的null initializing Debugger
(Debugger是测试插件名称),但插件仍然设法首先启用?
因此它所指的行是Bukkit.getPluginManager().enablePlugin(plugin);
在线进行一些研究时,我注意到诸如getServer()
类的某些API在该方法中无法正常工作,我相信这可能意味着Bukkit
或PluginManager
可能还不存在。
如果是这样,那么是否有解决方法?
就是说,无论完成什么工作,我都愿意对我目前的尝试进行改进,甚至尝试新的尝试。 请不要问“为什么首先需要启用插件?” 我应该提到这个版本的bukkit在1.10上。
任何有益的建议将不胜感激。
所以现在我真的很傻。 原来我要做的就是让我的plugin
变量为非静态变量并对其进行定义。 所有这些麻烦只是为了更改public static Debugger plugin;
给public Debugger plugin = this;
此更改适用于方法2。
好。 我希望这对某人有益,他们可以先启用插件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.