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

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

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

  1. Автор темы
    MrSharky

    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()));
            }
     
  2. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    [​IMG]
    Я ВИЖУ. ВИЖУ. NULLPOINTEREXCEPTION
    ПОТОМУ ЧТО
    ПО ДЕФОЛТУ
    ВИЖУ
    ВИЖУ ЧТО У ИГРОКА
    НЕТ ОБЖЕКТИВА С ЕГО ИМЕНЕМ
    ВИЖУ
    ВИЖУ
    ЧТО НЕ ПОНИМАЕТЕ ВЫ КАК ЭТО РАБОТАЕТ
    ВИЖУ
    ССЫЛКУ
     
  3. Автор темы
    MrSharky

    MrSharky Участник Пользователь

    Баллы:
    33
    Хах) Но суть в том, что строчки с тем как при первом заходе регистрируется новый обжектив, я опустил и написал только вот этот отрезок.
    Так вообще вот:
    Код:
        @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());
        }
     
  4. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Не уверен что даже в этом случае у игрока будет обжектив.
    Добавьте проверку на null на всякий пожарный
     
  5. Автор темы
    MrSharky

    MrSharky Участник Пользователь

    Баллы:
    33
    Я принял совет и переделал всю проверку на новый простой лад, но ошибка осталась таже самая:
    Код:
        @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); //ради теста
            }
        }
     
  6. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Челодой моловек, ну сделайте так как я сказал.
    То что scoreboard для игрока != null не дает нам ну никаких гарантий что e.getPlayer().getScoreboard().getObjective(e.getPlayer().getName()) существует
     
  7. Автор темы
    MrSharky

    MrSharky Участник Пользователь

    Баллы:
    33
    Эх, хоть что я не делал ошибка таже:
    Код:
        @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);
            }
        }
     
  8. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Знаете, тут есть 2 варианта
    Или я не понимаю вас
    Или вы не понимаете что делаете..
    В общем вот..
    Попробуйте, ибо я сдаюсь.
    Код:
    if (board.getObjective(event.getPlayer().getName()) == null) {
                Objective objective = board.registerNewObjective(e.getPlayer().getName(), "dummy");
            }
     
  9. Автор темы
    MrSharky

    MrSharky Участник Пользователь

    Баллы:
    33
    скорее я не понимал, что делал... Надо прекращать заниматься этим по ночам. Проблему я решил, как раз с помощью выше данного примера.
     

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