|  |  | @ -5114,84 +5114,88 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(!newSystem) |  |  |  |         if(!newSystem) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return; |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         try { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (this.updateLock.writeLock().tryLock()) { |  |  |  |             if (this.updateLock.writeLock().tryLock()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             try { |  |  |  |                 try { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if (!this.isAlive() && this.isEnteredWorld()) { |  |  |  |                     if (!this.isAlive() && this.isEnteredWorld()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if(!this.timestamps.containsKey("DeathTime")){ |  |  |  |                         if (!this.timestamps.containsKey("DeathTime")) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         this.timestamps.put("DeathTime",System.currentTimeMillis()); |  |  |  |                             this.timestamps.put("DeathTime", System.currentTimeMillis()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     }else if((System.currentTimeMillis() - this.timestamps.get("DeathTime")) > 600000) |  |  |  |                         } else if ((System.currentTimeMillis() - this.timestamps.get("DeathTime")) > 600000) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         forceRespawn(this); |  |  |  |                             forceRespawn(this); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     return; |  |  |  |                         return; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                     } | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 this.updateLocation(); |  |  |  |                     this.updateLocation(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if(this.isAlive() && this.isActive && this.enteredWorld) { |  |  |  |                     if (this.isAlive() && this.isActive && this.enteredWorld) { | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     this.updateMovementState(); |  |  |  |                         this.updateMovementState(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if (this.combatStats == null) { |  |  |  |                         if (this.combatStats == null) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         this.combatStats = new PlayerCombatStats(this); |  |  |  |                             this.combatStats = new PlayerCombatStats(this); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     } else { |  |  |  |                         } else { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         this.combatStats.update(); |  |  |  |                             this.combatStats.update(); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         this.doRegen(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     this.doRegen(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if (this.getStamina() < 10) { |  |  |  |                     if (this.getStamina() < 10) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if (this.getAltitude() > 0 || this.getDesiredAltitude() > 0) { |  |  |  |                         if (this.getAltitude() > 0 || this.getDesiredAltitude() > 0) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         PlayerCharacter.GroundPlayer(this); |  |  |  |                             PlayerCharacter.GroundPlayer(this); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 RealmMap.updateRealm(this); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 this.updateBlessingMessage(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 this.safeZone = this.isInSafeZone(); |  |  |  |                     RealmMap.updateRealm(this); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if(!this.timestamps.containsKey("nextBoxCheck")) |  |  |  |                     this.updateBlessingMessage(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     this.timestamps.put("nextBoxCheck", System.currentTimeMillis() + 10000); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(!this.isBoxed && this.timestamps.get("nextBoxCheck") < System.currentTimeMillis()) { |  |  |  |                     this.safeZone = this.isInSafeZone(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     this.isBoxed = checkIfBoxed(this); |  |  |  |                     if (!this.timestamps.containsKey("nextBoxCheck")) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     this.timestamps.put("nextBoxCheck", System.currentTimeMillis() + 10000); |  |  |  |                         this.timestamps.put("nextBoxCheck", System.currentTimeMillis() + 10000); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(this.level < 10 && this.enteredWorld) { |  |  |  |                     if (!this.isBoxed && this.timestamps.get("nextBoxCheck") < System.currentTimeMillis()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     while (this.level < 10) { |  |  |  |                         this.isBoxed = checkIfBoxed(this); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         grantXP(Experience.getBaseExperience(this.level + 1) - this.exp); |  |  |  |                         this.timestamps.put("nextBoxCheck", System.currentTimeMillis() + 10000); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(this.isBoxed && !this.containsEffect(1672601862)) { |  |  |  |                     if (this.level < 10 && this.enteredWorld) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     PowersManager.applyPower(this, this, Vector3fImmutable.ZERO, 1672601862, 40, false); |  |  |  |                         while (this.level < 10) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                             grantXP(Experience.getBaseExperience(this.level + 1) - this.exp); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 if(this.isFlying()){ |  |  |  |                     if (this.isBoxed && !this.containsEffect(1672601862)) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if(this.effects.containsKey("MoveBuff")){ |  |  |  |                         PowersManager.applyPower(this, this, Vector3fImmutable.ZERO, 1672601862, 40, false); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         GroundPlayer(this); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     if(!this.timestamps.containsKey("StunGrounded")) |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         this.timestamps.put("StunGrounded",System.currentTimeMillis() - 1000L); |  |  |  |                     if (this.isFlying()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if(this.bonuses.getBool(ModType.Stunned, SourceType.None) && this.timestamps.get("StunGrounded") < System.currentTimeMillis()){ |  |  |  |                         if (this.effects.containsKey("MoveBuff")) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         boolean isFlyMoving = this.getDesiredAltitude() != this.altitude; |  |  |  |                             GroundPlayer(this); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         if(!isFlyMoving && this.bonuses.getBool(ModType.Stunned, SourceType.None)){ |  |  |  |                         } | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             this.setDesiredAltitude(this.altitude - 10); |  |  |  |                         if (!this.timestamps.containsKey("StunGrounded")) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             this.setTakeOffTime(System.currentTimeMillis()); |  |  |  |                             this.timestamps.put("StunGrounded", System.currentTimeMillis() - 1000L); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |                         if (this.bonuses.getBool(ModType.Stunned, SourceType.None) && this.timestamps.get("StunGrounded") < System.currentTimeMillis()) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             ChangeAltitudeMsg msg = new ChangeAltitudeMsg(this.getObjectType().ordinal(), this.getObjectUUID(), false, this.getAltitude(), this.getDesiredAltitude(), this.getAltitude()); |  |  |  |                             boolean isFlyMoving = this.getDesiredAltitude() != this.altitude; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             // force a landing
 |  |  |  |                             if (!isFlyMoving && this.bonuses.getBool(ModType.Stunned, SourceType.None)) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             DispatchMessage.dispatchMsgToInterestArea(this, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); |  |  |  |                                 this.setDesiredAltitude(this.altitude - 10); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             this.timestamps.put("StunGrounded",System.currentTimeMillis() + 1500L); |  |  |  |                                 this.setTakeOffTime(System.currentTimeMillis()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                             ChatManager.chatSystemInfo(this,"Applying 1 Tier Ground"); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 ChangeAltitudeMsg msg = new ChangeAltitudeMsg(this.getObjectType().ordinal(), this.getObjectUUID(), false, this.getAltitude(), this.getDesiredAltitude(), this.getAltitude()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 // force a landing
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 DispatchMessage.dispatchMsgToInterestArea(this, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 this.timestamps.put("StunGrounded", System.currentTimeMillis() + 1500L); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 ChatManager.chatSystemInfo(this, "Applying 1 Tier Ground"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             } | 
			
		
	
		
		
			
				
					
					|  |  |  |                         } |  |  |  |                         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } catch (Exception e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     Logger.error(e); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } finally { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     this.updateLock.writeLock().unlock(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } catch (Exception e) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 Logger.error(e); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } finally { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 this.updateLock.writeLock().unlock(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         }catch(Exception e){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             Logger.error("UPDATE ISSUE: " + e); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static void unboxPlayer(PlayerCharacter player){ |  |  |  |     public static void unboxPlayer(PlayerCharacter player){ | 
			
		
	
	
		
		
			
				
					|  |  | 
 |