Используя плагин bukkit для отключения другого плагина, вы получаете сообщение об ошибке «»плагин» равен нулю»

#java #bukkit

#Ява #буккит

Вопрос:

Я закодировал плагин Minecraft Bukkit и работаю над созданием другого, который может отключить первый по команде. У меня есть это в моем коде:

 Plugin blockProt = Bukkit.getPluginManager().getPlugin("BlockProt");  Bukkit.getPluginManager().disablePlugin(blockProt);  

Но когда я запускаю команду, я получаю эту ошибку в терминале:

 [11:19:36 WARN]: Unexpected exception while parsing console command "play skedwars_eight_one" org.bukkit.command.CommandException: Unhandled exception executing command 'play' in plugin Ultra_Skedwars v1.0-SNAPSHOT  at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched.jar:git-PaperSpigot-"4c7641d"]  at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:146) ~[patched.jar:git-PaperSpigot-"4c7641d"]  at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:666) ~[patched.jar:git-PaperSpigot-"4c7641d"]  at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:629) [patched.jar:git-PaperSpigot-"4c7641d"]  at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:416) [patched.jar:git-PaperSpigot-"4c7641d"]  at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:379) [patched.jar:git-PaperSpigot-"4c7641d"]  at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:713) [patched.jar:git-PaperSpigot-"4c7641d"]  at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:616) [patched.jar:git-PaperSpigot-"4c7641d"]  at java.base/java.lang.Thread.run(Thread.java:831) [?:?]  Caused by: java.lang.NullPointerException: Cannot invoke "org.bukkit.plugin.Plugin.isEnabled()" because "plugin" is null  at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:425) ~[patched.jar:git-PaperSpigot-"4c7641d"]  at me.creodo.ultraskedwars.Executor.onCommand(Executor.java:40) ~[?:?]  at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched.jar:git-PaperSpigot-"4c7641d"]  ... 8 more  

Любая помощь, совет или вклад будут высоко оценены!

Ответ №1:

Bukkit.getPluginManager().getPlugin() Метод попытается найти плагин, который в вашем случае имеет название «BlockProt».

Он может вернуть значение null, если не найдет плагин. Но как вы можете этого избежать ?

  1. Проверьте, существует ли/включен ли плагин. Это лучше, когда у вас много плагинов, и вы уверены, что ваш плагин не запускается ДО включения другого плагина (т. Е. при запуске).
 PluginManager pm = Bukkit.getPluginManager(); if(pm.isPluginEnabled("BlockProt")) {  pm.disablePlugin(pm.getPlugin("BlockProt")); }  
  1. Попробуйте отключить его, но остановитесь, если плагин не может быть найден. Это будет больше похоже на ваш реальный код.
 Plugin pl = Bukkit.getPluginManager().getPlugin("BlockProt"); if(pl != null) {  Bukkit.getPluginManager().disablePlugin(pl); }  

Не забудьте указать softdepend имя плагина, которым вы управляете (здесь «BlockProt»), а также убедитесь, что это хорошее имя и плагин хорошо работает на вашем сервере.