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

Помогите Ошибка с Scoreboard

MrSharky

Участник
Пользователь
Баллы
33
Не ясно почему выдает ошибку. Ругается вот на эту строчку:
Код:
        if(EnableClass.config.contains(e.getPlayer().getName() + "_MANA") && EnableClass.config.contains(e.getPlayer().getName() + "_MAX_MANA") && EnableClass.config.contains(e.getPlayer().getName() + "_MANA_REGEN")){
            Objective obj = board.getObjective(e.getPlayer().getName());
            @SuppressWarnings("deprecation")
            Score score = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana:")); //вот на эту строку
            score.setScore(EnableClass.config.getInt(e.getPlayer().getName()));
        }
 
bc86f2d037.jpg

Я ВИЖУ. ВИЖУ. NULLPOINTEREXCEPTION
ПОТОМУ ЧТО
ПО ДЕФОЛТУ
ВИЖУ
ВИЖУ ЧТО У ИГРОКА
Objective obj = board.getObjective(e.getPlayer().getName());
НЕТ ОБЖЕКТИВА С ЕГО ИМЕНЕМ
ВИЖУ
ВИЖУ
ЧТО НЕ ПОНИМАЕТЕ ВЫ КАК ЭТО РАБОТАЕТ
ВИЖУ
ССЫЛКУ
 
bc86f2d037.jpg

Я ВИЖУ. ВИЖУ. NULLPOINTEREXCEPTION
ПОТОМУ ЧТО
ПО ДЕФОЛТУ
ВИЖУ
ВИЖУ ЧТО У ИГРОКА

НЕТ ОБЖЕКТИВА С ЕГО ИМЕНЕМ
ВИЖУ
ВИЖУ
ЧТО НЕ ПОНИМАЕТЕ ВЫ КАК ЭТО РАБОТАЕТ
ВИЖУ
ССЫЛКУ
Хах) Но суть в том, что строчки с тем как при первом заходе регистрируется новый обжектив, я опустил и написал только вот этот отрезок.
Так вообще вот:
Код:
    @EventHandler
    public void onJoin(PlayerJoinEvent e){
        if(EnableClass.config.contains(e.getPlayer().getName() + "_MANA") && EnableClass.config.contains(e.getPlayer().getName() + "_MAX_MANA") && EnableClass.config.contains(e.getPlayer().getName() + "_MANA_REGEN")){
            Objective obj = board.getObjective(e.getPlayer().getName());
            @SuppressWarnings("deprecation")
            Score score = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana:"));
            score.setScore(EnableClass.config.getInt(e.getPlayer().getName()));
        }
        else{
            if(!EnableClass.config.contains(e.getPlayer().getName() + "_MANA")){
                Objective obj = registerNewObjective(e.getPlayer());
                obj.setDisplayName(ChatColor.GREEN + "Характеристика:");
                obj.setDisplaySlot(DisplaySlot.SIDEBAR);
                @SuppressWarnings("deprecation")
                Score score = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana:"));
                mana.setDefaults(e.getPlayer(), "mana");
                score.setScore(10);
                e.getPlayer().setScoreboard(board);
            }
            if(!EnableClass.config.contains(e.getPlayer().getName() + "_MAX_MANA")){
                mana.setDefaults(e.getPlayer(), "maxmana");
            }
            if(!EnableClass.config.contains(e.getPlayer().getName() + "_MANA_REGEN")){
                mana.setDefaults(e.getPlayer(), "manaregen");
            }
        }
        mana.regeneration(e.getPlayer());
    }
 
  • @EventHandler
  • public void onJoin(PlayerJoinEvent e){
  • if(EnableClass.config.contains(e.getPlayer().getName() + "_MANA") && EnableClass.config.contains(e.getPlayer().getName() + "_MAX_MANA") && EnableClass.config.contains(e.getPlayer().getName() + "_MANA_REGEN")){
  • Objective obj = board.getObjective(e.getPlayer().getName());
Не уверен что даже в этом случае у игрока будет обжектив.
Добавьте проверку на null на всякий пожарный
 
Не уверен что даже в этом случае у игрока будет обжектив.
Добавьте проверку на null на всякий пожарный
Я принял совет и переделал всю проверку на новый простой лад, но ошибка осталась таже самая:
Код:
    @EventHandler
    public void onJoin(PlayerJoinEvent e){
        if(e.getPlayer().getScoreboard() == null){
            Objective obj = board.registerNewObjective(e.getPlayer().getName(), "dummy");
            obj.setDisplayName(ChatColor.GREEN + "Характеристика");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            @SuppressWarnings("deprecation")
            Score score = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana"));
            score.setScore(10); //ради теста
            mana.setDefaults(e.getPlayer(), "all");
            e.getPlayer().setScoreboard(board);
        }
        else{
            Objective obj = e.getPlayer().getScoreboard().getObjective(e.getPlayer().getName());
            @SuppressWarnings("deprecation")
            Score score = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana")); 
           //строчка на которую ругается консоль, как и в прошлый раз
            score.setScore(100); //ради теста
        }
    }
 
Челодой моловек, ну сделайте так как я сказал.
e.getPlayer().getScoreboard() == null
То что scoreboard для игрока != null не дает нам ну никаких гарантий что e.getPlayer().getScoreboard().getObjective(e.getPlayer().getName()) существует
 
Эх, хоть что я не делал ошибка таже:
Код:
    @EventHandler
    public void onJoin(PlayerJoinEvent e){
        if(e.getPlayer().getScoreboard() !=  board){ 
            Objective obj;
            if(!e.getPlayer().hasPlayedBefore()){ 
//заметил что боард установленный на игрока, с него  иногда слетает после выхода(без перезагрузки)
                obj = board.registerNewObjective(e.getPlayer().getName(), "dummy");
                obj.setDisplayName(ChatColor.GREEN + "Характеристика");
                obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            }
            else{
                obj = board.getObjective(e.getPlayer().getName());
            }
            @SuppressWarnings("deprecation")
            Score score = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana:"));
//опять указывает сюда
            score.setScore(10);
            mana.setDefaults(e.getPlayer(), "all");
            e.getPlayer().setScoreboard(board);
        }
        else if(e.getPlayer().getScoreboard() == board){
            Objective objective = e.getPlayer().getScoreboard().getObjective(e.getPlayer().getName());
            @SuppressWarnings("deprecation")
            Score score = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + "Mana"));
            score.setScore(100);
        }
    }
 
Знаете, тут есть 2 варианта
Или я не понимаю вас
Или вы не понимаете что делаете..
В общем вот..
Попробуйте, ибо я сдаюсь.
Код:
if (board.getObjective(event.getPlayer().getName()) == null) {
            Objective objective = board.registerNewObjective(e.getPlayer().getName(), "dummy");
        }
 
Знаете, тут есть 2 варианта
Или я не понимаю вас
Или вы не понимаете что делаете..
В общем вот..
Попробуйте, ибо я сдаюсь.
Код:
if (board.getObjective(event.getPlayer().getName()) == null) {
            Objective objective = board.registerNewObjective(e.getPlayer().getName(), "dummy");
        }
скорее я не понимал, что делал... Надо прекращать заниматься этим по ночам. Проблему я решил, как раз с помощью выше данного примера.
 

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

Назад
Верх