LivingHurtEvent не работает на сервере

Версия Minecraft
1.7.10
Всем привет, имеется мод CustomNpc, в нем есть щиты, которые должны блокировать урон. Но по итогу когда ставишь щит будучи в броне, урон проходит, как будто нет ни щита ни брони.
В одиночке все прекрасно работает. На все условия можете не обращать внимание, без них было все то же самое.
Как я понял вся проблема кроется в LivingHurtEvent, где то читал, что он не работает на сервере.

Можно ли это как то исправить, и если нет, то как можно реализовать по-другому?

Java:
   @SubscribeEvent
   public void invoke(LivingHurtEvent event) {
      if(event.entityLiving instanceof EntityPlayer) {
         EntityPlayer player = (EntityPlayer)event.entityLiving;
         if(!event.source.isUnblockable() && !event.source.isFireDamage()) {
            if(player.isBlocking()) {
               ItemStack item = player.getCurrentEquippedItem();
               if(item != null && (item.getItem() instanceof net.minecraft.item.ItemSword || item.getItem() instanceof ItemShield) ) {
                     item.damageItem((int)event.ammount, player);
                           event.ammount = 0.0F;
                           event.setCanceled(true);
                  }
            }
         }
      }
   }
 
1,159
38
544
где то читал, что он не работает на сервере
Чушь. Скорее всего другой мод отменяет этот евент. Именно поэтому до твоего обработчика евента не доходит очередь.

Чтобы проверить это, установи высокий приоритет в аннотации @SubscribeEvent при помощи параметра priority.
+ пройдись отладчиком по коду, который вызывает методы, помеченные @SubscribeEvent'ом и убедись что твой метод вообще есть в списке методов, прослушивающих евент.
 

timaxa007

Модератор
5,831
409
672
где то читал, что он не работает на сервере.
Не знаю где ты это читал. Он скорее не работает на клиентской стороне.
1591318278851.png
урон проходит, как будто нет ни щита ни брони.
Если без эффекта урона, просто отнимаются жизни, то под этот эвент не будет работать.
 
Чушь. Скорее всего другой мод отменяет этот евент
В том то и дело, то нет. В одиночке работает все как надо, на сервере нет, вообще без других модов и плагинов.

Если без эффекта урона, просто отнимаются жизни,
Эффект урона есть. В алмазной броне без щита отнимает по 1 хп, ставлю щит отнимает по 5.
 
1,159
38
544
Отладчиком говорю проверь и приоритет поставь. И покажи как регаешь обраьотчик евентов
 

tox1cozZ

aka Agravaine
8,456
598
2,893
Чушь. Скорее всего другой мод отменяет этот евент. Именно поэтому до твоего обработчика евента не доходит очередь.
Все слушатели срабатывают даже если один из них до этого отменил событие.
 
Так эти исходы битые
До этого стояла другая версия, была та же проблема.

UPD. Поставил версию с курсфорджа, проблема та же, только вдобавок еще и через раз срабатывает.
 
Последнее редактирование:
1,159
38
544
1,159
38
544

jopi

Попрошайка
1,421
30
260
В том то и дело, то нет. В одиночке работает все как надо, на сервере нет, вообще без других модов и плагинов.


Эффект урона есть. В алмазной броне без щита отнимает по 1 хп, ставлю щит отнимает по 5.
Во первых ты не используешь !world.isRemote хотя надо-бы
во вторых ты сам-же этот евент б&@^ь и отменяешь event.setCancelled(true);
Если ты хочешь что-бы удар прошел а урон нет, изменяешь event.ammount т.е. кол-во урона на свое, и НЕ ОТМЕНЯЕШЬ евент
 

jopi

Попрошайка
1,421
30
260
Чушь. Скорее всего другой мод отменяет этот евент. Именно поэтому до твоего обработчика евента не доходит очередь.

Чтобы проверить это, установи высокий приоритет в аннотации @SubscribeEvent при помощи параметра priority.
+ пройдись отладчиком по коду, который вызывает методы, помеченные @SubscribeEvent'ом и убедись что твой метод вообще есть в списке методов, прослушивающих евент.
если отменяют - event.setCancelled(false);
и приоритет на минимум, так он будет выполняться по сути последним и мы его переделываем на без отмены
если логически подумать
 
7,099
324
1,510
Если другой обработчик до нашего отменил эвент, разве эвент дойдет до нашего обработчика?
 
во вторых ты сам-же этот евент б&@^ь и отменяешь event.setCancelled(true);
в том то и прикол, что он не отменяется, тогда бы урона вообще не было. В одиночке работает все нормально.

Я попробовал этот ивент обработать через плагин - та же тема. В итоге решил использовать ивент EntityDamageByEntityEvent. Вроде работает.

Я думаю буду пока не сломается, буду ездить на этом костыле.
 
Сверху