#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, если не найдет плагин. Но как вы можете этого избежать ?
- Проверьте, существует ли/включен ли плагин. Это лучше, когда у вас много плагинов, и вы уверены, что ваш плагин не запускается ДО включения другого плагина (т. Е. при запуске).
PluginManager pm = Bukkit.getPluginManager(); if(pm.isPluginEnabled("BlockProt")) { pm.disablePlugin(pm.getPlugin("BlockProt")); }
- Попробуйте отключить его, но остановитесь, если плагин не может быть найден. Это будет больше похоже на ваш реальный код.
Plugin pl = Bukkit.getPluginManager().getPlugin("BlockProt"); if(pl != null) { Bukkit.getPluginManager().disablePlugin(pl); }
Не забудьте указать softdepend
имя плагина, которым вы управляете (здесь «BlockProt»), а также убедитесь, что это хорошее имя и плагин хорошо работает на вашем сервере.