Как получить было ли изменено кол-во хп у игрока

Версия Minecraft
1.7.10
129
6
18
В общем сделал я кровотечение у себя на сервере. Ктр появляется при нескольких ударах по игроку. На сервере есть регионы с неуезвимостью внутри них. И когда 1 игрок бьёт другого в таком регионе то у игрока появляется кровотечение. Так вот как от этого избавиться?

У меня было несколько идей:
1. Получать уменьшается ли у игрока хп и если не уменьшается то кровотечения не будет.
2. Проверять на некую неуезвимость в ктр находится игрок и просто отменять есл он находится в этой зоне.

Заранее спасибо за помощь!!)
 
129
6
18
Java:
    @SubscribeEvent
    public void onAttack(LivingHurtEvent e)
    {  
        if (e.entityLiving instanceof EntityPlayer)
        {          
       EntityPlayer player = (EntityPlayer) e.entityLiving;          
            x++;
            if(x == random_hits){
                ChatComponentText test = new ChatComponentText(EnumChatFormatting.RED.toString() + "I am bleeding. Please stop bleeding.");
                    player.addChatMessage(test);
            player.addPotionEffect(new PotionEffect(EffectReg.bleeding.id, 2400));
            x = 0;
            }
           
             
        }
       
    }
вот как у меня реализовывается
 
1,057
50
234
Что мешает чекать на наличие региона? Подключи либу gameforEA с рубаккита и чекай как тебе надо....
 
7,099
324
1,510
129
6
18
random_hits
х
Что за переменные? Я использую LivingAttackEvent а не LivingHurtEvent .
это пременная нужна для определение после скольки ударов будет даваться кровотечение
Щас бы енумчатформат тустрингом добавлять...
По вопросу - проверяй позицию игрока, если он находится в защищённой зоне - просто отменяй эвент.
просто не знал как это сделал поэтому брал из другого мода

Что мешает чекать на наличие региона? Подключи либу gameforEA с рубаккита и чекай как тебе надо....
не понимаю что она делает и как работает
 
7,099
324
1,510
Отправляй событие AttackEntityEvent и проверяй, завершено ли оно. Если завершено - значит, какой-то плагин отменил.
 
129
6
18
Отправляй событие AttackEntityEvent и проверяй, завершено ли оно. Если завершено - значит, какой-то плагин отменил.
Java:
       boolean stat;


      
        public void AttackEvent(AttackEntityEvent b){
           if(!b.isCanceled()){
               stat = true;
           }else{
               stat = false;
           }
       }
(вот как проверял тип отменено или нет ну а там где эфект выдаётся просто проверял на false)
попробовал но не получилось
 
129
6
18
Почитай: Работа с событиями.

У тебя пропущена аннотация @SubscribeEvent
Java:
       boolean stat;


       @SubscribeEvent
       public void AttackEvent(AttackEntityEvent b){
          if(!b.isCanceled()){
              stat = true;
          }else{
              stat = false;
          }
      }
      
    @SubscribeEvent
    public void onAttack(LivingHurtEvent e)
    {   
            if(stat == true){
Попробовал но чёт не пошло(
Вот скрин региона и флага
Снимок.PNG
 
3,005
192
592
Ну, для начала:
1 - Ты уверен, что AttackEntityEvent вызывается раньше, чем LivingHurtEvent?
2 - У тебя проверка (!b.isCanceled()) не правильная, потому что не факт, что моды, использующие проверку после тебя не отменят эвент.
просто проверял на false
3 - В коде выше - у тебя
 
129
6
18
1 - Ты уверен, что AttackEntityEvent вызывается раньше, чем LivingHurtEvent?
Я пробовал LivingAttackEvent и AttackEntityEvent
artemka3112 написал(а):
просто проверял на false
3 - В коде выше - у тебя
artemka3112 написал(а):
if(stat == true)
Я менял значения и на true и на false со всеми вариантами. + даже если я бы был не прав то просто бы в регионе давалось кровотечение а вне его нет.
2 - У тебя проверка (!b.isCanceled()) не правильная, потому что не факт, что моды, использующие проверку после тебя не отменят эвент.
А вот с этого можно поподробней. (Куда копать?)
 
154
17
97
Ну, я думаю нужно установить приоритет ивенту самый последний, но с плагинами это все равно не спасет, ибо события плагинам отправляются после того, как прошли по всем модам (по крайней мере на всяких каулдронах и термосах). Костыльный вариант решения, которое первое пришло в голову - собирать все эти ивенты в очередь, а в следующем тике смотреть, были ли они отменены и делать действия.
Ну а по хорошему - подключать в зависимости баккит и worlguard, и вручную проверять флаги...
 
Сверху