1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Bars, 21 дек 2013.

Статус темы:
Закрыта.
  1. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Код:
        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
        }
    Код:
    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;
        }
    }
     
  2. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Забыл внести команду в plugin.yml
     
  3. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    1. Нет, не забыл. Да и при этом такие ошибки не выдаются, только если в коде косяк.
    2. В каждом третьем плагине с командами они не объявлены, но это не мешает им работать.
     
  4. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    getCommand() для не внесённой команды возвращает null.
    И да private static OnlyMZ plugin; ВТФ? Статик то нафига?
     
    Bars нравится это.
  5. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Действительно. Уже и не помню, зачем и откуда он.
    Теперь работает, спасибо. Сделал вот что:
    1. Убрал у команд usage (может быть неправильно написал /<command> <player> [starve])
    2. Добавил к командам в начало mz (/mzspawn, /mzinfo...) и указал прошлые варианты (start, info...) в качестве алиасов.
     
    ВремяПриключений нравится это.
Статус темы:
Закрыта.

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