Ошибка плагина Minecraft java.lang.NullPointerException: null - PullRequest
0 голосов
/ 10 июля 2019

Я недавно начал создавать плагины для Minecraft, но у меня возникли некоторые ошибки, такие как в этой ссылке https://paste.ubuntu.com/p/yHs2pQWf8t/

Main

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 голосов
/ 16 июля 2019

Исключение 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");
    }
}

Класс 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;
}
0 голосов
/ 11 июля 2019

Итак, есть несколько вещей, которые вы должны исправить здесь, потому что это не сработает.

Прежде всего вы должны использовать setExecutor() вместо создания его нового экземпляра. Это можно сделать, добавив это в ваш onEnable():

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

Вы также должны будете указать эту команду в вашем plugin.yml, вот некоторая документация об этом: https://www.spigotmc.org/wiki/plugin-yml/

Затем вы можете удалить свой HelloCommand (), он вам больше не понадобится с тем, что вы изменили выше.

С этим ваша ошибка должна исчезнуть, дайте мне знать, если у вас все еще есть какие-то ошибки.

...