Buggy code:
public class SRPGEL extends EntityListener { public void onEntityTarget ( EntityTargetEvent event ) { } public void onEntityDeath ( EntityDeathEvent event ) { } public void onEntityDamage ( EntityDamageEvent event ) { if ( event instanceof EntityDamageByEntityEvent ) { EntityDamageByEntityEvent e = ( ( EntityDamageByEntityEvent ) ( event ) ) ; if ( ( e . getDamager ( ) ) instanceof Arrow ) { Arrow a = ( ( Arrow ) ( e . getDamager ( ) ) ) ; if ( ( a . getShooter ( ) ) instanceof Player ) { SkillManager sm = new SkillManager ( ) ; Player shooter = ( ( Player ) ( a . getShooter ( ) ) ) ; int alevel = SkillManager . getSkillLevel ( "Archery" , shooter ) ; e . setDamage ( ( ( e . getDamage ( ) ) + ( alevel // 10 ) ) ) ; if ( sm . processExperience ( shooter , "Archery" ) ) { sm . incrementLevel ( "Archery" , shooter ) ; progress . get ( shooter ) . put ( "Archery" , 0 ) ; SkillManager . calculateLevel ( shooter ) ; } else progress . get ( shooter ) . put ( "Archery" , ( ( progress . get ( shooter ) . get ( "Archery" ) ) + 1 ) ) ; } else return ; } else if ( ( e . getDamager ( ) ) instanceof Player ) { SkillManager sm = new SkillManager ( ) ; Player player = ( ( Player ) ( e . getDamager ( ) ) ) ; if ( czombie . containsKey ( player ) ) { Zombie z = czombie . get ( player ) ; if ( ! ( z . isDead ( ) ) ) { if ( ( e . getEntity ( ) ) instanceof LivingEntity ) z . setTarget ( ( ( LivingEntity ) ( e . getEntity ( ) ) ) ) ; } } String t = ToolComparer . getType ( player . getItemInHand ( ) ) ; if ( t == null ) return ; if ( t . equalsIgnoreCase ( "Sword" ) ) { int alevel = SkillManager . getSkillLevel ( "Swordsmanship" , player ) ; e . setDamage ( ( ( e . getDamage ( ) ) + ( alevel // 10 ) ) ) ; if ( sm . processExperience ( player , "Swordsmanship" ) ) { sm . incrementLevel ( "Swordsmanship" , player ) ; progress . get ( player ) . put ( "Swordsmanship" , 0 ) ; SkillManager . calculateLevel ( player ) ; } else progress . get ( player ) . put ( "Swordsmanship" , ( ( progress . get ( player ) . get ( "Swordsmanship" ) ) + 1 ) ) ; } else if ( t . equalsIgnoreCase ( "Axe" ) ) { int alevel = SkillManager . getSkillLevel ( "Axecraft" , player ) ; int crit = new Random ( ) . nextInt ( 99 ) ; e . setDamage ( ( ( ( e . getDamage ( ) ) + ( ( alevel // 10 ) * crit ) ) <= alevel ? 2 : 1 ) ) ; if ( sm . processExperience ( player , "Axecraft" ) ) { sm . incrementLevel ( "Axecraft" , player ) ; progress . get ( player ) . put ( "Axecraft" , 0 ) ; SkillManager . calculateLevel ( player ) ; } else progress . get ( player ) . put ( "Axecraft" , ( ( progress . get ( player ) . get ( "Axecraft" ) ) + 1 ) ) ; } } if ( ( e . getEntity ( ) ) instanceof Player ) { Player player = ( ( Player ) ( e . getEntity ( ) ) ) ; EntityPlayer ep = ( ( org . bukkit . craftbukkit . entity . CraftPlayer ) ( player ) ) . getHandle ( ) ; boolean ib = ep . K ( ) ; if ( ib ) { SkillManager sm = new SkillManager ( ) ; int alevel = SkillManager . getSkillLevel ( "Blocking" , player ) ; e . setDamage ( ( ( e . getDamage ( ) ) - ( alevel // 10 ) ) ) ; <START_BUG> if ( sm . processExperience ( player , "Swordsmanship" ) ) { <END_BUG> sm . incrementLevel ( "Blocking" , player ) ; progress . get ( player ) . put ( "Blocking" , 0 ) ; SkillManager . calculateLevel ( player ) ; } else progress . get ( player ) . put ( "Blocking" , ( ( progress . get ( player ) . get ( "Blocking" ) ) + 1 ) ) ; } } } else { } } public void onFoodLevelChange ( FoodLevelChangeEvent event ) { } public void onExplosionPrime ( ExplosionPrimeEvent event ) { } }

Fix:
if ( sm . processExperience ( player , "Blocking" ) ) {