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

Помогите Проблема со Scoreboard

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

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

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Народ, очень странная хрень. Как мне сделать поддержку нескольких целей? Дело в том, когда я создаю этот скорборд, все существующее до него - пропадают (есть obj, который добавляет под ником HP, а также есть команда с префиксом (просто цвет)). Помогите:

    Код:
    package ru.lisenochek.fgmboardinfo.boardList;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import ru.lisenochek.fgmboardinfo.C;
    public class HelpBoard {
        public static void getBoard(Player p) {
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            Scoreboard board = manager.getNewScoreboard();
            Objective obj = board.registerNewObjective("obj", "dummy");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName(C.c("&a&lПомощь по серверу"));
            obj.getScore(" ").setScore(9);
            obj.getScore(C.c("&6» &d/menu &7- меню сервера.")).setScore(8);
            obj.getScore("  ").setScore(7);
            obj.getScore(C.c("&6» &d/donate &7- донат сервера.")).setScore(6);
            obj.getScore("   ").setScore(5);
            obj.getScore(C.c("&6» &d/shop &7- магазин сервера.")).setScore(4);
            obj.getScore("    ").setScore(3);
            obj.getScore(C.c("&6» &d/clan &7- кланы.")).setScore(2);
            obj.getScore("     ").setScore(1);
            obj.getScore(C.c("&6» &eТекущий онлайн: " + "&a" + Bukkit.getOnlinePlayers().size() + " &e/ " + "&a" + Bukkit.getMaxPlayers())).setScore(0);
            p.setScoreboard(board);
        }
    }
    
     
  2. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    Может ты новым заменяешь все старые?
     
  3. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Да ладно? А я прям не знал. Я пробовал в текущий вливать этот скор, но линиич которые надо обновить дублируются под другого игрока.
     
  4. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    А почему ты сразу не пишешь цвета ChatColor?
     
  5. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Какая разница? Проблема не в этом! Не знаешь, лучше не пиши.
    Проблема все еще актуальна! Один скорборд заменяет другой!
     
  6. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Чудак человек, ты создал только один objective
    Objective obj = board.registerNewObjective("obj","dummy");
    и ты его куча раз перезаписываешь.
    Создавай несколько object'ивов


    Щас попробую...
    Скинь что находится в классе ru.lisenochek.fgmboardinfo.C
     
  7. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    ChatColor.translateColor

    И я пробовал несколько целей и знаешь что? Строки дублировались! Например в секции ника было уже два ника, а онлайн просто создал еще одну строчку с обновленным онлайном.
     
  8. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Нахер юзать ChatColor когда есть магический символ
    §
    у меня всё работает, только что проверил
    [​IMG]

    Код:
    Код:
        public static void getBoard() {
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            Scoreboard board = manager.getNewScoreboard();
            Objective obj = board.registerNewObjective("obj", "dummy");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName("§a§lПомощь по серверу");
            obj.getScore(" ").setScore(9);
            obj.getScore("§6» §d/menu §7- меню сервера.").setScore(8);
            obj.getScore("  ").setScore(7);
            obj.getScore("§6» §d/donate §7- донат сервера.").setScore(6);
            obj.getScore("   ").setScore(5);
            obj.getScore("§6» §d/shop §7- магазин сервера.").setScore(4);
            obj.getScore("    ").setScore(3);
            obj.getScore("§6» §d/clan §7- кланы.").setScore(2);
            obj.getScore("     ").setScore(1);
            obj.getScore("§6» §eТекущий онлайн: " + "§a" + Bukkit.getOnlinePlayers().size() + " §e/ " + "§a" + Bukkit.getMaxPlayers()).setScore(0);
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.setScoreboard(board);
            }
        }
    
     
  9. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ага, а теперь попробуй создать тиму в скорборде, дать ему префикс, затем создать еще одну цель и запихать в BELOWNAME допустим.... ХП, а потом еще пусть зайдет на сервер еще один игрок. Поймешь всю проблему
     
  10. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Дык скинь весь код с тимой. А что ты имеешь виду под "Целью?"
     
  11. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Objective - цель

    Код:
        private static void setHealth() {
    
            obj.setDisplaySlot(DisplaySlot.BELOW_NAME);
            obj.setDisplayName(C.c("&e/ &f20&c♥"));
        }

    В общем! Суть проблемы такова. Мой скорборд (панелька (код выше)) "закрывает" скорборд в другом плагине, добавляющий ХП и меняющий цвет ника над головой игрока. Как мне это можно пофиксить?

    Да, я пробовал создавать для каждой панельки свой Objective, но когда заходил второй игрок начинаются артефакты, а именно помимо моей информации добавляется и информация другого игрока, а онлайн дублируется под новое значение.
     
  12. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Objective - событие
    [​IMG]

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

    Например вот так:
    Код:
    Scoreboard scoreboard;
    for (Player p : Bukkit.getOnlinePlayers()) {
    scoreboard = p.getScoreboard();
    }
    scoreboard.всёчтотыхочешьснимсделать
    

    Только что проверил и всё работает:
    [​IMG]

    Код:
    p.s. ты это запихай в шедулер чтобы он постоянно обновлял его
    Код:
    
            Scoreboard scoreboard = null;
            Objective obj = null;
            for (Player p : Bukkit.getOnlinePlayers()) {
                scoreboard = p.getScoreboard();
            }
            try {
                obj = scoreboard.registerNewObjective("obj", "dummy");
                obj.setDisplaySlot(DisplaySlot.SIDEBAR);
                obj.setDisplayName("§a§lПомощь по серверу");
                obj.getScore(" ").setScore(9);
                obj.getScore("§6» §d/menu §7- меню сервера.").setScore(8);
                obj.getScore("  ").setScore(7);
                obj.getScore("§6» §d/donate §7- донат сервера.").setScore(6);
                obj.getScore("   ").setScore(5);
                obj.getScore("§6» §d/shop §7- магазин сервера.").setScore(4);
                obj.getScore("    ").setScore(3);
                obj.getScore("§6» §d/clan §7- кланы.").setScore(2);
                obj.getScore("     ").setScore(1);
                obj.getScore("§6» §eТекущий онлайн: " + "§a" + Bukkit.getOnlinePlayers().size() + " §e/ " + "§a" + Bukkit.getMaxPlayers()).setScore(0);
                for (Player p : Bukkit.getOnlinePlayers()) {
                    p.setScoreboard(scoreboard);
                }
            } catch (IllegalArgumentException ignored) {}
    
    

    Оупс он кидает экспешн щас код профикшу
    Всё поправил код, пробуй!
     
  13. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Спасибо за совет, щас попробую и отпишусь
    А переводчик и английский считает, что ты ошибаешься и это цель, ну ладно.
     
  14. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Майн обрабатывает objective как событие, все принтензии к разработчикам майна.
    кстати измени в
    obj = scoreboard.registerNewObjective("obj", "dummy");
    "obj" На другое название например на "fgmboardinfo", а то не красиво будет:
    [​IMG]
    Но это так, просто для красоты XD
     
  15. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Сложно. Байда та же.

    Код:
    package ru.lisenochek.fgmboardinfo.boardList;
    
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import ru.lisenochek.fgmboardinfo.C;
    
    public class HelpBoard {
    
        private static Scoreboard board;
        private static Objective obj;
    
        public static void getBoard(Player p) {
    
            board = p.getScoreboard();
            obj = board.registerNewObjective("obj", "dummy");
    
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName(C.c("&a&lПомощь по серверу"));
    
            obj.getScore(" ").setScore(9);
            obj.getScore(C.c("&6» &d/menu &7- меню сервера.")).setScore(8);
            obj.getScore("  ").setScore(7);
            obj.getScore(C.c("&6» &d/donate &7- донат сервера.")).setScore(6);
            obj.getScore("   ").setScore(5);
            obj.getScore(C.c("&6» &d/shop &7- магазин сервера.")).setScore(4);
            obj.getScore("    ").setScore(3);
            obj.getScore(C.c("&6» &d/clan &7- кланы.")).setScore(2);
            obj.getScore("     ").setScore(1);
            obj.getScore(C.c("&6» &eТекущий онлайн: " + "&a" + Bukkit.getOnlinePlayers().size() + " &e/ " + "&a" + Bukkit.getMaxPlayers())).setScore(0);
    
            p.setScoreboard(board);
        }
    }
    

    + постоянно пишет, что цель существует, но даже проверки не помогают.

    (входящий аргумент (Player) не обращай внимание, потому что):
    Код:
    package ru.lisenochek.fgmboardinfo;
    
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import ru.lisenochek.fgmboardinfo.boardList.DonateBoard;
    import ru.lisenochek.fgmboardinfo.boardList.HelpBoard;
    import ru.lisenochek.fgmboardinfo.boardList.InfoBoard;
    
    public class RunnableManager implements Runnable {
    
        private int timer = 0;
    
        @Override
        public void run() {
    
            for (Player p : Bukkit.getOnlinePlayers()) {
    
                if (timer % 5 == 0) InfoBoard.getBoard(p);
                if (timer % 10 == 0) DonateBoard.getBoard(p);
                if (timer % 15 == 0) HelpBoard.getBoard(p);
            }
    
            timer++;
        }
    }
    
    Что-то сделал, но вот артефакты...[​IMG]
     
  16. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Ало ты мой код то скопируй, я же писал:
     
  17. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Все, что надо обновить - дублируется и не заменяется... Все плохо..
    Какая разница? Все тоже самое, через луп же перебираю игроков то
     
  18. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Чтобы ошибками не срало:
    [​IMG]

    и сам этот метод в шедулер
     
  19. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я кстати попробовал, проблема осталась.
     
  20. XjCyan1de

    XjCyan1de Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    P.s. для того чтобы делать плагины нужны базовые знания Java, без них ты даже не знаешь что делать если ошибками начинает кидаться то их надо ловить
     
Статус темы:
Закрыта.

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