2016-08-06 46 views
0

Ich habe ein interessantes Problem, wo ich ein bestimmtes Bukkit-Plugin aktivieren möchte, bevor andere Plugins aktiviert werden. Dies hat sich als schwierige Aufgabe erwiesen. Ich kann die plugin.yml Abhängigkeitsoptionen nicht verwenden, da diese davon ausgehen, dass ich weiß, welche Plugins auf einem bestimmten Server installiert sind. Es ist mir egal, ob es nicht zuerst lädt, aber ich brauche es zuerst zu aktivieren.Wie kann man zuerst ein Bukkit-Plugin aktivieren?

Ich habe verschiedene Methoden versucht, dies zu tun, aber ohne Glück:

Versuch 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(); 
    } 

} 

Lassen Sie mich zu erklären. Das Statische scheint vor den meisten Dingen zu laufen, einschließlich Plug-in-Aufladungen. Das bedeutet, dass ich auch definieren muss, wann es geladen wird. Dies ist normalerweise kein Problem, außer nicht statische API wie getDataFolder() für den Pfad der Datei funktioniert nicht.

Also wenn ich meine Pfade nicht falsch mache, habe ich keine Ahnung, warum dies eine Ausnahme auslöst.

HINWEIS: Ja, ich habe mehrere verschiedene Pfade wie "plugins/Debugger" oder "Debugger.jar" und ECT ausprobiert.

Methode 2:

public void onLoad(){ 
     Bukkit.getPluginManager().enablePlugin(plugin); 
     console.info("[Debugger] loaded first!"); 
    } 

Dies schien zu gut, um wahr zu sein und diese Methode tatsächlich schien mich näher zu kommen, mein Problem zu lösen. Diese Methode wird immer dann aufgerufen, wenn das Plugin geladen wird. Durch Aktivieren des Plugins innerhalb der onLoad-Methode wurde das Plug-In zuerst aktiviert. Aber es gab Probleme beim Laden:

[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] 

Irgendwie trotz des seltsamen null initializing Debugger (Debugger ist der Test-Plugin Namen) das Plugin noch zuerst zu ermöglichen, verwaltet?

So ist die Linie es sich bezieht ist Bukkit.getPluginManager().enablePlugin(plugin);

einige Online-Forschung tun Ich habe bemerkt, bestimmte API wie getServer() nicht innerhalb dieser Methode funktionierte, und ich glaube, dass vielleicht bedeutet dies, dass Bukkit oder PluginManager noch nicht existieren.

Wenn das der Fall ist, gibt es einen Workaround?

Das gesagt, ich bin bereit, Verbesserungen an meinen aktuellen Versuchen zu nehmen oder sogar neue zu versuchen, was auch immer die Arbeit erledigt. Bitte frage nicht "Warum musst du das Plugin zuerst aktivieren?" Ich sollte erwähnen, dass diese Version von Bukkit am 1.10 ist.

Jeder hilfreiche Rat würde sehr geschätzt werden.

Antwort

0

So jetzt fühle ich mich wirklich dumm. Es stellte sich heraus, alles, was ich tun musste, war meine plugin Variable nicht-statische und definieren Sie es. Alle, die Probleme nur zu ändern public static Debugger plugin;-public Debugger plugin = this;

Diese Änderung mit Methode funktioniert 2.

Well. Ich hoffe, dass das jemandem zugute kommt, wie man zuerst ein Plugin aktivieren kann.