|  |  | @ -5146,6 +5146,9 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |     @Override |  |  |  |     @Override | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void updateRegen() { |  |  |  |     public void updateRegen() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(true) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float healthRegen = 0f; |  |  |  |         float healthRegen = 0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         float manaRegen = 0f; |  |  |  |         float manaRegen = 0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         float stamRegen = 0f; |  |  |  |         float stamRegen = 0f; | 
			
		
	
	
		
		
			
				
					|  |  | @ -5686,4 +5689,250 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.dirtyLoad = dirtyLoad; |  |  |  |         this.dirtyLoad = dirtyLoad; | 
			
		
	
		
		
			
				
					
					|  |  |  |         dirtyLock.writeLock().unlock(); |  |  |  |         dirtyLock.writeLock().unlock(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public void RunRegen(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //this.updateRegen();
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Long lastRegen; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.timestamps.containsKey("LastRegen")) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             lastRegen = this.timestamps.get("LastRegen"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             lastRegen = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float secondsDifference = (System.currentTimeMillis() - lastRegen) / 1000.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         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 || secondsDifference > 2.5f) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.syncClient(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Reset this char's frame time.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.lastUpdateTime = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.lastStamUpdateTime = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public static float getRegenRate(PlayerCharacter player, ModType type){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float regenRate = 1 + player.getRegenModifier(type); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         player.updateMovementState(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         switch (player.movementState) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case IDLE: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if(player.walkMode){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     switch(type){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         case HealthRecoverRate: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             regenRate = MBServerStatics.HEALTH_REGEN_WALK * regenRate; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         case ManaRecoverRate: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             regenRate = MBServerStatics.MANA_REGEN_WALK * regenRate; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         case StaminaRecoverRate: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             regenRate = MBServerStatics.STAMINA_REGEN_WALK * regenRate; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 }else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case RUNNING: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if(player.walkMode){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 }else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case SWIMMING: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case SITTING: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case FLYING: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return regenRate; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |