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

Помогите Scoreboard через ProtocolLib

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

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

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

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

    Пробовал сделать скорборд и отобразить его через ProtocolLib, используя для удобства PacketWrapper, но ничего не получилось, табло не появилось.

    Помогите пожалуйста разобраться с проблемой.
     
  2. DeethzzCoder

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

    Баллы:
    76
    Кидай код.
     
  3. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Код:
        public void send(Player player) {
    
            WrapperPlayServerScoreboardObjective obj = new WrapperPlayServerScoreboardObjective();
            WrapperPlayServerScoreboardDisplayObjective display = new WrapperPlayServerScoreboardDisplayObjective();
    
            obj.setObjectiveValue(Utils.stripColor(displayName));
            obj.setObjectiveName("obj");
            obj.setPacketMode((byte) 0);
    
            display.setPosition((byte) 1);
            display.setScoreName("obj");
    
            for (int i = 0; i < scoresList.size(); i++) {
                WrapperPlayServerScoreboardScore newScore = new WrapperPlayServerScoreboardScore();
    
                newScore.setItemName(scoresList.get(i));
                newScore.setScoreName("obj");
                newScore.setValue(i);
                obj.sendPacket(player);
                display.sendPacket(player);
                newScore.sendPacket(player);
            }
        }
     
  4. alexandrage

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

    Баллы:
    173
  5. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Пару секунд появится, но потом исчезает и не появляется, если не реконнектнуться.
    Код:
    public class ScoreboardClass {
    
        public static List<ScoreboardClass> sbList = new ArrayList<>();
    
        private String displayName;
        private List<String> scoresList;
        private boolean isTopkills;
    
        public ScoreboardClass(String displayName, List<String> scoresList) {
            this.displayName = displayName;
            this.scoresList = scoresList;
            sbList.add(this);
        }
    
        public ScoreboardClass(String displayName) {
            this.displayName = displayName;
            this.isTopkills = true;
            sbList.add(this);
        }
    
        public void send(Player player) {
    
            List<WrapperPlayServerScoreboardScore> scores = Lists.newArrayList();
            int slot = 14;
            for (String s : scoresList) {
                scores.add(newScore("s" + player.getName(), Utils.getVariables(s, player), slot));
                --slot;
            }
    
            WrapperPlayServerScoreboardObjective remove = new WrapperPlayServerScoreboardObjective();
            remove.setName("s" + player.getName());
            remove.setDisplayName(displayName);
            remove.setMode(1);
            remove.sendPacket(player);
    
            WrapperPlayServerScoreboardObjective objective = new WrapperPlayServerScoreboardObjective();
            objective.setName(player.getName());
            objective.setDisplayName(displayName);
            objective.setMode(0);
    
            WrapperPlayServerScoreboardDisplayObjective disp = new WrapperPlayServerScoreboardDisplayObjective();
            disp.setPosition(1);
            disp.setScoreName("s" + player.getName());
            objective.sendPacket(player);
            disp.sendPacket(player);
    
            for (WrapperPlayServerScoreboardScore score : scores) score.sendPacket(player);
        }
    
        private WrapperPlayServerScoreboardScore newScore(String objName, String name, int value) {
            WrapperPlayServerScoreboardScore score = new WrapperPlayServerScoreboardScore();
            score.setObjectiveName(objName);
            score.setScoreboardAction(EnumWrappers.ScoreboardAction.CHANGE);
            score.setScoreName(name);
            score.setValue(value);
            return score;
        }
     
    Последнее редактирование: 28 окт 2018
  6. alexandrage

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

    Баллы:
    173
    Выше дал же рабочий плагин.
     
  7. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Он появляется на пару секунд, позже исчезает и усе, до реконнекта не появится.
     
  8. alexandrage

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

    Баллы:
    173
    Конфликт наверное с другим каким то. Но плагин точно работает.
     
  9. alexandrage

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

    Баллы:
    173
  10. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ну не знаю, есть у меня тоже плагин на пакетах, но после когда я его удалил, переключение не работает, хотя там вроде как все очень просто работает. Дело кажется не в конфликте..
    Код:
        public void runTimer() {
    
            BukkitRunnable runnable = new BukkitRunnable() {
    
                int i = 0;
                int seconds = 1;
    
                @Override
                public void run() {
    
                    if (seconds < Config.REFRESH_TIME.getInteger()) {
                        seconds++;
                        return;
                    }
    
                    seconds = 1;
    
                    if (ScoreboardClass.sbList.size() == i) i = 0;
    
                    for (Player player : Bukkit.getOnlinePlayers()) ScoreboardClass.sbList.get(i).send(player);
                    i++;
                }
            };
            runnable.runTaskTimer(Main.plugin, 1, 20);
        }
     
  11. alexandrage

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

    Баллы:
    173
    На видио, тот самый плагин снимал. 1.12.2 ядро было.
     
  12. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Теперь вообще странность. Первый скорборд он отобразил, но когда нужно скорборд сменить на другой, второй не появляется и на этом все заканчивается.
     
  13. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я повторил твой код. Почти все тоже самое.
     
Статус темы:
Закрыта.

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