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

Помогите Register и Unregister ивентов

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

Метки:
Статус темы:
Закрыта.
  1. Автор темы
    sweettie

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

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    Есть у меня значит класс с ивентами (пока там только PlayerOnMoveEvent) *Класс - PlayerListener* который отменяет любые действия если игрок есть в HashMap<UUID, Listener>. Когда игрок заходить на сервер, я создаю PlayerListener listener = new PlayerListener(uuid); и добавляю его в это шехмап. Вопрос состоит в том, как можно убирать слежку за ивентами для игрока (В данном случае PlayerListener для этого игрока)

    Если быть точнее
    PlayerListener:
    Код:
        
    UUID uuid;
    
        public PlayerListener(UUID uuid) {
            this.uuid = uuid;
        }
    
        @EventHandler
        public void move(PlayerMoveEvent event) {
            UUID id = event.getPlayer().getUniqueId();
            if (id.equals(uuid)) event.setCancelled(true);
        }
    GlobalListener:
    Код:
        Main main;
    
        public Listeners(Main main) {
            this.main = main;
        }
    
    
        @EventHandler
        public void join(PlayerJoinEvent event) {
            Player player = event.getPlayer();
            if (!main.isNewUser(player.getUniqueId())) {
                event.getPlayer().sendMessage("reg");
            } else {
                event.getPlayer().sendMessage("login");
            }
            GlobalListener listener = new GlobalListener(player.getUniqueId())
            pluginManager.registerEvents(listener, main);
            event.setJoinMessage("");
            event.getPlayer().setWalkSpeed(0F);
            event.getPlayer().setFlySpeed(0F);
    
        }
     
  2. alexandrage

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

    Баллы:
    173
    Код:
        @EventHandler
        public void move(PlayerMoveEvent event) {
            if(userMap.containsKey(event.getPlayer().getUniqueId())) {
                игрок есть, что то делаем
            } else {
                игрока нет, ничего не делаем
            }
        }
     
  3. Автор темы
    sweettie

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

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    а теперь представь что у меня таких ещё 20 евентов на все случаи жизни и 200+ игроков, и ты хочешь чтоб я для каждых 200 проверял каждый евент??? нет, спасибо
     
  4. alexandrage

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

    Баллы:
    173
    Зачем 20? Один ивент проверяет любое число игроков.
     
  5. Автор темы
    sweettie

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

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    ивент на ломание блока, получение урона, когда чел ударил сам кого-то, выкинул предмет, получил предмет,когда поставил блок, использовал предмет, зашёл в инвентарь и тп.
     
  6. alexandrage

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

    Баллы:
    173
    Ну тем же if работаешь.
     
  7. Автор темы
    sweettie

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

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    ну он же сдохнет для каждого евента, для каждого игрока проверять условие. Мне нужно узнать как можно офать слушатель
     
  8. alexandrage

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

    Баллы:
    173
    Слушатель и так срабатывает на всех игроков, а ты хочешь что бы по 2 одинаковых слушателя срабатывало вместо одного? Зачем?
     
  9. Автор темы
    sweettie

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

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    Но его можно же регистрировать, значит и есть способ un-регистрировать. Вот мне и нужно узнать как это делать, а не как ещё можно по другому это сделать!
     
  10. alexandrage

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

    Баллы:
    173
    Ну тогда все игроки перестанут отслеживаться. Если тебе надо конкретных игроков проверять, то используй if.
     
  11. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Зачем ты регистрируешь новый слушатель для каждого игрока? Создай один, юзай HashSet<UUID>, проверяй наличие игрока там.
     
  12. alexandrage

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

    Баллы:
    173
    У него сервер еще не лагает :D
     
  13. Автор темы
    sweettie

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

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    кроме как сте баться над новичками вы и умеете, нет чтобы всё понятно и ясно разложить по полочкам чтоб с первого раза всё стало понятно для другого человека
     
Статус темы:
Закрыта.

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