Не могу найти эвент

Версия Minecraft
1.12.2
122
4
6
Всем снова привет. Все возможное перерыл, но так и не нашел эвент где (при ударе топором по щиту у щита появляется задержка использования). Кто знает где эта вещь.
 
Решение
Имеется ввиду кулдаун для щита?
Вроде как для этого события эвента нет.
Можно попробовать проверять что игрок использовал щит и появился кулдаун в эвенте LivingEntityUseItemEvent.Finish.
Код чисто для примера, писал на коленке, и скорее всего нужно что-то поправить...
Java:
@SubscribeEvent
public static void onPlayerUseShield(LivingEntityUseItemEvent.Finish event) {
    if (event.getEntityLiving().getEntityWorld().isRemote) return;
    //Проверить, что сущность является игроком
    if (event.getEntityLiving() instanceof EntityPlayer) {
        EntityPlayer player = (EntityPlayer) event.getEntityLiving();
        //Получить предмет в руке у игрока
        ItemStack stack = event.getResultStack();
        if (stack != null && stack !=...
916
22
333
Имеется ввиду кулдаун для щита?
Вроде как для этого события эвента нет.
Можно попробовать проверять что игрок использовал щит и появился кулдаун в эвенте LivingEntityUseItemEvent.Finish.
Код чисто для примера, писал на коленке, и скорее всего нужно что-то поправить...
Java:
@SubscribeEvent
public static void onPlayerUseShield(LivingEntityUseItemEvent.Finish event) {
    if (event.getEntityLiving().getEntityWorld().isRemote) return;
    //Проверить, что сущность является игроком
    if (event.getEntityLiving() instanceof EntityPlayer) {
        EntityPlayer player = (EntityPlayer) event.getEntityLiving();
        //Получить предмет в руке у игрока
        ItemStack stack = event.getResultStack();
        if (stack != null && stack != ItemStack.EMPTY && stack.getItem() instanceof ItemShield) {
            //Проверить, что кулдаун у щита больше нуля
            if (player.getCooldownTracker().getCooldown(stack.getItem()) > 0) {
                //Что-то сделать
            }
        }
    }
}

P.S. Если не ошибаюсь, ещё существует пакет, который отправляется клиенту при создании "кулдауна", но это не точно...
 
Последнее редактирование:
122
4
6
Код чисто для примера
Интересный метод сохраню себе.

Я тут тоже экспериментировал
Java:
@SubscribeEvent
    public void onHurt(LivingHurtEvent e) {
        DamageSource source = e.getSource();
        Entity entity = e.getEntity();
        if(entity instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) entity;
            EnumHand hand = player.getActiveHand();
            ItemStack stack = player.getHeldItem(hand);
            //проверка (что у игрока в руке, активен ли этот предмет, и какой тип использования у предмета)
            if(player.getHeldItem(hand).getItem() == ItemsInit.SWORD && player.isHandActive() && stack.getItemUseAction() == EnumAction.BLOCK) {
                Object attacker = e.getSource().getTrueSource();
                if(attacker instanceof EntityLivingBase) {
                    EntityLivingBase entityAttacker = (EntityLivingBase) attacker;
                    EnumHand hand_ = entityAttacker.getActiveHand();
                    //проверка (есть ли предмет у атакуещего игрока)
                    if(entityAttacker.getHeldItem(hand_).getItem() == ItemsInit.AXE) {
                        System.out.print("--------1");
                        //что должно происходить...
                    }
                }
            }
        }
    }
Остается все же вопрос где в ванильном коде майна происходит выполнение (накидывание кд когда у игрока щит, а его атакуют топором)
 
916
22
333
77
4
35
А вызывается блокировка из метода attackEntityFrom класса net.minecraft.entity.EntityLivingBase методом blockUsingShield

Если хочешь отклчить кд щитов то надо миксином лезть в метод blockUsingShield класса net.minecraft.entity.player.EntityPlayer и делать road block injection в начале метода
 
Сверху