Игре не нравится метод в миксине(говорит что не та вариация)

Версия Minecraft
1.21.0
API
Fabric
39
3
3
Миксин на класс LivingEntity
Оригинальный код короток и понятен
Java:
public boolean disablesShield() {
        return this.getWeaponStack().getItem() instanceof AxeItem;
    }
Я пытался сделать чтобы щит отходил на кулдаун, когда он принимает 20 урона и более
Java:
@Inject(method = {"disablesShield"}, at = @At(value = "INVOKE"), cancellable = true)
    public boolean disablesShield(float damageAmount, DamageSource damageSource, CallbackInfoReturnable<Boolean> info) {
        info.cancel();
        return damageAmount >= 20;
    }
В итоге крашлог вываливает что ожидается метод вариации V, а приходит метод Z, я не знаю что это значит и что с этим делать, помогите пожалуйста
 
Краш-лог
Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Invalid descriptor on awakenedmod.mixins.json:LivingEntityMixin from mod awakenedmod->@Inject::disablesShield(FLnet/minecraft/entity/damage/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Z! Expected (Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V but found (FLnet/minecraft/entity/damage/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Z [INJECT Applicator Phase -> awakenedmod.mixins.json:LivingEntityMixin from mod awakenedmod -> Apply Injections ->  -> Inject -> awakenedmod.mixins.json:LivingEntityMixin from mod awakenedmod->@Inject::disablesShield(FLnet/minecraft/entity/damage/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Z]
Краш-лог:
Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Invalid descriptor on awakenedmod.mixins.json:LivingEntityMixin from mod awakenedmod->@Inject::disablesShield(FLnet/minecraft/entity/damage/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Z! Expected (Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V but found (FLnet/minecraft/entity/damage/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Z [INJECT Applicator Phase -> awakenedmod.mixins.json:LivingEntityMixin from mod awakenedmod -> Apply Injections ->  -> Inject -> awakenedmod.mixins.json:LivingEntityMixin from mod awakenedmod->@Inject::disablesShield(FLnet/minecraft/entity/damage/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Z]
вариации V, а приходит метод Z
Если не ошибаюсь в ASM V - void, а Z - boolean.
Установи плагин Minecraft Develompent для своей IDE(В последней версии Intelij его вроде как нету, так что откатывать надо), автоматически будет подставлять дескрипторы и все твои ошибки показывать.
Почитай еще официальную документацию от fabric.

UPD: Откуда вообще взялись damageAmount и damageSource?
 
Последнее редактирование:
return damageAmount >= 20;
там же вроде так надо возвращать значение info.setReturnValue(true);
он у тебя от этого и злится метод миксина должен возвращать void(V) а ты возвращаешь boolean(Z)
(наверное)
 
Последнее редактирование:
там же вроде так надо возвращать значение info.setReturnValue(true);
он у тебя от этого и злится метод миксина должен возвращать void(V) а ты возвращаешь boolean(Z)
Большое спасибо, буду знать,
UPD: Откуда вообще взялись damageAmount и damageSource?
из того что я понял, так это то что в действительности я не знаю как сосчитать принимаемый урон и считаю его неправильно и всё :(
но я думаю с этим можно разобраться
 
из того что я понял, так это то что в действительности я не знаю как сосчитать принимаемый урон и считаю его неправильно и всё :(
но я думаю с этим можно разобраться
В методе @Inject должны быть те же параметры что и в оригинале + CallbackInfo/CallBackInfoReturnable.
Так что надо копать дальше от этого метода. Там где он используется скорее всего есть damageAmount.
 
Назад
Сверху