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

Помогите Как работают ивенты?

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

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

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    У меня есть HashMap которая содержит в себе единицы урана который дал игрок. эта HashMap в отдельном классе менеджере, создаю экземпляр класса менеджера для дальнейшей работы с ним и этот же экземпляр регистрирую как Listener прописал в методах и ивентами пополнение мапы(если уже содержится значение с таким кличем тогда заменяем на сумму из мапы с дамагом который был сейчас если нет то тогда просто добавляю), но вот не задача HashMap при каждом нанесении дамага как будто обнуляется. Подумал что мб нельзя так регистрировать листенер и сделал отдельный класс с ним, класс менеджер же создаю в мейне и получаю в листенере через геттер, но все равно HashMap как будето пустая(тобишь урон в ней не прибавляется с каждым разом)
    вот код метода который отвечает за получение дамага в менеджере(Ручаюсь что используется только 1 класс менеджера и больше он не создается)
    PHP:
    if(e.getEntity() == mag) {
                if(
    e.getDamager() instanceof Player) {
                    
    Player damager = (Playere.getDamager();
                    if(
    clanManager.getClanPlayer(damager) != null) {
                        
    Clan clan clanManager.getClanPlayer(damager);
                        if(
    damageMap.containsKey(clan)) {
                            
    damager.sendMessage("содержится");
                            
    Double damage damageMap.get(clan) + e.getFinalDamage();
                            
    damageMap.replace(clandamage);
                            
    damager.sendActionBar("Нанесен урон вашим кланом: " damage);
                        }else {
                            
    damager.sendMessage("Не содержится");
                            
    damageMap.put(clane.getFinalDamage());
                            
    damager.sendActionBar("Нанесен урон вашим кланом: " e.getFinalDamage());
                        }
                    }
                }
            }
    sendMessage сделал для дебага, при каждом уроне выводит "Не содержится"
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Новый экземпляр Clan не создаётся при вызове getClanPlayer?
     
  3. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Блин точно это же ссылка. Использую ID клана теперь. Извиняюсь затупил
     
  4. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    На будущее - HashMap и HashSet используют методы hashCode() и equals() у проверяемых объектов. Советую почитать, как оверрайдить их.
     
  5. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Спасибо, почитаю.
     

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