0

我最近开始制作 Minecraft 插件,但出现了一些错误,例如在此链接https://paste.ubuntu.com/p/yHs2pQWf8t/

主要的

package org.devoflua.hello;

import org.bukkit.plugin.java.JavaPlugin;
import org.devoflua.hello.commands.HelloCommand;

public class Main extends JavaPlugin {

    @Override
    public void onEnable() {
        System.out.print("Okie");
        new HelloCommand(this);
    }
}

命令

package org.devoflua.hello.commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.devoflua.hello.Main;

public class HelloCommand implements CommandExecutor {

    @SuppressWarnings("unused")
    private Main plugin;

    public HelloCommand(Main plugin) {
        this.plugin = plugin;
        plugin.getCommand("hello").setExecutor(this);
    }

    @Override
    public boolean onCommand(CommandSender Sender, Command Command, String label, String[] arg) {

        if (!(Sender instanceof Player)) {
            Sender.sendMessage("Only senders can use this command");
            return true;
        }

        Player p = (Player) Sender;

        if (p.hasPermission("hello.use")) {
            p.sendMessage("hi");
            return true;
        } else {
            p.sendMessage("You do not have permission to send this message");
        }

        return false;
    }
}

我相信该错误来自第 16 行的命令类。我在互联网上搜索,但我发现没有任何东西可以帮助我解决这个问题。

4

2 回答 2

1

因此,您必须在这里解决一些问题,因为这不会很好地工作。

首先,您必须使用它setExecutor()而不是创建它的新实例。这可以通过将其添加到您的onEnable()

this.getCommand("mycommand").setExecutor(new CommandKit());

您还必须在您plugin.yml的文件中指定此命令,这里有一些关于它的文档: https ://www.spigotmc.org/wiki/plugin-yml/

然后你可以删除你的'HelloCommand()',你将不再需要它,因为你在上面所做的更改。

有了这个你的错误应该消失,如果你仍然有一些错误出现,请告诉我。

于 2019-07-11T15:55:39.797 回答
0

NullPointerException 意味着在您的代码的某个时刻,一个对象或其他任何东西都是“空的”。让我为您的主类和命令类提供一个良好的结构。

主类:

package org.devoflua.hello;

import org.bukkit.plugin.java.JavaPlugin;
import org.devoflua.hello.commands.HelloCommand;

public class Main extends JavaPlugin {

public void onEnable() {
    System.out.println("Plugin Enabled");
    getCommand("hello").setExecutor(new HelloCommand();
    }

    public void onDisable() {
        System.out.println("Plugin Disabled");
    }
}

命令执行器类:

package org.devoflua.hello.commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.devoflua.hello.Main;

public class HelloCommand implements CommandExecutor{

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (sender instanceof Player) {
        Player p = (Player) sender;
        if (p.hasPermission("hello.use")) {
            p.sendMessage("hi");
        } else {
            p.sendMessage("You do not have permission to send this message");
        }
    } else {
        sender.sendMessage("Only senders can use this command");
    }
    return true;
}
于 2019-07-16T07:37:17.203 回答