    001    package net.minecraft.entity.player;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import net.minecraft.nbt.NBTTagCompound;
    006
    007    public class PlayerCapabilities
    008    {
    009        /** Disables player damage. */
    010        public boolean disableDamage = false;
    011
    012        /** Sets/indicates whether the player is flying. */
    013        public boolean isFlying = false;
    014
    015        /** whether or not to allow the player to fly when they double jump. */
    016        public boolean allowFlying = false;
    017
    018        /**
    019         * Used to determine if creative mode is enabled, and therefore if items should be depleted on usage
    020         */
    021        public boolean isCreativeMode = false;
    022
    023        /** Indicates whether the player is allowed to modify the surroundings */
    024        public boolean allowEdit = true;
    025        private float flySpeed = 0.05F;
    026        private float walkSpeed = 0.1F;
    027
    028        public void writeCapabilitiesToNBT(NBTTagCompound par1NBTTagCompound)
    029        {
    030            NBTTagCompound var2 = new NBTTagCompound();
    031            var2.setBoolean("invulnerable", this.disableDamage);
    032            var2.setBoolean("flying", this.isFlying);
    033            var2.setBoolean("mayfly", this.allowFlying);
    034            var2.setBoolean("instabuild", this.isCreativeMode);
    035            var2.setBoolean("mayBuild", this.allowEdit);
    036            var2.setFloat("flySpeed", this.flySpeed);
    037            var2.setFloat("walkSpeed", this.walkSpeed);
    038            par1NBTTagCompound.setTag("abilities", var2);
    039        }
    040
    041        public void readCapabilitiesFromNBT(NBTTagCompound par1NBTTagCompound)
    042        {
    043            if (par1NBTTagCompound.hasKey("abilities"))
    044            {
    045                NBTTagCompound var2 = par1NBTTagCompound.getCompoundTag("abilities");
    046                this.disableDamage = var2.getBoolean("invulnerable");
    047                this.isFlying = var2.getBoolean("flying");
    048                this.allowFlying = var2.getBoolean("mayfly");
    049                this.isCreativeMode = var2.getBoolean("instabuild");
    050
    051                if (var2.hasKey("flySpeed"))
    052                {
    053                    this.flySpeed = var2.getFloat("flySpeed");
    054                    this.walkSpeed = var2.getFloat("walkSpeed");
    055                }
    056
    057                if (var2.hasKey("mayBuild"))
    058                {
    059                    this.allowEdit = var2.getBoolean("mayBuild");
    060                }
    061            }
    062        }
    063
    064        public float getFlySpeed()
    065        {
    066            return this.flySpeed;
    067        }
    068
    069        @SideOnly(Side.CLIENT)
    070        public void setFlySpeed(float par1)
    071        {
    072            this.flySpeed = par1;
    073        }
    074
    075        public float getWalkSpeed()
    076        {
    077            return this.walkSpeed;
    078        }
    079
    080        @SideOnly(Side.CLIENT)
    081        public void func_82877_b(float par1)
    082        {
    083            this.walkSpeed = par1;
    084        }
    085    }