在 main class 中注册新命令时出现 NullPointerException

NullPointerException when registering a new command in main class

我想在我目前正在开发的 minecraft 插件中创建一个新命令。 它应该给玩家一个项目。我在主 class 和 plugin.yml 中注册了命令,但是当服务器加载插件时,它总是抛出 NullPointerException。

我非常感谢任何帮助

谢谢!

这是我的主要内容 class:


package dungeonsremake.dungeonsremake;

import dungeonsremake.dungeonsremake.commands.GiveCustomItem;
import org.bukkit.plugin.java.JavaPlugin;

public final class Main extends JavaPlugin {

    @Override
    public void onEnable() {
    
            this.getCommand("item").setExecutor(new GiveCustomItem());
    
    }
    
    @Override
    public void onDisable() {
        getLogger().info("Shutting down Plugin");
    }

}

这是我的命令 class:


package dungeonsremake.dungeonsremake.commands;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

public class GiveCustomItem implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        System.out.println("activated");
        if(!(sender instanceof Player)) {
            return true;
        }
        Player player = (Player) sender;
    
        if(command.getName().equalsIgnoreCase("item")) {
            ItemStack fot = new ItemStack(Material.LEGACY_RED_ROSE);
            fot.setAmount(1);
            player.getInventory().addItem(fot);
            return true;
        }
    
        return true;
    
    }

}

这是我的 plugin.yml:

name: DungeonsRemake
main: dungeonsremake.dungeonsremake.Main
version: 1.0

commands:
item:
usage: /<command>
description: gives the player a custom item.
aliases: [giveitem, item, customitem, ci, gci]

错误信息:

    java.lang.NullPointerException: Cannot invoke "org.bukkit.command.PluginCommand.setExecutor(org.bukkit.command.CommandExecutor)" because the return value of "dungeonsremake.dungeonsremake.Main.getCommand(String)" is null
    at dungeonsremake.dungeonsremake.Main.onEnable(Main.java:15) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.craftbukkit.v1_18_R2.CraftServer.enablePlugin(CraftServer.java:517) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at org.bukkit.craftbukkit.v1_18_R2.CraftServer.enablePlugins(CraftServer.java:431) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:612) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:414) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at net.minecraft.server.dedicated.DedicatedServer.e(DedicatedServer.java:263) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1007) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at net.minecraft.server.MinecraftServer.lambda[=14=](MinecraftServer.java:304) ~[spigot-1.18.2-R0.1-SNAPSHOT.jar:3465-Spigot-ffceeae-3ec79a2]
    at java.lang.Thread.run(Thread.java:833) [?:?]

根据 documentation:

Commands need to be registered in the PluginDescriptionFile to exist at runtime.

它找不到您的 item 命令的原因是 yaml 中的缩进很重要。如果您的 IDE 没有 built-in 解析器,您可以使用像 this 这样的在线解析器来查看问题。

commands:
  item:
   usage: /<command>
   description: gives the player a custom item.
   aliases: [giveitem, item, customitem, ci, gci]

这应该是正确的缩进。