package pers.neige.neigeitems.ref.entity;

import org.inksnow.ankhinvoke.comments.HandleBy;
import pers.neige.neigeitems.ref.argument.RefAnchor;
import pers.neige.neigeitems.ref.damagesource.RefDamageSource;
import pers.neige.neigeitems.ref.nbt.RefNmsItemStack;
import pers.neige.neigeitems.ref.world.RefVec3;

@HandleBy(reference = "net/minecraft/world/entity/LivingEntity", predicates = "craftbukkit_version:[v1_17_R1,)")
@HandleBy(reference = "net/minecraft/server/v1_12_R1/EntityLiving", predicates = "craftbukkit_version:[v1_12_R1,v1_17_R1)")
public abstract class RefEntityLiving extends RefEntity {
    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;yBodyRot:F", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;aH:F", predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_15_R1/EntityLiving;aI:F", predicates = "craftbukkit_version:[v1_15_R1,v1_16_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;aK:F", predicates = "craftbukkit_version:[v1_14_R1,v1_15_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;aQ:F", predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aN:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float yBodyRot;
    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;yBodyRotO:F", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;aI:F", predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_15_R1/EntityLiving;aJ:F", predicates = "craftbukkit_version:[v1_15_R1,v1_16_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;aL:F", predicates = "craftbukkit_version:[v1_14_R1,v1_15_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;aR:F", predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aO:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float yBodyRotO;
    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;yHeadRot:F", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;aJ:F", predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_15_R1/EntityLiving;aK:F", predicates = "craftbukkit_version:[v1_15_R1,v1_16_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;aM:F", predicates = "craftbukkit_version:[v1_14_R1,v1_15_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;aS:F", predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aP:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float yHeadRot;
    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;yHeadRotO:F", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;aK:F", predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_15_R1/EntityLiving;aL:F", predicates = "craftbukkit_version:[v1_15_R1,v1_16_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;aN:F", predicates = "craftbukkit_version:[v1_14_R1,v1_15_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;aT:F", predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aQ:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float yHeadRotO;

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;attackStrengthTicker:I", useAccessor = true, predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;at:I", useAccessor = true, predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_15_R1/EntityLiving;aB:I", useAccessor = true, predicates = "craftbukkit_version:[v1_15_R1,v1_16_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;aD:I", useAccessor = true, predicates = "craftbukkit_version:[v1_14_R1,v1_15_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;aH:I", useAccessor = true, predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aE:I", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public int attackStrengthTicker;

    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;be:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float xxa;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;bf:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float yya;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;bg:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float zza;

    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aW:F", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float oRun;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aX:F", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float run;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aY:F", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float animStep;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aZ:F", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float animStep0;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;ba:F", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float rotOffs;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aC:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float oAttackAnim;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;aD:F", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public float attackAnim;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;bp:I", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public int useItemRemaining;
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;bq:I", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public int fallFlyTicks;


    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;lastDamageSource:Lnet/minecraft/world/damagesource/DamageSource;", useAccessor = true, predicates = "craftbukkit_version:[v1_17_R1,)")
    public RefDamageSource lastDamageSource;

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;b(Lnet/minecraft/server/v1_12_R1/EnumHand;)Lnet/minecraft/server/v1_12_R1/ItemStack;", predicates = "craftbukkit_version:[v1_12_R1,v1_17_R1)")
    public native RefNmsItemStack getItemInHand(RefEnumHand hand);

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;setItemInHand(Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;)V", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;a(Lnet/minecraft/server/v1_12_R1/EnumHand;Lnet/minecraft/server/v1_12_R1/ItemStack;)V", predicates = "craftbukkit_version:[v1_12_R1,v1_17_R1)")
    public native void setItemInHand(RefEnumHand hand, RefNmsItemStack itemStack);

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;swing(Lnet/minecraft/world/InteractionHand;)V", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;swingHand(Lnet/minecraft/server/v1_16_R1/EnumHand;)V", predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;a(Lnet/minecraft/server/v1_12_R1/EnumHand;)V", predicates = "craftbukkit_version:[v1_12_R1,v1_16_R1)")
    public native void swing(RefEnumHand hand);

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;swing(Lnet/minecraft/world/InteractionHand;Z)V", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_16_R1/EntityLiving;swingHand(Lnet/minecraft/server/v1_16_R1/EnumHand;Z)V", predicates = "craftbukkit_version:[v1_16_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_15_R1/EntityLiving;a(Lnet/minecraft/server/v1_15_R1/EnumHand;Z)V", predicates = "craftbukkit_version:[v1_15_R1,v1_16_R1)")
    public native void swing(RefEnumHand hand, boolean fromServerPlayer);

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;jumpFromGround()V", useAccessor = true, predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;jump()V", useAccessor = true, predicates = "craftbukkit_version:[v1_14_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;cH()V", useAccessor = true, predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;cu()V", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public native void jumpFromGround();

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;getYHeadRot()F", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;getHeadRotation()F", predicates = "craftbukkit_version:[v1_12_R1,v1_17_R1)")
    public native float getHeadRotation();

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;setYHeadRot(F)V", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;setHeadRotation(F)V", predicates = "craftbukkit_version:[v1_12_R1,v1_17_R1)")
    public native void setHeadRotation(float headRotation);

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;lookAt(Lnet/minecraft/commands/arguments/EntityAnchorArgument$Anchor;Lnet/minecraft/world/phys/Vec3;)V", predicates = "craftbukkit_version:[v1_17_R1,)")
    public native void lookAt(RefAnchor anchorPoint, RefVec3 target);

    @HandleBy(reference = "Lnet/minecraft/world/entity/LivingEntity;onClimbable()Z", predicates = "craftbukkit_version:[v1_17_R1,)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_14_R1/EntityLiving;isClimbing()Z", predicates = "craftbukkit_version:[v1_14_R1,v1_17_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_13_R1/EntityLiving;z_()Z", predicates = "craftbukkit_version:[v1_13_R1,v1_14_R1)")
    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;m_()Z", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public native boolean onClimbable();

    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;a(FFF)V", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public native void travel(float xxa, float yya, float zza);

    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;g(FF)F", useAccessor = true, predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public native float tickHeadTurn(float bodyRotation, float headRotation);

    @HandleBy(reference = "Lnet/minecraft/server/v1_12_R1/EntityLiving;cP()Z", predicates = "craftbukkit_version:[v1_12_R1,v1_13_R1)")
    public native boolean isFallFlying();
}
