如何首先启用bukkit插件?

时间:2016-08-06 06:39:54

标签: java plugins bukkit

我有一个有趣的问题,我希望在启用任何其他插件之前首先启用特定的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在该方法中无效,我相信这可能意味着BukkitPluginManager可能尚不存在。

如果是这样,那么有解决方法吗?

那就是说,我愿意改进我目前的尝试,甚至尝试新的尝试,无论做什么工作。请不要问"为什么需要先启用插件?"我应该提一下,这个版本的bukkit是在1.10。

非常感谢任何有用的建议。

1 个答案:

答案 0 :(得分:0)

所以现在我感到非常愚蠢。事实证明我所要做的就是做我的 plugin变量非静态并定义它。所有麻烦只是为了改变 public static Debugger plugin;public Debugger plugin = this;

此更改适用于方法2。

好。我希望这有利于某人如何首先启用插件。