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

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

Discussion in 'Разработка плагинов для новичков' started by ErickSkrauch, Oct 24, 2012.

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

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

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

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

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

    Trophy Points:
    173
    TAB-List который? Вот так попробуйте:
    Code:
    // 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()) возможно, что имя опять покажется. Поэтому получается не очень хорошо.. Поэтому к коду, который я привел выше можно добавить ещё вот это:
    Code:
    Utils.hidePlayers.add(player.getName);
    Тогда нужно создать класс Utils и добавить в него:
    Code:
    public static List<String> hidePlayers;
    А в onEnable() добавить:
    Code:
    Utils.hidePlayers = new ArrayList<String>();
    А теперь опять же в onEnable() добавляем такую вещь:
    Code:
    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 and 1 other person like this.
  4. Автор темы
    ErickSkrauch

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

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

    Попробую, позже отпишусь.
     
    Сникерсни likes this.
  5. mayor123

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

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

Share This Page