|  |  | @ -45,7 +45,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | public abstract class AbstractCharacter extends AbstractWorldObject { |  |  |  | public abstract class AbstractCharacter extends AbstractWorldObject { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     protected final CharacterItemManager charItemManager; |  |  |  |     protected CharacterItemManager charItemManager; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     private final ReentrantReadWriteLock healthLock = new ReentrantReadWriteLock(); |  |  |  |     private final ReentrantReadWriteLock healthLock = new ReentrantReadWriteLock(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     public short level; |  |  |  |     public short level; | 
			
		
	
		
		
			
				
					
					|  |  |  |     public AbstractWorldObject combatTarget; |  |  |  |     public AbstractWorldObject combatTarget; | 
			
		
	
	
		
		
			
				
					|  |  | @ -122,6 +122,15 @@ public abstract class AbstractCharacter extends AbstractWorldObject { | 
			
		
	
		
		
			
				
					
					|  |  |  |     private boolean collided = false; |  |  |  |     private boolean collided = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |     private byte aoecntr = 0; |  |  |  |     private byte aoecntr = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public AbstractCharacter() { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         super(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.powers = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.skills = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.initializeCharacter(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * No Id Constructor |  |  |  |      * No Id Constructor | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
	
		
		
			
				
					|  |  | @ -136,7 +145,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { | 
			
		
	
		
		
			
				
					
					|  |  |  |             final short level, |  |  |  |             final short level, | 
			
		
	
		
		
			
				
					
					|  |  |  |             final int exp, |  |  |  |             final int exp, | 
			
		
	
		
		
			
				
					
					|  |  |  |             final Vector3fImmutable bindLoc, |  |  |  |             final Vector3fImmutable bindLoc, | 
			
		
	
		
		
			
				
					
					|  |  |  |             final Vector3fImmutable currentLoc, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             final Vector3fImmutable faceDir, |  |  |  |             final Vector3fImmutable faceDir, | 
			
		
	
		
		
			
				
					
					|  |  |  |             final Guild guild, |  |  |  |             final Guild guild, | 
			
		
	
		
		
			
				
					
					|  |  |  |             final byte runningTrains |  |  |  |             final byte runningTrains | 
			
		
	
	
		
		
			
				
					|  |  | @ -154,7 +162,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.exp = exp; |  |  |  |         this.exp = exp; | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.walkMode = true; |  |  |  |         this.walkMode = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.bindLoc = bindLoc; |  |  |  |         this.bindLoc = bindLoc; | 
			
		
	
		
		
			
				
					
					|  |  |  |         ; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.faceDir = faceDir; |  |  |  |         this.faceDir = faceDir; | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.guild = guild; |  |  |  |         this.guild = guild; | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.runningTrains = runningTrains; |  |  |  |         this.runningTrains = runningTrains; | 
			
		
	
	
		
		
			
				
					|  |  | @ -162,8 +169,6 @@ public abstract class AbstractCharacter extends AbstractWorldObject { | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.skills = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); |  |  |  |         this.skills = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.initializeCharacter(); |  |  |  |         this.initializeCharacter(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Dangerous to use THIS in a constructor!!!
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.charItemManager = new CharacterItemManager(this); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
	
		
		
			
				
					|  |  | 
 |