У меня есть интересная проблема, когда я хочу включить конкретный плагин Bukkit, прежде чем все другие плагины будут включены. Это оказалось трудной задачей. Я не могу использовать параметры зависимостей plugin.yml
, потому что они предполагают, что я знаю, какие плагины установлены на любом данном сервере. Меня не волнует, если он не загружается первым, но мне сначала нужно его включить.Как включить плагин bukkit?
Я попробовал несколько способов достижения этого, но не повезло:
Попытка 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.
Метод 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
(Debugger является плагином именем тест) плагин все-таки удалось включить в первую очередь?
Так линия это имеет в виду Bukkit.getPluginManager().enablePlugin(plugin);
Выполнение некоторых исследований в Интернете я заметил определенный API, как getServer()
не работал в течение этого метода, и я считаю, что, возможно, это означает, что Bukkit
или PluginManager
еще не может существовать.
Если это так, то есть ли обходной путь к этому?
Это говорит о том, что я желаю улучшить мои текущие попытки или даже попробовать новые, независимо от того, что будет сделано. Пожалуйста, не спрашивайте: «Зачем вам сначала включать плагин?» Я должен упомянуть, что эта версия bukkit находится на 1.10.
Любой ПОЛЕЗНЫЙ совет был бы очень признателен.