Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

ErickSkrauch

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

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

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

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

Назад
Верх