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

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ну... BUMP, что ль..
     
  2. alexandrage

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

    Баллы:
    173
    Кидаешь пакет удалить, потом создать.
     
  3. Автор темы
    Lisenochek

    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);
        }
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Только все равно иногда может кинуть ошибку, но как ее воспроизвести не знаю.
     
  5. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
  6. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Что тебе не понятно? Ты игроку шлешь повторное создание тимы, когда у игрока имеется уже такая же тима которая хранится на банже, прежде чем создавать такую же тиму надо слать ремув пакет этой тимы
     
  7. Nikolai_Faint

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

    Баллы:
    96
  8. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Может быть ты не видел, но я отправлял пакет на удаление прежде чем добавить.
     
  9. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
  10. Nikolai_Faint

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

    Баллы:
    96
    Соре, не заметил.
     
  11. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Попробуй добавить задержку в несколько тиков перед отправкой новой тимы. Или просто лови исключение чтобы не флудило.
     
  12. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Прикол в том, что с этой ошибкой игрок вылетает из сервера вообще.
     
  13. alexandrage

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

    Баллы:
    173
    Выпиливаешь это исключение у банжи и перестанет вылетать.
     
  14. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Что ты имеешь в виду?
     
  15. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
  16. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Игрок вылетает с этой ошибкой.
     
  17. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я все перепробовал. Ставил задержку между удалением и созданием новой тимы. И удалял тиму после ухода игрока из сервера, но все равно происходят вылеты с этой ошибкой. Вместе с игроком вылетает весь сервер.
    [​IMG]
     
  18. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Если вариант с удалением / добавлением тимы не работает, значит ты делаешь его неправильно. У меня такой вариант работал, и работал без добавления всяких задержек.

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

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