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

Статус
Закрыто для дальнейших ответов.

Lisenochek

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

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

Помогите пожалуйста разобраться с проблемой.
 
Код:
    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);
        }
    }
 
Пару секунд появится, но потом исчезает и не появляется, если не реконнектнуться.
Код:
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;
    }
 
Последнее редактирование:
Конфликт наверное с другим каким то. Но плагин точно работает.
Ну не знаю, есть у меня тоже плагин на пакетах, но после когда я его удалил, переключение не работает, хотя там вроде как все очень просто работает. Дело кажется не в конфликте..
Код:
    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);
    }
 
Теперь вообще странность. Первый скорборд он отобразил, но когда нужно скорборд сменить на другой, второй не появляется и на этом все заканчивается.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх