2016-08-06 4 views
0

У меня есть интересная проблема, когда я хочу включить конкретный плагин 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.

Любой ПОЛЕЗНЫЙ совет был бы очень признателен.

ответ

0

Так что теперь я чувствую себя действительно глупо. Оказывается, все, что мне нужно было сделать, это сделать переменную нестатической переменной plugin и определить ее. Все, что неприятности только изменить public static Debugger plugin; к public Debugger plugin = this;

Это изменение работы с методом 2.

Ну. Я надеюсь, что это поможет кому-то в том, как они могут включить плагин в первую очередь.

Смежные вопросы