|  |  | @ -338,11 +338,6 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } catch (Exception e) { |  |  |  |         } catch (Exception e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             //Logger.error("FAILED TO CALCULATE Defense FOR: " + this.owner.getObjectUUID());
 |  |  |  |             //Logger.error("FAILED TO CALCULATE Defense FOR: " + this.owner.getObjectUUID());
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         try{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             this.doRegen(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         }catch(Exception ignored){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -887,80 +882,4 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         return HIT_VALUE_MAP.get(key); |  |  |  |         return HIT_VALUE_MAP.get(key); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public void doRegen(){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         long current = System.currentTimeMillis(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         Vector3fImmutable regenRate; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         PlayerCharacter pc = this.owner; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(!pc.timestamps.containsKey("LastRegen")){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             pc.timestamps.put("LastRegen", current); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.isSit()){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             regenRate = resting; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } else if(!pc.isMoving()){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             regenRate = idling; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         }else{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(pc.isWalk()){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 regenRate = walking; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             }else{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 regenRate = running; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         double secondsPassed = current - pc.timestamps.get("LastRegen") * 0.001f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         double healthRegenerated = 0.01f / regenRate.x; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         double manaRegenerated = 0.01f / regenRate.y; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.bonuses != null){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             healthRegenerated *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.HealthRecoverRate, Enum.SourceType.None); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             manaRegenerated *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.ManaRecoverRate, Enum.SourceType.None); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         healthRegenerated *= pc.healthMax * secondsPassed; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         manaRegenerated *= pc.manaMax * secondsPassed; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         double newHealth = pc.health.get() + healthRegenerated; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         double newMana = pc.mana.get() + manaRegenerated; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(newHealth > pc.healthMax) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             newHealth = pc.healthMax; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(newMana > pc.manaMax) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             newMana = pc.manaMax; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         pc.health.compareAndSet(pc.health.get(), (float) newHealth); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         pc.mana.compareAndSet(pc.mana.get(), (float) newMana); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(regenRate.z > 0) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //recover stamina
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             double staminaRegenerated = 1 / regenRate.z; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (pc.bonuses != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 staminaRegenerated *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.StaminaRecoverRate, Enum.SourceType.None); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             double newStamina = pc.stamina.get() + staminaRegenerated; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(newStamina > pc.staminaMax) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 newStamina = pc.staminaMax; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             pc.stamina.compareAndSet(pc.stamina.get(), (float) newStamina); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         }else{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //consume stamina
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(pc.isMoving()){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 double newStamina; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(pc.walkMode){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     //walking
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     newStamina = consumption.x * secondsPassed; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 }else{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     //running
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     newStamina = consumption.y * secondsPassed; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(newStamina < 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     newStamina = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 pc.stamina.compareAndSet(pc.stamina.get(), pc.stamina.get() - (float) newStamina); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(newStamina == 0 && pc.isSwimming()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                     pc.health.compareAndSet(pc.health.get(), pc.health.get() - (float) newStamina); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |