Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите NullPointerException при регистрации команды

Статус
Закрыто для дальнейших ответов.

Bars

Старожил
Девелопер
Пользователь
Баллы
173
Java:
    public void onEnable() {
        SpawnUtils.initialize(this);
        DatabaseUtils.initialize(this);
        HealListener.initialize(this);
        PlayerListener.initialize(this);
        EntityListener.initialize(this);

        DatabaseUtils.createTables();
        Bukkit.getPluginManager().registerEvents(new BlockListener(), this);
        Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
        Bukkit.getPluginManager().registerEvents(new EntityListener(), this);
        Bukkit.getPluginManager().registerEvents(new HealListener(), this);

        Bukkit.getScheduler().runTaskTimer(this, new ThirstTask(this), 0L, 1000L);
        Bukkit.getScheduler().runTaskTimer(this, new SyncTask(this), 0L, 20L);
        Bukkit.getScheduler().runTaskTimer(this, new Runnable() {
            @Override
            public void run() {
                for (Player p : Bukkit.getOnlinePlayers()) startEffects(p, true);
            }
        }, 0L, 800L);

        getCommand("start").setExecutor(new SpawnCommand());
        getCommand("info").setExecutor(new InfoCommand(this)); // На этой строке выдаёт NullPointerException
    }
Java:
package ru.onlymc.OnlyMZ.command;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import ru.onlymc.OnlyMZ.OnlyMZ;

public class InfoCommand implements CommandExecutor {
    private static OnlyMZ plugin;

    public InfoCommand(OnlyMZ p) {
        plugin = p;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("info") && sender instanceof Player) {
            Player p = (Player) sender;
            Player pl = plugin.getServer().getPlayer(args[0]);
            if (!pl.isOnline()) {
                p.sendMessage("§cИгрок " + pl.getName() + " не найден");
                return true;
            }

            if (args.length == 1) {
                if (plugin.isBleeding.get(pl)) {
                    p.sendMessage("§bКровотечение: §cда");
                } else {
                    p.sendMessage("§bКровотечение: §aнет");
                }

                if (plugin.isPoisoned.get(pl)) {
                    p.sendMessage("§bИнфекция: §cда");
                } else {
                    p.sendMessage("§bИнфекция: §aнет");
                }

                switch (plugin.tagColor.get(pl)) {
                    case 0: p.sendMessage("§bКласс: §fвыживший"); break;
                    case 1: p.sendMessage("§bКласс: §cбандит"); break;
                    case 2: p.sendMessage("§bКласс: §aдоктор"); break;
                }

                return true;
            } else if (args.length == 2 && args[1] == "starve") {
                pl.setFoodLevel(1);
                pl.setSaturation(20f);
                return true;
            }
        }
        return false;
    }
}
 
Забыл внести команду в plugin.yml
1. Нет, не забыл. Да и при этом такие ошибки не выдаются, только если в коде косяк.
2. В каждом третьем плагине с командами они не объявлены, но это не мешает им работать.
 
1. Нет, не забыл. Да и при этом такие ошибки не выдаются, только если в коде косяк.
2. В каждом третьем плагине с командами они не объявлены, но это не мешает им работать.
getCommand() для не внесённой команды возвращает null.
И да private static OnlyMZ plugin; ВТФ? Статик то нафига?
 
И да private static OnlyMZ plugin; ВТФ? Статик то нафига?
Действительно. Уже и не помню, зачем и откуда он.
getCommand() для не внесённой команды возвращает null.
Теперь работает, спасибо. Сделал вот что:
1. Убрал у команд usage (может быть неправильно написал /<command> <player> [starve])
2. Добавил к командам в начало mz (/mzspawn, /mzinfo...) и указал прошлые варианты (start, info...) в качестве алиасов.
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх