我正在为我的 Minecraft 服务器试验 spigot 插件。在尝试创建自定义命令(例如,heal & feed)的过程中,我在主 java 文件 (MyFirstPlugin.java) 的 ide 控制台中收到以下错误:
Method invocation 'setExecutor' may produce 'NullPointerException':14
Method invocation 'setExecutor' may produce 'NullPointerException':15
完整的 MyFirstPlugin.java
文件:
package me.nathan.myfirstplugin;
import me.nathan.myfirstplugin.commands.PluginCommands;
import me.nathan.myfirstplugin.events.PluginEvents;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;
public final class MyFirstPlugin extends JavaPlugin {
@Override
public void onEnable() {
PluginCommands commands = new PluginCommands();
getServer().getPluginManager().registerEvents(new PluginEvents(), this);
getCommand("heal").setExecutor(commands);
getCommand("feed").setExecutor(commands);
getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[MyFirstPlugin]: Plugin is enabled!");
}
@Override
public void onDisable() {
// Plugin shutdown logic
getServer().getConsoleSender().sendMessage(ChatColor.RED + "[MyFirstPlugin]: Plugin is disabled!");
}
}
命令类(PluginCommands.java)的这个错误:
Method invocation 'getDefaultValue' may produce 'NullPointerException':21
完整的 PluginCommands.java
文件:
package me.nathan.myfirstplugin.commands;
import org.bukkit.ChatColor;
import org.bukkit.attribute.Attribute;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class PluginCommands implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("Only players can use that command!");
return true;
}
Player player = (Player) sender;
if (cmd.getName().equalsIgnoreCase("heal")){
double maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getDefaultValue();
player.setHealth(maxHealth);
sender.sendMessage(ChatColor.GREEN + "You have been healed!");
}
if (cmd.getName().equalsIgnoreCase("feed")){
player.setFoodLevel(20);
sender.sendMessage(ChatColor.GREEN + "You have been fed!");
}
return true;
}
}
当我启动服务器并加载插件时,在命令提示符中出现以下错误:
[23:13:20] [Server thread/ERROR]: Error occurred while enabling MyFirstPlugin v1.0-SNAPSHOT (Is it up to date?)
java.lang.NullPointerException: Cannot invoke "org.bukkit.command.PluginCommand.setExecutor(org.bukkit.command.CommandExecutor)" because the return value of "me.nathan.myfirstplugin.MyFirstPlugin.getCommand(String)" is null
at me.nathan.myfirstplugin.MyFirstPlugin.onEnable(MyFirstPlugin.java:14) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at org.bukkit.craftbukkit.v1_17_R1.CraftServer.enablePlugin(CraftServer.java:505) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at org.bukkit.craftbukkit.v1_17_R1.CraftServer.enablePlugins(CraftServer.java:419) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at net.minecraft.server.MinecraftServer.loadWorld(MinecraftServer.java:604) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at net.minecraft.server.dedicated.DedicatedServer.init(DedicatedServer.java:266) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:995) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:303) ~[spigot-1.17.1.jar:3205-Spigot-18c71bf-6788550]
at java.lang.Thread.run(Thread.java:831) [?:?]
[23:13:20] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
[23:13:20] [Server thread/INFO]: Done (24.130s)! For help, type "help"
我觉得我已经用我对这个主题的有限知识尝试了一切来解决这个问题,但如果有人能提供帮助,我将不胜感激:)