Minecraft插件错误java.lang.NullPointerException:null

时间:2019-07-10 04:09:54

标签: minecraft bukkit

我最近开始制作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行的命令类。 我在互联网上进行搜索,但发现没有什么可以帮助我解决此问题的。

2 个答案:

答案 0 :(得分:0)

因此,您必须在此修复一些问题,因为它无法正常工作。

首先,您必须使用setExecutor()而不是为其创建新实例。 可以通过将其添加到您的onEnable()中来完成:

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

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

然后,您可以删除自己的“ HelloCommand()”,通过上面的更改,您将不再需要它。

有了这个,您的错误就会消失,如果您仍然遇到一些错误,请告诉我。

答案 1 :(得分:0)

NullPointerException表示在代码的某个点上,对象或其他任何东西均为“ null”。让我为您的主类和命令类提供一个良好的结构。

主要类别:

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");
    }
}

CommandExecutor类:

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;
}