@ -5037,8 +5037,6 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5037,8 +5037,6 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					    @Override   
			
		
	
		
			
				
					    public  void  update ( Boolean  newSystem )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        //if(!newSystem)
   
			
		
	
		
			
				
					        //    return;
   
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					            ReentrantReadWriteLock  reentrantLock  =  ( ReentrantReadWriteLock )  this . updateLock ;   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5054,26 +5052,27 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5054,26 +5052,27 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if  ( this . updateLock . writeLock ( ) . tryLock ( ) )  {   
			
		
	
		
			
				
					            try  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( ! this . isAlive ( )  & &  this . isEnteredWorld ( ) )  {   
			
		
	
		
			
				
					                    if ( ! this . timestamps . containsKey ( "DeathTime" ) ) {   
			
		
	
		
			
				
					                        this . timestamps . put ( "DeathTime" , System . currentTimeMillis ( ) ) ;   
			
		
	
		
			
				
					                    } else  if ( ( System . currentTimeMillis ( )  -  this . timestamps . get ( "DeathTime" ) )  >  600000 )   
			
		
	
		
			
				
					                        try  {   
			
		
	
		
			
				
					                        forceRespawn ( this ) ;   
			
		
	
		
			
				
					                        } catch ( Exception  e ) {   
			
		
	
		
			
				
					                            this . updateLock . writeLock ( ) . unlock ( ) ;   
			
		
	
		
			
				
					                        }   
			
		
	
		
			
				
					                    return ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                this . updateLocation ( ) ;   
			
		
	
		
			
				
					                //this.updateMovementState();
   
			
		
	
		
			
				
					                //this.updateRegen();
   
			
		
	
		
			
				
					                this . updateMovementState ( ) ;   
			
		
	
		
			
				
					                this . doRegen ( ) ;   
			
		
	
		
			
				
					                if  ( this . combatStats  = =  null )  {   
			
		
	
		
			
				
					                    this . combatStats  =  new  PlayerCombatStats ( this ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                if ( this . combatStats  ! =  null ) {   
			
		
	
		
			
				
					                    this . combatStats . update ( ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( this . getStamina ( )  <  10 )  {   
			
		
	
		
			
				
					                    if  ( this . getAltitude ( )  >  0  | |  this . getDesiredAltitude ( )  >  0 )  {   
			
		
	
		
			
				
					                        PlayerCharacter . GroundPlayer ( this ) ;   
			
		
	
		
			
				
					                        this . updateRegen ( ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5090,7 +5089,6 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5090,7 +5089,6 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if ( this . level  <  10  & &  this . enteredWorld )  {   
			
		
	
		
			
				
					                   // this.setLevel((short) 10);
   
			
		
	
		
			
				
					                    while  ( this . level  <  10 )  {   
			
		
	
		
			
				
					                        grantXP ( Experience . getBaseExperience ( this . level  +  1 )  -  this . exp ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5101,10 +5099,8 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5101,10 +5099,8 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if ( this . isFlying ( ) ) {   
			
		
	
		
			
				
					                    //if (!AbstractCharacter.CanFly(this)) {
   
			
		
	
		
			
				
					                    if ( this . effects . containsKey ( "MoveBuff" ) ) {   
			
		
	
		
			
				
					                        GroundPlayer ( this ) ;   
			
		
	
		
			
				
					                        //ChatManager.chatSystemInfo(this, "You Cannot Fly While Having A MovementBuff");
   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					                    if ( ! this . timestamps . containsKey ( "StunGrounded" ) )   
			
		
	
		
			
				
					                        this . timestamps . put ( "StunGrounded" , System . currentTimeMillis ( )  -  1000L ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5330,206 +5326,6 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5330,206 +5326,6 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override   
			
		
	
		
			
				
					    public  void  updateRegen ( )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( true )   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        float  healthRegen  =  0f ;   
			
		
	
		
			
				
					        float  manaRegen  =  0f ;   
			
		
	
		
			
				
					        float  stamRegen  =  0f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        boolean  updateClient  =  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Early exit if char is dead or disconnected
   
			
		
	
		
			
				
					        if  ( ( this . isAlive ( )  = =  false )   
			
		
	
		
			
				
					                | |  ( this . isActive ( )  = =  false )  | |  this . getLoc ( ) . x  = =  0  & &  this . getLoc ( ) . z  = =  0 )   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Calculate Regen amount from last simulation tick
   
			
		
	
		
			
				
					        switch  ( this . movementState )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            case  IDLE :   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                healthRegen  =  ( ( this . healthMax  *  MBServerStatics . HEALTH_REGEN_IDLE )  +  MBServerStatics . HEALTH_REGEN_IDLE_STATIC )  *  ( getRegenModifier ( ModType . HealthRecoverRate ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( this . isCasting ( )  | |  this . isItemCasting ( ) )   
			
		
	
		
			
				
					                    healthRegen  * =  . 75f ;   
			
		
	
		
			
				
					                // Characters regen mana when in only walk mode and idle
   
			
		
	
		
			
				
					                if  ( this . walkMode )   
			
		
	
		
			
				
					                    manaRegen  =  ( ( this . manaMax  *  MBServerStatics . MANA_REGEN_IDLE )  *  getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                else  if  ( ! this . isCasting ( )  & &  ! this . isItemCasting ( ) )   
			
		
	
		
			
				
					                    manaRegen  =  ( ( this . manaMax  *  MBServerStatics . MANA_REGEN_RUN )  *  getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                else   
			
		
	
		
			
				
					                    manaRegen  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( ! PlayerCharacter . CanBreathe ( this ) )   
			
		
	
		
			
				
					                    stamRegen  =  MBServerStatics . STAMINA_REGEN_SWIM ;   
			
		
	
		
			
				
					                else  if  ( ( ! this . isCasting ( )  & &  ! this . isItemCasting ( ) )  | |  this . lastMovementState . equals ( MovementState . FLYING ) )   
			
		
	
		
			
				
					                    stamRegen  =  MBServerStatics . STAMINA_REGEN_IDLE  *  getRegenModifier ( ModType . StaminaRecoverRate ) ;   
			
		
	
		
			
				
					                else   
			
		
	
		
			
				
					                    stamRegen  =  0 ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  SITTING :   
			
		
	
		
			
				
					                healthRegen  =  ( ( this . healthMax  *  MBServerStatics . HEALTH_REGEN_SIT )  +  MBServerStatics . HEALTH_REGEN_SIT_STATIC )  *  getRegenModifier ( ModType . HealthRecoverRate ) ;   
			
		
	
		
			
				
					                manaRegen  =  ( this . manaMax  *  MBServerStatics . MANA_REGEN_SIT )  *  ( getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                stamRegen  =  MBServerStatics . STAMINA_REGEN_SIT  *  getRegenModifier ( ModType . StaminaRecoverRate ) ;   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  RUNNING :   
			
		
	
		
			
				
					                if  ( this . walkMode  = =  true )  {   
			
		
	
		
			
				
					                    healthRegen  =  ( ( this . healthMax  *  MBServerStatics . HEALTH_REGEN_WALK )  +  MBServerStatics . HEALTH_REGEN_IDLE_STATIC )  *  getRegenModifier ( ModType . HealthRecoverRate ) ;   
			
		
	
		
			
				
					                    manaRegen  =  this . manaMax  *  MBServerStatics . MANA_REGEN_WALK  *  getRegenModifier ( ModType . ManaRecoverRate ) ;   
			
		
	
		
			
				
					                    stamRegen  =  MBServerStatics . STAMINA_REGEN_WALK ;   
			
		
	
		
			
				
					                }  else  {   
			
		
	
		
			
				
					                    healthRegen  =  0 ;   
			
		
	
		
			
				
					                    manaRegen  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    if  ( this . combat  = =  true )   
			
		
	
		
			
				
					                        stamRegen  =  MBServerStatics . STAMINA_REGEN_RUN_COMBAT ;   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        stamRegen  =  MBServerStatics . STAMINA_REGEN_RUN_NONCOMBAT ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  FLYING :   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                float  seventyFive  =  this . staminaMax  *  . 75f ;   
			
		
	
		
			
				
					                float  fifty  =  this . staminaMax  *  . 5f ;   
			
		
	
		
			
				
					                float  twentyFive  =  this . staminaMax  *  . 25f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( this . getDesiredAltitude ( )  = =  0  & &  this . getAltitude ( )  < =  10 )  {   
			
		
	
		
			
				
					                    if  ( this . isCombat ( ) )   
			
		
	
		
			
				
					                        stamRegen  =  0 ;   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        stamRegen  =  MBServerStatics . STAMINA_REGEN_IDLE  *  getRegenModifier ( ModType . StaminaRecoverRate ) ;   
			
		
	
		
			
				
					                }  else  if  ( ! this . useFlyMoveRegen ( ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    healthRegen  =  ( ( this . healthMax  *  MBServerStatics . HEALTH_REGEN_IDLE )  +  MBServerStatics . HEALTH_REGEN_IDLE_STATIC )  *  ( getRegenModifier ( ModType . HealthRecoverRate ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    if  ( this . isCasting ( )  | |  this . isItemCasting ( ) )   
			
		
	
		
			
				
					                        healthRegen  * =  . 75f ;   
			
		
	
		
			
				
					                    // Characters regen mana when in only walk mode and idle
   
			
		
	
		
			
				
					                    if  ( this . walkMode )   
			
		
	
		
			
				
					                        manaRegen  =  ( this . manaMax  *  MBServerStatics . MANA_REGEN_IDLE  +  ( this . getSpiMod ( )  *  . 015f ) )  *  ( getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                    else  if  ( ! this . isCasting ( )  & &  ! this . isItemCasting ( ) )   
			
		
	
		
			
				
					                        manaRegen  =  ( this . manaMax  *  MBServerStatics . MANA_REGEN_IDLE  +  ( this . getSpiMod ( )  *  . 015f ) )  *  ( getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        manaRegen  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    if  ( ! this . isItemCasting ( )  & &  ! this . isCasting ( )  | |  this . getTakeOffTime ( )  ! =  0 )   
			
		
	
		
			
				
					                        stamRegen  =  MBServerStatics . STAMINA_REGEN_FLY_IDLE ;   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        stamRegen  =  - 1f ;   
			
		
	
		
			
				
					                }  else  if  ( this . walkMode  = =  true )  {   
			
		
	
		
			
				
					                    healthRegen  =  ( ( this . healthMax  *  MBServerStatics . HEALTH_REGEN_WALK )  +  MBServerStatics . HEALTH_REGEN_IDLE_STATIC )  *  getRegenModifier ( ModType . HealthRecoverRate ) ;   
			
		
	
		
			
				
					                    manaRegen  =  ( ( this . manaMax  *  MBServerStatics . MANA_REGEN_WALK )  +  ( this . getSpiMod ( )  *  . 015f ) )  *  ( getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                    stamRegen  =  MBServerStatics . STAMINA_REGEN_FLY_WALK ;   
			
		
	
		
			
				
					                }  else  {   
			
		
	
		
			
				
					                    healthRegen  =  0 ;   
			
		
	
		
			
				
					                    manaRegen  =  0 ;   
			
		
	
		
			
				
					                    if  ( this . isCombat ( ) )   
			
		
	
		
			
				
					                        stamRegen  =  MBServerStatics . STAMINA_REGEN_FLY_RUN_COMBAT ;   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        stamRegen  =  MBServerStatics . STAMINA_REGEN_FLY_RUN ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                float  oldStamina  =  this . stamina . get ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if  ( FastMath . between ( oldStamina ,  0 ,  twentyFive )  & &  ! this . wasTripped25 )  {   
			
		
	
		
			
				
					                    updateClient  =  true ;   
			
		
	
		
			
				
					                    this . wasTripped25  =  true ;   
			
		
	
		
			
				
					                    this . wasTripped50  =  false ;   
			
		
	
		
			
				
					                    this . wasTripped75  =  false ;   
			
		
	
		
			
				
					                }  else  if  ( FastMath . between ( oldStamina ,  twentyFive ,  fifty )  & &  ! this . wasTripped50 )  {   
			
		
	
		
			
				
					                    updateClient  =  true ;   
			
		
	
		
			
				
					                    this . wasTripped25  =  false ;   
			
		
	
		
			
				
					                    this . wasTripped50  =  true ;   
			
		
	
		
			
				
					                    this . wasTripped75  =  false ;   
			
		
	
		
			
				
					                }  else  if  ( FastMath . between ( oldStamina ,  fifty ,  seventyFive )  & &  ! this . wasTripped75 )  {   
			
		
	
		
			
				
					                    updateClient  =  true ;   
			
		
	
		
			
				
					                    this . wasTripped25  =  false ;   
			
		
	
		
			
				
					                    this . wasTripped50  =  false ;   
			
		
	
		
			
				
					                    this . wasTripped75  =  true ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					            case  SWIMMING :   
			
		
	
		
			
				
					                if  ( this . walkMode  = =  true )  {   
			
		
	
		
			
				
					                    healthRegen  =  ( ( this . healthMax  *  MBServerStatics . HEALTH_REGEN_WALK )  +  MBServerStatics . HEALTH_REGEN_IDLE_STATIC )  *  getRegenModifier ( ModType . HealthRecoverRate ) ;   
			
		
	
		
			
				
					                    manaRegen  =  ( ( this . manaMax  *  MBServerStatics . MANA_REGEN_WALK )  +  ( this . getSpiMod ( )  *  . 015f ) )  *  ( getRegenModifier ( ModType . ManaRecoverRate ) ) ;   
			
		
	
		
			
				
					                    stamRegen  =  MBServerStatics . STAMINA_REGEN_SWIM ;   
			
		
	
		
			
				
					                }  else  {   
			
		
	
		
			
				
					                    healthRegen  =  0 ;   
			
		
	
		
			
				
					                    manaRegen  =  0 ;   
			
		
	
		
			
				
					                    stamRegen  =  MBServerStatics . STAMINA_REGEN_SWIM ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    if  ( this . combat  = =  true )   
			
		
	
		
			
				
					                        stamRegen  + =  MBServerStatics . STAMINA_REGEN_RUN_COMBAT ;   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        stamRegen  + =  MBServerStatics . STAMINA_REGEN_RUN_NONCOMBAT ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                break ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Are we drowning?
   
			
		
	
		
			
				
					        if  ( ( this . getStamina ( )  < =  0 )   
			
		
	
		
			
				
					                & &  ( PlayerCharacter . CanBreathe ( this )  = =  false ) )   
			
		
	
		
			
				
					            healthRegen  =  ( this . healthMax  *  - . 03f ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Multiple regen values by current deltaTime
   
			
		
	
		
			
				
					        //     Logger.info("", healthRegen + "");
   
			
		
	
		
			
				
					        healthRegen  * =  getDeltaTime ( ) ;   
			
		
	
		
			
				
					        manaRegen  * =  getDeltaTime ( ) ;   
			
		
	
		
			
				
					        stamRegen  * =  getStamDeltaTime ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        boolean  workedHealth  =  false ;   
			
		
	
		
			
				
					        boolean  workedMana  =  false ;   
			
		
	
		
			
				
					        boolean  workedStamina  =  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        float  old ,  mod ;   
			
		
	
		
			
				
					        while  ( ! workedHealth  | |  ! workedMana  | |  ! workedStamina )  {   
			
		
	
		
			
				
					            if  ( ! this . isAlive ( )  | |  ! this . isActive ( ) )   
			
		
	
		
			
				
					                return ;   
			
		
	
		
			
				
					            if  ( ! workedHealth )  {   
			
		
	
		
			
				
					                old  =  this . health . get ( ) ;   
			
		
	
		
			
				
					                mod  =  old  +  healthRegen ;   
			
		
	
		
			
				
					                if  ( mod  >  this . healthMax )   
			
		
	
		
			
				
					                    mod  =  healthMax ;   
			
		
	
		
			
				
					                else  if  ( mod  < =  0 )  {   
			
		
	
		
			
				
					                    if  ( this . isAlive . compareAndSet ( true ,  false ) )   
			
		
	
		
			
				
					                        killCharacter ( "Water" ) ;   
			
		
	
		
			
				
					                    return ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                workedHealth  =  this . health . compareAndSet ( old ,  mod ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            if  ( ! workedStamina )  {   
			
		
	
		
			
				
					                old  =  this . stamina . get ( ) ;   
			
		
	
		
			
				
					                mod  =  old  +  stamRegen ;   
			
		
	
		
			
				
					                if  ( mod  >  this . staminaMax )   
			
		
	
		
			
				
					                    mod  =  staminaMax ;   
			
		
	
		
			
				
					                else  if  ( mod  <  0 )   
			
		
	
		
			
				
					                    mod  =  0 ;   
			
		
	
		
			
				
					                workedStamina  =  this . stamina . compareAndSet ( old ,  mod ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            if  ( ! workedMana )  {   
			
		
	
		
			
				
					                old  =  this . mana . get ( ) ;   
			
		
	
		
			
				
					                mod  =  old  +  manaRegen ;   
			
		
	
		
			
				
					                if  ( mod  >  this . manaMax )   
			
		
	
		
			
				
					                    mod  =  manaMax ;   
			
		
	
		
			
				
					                else  if  ( mod  <  0 )   
			
		
	
		
			
				
					                    mod  =  0 ;   
			
		
	
		
			
				
					                workedMana  =  this . mana . compareAndSet ( old ,  mod ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( updateClient )   
			
		
	
		
			
				
					            this . syncClient ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Reset this char's frame time.
   
			
		
	
		
			
				
					        this . lastUpdateTime  =  System . currentTimeMillis ( ) ;   
			
		
	
		
			
				
					        this . lastStamUpdateTime  =  System . currentTimeMillis ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  synchronized  void  updateStamRegen ( long  time )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        boolean  disable  =  true ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5818,27 +5614,11 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5818,27 +5614,11 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					        if  ( ! this . timestamps . containsKey ( "SyncClient" ) )   
			
		
	
		
			
				
					            this . timestamps . put ( "SyncClient" ,  System . currentTimeMillis ( ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					            ReentrantReadWriteLock  reentrantLock  =  ( ReentrantReadWriteLock )  this . updateLock ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if ( reentrantLock . writeLock ( ) . isHeldByCurrentThread ( ) ) {   
			
		
	
		
			
				
					                this . updateLock . writeLock ( ) . unlock ( ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            // Check if the lock is currently held by another thread (either for reading or writing)
   
			
		
	
		
			
				
					            if  ( reentrantLock . isWriteLocked ( )  | |  reentrantLock . getReadLockCount ( )  >  0 )  {   
			
		
	
		
			
				
					                return ;  // Or throw an exception if needed
   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        } catch ( Exception  e ) {   
			
		
	
		
			
				
					            Logger . error ( e ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( this . updateLock . writeLock ( ) . tryLock ( ) )  {   
			
		
	
		
			
				
					            try  {   
			
		
	
		
			
				
					        if  ( ! this . isAlive ( )  | |  ! this . enteredWorld  | |  ! this . isActive )  {   
			
		
	
		
			
				
					            this . resetRegenUpdateTime ( ) ;   
			
		
	
		
			
				
					            return ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					                this . updateMovementState ( ) ;    
			
		
	
		
			
				
					        //this.updateMovementState();
   
			
		
	
		
			
				
					        boolean  updateHealth  =  this . regenerateHealth ( ) ;   
			
		
	
		
			
				
					        boolean  updateMana  =  this . regenerateMana ( ) ;   
			
		
	
		
			
				
					        boolean  updateStamina  =  this . regenerateStamina ( ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5846,12 +5626,6 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5846,12 +5626,6 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					        if  ( this . timestamps . get ( "SyncClient" )  +  5000L  >  System . currentTimeMillis ( ) )   
			
		
	
		
			
				
					            if  ( updateHealth  | |  updateMana  | |  updateStamina  | |  consumeStamina )   
			
		
	
		
			
				
					                this . syncClient ( ) ;   
			
		
	
		
			
				
					            }  catch  ( Exception  e )  {   
			
		
	
		
			
				
					                Logger . error ( e ) ;   
			
		
	
		
			
				
					            }  finally  {   
			
		
	
		
			
				
					                this . updateLock . writeLock ( ) . unlock ( ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  boolean  regenerateHealth ( ) {   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5861,7 +5635,8 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5861,7 +5635,8 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					        float  secondsPassed  =  ( currentTime  -  regenTime )  /  1000f ;   
			
		
	
		
			
				
					        float  onePercent  =  this . healthMax  *  0 . 01f ;   
			
		
	
		
			
				
					        float  rate  =  1 . 0f  /  RecoveryType . getRecoveryType ( this ) . healthRate ;   
			
		
	
		
			
				
					        rate  * =  this . getRegenModifier ( ModType . HealthRecoverRate ) ;   
			
		
	
		
			
				
					        //rate *= this.getRegenModifier(ModType.HealthRecoverRate);
   
			
		
	
		
			
				
					        rate  * =  this . combatStats . healthRegen ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( this . isMoving ( )  & &  ! this . walkMode )   
			
		
	
		
			
				
					            rate  =  0 . 0f ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5892,7 +5667,7 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5892,7 +5667,7 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					        float  secondsPassed  =  ( currentTime  -  regenTime )  /  1000f ;   
			
		
	
		
			
				
					        float  onePercent  =  this . manaMax  *  0 . 01f ;   
			
		
	
		
			
				
					        float  rate  =  1 . 0f  /  RecoveryType . getRecoveryType ( this ) . manaRate ;   
			
		
	
		
			
				
					        rate  * =  this . getRegenModifier ( ModType . ManaRecoverRate ) ;   
			
		
	
		
			
				
					        rate  * =  this . combatStats . manaRegen ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if ( this . isMoving ( )  & &  ! this . walkMode )   
			
		
	
		
			
				
					            rate  =  0 . 0f ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5929,6 +5704,7 @@ public class PlayerCharacter extends AbstractCharacter {
				@@ -5929,6 +5704,7 @@ public class PlayerCharacter extends AbstractCharacter {
					 
			
		
	
		
			
				
					        float  secondsPassed  =  ( currentTime  -  regenTime )  /  1000f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        float  secondsToRecover1  =  RecoveryType . getRecoveryType ( this ) . staminaRate ;   
			
		
	
		
			
				
					        secondsToRecover1  * =  this . combatStats . staminaRegen ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        float  ratio  =  secondsPassed  /  secondsToRecover1 ;   
			
		
	
		
			
				
					        //rate *= this.getRegenModifier(ModType.StaminaRecoverRate); // Adjust rate with modifiers