package net.minecraft.world.entity.player;

import com.bergerkiller.generated.net.minecraft.world.entity.player.PlayerAbilitiesHandle;

class PlayerAbilities {
#if version >= 1.17
    public boolean isInvulnerable:invulnerable;
    public boolean isFlying:flying;
    public boolean canFly:mayfly;
    public boolean canInstantlyBuild:instabuild;
    public boolean mayBuild;
#else
    public boolean isInvulnerable;
    public boolean isFlying;
    public boolean canFly;
    public boolean canInstantlyBuild;
    public boolean mayBuild;
#endif

    // Changed from float to double in MC 1.13
#if version >= 1.17
    public optional float flySpeed_float:###;
    public optional double flySpeed_double:flySpeed:flyingSpeed;
#elseif version >= 1.13
    public optional float flySpeed_float:###;
    public optional double flySpeed_double:flySpeed;
#else
    public optional float flySpeed_float:flySpeed;
    public optional double flySpeed_double:###;
#endif
    <code>
    public void setFlySpeed(double flySpeed) {
        if (T.flySpeed_double.isAvailable()) {
            T.flySpeed_double.setDouble(getRaw(), flySpeed);
        } else {
            T.flySpeed_float.setFloat(getRaw(), (float) flySpeed);
        }
    }

    public double getFlySpeed() {
        if (T.flySpeed_double.isAvailable()) {
            return T.flySpeed_double.getDouble(getRaw());
        } else {
            return (double) T.flySpeed_float.getFloat(getRaw());
        }
    }
    </code>

#if version >= 1.17
    public float walkSpeed:walkingSpeed;
#else
    public float walkSpeed;
#endif

    public (PlayerAbilitiesHandle) PlayerAbilities();
}
