Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Поиск класса списка игроков

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

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

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

    Баллы:
    68
    Имя в Minecraft:
    ErickSkrauch
    Что нужно сделать - обрабатываем событие входа игрока в игру и тут же удаляем его из списка игроков, который можно увидеть нажав "0","U", короче у всех по разному.

    Плагин я пишу первый раз и если отлавить событие и получить ник игрока для сравнения смог, то вот как удалить его - не пойму. Лазил по этому описанию апи - так и не нашёл нужного класса и метода. Помогите.
     
  2. Хостинг MineCraft
    <
  3. mayor123

    mayor123 Старожил Девелопер Пользователь

    Баллы:
    173
    TAB-List который? Вот так попробуйте:
    Код:
    // player - экземпляр класса Player.
    CraftPlayer cp = (CraftPlayer) player; // Cast'им в класс с интерфейса.
    Packet201PlayerInfo packet = new Packet201PlayerInfo(player.getPlayerListName(), false, 9999); // Создаем новый экземпляр класса Packet201PlayerInfo, который имеет при себе информацию о добавлении/удалении игрока с него. Удаляется, если второй argument == false, не помню, обязательно ли указывать ping 9999, но на всякий случай.
    cp.getHandle().sendPacket(packet); // Класс CraftPlayer содержит метод getHandle(), который возвращает EntityPlayer'a. Класс EntityPlayer имеет метод sendPacket(Packet packet), отправляет пакет игроку.
    Вместе с Bukkit API нужно подключить и сам CraftBukkit к проекту плагина. Также, при некоторых обстоятельствах (например, player.setPlayerListName()) возможно, что имя опять покажется. Поэтому получается не очень хорошо.. Поэтому к коду, который я привел выше можно добавить ещё вот это:
    Код:
    Utils.hidePlayers.add(player.getName);
    Тогда нужно создать класс Utils и добавить в него:
    Код:
    public static List<String> hidePlayers;
    А в onEnable() добавить:
    Код:
    Utils.hidePlayers = new ArrayList<String>();
    А теперь опять же в onEnable() добавляем такую вещь:
    Код:
    getServer().getScheluder().scheludeSyncRepeatingTask(this, new Runnable() {
        for(String s : Utils.hidePlayers) {
            Player p = Bukkit.getPlayer(s);
            if(p == null) continue;
            CraftPlayer cp = (CraftPlayer) p;
            cp.sendPacket(new Packet201PlayerInfo(p.getPlayerListName(), false, 9999));
        }
    }, 20L, 40L);
     
    jkl1234, Bluer, Alastar и ещё 1-му нравится это.
  4. Автор темы
    ErickSkrauch

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

    Баллы:
    68
    Имя в Minecraft:
    ErickSkrauch
    Пока не знаю, работает ли это, но большое спасибо за развёрнутый ответ!

    Попробую, позже отпишусь.
     
    Сникерсни нравится это.
  5. mayor123

    mayor123 Старожил Девелопер Пользователь

    Баллы:
    173
    Кстати, это, пакет-то всем нужно отправлять. Недочет у меня небольшой. Но главное, что я показал принцип.
     

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