Помогите 2 и более Scoreboard.

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Всем привет. Нужна помощь по созданию скорбордов. Суть проблемы в том, что один скорборд заменяет другой и в итоге эти два скорборда не могут работать вместе. Слышал, что можно создавать цели в одном скорборде, но это лишает возможности создавать индивидуальную статистику игроков или что-то в этом роде. Как можно сделать отображение двух или более скорбордов без замены одного на других.
 
Так я так и делаю

Код:
    private WrapperPlayServerScoreboardTeam sendTeam(int i) {

        WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();
        String prefix = null;

        for (String s : Config.yaml.getConfigurationSection("groups").getKeys(false)) {
            PermissionUser pex = PermissionsEx.getUser(playerName);
            if (!pex.getGroupsNames()[0].equals(s)) continue;
            prefix = Config.yaml.getString("groups." + s + ".prefix");
            break;
        }

        team.setName(playerName.length() < 16 ? playerName : playerName.substring(0, 16));
        team.setDisplayName(playerName);
        team.setMode(i);
        team.setNameTagVisibility("ALWAYS");
        team.setPrefix(Utils.stripColor(prefix == null ? "" : prefix));
        team.setPackOptionData(1);
        team.getPlayers().add(playerName);
        return team;
    }

    public void setPrefix() {

        BukkitRunnable runnable = new BukkitRunnable() {

            @Override
            public void run() {

                if (!playersMap.containsKey(playerName)) {
                    cancel();
                    return;
                }

                for (Player player : Bukkit.getOnlinePlayers()) {
                    sendTeam(1).sendPacket(player);
                    sendTeam(0).sendPacket(player);
                }

                player.setPlayerListName(Utils.stripColor(prefix != null ? getGroup() + prefix + " " + playerName : getGroup() + player.getName()));
            }
        };
        runnable.runTaskTimerAsynchronously(Main.plugin, 1, 100);
    }
 
Только все равно иногда может кинуть ошибку, но как ее воспроизвести не знаю.
 
Что тебе не понятно? Ты игроку шлешь повторное создание тимы, когда у игрока имеется уже такая же тима которая хранится на банже, прежде чем создавать такую же тиму надо слать ремув пакет этой тимы
 
Что тебе не понятно? Ты игроку шлешь повторное создание тимы, когда у игрока имеется уже такая же тима которая хранится на банже, прежде чем создавать такую же тиму надо слать ремув пакет этой тимы
Может быть ты не видел, но я отправлял пакет на удаление прежде чем добавить.
 
Может быть ты не видел, но я отправлял пакет на удаление прежде чем добавить.
Попробуй добавить задержку в несколько тиков перед отправкой новой тимы. Или просто лови исключение чтобы не флудило.
 
Попробуй добавить задержку в несколько тиков перед отправкой новой тимы. Или просто лови исключение чтобы не флудило.
Прикол в том, что с этой ошибкой игрок вылетает из сервера вообще.
 
Я все перепробовал. Ставил задержку между удалением и созданием новой тимы. И удалял тиму после ухода игрока из сервера, но все равно происходят вылеты с этой ошибкой. Вместе с игроком вылетает весь сервер.
EybKrtM1FAI.jpg
 
Я все перепробовал. Ставил задержку между удалением и созданием новой тимы. И удалял тиму после ухода игрока из сервера, но все равно происходят вылеты с этой ошибкой. Вместе с игроком вылетает весь сервер.
EybKrtM1FAI.jpg
Если вариант с удалением / добавлением тимы не работает, значит ты делаешь его неправильно. У меня такой вариант работал, и работал без добавления всяких задержек.

Еще варианты:
1. В банже удалить пару строчек с проверкой дупликатов Team и Objective. Самый простой вариант. Последствия отправки каждый раз по новому - у многих игроков жестко падает фпс, как только включается плагин. При чем не зависимо от машины. Я так и не понял этот прикол, но сделал без дупликатов (сделал хранение и управление примерно как в ядре). Потому вариант не очень, но можешь попробовать.
2. Самому контроллировать все Teams / Objectives так, как это сделано в ядре.
3. Не использовать пакеты. Не уверен как на старых версиях там, но в 1.12.2+ с обычными бордами взятыми через API все отлично, ничего никуда не слетает. Нужно лишь, чтобы все плагины не сбрасывали борды и не ставили main борд.
 
Назад
Верх