Kaynağa Gözat

Getting project ready for Maven

TheYeti 13 yıl önce
ebeveyn
işleme
376048d5aa
100 değiştirilmiş dosya ile 17076 ekleme ve 17076 silme
  1. 0 0
      Changelog.txt
  2. 420 420
      src/main/java/com/gmail/nossr50/Combat.java
  3. 211 211
      src/main/java/com/gmail/nossr50/Database.java
  4. 104 104
      src/main/java/com/gmail/nossr50/Item.java
  5. 279 279
      src/main/java/com/gmail/nossr50/Leaderboard.java
  6. 111 111
      src/main/java/com/gmail/nossr50/Users.java
  7. 86 86
      src/main/java/com/gmail/nossr50/commands/general/AddxpCommand.java
  8. 46 46
      src/main/java/com/gmail/nossr50/commands/general/ClearmyspawnCommand.java
  9. 83 83
      src/main/java/com/gmail/nossr50/commands/general/MmoeditCommand.java
  10. 39 39
      src/main/java/com/gmail/nossr50/commands/general/MmoupdateCommand.java
  11. 58 58
      src/main/java/com/gmail/nossr50/commands/general/MyspawnCommand.java
  12. 85 85
      src/main/java/com/gmail/nossr50/commands/general/StatsCommand.java
  13. 98 98
      src/main/java/com/gmail/nossr50/commands/general/WhoisCommand.java
  14. 126 126
      src/main/java/com/gmail/nossr50/commands/general/XprateCommand.java
  15. 45 45
      src/main/java/com/gmail/nossr50/commands/mc/McabilityCommand.java
  16. 73 73
      src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java
  17. 48 48
      src/main/java/com/gmail/nossr50/commands/mc/McgodCommand.java
  18. 48 48
      src/main/java/com/gmail/nossr50/commands/mc/McmmoCommand.java
  19. 93 93
      src/main/java/com/gmail/nossr50/commands/mc/McrefreshCommand.java
  20. 199 199
      src/main/java/com/gmail/nossr50/commands/mc/MctopCommand.java
  21. 86 86
      src/main/java/com/gmail/nossr50/commands/party/ACommand.java
  22. 52 52
      src/main/java/com/gmail/nossr50/commands/party/AcceptCommand.java
  23. 73 73
      src/main/java/com/gmail/nossr50/commands/party/InviteCommand.java
  24. 101 101
      src/main/java/com/gmail/nossr50/commands/party/PCommand.java
  25. 192 192
      src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java
  26. 62 62
      src/main/java/com/gmail/nossr50/commands/party/PtpCommand.java
  27. 52 52
      src/main/java/com/gmail/nossr50/commands/skills/AcrobaticsCommand.java
  28. 63 63
      src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java
  29. 62 62
      src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java
  30. 46 46
      src/main/java/com/gmail/nossr50/commands/skills/ExcavationCommand.java
  31. 47 47
      src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java
  32. 63 63
      src/main/java/com/gmail/nossr50/commands/skills/HerbalismCommand.java
  33. 48 48
      src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java
  34. 53 53
      src/main/java/com/gmail/nossr50/commands/skills/RepairCommand.java
  35. 69 69
      src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java
  36. 70 70
      src/main/java/com/gmail/nossr50/commands/skills/TamingCommand.java
  37. 74 74
      src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java
  38. 56 56
      src/main/java/com/gmail/nossr50/commands/skills/WoodcuttingCommand.java
  39. 50 50
      src/main/java/com/gmail/nossr50/commands/spout/MchudCommand.java
  40. 62 62
      src/main/java/com/gmail/nossr50/commands/spout/XplockCommand.java
  41. 616 616
      src/main/java/com/gmail/nossr50/config/LoadProperties.java
  42. 89 89
      src/main/java/com/gmail/nossr50/config/Misc.java
  43. 28 28
      src/main/java/com/gmail/nossr50/datatypes/FakeBlockBreakEvent.java
  44. 25 25
      src/main/java/com/gmail/nossr50/datatypes/HUDType.java
  45. 286 286
      src/main/java/com/gmail/nossr50/datatypes/HUDmmo.java
  46. 1236 1236
      src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java
  47. 22 22
      src/main/java/com/gmail/nossr50/datatypes/PlayerStat.java
  48. 36 36
      src/main/java/com/gmail/nossr50/datatypes/SkillType.java
  49. 55 55
      src/main/java/com/gmail/nossr50/datatypes/Tree.java
  50. 65 65
      src/main/java/com/gmail/nossr50/datatypes/TreeNode.java
  51. 28 28
      src/main/java/com/gmail/nossr50/datatypes/buttons/ButtonEscape.java
  52. 36 36
      src/main/java/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java
  53. 0 0
      src/main/java/com/gmail/nossr50/datatypes/buttons/ButtonPartyToggle.java
  54. 75 75
      src/main/java/com/gmail/nossr50/datatypes/popups/PopupMMO.java
  55. 450 450
      src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
  56. 208 208
      src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java
  57. 345 345
      src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java
  58. 60 60
      src/main/java/com/gmail/nossr50/listeners/mcSpoutInputListener.java
  59. 48 48
      src/main/java/com/gmail/nossr50/listeners/mcSpoutListener.java
  60. 92 92
      src/main/java/com/gmail/nossr50/listeners/mcSpoutScreenListener.java
  61. 0 0
      src/main/java/com/gmail/nossr50/locale/locale_de.properties
  62. 389 389
      src/main/java/com/gmail/nossr50/locale/locale_en_us.properties
  63. 389 389
      src/main/java/com/gmail/nossr50/locale/locale_es_es.properties
  64. 368 368
      src/main/java/com/gmail/nossr50/locale/locale_fi.properties
  65. 389 389
      src/main/java/com/gmail/nossr50/locale/locale_fr.properties
  66. 395 395
      src/main/java/com/gmail/nossr50/locale/locale_nl.properties
  67. 389 389
      src/main/java/com/gmail/nossr50/locale/locale_pl.properties
  68. 403 403
      src/main/java/com/gmail/nossr50/locale/locale_pt_br.properties
  69. 381 381
      src/main/java/com/gmail/nossr50/locale/locale_ru.properties
  70. 91 91
      src/main/java/com/gmail/nossr50/locale/mcLocale.java
  71. 521 521
      src/main/java/com/gmail/nossr50/m.java
  72. 417 417
      src/main/java/com/gmail/nossr50/mcMMO.java
  73. 352 352
      src/main/java/com/gmail/nossr50/mcPermissions.java
  74. 481 481
      src/main/java/com/gmail/nossr50/party/Party.java
  75. 80 80
      src/main/java/com/gmail/nossr50/runnables/mcTimer.java
  76. 105 105
      src/main/java/com/gmail/nossr50/skills/Acrobatics.java
  77. 0 0
      src/main/java/com/gmail/nossr50/skills/Alchemy.java
  78. 119 119
      src/main/java/com/gmail/nossr50/skills/Archery.java
  79. 172 172
      src/main/java/com/gmail/nossr50/skills/Axes.java
  80. 0 0
      src/main/java/com/gmail/nossr50/skills/Enchanting.java
  81. 279 279
      src/main/java/com/gmail/nossr50/skills/Excavation.java
  82. 0 0
      src/main/java/com/gmail/nossr50/skills/Fishing.java
  83. 338 338
      src/main/java/com/gmail/nossr50/skills/Herbalism.java
  84. 440 440
      src/main/java/com/gmail/nossr50/skills/Mining.java
  85. 623 623
      src/main/java/com/gmail/nossr50/skills/Repair.java
  86. 437 437
      src/main/java/com/gmail/nossr50/skills/Skills.java
  87. 252 252
      src/main/java/com/gmail/nossr50/skills/Swords.java
  88. 70 70
      src/main/java/com/gmail/nossr50/skills/Taming.java
  89. 111 111
      src/main/java/com/gmail/nossr50/skills/Unarmed.java
  90. 169 169
      src/main/java/com/gmail/nossr50/skills/WoodCutting.java
  91. 577 577
      src/main/java/com/gmail/nossr50/spout/SpoutStuff.java
  92. 269 269
      src/main/java/com/gmail/nossr50/spout/mmoHelper.java
  93. 111 111
      src/main/java/com/gmail/nossr50/spout/util/ArrayListString.java
  94. 64 64
      src/main/java/com/gmail/nossr50/spout/util/GenericFace.java
  95. 226 226
      src/main/java/com/gmail/nossr50/spout/util/GenericLivingEntity.java
  96. 236 236
      src/main/java/plugin.yml
  97. 0 0
      src/main/resources/Acrobatics.png
  98. 0 0
      src/main/resources/Acrobatics_r.png
  99. 0 0
      src/main/resources/Archery.png
  100. 0 0
      src/main/resources/Archery_r.png

+ 0 - 0
src/Changelog.txt → Changelog.txt


+ 420 - 420
src/com/gmail/nossr50/Combat.java → src/main/java/com/gmail/nossr50/Combat.java

@@ -1,420 +1,420 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import org.bukkit.World;
-import org.bukkit.entity.*;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
-import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
-import org.bukkit.plugin.Plugin;
-
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.skills.Acrobatics;
-import com.gmail.nossr50.skills.Archery;
-import com.gmail.nossr50.skills.Axes;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.skills.Swords;
-import com.gmail.nossr50.skills.Taming;
-import com.gmail.nossr50.skills.Unarmed;
-
-public class Combat 
-{
-	public static void combatChecks(EntityDamageEvent event, mcMMO pluginx)
-	{
-		if(event.isCancelled() || event.getDamage() == 0)
-			return;
-		
-		if(event instanceof EntityDamageByEntityEvent)
-		{	
-			/*
-			 * OFFENSIVE CHECKS FOR PLAYERS VERSUS ENTITIES
-			 */
-			if(((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
-			{
-				//Declare Things
-				EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
-				Player attacker = (Player)((EntityDamageByEntityEvent) event).getDamager();
-				PlayerProfile PPa = Users.getProfile(attacker);
-				
-				//Damage modifiers
-				if(mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0) //Unarmed
-					Unarmed.unarmedBonus(attacker, eventb);
-				if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker) && Users.getProfile(attacker).getSkillLevel(SkillType.AXES) >= 500)
-				    event.setDamage(event.getDamage()+4);
-				
-				//If there are any abilities to activate
-		    	combatAbilityChecks(attacker, PPa, pluginx);
-		    	
-		    	//Check for offensive procs
-		    	if(!(((EntityDamageByEntityEvent) event).getDamager() instanceof Arrow))
-		    	{
-			    	if(mcPermissions.getInstance().axes(attacker))
-			    		Axes.axeCriticalCheck(attacker, eventb, pluginx); //Axe Criticals
-			    	
-			    	if(!pluginx.misc.bleedTracker.contains((LivingEntity) event.getEntity())) //Swords Bleed
-			   			Swords.bleedCheck(attacker, (LivingEntity)event.getEntity(), pluginx);
-			    	
-				   	if(event.getEntity() instanceof Player && mcPermissions.getInstance().unarmed(attacker))
-				   	{
-				   		Player defender = (Player)event.getEntity();
-				   		Unarmed.disarmProcCheck(attacker, defender);
-				    }
-			    	
-			    	
-			    	
-			    	//Modify the event damage if Attacker is Berserk
-			    	if(PPa.getBerserkMode())
-			    		event.setDamage(event.getDamage() + (event.getDamage() / 2));
-		       	
-			   		//Handle Ability Interactions
-			   		if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand()))
-		       			Axes.applyAoeDamage(attacker, eventb, pluginx);
-		      		if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand()))
-		       			Swords.applySerratedStrikes(attacker, eventb, pluginx);
-		      		
-		      		//Experience
-		      		if(event.getEntity() instanceof Player)
-		      		{
-		      			Player defender = (Player)event.getEntity();
-		      			PlayerProfile PPd = Users.getProfile(defender);
-			    		if(attacker != null && defender != null && LoadProperties.pvpxp)
-			    		{
-			    			if(System.currentTimeMillis() >= (PPd.getRespawnATS()*1000) + 5000 
-			    					&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis()
-			    					&& defender.getHealth() >= 1)
-			    			{
-			    				//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the mob
-				      			int hpLeft = defender.getHealth(), xpinc = 0;
-				      			
-				      			if(hpLeft < event.getDamage())
-				      				xpinc = event.getDamage();
-				      			else
-				      				xpinc = hpLeft;
-				      			
-			    				int xp = (int) (xpinc * 2 * LoadProperties.pvpxprewardmodifier);
-			    				
-				    			if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
-				    				PPa.addXP(SkillType.AXES, xp*10, attacker);
-				    			if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
-				    				PPa.addXP(SkillType.SWORDS, xp*10, attacker);
-				    			if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
-				    				PPa.addXP(SkillType.UNARMED, xp*10, attacker);
-			    			}
-			    		}
-		      		}
-		      		
-		      		if(!pluginx.misc.mobSpawnerList.contains(event.getEntity()))
-		      		{
-		      			int xp = getXp(event.getEntity(), event);
-
-						if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
-							PPa.addXP(SkillType.SWORDS, xp*10, attacker);
-						else if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
-							PPa.addXP(SkillType.AXES, xp*10, attacker);
-						else if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
-							PPa.addXP(SkillType.UNARMED, xp*10, attacker);
-		      		}
-		      		Skills.XpCheckAll(attacker);
-		      		
-		      		if(event.getEntity() instanceof Wolf)
-		      		{
-		      			Wolf theWolf = (Wolf)event.getEntity();
-		      			
-		      			if(attacker.getItemInHand().getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
-		      			{
-		      				event.setCancelled(true);
-		      				if(theWolf.isTamed())
-		      				{
-		      				attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
-		      						mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(theWolf)})+" "+
-		      						mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {theWolf.getHealth()}));
-		      				} 
-		      				else
-		      				{
-		      					attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
-		      							mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {theWolf.getHealth()}));
-		      				}
-		      			}
-		      		}
-				}
-			}
-		}
-		
-		/*
-		 * OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
-		 */
-		if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf)
-		{
-			EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
-			Wolf theWolf = (Wolf) eventb.getDamager();
-			if(theWolf.isTamed() && Taming.ownerOnline(theWolf, pluginx))
-			{
-				if(Taming.getOwner(theWolf, pluginx) == null)
-					return;
-				Player master = Taming.getOwner(theWolf, pluginx);
-				PlayerProfile PPo = Users.getProfile(master);
-				
-				if(mcPermissions.getInstance().taming(master))
-				{
-					//Sharpened Claws
-					if(PPo.getSkillLevel(SkillType.TAMING) >= 750)
-					{
-						event.setDamage(event.getDamage() + 2);
-					}
-					
-					//Gore
-					if(Math.random() * 1000 <= PPo.getSkillLevel(SkillType.TAMING))
-					{
-						event.setDamage(event.getDamage() * 2);
-						
-						if(event.getEntity() instanceof Player)
-						{
-							Player target = (Player)event.getEntity();
-							target.sendMessage(mcLocale.getString("Combat.StruckByGore")); //$NON-NLS-1$
-							Users.getProfile(target).setBleedTicks(2);
-						}
-						else
-							pluginx.misc.addToBleedQue((LivingEntity) event.getEntity());
-						
-						master.sendMessage(mcLocale.getString("Combat.Gore")); //$NON-NLS-1$
-					}
-					if(!event.getEntity().isDead() && !pluginx.misc.mobSpawnerList.contains(event.getEntity()))
-					{
-						int xp = getXp(event.getEntity(), event);
-						Users.getProfile(master).addXP(SkillType.TAMING, xp*10, master);
-						
-						if(event.getEntity() instanceof Player)
-						{
-							xp = (event.getDamage() * 2);
-							Users.getProfile(master).addXP(SkillType.TAMING, (int)((xp*10)*1.5), master);
-						}
-						Skills.XpCheckSkill(SkillType.TAMING, master);
-					}
-				}
-			}
-		}
-		//Another offensive check for Archery
-		if(event instanceof EntityDamageByEntityEvent && event.getCause() == DamageCause.PROJECTILE && ((EntityDamageByEntityEvent) event).getDamager() instanceof Arrow)
-			archeryCheck((EntityDamageByEntityEvent)event, pluginx);
-			
-		/*
-		 * DEFENSIVE CHECKS
-		 */
-		if(event instanceof EntityDamageByEntityEvent && event.getEntity() instanceof Player)
-		{
-			Swords.counterAttackChecks((EntityDamageByEntityEvent)event);
-			Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event);
-		}
-		/*
-		 * DEFENSIVE CHECKS FOR WOLVES
-		 */
-		
-		if(event.getEntity() instanceof Wolf)
-		{
-			Wolf theWolf = (Wolf) event.getEntity();
-			
-			if(theWolf.isTamed() && Taming.ownerOnline(theWolf, pluginx))
-			{
-				if(Taming.getOwner(theWolf, pluginx) == null)
-					return;
-				
-				Player master = Taming.getOwner(theWolf, pluginx);
-				PlayerProfile PPo = Users.getProfile(master);
-				if(mcPermissions.getInstance().taming(master))
-				{				
-					//Shock-Proof
-					if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getSkillLevel(SkillType.TAMING) >= 500)
-					{
-						event.setDamage(2);
-					}
-					
-					//Thick Fur
-					if(PPo.getSkillLevel(SkillType.TAMING) >= 250)
-						event.setDamage(event.getDamage() / 2);
-				}
-			}
-		}
-	}
-	
-	public static void combatAbilityChecks(Player attacker, PlayerProfile PPa, Plugin pluginx)
-	{
-		//Check to see if any abilities need to be activated
-		if(PPa.getAxePreparationMode())
-			Axes.skullSplitterCheck(attacker);
-		if(PPa.getSwordsPreparationMode())
-			Swords.serratedStrikesActivationCheck(attacker);
-		if(PPa.getFistsPreparationMode())
-			Unarmed.berserkActivationCheck(attacker);
-	}
-	public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx)
-	{
-		Arrow arrow = (Arrow)event.getDamager();
-    	Entity y = arrow.getShooter();
-    	Entity x = event.getEntity();
-    	if(x instanceof Player)
-    	{
-    		Player defender = (Player)x;
-    		PlayerProfile PPd = Users.getProfile(defender);
-    		if(PPd == null)
-    			Users.addUser(defender);
-    		if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0)
-    		{
-	    		if(defender != null && PPd.getSkillLevel(SkillType.UNARMED) >= 1000)
-	    		{
-	    			if(Math.random() * 1000 <= 500)
-	    			{
-	    				event.setCancelled(true);
-	    				defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
-	    				return;
-	    			}
-	    		} else if(defender != null && Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2))
-	    		{
-	    			event.setCancelled(true);
-	    			defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
-	    			return;
-	    		}
-    		}
-    	}
-    	/*
-    	 * If attacker is player
-    	 */
-    	if(y instanceof Player)
-    	{
-    		Player attacker = (Player)y;
-    		PlayerProfile PPa = Users.getProfile(attacker);
-    		if(mcPermissions.getInstance().archery(attacker))
-    		{
-    			Archery.trackArrows(pluginx, x, event, attacker);
-    			
-    			/*
-    			 * IGNITION
-    			 */
-    			Archery.ignitionCheck(x, event, attacker);
-    		/*
-    		 * Defender is Monster
-    		 */
-    		if(!pluginx.misc.mobSpawnerList.contains(x))
-    		{
-    			int xp = getXp(event.getEntity(), event);
-				PPa.addXP(SkillType.ARCHERY, xp*10, attacker);
-    		}
-    		/*
-    		 * Attacker is Player
-    		 */
-    		if(x instanceof Player){
-    			Player defender = (Player)x;
-    			PlayerProfile PPd = Users.getProfile(defender);
-    			/*
-    			 * Stuff for the daze proc
-    			 */
-    	    		if(PPa.inParty() && PPd.inParty())
-    	    		{
-    					if(Party.getInstance().inSameParty(defender, attacker))
-    					{
-    						event.setCancelled(true);
-    						return;
-    					}
-    	    		}
-    	    		/*
-    	    		 * PVP XP
-    	    		 */
-    	    		if(LoadProperties.pvpxp && !Party.getInstance().inSameParty(attacker, defender) 
-    	    				&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis() && !attacker.getName().equals(defender.getName()))
-    	    		{
-    	    			int xp = (int) ((event.getDamage() * 2) * 10);
-    	    			PPa.addXP(SkillType.ARCHERY, xp, attacker);
-    	    		}
-    				/*
-    				 * DAZE PROC
-    				 */
-    	    		Archery.dazeCheck(defender, attacker);
-    			}
-    		}
-    		Skills.XpCheckSkill(SkillType.ARCHERY, attacker);
-    	}
-    }
-    public static void dealDamage(Entity target, int dmg){
-    	if(target instanceof Player){
-    		((Player) target).damage(dmg);
-    	}
-    	if(target instanceof Animals){
-    		((Animals) target).damage(dmg);
-    	}
-    	if(target instanceof Monster){
-    		((Monster) target).damage(dmg);
-    	}
-    }
-    public static boolean pvpAllowed(EntityDamageByEntityEvent event, World world)
-    {
-    	if(!event.getEntity().getWorld().getPVP())
-    		return false;
-    	//If it made it this far, pvp is enabled
-    	return true;
-    }
-    public static int getXp(Entity entity, EntityDamageEvent event)
-    {
-    	int xp = 0;
-    	if(entity instanceof LivingEntity)
-    	{
-    		LivingEntity le = (LivingEntity)entity;
-	    	//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the entity
-				int hpLeft = le.getHealth(), xpinc = 0;
-				
-				if(hpLeft < event.getDamage())
-					xpinc = event.getDamage();
-				else
-					xpinc = hpLeft;
-			
-	    	if(entity instanceof Animals)
-	    	{
-		    	xp = (int) (xpinc * 1);
-	    	} else
-	    	{
-	    		if(entity instanceof Enderman)
-					xp = (xpinc * 2);
-		    	else if(entity instanceof Creeper)
-					xp = (xpinc * 4);
-		    	else if(entity instanceof Silverfish)
-					xp = (xpinc * 3);
-		    	else if(entity instanceof CaveSpider)
-					xp = (xpinc * 3);
-		    	else if(entity instanceof Spider)
-					xp = (xpinc * 3);
-		    	else if(entity instanceof Skeleton)
-					xp = (xpinc * 2);
-		    	else if(entity instanceof Zombie)
-					xp = (xpinc * 2);
-		    	else if(entity instanceof PigZombie)
-					xp = (xpinc * 3);
-		    	else if(entity instanceof Slime)
-					xp = (xpinc * 2);
-		    	else if(entity instanceof Ghast)
-					xp = (xpinc * 3);
-		    	else if(entity instanceof Blaze)
-		    		xp = (xpinc * 3);
-		    	else if(entity instanceof EnderDragon)
-		    		xp = (xpinc * 8);
-	    	}
-    	}
-    	return xp;
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import org.bukkit.World;
+import org.bukkit.entity.*;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
+import org.bukkit.plugin.Plugin;
+
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.skills.Acrobatics;
+import com.gmail.nossr50.skills.Archery;
+import com.gmail.nossr50.skills.Axes;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.Swords;
+import com.gmail.nossr50.skills.Taming;
+import com.gmail.nossr50.skills.Unarmed;
+
+public class Combat 
+{
+	public static void combatChecks(EntityDamageEvent event, mcMMO pluginx)
+	{
+		if(event.isCancelled() || event.getDamage() == 0)
+			return;
+		
+		if(event instanceof EntityDamageByEntityEvent)
+		{	
+			/*
+			 * OFFENSIVE CHECKS FOR PLAYERS VERSUS ENTITIES
+			 */
+			if(((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
+			{
+				//Declare Things
+				EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
+				Player attacker = (Player)((EntityDamageByEntityEvent) event).getDamager();
+				PlayerProfile PPa = Users.getProfile(attacker);
+				
+				//Damage modifiers
+				if(mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0) //Unarmed
+					Unarmed.unarmedBonus(attacker, eventb);
+				if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker) && Users.getProfile(attacker).getSkillLevel(SkillType.AXES) >= 500)
+				    event.setDamage(event.getDamage()+4);
+				
+				//If there are any abilities to activate
+		    	combatAbilityChecks(attacker, PPa, pluginx);
+		    	
+		    	//Check for offensive procs
+		    	if(!(((EntityDamageByEntityEvent) event).getDamager() instanceof Arrow))
+		    	{
+			    	if(mcPermissions.getInstance().axes(attacker))
+			    		Axes.axeCriticalCheck(attacker, eventb, pluginx); //Axe Criticals
+			    	
+			    	if(!pluginx.misc.bleedTracker.contains((LivingEntity) event.getEntity())) //Swords Bleed
+			   			Swords.bleedCheck(attacker, (LivingEntity)event.getEntity(), pluginx);
+			    	
+				   	if(event.getEntity() instanceof Player && mcPermissions.getInstance().unarmed(attacker))
+				   	{
+				   		Player defender = (Player)event.getEntity();
+				   		Unarmed.disarmProcCheck(attacker, defender);
+				    }
+			    	
+			    	
+			    	
+			    	//Modify the event damage if Attacker is Berserk
+			    	if(PPa.getBerserkMode())
+			    		event.setDamage(event.getDamage() + (event.getDamage() / 2));
+		       	
+			   		//Handle Ability Interactions
+			   		if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand()))
+		       			Axes.applyAoeDamage(attacker, eventb, pluginx);
+		      		if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand()))
+		       			Swords.applySerratedStrikes(attacker, eventb, pluginx);
+		      		
+		      		//Experience
+		      		if(event.getEntity() instanceof Player)
+		      		{
+		      			Player defender = (Player)event.getEntity();
+		      			PlayerProfile PPd = Users.getProfile(defender);
+			    		if(attacker != null && defender != null && LoadProperties.pvpxp)
+			    		{
+			    			if(System.currentTimeMillis() >= (PPd.getRespawnATS()*1000) + 5000 
+			    					&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis()
+			    					&& defender.getHealth() >= 1)
+			    			{
+			    				//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the mob
+				      			int hpLeft = defender.getHealth(), xpinc = 0;
+				      			
+				      			if(hpLeft < event.getDamage())
+				      				xpinc = event.getDamage();
+				      			else
+				      				xpinc = hpLeft;
+				      			
+			    				int xp = (int) (xpinc * 2 * LoadProperties.pvpxprewardmodifier);
+			    				
+				    			if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
+				    				PPa.addXP(SkillType.AXES, xp*10, attacker);
+				    			if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
+				    				PPa.addXP(SkillType.SWORDS, xp*10, attacker);
+				    			if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
+				    				PPa.addXP(SkillType.UNARMED, xp*10, attacker);
+			    			}
+			    		}
+		      		}
+		      		
+		      		if(!pluginx.misc.mobSpawnerList.contains(event.getEntity()))
+		      		{
+		      			int xp = getXp(event.getEntity(), event);
+
+						if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
+							PPa.addXP(SkillType.SWORDS, xp*10, attacker);
+						else if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
+							PPa.addXP(SkillType.AXES, xp*10, attacker);
+						else if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
+							PPa.addXP(SkillType.UNARMED, xp*10, attacker);
+		      		}
+		      		Skills.XpCheckAll(attacker);
+		      		
+		      		if(event.getEntity() instanceof Wolf)
+		      		{
+		      			Wolf theWolf = (Wolf)event.getEntity();
+		      			
+		      			if(attacker.getItemInHand().getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
+		      			{
+		      				event.setCancelled(true);
+		      				if(theWolf.isTamed())
+		      				{
+		      				attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
+		      						mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(theWolf)})+" "+
+		      						mcLocale.getString("Combat.BeastLoreHealthWolfTamed", new Object[] {theWolf.getHealth()}));
+		      				} 
+		      				else
+		      				{
+		      					attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
+		      							mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {theWolf.getHealth()}));
+		      				}
+		      			}
+		      		}
+				}
+			}
+		}
+		
+		/*
+		 * OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
+		 */
+		if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf)
+		{
+			EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
+			Wolf theWolf = (Wolf) eventb.getDamager();
+			if(theWolf.isTamed() && Taming.ownerOnline(theWolf, pluginx))
+			{
+				if(Taming.getOwner(theWolf, pluginx) == null)
+					return;
+				Player master = Taming.getOwner(theWolf, pluginx);
+				PlayerProfile PPo = Users.getProfile(master);
+				
+				if(mcPermissions.getInstance().taming(master))
+				{
+					//Sharpened Claws
+					if(PPo.getSkillLevel(SkillType.TAMING) >= 750)
+					{
+						event.setDamage(event.getDamage() + 2);
+					}
+					
+					//Gore
+					if(Math.random() * 1000 <= PPo.getSkillLevel(SkillType.TAMING))
+					{
+						event.setDamage(event.getDamage() * 2);
+						
+						if(event.getEntity() instanceof Player)
+						{
+							Player target = (Player)event.getEntity();
+							target.sendMessage(mcLocale.getString("Combat.StruckByGore")); //$NON-NLS-1$
+							Users.getProfile(target).setBleedTicks(2);
+						}
+						else
+							pluginx.misc.addToBleedQue((LivingEntity) event.getEntity());
+						
+						master.sendMessage(mcLocale.getString("Combat.Gore")); //$NON-NLS-1$
+					}
+					if(!event.getEntity().isDead() && !pluginx.misc.mobSpawnerList.contains(event.getEntity()))
+					{
+						int xp = getXp(event.getEntity(), event);
+						Users.getProfile(master).addXP(SkillType.TAMING, xp*10, master);
+						
+						if(event.getEntity() instanceof Player)
+						{
+							xp = (event.getDamage() * 2);
+							Users.getProfile(master).addXP(SkillType.TAMING, (int)((xp*10)*1.5), master);
+						}
+						Skills.XpCheckSkill(SkillType.TAMING, master);
+					}
+				}
+			}
+		}
+		//Another offensive check for Archery
+		if(event instanceof EntityDamageByEntityEvent && event.getCause() == DamageCause.PROJECTILE && ((EntityDamageByEntityEvent) event).getDamager() instanceof Arrow)
+			archeryCheck((EntityDamageByEntityEvent)event, pluginx);
+			
+		/*
+		 * DEFENSIVE CHECKS
+		 */
+		if(event instanceof EntityDamageByEntityEvent && event.getEntity() instanceof Player)
+		{
+			Swords.counterAttackChecks((EntityDamageByEntityEvent)event);
+			Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event);
+		}
+		/*
+		 * DEFENSIVE CHECKS FOR WOLVES
+		 */
+		
+		if(event.getEntity() instanceof Wolf)
+		{
+			Wolf theWolf = (Wolf) event.getEntity();
+			
+			if(theWolf.isTamed() && Taming.ownerOnline(theWolf, pluginx))
+			{
+				if(Taming.getOwner(theWolf, pluginx) == null)
+					return;
+				
+				Player master = Taming.getOwner(theWolf, pluginx);
+				PlayerProfile PPo = Users.getProfile(master);
+				if(mcPermissions.getInstance().taming(master))
+				{				
+					//Shock-Proof
+					if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getSkillLevel(SkillType.TAMING) >= 500)
+					{
+						event.setDamage(2);
+					}
+					
+					//Thick Fur
+					if(PPo.getSkillLevel(SkillType.TAMING) >= 250)
+						event.setDamage(event.getDamage() / 2);
+				}
+			}
+		}
+	}
+	
+	public static void combatAbilityChecks(Player attacker, PlayerProfile PPa, Plugin pluginx)
+	{
+		//Check to see if any abilities need to be activated
+		if(PPa.getAxePreparationMode())
+			Axes.skullSplitterCheck(attacker);
+		if(PPa.getSwordsPreparationMode())
+			Swords.serratedStrikesActivationCheck(attacker);
+		if(PPa.getFistsPreparationMode())
+			Unarmed.berserkActivationCheck(attacker);
+	}
+	public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx)
+	{
+		Arrow arrow = (Arrow)event.getDamager();
+    	Entity y = arrow.getShooter();
+    	Entity x = event.getEntity();
+    	if(x instanceof Player)
+    	{
+    		Player defender = (Player)x;
+    		PlayerProfile PPd = Users.getProfile(defender);
+    		if(PPd == null)
+    			Users.addUser(defender);
+    		if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0)
+    		{
+	    		if(defender != null && PPd.getSkillLevel(SkillType.UNARMED) >= 1000)
+	    		{
+	    			if(Math.random() * 1000 <= 500)
+	    			{
+	    				event.setCancelled(true);
+	    				defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
+	    				return;
+	    			}
+	    		} else if(defender != null && Math.random() * 1000 <= (PPd.getSkillLevel(SkillType.UNARMED) / 2))
+	    		{
+	    			event.setCancelled(true);
+	    			defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect")); //$NON-NLS-1$
+	    			return;
+	    		}
+    		}
+    	}
+    	/*
+    	 * If attacker is player
+    	 */
+    	if(y instanceof Player)
+    	{
+    		Player attacker = (Player)y;
+    		PlayerProfile PPa = Users.getProfile(attacker);
+    		if(mcPermissions.getInstance().archery(attacker))
+    		{
+    			Archery.trackArrows(pluginx, x, event, attacker);
+    			
+    			/*
+    			 * IGNITION
+    			 */
+    			Archery.ignitionCheck(x, event, attacker);
+    		/*
+    		 * Defender is Monster
+    		 */
+    		if(!pluginx.misc.mobSpawnerList.contains(x))
+    		{
+    			int xp = getXp(event.getEntity(), event);
+				PPa.addXP(SkillType.ARCHERY, xp*10, attacker);
+    		}
+    		/*
+    		 * Attacker is Player
+    		 */
+    		if(x instanceof Player){
+    			Player defender = (Player)x;
+    			PlayerProfile PPd = Users.getProfile(defender);
+    			/*
+    			 * Stuff for the daze proc
+    			 */
+    	    		if(PPa.inParty() && PPd.inParty())
+    	    		{
+    					if(Party.getInstance().inSameParty(defender, attacker))
+    					{
+    						event.setCancelled(true);
+    						return;
+    					}
+    	    		}
+    	    		/*
+    	    		 * PVP XP
+    	    		 */
+    	    		if(LoadProperties.pvpxp && !Party.getInstance().inSameParty(attacker, defender) 
+    	    				&& ((PPd.getLastLogin()+5)*1000) < System.currentTimeMillis() && !attacker.getName().equals(defender.getName()))
+    	    		{
+    	    			int xp = (int) ((event.getDamage() * 2) * 10);
+    	    			PPa.addXP(SkillType.ARCHERY, xp, attacker);
+    	    		}
+    				/*
+    				 * DAZE PROC
+    				 */
+    	    		Archery.dazeCheck(defender, attacker);
+    			}
+    		}
+    		Skills.XpCheckSkill(SkillType.ARCHERY, attacker);
+    	}
+    }
+    public static void dealDamage(Entity target, int dmg){
+    	if(target instanceof Player){
+    		((Player) target).damage(dmg);
+    	}
+    	if(target instanceof Animals){
+    		((Animals) target).damage(dmg);
+    	}
+    	if(target instanceof Monster){
+    		((Monster) target).damage(dmg);
+    	}
+    }
+    public static boolean pvpAllowed(EntityDamageByEntityEvent event, World world)
+    {
+    	if(!event.getEntity().getWorld().getPVP())
+    		return false;
+    	//If it made it this far, pvp is enabled
+    	return true;
+    }
+    public static int getXp(Entity entity, EntityDamageEvent event)
+    {
+    	int xp = 0;
+    	if(entity instanceof LivingEntity)
+    	{
+    		LivingEntity le = (LivingEntity)entity;
+	    	//Prevent a ridiculous amount of XP being granted by capping it at the remaining health of the entity
+				int hpLeft = le.getHealth(), xpinc = 0;
+				
+				if(hpLeft < event.getDamage())
+					xpinc = event.getDamage();
+				else
+					xpinc = hpLeft;
+			
+	    	if(entity instanceof Animals)
+	    	{
+		    	xp = (int) (xpinc * 1);
+	    	} else
+	    	{
+	    		if(entity instanceof Enderman)
+					xp = (xpinc * 2);
+		    	else if(entity instanceof Creeper)
+					xp = (xpinc * 4);
+		    	else if(entity instanceof Silverfish)
+					xp = (xpinc * 3);
+		    	else if(entity instanceof CaveSpider)
+					xp = (xpinc * 3);
+		    	else if(entity instanceof Spider)
+					xp = (xpinc * 3);
+		    	else if(entity instanceof Skeleton)
+					xp = (xpinc * 2);
+		    	else if(entity instanceof Zombie)
+					xp = (xpinc * 2);
+		    	else if(entity instanceof PigZombie)
+					xp = (xpinc * 3);
+		    	else if(entity instanceof Slime)
+					xp = (xpinc * 2);
+		    	else if(entity instanceof Ghast)
+					xp = (xpinc * 3);
+		    	else if(entity instanceof Blaze)
+		    		xp = (xpinc * 3);
+		    	else if(entity instanceof EnderDragon)
+		    		xp = (xpinc * 8);
+	    	}
+    	}
+    	return xp;
+    }
+}

+ 211 - 211
src/com/gmail/nossr50/Database.java → src/main/java/com/gmail/nossr50/Database.java

@@ -1,211 +1,211 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.sql.PreparedStatement;
-
-import com.gmail.nossr50.config.LoadProperties;
-
-public class Database {
-
-	private mcMMO plugin;
-	private String connectionString;
-
-	public Database(mcMMO instance) {
-		this.plugin = instance;
-		this.connectionString = "jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass;
-		// Load the driver instance
-		try {
-			Class.forName("com.mysql.jdbc.Driver");
-			DriverManager.getConnection(connectionString);
-		} catch (ClassNotFoundException e) {
-			plugin.getServer().getLogger().warning(e.getLocalizedMessage());
-		} catch (SQLException e) {
-			plugin.getServer().getLogger().warning(e.getLocalizedMessage());
-			System.out.println("SQLException: " + e.getMessage());
-			System.out.println("SQLState: " + e.getSQLState());
-			System.out.println("VendorError: " + e.getErrorCode());
-		}
-	}
-	//Create the DB structure
-	public void createStructure() {
-		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "huds` (`user_id` int(10) unsigned NOT NULL,"
-				+ "`hudtype` varchar(50) NOT NULL DEFAULT '',"
-				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
-				+ "`user` varchar(40) NOT NULL,"
-				+ "`lastlogin` int(32) unsigned NOT NULL,"
-				+ "`party` varchar(100) NOT NULL DEFAULT '',"
-				+ "PRIMARY KEY (`id`),"
-				+ "UNIQUE KEY `user` (`user`)) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
-		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "cooldowns` (`user_id` int(10) unsigned NOT NULL,"
-				+ "`taming` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`mining` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`repair` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`unarmed` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`herbalism` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`excavation` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`archery` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
-				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "skills` (`user_id` int(10) unsigned NOT NULL,"
-				+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "experience` (`user_id` int(10) unsigned NOT NULL,"
-				+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
-				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "spawn` (`user_id` int(10) NOT NULL,"
-				+ "`x` int(64) NOT NULL DEFAULT '0',"
-				+ "`y` int(64) NOT NULL DEFAULT '0',"
-				+ "`z` int(64) NOT NULL DEFAULT '0',"
-				+ "`world` varchar(50) NOT NULL DEFAULT '',"
-				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
-		
-		Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"skills2`");
-		Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"experience2`");
-		
-		checkDatabaseStructure();
-	}
-
-	public void checkDatabaseStructure()
-	{
-		String sql = "SELECT * FROM  `mcmmo_experience` ORDER BY  `"+LoadProperties.MySQLtablePrefix+"experience`.`fishing` ASC LIMIT 0 , 30";
-		
-		ResultSet rs = null;
-		HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
-		try {
-			Connection conn = DriverManager.getConnection(connectionString);
-			PreparedStatement stmt = conn.prepareStatement(sql);
-			if (stmt.executeQuery() != null) {
-				stmt.executeQuery();
-				rs = stmt.getResultSet();
-				while (rs.next()) {
-					ArrayList<String> Col = new ArrayList<String>();
-					for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
-						Col.add(rs.getString(i));
-					}
-					Rows.put(rs.getRow(), Col);
-				}
-			}
-			conn.close();
-		} catch (SQLException ex) {
-			System.out.println("Updating mcMMO MySQL tables...");
-			Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "skills` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
-			Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
-		}
-	}
-	
-	// write query
-	public boolean Write(String sql) {
-		try {
-			Connection conn = DriverManager.getConnection(connectionString);
-			PreparedStatement stmt = conn.prepareStatement(sql);
-			stmt.executeUpdate();
-			conn.close();
-			return true;
-		} catch (SQLException ex) {
-			System.out.println("SQLException: " + ex.getMessage());
-			System.out.println("SQLState: " + ex.getSQLState());
-			System.out.println("VendorError: " + ex.getErrorCode());
-			return false;
-		}
-	}
-
-	// Get Int
-	// only return first row / first field
-	public Integer GetInt(String sql) {
-		ResultSet rs = null;
-		Integer result = 0;
-		try {
-			Connection conn = DriverManager.getConnection(connectionString);
-			PreparedStatement stmt = conn.prepareStatement(sql);
-			stmt = conn.prepareStatement(sql);
-			if (stmt.executeQuery() != null) {
-				stmt.executeQuery();
-				rs = stmt.getResultSet();
-				if (rs.next()) {
-					result = rs.getInt(1);
-				} else {
-					result = 0;
-				}
-			}
-			conn.close();
-		} catch (SQLException ex) {
-			System.out.println("SQLException: " + ex.getMessage());
-			System.out.println("SQLState: " + ex.getSQLState());
-			System.out.println("VendorError: " + ex.getErrorCode());
-		}
-
-		return result;
-	}
-
-	// read query
-	public HashMap<Integer, ArrayList<String>> Read(String sql) {
-		ResultSet rs = null;
-		HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
-		try {
-			Connection conn = DriverManager.getConnection(connectionString);
-			PreparedStatement stmt = conn.prepareStatement(sql);
-			if (stmt.executeQuery() != null) {
-				stmt.executeQuery();
-				rs = stmt.getResultSet();
-				while (rs.next()) {
-					ArrayList<String> Col = new ArrayList<String>();
-					for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
-						Col.add(rs.getString(i));
-					}
-					Rows.put(rs.getRow(), Col);
-				}
-			}
-			conn.close();
-		} catch (SQLException ex) {
-			System.out.println("SQLException: " + ex.getMessage());
-			System.out.println("SQLState: " + ex.getSQLState());
-			System.out.println("VendorError: " + ex.getErrorCode());
-		}
-		return Rows;
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.sql.PreparedStatement;
+
+import com.gmail.nossr50.config.LoadProperties;
+
+public class Database {
+
+	private mcMMO plugin;
+	private String connectionString;
+
+	public Database(mcMMO instance) {
+		this.plugin = instance;
+		this.connectionString = "jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass;
+		// Load the driver instance
+		try {
+			Class.forName("com.mysql.jdbc.Driver");
+			DriverManager.getConnection(connectionString);
+		} catch (ClassNotFoundException e) {
+			plugin.getServer().getLogger().warning(e.getLocalizedMessage());
+		} catch (SQLException e) {
+			plugin.getServer().getLogger().warning(e.getLocalizedMessage());
+			System.out.println("SQLException: " + e.getMessage());
+			System.out.println("SQLState: " + e.getSQLState());
+			System.out.println("VendorError: " + e.getErrorCode());
+		}
+	}
+	//Create the DB structure
+	public void createStructure() {
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "huds` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`hudtype` varchar(50) NOT NULL DEFAULT '',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
+				+ "`user` varchar(40) NOT NULL,"
+				+ "`lastlogin` int(32) unsigned NOT NULL,"
+				+ "`party` varchar(100) NOT NULL DEFAULT '',"
+				+ "PRIMARY KEY (`id`),"
+				+ "UNIQUE KEY `user` (`user`)) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "cooldowns` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`taming` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`mining` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`repair` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`unarmed` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`herbalism` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`excavation` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`archery` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "skills` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "experience` (`user_id` int(10) unsigned NOT NULL,"
+				+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		Write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "spawn` (`user_id` int(10) NOT NULL,"
+				+ "`x` int(64) NOT NULL DEFAULT '0',"
+				+ "`y` int(64) NOT NULL DEFAULT '0',"
+				+ "`z` int(64) NOT NULL DEFAULT '0',"
+				+ "`world` varchar(50) NOT NULL DEFAULT '',"
+				+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+		
+		Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"skills2`");
+		Write("DROP TABLE IF EXISTS `"+LoadProperties.MySQLtablePrefix+"experience2`");
+		
+		checkDatabaseStructure();
+	}
+
+	public void checkDatabaseStructure()
+	{
+		String sql = "SELECT * FROM  `mcmmo_experience` ORDER BY  `"+LoadProperties.MySQLtablePrefix+"experience`.`fishing` ASC LIMIT 0 , 30";
+		
+		ResultSet rs = null;
+		HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
+		try {
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			if (stmt.executeQuery() != null) {
+				stmt.executeQuery();
+				rs = stmt.getResultSet();
+				while (rs.next()) {
+					ArrayList<String> Col = new ArrayList<String>();
+					for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
+						Col.add(rs.getString(i));
+					}
+					Rows.put(rs.getRow(), Col);
+				}
+			}
+			conn.close();
+		} catch (SQLException ex) {
+			System.out.println("Updating mcMMO MySQL tables...");
+			Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "skills` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
+			Write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
+		}
+	}
+	
+	// write query
+	public boolean Write(String sql) {
+		try {
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			stmt.executeUpdate();
+			conn.close();
+			return true;
+		} catch (SQLException ex) {
+			System.out.println("SQLException: " + ex.getMessage());
+			System.out.println("SQLState: " + ex.getSQLState());
+			System.out.println("VendorError: " + ex.getErrorCode());
+			return false;
+		}
+	}
+
+	// Get Int
+	// only return first row / first field
+	public Integer GetInt(String sql) {
+		ResultSet rs = null;
+		Integer result = 0;
+		try {
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			stmt = conn.prepareStatement(sql);
+			if (stmt.executeQuery() != null) {
+				stmt.executeQuery();
+				rs = stmt.getResultSet();
+				if (rs.next()) {
+					result = rs.getInt(1);
+				} else {
+					result = 0;
+				}
+			}
+			conn.close();
+		} catch (SQLException ex) {
+			System.out.println("SQLException: " + ex.getMessage());
+			System.out.println("SQLState: " + ex.getSQLState());
+			System.out.println("VendorError: " + ex.getErrorCode());
+		}
+
+		return result;
+	}
+
+	// read query
+	public HashMap<Integer, ArrayList<String>> Read(String sql) {
+		ResultSet rs = null;
+		HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
+		try {
+			Connection conn = DriverManager.getConnection(connectionString);
+			PreparedStatement stmt = conn.prepareStatement(sql);
+			if (stmt.executeQuery() != null) {
+				stmt.executeQuery();
+				rs = stmt.getResultSet();
+				while (rs.next()) {
+					ArrayList<String> Col = new ArrayList<String>();
+					for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
+						Col.add(rs.getString(i));
+					}
+					Rows.put(rs.getRow(), Col);
+				}
+			}
+			conn.close();
+		} catch (SQLException ex) {
+			System.out.println("SQLException: " + ex.getMessage());
+			System.out.println("SQLState: " + ex.getSQLState());
+			System.out.println("VendorError: " + ex.getErrorCode());
+		}
+		return Rows;
+	}
+}

+ 104 - 104
src/com/gmail/nossr50/Item.java → src/main/java/com/gmail/nossr50/Item.java

@@ -1,104 +1,104 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.Plugin;
-import com.gmail.nossr50.config.*;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.*;
-
-import com.gmail.nossr50.datatypes.PlayerProfile;
-
-public class Item {
-	
-	public static void itemchecks(Player player, Plugin plugin)
-	{
-		ItemStack inhand = player.getItemInHand();
-		if(LoadProperties.chimaeraWingEnable && inhand.getTypeId() == LoadProperties.chimaeraId)
-		{
-			chimaerawing(player, plugin);
-		}
-	}
-	
-	@SuppressWarnings("deprecation")
-	public static void chimaerawing(Player player, Plugin plugin)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-		ItemStack is = player.getItemInHand();
-		Block block = player.getLocation().getBlock();
-		if(mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == LoadProperties.chimaeraId)
-		{
-    		if(Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing)
-    		{
-    			Block derp = player.getLocation().getBlock();
-    			int y = derp.getY();
-    			ItemStack[] inventory = player.getInventory().getContents();
-    	    	for(ItemStack x : inventory){
-    	    		if(x != null && x.getTypeId() == LoadProperties.chimaeraId){
-    	    			if(x.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing + 1)
-    	    			{
-    	    				x.setAmount(x.getAmount() - LoadProperties.feathersConsumedByChimaeraWing);
-    	    				player.getInventory().setContents(inventory);
-        	    			player.updateInventory();
-        	    			break;
-    	    			} else {
-    	    				x.setAmount(0);
-    	    				x.setTypeId(0);
-    	    				player.getInventory().setContents(inventory);
-        	    			player.updateInventory();
-        	    			break;
-    	    			}
-    	    		}
-    	    	}
-    			while(y < 127)
-    			{
-    				y++;
-    				if(player != null)
-    				{
-    					if(player.getLocation().getWorld().getBlockAt(block.getX(), y, block.getZ()).getType() != Material.AIR)
-    					{
-	    					player.sendMessage(mcLocale.getString("Item.ChimaeraWingFail")); //$NON-NLS-1$
-	    					player.teleport(player.getLocation().getWorld().getBlockAt(block.getX(), (y - 1), block.getZ()).getLocation());
-	    					return;
-    					}
-    				}
-    			}
-    			if(PP.getMySpawn(player) != null)
-    			{
-    				Location mySpawn = PP.getMySpawn(player);
-    				if(mySpawn != null){
-	    				player.teleport(mySpawn); //Do it twice to prevent weird stuff
-	    				player.teleport(mySpawn);
-    				}
-    			} else {
-    				player.teleport(player.getWorld().getSpawnLocation());
-    			}
-    			player.sendMessage(mcLocale.getString("Item.ChimaeraWingPass")); //$NON-NLS-1$
-    		} else if (!Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= 10) 
-    		{
-    			player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(player, PP.getRecentlyHurt(), 60)})); //$NON-NLS-1$
-    		} else if (is.getTypeId() == LoadProperties.chimaeraId && is.getAmount() <= 9){
-    			player.sendMessage(mcLocale.getString("Item.NeedFeathers")); //$NON-NLS-1$
-    		}
-    	}
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.Plugin;
+import com.gmail.nossr50.config.*;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.*;
+
+import com.gmail.nossr50.datatypes.PlayerProfile;
+
+public class Item {
+	
+	public static void itemchecks(Player player, Plugin plugin)
+	{
+		ItemStack inhand = player.getItemInHand();
+		if(LoadProperties.chimaeraWingEnable && inhand.getTypeId() == LoadProperties.chimaeraId)
+		{
+			chimaerawing(player, plugin);
+		}
+	}
+	
+	@SuppressWarnings("deprecation")
+	public static void chimaerawing(Player player, Plugin plugin)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+		ItemStack is = player.getItemInHand();
+		Block block = player.getLocation().getBlock();
+		if(mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == LoadProperties.chimaeraId)
+		{
+    		if(Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing)
+    		{
+    			Block derp = player.getLocation().getBlock();
+    			int y = derp.getY();
+    			ItemStack[] inventory = player.getInventory().getContents();
+    	    	for(ItemStack x : inventory){
+    	    		if(x != null && x.getTypeId() == LoadProperties.chimaeraId){
+    	    			if(x.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing + 1)
+    	    			{
+    	    				x.setAmount(x.getAmount() - LoadProperties.feathersConsumedByChimaeraWing);
+    	    				player.getInventory().setContents(inventory);
+        	    			player.updateInventory();
+        	    			break;
+    	    			} else {
+    	    				x.setAmount(0);
+    	    				x.setTypeId(0);
+    	    				player.getInventory().setContents(inventory);
+        	    			player.updateInventory();
+        	    			break;
+    	    			}
+    	    		}
+    	    	}
+    			while(y < 127)
+    			{
+    				y++;
+    				if(player != null)
+    				{
+    					if(player.getLocation().getWorld().getBlockAt(block.getX(), y, block.getZ()).getType() != Material.AIR)
+    					{
+	    					player.sendMessage(mcLocale.getString("Item.ChimaeraWingFail")); //$NON-NLS-1$
+	    					player.teleport(player.getLocation().getWorld().getBlockAt(block.getX(), (y - 1), block.getZ()).getLocation());
+	    					return;
+    					}
+    				}
+    			}
+    			if(PP.getMySpawn(player) != null)
+    			{
+    				Location mySpawn = PP.getMySpawn(player);
+    				if(mySpawn != null){
+	    				player.teleport(mySpawn); //Do it twice to prevent weird stuff
+	    				player.teleport(mySpawn);
+    				}
+    			} else {
+    				player.teleport(player.getWorld().getSpawnLocation());
+    			}
+    			player.sendMessage(mcLocale.getString("Item.ChimaeraWingPass")); //$NON-NLS-1$
+    		} else if (!Skills.cooldownOver(player, PP.getRecentlyHurt(), 60) && is.getAmount() >= 10) 
+    		{
+    			player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(player, PP.getRecentlyHurt(), 60)})); //$NON-NLS-1$
+    		} else if (is.getTypeId() == LoadProperties.chimaeraId && is.getAmount() <= 9){
+    			player.sendMessage(mcLocale.getString("Item.NeedFeathers")); //$NON-NLS-1$
+    		}
+    	}
+	}
+}

+ 279 - 279
src/com/gmail/nossr50/Leaderboard.java → src/main/java/com/gmail/nossr50/Leaderboard.java

@@ -1,279 +1,279 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerStat;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.datatypes.Tree;
-
-public class Leaderboard 
-{
-	static String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; //$NON-NLS-1$
-	protected static final Logger log = Logger.getLogger("Minecraft"); //$NON-NLS-1$
-	
-	/*
-	 * Read from the file
-	 */
-	public static void makeLeaderboards()
-	{
-		//Make Trees
-		Tree Mining = new Tree();
-		Tree WoodCutting = new Tree();
-		Tree Herbalism = new Tree();
-		Tree Excavation = new Tree();
-		Tree Acrobatics = new Tree();
-		Tree Repair = new Tree();
-		Tree Swords = new Tree();
-		Tree Axes = new Tree();
-		Tree Archery = new Tree();
-		Tree Unarmed = new Tree();
-		Tree Taming = new Tree();
-		Tree Fishing = new Tree();
-		Tree Enchanting = new Tree();
-		Tree Alchemy = new Tree();
-		Tree PowerLevel = new Tree();
-		
-		//Add Data To Trees
-		try {
-        	//Open the user file
-        	FileReader file = new FileReader(location);
-        	BufferedReader in = new BufferedReader(file);
-        	String line = ""; //$NON-NLS-1$
-        	ArrayList<String> players = new ArrayList<String>();
-        	while((line = in.readLine()) != null)
-        	{
-        		String[] character = line.split(":"); //$NON-NLS-1$
-        		String p = character[0];
-        		
-        		//Prevent the same player from being added multiple times
-        		if(players.contains(p))
-        			continue;
-        		else
-        			players.add(p);
-
-    			int Plvl = 0;
-    			
-    			if(character.length > 1 && m.isInt(character[1]))
-    			{
-    				Mining.add(p, Integer.valueOf(character[1]));
-    				Plvl += Integer.valueOf(character[1]);
-    			}
-    			if(character.length > 5 && m.isInt(character[5])){
-    				WoodCutting.add(p, Integer.valueOf(character[5]));
-    				Plvl += Integer.valueOf(character[5]);
-    			}
-    			if(character.length > 7 && m.isInt(character[7])){
-    				Repair.add(p, Integer.valueOf(character[7]));
-    				Plvl += Integer.valueOf(character[7]);
-    			}
-    			if(character.length > 8 && m.isInt(character[8])){
-    				Unarmed.add(p, Integer.valueOf(character[8]));
-    				Plvl += Integer.valueOf(character[8]);
-    			}
-    			if(character.length > 9 && m.isInt(character[9])){
-    				Herbalism.add(p, Integer.valueOf(character[9]));
-    				Plvl += Integer.valueOf(character[9]);
-    			}
-    			if(character.length > 10 && m.isInt(character[10])){
-    				Excavation.add(p, Integer.valueOf(character[10]));
-    				Plvl += Integer.valueOf(character[10]);
-    			}
-    			if(character.length > 11 && m.isInt(character[11])){
-    				Archery.add(p, Integer.valueOf(character[11]));
-    				Plvl += Integer.valueOf(character[11]);
-    			}
-    			if(character.length > 12 && m.isInt(character[12])){
-    				Swords.add(p, Integer.valueOf(character[12]));
-    				Plvl += Integer.valueOf(character[12]);
-    			}
-    			if(character.length > 13 && m.isInt(character[13])){
-    				Axes.add(p, Integer.valueOf(character[13]));
-    				Plvl += Integer.valueOf(character[13]);
-    			}
-    			if(character.length > 14 && m.isInt(character[14])){
-    				Acrobatics.add(p, Integer.valueOf(character[14]));
-    				Plvl += Integer.valueOf(character[14]);
-    			}
-    			if(character.length > 24 && m.isInt(character[24])){
-    				Taming.add(p, Integer.valueOf(character[24]));
-    				Plvl += Integer.valueOf(character[24]);
-    			}
-    			if(character.length > 34 && m.isInt(character[34]))
-    			{
-    				Fishing.add(p, Integer.valueOf(character[34]));
-    				Plvl += Integer.valueOf(character[34]);
-    			}
-    			
-    			PowerLevel.add(p, Plvl);
-        	}
-        	in.close();
-        } catch (Exception e) {
-            log.log(Level.SEVERE, "Exception while reading " //$NON-NLS-1$
-            		+ location + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$
-        }
-        //Write the leader board files
-        leaderWrite(Mining.inOrder(), SkillType.MINING); //$NON-NLS-1$
-        leaderWrite(WoodCutting.inOrder(), SkillType.WOODCUTTING); //$NON-NLS-1$
-        leaderWrite(Repair.inOrder(), SkillType.REPAIR); //$NON-NLS-1$
-        leaderWrite(Unarmed.inOrder(), SkillType.UNARMED); //$NON-NLS-1$
-        leaderWrite(Herbalism.inOrder(), SkillType.HERBALISM); //$NON-NLS-1$
-        leaderWrite(Excavation.inOrder(), SkillType.EXCAVATION); //$NON-NLS-1$
-        leaderWrite(Archery.inOrder(), SkillType.ARCHERY); //$NON-NLS-1$
-        leaderWrite(Swords.inOrder(), SkillType.SWORDS); //$NON-NLS-1$
-        leaderWrite(Axes.inOrder(), SkillType.AXES); //$NON-NLS-1$
-        leaderWrite(Acrobatics.inOrder(), SkillType.ACROBATICS); //$NON-NLS-1$
-        leaderWrite(Taming.inOrder(), SkillType.TAMING); //$NON-NLS-1$
-        leaderWrite(Fishing.inOrder(), SkillType.FISHING); //$NON-NLS-1$
-        leaderWrite(Alchemy.inOrder(), SkillType.ALCHEMY); //$NON-NLS-1$
-        leaderWrite(Enchanting.inOrder(), SkillType.ENCHANTING); //$NON-NLS-1$
-        leaderWrite(PowerLevel.inOrder(), SkillType.ALL); //$NON-NLS-1$
-	}
-	public static void leaderWrite(PlayerStat[] ps, SkillType skillType)
-	{
-		String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
-		//CHECK IF THE FILE EXISTS
-		File theDir = new File(theLocation);
-		if(!theDir.exists())
-		{
-			//properties = new PropertiesFile(location);
-			FileWriter writer = null;
-			try {
-				writer = new FileWriter(theLocation);
-			} catch (Exception e) {
-				log.log(Level.SEVERE, "Exception while creating " + theLocation, e); //$NON-NLS-1$
-			} finally {
-				try {
-					if (writer != null) {
-						writer.close();
-					}
-				} catch (IOException e) {
-					log.log(Level.SEVERE, "Exception while closing writer for " + theLocation, e); //$NON-NLS-1$
-				}
-			}
-		} else {
-			try {
-	        	FileReader file = new FileReader(theLocation);
-	
-	    		//HERP
-	            BufferedReader in = new BufferedReader(file);
-	            StringBuilder writer = new StringBuilder();
-	            
-	        	for(PlayerStat p : ps)
-	        	{
-	        		if(p.name.equals("$mcMMO_DummyInfo")) //$NON-NLS-1$
-	        			continue;
-	        		if(p.statVal == 0)
-	        			continue;
-	        		writer.append(p.name + ":" + p.statVal); //$NON-NLS-1$
-	        		writer.append("\r\n");  //$NON-NLS-1$
-	        	}
-	        	
-	        	in.close();
-	        	//Write the new file
-	            FileWriter out = new FileWriter(theLocation);
-	            out.write(writer.toString());
-	            out.close();
-	        } catch (Exception e) {
-	                log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ //$NON-NLS-2$
-	        }
-		}
-		//Create/open the file
-		//Loop through backward writing each player
-		//Close the file
-	}
-	
-	public static String[] retrieveInfo(String skillName, int pagenumber)
-	{
-		String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillName + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
-		try {
-        	FileReader file = new FileReader(theLocation);
-        	BufferedReader in = new BufferedReader(file);
-        	
-        	int destination = (pagenumber - 1) * 10; //How many lines to skip through
-        	int x = 0; //how many lines we've gone through
-        	int y = 0; //going through the lines
-        	String line = ""; //$NON-NLS-1$
-        	String[] info = new String[10]; //what to return
-        	while((line = in.readLine()) != null && y < 10)
-        	{
-        		x++;
-        		if(x >= destination && y < 10){
-        			info[y] = line.toString();
-        			y++;
-        		}
-        	}
-        	in.close();
-        	return info;
-        } catch (Exception e) {
-            log.log(Level.SEVERE, "Exception while reading " //$NON-NLS-1$
-            		+ theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$
-        }
-        return null; //Shouldn't get here
-	}
-	public static void updateLeaderboard(PlayerStat ps, SkillType skillType)
-	{
-		if(LoadProperties.useMySQL)
-			return;
-		String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
-		try {
-        	//Open the file
-        	FileReader file = new FileReader(theLocation);
-            BufferedReader in = new BufferedReader(file);
-            StringBuilder writer = new StringBuilder();
-        	String line = ""; //$NON-NLS-1$
-        	Boolean inserted = false;
-        	//While not at the end of the file
-        	while((line = in.readLine()) != null)
-        	{
-        		//Insert the player into the line before it finds a smaller one
-        		if(Integer.valueOf(line.split(":")[1]) < ps.statVal && !inserted) //$NON-NLS-1$
-        		{
-        			writer.append(ps.name + ":" + ps.statVal).append("\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
-        			inserted = true;
-        		}
-        		//Write anything that isn't the player already in the file so we remove the duplicate
-        		if(!line.split(":")[0].equalsIgnoreCase(ps.name)) //$NON-NLS-1$
-        		{
-                    writer.append(line).append("\r\n"); //$NON-NLS-1$
-        		}
-        	}
-        	
-        	if(!inserted)
-        	{
-    			writer.append(ps.name + ":" + ps.statVal).append("\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
-        	}
-        	
-        	in.close();
-        	//Write the new file
-            FileWriter out = new FileWriter(theLocation);
-            out.write(writer.toString());
-            out.close();
-        } catch (Exception e) {
-                log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ //$NON-NLS-2$
-        }
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerStat;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.datatypes.Tree;
+
+public class Leaderboard 
+{
+	static String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users"; //$NON-NLS-1$
+	protected static final Logger log = Logger.getLogger("Minecraft"); //$NON-NLS-1$
+	
+	/*
+	 * Read from the file
+	 */
+	public static void makeLeaderboards()
+	{
+		//Make Trees
+		Tree Mining = new Tree();
+		Tree WoodCutting = new Tree();
+		Tree Herbalism = new Tree();
+		Tree Excavation = new Tree();
+		Tree Acrobatics = new Tree();
+		Tree Repair = new Tree();
+		Tree Swords = new Tree();
+		Tree Axes = new Tree();
+		Tree Archery = new Tree();
+		Tree Unarmed = new Tree();
+		Tree Taming = new Tree();
+		Tree Fishing = new Tree();
+		Tree Enchanting = new Tree();
+		Tree Alchemy = new Tree();
+		Tree PowerLevel = new Tree();
+		
+		//Add Data To Trees
+		try {
+        	//Open the user file
+        	FileReader file = new FileReader(location);
+        	BufferedReader in = new BufferedReader(file);
+        	String line = ""; //$NON-NLS-1$
+        	ArrayList<String> players = new ArrayList<String>();
+        	while((line = in.readLine()) != null)
+        	{
+        		String[] character = line.split(":"); //$NON-NLS-1$
+        		String p = character[0];
+        		
+        		//Prevent the same player from being added multiple times
+        		if(players.contains(p))
+        			continue;
+        		else
+        			players.add(p);
+
+    			int Plvl = 0;
+    			
+    			if(character.length > 1 && m.isInt(character[1]))
+    			{
+    				Mining.add(p, Integer.valueOf(character[1]));
+    				Plvl += Integer.valueOf(character[1]);
+    			}
+    			if(character.length > 5 && m.isInt(character[5])){
+    				WoodCutting.add(p, Integer.valueOf(character[5]));
+    				Plvl += Integer.valueOf(character[5]);
+    			}
+    			if(character.length > 7 && m.isInt(character[7])){
+    				Repair.add(p, Integer.valueOf(character[7]));
+    				Plvl += Integer.valueOf(character[7]);
+    			}
+    			if(character.length > 8 && m.isInt(character[8])){
+    				Unarmed.add(p, Integer.valueOf(character[8]));
+    				Plvl += Integer.valueOf(character[8]);
+    			}
+    			if(character.length > 9 && m.isInt(character[9])){
+    				Herbalism.add(p, Integer.valueOf(character[9]));
+    				Plvl += Integer.valueOf(character[9]);
+    			}
+    			if(character.length > 10 && m.isInt(character[10])){
+    				Excavation.add(p, Integer.valueOf(character[10]));
+    				Plvl += Integer.valueOf(character[10]);
+    			}
+    			if(character.length > 11 && m.isInt(character[11])){
+    				Archery.add(p, Integer.valueOf(character[11]));
+    				Plvl += Integer.valueOf(character[11]);
+    			}
+    			if(character.length > 12 && m.isInt(character[12])){
+    				Swords.add(p, Integer.valueOf(character[12]));
+    				Plvl += Integer.valueOf(character[12]);
+    			}
+    			if(character.length > 13 && m.isInt(character[13])){
+    				Axes.add(p, Integer.valueOf(character[13]));
+    				Plvl += Integer.valueOf(character[13]);
+    			}
+    			if(character.length > 14 && m.isInt(character[14])){
+    				Acrobatics.add(p, Integer.valueOf(character[14]));
+    				Plvl += Integer.valueOf(character[14]);
+    			}
+    			if(character.length > 24 && m.isInt(character[24])){
+    				Taming.add(p, Integer.valueOf(character[24]));
+    				Plvl += Integer.valueOf(character[24]);
+    			}
+    			if(character.length > 34 && m.isInt(character[34]))
+    			{
+    				Fishing.add(p, Integer.valueOf(character[34]));
+    				Plvl += Integer.valueOf(character[34]);
+    			}
+    			
+    			PowerLevel.add(p, Plvl);
+        	}
+        	in.close();
+        } catch (Exception e) {
+            log.log(Level.SEVERE, "Exception while reading " //$NON-NLS-1$
+            		+ location + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$
+        }
+        //Write the leader board files
+        leaderWrite(Mining.inOrder(), SkillType.MINING); //$NON-NLS-1$
+        leaderWrite(WoodCutting.inOrder(), SkillType.WOODCUTTING); //$NON-NLS-1$
+        leaderWrite(Repair.inOrder(), SkillType.REPAIR); //$NON-NLS-1$
+        leaderWrite(Unarmed.inOrder(), SkillType.UNARMED); //$NON-NLS-1$
+        leaderWrite(Herbalism.inOrder(), SkillType.HERBALISM); //$NON-NLS-1$
+        leaderWrite(Excavation.inOrder(), SkillType.EXCAVATION); //$NON-NLS-1$
+        leaderWrite(Archery.inOrder(), SkillType.ARCHERY); //$NON-NLS-1$
+        leaderWrite(Swords.inOrder(), SkillType.SWORDS); //$NON-NLS-1$
+        leaderWrite(Axes.inOrder(), SkillType.AXES); //$NON-NLS-1$
+        leaderWrite(Acrobatics.inOrder(), SkillType.ACROBATICS); //$NON-NLS-1$
+        leaderWrite(Taming.inOrder(), SkillType.TAMING); //$NON-NLS-1$
+        leaderWrite(Fishing.inOrder(), SkillType.FISHING); //$NON-NLS-1$
+        leaderWrite(Alchemy.inOrder(), SkillType.ALCHEMY); //$NON-NLS-1$
+        leaderWrite(Enchanting.inOrder(), SkillType.ENCHANTING); //$NON-NLS-1$
+        leaderWrite(PowerLevel.inOrder(), SkillType.ALL); //$NON-NLS-1$
+	}
+	public static void leaderWrite(PlayerStat[] ps, SkillType skillType)
+	{
+		String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
+		//CHECK IF THE FILE EXISTS
+		File theDir = new File(theLocation);
+		if(!theDir.exists())
+		{
+			//properties = new PropertiesFile(location);
+			FileWriter writer = null;
+			try {
+				writer = new FileWriter(theLocation);
+			} catch (Exception e) {
+				log.log(Level.SEVERE, "Exception while creating " + theLocation, e); //$NON-NLS-1$
+			} finally {
+				try {
+					if (writer != null) {
+						writer.close();
+					}
+				} catch (IOException e) {
+					log.log(Level.SEVERE, "Exception while closing writer for " + theLocation, e); //$NON-NLS-1$
+				}
+			}
+		} else {
+			try {
+	        	FileReader file = new FileReader(theLocation);
+	
+	    		//HERP
+	            BufferedReader in = new BufferedReader(file);
+	            StringBuilder writer = new StringBuilder();
+	            
+	        	for(PlayerStat p : ps)
+	        	{
+	        		if(p.name.equals("$mcMMO_DummyInfo")) //$NON-NLS-1$
+	        			continue;
+	        		if(p.statVal == 0)
+	        			continue;
+	        		writer.append(p.name + ":" + p.statVal); //$NON-NLS-1$
+	        		writer.append("\r\n");  //$NON-NLS-1$
+	        	}
+	        	
+	        	in.close();
+	        	//Write the new file
+	            FileWriter out = new FileWriter(theLocation);
+	            out.write(writer.toString());
+	            out.close();
+	        } catch (Exception e) {
+	                log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ //$NON-NLS-2$
+	        }
+		}
+		//Create/open the file
+		//Loop through backward writing each player
+		//Close the file
+	}
+	
+	public static String[] retrieveInfo(String skillName, int pagenumber)
+	{
+		String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillName + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+        	FileReader file = new FileReader(theLocation);
+        	BufferedReader in = new BufferedReader(file);
+        	
+        	int destination = (pagenumber - 1) * 10; //How many lines to skip through
+        	int x = 0; //how many lines we've gone through
+        	int y = 0; //going through the lines
+        	String line = ""; //$NON-NLS-1$
+        	String[] info = new String[10]; //what to return
+        	while((line = in.readLine()) != null && y < 10)
+        	{
+        		x++;
+        		if(x >= destination && y < 10){
+        			info[y] = line.toString();
+        			y++;
+        		}
+        	}
+        	in.close();
+        	return info;
+        } catch (Exception e) {
+            log.log(Level.SEVERE, "Exception while reading " //$NON-NLS-1$
+            		+ theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$
+        }
+        return null; //Shouldn't get here
+	}
+	public static void updateLeaderboard(PlayerStat ps, SkillType skillType)
+	{
+		if(LoadProperties.useMySQL)
+			return;
+		String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
+		try {
+        	//Open the file
+        	FileReader file = new FileReader(theLocation);
+            BufferedReader in = new BufferedReader(file);
+            StringBuilder writer = new StringBuilder();
+        	String line = ""; //$NON-NLS-1$
+        	Boolean inserted = false;
+        	//While not at the end of the file
+        	while((line = in.readLine()) != null)
+        	{
+        		//Insert the player into the line before it finds a smaller one
+        		if(Integer.valueOf(line.split(":")[1]) < ps.statVal && !inserted) //$NON-NLS-1$
+        		{
+        			writer.append(ps.name + ":" + ps.statVal).append("\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
+        			inserted = true;
+        		}
+        		//Write anything that isn't the player already in the file so we remove the duplicate
+        		if(!line.split(":")[0].equalsIgnoreCase(ps.name)) //$NON-NLS-1$
+        		{
+                    writer.append(line).append("\r\n"); //$NON-NLS-1$
+        		}
+        	}
+        	
+        	if(!inserted)
+        	{
+    			writer.append(ps.name + ":" + ps.statVal).append("\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
+        	}
+        	
+        	in.close();
+        	//Write the new file
+            FileWriter out = new FileWriter(theLocation);
+            out.write(writer.toString());
+            out.close();
+        } catch (Exception e) {
+                log.log(Level.SEVERE, "Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)", e); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+	}
+}

+ 111 - 111
src/com/gmail/nossr50/Users.java → src/main/java/com/gmail/nossr50/Users.java

@@ -1,112 +1,112 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import java.io.*;
-import java.util.Properties;
-import java.util.logging.Logger;
-import java.util.HashMap;
-
-import org.bukkit.entity.*;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-
-
-public class Users {
-    private static volatile Users instance;
-    protected static final Logger log = Logger.getLogger("Minecraft");
-    String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
-    String directory = "plugins/mcMMO/FlatFileStuff/";
-    String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/";
-    
-    //public static ArrayList<PlayerProfile> players;
-    public static HashMap<Player, PlayerProfile> players = new HashMap<Player, PlayerProfile>();
-    private Properties properties = new Properties();
-    
-    //To load
-    public void load() throws IOException {
-        properties.load(new FileInputStream(location));
-    }
-    //To save
-    public void save() 
-    {
-        try 
-        {
-	        properties.store(new FileOutputStream(location), null);
-	        }catch(IOException ex) {
-	        }
-    }
-    
-    public void loadUsers()
-    {
-    	new File(directory).mkdir();
-    	new File(directoryb).mkdir();
-        File theDir = new File(location);
-		if(!theDir.exists())
-		{
-			try {
-				FileWriter writer = new FileWriter(theDir);
-				writer.close();
-			} catch (IOException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}
-    }
-
-	
-    public static void addUser(Player player)
-    {
-    	players.put(player, new PlayerProfile(player));
-    }
-    public static void clearUsers()
-    {
-    	players.clear();
-    }
-    public static HashMap<Player, PlayerProfile> getProfiles(){
-    	return players;
-    }
-    
-    public static void removeUser(Player player)
-    {    	
-    	PlayerProfile PP = Users.getProfile(player);
-    	
-    	if(PP != null)
-    	{
-	    	PP.save();
-	    	if(players.containsKey(player))
-	    		players.remove(player);
-    	}
-    }
-
-    public static PlayerProfile getProfile(Player player){
-    	if(players.get(player) != null)
-    		return players.get(player);
-    	else
-    	{
-    		players.put(player, new PlayerProfile(player));
-    		return players.get(player);
-    	}
-    }
-    
-    public static Users getInstance() {
-		if (instance == null) {
-			instance = new Users();
-		}
-		return instance;
-	}
-
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import java.io.*;
+import java.util.Properties;
+import java.util.logging.Logger;
+import java.util.HashMap;
+
+import org.bukkit.entity.*;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+
+
+public class Users {
+    private static volatile Users instance;
+    protected static final Logger log = Logger.getLogger("Minecraft");
+    String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
+    String directory = "plugins/mcMMO/FlatFileStuff/";
+    String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/";
+    
+    //public static ArrayList<PlayerProfile> players;
+    public static HashMap<Player, PlayerProfile> players = new HashMap<Player, PlayerProfile>();
+    private Properties properties = new Properties();
+    
+    //To load
+    public void load() throws IOException {
+        properties.load(new FileInputStream(location));
+    }
+    //To save
+    public void save() 
+    {
+        try 
+        {
+	        properties.store(new FileOutputStream(location), null);
+	        }catch(IOException ex) {
+	        }
+    }
+    
+    public void loadUsers()
+    {
+    	new File(directory).mkdir();
+    	new File(directoryb).mkdir();
+        File theDir = new File(location);
+		if(!theDir.exists())
+		{
+			try {
+				FileWriter writer = new FileWriter(theDir);
+				writer.close();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+    }
+
+	
+    public static void addUser(Player player)
+    {
+    	players.put(player, new PlayerProfile(player));
+    }
+    public static void clearUsers()
+    {
+    	players.clear();
+    }
+    public static HashMap<Player, PlayerProfile> getProfiles(){
+    	return players;
+    }
+    
+    public static void removeUser(Player player)
+    {    	
+    	PlayerProfile PP = Users.getProfile(player);
+    	
+    	if(PP != null)
+    	{
+	    	PP.save();
+	    	if(players.containsKey(player))
+	    		players.remove(player);
+    	}
+    }
+
+    public static PlayerProfile getProfile(Player player){
+    	if(players.get(player) != null)
+    		return players.get(player);
+    	else
+    	{
+    		players.put(player, new PlayerProfile(player));
+    		return players.get(player);
+    	}
+    }
+    
+    public static Users getInstance() {
+		if (instance == null) {
+			instance = new Users();
+		}
+		return instance;
+	}
+
 }

+ 86 - 86
src/com/gmail/nossr50/commands/general/AddxpCommand.java → src/main/java/com/gmail/nossr50/commands/general/AddxpCommand.java

@@ -1,86 +1,86 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Skills;
-
-public class AddxpCommand implements CommandExecutor {
-	private final mcMMO plugin;
-
-	public AddxpCommand(mcMMO instance) {
-		this.plugin = instance;
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!mcPermissions.permissionsEnabled) {
-			sender.sendMessage("This command requires permissions.");
-			return true;
-		}
-
-		if (!LoadProperties.addxpEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			if (args.length < 2) {
-				// No console aliasing yet
-				// System.out.println("Usage is /"+LoadProperties.addxp+" playername skillname xp");
-				System.out.println("Usage is /addxp playername skillname xp");
-				return true;
-			} else if (args.length == 3) {
-				if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
-					int newvalue = Integer.valueOf(args[2]);
-					Users.getProfile(plugin.getServer().getPlayer(args[0])).addXP(Skills.getSkillType(args[1]), newvalue, plugin.getServer().getPlayer(args[0]));
-					plugin.getServer().getPlayer(args[0]).sendMessage(ChatColor.GREEN + "Experience granted!");
-					System.out.println(args[1] + " has been modified for " + plugin.getServer().getPlayer(args[0]).getName() + ".");
-					Skills.XpCheckAll(plugin.getServer().getPlayer(args[0]));
-				}
-			} else {
-				// No console aliasing yet
-				// System.out.println("Usage is /"+LoadProperties.addxp+" playername skillname xp");
-				System.out.println("Usage is /addxp playername skillname xp");
-			}
-			return true;
-		}
-
-		Player player = (Player) sender;
-
-		if (!mcPermissions.getInstance().mmoedit(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-		if (args.length < 2) {
-			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.addxp + " playername skillname xp");
-			return true;
-		}
-		if (args.length == 3) {
-			if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
-				int newvalue = Integer.valueOf(args[2]);
-				Users.getProfile(plugin.getServer().getPlayer(args[0])).addXP(Skills.getSkillType(args[1]), newvalue, plugin.getServer().getPlayer(args[0]));
-				plugin.getServer().getPlayer(args[0]).sendMessage(ChatColor.GREEN + "Experience granted!");
-				player.sendMessage(ChatColor.RED + args[1] + " has been modified.");
-				Skills.XpCheckAll(plugin.getServer().getPlayer(args[0]));
-			}
-		} else if (args.length == 2 && m.isInt(args[1]) && Skills.isSkill(args[0])) {
-			int newvalue = Integer.valueOf(args[1]);
-			Users.getProfile(player).addXP(Skills.getSkillType(args[0]), newvalue, player);
-			player.sendMessage(ChatColor.RED + args[0] + " has been modified.");
-		} else {
-			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.addxp + " playername skillname xp");
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Skills;
+
+public class AddxpCommand implements CommandExecutor {
+	private final mcMMO plugin;
+
+	public AddxpCommand(mcMMO instance) {
+		this.plugin = instance;
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!mcPermissions.permissionsEnabled) {
+			sender.sendMessage("This command requires permissions.");
+			return true;
+		}
+
+		if (!LoadProperties.addxpEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			if (args.length < 2) {
+				// No console aliasing yet
+				// System.out.println("Usage is /"+LoadProperties.addxp+" playername skillname xp");
+				System.out.println("Usage is /addxp playername skillname xp");
+				return true;
+			} else if (args.length == 3) {
+				if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
+					int newvalue = Integer.valueOf(args[2]);
+					Users.getProfile(plugin.getServer().getPlayer(args[0])).addXP(Skills.getSkillType(args[1]), newvalue, plugin.getServer().getPlayer(args[0]));
+					plugin.getServer().getPlayer(args[0]).sendMessage(ChatColor.GREEN + "Experience granted!");
+					System.out.println(args[1] + " has been modified for " + plugin.getServer().getPlayer(args[0]).getName() + ".");
+					Skills.XpCheckAll(plugin.getServer().getPlayer(args[0]));
+				}
+			} else {
+				// No console aliasing yet
+				// System.out.println("Usage is /"+LoadProperties.addxp+" playername skillname xp");
+				System.out.println("Usage is /addxp playername skillname xp");
+			}
+			return true;
+		}
+
+		Player player = (Player) sender;
+
+		if (!mcPermissions.getInstance().mmoedit(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+		if (args.length < 2) {
+			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.addxp + " playername skillname xp");
+			return true;
+		}
+		if (args.length == 3) {
+			if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
+				int newvalue = Integer.valueOf(args[2]);
+				Users.getProfile(plugin.getServer().getPlayer(args[0])).addXP(Skills.getSkillType(args[1]), newvalue, plugin.getServer().getPlayer(args[0]));
+				plugin.getServer().getPlayer(args[0]).sendMessage(ChatColor.GREEN + "Experience granted!");
+				player.sendMessage(ChatColor.RED + args[1] + " has been modified.");
+				Skills.XpCheckAll(plugin.getServer().getPlayer(args[0]));
+			}
+		} else if (args.length == 2 && m.isInt(args[1]) && Skills.isSkill(args[0])) {
+			int newvalue = Integer.valueOf(args[1]);
+			Users.getProfile(player).addXP(Skills.getSkillType(args[0]), newvalue, player);
+			player.sendMessage(ChatColor.RED + args[0] + " has been modified.");
+		} else {
+			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.addxp + " playername skillname xp");
+		}
+
+		return true;
+	}
+}

+ 46 - 46
src/com/gmail/nossr50/commands/general/ClearmyspawnCommand.java → src/main/java/com/gmail/nossr50/commands/general/ClearmyspawnCommand.java

@@ -1,46 +1,46 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class ClearmyspawnCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.clearmyspawnEnable || !LoadProperties.enableMySpawn) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().mySpawn(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		double x = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getX();
-		double y = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getY();
-		double z = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getZ();
-		String worldname = Bukkit.getServer().getWorlds().get(0).getName();
-		PP.setMySpawn(x, y, z, worldname);
-		player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnCleared"));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class ClearmyspawnCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.clearmyspawnEnable || !LoadProperties.enableMySpawn) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().mySpawn(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		double x = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getX();
+		double y = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getY();
+		double z = Bukkit.getServer().getWorlds().get(0).getSpawnLocation().getZ();
+		String worldname = Bukkit.getServer().getWorlds().get(0).getName();
+		PP.setMySpawn(x, y, z, worldname);
+		player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnCleared"));
+
+		return true;
+	}
+}

+ 83 - 83
src/com/gmail/nossr50/commands/general/MmoeditCommand.java → src/main/java/com/gmail/nossr50/commands/general/MmoeditCommand.java

@@ -1,83 +1,83 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Skills;
-
-public class MmoeditCommand implements CommandExecutor {
-	private final mcMMO plugin;
-
-	public MmoeditCommand(mcMMO instance) {
-		this.plugin = instance;
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!mcPermissions.permissionsEnabled) {
-			sender.sendMessage("This command requires permissions.");
-			return true;
-		}
-
-		if (!LoadProperties.mmoeditEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			if (args.length < 2) {
-				System.out.println("Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
-				return true;
-			} else if (args.length == 3) {
-				if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
-					int newvalue = Integer.valueOf(args[2]);
-					Users.getProfile(plugin.getServer().getPlayer(args[0])).modifyskill(Skills.getSkillType(args[1]), newvalue);
-					System.out.println(args[1] + " has been modified for " + plugin.getServer().getPlayer(args[0]).getName() + ".");
-				}
-			} else {
-				System.out.println("Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
-			}
-
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().mmoedit(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-		if (args.length < 2) {
-			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
-			return true;
-		}
-		if (args.length == 3) {
-			if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
-				int newvalue = Integer.valueOf(args[2]);
-				Users.getProfile(plugin.getServer().getPlayer(args[0])).modifyskill(Skills.getSkillType(args[1]), newvalue);
-				player.sendMessage(ChatColor.RED + args[1] + " has been modified.");
-			}
-		} else if (args.length == 2) {
-			if (m.isInt(args[1]) && Skills.isSkill(args[0])) {
-				int newvalue = Integer.valueOf(args[1]);
-				PP.modifyskill(Skills.getSkillType(args[0]), newvalue);
-				player.sendMessage(ChatColor.RED + args[0] + " has been modified.");
-			}
-		} else {
-			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Skills;
+
+public class MmoeditCommand implements CommandExecutor {
+	private final mcMMO plugin;
+
+	public MmoeditCommand(mcMMO instance) {
+		this.plugin = instance;
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!mcPermissions.permissionsEnabled) {
+			sender.sendMessage("This command requires permissions.");
+			return true;
+		}
+
+		if (!LoadProperties.mmoeditEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			if (args.length < 2) {
+				System.out.println("Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
+				return true;
+			} else if (args.length == 3) {
+				if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
+					int newvalue = Integer.valueOf(args[2]);
+					Users.getProfile(plugin.getServer().getPlayer(args[0])).modifyskill(Skills.getSkillType(args[1]), newvalue);
+					System.out.println(args[1] + " has been modified for " + plugin.getServer().getPlayer(args[0]).getName() + ".");
+				}
+			} else {
+				System.out.println("Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
+			}
+
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().mmoedit(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+		if (args.length < 2) {
+			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
+			return true;
+		}
+		if (args.length == 3) {
+			if ((plugin.getServer().getPlayer(args[0]) != null) && m.isInt(args[2]) && Skills.isSkill(args[1])) {
+				int newvalue = Integer.valueOf(args[2]);
+				Users.getProfile(plugin.getServer().getPlayer(args[0])).modifyskill(Skills.getSkillType(args[1]), newvalue);
+				player.sendMessage(ChatColor.RED + args[1] + " has been modified.");
+			}
+		} else if (args.length == 2) {
+			if (m.isInt(args[1]) && Skills.isSkill(args[0])) {
+				int newvalue = Integer.valueOf(args[1]);
+				PP.modifyskill(Skills.getSkillType(args[0]), newvalue);
+				player.sendMessage(ChatColor.RED + args[0] + " has been modified.");
+			}
+		} else {
+			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.mmoedit + " playername skillname newvalue");
+		}
+
+		return true;
+	}
+}

+ 39 - 39
src/com/gmail/nossr50/commands/general/MmoupdateCommand.java → src/main/java/com/gmail/nossr50/commands/general/MmoupdateCommand.java

@@ -1,39 +1,39 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class MmoupdateCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-
-		if (!mcPermissions.getInstance().admin(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-		player.sendMessage(ChatColor.GRAY + "Starting conversion...");
-		Users.clearUsers();
-		m.convertToMySQL();
-		for (Player x : Bukkit.getServer().getOnlinePlayers()) {
-			Users.addUser(x);
-		}
-		player.sendMessage(ChatColor.GREEN + "Conversion finished!");
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class MmoupdateCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+
+		if (!mcPermissions.getInstance().admin(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+		player.sendMessage(ChatColor.GRAY + "Starting conversion...");
+		Users.clearUsers();
+		m.convertToMySQL();
+		for (Player x : Bukkit.getServer().getOnlinePlayers()) {
+			Users.addUser(x);
+		}
+		player.sendMessage(ChatColor.GREEN + "Conversion finished!");
+
+		return true;
+	}
+}

+ 58 - 58
src/com/gmail/nossr50/commands/general/MyspawnCommand.java → src/main/java/com/gmail/nossr50/commands/general/MyspawnCommand.java

@@ -1,58 +1,58 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class MyspawnCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.myspawnEnable || !LoadProperties.enableMySpawn) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().mySpawn(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-		if (System.currentTimeMillis() < (PP.getMySpawnATS() * 1000) + 3600000) {
-			long x = (((PP.getMySpawnATS() * 1000) + 3600000) - System.currentTimeMillis());
-			int y = (int) (x / 60000);
-			int z = (int) ((x / 1000) - (y * 60));
-			player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnTimeNotice", new Object[] { y, z }));
-			return true;
-		}
-		PP.setMySpawnATS(System.currentTimeMillis());
-		if (PP.getMySpawn(player) != null) {
-			Location mySpawn = PP.getMySpawn(player);
-
-			if (mySpawn != null) {
-				// It's done twice because it acts oddly when you are in another world
-				player.teleport(mySpawn);
-				player.teleport(mySpawn);
-			}
-		} else {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnNotExist"));
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class MyspawnCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.myspawnEnable || !LoadProperties.enableMySpawn) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().mySpawn(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+		if (System.currentTimeMillis() < (PP.getMySpawnATS() * 1000) + 3600000) {
+			long x = (((PP.getMySpawnATS() * 1000) + 3600000) - System.currentTimeMillis());
+			int y = (int) (x / 60000);
+			int z = (int) ((x / 1000) - (y * 60));
+			player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnTimeNotice", new Object[] { y, z }));
+			return true;
+		}
+		PP.setMySpawnATS(System.currentTimeMillis());
+		if (PP.getMySpawn(player) != null) {
+			Location mySpawn = PP.getMySpawn(player);
+
+			if (mySpawn != null) {
+				// It's done twice because it acts oddly when you are in another world
+				player.teleport(mySpawn);
+				player.teleport(mySpawn);
+			}
+		} else {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnNotExist"));
+		}
+
+		return true;
+	}
+}

+ 85 - 85
src/com/gmail/nossr50/commands/general/StatsCommand.java → src/main/java/com/gmail/nossr50/commands/general/StatsCommand.java

@@ -1,85 +1,85 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Skills;
-
-public class StatsCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.statsEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		player.sendMessage(mcLocale.getString("mcPlayerListener.YourStats"));
-
-		if (mcPermissions.getEnabled())
-			player.sendMessage(mcLocale.getString("mcPlayerListener.NoSkillNote"));
-
-		ChatColor header = ChatColor.GOLD;
-
-		if (Skills.hasGatheringSkills(player)) {
-			player.sendMessage(header + "-=GATHERING SKILLS=-");
-			if (mcPermissions.getInstance().excavation(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION)));
-			if (mcPermissions.getInstance().fishing(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING)));
-			if (mcPermissions.getInstance().herbalism(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM)));
-			if (mcPermissions.getInstance().mining(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING)));
-			if (mcPermissions.getInstance().woodcutting(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING)));
-		}
-		if (Skills.hasCombatSkills(player)) {
-			player.sendMessage(header + "-=COMBAT SKILLS=-");
-			if (mcPermissions.getInstance().axes(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES)));
-			if (mcPermissions.getInstance().archery(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY)));
-			// if(mcPermissions.getInstance().sorcery(player))
-			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PP.getSkill("sorcery"), PP.getSkill("sorceryXP"), PP.getXpToLevel("excavation")));
-			if (mcPermissions.getInstance().swords(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS)));
-			if (mcPermissions.getInstance().taming(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING)));
-			if (mcPermissions.getInstance().unarmed(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED)));
-		}
-
-		if (Skills.hasMiscSkills(player)) {
-			player.sendMessage(header + "-=MISC SKILLS=-");
-			if (mcPermissions.getInstance().acrobatics(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS)));
-			// if(mcPermissions.getInstance().alchemy(player))
-			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AlchemySkill"), PP.getSkillLevel(SkillType.ALCHEMY), PP.getSkillXpLevel(SkillType.ALCHEMY), PP.getXpToLevel(SkillType.ALCHEMY)));
-			// if(mcPermissions.getInstance().enchanting(player))
-			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.EnchantingSkill"), PP.getSkillLevel(SkillType.ENCHANTING), PP.getSkillXpLevel(SkillType.ENCHANTING), PP.getXpToLevel(SkillType.ENCHANTING)));
-			if (mcPermissions.getInstance().repair(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR)));
-		}
-		player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (m.getPowerLevel(player)));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Skills;
+
+public class StatsCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.statsEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		player.sendMessage(mcLocale.getString("mcPlayerListener.YourStats"));
+
+		if (mcPermissions.getEnabled())
+			player.sendMessage(mcLocale.getString("mcPlayerListener.NoSkillNote"));
+
+		ChatColor header = ChatColor.GOLD;
+
+		if (Skills.hasGatheringSkills(player)) {
+			player.sendMessage(header + "-=GATHERING SKILLS=-");
+			if (mcPermissions.getInstance().excavation(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION)));
+			if (mcPermissions.getInstance().fishing(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING)));
+			if (mcPermissions.getInstance().herbalism(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM)));
+			if (mcPermissions.getInstance().mining(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING)));
+			if (mcPermissions.getInstance().woodcutting(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING)));
+		}
+		if (Skills.hasCombatSkills(player)) {
+			player.sendMessage(header + "-=COMBAT SKILLS=-");
+			if (mcPermissions.getInstance().axes(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES)));
+			if (mcPermissions.getInstance().archery(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY)));
+			// if(mcPermissions.getInstance().sorcery(player))
+			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PP.getSkill("sorcery"), PP.getSkill("sorceryXP"), PP.getXpToLevel("excavation")));
+			if (mcPermissions.getInstance().swords(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS)));
+			if (mcPermissions.getInstance().taming(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING)));
+			if (mcPermissions.getInstance().unarmed(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED)));
+		}
+
+		if (Skills.hasMiscSkills(player)) {
+			player.sendMessage(header + "-=MISC SKILLS=-");
+			if (mcPermissions.getInstance().acrobatics(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS)));
+			// if(mcPermissions.getInstance().alchemy(player))
+			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AlchemySkill"), PP.getSkillLevel(SkillType.ALCHEMY), PP.getSkillXpLevel(SkillType.ALCHEMY), PP.getXpToLevel(SkillType.ALCHEMY)));
+			// if(mcPermissions.getInstance().enchanting(player))
+			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.EnchantingSkill"), PP.getSkillLevel(SkillType.ENCHANTING), PP.getSkillXpLevel(SkillType.ENCHANTING), PP.getXpToLevel(SkillType.ENCHANTING)));
+			if (mcPermissions.getInstance().repair(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR)));
+		}
+		player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (m.getPowerLevel(player)));
+
+		return true;
+	}
+}

+ 98 - 98
src/com/gmail/nossr50/commands/general/WhoisCommand.java → src/main/java/com/gmail/nossr50/commands/general/WhoisCommand.java

@@ -1,98 +1,98 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Skills;
-
-public class WhoisCommand implements CommandExecutor {
-	private final mcMMO plugin;
-
-	public WhoisCommand(mcMMO instance) {
-		this.plugin = instance;
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.whoisEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-
-		if (!mcPermissions.getInstance().whois(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		if (args.length < 1) {
-			player.sendMessage(ChatColor.RED + "Proper usage is /" + LoadProperties.whois + " <playername>");
-			return true;
-		}
-		// if split[1] is a player
-		if (plugin.getServer().getPlayer(args[0]) != null) {
-			Player target = plugin.getServer().getPlayer(args[0]);
-			PlayerProfile PPt = Users.getProfile(target);
-
-			player.sendMessage(ChatColor.GREEN + "~~WHOIS RESULTS~~");
-			player.sendMessage(target.getName());
-			if (PPt.inParty())
-				player.sendMessage("Party: " + PPt.getParty());
-			player.sendMessage("Health: " + target.getHealth() + ChatColor.GRAY + " (20 is full health)");
-			player.sendMessage("OP: " + target.isOp());
-			player.sendMessage(ChatColor.GREEN + "mcMMO Stats for " + ChatColor.YELLOW + target.getName());
-
-			player.sendMessage(ChatColor.GOLD + "-=GATHERING SKILLS=-");
-			if (mcPermissions.getInstance().excavation(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PPt.getSkillLevel(SkillType.EXCAVATION), PPt.getSkillXpLevel(SkillType.EXCAVATION), PPt.getXpToLevel(SkillType.EXCAVATION)));
-			if (mcPermissions.getInstance().fishing(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PPt.getSkillLevel(SkillType.FISHING), PPt.getSkillXpLevel(SkillType.FISHING), PPt.getXpToLevel(SkillType.FISHING)));
-			if (mcPermissions.getInstance().herbalism(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PPt.getSkillLevel(SkillType.HERBALISM), PPt.getSkillXpLevel(SkillType.HERBALISM), PPt.getXpToLevel(SkillType.HERBALISM)));
-			if (mcPermissions.getInstance().mining(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PPt.getSkillLevel(SkillType.MINING), PPt.getSkillXpLevel(SkillType.MINING), PPt.getXpToLevel(SkillType.MINING)));
-			if (mcPermissions.getInstance().woodcutting(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PPt.getSkillLevel(SkillType.WOODCUTTING), PPt.getSkillXpLevel(SkillType.WOODCUTTING), PPt.getXpToLevel(SkillType.WOODCUTTING)));
-
-			player.sendMessage(ChatColor.GOLD + "-=COMBAT SKILLS=-");
-			if (mcPermissions.getInstance().axes(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PPt.getSkillLevel(SkillType.AXES), PPt.getSkillXpLevel(SkillType.AXES), PPt.getXpToLevel(SkillType.AXES)));
-			if (mcPermissions.getInstance().archery(player))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PPt.getSkillLevel(SkillType.ARCHERY), PPt.getSkillXpLevel(SkillType.ARCHERY), PPt.getXpToLevel(SkillType.ARCHERY)));
-			// if(mcPermissions.getInstance().sorcery(target))
-			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PPt.getSkill("sorcery"), PPt.getSkill("sorceryXP"), PPt.getXpToLevel("excavation")));
-			if (mcPermissions.getInstance().swords(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PPt.getSkillLevel(SkillType.SWORDS), PPt.getSkillXpLevel(SkillType.SWORDS), PPt.getXpToLevel(SkillType.SWORDS)));
-			if (mcPermissions.getInstance().taming(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PPt.getSkillLevel(SkillType.TAMING), PPt.getSkillXpLevel(SkillType.TAMING), PPt.getXpToLevel(SkillType.TAMING)));
-			if (mcPermissions.getInstance().unarmed(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PPt.getSkillLevel(SkillType.UNARMED), PPt.getSkillXpLevel(SkillType.UNARMED), PPt.getXpToLevel(SkillType.UNARMED)));
-
-			player.sendMessage(ChatColor.GOLD + "-=MISC SKILLS=-");
-			if (mcPermissions.getInstance().acrobatics(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PPt.getSkillLevel(SkillType.ACROBATICS), PPt.getSkillXpLevel(SkillType.ACROBATICS), PPt.getXpToLevel(SkillType.ACROBATICS)));
-			// if(mcPermissions.getInstance().alchemy(target))
-			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AlchemySkill"), PPt.getSkillLevel(SkillType.ALCHEMY), PPt.getSkillXpLevel(SkillType.ALCHEMY), PPt.getXpToLevel(SkillType.ALCHEMY)));
-			// if(mcPermissions.getInstance().enchanting(target))
-			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.EnchantingSkill"), PPt.getSkillLevel(SkillType.ENCHANTING), PPt.getSkillXpLevel(SkillType.ENCHANTING), PPt.getXpToLevel(SkillType.ENCHANTING)));
-			if (mcPermissions.getInstance().repair(target))
-				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PPt.getSkillLevel(SkillType.REPAIR), PPt.getSkillXpLevel(SkillType.REPAIR), PPt.getXpToLevel(SkillType.REPAIR)));
-
-			player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (m.getPowerLevel(target)));
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Skills;
+
+public class WhoisCommand implements CommandExecutor {
+	private final mcMMO plugin;
+
+	public WhoisCommand(mcMMO instance) {
+		this.plugin = instance;
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.whoisEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+
+		if (!mcPermissions.getInstance().whois(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		if (args.length < 1) {
+			player.sendMessage(ChatColor.RED + "Proper usage is /" + LoadProperties.whois + " <playername>");
+			return true;
+		}
+		// if split[1] is a player
+		if (plugin.getServer().getPlayer(args[0]) != null) {
+			Player target = plugin.getServer().getPlayer(args[0]);
+			PlayerProfile PPt = Users.getProfile(target);
+
+			player.sendMessage(ChatColor.GREEN + "~~WHOIS RESULTS~~");
+			player.sendMessage(target.getName());
+			if (PPt.inParty())
+				player.sendMessage("Party: " + PPt.getParty());
+			player.sendMessage("Health: " + target.getHealth() + ChatColor.GRAY + " (20 is full health)");
+			player.sendMessage("OP: " + target.isOp());
+			player.sendMessage(ChatColor.GREEN + "mcMMO Stats for " + ChatColor.YELLOW + target.getName());
+
+			player.sendMessage(ChatColor.GOLD + "-=GATHERING SKILLS=-");
+			if (mcPermissions.getInstance().excavation(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PPt.getSkillLevel(SkillType.EXCAVATION), PPt.getSkillXpLevel(SkillType.EXCAVATION), PPt.getXpToLevel(SkillType.EXCAVATION)));
+			if (mcPermissions.getInstance().fishing(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PPt.getSkillLevel(SkillType.FISHING), PPt.getSkillXpLevel(SkillType.FISHING), PPt.getXpToLevel(SkillType.FISHING)));
+			if (mcPermissions.getInstance().herbalism(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PPt.getSkillLevel(SkillType.HERBALISM), PPt.getSkillXpLevel(SkillType.HERBALISM), PPt.getXpToLevel(SkillType.HERBALISM)));
+			if (mcPermissions.getInstance().mining(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PPt.getSkillLevel(SkillType.MINING), PPt.getSkillXpLevel(SkillType.MINING), PPt.getXpToLevel(SkillType.MINING)));
+			if (mcPermissions.getInstance().woodcutting(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PPt.getSkillLevel(SkillType.WOODCUTTING), PPt.getSkillXpLevel(SkillType.WOODCUTTING), PPt.getXpToLevel(SkillType.WOODCUTTING)));
+
+			player.sendMessage(ChatColor.GOLD + "-=COMBAT SKILLS=-");
+			if (mcPermissions.getInstance().axes(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PPt.getSkillLevel(SkillType.AXES), PPt.getSkillXpLevel(SkillType.AXES), PPt.getXpToLevel(SkillType.AXES)));
+			if (mcPermissions.getInstance().archery(player))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PPt.getSkillLevel(SkillType.ARCHERY), PPt.getSkillXpLevel(SkillType.ARCHERY), PPt.getXpToLevel(SkillType.ARCHERY)));
+			// if(mcPermissions.getInstance().sorcery(target))
+			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PPt.getSkill("sorcery"), PPt.getSkill("sorceryXP"), PPt.getXpToLevel("excavation")));
+			if (mcPermissions.getInstance().swords(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PPt.getSkillLevel(SkillType.SWORDS), PPt.getSkillXpLevel(SkillType.SWORDS), PPt.getXpToLevel(SkillType.SWORDS)));
+			if (mcPermissions.getInstance().taming(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PPt.getSkillLevel(SkillType.TAMING), PPt.getSkillXpLevel(SkillType.TAMING), PPt.getXpToLevel(SkillType.TAMING)));
+			if (mcPermissions.getInstance().unarmed(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PPt.getSkillLevel(SkillType.UNARMED), PPt.getSkillXpLevel(SkillType.UNARMED), PPt.getXpToLevel(SkillType.UNARMED)));
+
+			player.sendMessage(ChatColor.GOLD + "-=MISC SKILLS=-");
+			if (mcPermissions.getInstance().acrobatics(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PPt.getSkillLevel(SkillType.ACROBATICS), PPt.getSkillXpLevel(SkillType.ACROBATICS), PPt.getXpToLevel(SkillType.ACROBATICS)));
+			// if(mcPermissions.getInstance().alchemy(target))
+			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AlchemySkill"), PPt.getSkillLevel(SkillType.ALCHEMY), PPt.getSkillXpLevel(SkillType.ALCHEMY), PPt.getXpToLevel(SkillType.ALCHEMY)));
+			// if(mcPermissions.getInstance().enchanting(target))
+			// player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.EnchantingSkill"), PPt.getSkillLevel(SkillType.ENCHANTING), PPt.getSkillXpLevel(SkillType.ENCHANTING), PPt.getXpToLevel(SkillType.ENCHANTING)));
+			if (mcPermissions.getInstance().repair(target))
+				player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PPt.getSkillLevel(SkillType.REPAIR), PPt.getSkillXpLevel(SkillType.REPAIR), PPt.getXpToLevel(SkillType.REPAIR)));
+
+			player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (m.getPowerLevel(target)));
+		}
+
+		return true;
+	}
+}

+ 126 - 126
src/com/gmail/nossr50/commands/general/XprateCommand.java → src/main/java/com/gmail/nossr50/commands/general/XprateCommand.java

@@ -1,126 +1,126 @@
-package com.gmail.nossr50.commands.general;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class XprateCommand implements CommandExecutor {
-	private static int oldrate = LoadProperties.xpGainMultiplier;
-	
-	public static boolean xpevent = false;
-	
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.xprateEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			if(args.length <= 0)
-			{
-				System.out.println(mcLocale.getString("Commands.xprate.proper", new Object[] {LoadProperties.xprate}));
-				System.out.println(mcLocale.getString("Commands.xprate.proper2", new Object[] {LoadProperties.xprate}));
-			}
-			
-			if(args.length == 1 && args[0].equalsIgnoreCase("reset"))
-			{
-				if(xpevent)
-				{
-					for(Player x : Bukkit.getServer().getOnlinePlayers())
-						x.sendMessage(mcLocale.getString("Commands.xprate.over"));
-					xpevent = !xpevent;
-					LoadProperties.xpGainMultiplier = oldrate;
-				} else
-				{
-					LoadProperties.xpGainMultiplier = oldrate;
-				}
-			}
-			
-			if(args.length >= 1 && m.isInt(args[0]))
-			{
-				oldrate = LoadProperties.xpGainMultiplier;
-				
-				if(args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false")))
-				{
-					if(args[1].equalsIgnoreCase("true"))
-						xpevent = true;
-					else
-						xpevent = false;
-				} else
-				{
-					System.out.println(mcLocale.getString("Commands.xprate.proper3"));
-					return true;
-				}
-				LoadProperties.xpGainMultiplier = m.getInt(args[0]);
-				if(xpevent = true)
-					for(Player x : Bukkit.getServer().getOnlinePlayers())
-					{
-						x.sendMessage(ChatColor.GOLD+"XP EVENT FOR mcMMO HAS STARTED!");
-						x.sendMessage(ChatColor.GOLD+"mcMMO XP RATE IS NOW "+LoadProperties.xpGainMultiplier+"x!!");
-					}
-			}
-			
-			return true;
-		}
-		
-		Player player = (Player) sender;
-		
-		if(!mcPermissions.getInstance().admin(player))
-		{
-			player.sendMessage(ChatColor.YELLOW+"[mcMMO] "+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));  
-			return true;
-		}
-		if(args.length <= 0)
-		{
-			player.sendMessage(mcLocale.getString("Commands.xprate.proper", new Object[] {LoadProperties.xprate}));
-			player.sendMessage(mcLocale.getString("Commands.xprate.proper2", new Object[] {LoadProperties.xprate}));
-		}
-		if(args.length == 1 && args[0].equalsIgnoreCase("reset"))
-		{
-			if(xpevent)
-			{
-				for(Player x : Bukkit.getServer().getOnlinePlayers())
-					x.sendMessage(mcLocale.getString("Commands.xprate.over"));
-				xpevent = !xpevent;
-				LoadProperties.xpGainMultiplier = oldrate;
-			} else
-			{
-				LoadProperties.xpGainMultiplier = oldrate;
-			}
-		}
-		if(args.length >= 1 && m.isInt(args[0]))
-		{
-			oldrate = LoadProperties.xpGainMultiplier;
-			
-			if(args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false")))
-			{
-				if(args[1].equalsIgnoreCase("true"))
-					xpevent = true;
-				else
-					xpevent = false;
-			} else
-			{
-				player.sendMessage(mcLocale.getString("Commands.xprate.proper3"));
-				return true;
-			}
-			LoadProperties.xpGainMultiplier = m.getInt(args[0]);
-			if(xpevent = true)
-				for(Player x : Bukkit.getServer().getOnlinePlayers())
-				{
-					x.sendMessage(mcLocale.getString("Commands.xprate.started"));
-					x.sendMessage(mcLocale.getString("Commands.xprate.started2", new Object[] {LoadProperties.xpGainMultiplier}));
-				}
-		}
-		
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.general;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class XprateCommand implements CommandExecutor {
+	private static int oldrate = LoadProperties.xpGainMultiplier;
+	
+	public static boolean xpevent = false;
+	
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.xprateEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			if(args.length <= 0)
+			{
+				System.out.println(mcLocale.getString("Commands.xprate.proper", new Object[] {LoadProperties.xprate}));
+				System.out.println(mcLocale.getString("Commands.xprate.proper2", new Object[] {LoadProperties.xprate}));
+			}
+			
+			if(args.length == 1 && args[0].equalsIgnoreCase("reset"))
+			{
+				if(xpevent)
+				{
+					for(Player x : Bukkit.getServer().getOnlinePlayers())
+						x.sendMessage(mcLocale.getString("Commands.xprate.over"));
+					xpevent = !xpevent;
+					LoadProperties.xpGainMultiplier = oldrate;
+				} else
+				{
+					LoadProperties.xpGainMultiplier = oldrate;
+				}
+			}
+			
+			if(args.length >= 1 && m.isInt(args[0]))
+			{
+				oldrate = LoadProperties.xpGainMultiplier;
+				
+				if(args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false")))
+				{
+					if(args[1].equalsIgnoreCase("true"))
+						xpevent = true;
+					else
+						xpevent = false;
+				} else
+				{
+					System.out.println(mcLocale.getString("Commands.xprate.proper3"));
+					return true;
+				}
+				LoadProperties.xpGainMultiplier = m.getInt(args[0]);
+				if(xpevent = true)
+					for(Player x : Bukkit.getServer().getOnlinePlayers())
+					{
+						x.sendMessage(ChatColor.GOLD+"XP EVENT FOR mcMMO HAS STARTED!");
+						x.sendMessage(ChatColor.GOLD+"mcMMO XP RATE IS NOW "+LoadProperties.xpGainMultiplier+"x!!");
+					}
+			}
+			
+			return true;
+		}
+		
+		Player player = (Player) sender;
+		
+		if(!mcPermissions.getInstance().admin(player))
+		{
+			player.sendMessage(ChatColor.YELLOW+"[mcMMO] "+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));  
+			return true;
+		}
+		if(args.length <= 0)
+		{
+			player.sendMessage(mcLocale.getString("Commands.xprate.proper", new Object[] {LoadProperties.xprate}));
+			player.sendMessage(mcLocale.getString("Commands.xprate.proper2", new Object[] {LoadProperties.xprate}));
+		}
+		if(args.length == 1 && args[0].equalsIgnoreCase("reset"))
+		{
+			if(xpevent)
+			{
+				for(Player x : Bukkit.getServer().getOnlinePlayers())
+					x.sendMessage(mcLocale.getString("Commands.xprate.over"));
+				xpevent = !xpevent;
+				LoadProperties.xpGainMultiplier = oldrate;
+			} else
+			{
+				LoadProperties.xpGainMultiplier = oldrate;
+			}
+		}
+		if(args.length >= 1 && m.isInt(args[0]))
+		{
+			oldrate = LoadProperties.xpGainMultiplier;
+			
+			if(args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false")))
+			{
+				if(args[1].equalsIgnoreCase("true"))
+					xpevent = true;
+				else
+					xpevent = false;
+			} else
+			{
+				player.sendMessage(mcLocale.getString("Commands.xprate.proper3"));
+				return true;
+			}
+			LoadProperties.xpGainMultiplier = m.getInt(args[0]);
+			if(xpevent = true)
+				for(Player x : Bukkit.getServer().getOnlinePlayers())
+				{
+					x.sendMessage(mcLocale.getString("Commands.xprate.started"));
+					x.sendMessage(mcLocale.getString("Commands.xprate.started2", new Object[] {LoadProperties.xpGainMultiplier}));
+				}
+		}
+		
+		return true;
+	}
+}

+ 45 - 45
src/com/gmail/nossr50/commands/mc/McabilityCommand.java → src/main/java/com/gmail/nossr50/commands/mc/McabilityCommand.java

@@ -1,45 +1,45 @@
-package com.gmail.nossr50.commands.mc;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class McabilityCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!mcPermissions.permissionsEnabled) {
-			sender.sendMessage("This command requires permissions.");
-			return true;
-		}
-
-		if (!LoadProperties.mcabilityEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (PP.getAbilityUse()) {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOff"));
-			PP.toggleAbilityUse();
-		} else {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOn"));
-			PP.toggleAbilityUse();
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.mc;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class McabilityCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!mcPermissions.permissionsEnabled) {
+			sender.sendMessage("This command requires permissions.");
+			return true;
+		}
+
+		if (!LoadProperties.mcabilityEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (PP.getAbilityUse()) {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOff"));
+			PP.toggleAbilityUse();
+		} else {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOn"));
+			PP.toggleAbilityUse();
+		}
+
+		return true;
+	}
+}

+ 73 - 73
src/com/gmail/nossr50/commands/mc/MccCommand.java → src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java

@@ -1,73 +1,73 @@
-package com.gmail.nossr50.commands.mc;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class MccCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.mccEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-
-		player.sendMessage(ChatColor.RED + "---[]" + ChatColor.YELLOW + "mcMMO Commands" + ChatColor.RED + "[]---");
-
-		if (mcPermissions.getInstance().party(player)) {
-			player.sendMessage(mcLocale.getString("m.mccPartyCommands"));
-			player.sendMessage(LoadProperties.party + " " + mcLocale.getString("m.mccParty"));
-			player.sendMessage(LoadProperties.party + " q " + mcLocale.getString("m.mccPartyQ"));
-
-			if (mcPermissions.getInstance().partyChat(player))
-				player.sendMessage("/p " + mcLocale.getString("m.mccPartyToggle"));
-
-			player.sendMessage(LoadProperties.invite + " " + mcLocale.getString("m.mccPartyInvite"));
-			player.sendMessage(LoadProperties.accept + " " + mcLocale.getString("m.mccPartyAccept"));
-
-			if (mcPermissions.getInstance().partyTeleport(player))
-				player.sendMessage(LoadProperties.ptp + " " + mcLocale.getString("m.mccPartyTeleport"));
-		}
-		player.sendMessage(mcLocale.getString("m.mccOtherCommands"));
-		player.sendMessage(LoadProperties.stats + ChatColor.RED + " " + mcLocale.getString("m.mccStats"));
-		player.sendMessage("/mctop <skillname> <page> " + ChatColor.RED + mcLocale.getString("m.mccLeaderboards"));
-
-		if (mcPermissions.getInstance().mySpawn(player)) {
-			player.sendMessage(LoadProperties.myspawn + " " + ChatColor.RED + mcLocale.getString("m.mccMySpawn"));
-			player.sendMessage(LoadProperties.clearmyspawn + " " + ChatColor.RED + mcLocale.getString("m.mccClearMySpawn"));
-		}
-
-		if (mcPermissions.getInstance().mcAbility(player))
-			player.sendMessage(LoadProperties.mcability + ChatColor.RED + " " + mcLocale.getString("m.mccToggleAbility"));
-
-		if (mcPermissions.getInstance().adminChat(player))
-			player.sendMessage("/a " + ChatColor.RED + mcLocale.getString("m.mccAdminToggle"));
-
-		if (mcPermissions.getInstance().whois(player))
-			player.sendMessage(LoadProperties.whois + " " + mcLocale.getString("m.mccWhois"));
-
-		if (mcPermissions.getInstance().mmoedit(player))
-			player.sendMessage(LoadProperties.mmoedit + mcLocale.getString("m.mccMmoedit"));
-
-		if (mcPermissions.getInstance().mcgod(player))
-			player.sendMessage(LoadProperties.mcgod + ChatColor.RED + " " + mcLocale.getString("m.mccMcGod"));
-
-		player.sendMessage(mcLocale.getString("m.mccSkillInfo"));
-		player.sendMessage(LoadProperties.mcmmo + " " + mcLocale.getString("m.mccModDescription"));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.mc;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class MccCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.mccEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+
+		player.sendMessage(ChatColor.RED + "---[]" + ChatColor.YELLOW + "mcMMO Commands" + ChatColor.RED + "[]---");
+
+		if (mcPermissions.getInstance().party(player)) {
+			player.sendMessage(mcLocale.getString("m.mccPartyCommands"));
+			player.sendMessage(LoadProperties.party + " " + mcLocale.getString("m.mccParty"));
+			player.sendMessage(LoadProperties.party + " q " + mcLocale.getString("m.mccPartyQ"));
+
+			if (mcPermissions.getInstance().partyChat(player))
+				player.sendMessage("/p " + mcLocale.getString("m.mccPartyToggle"));
+
+			player.sendMessage(LoadProperties.invite + " " + mcLocale.getString("m.mccPartyInvite"));
+			player.sendMessage(LoadProperties.accept + " " + mcLocale.getString("m.mccPartyAccept"));
+
+			if (mcPermissions.getInstance().partyTeleport(player))
+				player.sendMessage(LoadProperties.ptp + " " + mcLocale.getString("m.mccPartyTeleport"));
+		}
+		player.sendMessage(mcLocale.getString("m.mccOtherCommands"));
+		player.sendMessage(LoadProperties.stats + ChatColor.RED + " " + mcLocale.getString("m.mccStats"));
+		player.sendMessage("/mctop <skillname> <page> " + ChatColor.RED + mcLocale.getString("m.mccLeaderboards"));
+
+		if (mcPermissions.getInstance().mySpawn(player)) {
+			player.sendMessage(LoadProperties.myspawn + " " + ChatColor.RED + mcLocale.getString("m.mccMySpawn"));
+			player.sendMessage(LoadProperties.clearmyspawn + " " + ChatColor.RED + mcLocale.getString("m.mccClearMySpawn"));
+		}
+
+		if (mcPermissions.getInstance().mcAbility(player))
+			player.sendMessage(LoadProperties.mcability + ChatColor.RED + " " + mcLocale.getString("m.mccToggleAbility"));
+
+		if (mcPermissions.getInstance().adminChat(player))
+			player.sendMessage("/a " + ChatColor.RED + mcLocale.getString("m.mccAdminToggle"));
+
+		if (mcPermissions.getInstance().whois(player))
+			player.sendMessage(LoadProperties.whois + " " + mcLocale.getString("m.mccWhois"));
+
+		if (mcPermissions.getInstance().mmoedit(player))
+			player.sendMessage(LoadProperties.mmoedit + mcLocale.getString("m.mccMmoedit"));
+
+		if (mcPermissions.getInstance().mcgod(player))
+			player.sendMessage(LoadProperties.mcgod + ChatColor.RED + " " + mcLocale.getString("m.mccMcGod"));
+
+		player.sendMessage(mcLocale.getString("m.mccSkillInfo"));
+		player.sendMessage(LoadProperties.mcmmo + " " + mcLocale.getString("m.mccModDescription"));
+
+		return true;
+	}
+}

+ 48 - 48
src/com/gmail/nossr50/commands/mc/McgodCommand.java → src/main/java/com/gmail/nossr50/commands/mc/McgodCommand.java

@@ -1,48 +1,48 @@
-package com.gmail.nossr50.commands.mc;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class McgodCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.mcgodEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (mcPermissions.permissionsEnabled) {
-			if (!mcPermissions.getInstance().mcgod(player)) {
-				player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-				return true;
-			}
-
-			if (PP.getGodMode()) {
-				player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeDisabled"));
-				PP.toggleGodMode();
-			} else {
-				player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeEnabled"));
-				PP.toggleGodMode();
-			}
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.mc;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class McgodCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.mcgodEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (mcPermissions.permissionsEnabled) {
+			if (!mcPermissions.getInstance().mcgod(player)) {
+				player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+				return true;
+			}
+
+			if (PP.getGodMode()) {
+				player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeDisabled"));
+				PP.toggleGodMode();
+			} else {
+				player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeEnabled"));
+				PP.toggleGodMode();
+			}
+		}
+
+		return true;
+	}
+}

+ 48 - 48
src/com/gmail/nossr50/commands/mc/McmmoCommand.java → src/main/java/com/gmail/nossr50/commands/mc/McmmoCommand.java

@@ -1,48 +1,48 @@
-package com.gmail.nossr50.commands.mc;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Material;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class McmmoCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.mcmmoEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-
-		player.sendMessage(ChatColor.RED + "-----[]" + ChatColor.GREEN + "mcMMO" + ChatColor.RED + "[]-----");
-		String description = mcLocale.getString("mcMMO.Description", new Object[] { LoadProperties.mcc });
-		String[] mcSplit = description.split(",");
-
-		for (String x : mcSplit) {
-			player.sendMessage(x);
-		}
-
-		if (LoadProperties.spoutEnabled && player instanceof SpoutPlayer) {
-			SpoutPlayer sPlayer = (SpoutPlayer) player;
-			if (LoadProperties.donateMessage)
-				sPlayer.sendNotification("[mcMMO] Donate!", "Paypal nossr50@gmail.com", Material.CAKE);
-		} else {
-			if (LoadProperties.donateMessage)
-				player.sendMessage(ChatColor.GREEN + "If you like my work you can donate via Paypal: nossr50@gmail.com");
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.mc;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class McmmoCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.mcmmoEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+
+		player.sendMessage(ChatColor.RED + "-----[]" + ChatColor.GREEN + "mcMMO" + ChatColor.RED + "[]-----");
+		String description = mcLocale.getString("mcMMO.Description", new Object[] { LoadProperties.mcc });
+		String[] mcSplit = description.split(",");
+
+		for (String x : mcSplit) {
+			player.sendMessage(x);
+		}
+
+		if (LoadProperties.spoutEnabled && player instanceof SpoutPlayer) {
+			SpoutPlayer sPlayer = (SpoutPlayer) player;
+			if (LoadProperties.donateMessage)
+				sPlayer.sendNotification("[mcMMO] Donate!", "Paypal nossr50@gmail.com", Material.CAKE);
+		} else {
+			if (LoadProperties.donateMessage)
+				player.sendMessage(ChatColor.GREEN + "If you like my work you can donate via Paypal: nossr50@gmail.com");
+		}
+
+		return true;
+	}
+}

+ 93 - 93
src/com/gmail/nossr50/commands/mc/McrefreshCommand.java → src/main/java/com/gmail/nossr50/commands/mc/McrefreshCommand.java

@@ -1,93 +1,93 @@
-package com.gmail.nossr50.commands.mc;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class McrefreshCommand implements CommandExecutor {
-	private final mcMMO plugin;
-
-	public McrefreshCommand(mcMMO instance) {
-		this.plugin = instance;
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.mcrefreshEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().mcrefresh(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-		if (args.length >= 1 && (plugin.getServer().getPlayer(args[0]) != null)) {
-			player.sendMessage("You have refreshed " + args[0] + "'s cooldowns!");
-			player = plugin.getServer().getPlayer(args[0]);
-		}
-
-		/*
-		 * PREP MODES
-		 */
-		PP = Users.getProfile(player);
-		PP.setRecentlyHurt((long) 0);
-		PP.setHoePreparationMode(false);
-		PP.setAxePreparationMode(false);
-		PP.setFistsPreparationMode(false);
-		PP.setSwordsPreparationMode(false);
-		PP.setPickaxePreparationMode(false);
-		/*
-		 * GREEN TERRA
-		 */
-		PP.setGreenTerraMode(false);
-		PP.setGreenTerraDeactivatedTimeStamp((long) 0);
-
-		/*
-		 * GIGA DRILL BREAKER
-		 */
-		PP.setGigaDrillBreakerMode(false);
-		PP.setGigaDrillBreakerDeactivatedTimeStamp((long) 0);
-		/*
-		 * SERRATED STRIKE
-		 */
-		PP.setSerratedStrikesMode(false);
-		PP.setSerratedStrikesDeactivatedTimeStamp((long) 0);
-		/*
-		 * SUPER BREAKER
-		 */
-		PP.setSuperBreakerMode(false);
-		PP.setSuperBreakerDeactivatedTimeStamp((long) 0);
-		/*
-		 * TREE FELLER
-		 */
-		PP.setTreeFellerMode(false);
-		PP.setTreeFellerDeactivatedTimeStamp((long) 0);
-		/*
-		 * BERSERK
-		 */
-		PP.setBerserkMode(false);
-		PP.setBerserkDeactivatedTimeStamp((long) 0);
-
-		player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesRefreshed"));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.mc;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class McrefreshCommand implements CommandExecutor {
+	private final mcMMO plugin;
+
+	public McrefreshCommand(mcMMO instance) {
+		this.plugin = instance;
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.mcrefreshEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().mcrefresh(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+		if (args.length >= 1 && (plugin.getServer().getPlayer(args[0]) != null)) {
+			player.sendMessage("You have refreshed " + args[0] + "'s cooldowns!");
+			player = plugin.getServer().getPlayer(args[0]);
+		}
+
+		/*
+		 * PREP MODES
+		 */
+		PP = Users.getProfile(player);
+		PP.setRecentlyHurt((long) 0);
+		PP.setHoePreparationMode(false);
+		PP.setAxePreparationMode(false);
+		PP.setFistsPreparationMode(false);
+		PP.setSwordsPreparationMode(false);
+		PP.setPickaxePreparationMode(false);
+		/*
+		 * GREEN TERRA
+		 */
+		PP.setGreenTerraMode(false);
+		PP.setGreenTerraDeactivatedTimeStamp((long) 0);
+
+		/*
+		 * GIGA DRILL BREAKER
+		 */
+		PP.setGigaDrillBreakerMode(false);
+		PP.setGigaDrillBreakerDeactivatedTimeStamp((long) 0);
+		/*
+		 * SERRATED STRIKE
+		 */
+		PP.setSerratedStrikesMode(false);
+		PP.setSerratedStrikesDeactivatedTimeStamp((long) 0);
+		/*
+		 * SUPER BREAKER
+		 */
+		PP.setSuperBreakerMode(false);
+		PP.setSuperBreakerDeactivatedTimeStamp((long) 0);
+		/*
+		 * TREE FELLER
+		 */
+		PP.setTreeFellerMode(false);
+		PP.setTreeFellerDeactivatedTimeStamp((long) 0);
+		/*
+		 * BERSERK
+		 */
+		PP.setBerserkMode(false);
+		PP.setBerserkDeactivatedTimeStamp((long) 0);
+
+		player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesRefreshed"));
+
+		return true;
+	}
+}

+ 199 - 199
src/com/gmail/nossr50/commands/mc/MctopCommand.java → src/main/java/com/gmail/nossr50/commands/mc/MctopCommand.java

@@ -1,199 +1,199 @@
-package com.gmail.nossr50.commands.mc;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Leaderboard;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Skills;
-
-public class MctopCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.mctopEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-
-		if (LoadProperties.useMySQL == false) {
-			/*
-			 * POWER LEVEL INFO RETRIEVAL
-			 */
-			if (args.length == 0) {
-				int p = 1;
-				String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
-				player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
-				int n = 1 * p; // Position
-				for (String x : info) {
-					if (x != null) {
-						String digit = String.valueOf(n);
-						if (n < 10)
-							digit = "0" + String.valueOf(n);
-						String[] splitx = x.split(":");
-						// Format: 1. Playername - skill value
-						player.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
-						n++;
-					}
-				}
-			}
-			if (args.length >= 1 && m.isInt(args[0])) {
-				int p = 1;
-				// Grab page value if specified
-				if (args.length >= 1) {
-					if (m.isInt(args[0])) {
-						p = Integer.valueOf(args[0]);
-					}
-				}
-				int pt = p;
-				if (p > 1) {
-					pt -= 1;
-					pt += (pt * 10);
-					pt = 10;
-				}
-				String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
-				player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
-				int n = 1 * pt; // Position
-				for (String x : info) {
-					if (x != null) {
-						String digit = String.valueOf(n);
-						if (n < 10)
-							digit = "0" + String.valueOf(n);
-						String[] splitx = x.split(":");
-						// Format: 1. Playername - skill value
-						player.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
-						n++;
-					}
-				}
-			}
-			/*
-			 * SKILL SPECIFIED INFO RETRIEVAL
-			 */
-			if (args.length >= 1 && Skills.isSkill(args[0])) {
-				int p = 1;
-				// Grab page value if specified
-				if (args.length >= 2) {
-					if (m.isInt(args[1])) {
-						p = Integer.valueOf(args[1]);
-					}
-				}
-				int pt = p;
-				if (p > 1) {
-					pt -= 1;
-					pt += (pt * 10);
-					pt = 10;
-				}
-				String firstLetter = args[0].substring(0, 1); // Get first letter
-				String remainder = args[0].substring(1); // Get remainder of word.
-				String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
-
-				String[] info = Leaderboard.retrieveInfo(args[0].toUpperCase(), p);
-				player.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] { capitalized }));
-				int n = 1 * pt; // Position
-				for (String x : info) {
-					if (x != null) {
-						String digit = String.valueOf(n);
-						if (n < 10)
-							digit = "0" + String.valueOf(n);
-						String[] splitx = x.split(":");
-						// Format: 1. Playername - skill value
-						player.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
-						n++;
-					}
-				}
-			}
-		} else {
-			/*
-			 * MYSQL LEADERBOARDS
-			 */
-			String powerlevel = "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing";
-			if (args.length >= 1 && Skills.isSkill(args[0])) {
-				/*
-				 * Create a nice consistent capitalized leaderboard name
-				 */
-				String lowercase = args[0].toLowerCase(); // For the query
-				String firstLetter = args[0].substring(0, 1); // Get first letter
-				String remainder = args[0].substring(1); // Get remainder of word.
-				String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
-
-				player.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] { capitalized }));
-				if (args.length >= 2 && m.isInt(args[1])) {
-					int n = 1; // For the page number
-					int n2 = Integer.valueOf(args[1]);
-					if (n2 > 1) {
-						// Figure out the 'page' here
-						n = 10;
-						n = n * (n2 - 1);
-					}
-					// If a page number is specified
-					HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + lowercase + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + lowercase + " > 0 ORDER BY `" + LoadProperties.MySQLtablePrefix + "skills`.`" + lowercase + "` DESC ");
-
-					for (int i = n; i <= n + 10; i++) {
-						if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
-							break;
-						HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
-						player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
-					}
-					return true;
-				}
-				// If no page number is specified
-				HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + lowercase + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + lowercase + " > 0 ORDER BY `" + LoadProperties.MySQLtablePrefix + "skills`.`" + lowercase + "` DESC ");
-				for (int i = 1; i <= 10; i++) { // i<=userslist.size()
-					if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
-						break;
-					HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
-					player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
-				}
-				return true;
-			}
-			if (args.length >= 0) {
-				player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
-				if (args.length >= 1 && m.isInt(args[0])) {
-					int n = 1; // For the page number
-					int n2 = Integer.valueOf(args[0]);
-					if (n2 > 1) {
-						// Figure out the 'page' here
-						n = 10;
-						n = n * (n2 - 1);
-					}
-					// If a page number is specified
-					HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + powerlevel + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + powerlevel + " > 0 ORDER BY " + powerlevel + " DESC ");
-					for (int i = n; i <= n + 10; i++) {
-						if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
-							break;
-						HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
-						player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
-					}
-					return true;
-				}
-				HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + powerlevel + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + powerlevel + " > 0 ORDER BY " + powerlevel + " DESC ");
-				for (int i = 1; i <= 10; i++) {
-					if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
-						break;
-					HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
-					player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
-					// System.out.println(username.get(1).get(0));
-					// System.out.println("Mining : " + userslist.get(i).get(0) + ", User id : " + userslist.get(i).get(1));
-				}
-			}
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.mc;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Leaderboard;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Skills;
+
+public class MctopCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.mctopEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+
+		if (LoadProperties.useMySQL == false) {
+			/*
+			 * POWER LEVEL INFO RETRIEVAL
+			 */
+			if (args.length == 0) {
+				int p = 1;
+				String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
+				player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
+				int n = 1 * p; // Position
+				for (String x : info) {
+					if (x != null) {
+						String digit = String.valueOf(n);
+						if (n < 10)
+							digit = "0" + String.valueOf(n);
+						String[] splitx = x.split(":");
+						// Format: 1. Playername - skill value
+						player.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
+						n++;
+					}
+				}
+			}
+			if (args.length >= 1 && m.isInt(args[0])) {
+				int p = 1;
+				// Grab page value if specified
+				if (args.length >= 1) {
+					if (m.isInt(args[0])) {
+						p = Integer.valueOf(args[0]);
+					}
+				}
+				int pt = p;
+				if (p > 1) {
+					pt -= 1;
+					pt += (pt * 10);
+					pt = 10;
+				}
+				String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
+				player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
+				int n = 1 * pt; // Position
+				for (String x : info) {
+					if (x != null) {
+						String digit = String.valueOf(n);
+						if (n < 10)
+							digit = "0" + String.valueOf(n);
+						String[] splitx = x.split(":");
+						// Format: 1. Playername - skill value
+						player.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
+						n++;
+					}
+				}
+			}
+			/*
+			 * SKILL SPECIFIED INFO RETRIEVAL
+			 */
+			if (args.length >= 1 && Skills.isSkill(args[0])) {
+				int p = 1;
+				// Grab page value if specified
+				if (args.length >= 2) {
+					if (m.isInt(args[1])) {
+						p = Integer.valueOf(args[1]);
+					}
+				}
+				int pt = p;
+				if (p > 1) {
+					pt -= 1;
+					pt += (pt * 10);
+					pt = 10;
+				}
+				String firstLetter = args[0].substring(0, 1); // Get first letter
+				String remainder = args[0].substring(1); // Get remainder of word.
+				String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+
+				String[] info = Leaderboard.retrieveInfo(args[0].toUpperCase(), p);
+				player.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] { capitalized }));
+				int n = 1 * pt; // Position
+				for (String x : info) {
+					if (x != null) {
+						String digit = String.valueOf(n);
+						if (n < 10)
+							digit = "0" + String.valueOf(n);
+						String[] splitx = x.split(":");
+						// Format: 1. Playername - skill value
+						player.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
+						n++;
+					}
+				}
+			}
+		} else {
+			/*
+			 * MYSQL LEADERBOARDS
+			 */
+			String powerlevel = "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing";
+			if (args.length >= 1 && Skills.isSkill(args[0])) {
+				/*
+				 * Create a nice consistent capitalized leaderboard name
+				 */
+				String lowercase = args[0].toLowerCase(); // For the query
+				String firstLetter = args[0].substring(0, 1); // Get first letter
+				String remainder = args[0].substring(1); // Get remainder of word.
+				String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+
+				player.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] { capitalized }));
+				if (args.length >= 2 && m.isInt(args[1])) {
+					int n = 1; // For the page number
+					int n2 = Integer.valueOf(args[1]);
+					if (n2 > 1) {
+						// Figure out the 'page' here
+						n = 10;
+						n = n * (n2 - 1);
+					}
+					// If a page number is specified
+					HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + lowercase + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + lowercase + " > 0 ORDER BY `" + LoadProperties.MySQLtablePrefix + "skills`.`" + lowercase + "` DESC ");
+
+					for (int i = n; i <= n + 10; i++) {
+						if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
+							break;
+						HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
+						player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
+					}
+					return true;
+				}
+				// If no page number is specified
+				HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + lowercase + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + lowercase + " > 0 ORDER BY `" + LoadProperties.MySQLtablePrefix + "skills`.`" + lowercase + "` DESC ");
+				for (int i = 1; i <= 10; i++) { // i<=userslist.size()
+					if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
+						break;
+					HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
+					player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
+				}
+				return true;
+			}
+			if (args.length >= 0) {
+				player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
+				if (args.length >= 1 && m.isInt(args[0])) {
+					int n = 1; // For the page number
+					int n2 = Integer.valueOf(args[0]);
+					if (n2 > 1) {
+						// Figure out the 'page' here
+						n = 10;
+						n = n * (n2 - 1);
+					}
+					// If a page number is specified
+					HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + powerlevel + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + powerlevel + " > 0 ORDER BY " + powerlevel + " DESC ");
+					for (int i = n; i <= n + 10; i++) {
+						if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
+							break;
+						HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
+						player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
+					}
+					return true;
+				}
+				HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT " + powerlevel + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + powerlevel + " > 0 ORDER BY " + powerlevel + " DESC ");
+				for (int i = 1; i <= 10; i++) {
+					if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
+						break;
+					HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
+					player.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
+					// System.out.println(username.get(1).get(0));
+					// System.out.println("Mining : " + userslist.get(i).get(0) + ", User id : " + userslist.get(i).get(1));
+				}
+			}
+		}
+
+		return true;
+	}
+}

+ 86 - 86
src/com/gmail/nossr50/commands/party/ACommand.java → src/main/java/com/gmail/nossr50/commands/party/ACommand.java

@@ -1,86 +1,86 @@
-package com.gmail.nossr50.commands.party;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class ACommand implements CommandExecutor {
-	private Logger log;
-
-	public ACommand() {
-		this.log = Logger.getLogger("Minecraft");
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-
-		// Console message?
-		if (!(sender instanceof Player) && args.length >= 1) {
-			String aMessage = args[0];
-			for (int i = 1; i <= args.length - 1; i++) {
-				aMessage = aMessage + " " + args[i];
-			}
-
-			String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE + "*Console*" + ChatColor.AQUA + "} ";
-
-			log.log(Level.INFO, "[A]<*Console*> " + aMessage);
-
-			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
-				if (mcPermissions.getInstance().adminChat(herp) || herp.isOp())
-					herp.sendMessage(aPrefix + aMessage);
-			}
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().adminChat(player) && !player.isOp()) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		// Not a toggle, a message
-
-		if (args.length >= 1) {
-			String aMessage = args[0];
-			for (int i = 1; i <= args.length - 1; i++) {
-				aMessage = aMessage + " " + args[i];
-			}
-
-			String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE + player.getDisplayName() + ChatColor.AQUA + "} ";
-			log.log(Level.INFO, "[A]<" + player.getDisplayName() + "> " + aMessage);
-			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
-				if (mcPermissions.getInstance().adminChat(herp) || herp.isOp())
-					herp.sendMessage(aPrefix + aMessage);
-			}
-			return true;
-		}
-
-		if (PP.getPartyChatMode())
-			PP.togglePartyChat();
-
-		PP.toggleAdminChat();
-
-		if (PP.getAdminChatMode()) {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOn"));
-			// player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.GREEN + "On");
-		} else {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOff"));
-			// player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.RED + "Off");
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.party;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class ACommand implements CommandExecutor {
+	private Logger log;
+
+	public ACommand() {
+		this.log = Logger.getLogger("Minecraft");
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+
+		// Console message?
+		if (!(sender instanceof Player) && args.length >= 1) {
+			String aMessage = args[0];
+			for (int i = 1; i <= args.length - 1; i++) {
+				aMessage = aMessage + " " + args[i];
+			}
+
+			String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE + "*Console*" + ChatColor.AQUA + "} ";
+
+			log.log(Level.INFO, "[A]<*Console*> " + aMessage);
+
+			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
+				if (mcPermissions.getInstance().adminChat(herp) || herp.isOp())
+					herp.sendMessage(aPrefix + aMessage);
+			}
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().adminChat(player) && !player.isOp()) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		// Not a toggle, a message
+
+		if (args.length >= 1) {
+			String aMessage = args[0];
+			for (int i = 1; i <= args.length - 1; i++) {
+				aMessage = aMessage + " " + args[i];
+			}
+
+			String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE + player.getDisplayName() + ChatColor.AQUA + "} ";
+			log.log(Level.INFO, "[A]<" + player.getDisplayName() + "> " + aMessage);
+			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
+				if (mcPermissions.getInstance().adminChat(herp) || herp.isOp())
+					herp.sendMessage(aPrefix + aMessage);
+			}
+			return true;
+		}
+
+		if (PP.getPartyChatMode())
+			PP.togglePartyChat();
+
+		PP.toggleAdminChat();
+
+		if (PP.getAdminChatMode()) {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOn"));
+			// player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.GREEN + "On");
+		} else {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOff"));
+			// player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.RED + "Off");
+		}
+
+		return true;
+	}
+}

+ 52 - 52
src/com/gmail/nossr50/commands/party/AcceptCommand.java → src/main/java/com/gmail/nossr50/commands/party/AcceptCommand.java

@@ -1,52 +1,52 @@
-package com.gmail.nossr50.commands.party;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-
-public class AcceptCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.acceptEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().party(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		if (PP.hasPartyInvite()) {
-			Party Pinstance = Party.getInstance();
-
-			if (PP.inParty()) {
-				Pinstance.removeFromParty(player, PP);
-			}
-			PP.acceptInvite();
-			Pinstance.addToParty(player, PP, PP.getParty(), true);
-
-		} else {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.NoInvites"));
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.party;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+
+public class AcceptCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.acceptEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().party(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		if (PP.hasPartyInvite()) {
+			Party Pinstance = Party.getInstance();
+
+			if (PP.inParty()) {
+				Pinstance.removeFromParty(player, PP);
+			}
+			PP.acceptInvite();
+			Pinstance.addToParty(player, PP, PP.getParty(), true);
+
+		} else {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.NoInvites"));
+		}
+
+		return true;
+	}
+}

+ 73 - 73
src/com/gmail/nossr50/commands/party/InviteCommand.java → src/main/java/com/gmail/nossr50/commands/party/InviteCommand.java

@@ -1,73 +1,73 @@
-package com.gmail.nossr50.commands.party;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-
-public class InviteCommand implements CommandExecutor {
-	private final mcMMO plugin;
-
-	public InviteCommand(mcMMO instance) {
-		this.plugin = instance;
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.inviteEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().party(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		Party Pinstance = Party.getInstance();
-
-		if (!PP.inParty()) {
-			player.sendMessage(mcLocale.getString("mcPlayerListener.NotInParty"));
-			return true;
-		}
-		if (args.length < 1) {
-			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.invite + " <playername>");
-			return true;
-		}
-		if (PP.inParty() && args.length >= 1 && (plugin.getServer().getPlayer(args[0]) != null)) {
-			if (Pinstance.canInvite(player, PP)) {
-				Player target = plugin.getServer().getPlayer(args[0]);
-				PlayerProfile PPt = Users.getProfile(target);
-				PPt.modifyInvite(PP.getParty());
-
-				player.sendMessage(mcLocale.getString("mcPlayerListener.InviteSuccess"));
-				// target.sendMessage(ChatColor.RED+"ALERT: "+ChatColor.GREEN+"You have received a party invite for "+PPt.getInvite()+" from "+player.getName());
-				target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite1", new Object[] { PPt.getInvite(), player.getName() }));
-				// target.sendMessage(ChatColor.YELLOW+"Type "+ChatColor.GREEN+LoadProperties.accept+ChatColor.YELLOW+" to accept the invite");
-				target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite2", new Object[] { LoadProperties.accept }));
-			} else {
-				player.sendMessage(mcLocale.getString("Party.Locked"));
-				return true;
-			}
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.party;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+
+public class InviteCommand implements CommandExecutor {
+	private final mcMMO plugin;
+
+	public InviteCommand(mcMMO instance) {
+		this.plugin = instance;
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.inviteEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().party(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		Party Pinstance = Party.getInstance();
+
+		if (!PP.inParty()) {
+			player.sendMessage(mcLocale.getString("mcPlayerListener.NotInParty"));
+			return true;
+		}
+		if (args.length < 1) {
+			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.invite + " <playername>");
+			return true;
+		}
+		if (PP.inParty() && args.length >= 1 && (plugin.getServer().getPlayer(args[0]) != null)) {
+			if (Pinstance.canInvite(player, PP)) {
+				Player target = plugin.getServer().getPlayer(args[0]);
+				PlayerProfile PPt = Users.getProfile(target);
+				PPt.modifyInvite(PP.getParty());
+
+				player.sendMessage(mcLocale.getString("mcPlayerListener.InviteSuccess"));
+				// target.sendMessage(ChatColor.RED+"ALERT: "+ChatColor.GREEN+"You have received a party invite for "+PPt.getInvite()+" from "+player.getName());
+				target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite1", new Object[] { PPt.getInvite(), player.getName() }));
+				// target.sendMessage(ChatColor.YELLOW+"Type "+ChatColor.GREEN+LoadProperties.accept+ChatColor.YELLOW+" to accept the invite");
+				target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite2", new Object[] { LoadProperties.accept }));
+			} else {
+				player.sendMessage(mcLocale.getString("Party.Locked"));
+				return true;
+			}
+		}
+
+		return true;
+	}
+}

+ 101 - 101
src/com/gmail/nossr50/commands/party/PCommand.java → src/main/java/com/gmail/nossr50/commands/party/PCommand.java

@@ -1,101 +1,101 @@
-package com.gmail.nossr50.commands.party;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-
-public class PCommand implements CommandExecutor {
-	private Logger log;
-
-	public PCommand() {
-		this.log = Logger.getLogger("Minecraft");
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.partyEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		// Console message?
-		if (!(sender instanceof Player)) {
-			if (args.length < 2)
-				return true;
-			String pMessage = args[1];
-			for (int i = 2; i <= args.length - 1; i++) {
-				pMessage = pMessage + " " + args[i];
-			}
-
-			String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + "*Console*" + ChatColor.GREEN + ") ";
-
-			log.log(Level.INFO, "[P](" + args[0] + ")" + "<*Console*> " + pMessage);
-
-			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
-				if (Users.getProfile(herp).inParty()) {
-					if (Users.getProfile(herp).getParty().equalsIgnoreCase(args[0])) {
-						herp.sendMessage(pPrefix + pMessage);
-					}
-				}
-			}
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().party(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		// Not a toggle, a message
-
-		if (args.length >= 1) {
-			String pMessage = args[0];
-			for (int i = 1; i <= args.length - 1; i++) {
-				pMessage = pMessage + " " + args[i];
-			}
-			String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + player.getDisplayName() + ChatColor.GREEN + ") ";
-
-			log.log(Level.INFO, "[P](" + PP.getParty() + ")" + "<" + player.getDisplayName() + "> " + pMessage);
-
-			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
-				if (Users.getProfile(herp).inParty()) {
-					if (Party.getInstance().inSameParty(herp, player))
-						herp.sendMessage(pPrefix + pMessage);
-				}
-			}
-
-			return true;
-		}
-
-		if (PP.getAdminChatMode())
-			PP.toggleAdminChat();
-
-		PP.togglePartyChat();
-
-		if (PP.getPartyChatMode()) {
-			// player.sendMessage(ChatColor.GREEN + "Party Chat Toggled On");
-			player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOn"));
-		} else {
-			// player.sendMessage(ChatColor.GREEN + "Party Chat Toggled " + ChatColor.RED + "Off");
-			player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOff"));
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.party;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+
+public class PCommand implements CommandExecutor {
+	private Logger log;
+
+	public PCommand() {
+		this.log = Logger.getLogger("Minecraft");
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.partyEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		// Console message?
+		if (!(sender instanceof Player)) {
+			if (args.length < 2)
+				return true;
+			String pMessage = args[1];
+			for (int i = 2; i <= args.length - 1; i++) {
+				pMessage = pMessage + " " + args[i];
+			}
+
+			String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + "*Console*" + ChatColor.GREEN + ") ";
+
+			log.log(Level.INFO, "[P](" + args[0] + ")" + "<*Console*> " + pMessage);
+
+			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
+				if (Users.getProfile(herp).inParty()) {
+					if (Users.getProfile(herp).getParty().equalsIgnoreCase(args[0])) {
+						herp.sendMessage(pPrefix + pMessage);
+					}
+				}
+			}
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().party(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		// Not a toggle, a message
+
+		if (args.length >= 1) {
+			String pMessage = args[0];
+			for (int i = 1; i <= args.length - 1; i++) {
+				pMessage = pMessage + " " + args[i];
+			}
+			String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + player.getDisplayName() + ChatColor.GREEN + ") ";
+
+			log.log(Level.INFO, "[P](" + PP.getParty() + ")" + "<" + player.getDisplayName() + "> " + pMessage);
+
+			for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
+				if (Users.getProfile(herp).inParty()) {
+					if (Party.getInstance().inSameParty(herp, player))
+						herp.sendMessage(pPrefix + pMessage);
+				}
+			}
+
+			return true;
+		}
+
+		if (PP.getAdminChatMode())
+			PP.toggleAdminChat();
+
+		PP.togglePartyChat();
+
+		if (PP.getPartyChatMode()) {
+			// player.sendMessage(ChatColor.GREEN + "Party Chat Toggled On");
+			player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOn"));
+		} else {
+			// player.sendMessage(ChatColor.GREEN + "Party Chat Toggled " + ChatColor.RED + "Off");
+			player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOff"));
+		}
+
+		return true;
+	}
+}

+ 192 - 192
src/com/gmail/nossr50/commands/party/PartyCommand.java → src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java

@@ -1,192 +1,192 @@
-package com.gmail.nossr50.commands.party;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-
-public class PartyCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.partyEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().party(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		Party Pinstance = Party.getInstance();
-
-		if (PP.inParty() && (!Pinstance.isParty(PP.getParty()) || !Pinstance.isInParty(player, PP))) {
-			Pinstance.addToParty(player, PP, PP.getParty(), false);
-		}
-
-		if (args.length == 0 && !PP.inParty()) {
-			player.sendMessage(mcLocale.getString("Party.Help1", new Object[] { LoadProperties.party }));
-			player.sendMessage(mcLocale.getString("Party.Help2", new Object[] { LoadProperties.party }));
-			player.sendMessage(mcLocale.getString("Party.Help3", new Object[] { LoadProperties.party }));
-			return true;
-		} else if (args.length == 0 && PP.inParty()) {
-			String tempList = "";
-			int x = 0;
-			for (Player p : Bukkit.getServer().getOnlinePlayers()) {
-				if (PP.getParty().equals(Users.getProfile(p).getParty())) {
-					if (p != null && x + 1 >= Pinstance.partyCount(player, Bukkit.getServer().getOnlinePlayers())) {
-						if (Pinstance.isPartyLeader(p.getName(), PP.getParty())) {
-							tempList += ChatColor.GOLD + p.getName();
-							x++;
-						} else {
-							tempList += ChatColor.WHITE + p.getName();
-							x++;
-						}
-					}
-					if (p != null && x < Pinstance.partyCount(player, Bukkit.getServer().getOnlinePlayers())) {
-						if (Pinstance.isPartyLeader(p.getName(), PP.getParty())) {
-							tempList += ChatColor.GOLD + p.getName() + ", ";
-							x++;
-						} else {
-							tempList += ChatColor.WHITE + p.getName() + ", ";
-							x++;
-						}
-					}
-				}
-			}
-			player.sendMessage(mcLocale.getString("mcPlayerListener.YouAreInParty", new Object[] { PP.getParty() }));
-			player.sendMessage(mcLocale.getString("mcPlayerListener.PartyMembers") + " (" + tempList + ChatColor.GREEN + ")");
-			return true;
-		} else if (args.length == 1) {
-			if (args[0].equals("q") && PP.inParty()) {
-				Pinstance.removeFromParty(player, PP);
-
-				player.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
-				return true;
-			} else if (args[0].equalsIgnoreCase("?")) {
-				player.sendMessage(mcLocale.getString("Party.Help4", new Object[] { LoadProperties.party }));
-				player.sendMessage(mcLocale.getString("Party.Help2", new Object[] { LoadProperties.party }));
-				player.sendMessage(mcLocale.getString("Party.Help5", new Object[] { LoadProperties.party }));
-				player.sendMessage(mcLocale.getString("Party.Help6", new Object[] { LoadProperties.party }));
-				player.sendMessage(mcLocale.getString("Party.Help7", new Object[] { LoadProperties.party }));
-				player.sendMessage(mcLocale.getString("Party.Help8", new Object[] { LoadProperties.party }));
-				player.sendMessage(mcLocale.getString("Party.Help9", new Object[] { LoadProperties.party }));
-			} else if (args[0].equalsIgnoreCase("lock")) {
-				if (PP.inParty()) {
-					if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
-						Pinstance.lockParty(PP.getParty());
-						player.sendMessage(mcLocale.getString("Party.Locked"));
-					} else {
-						player.sendMessage(mcLocale.getString("Party.NotOwner"));
-					}
-				} else {
-					player.sendMessage(mcLocale.getString("Party.InvalidName"));
-				}
-			} else if (args[0].equalsIgnoreCase("unlock")) {
-				if (PP.inParty()) {
-					if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
-						Pinstance.unlockParty(PP.getParty());
-						player.sendMessage(mcLocale.getString("Party.Unlocked"));
-					} else {
-						player.sendMessage(mcLocale.getString("Party.NotOwner"));
-					}
-				} else {
-					player.sendMessage(mcLocale.getString("Party.InvalidName"));
-				}
-				// Party debugging command.
-				// } else if (args[0].equalsIgnoreCase("dump")) {
-				// Pinstance.dump(player);
-			} else {
-				if (PP.inParty()) {
-					Pinstance.removeFromParty(player, PP);
-				}
-				Pinstance.addToParty(player, PP, args[0], false);
-				return true;
-			}
-		} else if (args.length == 2 && PP.inParty()) {
-			if (args[0].equalsIgnoreCase("password")) {
-				if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
-					if (Pinstance.isPartyLocked(PP.getParty())) {
-						Pinstance.setPartyPassword(PP.getParty(), args[1]);
-						player.sendMessage(mcLocale.getString("Party.PasswordSet", new Object[] { args[1] }));
-					} else {
-						player.sendMessage(mcLocale.getString("Party.IsntLocked"));
-					}
-				} else {
-					player.sendMessage(mcLocale.getString("Party.NotOwner"));
-				}
-			} else if (args[0].equalsIgnoreCase("kick")) {
-				if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
-					if (Pinstance.isPartyLocked(PP.getParty())) {
-						Player tPlayer = null;
-						if (Bukkit.getServer().getPlayer(args[1]) != null)
-							tPlayer = Bukkit.getServer().getPlayer(args[1]);
-						if (tPlayer == null) {
-							player.sendMessage(mcLocale.getString("Party.CouldNotKick", new Object[] { args[1] }));
-						}
-						if (!Pinstance.inSameParty(player, tPlayer)) {
-							player.sendMessage(mcLocale.getString("Party.NotInYourParty", new Object[] { tPlayer.getName() }));
-						} else {
-							// Not an admin
-							if (!mcPermissions.getInstance().admin(player)) {
-								// Can't kick an admin
-								if (mcPermissions.getInstance().admin(tPlayer)) {
-									player.sendMessage(mcLocale.getString("Party.CouldNotKick", new Object[] { tPlayer.getName() }));
-								}
-							}
-							PlayerProfile tPP = Users.getProfile(tPlayer);
-
-							Pinstance.removeFromParty(tPlayer, tPP);
-
-							tPlayer.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
-						}
-					} else {
-						player.sendMessage(mcLocale.getString("Party.IsntLocked"));
-					}
-				} else {
-					player.sendMessage(mcLocale.getString("Party.NotOwner"));
-				}
-			} else if (args[0].equalsIgnoreCase("owner")) {
-				if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
-					Player tPlayer = null;
-					if (Bukkit.getServer().getPlayer(args[1]) != null)
-						tPlayer = Bukkit.getServer().getPlayer(args[1]);
-					if (tPlayer == null) {
-						player.sendMessage(mcLocale.getString("Party.CouldNotSetOwner", new Object[] { args[1] }));
-					}
-					if (!Pinstance.inSameParty(player, tPlayer)) {
-						player.sendMessage(mcLocale.getString("Party.CouldNotSetOwner", new Object[] { tPlayer.getName() }));
-					} else {
-						Pinstance.setPartyLeader(PP.getParty(), tPlayer.getName());
-					}
-				} else {
-					player.sendMessage(mcLocale.getString("Party.NotOwner"));
-				}
-			} else {
-				Pinstance.removeFromParty(player, PP);
-				Pinstance.addToParty(player, PP, args[0], false, args[1]);
-			}
-		} else if (args.length == 2 && !PP.inParty()) {
-			Pinstance.addToParty(player, PP, args[0], false, args[1]);
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.party;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+
+public class PartyCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.partyEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().party(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		Party Pinstance = Party.getInstance();
+
+		if (PP.inParty() && (!Pinstance.isParty(PP.getParty()) || !Pinstance.isInParty(player, PP))) {
+			Pinstance.addToParty(player, PP, PP.getParty(), false);
+		}
+
+		if (args.length == 0 && !PP.inParty()) {
+			player.sendMessage(mcLocale.getString("Party.Help1", new Object[] { LoadProperties.party }));
+			player.sendMessage(mcLocale.getString("Party.Help2", new Object[] { LoadProperties.party }));
+			player.sendMessage(mcLocale.getString("Party.Help3", new Object[] { LoadProperties.party }));
+			return true;
+		} else if (args.length == 0 && PP.inParty()) {
+			String tempList = "";
+			int x = 0;
+			for (Player p : Bukkit.getServer().getOnlinePlayers()) {
+				if (PP.getParty().equals(Users.getProfile(p).getParty())) {
+					if (p != null && x + 1 >= Pinstance.partyCount(player, Bukkit.getServer().getOnlinePlayers())) {
+						if (Pinstance.isPartyLeader(p.getName(), PP.getParty())) {
+							tempList += ChatColor.GOLD + p.getName();
+							x++;
+						} else {
+							tempList += ChatColor.WHITE + p.getName();
+							x++;
+						}
+					}
+					if (p != null && x < Pinstance.partyCount(player, Bukkit.getServer().getOnlinePlayers())) {
+						if (Pinstance.isPartyLeader(p.getName(), PP.getParty())) {
+							tempList += ChatColor.GOLD + p.getName() + ", ";
+							x++;
+						} else {
+							tempList += ChatColor.WHITE + p.getName() + ", ";
+							x++;
+						}
+					}
+				}
+			}
+			player.sendMessage(mcLocale.getString("mcPlayerListener.YouAreInParty", new Object[] { PP.getParty() }));
+			player.sendMessage(mcLocale.getString("mcPlayerListener.PartyMembers") + " (" + tempList + ChatColor.GREEN + ")");
+			return true;
+		} else if (args.length == 1) {
+			if (args[0].equals("q") && PP.inParty()) {
+				Pinstance.removeFromParty(player, PP);
+
+				player.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
+				return true;
+			} else if (args[0].equalsIgnoreCase("?")) {
+				player.sendMessage(mcLocale.getString("Party.Help4", new Object[] { LoadProperties.party }));
+				player.sendMessage(mcLocale.getString("Party.Help2", new Object[] { LoadProperties.party }));
+				player.sendMessage(mcLocale.getString("Party.Help5", new Object[] { LoadProperties.party }));
+				player.sendMessage(mcLocale.getString("Party.Help6", new Object[] { LoadProperties.party }));
+				player.sendMessage(mcLocale.getString("Party.Help7", new Object[] { LoadProperties.party }));
+				player.sendMessage(mcLocale.getString("Party.Help8", new Object[] { LoadProperties.party }));
+				player.sendMessage(mcLocale.getString("Party.Help9", new Object[] { LoadProperties.party }));
+			} else if (args[0].equalsIgnoreCase("lock")) {
+				if (PP.inParty()) {
+					if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
+						Pinstance.lockParty(PP.getParty());
+						player.sendMessage(mcLocale.getString("Party.Locked"));
+					} else {
+						player.sendMessage(mcLocale.getString("Party.NotOwner"));
+					}
+				} else {
+					player.sendMessage(mcLocale.getString("Party.InvalidName"));
+				}
+			} else if (args[0].equalsIgnoreCase("unlock")) {
+				if (PP.inParty()) {
+					if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
+						Pinstance.unlockParty(PP.getParty());
+						player.sendMessage(mcLocale.getString("Party.Unlocked"));
+					} else {
+						player.sendMessage(mcLocale.getString("Party.NotOwner"));
+					}
+				} else {
+					player.sendMessage(mcLocale.getString("Party.InvalidName"));
+				}
+				// Party debugging command.
+				// } else if (args[0].equalsIgnoreCase("dump")) {
+				// Pinstance.dump(player);
+			} else {
+				if (PP.inParty()) {
+					Pinstance.removeFromParty(player, PP);
+				}
+				Pinstance.addToParty(player, PP, args[0], false);
+				return true;
+			}
+		} else if (args.length == 2 && PP.inParty()) {
+			if (args[0].equalsIgnoreCase("password")) {
+				if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
+					if (Pinstance.isPartyLocked(PP.getParty())) {
+						Pinstance.setPartyPassword(PP.getParty(), args[1]);
+						player.sendMessage(mcLocale.getString("Party.PasswordSet", new Object[] { args[1] }));
+					} else {
+						player.sendMessage(mcLocale.getString("Party.IsntLocked"));
+					}
+				} else {
+					player.sendMessage(mcLocale.getString("Party.NotOwner"));
+				}
+			} else if (args[0].equalsIgnoreCase("kick")) {
+				if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
+					if (Pinstance.isPartyLocked(PP.getParty())) {
+						Player tPlayer = null;
+						if (Bukkit.getServer().getPlayer(args[1]) != null)
+							tPlayer = Bukkit.getServer().getPlayer(args[1]);
+						if (tPlayer == null) {
+							player.sendMessage(mcLocale.getString("Party.CouldNotKick", new Object[] { args[1] }));
+						}
+						if (!Pinstance.inSameParty(player, tPlayer)) {
+							player.sendMessage(mcLocale.getString("Party.NotInYourParty", new Object[] { tPlayer.getName() }));
+						} else {
+							// Not an admin
+							if (!mcPermissions.getInstance().admin(player)) {
+								// Can't kick an admin
+								if (mcPermissions.getInstance().admin(tPlayer)) {
+									player.sendMessage(mcLocale.getString("Party.CouldNotKick", new Object[] { tPlayer.getName() }));
+								}
+							}
+							PlayerProfile tPP = Users.getProfile(tPlayer);
+
+							Pinstance.removeFromParty(tPlayer, tPP);
+
+							tPlayer.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
+						}
+					} else {
+						player.sendMessage(mcLocale.getString("Party.IsntLocked"));
+					}
+				} else {
+					player.sendMessage(mcLocale.getString("Party.NotOwner"));
+				}
+			} else if (args[0].equalsIgnoreCase("owner")) {
+				if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
+					Player tPlayer = null;
+					if (Bukkit.getServer().getPlayer(args[1]) != null)
+						tPlayer = Bukkit.getServer().getPlayer(args[1]);
+					if (tPlayer == null) {
+						player.sendMessage(mcLocale.getString("Party.CouldNotSetOwner", new Object[] { args[1] }));
+					}
+					if (!Pinstance.inSameParty(player, tPlayer)) {
+						player.sendMessage(mcLocale.getString("Party.CouldNotSetOwner", new Object[] { tPlayer.getName() }));
+					} else {
+						Pinstance.setPartyLeader(PP.getParty(), tPlayer.getName());
+					}
+				} else {
+					player.sendMessage(mcLocale.getString("Party.NotOwner"));
+				}
+			} else {
+				Pinstance.removeFromParty(player, PP);
+				Pinstance.addToParty(player, PP, args[0], false, args[1]);
+			}
+		} else if (args.length == 2 && !PP.inParty()) {
+			Pinstance.addToParty(player, PP, args[0], false, args[1]);
+		}
+
+		return true;
+	}
+}

+ 62 - 62
src/com/gmail/nossr50/commands/party/PtpCommand.java → src/main/java/com/gmail/nossr50/commands/party/PtpCommand.java

@@ -1,62 +1,62 @@
-package com.gmail.nossr50.commands.party;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class PtpCommand implements CommandExecutor {
-	private final mcMMO plugin;
-
-	public PtpCommand(mcMMO instance) {
-		this.plugin = instance;
-	}
-
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.ptpEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (!mcPermissions.getInstance().partyTeleport(player)) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-		if (args.length < 1) {
-			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.ptp + " <playername>");
-			return true;
-		}
-		if (plugin.getServer().getPlayer(args[0]) == null) {
-			player.sendMessage("That is not a valid player");
-		}
-
-		if (plugin.getServer().getPlayer(args[0]) != null) {
-			Player target = plugin.getServer().getPlayer(args[0]);
-			PlayerProfile PPt = Users.getProfile(target);
-			if (PP.getParty().equals(PPt.getParty())) {
-				player.teleport(target);
-				player.sendMessage(ChatColor.GREEN + "You have teleported to " + target.getName());
-				target.sendMessage(ChatColor.GREEN + player.getName() + " has teleported to you.");
-			}
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.party;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class PtpCommand implements CommandExecutor {
+	private final mcMMO plugin;
+
+	public PtpCommand(mcMMO instance) {
+		this.plugin = instance;
+	}
+
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.ptpEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (!mcPermissions.getInstance().partyTeleport(player)) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+		if (args.length < 1) {
+			player.sendMessage(ChatColor.RED + "Usage is /" + LoadProperties.ptp + " <playername>");
+			return true;
+		}
+		if (plugin.getServer().getPlayer(args[0]) == null) {
+			player.sendMessage("That is not a valid player");
+		}
+
+		if (plugin.getServer().getPlayer(args[0]) != null) {
+			Player target = plugin.getServer().getPlayer(args[0]);
+			PlayerProfile PPt = Users.getProfile(target);
+			if (PP.getParty().equals(PPt.getParty())) {
+				player.teleport(target);
+				player.sendMessage(ChatColor.GREEN + "You have teleported to " + target.getName());
+				target.sendMessage(ChatColor.GREEN + player.getName() + " has teleported to you.");
+			}
+		}
+
+		return true;
+	}
+}

+ 52 - 52
src/com/gmail/nossr50/commands/skills/AcrobaticsCommand.java → src/main/java/com/gmail/nossr50/commands/skills/AcrobaticsCommand.java

@@ -1,52 +1,52 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class AcrobaticsCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		String dodgepercentage;
-		float skillvalue = (float) PP.getSkillLevel(SkillType.ACROBATICS);
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-		String gracepercentage = String.valueOf(((skillvalue / 1000) * 100) * 2);
-
-		if (PP.getSkillLevel(SkillType.ACROBATICS) <= 800)
-			dodgepercentage = String.valueOf((skillvalue / 4000 * 100));
-		else
-			dodgepercentage = "20";
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillAcrobatics") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainAcrobatics") }));
-
-		if (mcPermissions.getInstance().acrobatics(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics1_0"), mcLocale.getString("m.EffectsAcrobatics1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics2_0"), mcLocale.getString("m.EffectsAcrobatics2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics3_0"), mcLocale.getString("m.EffectsAcrobatics3_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.AcrobaticsRollChance", new Object[] { percentage }));
-		player.sendMessage(mcLocale.getString("m.AcrobaticsGracefulRollChance", new Object[] { gracepercentage }));
-		player.sendMessage(mcLocale.getString("m.AcrobaticsDodgeChance", new Object[] { dodgepercentage }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class AcrobaticsCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		String dodgepercentage;
+		float skillvalue = (float) PP.getSkillLevel(SkillType.ACROBATICS);
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+		String gracepercentage = String.valueOf(((skillvalue / 1000) * 100) * 2);
+
+		if (PP.getSkillLevel(SkillType.ACROBATICS) <= 800)
+			dodgepercentage = String.valueOf((skillvalue / 4000 * 100));
+		else
+			dodgepercentage = "20";
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillAcrobatics") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainAcrobatics") }));
+
+		if (mcPermissions.getInstance().acrobatics(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics1_0"), mcLocale.getString("m.EffectsAcrobatics1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics2_0"), mcLocale.getString("m.EffectsAcrobatics2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics3_0"), mcLocale.getString("m.EffectsAcrobatics3_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.AcrobaticsRollChance", new Object[] { percentage }));
+		player.sendMessage(mcLocale.getString("m.AcrobaticsGracefulRollChance", new Object[] { gracepercentage }));
+		player.sendMessage(mcLocale.getString("m.AcrobaticsDodgeChance", new Object[] { dodgepercentage }));
+
+		return true;
+	}
+}

+ 63 - 63
src/com/gmail/nossr50/commands/skills/ArcheryCommand.java → src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java

@@ -1,63 +1,63 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class ArcheryCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.ARCHERY);
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-
-		int ignition = 20;
-		if (PP.getSkillLevel(SkillType.ARCHERY) >= 200)
-			ignition += 20;
-		if (PP.getSkillLevel(SkillType.ARCHERY) >= 400)
-			ignition += 20;
-		if (PP.getSkillLevel(SkillType.ARCHERY) >= 600)
-			ignition += 20;
-		if (PP.getSkillLevel(SkillType.ARCHERY) >= 800)
-			ignition += 20;
-		if (PP.getSkillLevel(SkillType.ARCHERY) >= 1000)
-			ignition += 20;
-
-		String percentagedaze;
-		if (PP.getSkillLevel(SkillType.ARCHERY) < 1000)
-			percentagedaze = String.valueOf((skillvalue / 2000) * 100);
-		else
-			percentagedaze = "50";
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillArchery") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainArchery") }));
-
-		if (mcPermissions.getInstance().archery(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery1_0"), mcLocale.getString("m.EffectsArchery1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery2_0"), mcLocale.getString("m.EffectsArchery2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery4_0"), mcLocale.getString("m.EffectsArchery4_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.ArcheryDazeChance", new Object[] { percentagedaze }));
-		player.sendMessage(mcLocale.getString("m.ArcheryRetrieveChance", new Object[] { percentage }));
-		player.sendMessage(mcLocale.getString("m.ArcheryIgnitionLength", new Object[] { (ignition / 20) }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class ArcheryCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.ARCHERY);
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+
+		int ignition = 20;
+		if (PP.getSkillLevel(SkillType.ARCHERY) >= 200)
+			ignition += 20;
+		if (PP.getSkillLevel(SkillType.ARCHERY) >= 400)
+			ignition += 20;
+		if (PP.getSkillLevel(SkillType.ARCHERY) >= 600)
+			ignition += 20;
+		if (PP.getSkillLevel(SkillType.ARCHERY) >= 800)
+			ignition += 20;
+		if (PP.getSkillLevel(SkillType.ARCHERY) >= 1000)
+			ignition += 20;
+
+		String percentagedaze;
+		if (PP.getSkillLevel(SkillType.ARCHERY) < 1000)
+			percentagedaze = String.valueOf((skillvalue / 2000) * 100);
+		else
+			percentagedaze = "50";
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillArchery") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainArchery") }));
+
+		if (mcPermissions.getInstance().archery(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery1_0"), mcLocale.getString("m.EffectsArchery1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery2_0"), mcLocale.getString("m.EffectsArchery2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery4_0"), mcLocale.getString("m.EffectsArchery4_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.ArcheryDazeChance", new Object[] { percentagedaze }));
+		player.sendMessage(mcLocale.getString("m.ArcheryRetrieveChance", new Object[] { percentage }));
+		player.sendMessage(mcLocale.getString("m.ArcheryIgnitionLength", new Object[] { (ignition / 20) }));
+
+		return true;
+	}
+}

+ 62 - 62
src/com/gmail/nossr50/commands/skills/AxesCommand.java → src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java

@@ -1,62 +1,62 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class AxesCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		String percentage;
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.AXES);
-		if (PP.getSkillLevel(SkillType.AXES) < 750)
-			percentage = String.valueOf((skillvalue / 1000) * 100);
-		else
-			percentage = "75";
-
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.AXES);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillAxes") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainAxes") }));
-
-		if (mcPermissions.getInstance().axes(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes1_0"), mcLocale.getString("m.EffectsAxes1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes2_0"), mcLocale.getString("m.EffectsAxes2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes3_0"), mcLocale.getString("m.EffectsAxes3_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.AxesCritChance", new Object[] { percentage }));
-
-		if (PP.getSkillLevel(SkillType.AXES) < 500)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockAxes1") }));
-		else
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes1_0"), mcLocale.getString("m.AbilBonusAxes1_1") }));
-
-		player.sendMessage(mcLocale.getString("m.AxesSkullLength", new Object[] { ticks }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class AxesCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		String percentage;
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.AXES);
+		if (PP.getSkillLevel(SkillType.AXES) < 750)
+			percentage = String.valueOf((skillvalue / 1000) * 100);
+		else
+			percentage = "75";
+
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.AXES);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillAxes") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainAxes") }));
+
+		if (mcPermissions.getInstance().axes(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes1_0"), mcLocale.getString("m.EffectsAxes1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes2_0"), mcLocale.getString("m.EffectsAxes2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes3_0"), mcLocale.getString("m.EffectsAxes3_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.AxesCritChance", new Object[] { percentage }));
+
+		if (PP.getSkillLevel(SkillType.AXES) < 500)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockAxes1") }));
+		else
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes1_0"), mcLocale.getString("m.AbilBonusAxes1_1") }));
+
+		player.sendMessage(mcLocale.getString("m.AxesSkullLength", new Object[] { ticks }));
+
+		return true;
+	}
+}

+ 46 - 46
src/com/gmail/nossr50/commands/skills/ExcavationCommand.java → src/main/java/com/gmail/nossr50/commands/skills/ExcavationCommand.java

@@ -1,46 +1,46 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class ExcavationCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.EXCAVATION);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillExcavation") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainExcavation") }));
-
-		if (mcPermissions.getInstance().excavation(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation1_0"), mcLocale.getString("m.EffectsExcavation1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation2_0"), mcLocale.getString("m.EffectsExcavation2_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.ExcavationGreenTerraLength", new Object[] { ticks }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class ExcavationCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.EXCAVATION);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillExcavation") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainExcavation") }));
+
+		if (mcPermissions.getInstance().excavation(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation1_0"), mcLocale.getString("m.EffectsExcavation1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation2_0"), mcLocale.getString("m.EffectsExcavation2_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.ExcavationGreenTerraLength", new Object[] { ticks }));
+
+		return true;
+	}
+}

+ 47 - 47
src/com/gmail/nossr50/commands/skills/FishingCommand.java → src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java

@@ -1,47 +1,47 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Fishing;
-
-public class FishingCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillFishing") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainFishing") }));
-
-		if (mcPermissions.getInstance().fishing(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing1_0"), mcLocale.getString("m.EffectsFishing1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing2_0"), mcLocale.getString("m.EffectsFishing2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing3_0"), mcLocale.getString("m.EffectsFishing3_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.FishingRank", new Object[] { Fishing.getFishingLootTier(PP) }));
-		player.sendMessage(mcLocale.getString("m.FishingMagicInfo"));
-
-		if (PP.getSkillLevel(SkillType.FISHING) < 150)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockFishing1") }));
-		else
-			player.sendMessage(mcLocale.getString("m.ShakeInfo", new Object[] { Fishing.getFishingLootTier(PP) }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Fishing;
+
+public class FishingCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillFishing") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainFishing") }));
+
+		if (mcPermissions.getInstance().fishing(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing1_0"), mcLocale.getString("m.EffectsFishing1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing2_0"), mcLocale.getString("m.EffectsFishing2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing3_0"), mcLocale.getString("m.EffectsFishing3_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.FishingRank", new Object[] { Fishing.getFishingLootTier(PP) }));
+		player.sendMessage(mcLocale.getString("m.FishingMagicInfo"));
+
+		if (PP.getSkillLevel(SkillType.FISHING) < 150)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockFishing1") }));
+		else
+			player.sendMessage(mcLocale.getString("m.ShakeInfo", new Object[] { Fishing.getFishingLootTier(PP) }));
+
+		return true;
+	}
+}

+ 63 - 63
src/com/gmail/nossr50/commands/skills/HerbalismCommand.java → src/main/java/com/gmail/nossr50/commands/skills/HerbalismCommand.java

@@ -1,63 +1,63 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class HerbalismCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		int bonus = 0;
-		if (PP.getSkillLevel(SkillType.HERBALISM) >= 200)
-			bonus++;
-		if (PP.getSkillLevel(SkillType.HERBALISM) >= 400)
-			bonus++;
-		if (PP.getSkillLevel(SkillType.HERBALISM) >= 600)
-			bonus++;
-
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.HERBALISM);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.HERBALISM);
-
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-		String gpercentage = String.valueOf((skillvalue / 1500) * 100);
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillHerbalism") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainHerbalism") }));
-
-		if (mcPermissions.getInstance().herbalism(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism1_0"), mcLocale.getString("m.EffectsHerbalism1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism2_0"), mcLocale.getString("m.EffectsHerbalism2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism3_0"), mcLocale.getString("m.EffectsHerbalism3_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism5_0"), mcLocale.getString("m.EffectsHerbalism5_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.HerbalismGreenTerraLength", new Object[] { ticks }));
-		player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbChance", new Object[] { gpercentage }));
-		player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbStage", new Object[] { bonus }));
-		player.sendMessage(mcLocale.getString("m.HerbalismDoubleDropChance", new Object[] { percentage }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class HerbalismCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		int bonus = 0;
+		if (PP.getSkillLevel(SkillType.HERBALISM) >= 200)
+			bonus++;
+		if (PP.getSkillLevel(SkillType.HERBALISM) >= 400)
+			bonus++;
+		if (PP.getSkillLevel(SkillType.HERBALISM) >= 600)
+			bonus++;
+
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.HERBALISM);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.HERBALISM);
+
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+		String gpercentage = String.valueOf((skillvalue / 1500) * 100);
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillHerbalism") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainHerbalism") }));
+
+		if (mcPermissions.getInstance().herbalism(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism1_0"), mcLocale.getString("m.EffectsHerbalism1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism2_0"), mcLocale.getString("m.EffectsHerbalism2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism3_0"), mcLocale.getString("m.EffectsHerbalism3_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsHerbalism5_0"), mcLocale.getString("m.EffectsHerbalism5_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.HerbalismGreenTerraLength", new Object[] { ticks }));
+		player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbChance", new Object[] { gpercentage }));
+		player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbStage", new Object[] { bonus }));
+		player.sendMessage(mcLocale.getString("m.HerbalismDoubleDropChance", new Object[] { percentage }));
+
+		return true;
+	}
+}

+ 48 - 48
src/com/gmail/nossr50/commands/skills/MiningCommand.java → src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java

@@ -1,48 +1,48 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class MiningCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.MINING);
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.MINING);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillMining") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainMining") }));
-
-		if (mcPermissions.getInstance().mining(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining1_0"), mcLocale.getString("m.EffectsMining1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining2_0"), mcLocale.getString("m.EffectsMining2_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.MiningDoubleDropChance", new Object[] { percentage }));
-		player.sendMessage(mcLocale.getString("m.MiningSuperBreakerLength", new Object[] { ticks }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class MiningCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.MINING);
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.MINING);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillMining") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainMining") }));
+
+		if (mcPermissions.getInstance().mining(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining1_0"), mcLocale.getString("m.EffectsMining1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsMining2_0"), mcLocale.getString("m.EffectsMining2_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.MiningDoubleDropChance", new Object[] { percentage }));
+		player.sendMessage(mcLocale.getString("m.MiningSuperBreakerLength", new Object[] { ticks }));
+
+		return true;
+	}
+}

+ 53 - 53
src/com/gmail/nossr50/commands/skills/RepairCommand.java → src/main/java/com/gmail/nossr50/commands/skills/RepairCommand.java

@@ -1,53 +1,53 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Repair;
-
-public class RepairCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.REPAIR);
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-		String repairmastery = String.valueOf((skillvalue / 500) * 100);
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillRepair") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainRepair") }));
-
-		if (mcPermissions.getInstance().repair(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair1_0"), mcLocale.getString("m.EffectsRepair1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair2_0"), mcLocale.getString("m.EffectsRepair2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair3_0"), mcLocale.getString("m.EffectsRepair3_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair4_0", new Object[] { LoadProperties.repairdiamondlevel }), mcLocale.getString("m.EffectsRepair4_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair5_0"), mcLocale.getString("m.EffectsRepair5_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.RepairRepairMastery", new Object[] { repairmastery }));
-		player.sendMessage(mcLocale.getString("m.RepairSuperRepairChance", new Object[] { percentage }));
-		player.sendMessage(mcLocale.getString("m.ArcaneForgingRank", new Object[] { Repair.getArcaneForgingRank(PP) }));
-		player.sendMessage(mcLocale.getString("m.ArcaneEnchantKeepChance", new Object[] { Repair.getEnchantChance(Repair.getArcaneForgingRank(PP)) }));
-		player.sendMessage(mcLocale.getString("m.ArcaneEnchantDowngradeChance", new Object[] { Repair.getDowngradeChance(Repair.getArcaneForgingRank(PP)) }));
-		player.sendMessage(mcLocale.getString("m.ArcaneForgingMilestones"));
-		player.sendMessage(mcLocale.getString("m.ArcaneForgingMilestones2"));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Repair;
+
+public class RepairCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.REPAIR);
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+		String repairmastery = String.valueOf((skillvalue / 500) * 100);
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillRepair") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainRepair") }));
+
+		if (mcPermissions.getInstance().repair(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair1_0"), mcLocale.getString("m.EffectsRepair1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair2_0"), mcLocale.getString("m.EffectsRepair2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair3_0"), mcLocale.getString("m.EffectsRepair3_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair4_0", new Object[] { LoadProperties.repairdiamondlevel }), mcLocale.getString("m.EffectsRepair4_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsRepair5_0"), mcLocale.getString("m.EffectsRepair5_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.RepairRepairMastery", new Object[] { repairmastery }));
+		player.sendMessage(mcLocale.getString("m.RepairSuperRepairChance", new Object[] { percentage }));
+		player.sendMessage(mcLocale.getString("m.ArcaneForgingRank", new Object[] { Repair.getArcaneForgingRank(PP) }));
+		player.sendMessage(mcLocale.getString("m.ArcaneEnchantKeepChance", new Object[] { Repair.getEnchantChance(Repair.getArcaneForgingRank(PP)) }));
+		player.sendMessage(mcLocale.getString("m.ArcaneEnchantDowngradeChance", new Object[] { Repair.getDowngradeChance(Repair.getArcaneForgingRank(PP)) }));
+		player.sendMessage(mcLocale.getString("m.ArcaneForgingMilestones"));
+		player.sendMessage(mcLocale.getString("m.ArcaneForgingMilestones2"));
+
+		return true;
+	}
+}

+ 69 - 69
src/com/gmail/nossr50/commands/skills/SwordsCommand.java → src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java

@@ -1,69 +1,69 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class SwordsCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		int bleedrank = 2;
-		String percentage, counterattackpercentage;
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.SWORDS);
-		if (PP.getSkillLevel(SkillType.SWORDS) < 750)
-			percentage = String.valueOf((skillvalue / 1000) * 100);
-		else
-			percentage = "75";
-
-		if (skillvalue >= 750)
-			bleedrank += 1;
-
-		if (PP.getSkillLevel(SkillType.SWORDS) <= 600)
-			counterattackpercentage = String.valueOf((skillvalue / 2000) * 100);
-		else
-			counterattackpercentage = "30";
-
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.SWORDS);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillSwords") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainSwords") }));
-		
-		if (mcPermissions.getInstance().swords(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS) }));
-		
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords1_0"), mcLocale.getString("m.EffectsSwords1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords2_0"), mcLocale.getString("m.EffectsSwords2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords3_0"), mcLocale.getString("m.EffectsSwords3_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords5_0"), mcLocale.getString("m.EffectsSwords5_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.SwordsCounterAttChance", new Object[] { counterattackpercentage }));
-		player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] { bleedrank }));
-		player.sendMessage(mcLocale.getString("m.SwordsTickNote"));
-		player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] { percentage }));
-		player.sendMessage(mcLocale.getString("m.SwordsSSLength", new Object[] { ticks }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class SwordsCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		int bleedrank = 2;
+		String percentage, counterattackpercentage;
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.SWORDS);
+		if (PP.getSkillLevel(SkillType.SWORDS) < 750)
+			percentage = String.valueOf((skillvalue / 1000) * 100);
+		else
+			percentage = "75";
+
+		if (skillvalue >= 750)
+			bleedrank += 1;
+
+		if (PP.getSkillLevel(SkillType.SWORDS) <= 600)
+			counterattackpercentage = String.valueOf((skillvalue / 2000) * 100);
+		else
+			counterattackpercentage = "30";
+
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.SWORDS);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillSwords") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainSwords") }));
+		
+		if (mcPermissions.getInstance().swords(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS) }));
+		
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords1_0"), mcLocale.getString("m.EffectsSwords1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords2_0"), mcLocale.getString("m.EffectsSwords2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords3_0"), mcLocale.getString("m.EffectsSwords3_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsSwords5_0"), mcLocale.getString("m.EffectsSwords5_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.SwordsCounterAttChance", new Object[] { counterattackpercentage }));
+		player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] { bleedrank }));
+		player.sendMessage(mcLocale.getString("m.SwordsTickNote"));
+		player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] { percentage }));
+		player.sendMessage(mcLocale.getString("m.SwordsSSLength", new Object[] { ticks }));
+
+		return true;
+	}
+}

+ 70 - 70
src/com/gmail/nossr50/commands/skills/TamingCommand.java → src/main/java/com/gmail/nossr50/commands/skills/TamingCommand.java

@@ -1,70 +1,70 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class TamingCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		float skillvalue = (float) PP.getSkillLevel(SkillType.TAMING);
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillTaming") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainTaming") }));
-
-		if (mcPermissions.getInstance().taming(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming1_0"), mcLocale.getString("m.EffectsTaming1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming2_0"), mcLocale.getString("m.EffectsTaming2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming3_0"), mcLocale.getString("m.EffectsTaming3_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming4_0"), mcLocale.getString("m.EffectsTaming4_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming5_0"), mcLocale.getString("m.EffectsTaming5_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming6_0"), mcLocale.getString("m.EffectsTaming6_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming7_0"), mcLocale.getString("m.EffectsTaming7_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTaming7_2", new Object[] { LoadProperties.bonesConsumedByCOTW }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-
-		if (PP.getSkillLevel(SkillType.TAMING) < 100)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming1") }));
-		else
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming1_0"), mcLocale.getString("m.AbilBonusTaming1_1") }));
-
-		if (PP.getSkillLevel(SkillType.TAMING) < 250)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming2") }));
-		else
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming2_0"), mcLocale.getString("m.AbilBonusTaming2_1") }));
-
-		if (PP.getSkillLevel(SkillType.TAMING) < 500)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming3") }));
-		else
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming3_0"), mcLocale.getString("m.AbilBonusTaming3_1") }));
-
-		if (PP.getSkillLevel(SkillType.TAMING) < 750)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming4") }));
-		else
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming4_0"), mcLocale.getString("m.AbilBonusTaming4_1") }));
-
-		player.sendMessage(mcLocale.getString("m.TamingGoreChance", new Object[] { percentage }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class TamingCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		float skillvalue = (float) PP.getSkillLevel(SkillType.TAMING);
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillTaming") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainTaming") }));
+
+		if (mcPermissions.getInstance().taming(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming1_0"), mcLocale.getString("m.EffectsTaming1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming2_0"), mcLocale.getString("m.EffectsTaming2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming3_0"), mcLocale.getString("m.EffectsTaming3_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming4_0"), mcLocale.getString("m.EffectsTaming4_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming5_0"), mcLocale.getString("m.EffectsTaming5_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming6_0"), mcLocale.getString("m.EffectsTaming6_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsTaming7_0"), mcLocale.getString("m.EffectsTaming7_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTaming7_2", new Object[] { LoadProperties.bonesConsumedByCOTW }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+
+		if (PP.getSkillLevel(SkillType.TAMING) < 100)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming1") }));
+		else
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming1_0"), mcLocale.getString("m.AbilBonusTaming1_1") }));
+
+		if (PP.getSkillLevel(SkillType.TAMING) < 250)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming2") }));
+		else
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming2_0"), mcLocale.getString("m.AbilBonusTaming2_1") }));
+
+		if (PP.getSkillLevel(SkillType.TAMING) < 500)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming3") }));
+		else
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming3_0"), mcLocale.getString("m.AbilBonusTaming3_1") }));
+
+		if (PP.getSkillLevel(SkillType.TAMING) < 750)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockTaming4") }));
+		else
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusTaming4_0"), mcLocale.getString("m.AbilBonusTaming4_1") }));
+
+		player.sendMessage(mcLocale.getString("m.TamingGoreChance", new Object[] { percentage }));
+
+		return true;
+	}
+}

+ 74 - 74
src/com/gmail/nossr50/commands/skills/UnarmedCommand.java → src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java

@@ -1,74 +1,74 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class UnarmedCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		String percentage, arrowpercentage;
-		float skillvalue = (float) PP.getSkillLevel(SkillType.UNARMED);
-
-		if (PP.getSkillLevel(SkillType.UNARMED) < 1000)
-			percentage = String.valueOf((skillvalue / 4000) * 100);
-		else
-			percentage = "25";
-
-		if (PP.getSkillLevel(SkillType.UNARMED) < 1000)
-			arrowpercentage = String.valueOf(((skillvalue / 1000) * 100) / 2);
-		else
-			arrowpercentage = "50";
-
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.UNARMED);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillUnarmed") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainUnarmed") }));
-
-		if (mcPermissions.getInstance().unarmed(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED) }));
-
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed1_0"), mcLocale.getString("m.EffectsUnarmed1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed2_0"), mcLocale.getString("m.EffectsUnarmed2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed3_0"), mcLocale.getString("m.EffectsUnarmed3_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed4_0"), mcLocale.getString("m.EffectsUnarmed4_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed5_0"), mcLocale.getString("m.EffectsUnarmed5_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		player.sendMessage(mcLocale.getString("m.UnarmedArrowDeflectChance", new Object[] { arrowpercentage }));
-		player.sendMessage(mcLocale.getString("m.UnarmedDisarmChance", new Object[] { percentage }));
-
-		if (PP.getSkillLevel(SkillType.UNARMED) < 250) {
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockUnarmed1") }));
-		} else if (PP.getSkillLevel(SkillType.UNARMED) >= 250 && PP.getSkillLevel(SkillType.UNARMED) < 500) {
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed1_0"), mcLocale.getString("m.AbilBonusUnarmed1_1") }));
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockUnarmed2") }));
-		} else {
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed2_0"), mcLocale.getString("m.AbilBonusUnarmed2_1") }));
-		}
-
-		player.sendMessage(mcLocale.getString("m.UnarmedBerserkLength", new Object[] { ticks }));
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class UnarmedCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		String percentage, arrowpercentage;
+		float skillvalue = (float) PP.getSkillLevel(SkillType.UNARMED);
+
+		if (PP.getSkillLevel(SkillType.UNARMED) < 1000)
+			percentage = String.valueOf((skillvalue / 4000) * 100);
+		else
+			percentage = "25";
+
+		if (PP.getSkillLevel(SkillType.UNARMED) < 1000)
+			arrowpercentage = String.valueOf(((skillvalue / 1000) * 100) / 2);
+		else
+			arrowpercentage = "50";
+
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.UNARMED);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillUnarmed") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainUnarmed") }));
+
+		if (mcPermissions.getInstance().unarmed(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED) }));
+
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed1_0"), mcLocale.getString("m.EffectsUnarmed1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed2_0"), mcLocale.getString("m.EffectsUnarmed2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed3_0"), mcLocale.getString("m.EffectsUnarmed3_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed4_0"), mcLocale.getString("m.EffectsUnarmed4_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsUnarmed5_0"), mcLocale.getString("m.EffectsUnarmed5_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		player.sendMessage(mcLocale.getString("m.UnarmedArrowDeflectChance", new Object[] { arrowpercentage }));
+		player.sendMessage(mcLocale.getString("m.UnarmedDisarmChance", new Object[] { percentage }));
+
+		if (PP.getSkillLevel(SkillType.UNARMED) < 250) {
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockUnarmed1") }));
+		} else if (PP.getSkillLevel(SkillType.UNARMED) >= 250 && PP.getSkillLevel(SkillType.UNARMED) < 500) {
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed1_0"), mcLocale.getString("m.AbilBonusUnarmed1_1") }));
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockUnarmed2") }));
+		} else {
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusUnarmed2_0"), mcLocale.getString("m.AbilBonusUnarmed2_1") }));
+		}
+
+		player.sendMessage(mcLocale.getString("m.UnarmedBerserkLength", new Object[] { ticks }));
+
+		return true;
+	}
+}

+ 56 - 56
src/com/gmail/nossr50/commands/skills/WoodcuttingCommand.java → src/main/java/com/gmail/nossr50/commands/skills/WoodcuttingCommand.java

@@ -1,56 +1,56 @@
-package com.gmail.nossr50.commands.skills;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class WoodcuttingCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-		
-		float skillvalue = (float) PP.getSkillLevel(SkillType.WOODCUTTING);
-		int ticks = 2;
-		int x = PP.getSkillLevel(SkillType.WOODCUTTING);
-		while (x >= 50) {
-			x -= 50;
-			ticks++;
-		}
-		String percentage = String.valueOf((skillvalue / 1000) * 100);
-		
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillWoodCutting") }));
-		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainWoodCutting") }));
-		
-		if (mcPermissions.getInstance().woodcutting(player))
-			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING) }));
-		
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsWoodCutting1_0"), mcLocale.getString("m.EffectsWoodCutting1_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsWoodCutting2_0"), mcLocale.getString("m.EffectsWoodCutting2_1") }));
-		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsWoodCutting3_0"), mcLocale.getString("m.EffectsWoodCutting3_1") }));
-		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
-		
-		if (PP.getSkillLevel(SkillType.WOODCUTTING) < 100)
-			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockWoodCutting1") }));
-		else
-			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusWoodCutting1_0"), mcLocale.getString("m.AbilBonusWoodCutting1_1") }));
-		
-		player.sendMessage(mcLocale.getString("m.WoodCuttingDoubleDropChance", new Object[] { percentage }));
-		player.sendMessage(mcLocale.getString("m.WoodCuttingTreeFellerLength", new Object[] { ticks }));
-		
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.skills;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class WoodcuttingCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+		
+		float skillvalue = (float) PP.getSkillLevel(SkillType.WOODCUTTING);
+		int ticks = 2;
+		int x = PP.getSkillLevel(SkillType.WOODCUTTING);
+		while (x >= 50) {
+			x -= 50;
+			ticks++;
+		}
+		String percentage = String.valueOf((skillvalue / 1000) * 100);
+		
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillWoodCutting") }));
+		player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainWoodCutting") }));
+		
+		if (mcPermissions.getInstance().woodcutting(player))
+			player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING) }));
+		
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsWoodCutting1_0"), mcLocale.getString("m.EffectsWoodCutting1_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsWoodCutting2_0"), mcLocale.getString("m.EffectsWoodCutting2_1") }));
+		player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsWoodCutting3_0"), mcLocale.getString("m.EffectsWoodCutting3_1") }));
+		player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
+		
+		if (PP.getSkillLevel(SkillType.WOODCUTTING) < 100)
+			player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockWoodCutting1") }));
+		else
+			player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusWoodCutting1_0"), mcLocale.getString("m.AbilBonusWoodCutting1_1") }));
+		
+		player.sendMessage(mcLocale.getString("m.WoodCuttingDoubleDropChance", new Object[] { percentage }));
+		player.sendMessage(mcLocale.getString("m.WoodCuttingTreeFellerLength", new Object[] { ticks }));
+		
+		return true;
+	}
+}

+ 50 - 50
src/com/gmail/nossr50/commands/spout/MchudCommand.java → src/main/java/com/gmail/nossr50/commands/spout/MchudCommand.java

@@ -1,50 +1,50 @@
-package com.gmail.nossr50.commands.spout;
-
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.HUDType;
-import com.gmail.nossr50.datatypes.HUDmmo;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class MchudCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.spoutEnabled) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-		
-		if(args.length >= 1)
-		{
-			for(HUDType x : HUDType.values())
-			{
-				if(x.toString().toLowerCase().equals(args[0].toLowerCase()))
-				{
-					if(SpoutStuff.playerHUDs.containsKey(player))
-					{
-						SpoutStuff.playerHUDs.get(player).resetHUD();
-						SpoutStuff.playerHUDs.remove(player);
-						PP.setHUDType(x);
-						SpoutStuff.playerHUDs.put(player, new HUDmmo(player));
-					}
-				}
-			}
-		}
-		
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.spout;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.HUDType;
+import com.gmail.nossr50.datatypes.HUDmmo;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class MchudCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.spoutEnabled) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+		
+		if(args.length >= 1)
+		{
+			for(HUDType x : HUDType.values())
+			{
+				if(x.toString().toLowerCase().equals(args[0].toLowerCase()))
+				{
+					if(SpoutStuff.playerHUDs.containsKey(player))
+					{
+						SpoutStuff.playerHUDs.get(player).resetHUD();
+						SpoutStuff.playerHUDs.remove(player);
+						PP.setHUDType(x);
+						SpoutStuff.playerHUDs.put(player, new HUDmmo(player));
+					}
+				}
+			}
+		}
+		
+		return true;
+	}
+}

+ 62 - 62
src/com/gmail/nossr50/commands/spout/XplockCommand.java → src/main/java/com/gmail/nossr50/commands/spout/XplockCommand.java

@@ -1,62 +1,62 @@
-package com.gmail.nossr50.commands.spout;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class XplockCommand implements CommandExecutor {
-	@Override
-	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-		if (!LoadProperties.spoutEnabled || !LoadProperties.xpbar || !LoadProperties.xplockEnable) {
-			sender.sendMessage("This command is not enabled.");
-			return true;
-		}
-
-		if (!(sender instanceof Player)) {
-			sender.sendMessage("This command does not support console useage.");
-			return true;
-		}
-
-		Player player = (Player) sender;
-		PlayerProfile PP = Users.getProfile(player);
-
-		if (args.length >= 1 && Skills.isSkill(args[0]) && mcPermissions.permission(player, "mcmmo.skills." + Skills.getSkillType(args[0]).toString().toLowerCase())) {
-			if (PP.getXpBarLocked()) {
-				PP.setSkillLock(Skills.getSkillType(args[0]));
-				player.sendMessage(mcLocale.getString("Commands.xplock.locked", new Object[] { m.getCapitalized(PP.getSkillLock().toString()) }));
-			} else {
-				PP.setSkillLock(Skills.getSkillType(args[0]));
-				PP.toggleXpBarLocked();
-				player.sendMessage(mcLocale.getString("Commands.xplock.locked", new Object[] { m.getCapitalized(PP.getSkillLock().toString()) }));
-			}
-			SpoutStuff.updateXpBar(player);
-		} else if (args.length < 1) {
-			if (PP.getXpBarLocked()) {
-				PP.toggleXpBarLocked();
-				player.sendMessage(mcLocale.getString("Commands.xplock.unlocked"));
-			} else if (PP.getLastGained() != null) {
-				PP.toggleXpBarLocked();
-				PP.setSkillLock(PP.getLastGained());
-				player.sendMessage(mcLocale.getString("Commands.xplock.locked", new Object[] { m.getCapitalized(PP.getSkillLock().toString()) }));
-			}
-		} else if (args.length >= 1 && !Skills.isSkill(args[0])) {
-			player.sendMessage("Commands.xplock.invalid");
-		} else if (args.length >= 2 && Skills.isSkill(args[0]) && !mcPermissions.permission(player, "mcmmo.skills." + Skills.getSkillType(args[0]).toString().toLowerCase())) {
-			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
-			return true;
-		}
-
-		return true;
-	}
-}
+package com.gmail.nossr50.commands.spout;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class XplockCommand implements CommandExecutor {
+	@Override
+	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+		if (!LoadProperties.spoutEnabled || !LoadProperties.xpbar || !LoadProperties.xplockEnable) {
+			sender.sendMessage("This command is not enabled.");
+			return true;
+		}
+
+		if (!(sender instanceof Player)) {
+			sender.sendMessage("This command does not support console useage.");
+			return true;
+		}
+
+		Player player = (Player) sender;
+		PlayerProfile PP = Users.getProfile(player);
+
+		if (args.length >= 1 && Skills.isSkill(args[0]) && mcPermissions.permission(player, "mcmmo.skills." + Skills.getSkillType(args[0]).toString().toLowerCase())) {
+			if (PP.getXpBarLocked()) {
+				PP.setSkillLock(Skills.getSkillType(args[0]));
+				player.sendMessage(mcLocale.getString("Commands.xplock.locked", new Object[] { m.getCapitalized(PP.getSkillLock().toString()) }));
+			} else {
+				PP.setSkillLock(Skills.getSkillType(args[0]));
+				PP.toggleXpBarLocked();
+				player.sendMessage(mcLocale.getString("Commands.xplock.locked", new Object[] { m.getCapitalized(PP.getSkillLock().toString()) }));
+			}
+			SpoutStuff.updateXpBar(player);
+		} else if (args.length < 1) {
+			if (PP.getXpBarLocked()) {
+				PP.toggleXpBarLocked();
+				player.sendMessage(mcLocale.getString("Commands.xplock.unlocked"));
+			} else if (PP.getLastGained() != null) {
+				PP.toggleXpBarLocked();
+				PP.setSkillLock(PP.getLastGained());
+				player.sendMessage(mcLocale.getString("Commands.xplock.locked", new Object[] { m.getCapitalized(PP.getSkillLock().toString()) }));
+			}
+		} else if (args.length >= 1 && !Skills.isSkill(args[0])) {
+			player.sendMessage("Commands.xplock.invalid");
+		} else if (args.length >= 2 && Skills.isSkill(args[0]) && !mcPermissions.permission(player, "mcmmo.skills." + Skills.getSkillType(args[0]).toString().toLowerCase())) {
+			player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
+			return true;
+		}
+
+		return true;
+	}
+}

+ 616 - 616
src/com/gmail/nossr50/config/LoadProperties.java → src/main/java/com/gmail/nossr50/config/LoadProperties.java

@@ -1,617 +1,617 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.config;
-
-import java.io.File;
-import org.bukkit.util.config.Configuration;
-
-import com.gmail.nossr50.datatypes.HUDType;
-
-public class LoadProperties 
-{
-	public static Boolean enableOnlyActivateWhenSneaking, enableAbilityMessages, enableAbilities, showDisplayName, showFaces, watch, xplockEnable, xpbar, xpicon, partybar, string, bucket, web, xprateEnable, slimeballs, spoutEnabled, 
-	donateMessage, chimaeraWingEnable, xpGainsMobSpawners, myspawnEnable, mccEnable, mcmmoEnable, partyEnable, inviteEnable, acceptEnable, 
-	whoisEnable, statsEnable, addxpEnable, ptpEnable, mmoeditEnable, clearmyspawnEnable, mcgodEnable, mcabilityEnable, mctopEnable, 
-	mcrefreshEnable, enableMotd, enableMySpawn, enableRegen, enableCobbleToMossy, useMySQL, cocoabeans, mushrooms, 
-	toolsLoseDurabilityFromAbilities, pvpxp, miningrequirespickaxe, excavationRequiresShovel, woodcuttingrequiresaxe, eggs, apples, cake, music, diamond, glowstone, 
-	slowsand, sulphur, netherrack, bones, coal, clay, anvilmessages;
-	
-	public static String xplock, MySQLtablePrefix, MySQLuserName, MySQLserverName, MySQLdbName, MySQLdbPass, mctop, addxp,
-	xprate, mcability, mcmmo, mcc, mcrefresh, mcgod, stats, mmoedit, ptp, party, myspawn, whois, invite, accept, clearmyspawn, nWood,
-	nStone, nIron, nGold, nDiamond, locale;
-	
-	public static int mfishing, mwatch, xpbar_x, xpbar_y, xpicon_x, xpicon_y, mstring, mbucket, mweb,
-	chimaeraId, msandstone, mcocoa, water_thunder, cure_self, cure_other, mslimeballs, mbones, msulphur, mslowsand,
-	mmushroom2, mglowstone2, mmelon, mmusic, mdiamond2, mbase, mapple, meggs, mcake, mpine, mbirch, mspruce, mcactus, mmushroom, mflower,
-	msugar, mpumpkin, mwheat, mgold, mdiamond, miron, mredstone, mlapis, mobsidian, mnetherrack, mglowstone, mcoal, mstone, MySQLport,
-	xpGainMultiplier, superBreakerCooldown, greenTerraCooldown, gigaDrillBreakerCooldown, treeFellerCooldown,
-	berserkCooldown, serratedStrikeCooldown, skullSplitterCooldown, abilityDurabilityLoss,
-	feathersConsumedByChimaeraWing, bonesConsumedByCOTW, repairdiamondlevel, rWood, rStone, rIron, rGold, rDiamond;
-	
-	public static double xpbackground_r, xpbackground_g, xpbackground_b, xpborder_r, xpborder_g, xpborder_b, fishing_r, fishing_g, fishing_b, acrobatics_r, acrobatics_g, acrobatics_b, archery_r, archery_g, archery_b, axes_r, axes_g, axes_b,
-	excavation_r, excavation_g, excavation_b, herbalism_r, herbalism_g, herbalism_b, mining_r, mining_g, mining_b,
-	repair_r, repair_g, repair_b, swords_r, swords_g, swords_b, taming_r, taming_g, taming_b, unarmed_r, unarmed_g, unarmed_b,
-	woodcutting_r, woodcutting_g, woodcutting_b, pvpxprewardmodifier, tamingxpmodifier, miningxpmodifier,
-	repairxpmodifier, woodcuttingxpmodifier, sorceryxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier,
-	archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier;
-	
-	public static HUDType defaulthud;
-	
-	public String directory = "plugins/mcMMO/"; 
-	
-	File file = new File(directory + File.separator + "config.yml");
-	static Configuration config = null;
-	
-	public void configCheck()
-	{
-		new File(directory).mkdir();
-		config = load();
-		if(!file.exists())
-		{
-			try 
-			{
-				file.createNewFile();
-				addDefaults();
-			} 
-			catch (Exception ex) 
-			{
-				ex.printStackTrace();
-			}
-		} 
-		else 
-		{
-			loadkeys();
-		}
-	}
-	    private void write(String root, Object x)
-	    {
-	    	//Configuration config = load();
-	        config.setProperty(root, x);
-	        config.save();
-	    }
-	    private Boolean readBoolean(String root, Boolean def)
-	    {
-	    	//Configuration config = load();
-	    	Boolean result = config.getBoolean(root, def);
-	    	config.save();
-	        return result;
-	    }
-	    private Double readDouble(String root, Double def)
-	    {
-	    	Double result = config.getDouble(root, def);
-	    	config.save();
-	    	return result;
-	    }
-	    private Integer readInteger(String root, Integer def)
-	    {
-	    	//Configuration config = load();
-	    	Integer result = config.getInt(root, def);
-	    	config.save();
-	        return result;
-	    }
-	    
-	    public static String readString(String root, String def)
-	    {
-	    	//Configuration config = load();
-	    	String result = config.getString(root, def);
-	    	config.save();
-	        return result;
-	    }
-	    
-	    private Configuration load()
-	    {
-	        try {
-	            Configuration configx = new Configuration(file);
-	            configx.load();
-	            return configx;
-
-	        } catch (Exception e) {
-	            e.printStackTrace();
-	        }
-	        return null;
-	    }
-	    private void addDefaults()
-	    {
-	        System.out.println("Generating Config File...");  	
-	    	
-	        //Put in defaults
-	        write("Spout.HUD.Default", "STANDARD");
-	        write("Spout.XP.Bar.Enabled", true);
-	        write("Spout.Images.URL_DIR", "http://mcmmo.rycochet.net/mcmmo/");
-	        write("Spout.XP.Icon.Enabled", true);
-	        write("Spout.XP.Bar.X_POS", 95);
-	        write("Spout.XP.Bar.Y_POS", 6);
-	        write("Spout.XP.Icon.X_POS", 78);
-	        write("Spout.XP.Icon.Y_POS", 2);
-	        write("Spout.Party.HUD.Enabled", true);
-	        write("Spout.Party.HUD.Show_Faces", true);
-	        write("Spout.Party.HUD.Show_Display_Name", false);
-	        write("Spout.Menu.Key", "KEY_M");
-	        write("Spout.HUD.Retro.Colors.Acrobatics.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Acrobatics.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Acrobatics.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Archery.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Archery.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Archery.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Axes.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Axes.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Axes.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Excavation.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Excavation.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Excavation.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Herbalism.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Herbalism.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Herbalism.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Mining.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Mining.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Mining.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Repair.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Repair.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Repair.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Swords.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Swords.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Swords.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Taming.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Taming.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Taming.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Unarmed.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Unarmed.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Unarmed.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Woodcutting.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Woodcutting.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Woodcutting.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Fishing.RED", 0.3);
-	        write("Spout.HUD.Retro.Colors.Fishing.GREEN", 0.3);
-	        write("Spout.HUD.Retro.Colors.Fishing.BLUE", 0.75);
-	        write("Spout.HUD.Retro.Colors.Border.RED", 0.0);
-	        write("Spout.HUD.Retro.Colors.Border.GREEN", 0.0);
-	        write("Spout.HUD.Retro.Colors.Border.BLUE", 0.0);
-	        write("Spout.HUD.Retro.Colors.Background.RED", 0.75);
-	        write("Spout.HUD.Retro.Colors.Background.GREEN", 0.75);
-	        write("Spout.HUD.Retro.Colors.Background.BLUE", 0.75);
-	        
-	        write("MySQL.Enabled", false);
-	        write("MySQL.Server.Address", "localhost");
-	        write("MySQL.Server.Port", 3306);
-        	write("MySQL.Database.Name", "DataBaseName");
-        	write("MySQL.Database.User.Name", "UserName");
-        	write("MySQL.Database.TablePrefix", "mcmmo_");
-        	write("MySQL.Database.User.Password", "UserPassword");
-        	
-        	write("General.Locale", "en_us");
-	    	write("General.MOTD.Enabled", true);
-	    	write("General.MySpawn.Enabled", true);
-	    	write("General.HP_Regeneration.Enabled", true);
-	    	
-	    	write("Items.Chimaera_Wing.Enabled", true);
-	    	write("Items.Chimaera_Wing.Feather_Cost", 10);
-	    	write("Items.Chimaera_Wing.Item_ID", 288);
-	    	
-	    	write("Experience.PVP.Rewards", true);
-	    	write("Experience.Gains.Multiplier.PVP", 1);
-	    	write("Experience.Gains.Mobspawners.Enabled", false);
-	    	write("Experience.Gains.Multiplier.Global", 1.0);
-	    	write("Experience.Formula.Multiplier.Taming", 1.0);
-	    	write("Experience.Formula.Multiplier.Mining", 1.0);
-	    	write("Experience.Formula.Multiplier.Repair", 1.0);
-	    	write("Experience.Formula.Multiplier.Woodcutting", 1.0);
-	    	write("Experience.Formula.Multiplier.Unarmed", 1.0);
-	    	write("Experience.Formula.Multiplier.Herbalism", 1.0);
-	    	write("Experience.Formula.Multiplier.Excavation", 1.0);
-	    	write("Experience.Formula.Multiplier.Swords", 1.0);
-	    	write("Experience.Formula.Multiplier.Archery", 1.0);
-	    	write("Experience.Formula.Multiplier.Axes", 1.0);
-	    	write("Experience.Formula.Multiplier.Sorcery", 1.0);
-	    	write("Experience.Formula.Multiplier.Acrobatics", 1.0);
-	    	write("Experience.Mining.Gold", 350);
-	    	write("Experience.Mining.Diamond", 750);
-	    	write("Experience.Mining.Iron", 250);
-	    	write("Experience.Mining.Redstone", 150);
-	    	write("Experience.Mining.lapis", 400);
-	    	write("Experience.Mining.Obsidian", 150);
-	    	write("Experience.Mining.Netherrack", 30);
-	    	write("Experience.Mining.Glowstone", 30);
-	    	write("Experience.Mining.Coal", 100);
-	    	write("Experience.Mining.Stone", 30);
-	    	write("Experience.Mining.Sandstone", 30);
-	    	write("Experience.Herbalism.Sugar_Cane", 30);
-	    	write("Experience.Herbalism.Cactus", 30);
-	    	write("Experience.Herbalism.Pumpkin", 550);
-	    	write("Experience.Herbalism.Flowers", 100);
-	    	write("Experience.Herbalism.Wheat", 50);
-	    	write("Experience.Herbalism.Mushrooms", 150);
-	    	write("Experience.Herbalism.Melon", 40);
-	    	write("Experience.Woodcutting.Pine", 90);
-	    	write("Experience.Woodcutting.Birch", 70);
-	    	write("Experience.Woodcutting.Spruce", 80);
-	    	write("Experience.Excavation.Base", 40);
-	    	write("Experience.Excavation.Mushroom", 80);
-	    	write("Experience.Excavation.Sulphur", 30);
-	    	write("Experience.Excavation.Slowsand", 80);
-	    	write("Experience.Excavation.Glowstone", 80);
-	    	write("Experience.Excavation.Music", 3000);
-	    	write("Experience.Excavation.Bones", 30);
-	    	write("Experience.Excavation.Diamond", 1000);
-	    	write("Experience.Excavation.Apple", 100);
-	    	write("Experience.Excavation.Eggs", 100);
-	    	write("Experience.Excavation.Cake", 3000);
-	    	write("Experience.Excavation.Slimeballs", 100);
-	    	write("Experience.Excavation.Cocoa_Beans", 100);
-	    	write("Experience.Excavation.Map", 200);
-	    	write("Experience.Excavation.String", 200);
-	    	write("Experience.Excavation.Bucket", 100);
-	    	write("Experience.Excavation.Web", 150);
-	    	write("Experience.Fishing.Base", 800);
-	    	
-	    	//write("Sorcery.Spells.Water.Thunder", 75);
-	    	//write("Sorcery.Spells.Curative.Cure_Self.Mana_Cost", 5);
-	    	//write("Sorcery.Spells.Curative.Cure_Other.Mana_Cost", 5);
-	    	
-	    	write("Excavation.Drops.Cocoa_Beans", true);
-	    	write("Excavation.Drops.Mushrooms", true);
-	    	write("Excavation.Drops.Glowstone", true);
-	    	write("Excavation.Drops.Eggs", true);
-	    	write("Excavation.Drops.Apples", true);
-	    	write("Excavation.Drops.Cake", true);
-	    	write("Excavation.Drops.Music", true);
-	    	write("Excavation.Drops.Diamond", true);
-	    	write("Excavation.Drops.Slowsand", true);
-	    	write("Excavation.Drops.Sulphur", true);
-	    	write("Excavation.Drops.Netherrack", true);
-	    	write("Excavation.Drops.Bones", true);
-	    	write("Excavation.Drops.Slimeballs", true);
-	    	write("Excavation.Drops.Map", true);
-	    	write("Excavation.Drops.String", true);
-	    	write("Excavation.Drops.Bucket", true);
-	    	write("Excavation.Drops.Web", true);
-	    	
-	    	write("Commands.xprate.Name", "xprate");
-	    	write("Commands.xprate.Enabled", true);
-	    	write("Commands.mctop.Name", "mctop");
-	    	write("Commands.mctop.Enabled", true);
-	    	write("Commands.addxp.Name", "addxp");
-	    	write("Commands.addxp.Enabled", true);
-	    	write("Commands.mcability.Name", "mcability");
-	    	write("Commands.mcability.Enabled", true);
-	    	write("Commands.mcrefresh.Name", "mcrefresh");
-	    	write("Commands.mcrefresh.Enabled", true);
-	    	write("Commands.mcmmo.Name", "mcmmo");
-	    	write("Commands.mcmmo.Donate_Message", true);
-	    	write("Commands.mcmmo.Enabled", true);
-	    	write("Commands.mcc.Name", "mcc");
-	    	write("Commands.mcc.Enabled", true);
-	    	write("Commands.mcgod.Name", "mcgod");
-	    	write("Commands.mcgod.Enabled", true);
-	    	write("Commands.stats.Name", "stats");
-	    	write("Commands.stats.Enabled", true);
-	    	write("Commands.mmoedit.Name", "mmoedit");
-	    	write("Commands.mmoedit.Enabled", true);
-	    	write("Commands.ptp.Name", "ptp");
-	    	write("Commands.ptp.Enabled", true);
-	    	write("Commands.party.Name", "party");
-	    	write("Commands.party.Enabled", true);
-	    	write("Commands.myspawn.Name", "myspawn");
-	    	write("Commands.myspawn.Enabled", true);
-	    	write("Commands.whois.Name", "whois");
-	    	write("Commands.whois.Enabled", true);
-	    	write("Commands.invite.Name", "invite");
-	    	write("Commands.invite.Enabled", true);
-	    	write("Commands.accept.Name", "accept");
-	    	write("Commands.accept.Enabled", true);
-	    	write("Commands.clearmyspawn.Name", "clearmyspawn");
-	    	write("Commands.clearmyspawn.Enabled", true);
-	    	write("Commands.xplock.Enabled", true);
-	    	write("Commands.xplock.Name", "xplock");
-	    	
-	    	write("Abilities.Tools.Durability_Loss_Enabled", true);
-	    	write("Abilities.Tools.Durability_Loss", 2);
-	    	write("Abilities.Activation.Only_Activate_When_Sneaking", false);
-	    	write("Abilities.Cooldowns.Green_Terra", 240);
-	    	write("Abilities.Cooldowns.Super_Breaker", 240);
-	    	write("Abilities.Cooldowns.Giga_Drill_Breaker", 240);
-	    	write("Abilities.Cooldowns.Tree_Feller", 240);
-	    	write("Abilities.Cooldowns.Berserk", 240);
-	    	write("Abilities.Cooldowns.Serrated_Strikes", 240);
-	    	write("Abilities.Cooldowns.Skull_Splitter", 240);
-	    	write("Abilities.Messages", true);
-	    	write("Abilities.Enabled", true);
-	    	
-	    	write("Skills.Repair.Anvil_Messages", true);
-	    	write("Skills.Repair.Gold.ID", 266);
-	    	write("Skills.Repair.Gold.Name", "Gold Bars");
-	    	write("Skills.Repair.Stone.ID", 4);
-	    	write("Skills.Repair.Stone.Name", "Cobblestone");
-	    	write("Skills.Repair.Wood.ID", 5);
-	    	write("Skills.Repair.Wood.Name", "Wood Planks");
-	    	write("Skills.Repair.Diamond.ID", 264);
-	    	write("Skills.Repair.Diamond.Name", "Diamond");
-	    	write("Skills.Repair.Diamond.Level_Required", 50);
-	    	write("Skills.Repair.Iron.ID", 265);
-	    	write("Skills.Repair.Iron.Name", "Iron Bars");
-	    	write("Skills.Herbalism.Green_Thumb.Cobble_To_Mossy", true);
-	    	write("Skills.Excavation.Requires_Shovel", true);
-	    	write("Skills.Mining.Requires_Pickaxe", true);
-	    	write("Skills.Woodcutting.Requires_Axe", true);
-	    	write("Skills.Taming.Call_Of_The_Wild.Bones_Required", 10);
-	    	
-	    	loadkeys();
-	    }
-	    private void loadkeys()
-	    {
-	        System.out.println("Loading Config File...");
-	        
-	        //Setup default HUD
-	        String temp = readString("Spout.HUD.Default", "STANDARD");
-	        for(HUDType x : HUDType.values())
-	        {
-	        	if(x.toString().equalsIgnoreCase(temp))
-	        	{
-	        		defaulthud = x;
-	        	}
-	        }
-	        
-	        enableAbilityMessages = readBoolean("Abilities.Messages", true);
-	    	enableAbilities = readBoolean("Abilities.Enabled", true);
-	        
-	        donateMessage = readBoolean("Commands.mcmmo.Donate_Message", true);
-	        xpGainsMobSpawners = readBoolean("XP.Gains.Mobspawners.Enabled", false);
-	        
-	        bonesConsumedByCOTW = readInteger("Skills.Taming.Call_Of_The_Wild.Bones_Required", 10);
-	        
-	        xpbar = readBoolean("Spout.XP.Bar.Enabled", true);
-	        //web_url = readString("Spout.Images.URL_DIR", "http://mcmmo.rycochet.net/mcmmo/");
-	        xpicon = readBoolean("Spout.XP.Icon.Enabled", true);
-	        xpbar_x = readInteger("Spout.XP.Bar.X_POS", 95);
-	        xpbar_y = readInteger("Spout.XP.Bar.Y_POS", 6);
-	        xpicon_x = readInteger("Spout.XP.Icon.X_POS", 78);
-	        xpicon_y = readInteger("Spout.XP.Icon.Y_POS", 2);
-	        
-	        showFaces = readBoolean("Spout.Party.HUD.Show_Faces", true);
-	        showDisplayName = readBoolean("Spout.Party.HUD.Show_Display_Name", false);
-	        partybar = readBoolean("Spout.Party.HUD.Enabled", true);
-	        
-	        acrobatics_r = readDouble("Spout.HUD.Retro.Colors.Acrobatics.RED", 0.3);
-	        acrobatics_g = readDouble("Spout.HUD.Retro.Colors.Acrobatics.GREEN", 0.3);
-	        acrobatics_b = readDouble("Spout.HUD.Retro.Colors.Acrobatics.BLUE", 0.75);
-	        archery_r = readDouble("Spout.HUD.Retro.Colors.Archery.RED", 0.3);
-	        archery_g = readDouble("Spout.HUD.Retro.Colors.Archery.GREEN", 0.3);
-	        archery_b = readDouble("Spout.HUD.Retro.Colors.Archery.BLUE", 0.75);
-	        axes_r = readDouble("Spout.HUD.Retro.Colors.Axes.RED", 0.3);
-	        axes_g = readDouble("Spout.HUD.Retro.Colors.Axes.GREEN", 0.3);
-	        axes_b = readDouble("Spout.HUD.Retro.Colors.Axes.BLUE", 0.75);
-	        excavation_r = readDouble("Spout.HUD.Retro.Colors.Excavation.RED", 0.3);
-	        excavation_g = readDouble("Spout.HUD.Retro.Colors.Excavation.GREEN", 0.3);
-	        excavation_b = readDouble("Spout.HUD.Retro.Colors.Excavation.BLUE", 0.75);
-	        herbalism_r = readDouble("Spout.HUD.Retro.Colors.Herbalism.RED", 0.3);
-	        herbalism_g = readDouble("Spout.HUD.Retro.Colors.Herbalism.GREEN", 0.3);
-	        herbalism_b = readDouble("Spout.HUD.Retro.Colors.Herbalism.BLUE", 0.75);
-	        mining_r = readDouble("Spout.HUD.Retro.Colors.Mining.RED", 0.3);
-	        mining_g = readDouble("Spout.HUD.Retro.Colors.Mining.GREEN", 0.3);
-	        mining_b = readDouble("Spout.HUD.Retro.Colors.Mining.BLUE", 0.75);
-	        repair_r = readDouble("Spout.HUD.Retro.Colors.Repair.RED", 0.3);
-	        repair_g = readDouble("Spout.HUD.Retro.Colors.Repair.GREEN", 0.3);
-	        repair_b = readDouble("Spout.HUD.Retro.Colors.Repair.BLUE", 0.75);
-	        swords_r = readDouble("Spout.HUD.Retro.Colors.Swords.RED", 0.3);
-	        swords_g = readDouble("Spout.HUD.Retro.Colors.Swords.GREEN", 0.3);
-	        swords_b = readDouble("Spout.HUD.Retro.Colors.Swords.BLUE", 0.75);
-	        taming_r = readDouble("Spout.HUD.Retro.Colors.Taming.RED", 0.3);
-	        taming_g = readDouble("Spout.HUD.Retro.Colors.Taming.GREEN", 0.3);
-	        taming_b = readDouble("Spout.HUD.Retro.Colors.Taming.BLUE", 0.75);
-	        unarmed_r = readDouble("Spout.HUD.Retro.Colors.Unarmed.RED", 0.3);
-	        unarmed_g = readDouble("Spout.HUD.Retro.Colors.Unarmed.GREEN", 0.3);
-	        unarmed_b = readDouble("Spout.HUD.Retro.Colors.Unarmed.BLUE", 0.75);
-	        woodcutting_r = readDouble("Spout.HUD.Retro.Colors.Woodcutting.RED", 0.3);
-	        woodcutting_g = readDouble("Spout.HUD.Retro.Colors.Woodcutting.GREEN", 0.3);
-	        woodcutting_b = readDouble("Spout.HUD.Retro.Colors.Woodcutting.BLUE", 0.75);
-	        fishing_r = readDouble("Spout.HUD.Retro.Colors.Fishing.RED", 0.3);
-	        fishing_g = readDouble("Spout.HUD.Retro.Colors.Fishing.GREEN", 0.3);
-	        fishing_b = readDouble("Spout.HUD.Retro.Colors.Fishing.BLUE", 0.75);
-	        
-	        xpborder_r = readDouble("Spout.HUD.Retro.Colors.Border.RED", 0.0);
-	        xpborder_g = readDouble("Spout.HUD.Retro.Colors.Border.GREEN", 0.0);
-	        xpborder_b = readDouble("Spout.HUD.Retro.Colors.Border.BLUE", 0.0);
-	        xpbackground_r = readDouble("Spout.HUD.Retro.Colors.Background.RED", 0.75);
-	        xpbackground_g = readDouble("Spout.HUD.Retro.Colors.Background.GREEN", 0.75);
-	        xpbackground_b = readDouble("Spout.HUD.Retro.Colors.Background.BLUE", 0.75);
-	        
-	        msulphur = readInteger("Experience.Excavation.Sulphur", 30);
-	        mbones = readInteger("Experience.Excavation.Bones", 30);
-	        mbase = readInteger("Experience.Excavation.Base", 40);
-	        mmushroom2 = readInteger("Experience.Excavation.Mushroom", 80);
-	    	mslowsand = readInteger("Experience.Excavation.Slowsand", 80);
-	    	mglowstone2 = readInteger("Experience.Excavation.Glowstone", 80);
-	    	mmusic = readInteger("Experience.Excavation.Music", 3000);
-	    	mdiamond2 = readInteger("Experience.Excavation.Diamond", 1000);
-	    	mapple = readInteger("Experience.Excavation.Apple", 100);
-	    	meggs = readInteger("Experience.Excavation.Eggs", 100);
-	    	mcake = readInteger("Experience.Excavation.Cake", 3000);
-	    	mcocoa = readInteger("Experience.Excavation.Cocoa_Beans", 100);
-	    	mslimeballs = readInteger("Experience.Excavation.Slimeballs", 100);
-	    	mstring = readInteger("Experience.Excavation.String", 200);
-	    	mbucket = readInteger("Experience.Excavation.Bucket", 100);
-	    	mweb = readInteger("Experience.Excavation.Web", 150);
-	    	mwatch = readInteger("Experience.Excavation.Watch", 200);
-	    	
-	        msugar = readInteger("Experience.Herbalism.Sugar_Cane", 30);
-	        mwheat = readInteger("Experience.Herbalism.Wheat", 50);
-	    	mcactus = readInteger("Experience.Herbalism.Cactus", 30);
-	    	mpumpkin = readInteger("Experience.Herbalism.Pumpkin", 550);
-	    	mflower = readInteger("Experience.Herbalism.Flowers", 100);
-	    	mmushroom = readInteger("Experience.Herbalism.Mushrooms", 150);
-	    	mmelon = readInteger("Experience.Herbalism.Melon", 20);
-	    	
-	    	mpine = readInteger("Experience.Woodcutting.Pine", 70);
-	    	mbirch = readInteger("Experience.Woodcutting.Birch", 80);
-	    	mspruce = readInteger("Experience.Woodcutting.Spruce", 90);
-	        
-	        mgold = readInteger("Experience.Mining.Gold", 250);
-	        mdiamond = readInteger("Experience.Mining.Diamond", 750);
-	        miron = readInteger("Experience.Mining.Iron", 250);
-	        mredstone = readInteger("Experience.Mining.Redstone", 150);
-	        mlapis = readInteger("Experience.Mining.lapis", 400);
-	        mobsidian = readInteger("Experience.Mining.Obsidian", 150);
-	        mnetherrack = readInteger("Experience.Mining.Netherrack", 30);
-	        mglowstone = readInteger("Experience.Mining.Glowstone", 30);
-	        mcoal = readInteger("Experience.Mining.Coal", 100);
-	        mstone = readInteger("Experience.Mining.Stone", 30);
-	        msandstone = readInteger("Experience.Mining.Sandstone", 30);
-	        
-	        mfishing = readInteger("Experience.Fishing.Base", 800);
-	        
-	        enableOnlyActivateWhenSneaking = readBoolean("Abilities.Activation.Only_Activate_When_Sneaking", false);
-	        
-	        greenTerraCooldown = readInteger("Abilities.Cooldowns.Green_Terra", 240);
-	    	superBreakerCooldown = readInteger("Abilities.Cooldowns.Super_Breaker", 240);
-	    	gigaDrillBreakerCooldown = readInteger("Abilities.Cooldowns.Giga_Drill_Breaker", 240);
-	    	treeFellerCooldown = readInteger("Abilities.Cooldowns.Tree_Feller", 240);
-	    	berserkCooldown = readInteger("Abilities.Cooldowns.Berserk", 240);
-	    	serratedStrikeCooldown = readInteger("Abilities.Cooldowns.Serrated_Strikes", 240);
-	    	skullSplitterCooldown = readInteger("Abilities.Cooldowns.Skull_Splitter", 240);
-	    	
-	    	MySQLserverName = readString("MySQL.Server.Address", "localhost");
-	    	if(readString("MySQL.Database.User.Password", null) != null)
-	    		MySQLdbPass = readString("MySQL.Database.User.Password", null);
-	    	else
-	    		MySQLdbPass = "";
-	    	
-	    	MySQLdbName = readString("MySQL.Database.Name", "DatabaseName");
-	    	MySQLuserName = readString("MySQL.Database.User.Name", "UserName");
-	    	MySQLtablePrefix = readString("MySQL.Database.TablePrefix", "mcmmo_");
-	    	MySQLport = readInteger("MySQL.Server.Port", 3306);
-	    	useMySQL = readBoolean("MySQL.Enabled", false);
-	    	
-	    	locale = readString("General.Locale", "en_us");
-	    	enableMotd = readBoolean("General.MOTD.Enabled", true);
-	    	enableMySpawn = readBoolean("General.MySpawn.Enabled", true);
-	    	enableRegen = readBoolean("General.HP_Regeneration.Enabled", true);
-	    	
-	    	enableCobbleToMossy = readBoolean("Skills.Herbalism.Green_Thumb.Cobble_To_Mossy", true);
-	    	
-	    	xpGainMultiplier = readInteger("Experience.Gains.Multiplier.Global", 1);
-	    	toolsLoseDurabilityFromAbilities = readBoolean("Abilities.Tools.Durability_Loss_Enabled", true);
-	    	abilityDurabilityLoss = readInteger("Abilities.Tools.Durability_Loss", 2);
-	    	
-	    	feathersConsumedByChimaeraWing = readInteger("Items.Chimaera_Wing.Feather_Cost", 10);
-	    	chimaeraId = readInteger("Items.Chimaera_Wing.Item_ID", 288);
-	    	chimaeraWingEnable = readBoolean("Items.Chimaera_Wing.Enabled", true);
-	    	
-	    	pvpxp = readBoolean("XP.PVP.Rewards", true);
-	    	pvpxprewardmodifier = readDouble("Experience.Gains.Multiplier.PVP", 1.0);
-	    	miningrequirespickaxe = readBoolean("Skills.Mining.Requires_Pickaxe", true);
-	    	excavationRequiresShovel = readBoolean("Skills.Excavation.Requires_Shovel", true);
-	    	woodcuttingrequiresaxe = readBoolean("Skills.Woodcutting.Requires_Axe", true);
-	    	repairdiamondlevel = readInteger("Skills.Repair.Diamond.Level_Required", 50);
-
-	    	sorceryxpmodifier = readDouble("Experience.Formula.Multiplier.Sorcery", 1.0);
-	    	tamingxpmodifier = readDouble("Experience.Formula.Multiplier.Taming", 1.0);
-	    	miningxpmodifier = readDouble("Experience.Formula.Multiplier.Mining", 1.0);
-	    	repairxpmodifier = readDouble("Experience.Formula.Multiplier.Repair", 1.0);
-	    	woodcuttingxpmodifier = readDouble("Experience.Formula.Multiplier.Woodcutting", 1.0);
-	    	unarmedxpmodifier = readDouble("Experience.Formula.Multiplier.Unarmed", 1.0);
-	    	herbalismxpmodifier = readDouble("Experience.Formula.Multiplier.Herbalism", 1.0);
-	    	excavationxpmodifier = readDouble("Experience.Formula.Multiplier.Excavation", 1.0);
-	    	archeryxpmodifier = readDouble("Experience.Formula.Multiplier.Archery", 1.0);
-	    	swordsxpmodifier = readDouble("Experience.Formula.Multiplier.Swords", 1.0);
-	    	axesxpmodifier = readDouble("Experience.Formula.Multiplier.Axes", 1.0);
-	    	acrobaticsxpmodifier = readDouble("Experience.Formula.Multiplier.Acrobatics", 1.0);
-
-	    	anvilmessages = readBoolean("Skills.Repair.Anvil_Messages", true);
-	    	
-	        rGold =  readInteger("Skills.Repair.Gold.ID", 266);
-	        nGold =  readString("Skills.Repair.Gold.Name", "Gold Bars");      
-	        rStone =  readInteger("Skills.Repair.Stone.ID", 4);
-	        nStone =  readString("Skills.Repair.Stone.Name", "Cobblestone");     
-	        rWood =  readInteger("Skills.Repair.Wood.ID", 5);
-	        nWood =  readString("Skills.Repair.Wood.Name", "Wood Planks");        
-	        rDiamond =   readInteger("Skills.Repair.Diamond.ID", 264);
-	        nDiamond =  readString("Skills.Repair.Diamond.Name", "Diamond");          
-	        rIron =   readInteger("Skills.Repair.Iron.ID", 265);
-	        nIron =  readString("Skills.Repair.Iron.Name", "Iron Bars");  
-
-	    	cocoabeans = readBoolean("Excavation.Drops.Cocoa_Beans", true);
-	    	mushrooms = readBoolean("Excavation.Drops.Mushrooms", true);
-	    	glowstone = readBoolean("Excavation.Drops.Glowstone", true);
-	    	eggs = readBoolean("Excavation.Drops.Eggs", true);
-	    	apples = readBoolean("Excavation.Drops.Apples", true);
-	    	cake = readBoolean("Excavation.Drops.Cake", true);
-	    	music = readBoolean("Excavation.Drops.Music", true);
-	    	diamond = readBoolean("Excavation.Drops.Diamond", true);
-	    	slowsand = readBoolean("Excavation.Drops.Slowsand", true);
-	    	sulphur = readBoolean("Excavation.Drops.Sulphur", true);
-	    	netherrack = readBoolean("Excavation.Drops.Netherrack", true);
-	    	bones = readBoolean("Excavation.Drops.Bones", true);
-	    	slimeballs = readBoolean("Excavation.Drops.Slimeballs", true);
-	    	watch = readBoolean("Excavation.Drops.Watch", true);
-	    	string = readBoolean("Excavation.Drops.String", true);
-	    	bucket = readBoolean("Excavation.Drops.Bucket", true);
-	    	web = readBoolean("Excavation.Drops.Web", true);
-	    	
-	    	xprate = readString("Commands.xprate.Name", "xprate");
-	    	xprateEnable = readBoolean("Commands.xprate.Enabled", true);
-	    	
-	    	mctop = readString("Commands.mctop.Name", "mctop");
-	    	mctopEnable = readBoolean("Commands.mctop.Enabled", true);
-	    	
-	    	addxp = readString("Commands.addxp.Name", "addxp");
-	    	addxpEnable = readBoolean("Commands.addxp.Enabled", true);
-	    	
-	    	mcability = readString("Commands.mcability.Name", "mcability");
-	    	mcabilityEnable = readBoolean("Commands.mcability.Enabled", true);
-	    	
-	    	mcrefresh = readString("Commands.mcrefresh.Name", "mcrefresh");
-	    	mcrefreshEnable = readBoolean("Commands.mcrefresh.Enabled", true);
-	    	
-	    	mcmmo = readString("Commands.mcmmo.Name", "mcmmo");
-	    	mcmmoEnable = readBoolean("Commands.mcmmo.Enabled", true);
-	    	
-	    	mcc = readString("Commands.mcc.Name", "mcc");
-	    	mccEnable = readBoolean("Commands.mcc.Enabled", true);
-	    	
-	    	mcgod = readString("Commands.mcgod.Name", "mcgod");
-	    	mcgodEnable = readBoolean("Commands.mcgod.Enabled", true);
-	    	
-	    	stats = readString("Commands.stats.Name", "stats");
-	    	statsEnable = readBoolean("Commands.stats.Enabled", true);
-	    	
-	    	mmoedit = readString("Commands.mmoedit.Name", "mmoedit");
-	    	mmoeditEnable = readBoolean("Commands.mmoedit.Enabled", true);
-	    	
-	    	ptp = readString("Commands.ptp.Name", "ptp");
-	    	ptpEnable = readBoolean("Commands.ptp.Enabled", true);
-	    	
-	    	party = readString("Commands.party.Name", "party");
-	    	partyEnable = readBoolean("Commands.party.Enabled", true);
-	    	
-	    	myspawn = readString("Commands.myspawn.Name", "myspawn");
-	    	myspawnEnable = readBoolean("Commands.myspawn.Enabled", true);
-	    	
-	    	whois = readString("Commands.whois.Name", "whois");
-	    	whoisEnable = readBoolean("Commands.whois.Enabled", true);
-	    	
-	    	invite = readString("Commands.invite.Name", "invite");
-	    	inviteEnable = readBoolean("Commands.invite.Enabled", true);
-	    	
-	    	accept = readString("Commands.accept.Name", "accept");
-	    	acceptEnable = readBoolean("Commands.accept.Enabled", true);
-	    	
-	    	clearmyspawn = readString("Commands.clearmyspawn.Name", "clearmyspawn");
-	    	clearmyspawnEnable = readBoolean("Commands.clearmyspawn.Enabled", true);
-	    	
-	    	xplockEnable = readBoolean("Commands.xplock.Enabled", true);
-	    	xplock = readString("Commands.xplock.Name", "xplock");
-	        }
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.config;
+
+import java.io.File;
+import org.bukkit.util.config.Configuration;
+
+import com.gmail.nossr50.datatypes.HUDType;
+
+public class LoadProperties 
+{
+	public static Boolean enableOnlyActivateWhenSneaking, enableAbilityMessages, enableAbilities, showDisplayName, showFaces, watch, xplockEnable, xpbar, xpicon, partybar, string, bucket, web, xprateEnable, slimeballs, spoutEnabled, 
+	donateMessage, chimaeraWingEnable, xpGainsMobSpawners, myspawnEnable, mccEnable, mcmmoEnable, partyEnable, inviteEnable, acceptEnable, 
+	whoisEnable, statsEnable, addxpEnable, ptpEnable, mmoeditEnable, clearmyspawnEnable, mcgodEnable, mcabilityEnable, mctopEnable, 
+	mcrefreshEnable, enableMotd, enableMySpawn, enableRegen, enableCobbleToMossy, useMySQL, cocoabeans, mushrooms, 
+	toolsLoseDurabilityFromAbilities, pvpxp, miningrequirespickaxe, excavationRequiresShovel, woodcuttingrequiresaxe, eggs, apples, cake, music, diamond, glowstone, 
+	slowsand, sulphur, netherrack, bones, coal, clay, anvilmessages;
+	
+	public static String xplock, MySQLtablePrefix, MySQLuserName, MySQLserverName, MySQLdbName, MySQLdbPass, mctop, addxp,
+	xprate, mcability, mcmmo, mcc, mcrefresh, mcgod, stats, mmoedit, ptp, party, myspawn, whois, invite, accept, clearmyspawn, nWood,
+	nStone, nIron, nGold, nDiamond, locale;
+	
+	public static int mfishing, mwatch, xpbar_x, xpbar_y, xpicon_x, xpicon_y, mstring, mbucket, mweb,
+	chimaeraId, msandstone, mcocoa, water_thunder, cure_self, cure_other, mslimeballs, mbones, msulphur, mslowsand,
+	mmushroom2, mglowstone2, mmelon, mmusic, mdiamond2, mbase, mapple, meggs, mcake, mpine, mbirch, mspruce, mcactus, mmushroom, mflower,
+	msugar, mpumpkin, mwheat, mgold, mdiamond, miron, mredstone, mlapis, mobsidian, mnetherrack, mglowstone, mcoal, mstone, MySQLport,
+	xpGainMultiplier, superBreakerCooldown, greenTerraCooldown, gigaDrillBreakerCooldown, treeFellerCooldown,
+	berserkCooldown, serratedStrikeCooldown, skullSplitterCooldown, abilityDurabilityLoss,
+	feathersConsumedByChimaeraWing, bonesConsumedByCOTW, repairdiamondlevel, rWood, rStone, rIron, rGold, rDiamond;
+	
+	public static double xpbackground_r, xpbackground_g, xpbackground_b, xpborder_r, xpborder_g, xpborder_b, fishing_r, fishing_g, fishing_b, acrobatics_r, acrobatics_g, acrobatics_b, archery_r, archery_g, archery_b, axes_r, axes_g, axes_b,
+	excavation_r, excavation_g, excavation_b, herbalism_r, herbalism_g, herbalism_b, mining_r, mining_g, mining_b,
+	repair_r, repair_g, repair_b, swords_r, swords_g, swords_b, taming_r, taming_g, taming_b, unarmed_r, unarmed_g, unarmed_b,
+	woodcutting_r, woodcutting_g, woodcutting_b, pvpxprewardmodifier, tamingxpmodifier, miningxpmodifier,
+	repairxpmodifier, woodcuttingxpmodifier, sorceryxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier,
+	archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier;
+	
+	public static HUDType defaulthud;
+	
+	public String directory = "plugins/mcMMO/"; 
+	
+	File file = new File(directory + File.separator + "config.yml");
+	static Configuration config = null;
+	
+	public void configCheck()
+	{
+		new File(directory).mkdir();
+		config = load();
+		if(!file.exists())
+		{
+			try 
+			{
+				file.createNewFile();
+				addDefaults();
+			} 
+			catch (Exception ex) 
+			{
+				ex.printStackTrace();
+			}
+		} 
+		else 
+		{
+			loadkeys();
+		}
+	}
+	    private void write(String root, Object x)
+	    {
+	    	//Configuration config = load();
+	        config.setProperty(root, x);
+	        config.save();
+	    }
+	    private Boolean readBoolean(String root, Boolean def)
+	    {
+	    	//Configuration config = load();
+	    	Boolean result = config.getBoolean(root, def);
+	    	config.save();
+	        return result;
+	    }
+	    private Double readDouble(String root, Double def)
+	    {
+	    	Double result = config.getDouble(root, def);
+	    	config.save();
+	    	return result;
+	    }
+	    private Integer readInteger(String root, Integer def)
+	    {
+	    	//Configuration config = load();
+	    	Integer result = config.getInt(root, def);
+	    	config.save();
+	        return result;
+	    }
+	    
+	    public static String readString(String root, String def)
+	    {
+	    	//Configuration config = load();
+	    	String result = config.getString(root, def);
+	    	config.save();
+	        return result;
+	    }
+	    
+	    private Configuration load()
+	    {
+	        try {
+	            Configuration configx = new Configuration(file);
+	            configx.load();
+	            return configx;
+
+	        } catch (Exception e) {
+	            e.printStackTrace();
+	        }
+	        return null;
+	    }
+	    private void addDefaults()
+	    {
+	        System.out.println("Generating Config File...");  	
+	    	
+	        //Put in defaults
+	        write("Spout.HUD.Default", "STANDARD");
+	        write("Spout.XP.Bar.Enabled", true);
+	        write("Spout.Images.URL_DIR", "http://mcmmo.rycochet.net/mcmmo/");
+	        write("Spout.XP.Icon.Enabled", true);
+	        write("Spout.XP.Bar.X_POS", 95);
+	        write("Spout.XP.Bar.Y_POS", 6);
+	        write("Spout.XP.Icon.X_POS", 78);
+	        write("Spout.XP.Icon.Y_POS", 2);
+	        write("Spout.Party.HUD.Enabled", true);
+	        write("Spout.Party.HUD.Show_Faces", true);
+	        write("Spout.Party.HUD.Show_Display_Name", false);
+	        write("Spout.Menu.Key", "KEY_M");
+	        write("Spout.HUD.Retro.Colors.Acrobatics.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Acrobatics.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Acrobatics.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Archery.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Archery.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Archery.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Axes.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Axes.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Axes.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Excavation.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Excavation.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Excavation.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Herbalism.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Herbalism.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Herbalism.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Mining.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Mining.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Mining.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Repair.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Repair.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Repair.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Swords.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Swords.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Swords.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Taming.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Taming.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Taming.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Unarmed.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Unarmed.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Unarmed.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Woodcutting.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Woodcutting.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Woodcutting.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Fishing.RED", 0.3);
+	        write("Spout.HUD.Retro.Colors.Fishing.GREEN", 0.3);
+	        write("Spout.HUD.Retro.Colors.Fishing.BLUE", 0.75);
+	        write("Spout.HUD.Retro.Colors.Border.RED", 0.0);
+	        write("Spout.HUD.Retro.Colors.Border.GREEN", 0.0);
+	        write("Spout.HUD.Retro.Colors.Border.BLUE", 0.0);
+	        write("Spout.HUD.Retro.Colors.Background.RED", 0.75);
+	        write("Spout.HUD.Retro.Colors.Background.GREEN", 0.75);
+	        write("Spout.HUD.Retro.Colors.Background.BLUE", 0.75);
+	        
+	        write("MySQL.Enabled", false);
+	        write("MySQL.Server.Address", "localhost");
+	        write("MySQL.Server.Port", 3306);
+        	write("MySQL.Database.Name", "DataBaseName");
+        	write("MySQL.Database.User.Name", "UserName");
+        	write("MySQL.Database.TablePrefix", "mcmmo_");
+        	write("MySQL.Database.User.Password", "UserPassword");
+        	
+        	write("General.Locale", "en_us");
+	    	write("General.MOTD.Enabled", true);
+	    	write("General.MySpawn.Enabled", true);
+	    	write("General.HP_Regeneration.Enabled", true);
+	    	
+	    	write("Items.Chimaera_Wing.Enabled", true);
+	    	write("Items.Chimaera_Wing.Feather_Cost", 10);
+	    	write("Items.Chimaera_Wing.Item_ID", 288);
+	    	
+	    	write("Experience.PVP.Rewards", true);
+	    	write("Experience.Gains.Multiplier.PVP", 1);
+	    	write("Experience.Gains.Mobspawners.Enabled", false);
+	    	write("Experience.Gains.Multiplier.Global", 1.0);
+	    	write("Experience.Formula.Multiplier.Taming", 1.0);
+	    	write("Experience.Formula.Multiplier.Mining", 1.0);
+	    	write("Experience.Formula.Multiplier.Repair", 1.0);
+	    	write("Experience.Formula.Multiplier.Woodcutting", 1.0);
+	    	write("Experience.Formula.Multiplier.Unarmed", 1.0);
+	    	write("Experience.Formula.Multiplier.Herbalism", 1.0);
+	    	write("Experience.Formula.Multiplier.Excavation", 1.0);
+	    	write("Experience.Formula.Multiplier.Swords", 1.0);
+	    	write("Experience.Formula.Multiplier.Archery", 1.0);
+	    	write("Experience.Formula.Multiplier.Axes", 1.0);
+	    	write("Experience.Formula.Multiplier.Sorcery", 1.0);
+	    	write("Experience.Formula.Multiplier.Acrobatics", 1.0);
+	    	write("Experience.Mining.Gold", 350);
+	    	write("Experience.Mining.Diamond", 750);
+	    	write("Experience.Mining.Iron", 250);
+	    	write("Experience.Mining.Redstone", 150);
+	    	write("Experience.Mining.lapis", 400);
+	    	write("Experience.Mining.Obsidian", 150);
+	    	write("Experience.Mining.Netherrack", 30);
+	    	write("Experience.Mining.Glowstone", 30);
+	    	write("Experience.Mining.Coal", 100);
+	    	write("Experience.Mining.Stone", 30);
+	    	write("Experience.Mining.Sandstone", 30);
+	    	write("Experience.Herbalism.Sugar_Cane", 30);
+	    	write("Experience.Herbalism.Cactus", 30);
+	    	write("Experience.Herbalism.Pumpkin", 550);
+	    	write("Experience.Herbalism.Flowers", 100);
+	    	write("Experience.Herbalism.Wheat", 50);
+	    	write("Experience.Herbalism.Mushrooms", 150);
+	    	write("Experience.Herbalism.Melon", 40);
+	    	write("Experience.Woodcutting.Pine", 90);
+	    	write("Experience.Woodcutting.Birch", 70);
+	    	write("Experience.Woodcutting.Spruce", 80);
+	    	write("Experience.Excavation.Base", 40);
+	    	write("Experience.Excavation.Mushroom", 80);
+	    	write("Experience.Excavation.Sulphur", 30);
+	    	write("Experience.Excavation.Slowsand", 80);
+	    	write("Experience.Excavation.Glowstone", 80);
+	    	write("Experience.Excavation.Music", 3000);
+	    	write("Experience.Excavation.Bones", 30);
+	    	write("Experience.Excavation.Diamond", 1000);
+	    	write("Experience.Excavation.Apple", 100);
+	    	write("Experience.Excavation.Eggs", 100);
+	    	write("Experience.Excavation.Cake", 3000);
+	    	write("Experience.Excavation.Slimeballs", 100);
+	    	write("Experience.Excavation.Cocoa_Beans", 100);
+	    	write("Experience.Excavation.Map", 200);
+	    	write("Experience.Excavation.String", 200);
+	    	write("Experience.Excavation.Bucket", 100);
+	    	write("Experience.Excavation.Web", 150);
+	    	write("Experience.Fishing.Base", 800);
+	    	
+	    	//write("Sorcery.Spells.Water.Thunder", 75);
+	    	//write("Sorcery.Spells.Curative.Cure_Self.Mana_Cost", 5);
+	    	//write("Sorcery.Spells.Curative.Cure_Other.Mana_Cost", 5);
+	    	
+	    	write("Excavation.Drops.Cocoa_Beans", true);
+	    	write("Excavation.Drops.Mushrooms", true);
+	    	write("Excavation.Drops.Glowstone", true);
+	    	write("Excavation.Drops.Eggs", true);
+	    	write("Excavation.Drops.Apples", true);
+	    	write("Excavation.Drops.Cake", true);
+	    	write("Excavation.Drops.Music", true);
+	    	write("Excavation.Drops.Diamond", true);
+	    	write("Excavation.Drops.Slowsand", true);
+	    	write("Excavation.Drops.Sulphur", true);
+	    	write("Excavation.Drops.Netherrack", true);
+	    	write("Excavation.Drops.Bones", true);
+	    	write("Excavation.Drops.Slimeballs", true);
+	    	write("Excavation.Drops.Map", true);
+	    	write("Excavation.Drops.String", true);
+	    	write("Excavation.Drops.Bucket", true);
+	    	write("Excavation.Drops.Web", true);
+	    	
+	    	write("Commands.xprate.Name", "xprate");
+	    	write("Commands.xprate.Enabled", true);
+	    	write("Commands.mctop.Name", "mctop");
+	    	write("Commands.mctop.Enabled", true);
+	    	write("Commands.addxp.Name", "addxp");
+	    	write("Commands.addxp.Enabled", true);
+	    	write("Commands.mcability.Name", "mcability");
+	    	write("Commands.mcability.Enabled", true);
+	    	write("Commands.mcrefresh.Name", "mcrefresh");
+	    	write("Commands.mcrefresh.Enabled", true);
+	    	write("Commands.mcmmo.Name", "mcmmo");
+	    	write("Commands.mcmmo.Donate_Message", true);
+	    	write("Commands.mcmmo.Enabled", true);
+	    	write("Commands.mcc.Name", "mcc");
+	    	write("Commands.mcc.Enabled", true);
+	    	write("Commands.mcgod.Name", "mcgod");
+	    	write("Commands.mcgod.Enabled", true);
+	    	write("Commands.stats.Name", "stats");
+	    	write("Commands.stats.Enabled", true);
+	    	write("Commands.mmoedit.Name", "mmoedit");
+	    	write("Commands.mmoedit.Enabled", true);
+	    	write("Commands.ptp.Name", "ptp");
+	    	write("Commands.ptp.Enabled", true);
+	    	write("Commands.party.Name", "party");
+	    	write("Commands.party.Enabled", true);
+	    	write("Commands.myspawn.Name", "myspawn");
+	    	write("Commands.myspawn.Enabled", true);
+	    	write("Commands.whois.Name", "whois");
+	    	write("Commands.whois.Enabled", true);
+	    	write("Commands.invite.Name", "invite");
+	    	write("Commands.invite.Enabled", true);
+	    	write("Commands.accept.Name", "accept");
+	    	write("Commands.accept.Enabled", true);
+	    	write("Commands.clearmyspawn.Name", "clearmyspawn");
+	    	write("Commands.clearmyspawn.Enabled", true);
+	    	write("Commands.xplock.Enabled", true);
+	    	write("Commands.xplock.Name", "xplock");
+	    	
+	    	write("Abilities.Tools.Durability_Loss_Enabled", true);
+	    	write("Abilities.Tools.Durability_Loss", 2);
+	    	write("Abilities.Activation.Only_Activate_When_Sneaking", false);
+	    	write("Abilities.Cooldowns.Green_Terra", 240);
+	    	write("Abilities.Cooldowns.Super_Breaker", 240);
+	    	write("Abilities.Cooldowns.Giga_Drill_Breaker", 240);
+	    	write("Abilities.Cooldowns.Tree_Feller", 240);
+	    	write("Abilities.Cooldowns.Berserk", 240);
+	    	write("Abilities.Cooldowns.Serrated_Strikes", 240);
+	    	write("Abilities.Cooldowns.Skull_Splitter", 240);
+	    	write("Abilities.Messages", true);
+	    	write("Abilities.Enabled", true);
+	    	
+	    	write("Skills.Repair.Anvil_Messages", true);
+	    	write("Skills.Repair.Gold.ID", 266);
+	    	write("Skills.Repair.Gold.Name", "Gold Bars");
+	    	write("Skills.Repair.Stone.ID", 4);
+	    	write("Skills.Repair.Stone.Name", "Cobblestone");
+	    	write("Skills.Repair.Wood.ID", 5);
+	    	write("Skills.Repair.Wood.Name", "Wood Planks");
+	    	write("Skills.Repair.Diamond.ID", 264);
+	    	write("Skills.Repair.Diamond.Name", "Diamond");
+	    	write("Skills.Repair.Diamond.Level_Required", 50);
+	    	write("Skills.Repair.Iron.ID", 265);
+	    	write("Skills.Repair.Iron.Name", "Iron Bars");
+	    	write("Skills.Herbalism.Green_Thumb.Cobble_To_Mossy", true);
+	    	write("Skills.Excavation.Requires_Shovel", true);
+	    	write("Skills.Mining.Requires_Pickaxe", true);
+	    	write("Skills.Woodcutting.Requires_Axe", true);
+	    	write("Skills.Taming.Call_Of_The_Wild.Bones_Required", 10);
+	    	
+	    	loadkeys();
+	    }
+	    private void loadkeys()
+	    {
+	        System.out.println("Loading Config File...");
+	        
+	        //Setup default HUD
+	        String temp = readString("Spout.HUD.Default", "STANDARD");
+	        for(HUDType x : HUDType.values())
+	        {
+	        	if(x.toString().equalsIgnoreCase(temp))
+	        	{
+	        		defaulthud = x;
+	        	}
+	        }
+	        
+	        enableAbilityMessages = readBoolean("Abilities.Messages", true);
+	    	enableAbilities = readBoolean("Abilities.Enabled", true);
+	        
+	        donateMessage = readBoolean("Commands.mcmmo.Donate_Message", true);
+	        xpGainsMobSpawners = readBoolean("XP.Gains.Mobspawners.Enabled", false);
+	        
+	        bonesConsumedByCOTW = readInteger("Skills.Taming.Call_Of_The_Wild.Bones_Required", 10);
+	        
+	        xpbar = readBoolean("Spout.XP.Bar.Enabled", true);
+	        //web_url = readString("Spout.Images.URL_DIR", "http://mcmmo.rycochet.net/mcmmo/");
+	        xpicon = readBoolean("Spout.XP.Icon.Enabled", true);
+	        xpbar_x = readInteger("Spout.XP.Bar.X_POS", 95);
+	        xpbar_y = readInteger("Spout.XP.Bar.Y_POS", 6);
+	        xpicon_x = readInteger("Spout.XP.Icon.X_POS", 78);
+	        xpicon_y = readInteger("Spout.XP.Icon.Y_POS", 2);
+	        
+	        showFaces = readBoolean("Spout.Party.HUD.Show_Faces", true);
+	        showDisplayName = readBoolean("Spout.Party.HUD.Show_Display_Name", false);
+	        partybar = readBoolean("Spout.Party.HUD.Enabled", true);
+	        
+	        acrobatics_r = readDouble("Spout.HUD.Retro.Colors.Acrobatics.RED", 0.3);
+	        acrobatics_g = readDouble("Spout.HUD.Retro.Colors.Acrobatics.GREEN", 0.3);
+	        acrobatics_b = readDouble("Spout.HUD.Retro.Colors.Acrobatics.BLUE", 0.75);
+	        archery_r = readDouble("Spout.HUD.Retro.Colors.Archery.RED", 0.3);
+	        archery_g = readDouble("Spout.HUD.Retro.Colors.Archery.GREEN", 0.3);
+	        archery_b = readDouble("Spout.HUD.Retro.Colors.Archery.BLUE", 0.75);
+	        axes_r = readDouble("Spout.HUD.Retro.Colors.Axes.RED", 0.3);
+	        axes_g = readDouble("Spout.HUD.Retro.Colors.Axes.GREEN", 0.3);
+	        axes_b = readDouble("Spout.HUD.Retro.Colors.Axes.BLUE", 0.75);
+	        excavation_r = readDouble("Spout.HUD.Retro.Colors.Excavation.RED", 0.3);
+	        excavation_g = readDouble("Spout.HUD.Retro.Colors.Excavation.GREEN", 0.3);
+	        excavation_b = readDouble("Spout.HUD.Retro.Colors.Excavation.BLUE", 0.75);
+	        herbalism_r = readDouble("Spout.HUD.Retro.Colors.Herbalism.RED", 0.3);
+	        herbalism_g = readDouble("Spout.HUD.Retro.Colors.Herbalism.GREEN", 0.3);
+	        herbalism_b = readDouble("Spout.HUD.Retro.Colors.Herbalism.BLUE", 0.75);
+	        mining_r = readDouble("Spout.HUD.Retro.Colors.Mining.RED", 0.3);
+	        mining_g = readDouble("Spout.HUD.Retro.Colors.Mining.GREEN", 0.3);
+	        mining_b = readDouble("Spout.HUD.Retro.Colors.Mining.BLUE", 0.75);
+	        repair_r = readDouble("Spout.HUD.Retro.Colors.Repair.RED", 0.3);
+	        repair_g = readDouble("Spout.HUD.Retro.Colors.Repair.GREEN", 0.3);
+	        repair_b = readDouble("Spout.HUD.Retro.Colors.Repair.BLUE", 0.75);
+	        swords_r = readDouble("Spout.HUD.Retro.Colors.Swords.RED", 0.3);
+	        swords_g = readDouble("Spout.HUD.Retro.Colors.Swords.GREEN", 0.3);
+	        swords_b = readDouble("Spout.HUD.Retro.Colors.Swords.BLUE", 0.75);
+	        taming_r = readDouble("Spout.HUD.Retro.Colors.Taming.RED", 0.3);
+	        taming_g = readDouble("Spout.HUD.Retro.Colors.Taming.GREEN", 0.3);
+	        taming_b = readDouble("Spout.HUD.Retro.Colors.Taming.BLUE", 0.75);
+	        unarmed_r = readDouble("Spout.HUD.Retro.Colors.Unarmed.RED", 0.3);
+	        unarmed_g = readDouble("Spout.HUD.Retro.Colors.Unarmed.GREEN", 0.3);
+	        unarmed_b = readDouble("Spout.HUD.Retro.Colors.Unarmed.BLUE", 0.75);
+	        woodcutting_r = readDouble("Spout.HUD.Retro.Colors.Woodcutting.RED", 0.3);
+	        woodcutting_g = readDouble("Spout.HUD.Retro.Colors.Woodcutting.GREEN", 0.3);
+	        woodcutting_b = readDouble("Spout.HUD.Retro.Colors.Woodcutting.BLUE", 0.75);
+	        fishing_r = readDouble("Spout.HUD.Retro.Colors.Fishing.RED", 0.3);
+	        fishing_g = readDouble("Spout.HUD.Retro.Colors.Fishing.GREEN", 0.3);
+	        fishing_b = readDouble("Spout.HUD.Retro.Colors.Fishing.BLUE", 0.75);
+	        
+	        xpborder_r = readDouble("Spout.HUD.Retro.Colors.Border.RED", 0.0);
+	        xpborder_g = readDouble("Spout.HUD.Retro.Colors.Border.GREEN", 0.0);
+	        xpborder_b = readDouble("Spout.HUD.Retro.Colors.Border.BLUE", 0.0);
+	        xpbackground_r = readDouble("Spout.HUD.Retro.Colors.Background.RED", 0.75);
+	        xpbackground_g = readDouble("Spout.HUD.Retro.Colors.Background.GREEN", 0.75);
+	        xpbackground_b = readDouble("Spout.HUD.Retro.Colors.Background.BLUE", 0.75);
+	        
+	        msulphur = readInteger("Experience.Excavation.Sulphur", 30);
+	        mbones = readInteger("Experience.Excavation.Bones", 30);
+	        mbase = readInteger("Experience.Excavation.Base", 40);
+	        mmushroom2 = readInteger("Experience.Excavation.Mushroom", 80);
+	    	mslowsand = readInteger("Experience.Excavation.Slowsand", 80);
+	    	mglowstone2 = readInteger("Experience.Excavation.Glowstone", 80);
+	    	mmusic = readInteger("Experience.Excavation.Music", 3000);
+	    	mdiamond2 = readInteger("Experience.Excavation.Diamond", 1000);
+	    	mapple = readInteger("Experience.Excavation.Apple", 100);
+	    	meggs = readInteger("Experience.Excavation.Eggs", 100);
+	    	mcake = readInteger("Experience.Excavation.Cake", 3000);
+	    	mcocoa = readInteger("Experience.Excavation.Cocoa_Beans", 100);
+	    	mslimeballs = readInteger("Experience.Excavation.Slimeballs", 100);
+	    	mstring = readInteger("Experience.Excavation.String", 200);
+	    	mbucket = readInteger("Experience.Excavation.Bucket", 100);
+	    	mweb = readInteger("Experience.Excavation.Web", 150);
+	    	mwatch = readInteger("Experience.Excavation.Watch", 200);
+	    	
+	        msugar = readInteger("Experience.Herbalism.Sugar_Cane", 30);
+	        mwheat = readInteger("Experience.Herbalism.Wheat", 50);
+	    	mcactus = readInteger("Experience.Herbalism.Cactus", 30);
+	    	mpumpkin = readInteger("Experience.Herbalism.Pumpkin", 550);
+	    	mflower = readInteger("Experience.Herbalism.Flowers", 100);
+	    	mmushroom = readInteger("Experience.Herbalism.Mushrooms", 150);
+	    	mmelon = readInteger("Experience.Herbalism.Melon", 20);
+	    	
+	    	mpine = readInteger("Experience.Woodcutting.Pine", 70);
+	    	mbirch = readInteger("Experience.Woodcutting.Birch", 80);
+	    	mspruce = readInteger("Experience.Woodcutting.Spruce", 90);
+	        
+	        mgold = readInteger("Experience.Mining.Gold", 250);
+	        mdiamond = readInteger("Experience.Mining.Diamond", 750);
+	        miron = readInteger("Experience.Mining.Iron", 250);
+	        mredstone = readInteger("Experience.Mining.Redstone", 150);
+	        mlapis = readInteger("Experience.Mining.lapis", 400);
+	        mobsidian = readInteger("Experience.Mining.Obsidian", 150);
+	        mnetherrack = readInteger("Experience.Mining.Netherrack", 30);
+	        mglowstone = readInteger("Experience.Mining.Glowstone", 30);
+	        mcoal = readInteger("Experience.Mining.Coal", 100);
+	        mstone = readInteger("Experience.Mining.Stone", 30);
+	        msandstone = readInteger("Experience.Mining.Sandstone", 30);
+	        
+	        mfishing = readInteger("Experience.Fishing.Base", 800);
+	        
+	        enableOnlyActivateWhenSneaking = readBoolean("Abilities.Activation.Only_Activate_When_Sneaking", false);
+	        
+	        greenTerraCooldown = readInteger("Abilities.Cooldowns.Green_Terra", 240);
+	    	superBreakerCooldown = readInteger("Abilities.Cooldowns.Super_Breaker", 240);
+	    	gigaDrillBreakerCooldown = readInteger("Abilities.Cooldowns.Giga_Drill_Breaker", 240);
+	    	treeFellerCooldown = readInteger("Abilities.Cooldowns.Tree_Feller", 240);
+	    	berserkCooldown = readInteger("Abilities.Cooldowns.Berserk", 240);
+	    	serratedStrikeCooldown = readInteger("Abilities.Cooldowns.Serrated_Strikes", 240);
+	    	skullSplitterCooldown = readInteger("Abilities.Cooldowns.Skull_Splitter", 240);
+	    	
+	    	MySQLserverName = readString("MySQL.Server.Address", "localhost");
+	    	if(readString("MySQL.Database.User.Password", null) != null)
+	    		MySQLdbPass = readString("MySQL.Database.User.Password", null);
+	    	else
+	    		MySQLdbPass = "";
+	    	
+	    	MySQLdbName = readString("MySQL.Database.Name", "DatabaseName");
+	    	MySQLuserName = readString("MySQL.Database.User.Name", "UserName");
+	    	MySQLtablePrefix = readString("MySQL.Database.TablePrefix", "mcmmo_");
+	    	MySQLport = readInteger("MySQL.Server.Port", 3306);
+	    	useMySQL = readBoolean("MySQL.Enabled", false);
+	    	
+	    	locale = readString("General.Locale", "en_us");
+	    	enableMotd = readBoolean("General.MOTD.Enabled", true);
+	    	enableMySpawn = readBoolean("General.MySpawn.Enabled", true);
+	    	enableRegen = readBoolean("General.HP_Regeneration.Enabled", true);
+	    	
+	    	enableCobbleToMossy = readBoolean("Skills.Herbalism.Green_Thumb.Cobble_To_Mossy", true);
+	    	
+	    	xpGainMultiplier = readInteger("Experience.Gains.Multiplier.Global", 1);
+	    	toolsLoseDurabilityFromAbilities = readBoolean("Abilities.Tools.Durability_Loss_Enabled", true);
+	    	abilityDurabilityLoss = readInteger("Abilities.Tools.Durability_Loss", 2);
+	    	
+	    	feathersConsumedByChimaeraWing = readInteger("Items.Chimaera_Wing.Feather_Cost", 10);
+	    	chimaeraId = readInteger("Items.Chimaera_Wing.Item_ID", 288);
+	    	chimaeraWingEnable = readBoolean("Items.Chimaera_Wing.Enabled", true);
+	    	
+	    	pvpxp = readBoolean("XP.PVP.Rewards", true);
+	    	pvpxprewardmodifier = readDouble("Experience.Gains.Multiplier.PVP", 1.0);
+	    	miningrequirespickaxe = readBoolean("Skills.Mining.Requires_Pickaxe", true);
+	    	excavationRequiresShovel = readBoolean("Skills.Excavation.Requires_Shovel", true);
+	    	woodcuttingrequiresaxe = readBoolean("Skills.Woodcutting.Requires_Axe", true);
+	    	repairdiamondlevel = readInteger("Skills.Repair.Diamond.Level_Required", 50);
+
+	    	sorceryxpmodifier = readDouble("Experience.Formula.Multiplier.Sorcery", 1.0);
+	    	tamingxpmodifier = readDouble("Experience.Formula.Multiplier.Taming", 1.0);
+	    	miningxpmodifier = readDouble("Experience.Formula.Multiplier.Mining", 1.0);
+	    	repairxpmodifier = readDouble("Experience.Formula.Multiplier.Repair", 1.0);
+	    	woodcuttingxpmodifier = readDouble("Experience.Formula.Multiplier.Woodcutting", 1.0);
+	    	unarmedxpmodifier = readDouble("Experience.Formula.Multiplier.Unarmed", 1.0);
+	    	herbalismxpmodifier = readDouble("Experience.Formula.Multiplier.Herbalism", 1.0);
+	    	excavationxpmodifier = readDouble("Experience.Formula.Multiplier.Excavation", 1.0);
+	    	archeryxpmodifier = readDouble("Experience.Formula.Multiplier.Archery", 1.0);
+	    	swordsxpmodifier = readDouble("Experience.Formula.Multiplier.Swords", 1.0);
+	    	axesxpmodifier = readDouble("Experience.Formula.Multiplier.Axes", 1.0);
+	    	acrobaticsxpmodifier = readDouble("Experience.Formula.Multiplier.Acrobatics", 1.0);
+
+	    	anvilmessages = readBoolean("Skills.Repair.Anvil_Messages", true);
+	    	
+	        rGold =  readInteger("Skills.Repair.Gold.ID", 266);
+	        nGold =  readString("Skills.Repair.Gold.Name", "Gold Bars");      
+	        rStone =  readInteger("Skills.Repair.Stone.ID", 4);
+	        nStone =  readString("Skills.Repair.Stone.Name", "Cobblestone");     
+	        rWood =  readInteger("Skills.Repair.Wood.ID", 5);
+	        nWood =  readString("Skills.Repair.Wood.Name", "Wood Planks");        
+	        rDiamond =   readInteger("Skills.Repair.Diamond.ID", 264);
+	        nDiamond =  readString("Skills.Repair.Diamond.Name", "Diamond");          
+	        rIron =   readInteger("Skills.Repair.Iron.ID", 265);
+	        nIron =  readString("Skills.Repair.Iron.Name", "Iron Bars");  
+
+	    	cocoabeans = readBoolean("Excavation.Drops.Cocoa_Beans", true);
+	    	mushrooms = readBoolean("Excavation.Drops.Mushrooms", true);
+	    	glowstone = readBoolean("Excavation.Drops.Glowstone", true);
+	    	eggs = readBoolean("Excavation.Drops.Eggs", true);
+	    	apples = readBoolean("Excavation.Drops.Apples", true);
+	    	cake = readBoolean("Excavation.Drops.Cake", true);
+	    	music = readBoolean("Excavation.Drops.Music", true);
+	    	diamond = readBoolean("Excavation.Drops.Diamond", true);
+	    	slowsand = readBoolean("Excavation.Drops.Slowsand", true);
+	    	sulphur = readBoolean("Excavation.Drops.Sulphur", true);
+	    	netherrack = readBoolean("Excavation.Drops.Netherrack", true);
+	    	bones = readBoolean("Excavation.Drops.Bones", true);
+	    	slimeballs = readBoolean("Excavation.Drops.Slimeballs", true);
+	    	watch = readBoolean("Excavation.Drops.Watch", true);
+	    	string = readBoolean("Excavation.Drops.String", true);
+	    	bucket = readBoolean("Excavation.Drops.Bucket", true);
+	    	web = readBoolean("Excavation.Drops.Web", true);
+	    	
+	    	xprate = readString("Commands.xprate.Name", "xprate");
+	    	xprateEnable = readBoolean("Commands.xprate.Enabled", true);
+	    	
+	    	mctop = readString("Commands.mctop.Name", "mctop");
+	    	mctopEnable = readBoolean("Commands.mctop.Enabled", true);
+	    	
+	    	addxp = readString("Commands.addxp.Name", "addxp");
+	    	addxpEnable = readBoolean("Commands.addxp.Enabled", true);
+	    	
+	    	mcability = readString("Commands.mcability.Name", "mcability");
+	    	mcabilityEnable = readBoolean("Commands.mcability.Enabled", true);
+	    	
+	    	mcrefresh = readString("Commands.mcrefresh.Name", "mcrefresh");
+	    	mcrefreshEnable = readBoolean("Commands.mcrefresh.Enabled", true);
+	    	
+	    	mcmmo = readString("Commands.mcmmo.Name", "mcmmo");
+	    	mcmmoEnable = readBoolean("Commands.mcmmo.Enabled", true);
+	    	
+	    	mcc = readString("Commands.mcc.Name", "mcc");
+	    	mccEnable = readBoolean("Commands.mcc.Enabled", true);
+	    	
+	    	mcgod = readString("Commands.mcgod.Name", "mcgod");
+	    	mcgodEnable = readBoolean("Commands.mcgod.Enabled", true);
+	    	
+	    	stats = readString("Commands.stats.Name", "stats");
+	    	statsEnable = readBoolean("Commands.stats.Enabled", true);
+	    	
+	    	mmoedit = readString("Commands.mmoedit.Name", "mmoedit");
+	    	mmoeditEnable = readBoolean("Commands.mmoedit.Enabled", true);
+	    	
+	    	ptp = readString("Commands.ptp.Name", "ptp");
+	    	ptpEnable = readBoolean("Commands.ptp.Enabled", true);
+	    	
+	    	party = readString("Commands.party.Name", "party");
+	    	partyEnable = readBoolean("Commands.party.Enabled", true);
+	    	
+	    	myspawn = readString("Commands.myspawn.Name", "myspawn");
+	    	myspawnEnable = readBoolean("Commands.myspawn.Enabled", true);
+	    	
+	    	whois = readString("Commands.whois.Name", "whois");
+	    	whoisEnable = readBoolean("Commands.whois.Enabled", true);
+	    	
+	    	invite = readString("Commands.invite.Name", "invite");
+	    	inviteEnable = readBoolean("Commands.invite.Enabled", true);
+	    	
+	    	accept = readString("Commands.accept.Name", "accept");
+	    	acceptEnable = readBoolean("Commands.accept.Enabled", true);
+	    	
+	    	clearmyspawn = readString("Commands.clearmyspawn.Name", "clearmyspawn");
+	    	clearmyspawnEnable = readBoolean("Commands.clearmyspawn.Enabled", true);
+	    	
+	    	xplockEnable = readBoolean("Commands.xplock.Enabled", true);
+	    	xplock = readString("Commands.xplock.Name", "xplock");
+	        }
 	}

+ 89 - 89
src/com/gmail/nossr50/config/Misc.java → src/main/java/com/gmail/nossr50/config/Misc.java

@@ -1,90 +1,90 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.config;
-
-import java.util.*;
-import java.util.logging.Logger;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-
-import com.gmail.nossr50.mcMMO;
-
-public class Misc 
-{
-    String location = "mcmmo.properties";
-    
-    protected static final Logger log = Logger.getLogger("Minecraft");
-    
-    public ArrayList<Entity> mobSpawnerList = new ArrayList<Entity>();
-    public ArrayList<Block> blockWatchList = new ArrayList<Block>();
-    public ArrayList<Block> treeFeller = new ArrayList<Block>();
-    public HashMap<Entity, Integer> arrowTracker = new HashMap<Entity, Integer>();
-    public ArrayList<LivingEntity> bleedTracker = new ArrayList<LivingEntity>();
-    mcMMO plugin = null;
-    
-    //BLEED QUE STUFF
-    public LivingEntity[] bleedQue = new LivingEntity[20];
-    public int bleedQuePos = 0;
-    public LivingEntity[] bleedRemovalQue = new LivingEntity[20];
-    public int bleedRemovalQuePos = 0;
-
-    public Misc(mcMMO mcMMO) 
-    {
-		plugin = mcMMO;
-	}
-    
-    public void addToBleedQue(LivingEntity entity)
-    {
-    	//Assign entity to empty position
-    	bleedQue[bleedQuePos] = entity;
-    	
-    	//Move position up by 1 increment
-    	bleedQuePos++;
-    	
-    	//Check if array is full
-    	if(bleedQuePos >= bleedQue.length)
-    	{
-    		//Create new temporary array
-    		LivingEntity[] temp = new LivingEntity[bleedQue.length*2];
-    		//Copy data from bleedQue to temporary array
-    		System.arraycopy(bleedQue, 0, temp, 0, bleedQue.length);
-    		//Point bleedQue to new array
-    		bleedQue = temp;
-    	}
-    }
-    
-    public void addToBleedRemovalQue(LivingEntity entity)
-    {
-    	//Assign entity to empty position
-    	bleedRemovalQue[bleedRemovalQuePos] = entity;
-    	
-    	//Move position up by 1 increment
-    	bleedRemovalQuePos++;
-    	
-    	//Check if array is full
-    	if(bleedRemovalQuePos >= bleedRemovalQue.length)
-    	{
-    		//Create new temporary array
-    		LivingEntity[] temp = new LivingEntity[bleedRemovalQue.length*2];
-    		//Copy data from bleedRemovalQue to temporary array
-    		System.arraycopy(bleedRemovalQue, 0, temp, 0, bleedRemovalQue.length);
-    		//Point bleedRemovalQue to new array
-    		bleedRemovalQue = temp;
-    	}
-    }
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.config;
+
+import java.util.*;
+import java.util.logging.Logger;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+
+import com.gmail.nossr50.mcMMO;
+
+public class Misc 
+{
+    String location = "mcmmo.properties";
+    
+    protected static final Logger log = Logger.getLogger("Minecraft");
+    
+    public ArrayList<Entity> mobSpawnerList = new ArrayList<Entity>();
+    public ArrayList<Block> blockWatchList = new ArrayList<Block>();
+    public ArrayList<Block> treeFeller = new ArrayList<Block>();
+    public HashMap<Entity, Integer> arrowTracker = new HashMap<Entity, Integer>();
+    public ArrayList<LivingEntity> bleedTracker = new ArrayList<LivingEntity>();
+    mcMMO plugin = null;
+    
+    //BLEED QUE STUFF
+    public LivingEntity[] bleedQue = new LivingEntity[20];
+    public int bleedQuePos = 0;
+    public LivingEntity[] bleedRemovalQue = new LivingEntity[20];
+    public int bleedRemovalQuePos = 0;
+
+    public Misc(mcMMO mcMMO) 
+    {
+		plugin = mcMMO;
+	}
+    
+    public void addToBleedQue(LivingEntity entity)
+    {
+    	//Assign entity to empty position
+    	bleedQue[bleedQuePos] = entity;
+    	
+    	//Move position up by 1 increment
+    	bleedQuePos++;
+    	
+    	//Check if array is full
+    	if(bleedQuePos >= bleedQue.length)
+    	{
+    		//Create new temporary array
+    		LivingEntity[] temp = new LivingEntity[bleedQue.length*2];
+    		//Copy data from bleedQue to temporary array
+    		System.arraycopy(bleedQue, 0, temp, 0, bleedQue.length);
+    		//Point bleedQue to new array
+    		bleedQue = temp;
+    	}
+    }
+    
+    public void addToBleedRemovalQue(LivingEntity entity)
+    {
+    	//Assign entity to empty position
+    	bleedRemovalQue[bleedRemovalQuePos] = entity;
+    	
+    	//Move position up by 1 increment
+    	bleedRemovalQuePos++;
+    	
+    	//Check if array is full
+    	if(bleedRemovalQuePos >= bleedRemovalQue.length)
+    	{
+    		//Create new temporary array
+    		LivingEntity[] temp = new LivingEntity[bleedRemovalQue.length*2];
+    		//Copy data from bleedRemovalQue to temporary array
+    		System.arraycopy(bleedRemovalQue, 0, temp, 0, bleedRemovalQue.length);
+    		//Point bleedRemovalQue to new array
+    		bleedRemovalQue = temp;
+    	}
+    }
 }

+ 28 - 28
src/com/gmail/nossr50/datatypes/FakeBlockBreakEvent.java → src/main/java/com/gmail/nossr50/datatypes/FakeBlockBreakEvent.java

@@ -1,29 +1,29 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockBreakEvent;
-
-public class FakeBlockBreakEvent extends BlockBreakEvent {
-	private static final long serialVersionUID = 1L;
-
-	public FakeBlockBreakEvent(Block theBlock, Player player) {
-		super(theBlock, player);
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.event.block.BlockBreakEvent;
+
+public class FakeBlockBreakEvent extends BlockBreakEvent {
+	private static final long serialVersionUID = 1L;
+
+	public FakeBlockBreakEvent(Block theBlock, Player player) {
+		super(theBlock, player);
+	}
 }

+ 25 - 25
src/com/gmail/nossr50/datatypes/HUDType.java → src/main/java/com/gmail/nossr50/datatypes/HUDType.java

@@ -1,25 +1,25 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-public enum HUDType 
-{
-	DISABLED,
-	STANDARD,
-	SMALL,
-	RETRO;
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+public enum HUDType 
+{
+	DISABLED,
+	STANDARD,
+	SMALL,
+	RETRO;
+}

+ 286 - 286
src/com/gmail/nossr50/datatypes/HUDmmo.java → src/main/java/com/gmail/nossr50/datatypes/HUDmmo.java

@@ -1,287 +1,287 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.getspout.spoutapi.SpoutManager;
-import org.getspout.spoutapi.gui.Color;
-import org.getspout.spoutapi.gui.GenericGradient;
-import org.getspout.spoutapi.gui.GenericTexture;
-import org.getspout.spoutapi.gui.RenderPriority;
-import org.getspout.spoutapi.gui.Widget;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class HUDmmo 
-{
-	int center_x = 427/2;
-	int center_y = 240/2;
-	
-	String playerName = null;
-	Widget xpbar = null;
-	GenericGradient xpfill = null;
-	GenericGradient xpbg = null;
-	GenericGradient xpicon_bg = null;
-	GenericGradient xpicon_border = null;
-	GenericTexture xpicon = null;
-	mcMMO plugin = (mcMMO) Bukkit.getServer().getPluginManager().getPlugin("mcMMO");
-	
-	public HUDmmo(Player player)
-	{
-		playerName = player.getName();
-		initializeHUD(player);
-	}
-	
-	public void initializeHUD(Player player)
-	{
-		//PlayerProfile PP = Users.getProfile(player);
-		HUDType type = Users.getProfile(player).getHUDType();
-		
-		//if(LoadProperties.partybar && PP.getPartyHUD())
-			//mmoHelper.initialize(SpoutManager.getPlayer(player), plugin); //PARTY HUD
-		
-		switch(type)
-		{
-			case RETRO:
-			{
-				initializeXpBarDisplayRetro(SpoutManager.getPlayer(player));
-				break;
-			}
-			case STANDARD:
-			{
-				initializeXpBarDisplayStandard(SpoutManager.getPlayer(player));
-				break;
-			}
-			case SMALL:
-			{
-				initializeXpBarDisplaySmall(SpoutManager.getPlayer(player));
-				break;
-			}
-			case DISABLED:
-			{
-				//Do nothing.. :)
-			}
-		}
-	}
-	
-	public void updateXpBarDisplay(HUDType type, Player player)
-	{
-		switch(type)
-		{
-		case RETRO:
-		{
-			updateXpBarRetro(player, Users.getProfile(player));
-			break;
-		}
-		case STANDARD:
-		{
-			updateXpBarStandard(player, Users.getProfile(player));
-			break;
-		}
-		case SMALL:
-		{
-			updateXpBarStandard(player, Users.getProfile(player));
-			break;
-		}
-		case DISABLED:
-		{
-			//Do nothing.. :)
-		}
-		}
-	}
-	
-	public void resetHUD()
-	{
-		SpoutPlayer sPlayer = SpoutStuff.getSpoutPlayer(playerName);
-		//PlayerProfile PP = Users.getProfile(sPlayer);
-		if(sPlayer != null)
-		{
-			sPlayer.getMainScreen().removeWidgets(plugin);
-			
-			//Reset the objects
-			xpbar = null;
-			xpfill = null;
-			xpbg = null;
-			xpicon = null;
-			
-			//if(LoadProperties.partybar && PP.getPartyHUD())
-				//mmoHelper.initialize(sPlayer, plugin);
-			
-			sPlayer.getMainScreen().setDirty(true);
-		}
-	}
-	
-	private void initializeXpBarDisplayRetro(SpoutPlayer sPlayer)
-	{
-		Color border = new Color((float)LoadProperties.xpborder_r, (float)LoadProperties.xpborder_g, (float)LoadProperties.xpborder_b, 1f);
-		Color green = new Color(0, 1f, 0, 1f);
-		Color background = new Color((float)LoadProperties.xpbackground_r, (float)LoadProperties.xpbackground_g, (float)LoadProperties.xpbackground_b, 1f);
-		Color darkbg = new Color(0.2f, 0.2f, 0.2f, 1f);
-		
-		xpicon = new GenericTexture();
-		xpbar = new GenericGradient();
-		xpfill = new GenericGradient();
-		xpbg = new GenericGradient();
-		
-		xpicon_bg = new GenericGradient();
-		xpicon_border = new GenericGradient();
-		
-		xpicon_bg.setBottomColor(darkbg).setTopColor(darkbg).setWidth(4).setHeight(4).setPriority(RenderPriority.High).setX(142).setY(10).setDirty(true);
-		xpicon_border.setBottomColor(border).setTopColor(border).setWidth(6).setHeight(6).setPriority(RenderPriority.Highest).setX(141).setY(9).setDirty(true);
-		
-		xpicon.setWidth(6).setHeight(6).setX(141).setY(9).setPriority(RenderPriority.Normal).setDirty(true);
-		xpicon.setUrl("Icon_r.png");
-		
-		xpbar.setWidth(128).setHeight(4).setX(149).setY(10);
-		((GenericGradient) xpbar).setBottomColor(border).setTopColor(border).setPriority(RenderPriority.Highest).setDirty(true);
-		
-		xpfill.setWidth(0).setHeight(2).setX(150).setY(11);
-		xpfill.setBottomColor(green).setTopColor(green).setPriority(RenderPriority.Lowest).setDirty(true);
-		
-		xpbg.setWidth(126).setHeight(2).setX(150).setY(11);
-		xpbg.setBottomColor(background).setTopColor(background).setPriority(RenderPriority.Low).setDirty(true);
-		
-		if(LoadProperties.xpbar)
-		{
-			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpbar);
-			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpfill);
-			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpbg);
-			if(LoadProperties.xpicon)
-			{
-				sPlayer.getMainScreen().attachWidget(plugin, (GenericTexture)xpicon);
-				sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpicon_bg);
-			}
-			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpicon_border);
-		}
-		
-		sPlayer.getMainScreen().setDirty(true);
-	}
-	
-	private void initializeXpBarDisplayStandard(SpoutPlayer sPlayer)
-	{
-		//Setup xp bar
-		xpbar = new GenericTexture();
-		
-		if(LoadProperties.xpbar && LoadProperties.xpicon)
-		{
-			xpicon = new GenericTexture();
-			
-			xpicon.setUrl("Icon.png");
-			
-			xpicon.setHeight(16).setWidth(32).setX(LoadProperties.xpicon_x).setY(LoadProperties.xpicon_y);
-			
-			xpicon.setDirty(true);
-			
-			sPlayer.getMainScreen().attachWidget(plugin, xpicon);
-		}
-		
-		if(LoadProperties.xpbar)
-		{
-			((GenericTexture)xpbar).setUrl("xpbar_inc000.png");
-			xpbar.setX(LoadProperties.xpbar_x).setY(LoadProperties.xpbar_y).setHeight(8).setWidth(256);
-		
-			sPlayer.getMainScreen().attachWidget(plugin, xpbar);
-		}
-		sPlayer.getMainScreen().setDirty(true);
-	}
-	
-	private void initializeXpBarDisplaySmall(SpoutPlayer sPlayer)
-	{
-		//Setup xp bar
-		xpbar = new GenericTexture();
-		
-		if(LoadProperties.xpbar && LoadProperties.xpicon)
-		{
-			xpicon = new GenericTexture();
-			
-			xpicon.setUrl("Icon.png");
-			
-			xpicon.setHeight(8).setWidth(16).setX(center_x-(8+64)).setY(LoadProperties.xpicon_y+2);
-			
-			xpicon.setDirty(true);
-			
-			sPlayer.getMainScreen().attachWidget(plugin, xpicon);
-		}
-		
-		if(LoadProperties.xpbar)
-		{
-			((GenericTexture)xpbar).setUrl("xpbar_inc000.png");
-			xpbar.setX(center_x-64).setY(LoadProperties.xpbar_y).setHeight(4).setWidth(128);
-		
-			sPlayer.getMainScreen().attachWidget(plugin, xpbar);
-		}
-		
-		sPlayer.getMainScreen().setDirty(true);
-	}
-	
-	private void updateXpBarStandard(Player player, PlayerProfile PP)
-	{
-		if(!LoadProperties.xpbar)
-			return;
-		
-		SkillType theType = null;
-		
-		if(PP.getXpBarLocked())
-			theType=PP.getSkillLock();
-		else
-			theType=PP.getLastGained();
-		
-		if(theType == null)
-			return;
-		
-		((GenericTexture) xpicon).setUrl(m.getCapitalized(theType.toString())+".png");
-		xpicon.setDirty(true);
-
-		((GenericTexture) xpbar).setUrl(SpoutStuff.getUrlBar(SpoutStuff.getXpInc(PP.getSkillXpLevel(theType), PP.getXpToLevel(theType), HUDType.STANDARD)));
-		xpbar.setDirty(true);
-		
-		SpoutManager.getPlayer(player).getMainScreen().setDirty(true);
-	}
-	
-	private void updateXpBarRetro(Player player, PlayerProfile PP)
-	{
-		if(!LoadProperties.xpbar)
-			return;
-		SkillType theType = null;
-		
-		if(PP.getXpBarLocked() && PP.getSkillLock() != null)
-			theType=PP.getSkillLock();
-		else
-			theType=PP.getLastGained();
-		
-		if(theType == null)
-			return;
-		
-		Color color = SpoutStuff.getRetroColor(theType);
-		
-		if(xpicon != null && theType != null)
-			xpicon.setUrl(m.getCapitalized(theType.toString())+"_r.png");
-		
-		if(theType != null)
-			xpfill.setBottomColor(color).setTopColor(color).setWidth(SpoutStuff.getXpInc(PP.getSkillXpLevel(theType), PP.getXpToLevel(theType), HUDType.RETRO)).setDirty(true);
-		else
-			System.out.println("theType was null!");
-		
-		SpoutManager.getPlayer(player).getMainScreen().setDirty(true);
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.getspout.spoutapi.SpoutManager;
+import org.getspout.spoutapi.gui.Color;
+import org.getspout.spoutapi.gui.GenericGradient;
+import org.getspout.spoutapi.gui.GenericTexture;
+import org.getspout.spoutapi.gui.RenderPriority;
+import org.getspout.spoutapi.gui.Widget;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class HUDmmo 
+{
+	int center_x = 427/2;
+	int center_y = 240/2;
+	
+	String playerName = null;
+	Widget xpbar = null;
+	GenericGradient xpfill = null;
+	GenericGradient xpbg = null;
+	GenericGradient xpicon_bg = null;
+	GenericGradient xpicon_border = null;
+	GenericTexture xpicon = null;
+	mcMMO plugin = (mcMMO) Bukkit.getServer().getPluginManager().getPlugin("mcMMO");
+	
+	public HUDmmo(Player player)
+	{
+		playerName = player.getName();
+		initializeHUD(player);
+	}
+	
+	public void initializeHUD(Player player)
+	{
+		//PlayerProfile PP = Users.getProfile(player);
+		HUDType type = Users.getProfile(player).getHUDType();
+		
+		//if(LoadProperties.partybar && PP.getPartyHUD())
+			//mmoHelper.initialize(SpoutManager.getPlayer(player), plugin); //PARTY HUD
+		
+		switch(type)
+		{
+			case RETRO:
+			{
+				initializeXpBarDisplayRetro(SpoutManager.getPlayer(player));
+				break;
+			}
+			case STANDARD:
+			{
+				initializeXpBarDisplayStandard(SpoutManager.getPlayer(player));
+				break;
+			}
+			case SMALL:
+			{
+				initializeXpBarDisplaySmall(SpoutManager.getPlayer(player));
+				break;
+			}
+			case DISABLED:
+			{
+				//Do nothing.. :)
+			}
+		}
+	}
+	
+	public void updateXpBarDisplay(HUDType type, Player player)
+	{
+		switch(type)
+		{
+		case RETRO:
+		{
+			updateXpBarRetro(player, Users.getProfile(player));
+			break;
+		}
+		case STANDARD:
+		{
+			updateXpBarStandard(player, Users.getProfile(player));
+			break;
+		}
+		case SMALL:
+		{
+			updateXpBarStandard(player, Users.getProfile(player));
+			break;
+		}
+		case DISABLED:
+		{
+			//Do nothing.. :)
+		}
+		}
+	}
+	
+	public void resetHUD()
+	{
+		SpoutPlayer sPlayer = SpoutStuff.getSpoutPlayer(playerName);
+		//PlayerProfile PP = Users.getProfile(sPlayer);
+		if(sPlayer != null)
+		{
+			sPlayer.getMainScreen().removeWidgets(plugin);
+			
+			//Reset the objects
+			xpbar = null;
+			xpfill = null;
+			xpbg = null;
+			xpicon = null;
+			
+			//if(LoadProperties.partybar && PP.getPartyHUD())
+				//mmoHelper.initialize(sPlayer, plugin);
+			
+			sPlayer.getMainScreen().setDirty(true);
+		}
+	}
+	
+	private void initializeXpBarDisplayRetro(SpoutPlayer sPlayer)
+	{
+		Color border = new Color((float)LoadProperties.xpborder_r, (float)LoadProperties.xpborder_g, (float)LoadProperties.xpborder_b, 1f);
+		Color green = new Color(0, 1f, 0, 1f);
+		Color background = new Color((float)LoadProperties.xpbackground_r, (float)LoadProperties.xpbackground_g, (float)LoadProperties.xpbackground_b, 1f);
+		Color darkbg = new Color(0.2f, 0.2f, 0.2f, 1f);
+		
+		xpicon = new GenericTexture();
+		xpbar = new GenericGradient();
+		xpfill = new GenericGradient();
+		xpbg = new GenericGradient();
+		
+		xpicon_bg = new GenericGradient();
+		xpicon_border = new GenericGradient();
+		
+		xpicon_bg.setBottomColor(darkbg).setTopColor(darkbg).setWidth(4).setHeight(4).setPriority(RenderPriority.High).setX(142).setY(10).setDirty(true);
+		xpicon_border.setBottomColor(border).setTopColor(border).setWidth(6).setHeight(6).setPriority(RenderPriority.Highest).setX(141).setY(9).setDirty(true);
+		
+		xpicon.setWidth(6).setHeight(6).setX(141).setY(9).setPriority(RenderPriority.Normal).setDirty(true);
+		xpicon.setUrl("Icon_r.png");
+		
+		xpbar.setWidth(128).setHeight(4).setX(149).setY(10);
+		((GenericGradient) xpbar).setBottomColor(border).setTopColor(border).setPriority(RenderPriority.Highest).setDirty(true);
+		
+		xpfill.setWidth(0).setHeight(2).setX(150).setY(11);
+		xpfill.setBottomColor(green).setTopColor(green).setPriority(RenderPriority.Lowest).setDirty(true);
+		
+		xpbg.setWidth(126).setHeight(2).setX(150).setY(11);
+		xpbg.setBottomColor(background).setTopColor(background).setPriority(RenderPriority.Low).setDirty(true);
+		
+		if(LoadProperties.xpbar)
+		{
+			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpbar);
+			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpfill);
+			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpbg);
+			if(LoadProperties.xpicon)
+			{
+				sPlayer.getMainScreen().attachWidget(plugin, (GenericTexture)xpicon);
+				sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpicon_bg);
+			}
+			sPlayer.getMainScreen().attachWidget(plugin, (GenericGradient)xpicon_border);
+		}
+		
+		sPlayer.getMainScreen().setDirty(true);
+	}
+	
+	private void initializeXpBarDisplayStandard(SpoutPlayer sPlayer)
+	{
+		//Setup xp bar
+		xpbar = new GenericTexture();
+		
+		if(LoadProperties.xpbar && LoadProperties.xpicon)
+		{
+			xpicon = new GenericTexture();
+			
+			xpicon.setUrl("Icon.png");
+			
+			xpicon.setHeight(16).setWidth(32).setX(LoadProperties.xpicon_x).setY(LoadProperties.xpicon_y);
+			
+			xpicon.setDirty(true);
+			
+			sPlayer.getMainScreen().attachWidget(plugin, xpicon);
+		}
+		
+		if(LoadProperties.xpbar)
+		{
+			((GenericTexture)xpbar).setUrl("xpbar_inc000.png");
+			xpbar.setX(LoadProperties.xpbar_x).setY(LoadProperties.xpbar_y).setHeight(8).setWidth(256);
+		
+			sPlayer.getMainScreen().attachWidget(plugin, xpbar);
+		}
+		sPlayer.getMainScreen().setDirty(true);
+	}
+	
+	private void initializeXpBarDisplaySmall(SpoutPlayer sPlayer)
+	{
+		//Setup xp bar
+		xpbar = new GenericTexture();
+		
+		if(LoadProperties.xpbar && LoadProperties.xpicon)
+		{
+			xpicon = new GenericTexture();
+			
+			xpicon.setUrl("Icon.png");
+			
+			xpicon.setHeight(8).setWidth(16).setX(center_x-(8+64)).setY(LoadProperties.xpicon_y+2);
+			
+			xpicon.setDirty(true);
+			
+			sPlayer.getMainScreen().attachWidget(plugin, xpicon);
+		}
+		
+		if(LoadProperties.xpbar)
+		{
+			((GenericTexture)xpbar).setUrl("xpbar_inc000.png");
+			xpbar.setX(center_x-64).setY(LoadProperties.xpbar_y).setHeight(4).setWidth(128);
+		
+			sPlayer.getMainScreen().attachWidget(plugin, xpbar);
+		}
+		
+		sPlayer.getMainScreen().setDirty(true);
+	}
+	
+	private void updateXpBarStandard(Player player, PlayerProfile PP)
+	{
+		if(!LoadProperties.xpbar)
+			return;
+		
+		SkillType theType = null;
+		
+		if(PP.getXpBarLocked())
+			theType=PP.getSkillLock();
+		else
+			theType=PP.getLastGained();
+		
+		if(theType == null)
+			return;
+		
+		((GenericTexture) xpicon).setUrl(m.getCapitalized(theType.toString())+".png");
+		xpicon.setDirty(true);
+
+		((GenericTexture) xpbar).setUrl(SpoutStuff.getUrlBar(SpoutStuff.getXpInc(PP.getSkillXpLevel(theType), PP.getXpToLevel(theType), HUDType.STANDARD)));
+		xpbar.setDirty(true);
+		
+		SpoutManager.getPlayer(player).getMainScreen().setDirty(true);
+	}
+	
+	private void updateXpBarRetro(Player player, PlayerProfile PP)
+	{
+		if(!LoadProperties.xpbar)
+			return;
+		SkillType theType = null;
+		
+		if(PP.getXpBarLocked() && PP.getSkillLock() != null)
+			theType=PP.getSkillLock();
+		else
+			theType=PP.getLastGained();
+		
+		if(theType == null)
+			return;
+		
+		Color color = SpoutStuff.getRetroColor(theType);
+		
+		if(xpicon != null && theType != null)
+			xpicon.setUrl(m.getCapitalized(theType.toString())+"_r.png");
+		
+		if(theType != null)
+			xpfill.setBottomColor(color).setTopColor(color).setWidth(SpoutStuff.getXpInc(PP.getSkillXpLevel(theType), PP.getXpToLevel(theType), HUDType.RETRO)).setDirty(true);
+		else
+			System.out.println("theType was null!");
+		
+		SpoutManager.getPlayer(player).getMainScreen().setDirty(true);
+	}
 }

+ 1236 - 1236
src/com/gmail/nossr50/datatypes/PlayerProfile.java → src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java

@@ -1,1236 +1,1236 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.GameMode;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-
-
-
-public class PlayerProfile
-{
-    protected final Logger log = Logger.getLogger("Minecraft");
-    
-    //HUD
-    private HUDType hud;
-    
-    //MISC
-	private String party, myspawn, myspawnworld, invite;
-	
-	//TOGGLES
-	private boolean partyhud = true, spoutcraft = false, filling = false, xpbarlocked = false, placedAnvil = false, partyChatMode = false, adminChatMode = false, godMode = false, greenTerraMode, partyChatOnly = false, greenTerraInformed = true, berserkInformed = true, skullSplitterInformed = true, gigaDrillBreakerInformed = true, 
-	superBreakerInformed = true, serratedStrikesInformed = true, treeFellerInformed = true, dead, abilityuse = true, treeFellerMode, superBreakerMode, gigaDrillBreakerMode, 
-	serratedStrikesMode, hoePreparationMode = false, shovelPreparationMode = false, swordsPreparationMode = false, fistsPreparationMode = false, pickaxePreparationMode = false, axePreparationMode = false, skullSplitterMode, berserkMode;
-	
-	//TIMESTAMPS
-	//ATS = (Time of) Activation Time Stamp
-	//DATS = (Time of) Deactivation Time Stamp
-	private int xpGainATS = 0, recentlyHurt = 0, berserkATS = 0, berserkDATS = 0, gigaDrillBreakerATS = 0, gigaDrillBreakerDATS = 0,
-	respawnATS = 0, mySpawnATS = 0, greenTerraATS = 0, greenTerraDATS = 0, superBreakerATS = 0, superBreakerDATS = 0, serratedStrikesATS = 0, serratedStrikesDATS = 0, treeFellerATS = 0, treeFellerDATS = 0, 
-	skullSplitterATS = 0, skullSplitterDATS = 0, hoePreparationATS = 0, axePreparationATS = 0, pickaxePreparationATS = 0, fistsPreparationATS = 0, shovelPreparationATS = 0, swordsPreparationATS = 0;
-	
-	private SkillType lastgained = null, skillLock = null;
-	
-	//MySQL STUFF
-	private int xpbarinc=0, lastlogin=0, userid = 0, bleedticks = 0;
-	
-	//MAGIC STUFF
-	private int mana = 0;
-	private int greenDyeCycleSel = 0, greenDyeCycle = 0, blueDyeCycle = 0, blueDyeCycleSel = 0;
-	public boolean dyeChanged = false;
-	
-	private String playername;
-	
-	//Time to HashMap this shiz
-	HashMap<SkillType, Integer> skills = new HashMap<SkillType, Integer>(); //Skills and XP
-	HashMap<SkillType, Integer> skillsXp = new HashMap<SkillType, Integer>(); //Skills and XP
-	
-    String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
-        
-	public PlayerProfile(Player player)
-	{
-		hud = LoadProperties.defaulthud;
-		//Setup the HashMap for the skills
-		for(SkillType skillType : SkillType.values())
-		{
-			if(skillType != SkillType.ALL)
-			{
-				skills.put(skillType, 0);
-				skillsXp.put(skillType, 0);
-			}
-		}
-		
-		playername = player.getName();
-		if (LoadProperties.useMySQL) 
-		{
-			if(!loadMySQL(player)) {
-				addMySQLPlayer(player);
-				loadMySQL(player);//This is probably not needed anymore, could just delete
-			}
-		} else {
-			if(!load()) { addPlayer(); }			
-		}
-		lastlogin = ((Long) (System.currentTimeMillis()/1000)).intValue();
-	}
-	public int getLastLogin()
-	{
-		return lastlogin;
-	}
-	public int getMySQLuserId()
-	{
-		return userid;
-	}
-	
-	public boolean loadMySQL(Player p) 
-	{
-		Integer id = 0;
-		id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + p.getName() + "'");
-		if(id == 0)
-			return false;
-		this.userid = id;
-		if (id > 0) {
-			HashMap<Integer, ArrayList<String>> huds = mcMMO.database.Read("SELECT hudtype FROM "+LoadProperties.MySQLtablePrefix+"huds WHERE user_id = " + id);
-			if(huds.get(1) == null)
-			{
-				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"huds (user_id) VALUES ("+id+")");
-			} else {
-				if(huds.get(1).get(0) != null)
-				{
-				for(HUDType x : HUDType.values())
-				{
-					if(x.toString().equals(huds.get(1).get(0)))
-					{
-						hud = x;
-					}
-				}
-				} else {
-					hud = LoadProperties.defaulthud;
-				}
-			}
-			HashMap<Integer, ArrayList<String>> users = mcMMO.database.Read("SELECT lastlogin, party FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = " + id);
-				//lastlogin = Integer.parseInt(users.get(1).get(0));
-				party = users.get(1).get(1);
-			HashMap<Integer, ArrayList<String>> spawn = mcMMO.database.Read("SELECT world, x, y, z FROM "+LoadProperties.MySQLtablePrefix+"spawn WHERE user_id = " + id);
-				myspawnworld = spawn.get(1).get(0);
-				myspawn = spawn.get(1).get(1) + "," + spawn.get(1).get(2) + "," + spawn.get(1).get(3);				
-			HashMap<Integer, ArrayList<String>> cooldowns = mcMMO.database.Read("SELECT mining, woodcutting, unarmed, herbalism, excavation, swords, axes FROM "+LoadProperties.MySQLtablePrefix+"cooldowns WHERE user_id = " + id);
-			/*
-			 * I'm still learning MySQL, this is a fix for adding a new table
-			 * its not pretty but it works
-			 */
-			if(cooldowns.get(1) == null)
-			{
-				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"cooldowns (user_id) VALUES ("+id+")");
-			}
-			else
-			{
-				superBreakerDATS = Integer.valueOf(cooldowns.get(1).get(0));
-				treeFellerDATS = Integer.valueOf(cooldowns.get(1).get(1));
-				berserkDATS = Integer.valueOf(cooldowns.get(1).get(2));
-				greenTerraDATS = Integer.valueOf(cooldowns.get(1).get(3));
-				gigaDrillBreakerDATS = Integer.valueOf(cooldowns.get(1).get(4));
-				serratedStrikesDATS = Integer.valueOf(cooldowns.get(1).get(5));
-				skullSplitterDATS = Integer.valueOf(cooldowns.get(1).get(6));
-			}
-			HashMap<Integer, ArrayList<String>> stats = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics, fishing FROM "+LoadProperties.MySQLtablePrefix+"skills WHERE user_id = " + id);
-				skills.put(SkillType.TAMING, Integer.valueOf(stats.get(1).get(0)));
-				skills.put(SkillType.MINING, Integer.valueOf(stats.get(1).get(1)));
-				skills.put(SkillType.REPAIR, Integer.valueOf(stats.get(1).get(2)));
-				skills.put(SkillType.WOODCUTTING, Integer.valueOf(stats.get(1).get(3)));
-				skills.put(SkillType.UNARMED, Integer.valueOf(stats.get(1).get(4)));
-				skills.put(SkillType.HERBALISM, Integer.valueOf(stats.get(1).get(5)));
-				skills.put(SkillType.EXCAVATION, Integer.valueOf(stats.get(1).get(6)));
-				skills.put(SkillType.ARCHERY, Integer.valueOf(stats.get(1).get(7)));
-				skills.put(SkillType.SWORDS, Integer.valueOf(stats.get(1).get(8)));
-				skills.put(SkillType.AXES, Integer.valueOf(stats.get(1).get(9)));
-				skills.put(SkillType.ACROBATICS, Integer.valueOf(stats.get(1).get(10)));
-				skills.put(SkillType.FISHING, Integer.valueOf(stats.get(1).get(11)));
-			HashMap<Integer, ArrayList<String>> experience = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics, fishing FROM "+LoadProperties.MySQLtablePrefix+"experience WHERE user_id = " + id);
-				skillsXp.put(SkillType.TAMING, Integer.valueOf(experience.get(1).get(0)));
-				skillsXp.put(SkillType.MINING, Integer.valueOf(experience.get(1).get(1)));
-				skillsXp.put(SkillType.REPAIR, Integer.valueOf(experience.get(1).get(2)));
-				skillsXp.put(SkillType.WOODCUTTING, Integer.valueOf(experience.get(1).get(3)));
-				skillsXp.put(SkillType.UNARMED, Integer.valueOf(experience.get(1).get(4)));
-				skillsXp.put(SkillType.HERBALISM, Integer.valueOf(experience.get(1).get(5)));
-				skillsXp.put(SkillType.EXCAVATION, Integer.valueOf(experience.get(1).get(6)));
-				skillsXp.put(SkillType.ARCHERY, Integer.valueOf(experience.get(1).get(7)));
-				skillsXp.put(SkillType.SWORDS, Integer.valueOf(experience.get(1).get(8)));
-				skillsXp.put(SkillType.AXES, Integer.valueOf(experience.get(1).get(9)));
-				skillsXp.put(SkillType.ACROBATICS, Integer.valueOf(experience.get(1).get(10)));
-				skillsXp.put(SkillType.FISHING, Integer.valueOf(experience.get(1).get(11)));
-			return true;
-		}
-		else {
-			return false;
-		}		
-	}
-	public void addMySQLPlayer(Player p) {
-		Integer id = 0;
-		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"users (user, lastlogin) VALUES ('" + p.getName() + "'," + System.currentTimeMillis() / 1000 +")");
-		id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + p.getName() + "'");
-		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"cooldowns (user_id) VALUES ("+id+")");
-		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"spawn (user_id) VALUES ("+id+")");
-		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"skills (user_id) VALUES ("+id+")");
-		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"experience (user_id) VALUES ("+id+")");
-		this.userid = id;
-	}
-	
-	public boolean load()
-	{
-        try {
-        	//Open the user file
-        	FileReader file = new FileReader(location);
-        	BufferedReader in = new BufferedReader(file);
-        	String line = "";
-        	while((line = in.readLine()) != null)
-        	{
-        		//Find if the line contains the player we want.
-        		String[] character = line.split(":");
-
-        		if(!character[0].equals(playername)){continue;}
-        		
-    			//Get Mining
-    			if(character.length > 1 && m.isInt(character[1]))
-    				skills.put(SkillType.MINING, Integer.valueOf(character[1]));
-    			//Myspawn
-    			if(character.length > 2)
-    				myspawn = character[2];
-    			//Party
-    			if(character.length > 3)
-    				party = character[3];
-    			//Mining XP
-    			if(character.length > 4 && m.isInt(character[4]))
-    				skillsXp.put(SkillType.MINING, Integer.valueOf(character[4]));
-    			if(character.length > 5 && m.isInt(character[5]))
-    				skills.put(SkillType.WOODCUTTING, Integer.valueOf(character[5]));
-    			if(character.length > 6 && m.isInt(character[6]))
-    				skillsXp.put(SkillType.WOODCUTTING, Integer.valueOf(character[6]));
-    			if(character.length > 7 && m.isInt(character[7]))
-    				skills.put(SkillType.REPAIR, Integer.valueOf(character[7]));
-    			if(character.length > 8 && m.isInt(character[8]))
-    				skills.put(SkillType.UNARMED,  Integer.valueOf(character[8]));
-    			if(character.length > 9 && m.isInt(character[9]))
-    				skills.put(SkillType.HERBALISM, Integer.valueOf(character[9]));
-    			if(character.length > 10 && m.isInt(character[10]))
-    				skills.put(SkillType.EXCAVATION, Integer.valueOf(character[10]));
-    			if(character.length > 11 && m.isInt(character[11]))
-    				skills.put(SkillType.ARCHERY, Integer.valueOf(character[11]));
-    			if(character.length > 12 && m.isInt(character[12]))
-    				skills.put(SkillType.SWORDS, Integer.valueOf(character[12]));
-    			if(character.length > 13 && m.isInt(character[13]))
-    				skills.put(SkillType.AXES, Integer.valueOf(character[13]));
-    			if(character.length > 14 && m.isInt(character[14]))
-    				skills.put(SkillType.ACROBATICS, Integer.valueOf(character[14]));
-    			if(character.length > 15 && m.isInt(character[15]))
-    				skillsXp.put(SkillType.REPAIR, Integer.valueOf(character[15]));
-    			if(character.length > 16 && m.isInt(character[16]))
-    				skillsXp.put(SkillType.UNARMED, Integer.valueOf(character[16]));
-    			if(character.length > 17 && m.isInt(character[17]))
-    				skillsXp.put(SkillType.HERBALISM, Integer.valueOf(character[17]));
-    			if(character.length > 18 && m.isInt(character[18]))
-    				skillsXp.put(SkillType.EXCAVATION, Integer.valueOf(character[18]));
-    			if(character.length > 19 && m.isInt(character[19]))
-    				skillsXp.put(SkillType.ARCHERY, Integer.valueOf(character[19]));
-    			if(character.length > 20 && m.isInt(character[20]))
-    				skillsXp.put(SkillType.SWORDS, Integer.valueOf(character[20]));
-    			if(character.length > 21 && m.isInt(character[21]))
-    				skillsXp.put(SkillType.AXES, Integer.valueOf(character[21]));
-    			if(character.length > 22 && m.isInt(character[22]))
-    				skillsXp.put(SkillType.ACROBATICS, Integer.valueOf(character[22]));
-    			if(character.length > 23 && m.isInt(character[23]))
-    				myspawnworld = character[23];
-    			if(character.length > 24 && m.isInt(character[24]))
-    				skills.put(SkillType.TAMING, Integer.valueOf(character[24]));
-    			if(character.length > 25 && m.isInt(character[25]))
-    				skillsXp.put(SkillType.TAMING, Integer.valueOf(character[25]));
-    			if(character.length > 26)
-    				berserkDATS = Integer.valueOf(character[26]);
-    			if(character.length > 27)
-    				gigaDrillBreakerDATS = Integer.valueOf(character[27]);
-    			if(character.length > 28)
-    				treeFellerDATS = Integer.valueOf(character[28]);
-    			if(character.length > 29)
-    				greenTerraDATS = Integer.valueOf(character[29]);
-    			if(character.length > 30)
-    				serratedStrikesDATS = Integer.valueOf(character[30]);
-    			if(character.length > 31)
-    				skullSplitterDATS = Integer.valueOf(character[31]);
-    			if(character.length > 32)
-    				superBreakerDATS = Integer.valueOf(character[32]);
-    			if(character.length > 33)
-    			{
-    				for(HUDType x : HUDType.values())
-    				{
-    					if(x.toString().equalsIgnoreCase(character[33]))
-    					{
-    						hud = x;
-    					}
-    				}
-    			}
-    			if(character.length > 34)
-    				skills.put(SkillType.FISHING, Integer.valueOf(character[34]));
-    			if(character.length > 35)
-    				skillsXp.put(SkillType.FISHING, Integer.valueOf(character[35]));
-            	in.close();
-    			return true;
-        	}
-        	in.close();
-        } catch (Exception e) {
-            log.log(Level.SEVERE, "Exception while reading "
-            		+ location + " (Are you sure you formatted it correctly?)", e);
-        }
-        return false;
-	}
-	
-    public void save()
-    {
-    	Long timestamp = System.currentTimeMillis()/1000; //Convert to seconds
-    	// if we are using mysql save to database
-    	if (LoadProperties.useMySQL) 
-    	{
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"huds SET "
-    				+" hudtype = '"+hud.toString()+"' WHERE user_id = "+this.userid);
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET lastlogin = " + timestamp.intValue() + " WHERE id = " + this.userid);
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET party = '"+this.party+"' WHERE id = " +this.userid);
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + this.myspawnworld + "', x = " +getX()+", y = "+getY()+", z = "+getZ()+" WHERE user_id = "+this.userid);
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"cooldowns SET "
-    				+" mining = "+(superBreakerDATS)
-    				+", woodcutting = "+(treeFellerDATS)
-    				+", unarmed = "+(berserkDATS)
-    				+", herbalism = "+(greenTerraDATS)
-    				+", excavation = "+(gigaDrillBreakerDATS)
-    				+", swords = " +(serratedStrikesDATS)
-    				+", axes = "+(skullSplitterDATS)
-    				+" WHERE user_id = "+this.userid);
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"skills SET "
-    				+"  taming = "+skills.get(SkillType.TAMING)
-    				+", mining = "+skills.get(SkillType.MINING)
-    				+", repair = "+skills.get(SkillType.REPAIR)
-    				+", woodcutting = "+skills.get(SkillType.WOODCUTTING)
-    				+", unarmed = "+skills.get(SkillType.UNARMED)
-    				+", herbalism = "+skills.get(SkillType.HERBALISM)
-    				+", excavation = "+skills.get(SkillType.EXCAVATION)
-    				+", archery = " +skills.get(SkillType.ARCHERY)
-    				+", swords = " +skills.get(SkillType.SWORDS)
-    				+", axes = "+skills.get(SkillType.AXES)
-    				+", acrobatics = "+skills.get(SkillType.ACROBATICS)
-    				+", fishing = "+skills.get(SkillType.FISHING)
-    				+" WHERE user_id = "+this.userid);
-    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"experience SET "
-    				+"  taming = "+skillsXp.get(SkillType.TAMING)
-    				+", mining = "+skillsXp.get(SkillType.MINING)
-    				+", repair = "+skillsXp.get(SkillType.REPAIR)
-    				+", woodcutting = "+skillsXp.get(SkillType.WOODCUTTING)
-    				+", unarmed = "+skillsXp.get(SkillType.UNARMED)
-    				+", herbalism = "+skillsXp.get(SkillType.HERBALISM)
-    				+", excavation = "+skillsXp.get(SkillType.EXCAVATION)
-    				+", archery = " +skillsXp.get(SkillType.ARCHERY)
-    				+", swords = " +skillsXp.get(SkillType.SWORDS)
-    				+", axes = "+skillsXp.get(SkillType.AXES)
-    				+", acrobatics = "+skillsXp.get(SkillType.ACROBATICS)
-    				+", fishing = "+skillsXp.get(SkillType.FISHING)
-    				+" WHERE user_id = "+this.userid);
-    	} else 
-    	{
-    		// otherwise save to flatfile
-	        try {
-	        	//Open the file
-	        	FileReader file = new FileReader(location);
-	            BufferedReader in = new BufferedReader(file);
-	            StringBuilder writer = new StringBuilder();
-	        	String line = "";
-	        	
-	        	//While not at the end of the file
-	        	while((line = in.readLine()) != null)
-	        	{
-	        		//Read the line in and copy it to the output it's not the player
-	        		//we want to edit
-	        		if(!line.split(":")[0].equalsIgnoreCase(playername))
-	        		{
-	                    writer.append(line).append("\r\n");
-	                    
-	                //Otherwise write the new player information
-	        		} else {
-	        			writer.append(playername + ":");
-	        			writer.append(skills.get(SkillType.MINING) + ":");
-	        			writer.append(myspawn + ":");
-	        			writer.append(party+":");
-	        			writer.append(skillsXp.get(SkillType.MINING) + ":");
-	        			writer.append(skills.get(SkillType.WOODCUTTING) + ":");
-	        			writer.append(skillsXp.get(SkillType.WOODCUTTING) + ":");
-	        			writer.append(skills.get(SkillType.REPAIR) + ":");
-	        			writer.append(skills.get(SkillType.UNARMED) + ":");
-	        			writer.append(skills.get(SkillType.HERBALISM) + ":");
-	        			writer.append(skills.get(SkillType.EXCAVATION) + ":");
-	        			writer.append(skills.get(SkillType.ARCHERY) + ":");
-	        			writer.append(skills.get(SkillType.SWORDS) + ":");
-	        			writer.append(skills.get(SkillType.AXES) + ":");
-	        			writer.append(skills.get(SkillType.ACROBATICS) + ":");
-	        			writer.append(skillsXp.get(SkillType.REPAIR) + ":");
-	        			writer.append(skillsXp.get(SkillType.UNARMED) + ":");
-	        			writer.append(skillsXp.get(SkillType.HERBALISM) + ":");
-	        			writer.append(skillsXp.get(SkillType.EXCAVATION) + ":");
-	        			writer.append(skillsXp.get(SkillType.ARCHERY) + ":");
-	        			writer.append(skillsXp.get(SkillType.SWORDS) + ":");
-	        			writer.append(skillsXp.get(SkillType.AXES) + ":");
-	        			writer.append(skillsXp.get(SkillType.ACROBATICS) + ":");
-	        			writer.append(myspawnworld+":");
-	        			writer.append(skills.get(SkillType.TAMING) + ":");
-	        			writer.append(skillsXp.get(SkillType.TAMING) + ":");
-	        			//Need to store the DATS of abilities nao
-	        			//Berserk, Gigadrillbreaker, Tree Feller, Green Terra, Serrated Strikes, Skull Splitter, Super Breaker
-	        			writer.append(String.valueOf(berserkDATS)+":");
-	        			writer.append(String.valueOf(gigaDrillBreakerDATS)+":");
-	        			writer.append(String.valueOf(treeFellerDATS)+":");
-	        			writer.append(String.valueOf(greenTerraDATS)+":");
-	        			writer.append(String.valueOf(serratedStrikesDATS)+":");
-	        			writer.append(String.valueOf(skullSplitterDATS)+":");
-	        			writer.append(String.valueOf(superBreakerDATS)+":");
-	        			writer.append(hud.toString()+":");
-	        			writer.append(skills.get(SkillType.FISHING) + ":");
-	        			writer.append(skillsXp.get(SkillType.FISHING) + ":");
-	        			writer.append("\r\n");                   			
-	        		}
-	        	}
-	        	in.close();
-	        	//Write the new file
-	            FileWriter out = new FileWriter(location);
-	            out.write(writer.toString());
-	            out.close();
-	        } catch (Exception e) {
-	                log.log(Level.SEVERE, "Exception while writing to " + location + " (Are you sure you formatted it correctly?)", e);
-	        }
-    	}
-	}
-    public void addPlayer()
-    {
-        try {
-        	//Open the file to write the player
-        	FileWriter file = new FileWriter(location, true);
-            BufferedWriter out = new BufferedWriter(file);
-            
-            //Add the player to the end
-            out.append(playername + ":");
-            out.append(0 + ":"); //mining
-            out.append(myspawn+":");
-            out.append(party+":");
-            out.append(0+":"); //XP
-            out.append(0+":"); //woodcutting
-            out.append(0+":"); //woodCuttingXP
-            out.append(0+":"); //repair
-            out.append(0+":"); //unarmed
-            out.append(0+":"); //herbalism
-            out.append(0+":"); //excavation
-            out.append(0+":"); //archery
-            out.append(0+":"); //swords
-            out.append(0+":"); //axes
-            out.append(0+":"); //acrobatics
-            out.append(0+":"); //repairXP
-            out.append(0+":"); //unarmedXP
-            out.append(0+":"); //herbalismXP
-            out.append(0+":"); //excavationXP
-            out.append(0+":"); //archeryXP
-            out.append(0+":"); //swordsXP
-            out.append(0+":"); //axesXP
-            out.append(0+":"); //acrobaticsXP
-            out.append(myspawnworld+":");
-            out.append(0+":"); //taming
-            out.append(0+":"); //tamingXP
-            out.append(0+":"); //DATS
-            out.append(0+":"); //DATS
-            out.append(0+":"); //DATS
-            out.append(0+":"); //DATS
-            out.append(0+":"); //DATS
-            out.append(0+":"); //DATS
-            out.append(0+":"); //DATS
-            out.append(LoadProperties.defaulthud.toString()+":");//HUD
-            out.append(0+":"); //Fishing
-            out.append(0+":"); //FishingXP
-
-            //Add more in the same format as the line above
-            
-			out.newLine();
-			out.close();
-        } catch (Exception e) {
-                log.log(Level.SEVERE, "Exception while writing to " + location + " (Are you sure you formatted it correctly?)", e);
-        }
-    }
-    public void togglePartyHUD()
-    {
-    	partyhud = !partyhud;
-    }
-    public boolean getPartyHUD()
-    {
-    	return partyhud;
-    }
-    public void toggleSpoutEnabled()
-    {
-    	spoutcraft = !spoutcraft;
-    }
-    
-    public boolean isFilling()
-    {
-    	return filling;
-    }
-    public void toggleFilling()
-    {
-    	filling = !filling;
-    }
-    public HUDType getHUDType()
-    {
-    	return hud;
-    }
-    public void setHUDType(HUDType type)
-    {
-    	hud = type;
-    	save();
-    }
-    public boolean getXpBarLocked()
-    {
-    	return xpbarlocked;
-    }
-    public void toggleXpBarLocked()
-    {
-    	xpbarlocked = !xpbarlocked;
-    }
-    public int getXpBarInc()
-    {
-    	return xpbarinc;
-    }
-    public void setXpBarInc(int newvalue)
-    {
-    	xpbarinc = newvalue;
-    }
-    public void setSkillLock(SkillType newvalue)
-    {
-    	skillLock = newvalue;
-    }
-    public SkillType getSkillLock()
-    {
-    	return skillLock;
-    }
-    public void setLastGained(SkillType newvalue)
-    {
-    	lastgained = newvalue;
-    }
-    public SkillType getLastGained()
-    {
-    	return lastgained;
-    }
-    
-    public boolean getAdminChatMode() {return adminChatMode;}
-    public boolean getPartyChatMode() {return partyChatMode;}
-    
-    public boolean getGodMode() {return godMode;}
-    
-    public void togglePlacedAnvil()
-    {
-    	placedAnvil = !placedAnvil;
-    }
-    public Boolean getPlacedAnvil()
-    {
-    	return placedAnvil;
-    }
-    public void toggleAdminChat()
-    {
-    	adminChatMode = !adminChatMode;
-    }
-	
-    public void toggleGodMode()
-    {
-    	godMode = !godMode;
-    }
-    
-    public void togglePartyChat()
-    {
-    	partyChatMode = !partyChatMode;
-    }
-    
-    public void setMana(int newvalue)
-    {
-    	mana = newvalue;
-    }
-
-    public int getCurrentMana()
-    {
-    	return mana;
-    }
-    public void setDyeChanged(Boolean bool)
-    {
-    	dyeChanged = bool;
-    }
-    public boolean getDyeChanged()
-    {
-    	return dyeChanged;
-    }
-    public void setBlueDyeCycle(int newvalue)
-    {
-    	blueDyeCycle = newvalue;
-    }
-    public int getBlueDyeCycle()
-    {
-    	return blueDyeCycle;
-    }
-    public void setBlueDyeCycleSel(int newvalue)
-    {
-    	blueDyeCycleSel = newvalue;
-    }
-    public int getBlueDyeCycleSel()
-    {
-    	return blueDyeCycleSel;
-    }
-    public void setGreenDyeCycle(int newvalue)
-    {
-    	greenDyeCycle = newvalue;
-    }
-    public int getGreenDyeCycle()
-    {
-    	return greenDyeCycle;
-    }
-    public void setGreenDyeCycleSel(int newvalue)
-    {
-    	greenDyeCycleSel = newvalue;
-    }
-    public int getGreenDyeCycleSel()
-    {
-    	return greenDyeCycleSel;
-    }
-
-	public boolean isPlayer(String player)
-	{
-		return player.equals(playername);
-	}
-	public boolean getPartyChatOnlyToggle(){return partyChatOnly;}
-	public void togglePartyChatOnly(){partyChatOnly = !partyChatOnly;}
-	public boolean getAbilityUse(){
-		return abilityuse;
-	}
-	public void toggleAbilityUse()
-	{
-		abilityuse = !abilityuse;
-	}
-	public long getMySpawnATS(){
-		return mySpawnATS;
-	}
-	public void setMySpawnATS(long newvalue)
-	{
-		mySpawnATS = (int) (newvalue/1000);
-	}
-	public void decreaseBleedTicks()
-	{
-		bleedticks--;
-	}
-	public Integer getBleedTicks(){
-		return bleedticks;
-	}
-	public void setBleedTicks(Integer newvalue){
-		bleedticks = newvalue;
-	}
-	public void addBleedTicks(Integer newvalue){
-		bleedticks+=newvalue;
-	}
-	/*
-	 * EXPLOIT PREVENTION
-	 */
-	public long getRespawnATS() {return respawnATS;}
-	public void setRespawnATS(long newvalue) {respawnATS = (int) (newvalue/1000);}
-	
-	/*
-	 * HOE PREPARATION
-	 */
-	public boolean getHoePreparationMode(){
-		return hoePreparationMode;
-	}
-	public void setHoePreparationMode(Boolean bool){
-		hoePreparationMode = bool;
-	}
-	public long getHoePreparationATS(){
-		return hoePreparationATS;
-	}
-	public void setHoePreparationATS(long newvalue){
-		hoePreparationATS = (int) (newvalue/1000);
-	}
-	
-	/*
-	 * SWORDS PREPARATION
-	 */
-	public boolean getSwordsPreparationMode(){
-		return swordsPreparationMode;
-	}
-	public void setSwordsPreparationMode(Boolean bool){
-		swordsPreparationMode = bool;
-	}
-	public long getSwordsPreparationATS(){
-		return swordsPreparationATS;
-	}
-	public void setSwordsPreparationATS(long newvalue){
-		swordsPreparationATS = (int) (newvalue/1000);
-	}
-	/*
-	 * SHOVEL PREPARATION
-	 */
-	public boolean getShovelPreparationMode(){
-		return shovelPreparationMode;
-	}
-	public void setShovelPreparationMode(Boolean bool){
-		shovelPreparationMode = bool;
-	}
-	public long getShovelPreparationATS(){
-		return shovelPreparationATS;
-	}
-	public void setShovelPreparationATS(long newvalue){
-		shovelPreparationATS = (int) (newvalue/1000);
-	}
-	/*
-	 * FISTS PREPARATION
-	 */
-	public boolean getFistsPreparationMode(){
-		return fistsPreparationMode;
-	}
-	public void setFistsPreparationMode(Boolean bool){
-		fistsPreparationMode = bool;
-	}
-	public long getFistsPreparationATS(){
-		return fistsPreparationATS;
-	}
-	public void setFistsPreparationATS(long newvalue){
-		fistsPreparationATS = (int) (newvalue/1000);
-	}
-	/*
-	 * AXE PREPARATION
-	 */
-	public boolean getAxePreparationMode(){
-		return axePreparationMode;
-	}
-	public void setAxePreparationMode(Boolean bool){
-		axePreparationMode = bool;
-	}
-	public long getAxePreparationATS(){
-		return axePreparationATS;
-	}
-	public void setAxePreparationATS(long newvalue){
-		axePreparationATS = (int) (newvalue/1000);
-	}
-	/*
-	 * PICKAXE PREPARATION
-	 */
-	public boolean getPickaxePreparationMode(){
-		return pickaxePreparationMode;
-	}
-	public void setPickaxePreparationMode(Boolean bool){
-		pickaxePreparationMode = bool;
-	}
-	public long getPickaxePreparationATS(){
-		return pickaxePreparationATS;
-	}
-	public void setPickaxePreparationATS(long newvalue){
-		pickaxePreparationATS = (int) (newvalue/1000);
-	}
-	/*
-	 * GREEN TERRA MODE
-	 */
-	public boolean getGreenTerraInformed() {return greenTerraInformed;}
-	public void setGreenTerraInformed(Boolean bool){
-		greenTerraInformed = bool;
-	}
-	public boolean getGreenTerraMode(){
-		return greenTerraMode;
-	}
-	public void setGreenTerraMode(Boolean bool){
-		greenTerraMode = bool;
-	}
-	public long getGreenTerraActivatedTimeStamp() {return greenTerraATS;}
-	public void setGreenTerraActivatedTimeStamp(Long newvalue){
-		greenTerraATS = (int) (newvalue/1000);
-	}
-	public long getGreenTerraDeactivatedTimeStamp() {return greenTerraDATS;}
-	public void setGreenTerraDeactivatedTimeStamp(Long newvalue){
-		greenTerraDATS = (int) (newvalue/1000);
-		save();
-	}
-	/*
-	 * BERSERK MODE
-	 */
-	public boolean getBerserkInformed() {return berserkInformed;}
-	public void setBerserkInformed(Boolean bool){
-		berserkInformed = bool;
-	}
-	public boolean getBerserkMode(){
-		return berserkMode;
-	}
-	public void setBerserkMode(Boolean bool){
-		berserkMode = bool;
-	}
-	public long getBerserkActivatedTimeStamp() {return berserkATS;}
-	public void setBerserkActivatedTimeStamp(Long newvalue){
-		berserkATS = (int) (newvalue/1000);
-	}
-	public long getBerserkDeactivatedTimeStamp() {return berserkDATS;}
-	public void setBerserkDeactivatedTimeStamp(Long newvalue){
-		berserkDATS = (int) (newvalue/1000);
-		save();
-	}
-	/*
-	 * SKULL SPLITTER
-	 */
-	public boolean getSkullSplitterInformed() {return skullSplitterInformed;}
-	public void setSkullSplitterInformed(Boolean bool){
-		skullSplitterInformed = bool;
-	}
-	public boolean getSkullSplitterMode(){
-		return skullSplitterMode;
-	}
-	public void setSkullSplitterMode(Boolean bool){
-		skullSplitterMode = bool;
-	}
-	public long getSkullSplitterActivatedTimeStamp() {return skullSplitterATS;}
-	public void setSkullSplitterActivatedTimeStamp(Long newvalue){
-		skullSplitterATS = (int) (newvalue/1000);
-	}
-	public long getSkullSplitterDeactivatedTimeStamp() {return skullSplitterDATS;}
-	public void setSkullSplitterDeactivatedTimeStamp(Long newvalue){
-		skullSplitterDATS = (int) (newvalue/1000);
-		save();
-	}
-	/*
-	 * SERRATED STRIKES
-	 */
-	public boolean getSerratedStrikesInformed() {return serratedStrikesInformed;}
-	public void setSerratedStrikesInformed(Boolean bool){
-		serratedStrikesInformed = bool;
-	}
-	public boolean getSerratedStrikesMode(){
-		return serratedStrikesMode;
-	}
-	public void setSerratedStrikesMode(Boolean bool){
-		serratedStrikesMode = bool;
-	}
-	public long getSerratedStrikesActivatedTimeStamp() {return serratedStrikesATS;}
-	public void setSerratedStrikesActivatedTimeStamp(Long newvalue){
-		serratedStrikesATS = (int) (newvalue/1000);
-	}
-	public long getSerratedStrikesDeactivatedTimeStamp() {return serratedStrikesDATS;}
-	public void setSerratedStrikesDeactivatedTimeStamp(Long newvalue){
-		serratedStrikesDATS = (int) (newvalue/1000);
-		save();
-	}
-	/*
-	 * GIGA DRILL BREAKER
-	 */
-	public boolean getGigaDrillBreakerInformed() {return gigaDrillBreakerInformed;}
-	public void setGigaDrillBreakerInformed(Boolean bool){
-		gigaDrillBreakerInformed = bool;
-	}
-	public boolean getGigaDrillBreakerMode(){
-		return gigaDrillBreakerMode;
-	}
-	public void setGigaDrillBreakerMode(Boolean bool){
-		gigaDrillBreakerMode = bool;
-	}
-	public long getGigaDrillBreakerActivatedTimeStamp() {return gigaDrillBreakerATS;}
-	public void setGigaDrillBreakerActivatedTimeStamp(Long newvalue){
-		gigaDrillBreakerATS = (int) (newvalue/1000);
-	}
-	public long getGigaDrillBreakerDeactivatedTimeStamp() {return gigaDrillBreakerDATS;}
-	public void setGigaDrillBreakerDeactivatedTimeStamp(Long newvalue){
-		gigaDrillBreakerDATS = (int) (newvalue/1000);
-		save();
-	}
-	/*
-	 * TREE FELLER STUFF
-	 */
-	public boolean getTreeFellerInformed() {return treeFellerInformed;}
-	public void setTreeFellerInformed(Boolean bool){
-		treeFellerInformed = bool;
-	}
-	public boolean getTreeFellerMode(){
-		return treeFellerMode;
-	}
-	public void setTreeFellerMode(Boolean bool){
-		treeFellerMode = bool;
-	}
-	public long getTreeFellerActivatedTimeStamp() {return treeFellerATS;}
-	public void setTreeFellerActivatedTimeStamp(Long newvalue){
-		treeFellerATS = (int) (newvalue/1000);
-	}
-	public long getTreeFellerDeactivatedTimeStamp() {return treeFellerDATS;}
-	public void setTreeFellerDeactivatedTimeStamp(Long newvalue){
-		treeFellerDATS = (int) (newvalue/1000);
-		save();
-	}
-	/*
-	 * MINING
-	 */
-	public boolean getSuperBreakerInformed() {return superBreakerInformed;}
-	public void setSuperBreakerInformed(Boolean bool){
-		superBreakerInformed = bool;
-	}
-	public boolean getSuperBreakerMode(){
-		return superBreakerMode;
-	}
-	public void setSuperBreakerMode(Boolean bool){
-		superBreakerMode = bool;
-	}
-	public long getSuperBreakerActivatedTimeStamp() {return superBreakerATS;}
-	public void setSuperBreakerActivatedTimeStamp(Long newvalue){
-		superBreakerATS = (int) (newvalue/1000);
-	}
-	public long getSuperBreakerDeactivatedTimeStamp() {return superBreakerDATS;}
-	public void setSuperBreakerDeactivatedTimeStamp(Long newvalue){
-		superBreakerDATS = (int) (newvalue/1000);
-		save();
-	}
-	public long getRecentlyHurt(){
-		return recentlyHurt;
-	}
-	public void setRecentlyHurt(long newvalue){
-		recentlyHurt = (int) (newvalue/1000);
-	}
-	public void skillUp(SkillType skillType, int newvalue)
-	{
-		skills.put(skillType, skills.get(skillType)+newvalue);
-		save();
-	}
-	public Integer getSkillLevel(SkillType skillType)
-	{
-		return skills.get(skillType);
-	}
-	public Integer getSkillXpLevel(SkillType skillType)
-	{
-		return skillsXp.get(skillType);
-	}
-	public void resetSkillXp(SkillType skillType)
-	{
-		skills.put(skillType, 0);
-	}
-	
-	/**
-	 * Adds XP to the player, this ignores skill modifiers
-	 * @param skillType The skill to add XP to
-	 * @param newvalue The amount of XP to add
-	 */
-	public void addXPOverride(SkillType skillType, int newvalue)
-	{
-		if(skillType == SkillType.ALL)
-		{
-			for(SkillType x : SkillType.values())
-			{
-				if(x == SkillType.ALL)
-					continue;
-				skillsXp.put(x, skillsXp.get(x)+newvalue);
-			}
-		} else {
-			int xp = newvalue;
-			
-			xp=xp*LoadProperties.xpGainMultiplier;
-			skillsXp.put(skillType, skillsXp.get(skillType)+xp);
-			lastgained = skillType;
-		}
-	}
-	/**
-	 * Adds XP to the player, this is affected by skill modifiers
-	 * @param skillType The skill to add XP to
-	 * @param newvalue The amount of XP to add
-	 */
-	public void addXP(SkillType skillType, int newvalue, Player thisplayer)
-	{
-		if(System.currentTimeMillis() < ((xpGainATS*1000)+250) || thisplayer.getGameMode() == GameMode.CREATIVE)
-			return;
-		
-		//Setup a timestamp of when xp was given
-		xpGainATS = (int) (System.currentTimeMillis()/1000);
-		
-		double bonusModifier = 0;
-		String leaderName = "";
-		
-		if(inParty())
-		{
-			for(Player x : Party.getInstance().getPartyMembers(thisplayer))
-			{
-				if(x.isOnline() && !x.getName().equals(thisplayer.getName()) && Party.getInstance().isPartyLeader(x.getName(), this.getParty()))
-				{
-					leaderName = x.getName();
-					if(m.getDistance(thisplayer.getLocation(), x.getLocation()) < 25)
-					{
-						PlayerProfile PartyLeader = Users.getProfile(x);
-						if(PartyLeader.getSkillLevel(skillType) >= this.getSkillLevel(skillType))
-						{
-							int leaderLevel = PartyLeader.getSkillLevel(skillType); 
-							int difference = leaderLevel - this.getSkillLevel(skillType);
-							bonusModifier = (difference*0.75D)/100D;
-						}
-					}
-				}
-			}
-		}
-		if(skillType == SkillType.ALL)
-		{
-			for(SkillType x : SkillType.values())
-			{
-				if(x == SkillType.ALL)
-					continue;
-				skillsXp.put(x, skillsXp.get(x)+newvalue);
-			}
-		} else {
-			int xp = newvalue;
-			
-			switch(skillType)
-			{
-			case TAMING:
-				xp=(int) (xp/LoadProperties.tamingxpmodifier);
-				break;
-			case MINING:
-				xp=(int) (xp/LoadProperties.miningxpmodifier);
-				break;
-			case WOODCUTTING:
-				xp=(int) (xp/LoadProperties.woodcuttingxpmodifier);
-				break;
-			case REPAIR:
-				xp=(int) (xp/LoadProperties.repairxpmodifier);
-				break;
-			case HERBALISM:
-				xp=(int) (xp/LoadProperties.herbalismxpmodifier);
-				break;
-			case ACROBATICS:
-				xp=(int) (xp/LoadProperties.acrobaticsxpmodifier);
-				break;
-			case SWORDS:
-				xp=(int) (xp/LoadProperties.swordsxpmodifier);
-				break;
-			case ARCHERY:
-				xp=(int) (xp/LoadProperties.archeryxpmodifier);
-				break;
-			case UNARMED:
-				xp=(int) (xp/LoadProperties.unarmedxpmodifier);
-				break;
-			case EXCAVATION:
-				xp=(int) (xp/LoadProperties.excavationxpmodifier);
-				break;
-			case AXES:
-				xp=(int) (xp/LoadProperties.axesxpmodifier);
-				break;
-			}
-			xp=xp*LoadProperties.xpGainMultiplier;
-			
-			if(bonusModifier > 0)
-			{
-				if(bonusModifier >= 2)
-					bonusModifier = 2;
-				
-				double trueBonus = bonusModifier * xp;
-				double oldxp = xp;
-				xp+=trueBonus;
-				double percent = (trueBonus/oldxp)*100;
-				thisplayer.sendMessage(ChatColor.GREEN+"XP: "+oldxp+" Bonus XP: "+trueBonus+" Total: "+xp+ChatColor.GOLD+" [Master: "+leaderName+" " +" +"+(int)percent+"%]");
-			}
-			skillsXp.put(skillType, skillsXp.get(skillType)+xp);
-			lastgained = skillType;
-		}
-		//save();
-	}
-	
-	public void removeXP(SkillType skillType, int newvalue)
-	{
-		if(skillType == SkillType.ALL)
-		{
-			skillsXp.put(SkillType.TAMING, skillsXp.get(SkillType.TAMING)-newvalue);
-			skillsXp.put(SkillType.MINING, skillsXp.get(SkillType.MINING)-newvalue);
-			skillsXp.put(SkillType.WOODCUTTING, skillsXp.get(SkillType.WOODCUTTING)-newvalue);
-			skillsXp.put(SkillType.REPAIR, skillsXp.get(SkillType.REPAIR)-newvalue);
-			skillsXp.put(SkillType.HERBALISM, skillsXp.get(SkillType.HERBALISM)-newvalue);
-			skillsXp.put(SkillType.ACROBATICS, skillsXp.get(SkillType.ACROBATICS)-newvalue);
-			skillsXp.put(SkillType.SWORDS, skillsXp.get(SkillType.SWORDS)-newvalue);
-			skillsXp.put(SkillType.ARCHERY, skillsXp.get(SkillType.ARCHERY)-newvalue);
-			skillsXp.put(SkillType.UNARMED, skillsXp.get(SkillType.UNARMED)-newvalue);
-			skillsXp.put(SkillType.EXCAVATION, skillsXp.get(SkillType.EXCAVATION)-newvalue);
-			skillsXp.put(SkillType.AXES, skillsXp.get(SkillType.AXES)-newvalue);
-			skillsXp.put(SkillType.FISHING, skillsXp.get(SkillType.FISHING)-newvalue);
-		} else {
-			skillsXp.put(skillType, skillsXp.get(skillType)-newvalue);
-		}
-		//save();
-	}
-	public void acceptInvite()
-	{
-		party = invite;
-		invite = "";
-	}
-	public void modifyInvite(String invitename)
-	{
-		invite = invitename;
-	}
-	public String getInvite() { return invite; }
-	
-	public void modifyskill(SkillType skillType, int newvalue)
-	{
-		if(skillType == SkillType.ALL)
-		{
-			skills.put(SkillType.TAMING, newvalue);
-			skills.put(SkillType.MINING, newvalue);
-			skills.put(SkillType.WOODCUTTING, newvalue);
-			skills.put(SkillType.REPAIR, newvalue);
-			skills.put(SkillType.HERBALISM, newvalue);
-			skills.put(SkillType.ACROBATICS, newvalue);
-			skills.put(SkillType.SWORDS, newvalue);
-			skills.put(SkillType.ARCHERY, newvalue);
-			skills.put(SkillType.UNARMED, newvalue);
-			skills.put(SkillType.EXCAVATION, newvalue);
-			skills.put(SkillType.AXES, newvalue);
-			skills.put(SkillType.FISHING, newvalue);
-			
-			skillsXp.put(SkillType.TAMING, 0);
-			skillsXp.put(SkillType.MINING, 0);
-			skillsXp.put(SkillType.WOODCUTTING, 0);
-			skillsXp.put(SkillType.REPAIR, 0);
-			skillsXp.put(SkillType.HERBALISM, 0);
-			skillsXp.put(SkillType.ACROBATICS, 0);
-			skillsXp.put(SkillType.SWORDS, 0);
-			skillsXp.put(SkillType.ARCHERY, 0);
-			skillsXp.put(SkillType.UNARMED, 0);
-			skillsXp.put(SkillType.EXCAVATION, 0);
-			skillsXp.put(SkillType.AXES, 0);
-			skillsXp.put(SkillType.FISHING, 0);
-		} else {
-			skills.put(skillType, newvalue);
-			skillsXp.put(skillType, newvalue);
-		}
-		save();
-	}
-	public Integer getXpToLevel(SkillType skillType)
-	{
-		return (int) ((1020+(skills.get(skillType) *  20)));
-	}
-    
-	//Store the player's party
-    public void setParty(String newParty)
-    {
-    	party = newParty;
-    	save();
-    }
-    //Retrieve the player's party
-    public String getParty() {return party;}
-            //Remove party
-    public void removeParty() {
-    	party = null;
-    	save();
-    }
-    //Retrieve whether or not the player is in a party
-    public boolean inParty() 
-    {
-    	if(party != null && !party.equals("") && !party.equals("null")){
-    		return true;
-    	} else {
-    		return false;
-    	}
-    }
-    
-    //Retrieve whether or not the player has an invite
-    public boolean hasPartyInvite() {
-    	if(invite != null && !invite.equals("") && !invite.equals("null")){
-    		return true;
-    	} else {
-    		return false;
-    	}
-    }
-    public String getMySpawnWorld()
-    {
-    	if(myspawnworld != null && !myspawnworld.equals("") && !myspawnworld.equals("null")){
-    		return myspawnworld;
-    	} else {
-    		return Bukkit.getServer().getWorlds().get(0).toString();
-    	}
-    }
-    //Save a users spawn location
-    public void setMySpawn(double x, double y, double z, String myspawnworldlocation){
-    	myspawn = x+","+y+","+z;
-    	myspawnworld = myspawnworldlocation;
-    	save();
-    }
-    public String getX(){
-    	if(myspawn != null)
-    	{
-    	String[] split = myspawn.split(",");
-    	return split[0];
-    	} 
-    	else
-    		return null;
-    }
-    public String getY(){
-    	if(myspawn != null)
-    	{
-    	String[] split = myspawn.split(",");
-    	return split[1];
-    	} 
-    	else
-    		return null;
-    }
-    public String getZ(){
-    	if(myspawn != null)
-    	{
-    	String[] split = myspawn.split(",");
-    	return split[2];
-    	} 
-    	else
-    		return null;
-    }
-    public boolean isDead(){
-    	return dead;
-    }
-    public Location getMySpawn(Player player)
-    {
-    	Location loc = null;
-    	if(myspawn != null)
-    	{
-    		if(m.isDouble(getX()) && m.isDouble(getY()) && m.isDouble(getZ()))
-    				loc = new Location(player.getWorld(),(Double.parseDouble(getX())), Double.parseDouble(getY()), Double.parseDouble(getZ()));
-    		else
-    			return null;
-    	} else
-    		return null;
-    	
-    	loc.setYaw(0);
-    	loc.setPitch(0);
-    	if(loc.getX() != 0 && loc.getY() != 0 && loc.getZ() != 0 && loc.getWorld() != null)
-    	{
-    		if(Bukkit.getServer().getWorld(this.getMySpawnWorld()) != null)
-    			loc.setWorld(Bukkit.getServer().getWorld(this.getMySpawnWorld()));
-    		else
-    			loc.setWorld(Bukkit.getServer().getWorlds().get(0));
-    		return loc;
-    	} else {
-    		return null;
-    	}
-    }
-}	
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.GameMode;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+
+
+
+public class PlayerProfile
+{
+    protected final Logger log = Logger.getLogger("Minecraft");
+    
+    //HUD
+    private HUDType hud;
+    
+    //MISC
+	private String party, myspawn, myspawnworld, invite;
+	
+	//TOGGLES
+	private boolean partyhud = true, spoutcraft = false, filling = false, xpbarlocked = false, placedAnvil = false, partyChatMode = false, adminChatMode = false, godMode = false, greenTerraMode, partyChatOnly = false, greenTerraInformed = true, berserkInformed = true, skullSplitterInformed = true, gigaDrillBreakerInformed = true, 
+	superBreakerInformed = true, serratedStrikesInformed = true, treeFellerInformed = true, dead, abilityuse = true, treeFellerMode, superBreakerMode, gigaDrillBreakerMode, 
+	serratedStrikesMode, hoePreparationMode = false, shovelPreparationMode = false, swordsPreparationMode = false, fistsPreparationMode = false, pickaxePreparationMode = false, axePreparationMode = false, skullSplitterMode, berserkMode;
+	
+	//TIMESTAMPS
+	//ATS = (Time of) Activation Time Stamp
+	//DATS = (Time of) Deactivation Time Stamp
+	private int xpGainATS = 0, recentlyHurt = 0, berserkATS = 0, berserkDATS = 0, gigaDrillBreakerATS = 0, gigaDrillBreakerDATS = 0,
+	respawnATS = 0, mySpawnATS = 0, greenTerraATS = 0, greenTerraDATS = 0, superBreakerATS = 0, superBreakerDATS = 0, serratedStrikesATS = 0, serratedStrikesDATS = 0, treeFellerATS = 0, treeFellerDATS = 0, 
+	skullSplitterATS = 0, skullSplitterDATS = 0, hoePreparationATS = 0, axePreparationATS = 0, pickaxePreparationATS = 0, fistsPreparationATS = 0, shovelPreparationATS = 0, swordsPreparationATS = 0;
+	
+	private SkillType lastgained = null, skillLock = null;
+	
+	//MySQL STUFF
+	private int xpbarinc=0, lastlogin=0, userid = 0, bleedticks = 0;
+	
+	//MAGIC STUFF
+	private int mana = 0;
+	private int greenDyeCycleSel = 0, greenDyeCycle = 0, blueDyeCycle = 0, blueDyeCycleSel = 0;
+	public boolean dyeChanged = false;
+	
+	private String playername;
+	
+	//Time to HashMap this shiz
+	HashMap<SkillType, Integer> skills = new HashMap<SkillType, Integer>(); //Skills and XP
+	HashMap<SkillType, Integer> skillsXp = new HashMap<SkillType, Integer>(); //Skills and XP
+	
+    String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
+        
+	public PlayerProfile(Player player)
+	{
+		hud = LoadProperties.defaulthud;
+		//Setup the HashMap for the skills
+		for(SkillType skillType : SkillType.values())
+		{
+			if(skillType != SkillType.ALL)
+			{
+				skills.put(skillType, 0);
+				skillsXp.put(skillType, 0);
+			}
+		}
+		
+		playername = player.getName();
+		if (LoadProperties.useMySQL) 
+		{
+			if(!loadMySQL(player)) {
+				addMySQLPlayer(player);
+				loadMySQL(player);//This is probably not needed anymore, could just delete
+			}
+		} else {
+			if(!load()) { addPlayer(); }			
+		}
+		lastlogin = ((Long) (System.currentTimeMillis()/1000)).intValue();
+	}
+	public int getLastLogin()
+	{
+		return lastlogin;
+	}
+	public int getMySQLuserId()
+	{
+		return userid;
+	}
+	
+	public boolean loadMySQL(Player p) 
+	{
+		Integer id = 0;
+		id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + p.getName() + "'");
+		if(id == 0)
+			return false;
+		this.userid = id;
+		if (id > 0) {
+			HashMap<Integer, ArrayList<String>> huds = mcMMO.database.Read("SELECT hudtype FROM "+LoadProperties.MySQLtablePrefix+"huds WHERE user_id = " + id);
+			if(huds.get(1) == null)
+			{
+				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"huds (user_id) VALUES ("+id+")");
+			} else {
+				if(huds.get(1).get(0) != null)
+				{
+				for(HUDType x : HUDType.values())
+				{
+					if(x.toString().equals(huds.get(1).get(0)))
+					{
+						hud = x;
+					}
+				}
+				} else {
+					hud = LoadProperties.defaulthud;
+				}
+			}
+			HashMap<Integer, ArrayList<String>> users = mcMMO.database.Read("SELECT lastlogin, party FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = " + id);
+				//lastlogin = Integer.parseInt(users.get(1).get(0));
+				party = users.get(1).get(1);
+			HashMap<Integer, ArrayList<String>> spawn = mcMMO.database.Read("SELECT world, x, y, z FROM "+LoadProperties.MySQLtablePrefix+"spawn WHERE user_id = " + id);
+				myspawnworld = spawn.get(1).get(0);
+				myspawn = spawn.get(1).get(1) + "," + spawn.get(1).get(2) + "," + spawn.get(1).get(3);				
+			HashMap<Integer, ArrayList<String>> cooldowns = mcMMO.database.Read("SELECT mining, woodcutting, unarmed, herbalism, excavation, swords, axes FROM "+LoadProperties.MySQLtablePrefix+"cooldowns WHERE user_id = " + id);
+			/*
+			 * I'm still learning MySQL, this is a fix for adding a new table
+			 * its not pretty but it works
+			 */
+			if(cooldowns.get(1) == null)
+			{
+				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"cooldowns (user_id) VALUES ("+id+")");
+			}
+			else
+			{
+				superBreakerDATS = Integer.valueOf(cooldowns.get(1).get(0));
+				treeFellerDATS = Integer.valueOf(cooldowns.get(1).get(1));
+				berserkDATS = Integer.valueOf(cooldowns.get(1).get(2));
+				greenTerraDATS = Integer.valueOf(cooldowns.get(1).get(3));
+				gigaDrillBreakerDATS = Integer.valueOf(cooldowns.get(1).get(4));
+				serratedStrikesDATS = Integer.valueOf(cooldowns.get(1).get(5));
+				skullSplitterDATS = Integer.valueOf(cooldowns.get(1).get(6));
+			}
+			HashMap<Integer, ArrayList<String>> stats = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics, fishing FROM "+LoadProperties.MySQLtablePrefix+"skills WHERE user_id = " + id);
+				skills.put(SkillType.TAMING, Integer.valueOf(stats.get(1).get(0)));
+				skills.put(SkillType.MINING, Integer.valueOf(stats.get(1).get(1)));
+				skills.put(SkillType.REPAIR, Integer.valueOf(stats.get(1).get(2)));
+				skills.put(SkillType.WOODCUTTING, Integer.valueOf(stats.get(1).get(3)));
+				skills.put(SkillType.UNARMED, Integer.valueOf(stats.get(1).get(4)));
+				skills.put(SkillType.HERBALISM, Integer.valueOf(stats.get(1).get(5)));
+				skills.put(SkillType.EXCAVATION, Integer.valueOf(stats.get(1).get(6)));
+				skills.put(SkillType.ARCHERY, Integer.valueOf(stats.get(1).get(7)));
+				skills.put(SkillType.SWORDS, Integer.valueOf(stats.get(1).get(8)));
+				skills.put(SkillType.AXES, Integer.valueOf(stats.get(1).get(9)));
+				skills.put(SkillType.ACROBATICS, Integer.valueOf(stats.get(1).get(10)));
+				skills.put(SkillType.FISHING, Integer.valueOf(stats.get(1).get(11)));
+			HashMap<Integer, ArrayList<String>> experience = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics, fishing FROM "+LoadProperties.MySQLtablePrefix+"experience WHERE user_id = " + id);
+				skillsXp.put(SkillType.TAMING, Integer.valueOf(experience.get(1).get(0)));
+				skillsXp.put(SkillType.MINING, Integer.valueOf(experience.get(1).get(1)));
+				skillsXp.put(SkillType.REPAIR, Integer.valueOf(experience.get(1).get(2)));
+				skillsXp.put(SkillType.WOODCUTTING, Integer.valueOf(experience.get(1).get(3)));
+				skillsXp.put(SkillType.UNARMED, Integer.valueOf(experience.get(1).get(4)));
+				skillsXp.put(SkillType.HERBALISM, Integer.valueOf(experience.get(1).get(5)));
+				skillsXp.put(SkillType.EXCAVATION, Integer.valueOf(experience.get(1).get(6)));
+				skillsXp.put(SkillType.ARCHERY, Integer.valueOf(experience.get(1).get(7)));
+				skillsXp.put(SkillType.SWORDS, Integer.valueOf(experience.get(1).get(8)));
+				skillsXp.put(SkillType.AXES, Integer.valueOf(experience.get(1).get(9)));
+				skillsXp.put(SkillType.ACROBATICS, Integer.valueOf(experience.get(1).get(10)));
+				skillsXp.put(SkillType.FISHING, Integer.valueOf(experience.get(1).get(11)));
+			return true;
+		}
+		else {
+			return false;
+		}		
+	}
+	public void addMySQLPlayer(Player p) {
+		Integer id = 0;
+		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"users (user, lastlogin) VALUES ('" + p.getName() + "'," + System.currentTimeMillis() / 1000 +")");
+		id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + p.getName() + "'");
+		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"cooldowns (user_id) VALUES ("+id+")");
+		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"spawn (user_id) VALUES ("+id+")");
+		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"skills (user_id) VALUES ("+id+")");
+		mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"experience (user_id) VALUES ("+id+")");
+		this.userid = id;
+	}
+	
+	public boolean load()
+	{
+        try {
+        	//Open the user file
+        	FileReader file = new FileReader(location);
+        	BufferedReader in = new BufferedReader(file);
+        	String line = "";
+        	while((line = in.readLine()) != null)
+        	{
+        		//Find if the line contains the player we want.
+        		String[] character = line.split(":");
+
+        		if(!character[0].equals(playername)){continue;}
+        		
+    			//Get Mining
+    			if(character.length > 1 && m.isInt(character[1]))
+    				skills.put(SkillType.MINING, Integer.valueOf(character[1]));
+    			//Myspawn
+    			if(character.length > 2)
+    				myspawn = character[2];
+    			//Party
+    			if(character.length > 3)
+    				party = character[3];
+    			//Mining XP
+    			if(character.length > 4 && m.isInt(character[4]))
+    				skillsXp.put(SkillType.MINING, Integer.valueOf(character[4]));
+    			if(character.length > 5 && m.isInt(character[5]))
+    				skills.put(SkillType.WOODCUTTING, Integer.valueOf(character[5]));
+    			if(character.length > 6 && m.isInt(character[6]))
+    				skillsXp.put(SkillType.WOODCUTTING, Integer.valueOf(character[6]));
+    			if(character.length > 7 && m.isInt(character[7]))
+    				skills.put(SkillType.REPAIR, Integer.valueOf(character[7]));
+    			if(character.length > 8 && m.isInt(character[8]))
+    				skills.put(SkillType.UNARMED,  Integer.valueOf(character[8]));
+    			if(character.length > 9 && m.isInt(character[9]))
+    				skills.put(SkillType.HERBALISM, Integer.valueOf(character[9]));
+    			if(character.length > 10 && m.isInt(character[10]))
+    				skills.put(SkillType.EXCAVATION, Integer.valueOf(character[10]));
+    			if(character.length > 11 && m.isInt(character[11]))
+    				skills.put(SkillType.ARCHERY, Integer.valueOf(character[11]));
+    			if(character.length > 12 && m.isInt(character[12]))
+    				skills.put(SkillType.SWORDS, Integer.valueOf(character[12]));
+    			if(character.length > 13 && m.isInt(character[13]))
+    				skills.put(SkillType.AXES, Integer.valueOf(character[13]));
+    			if(character.length > 14 && m.isInt(character[14]))
+    				skills.put(SkillType.ACROBATICS, Integer.valueOf(character[14]));
+    			if(character.length > 15 && m.isInt(character[15]))
+    				skillsXp.put(SkillType.REPAIR, Integer.valueOf(character[15]));
+    			if(character.length > 16 && m.isInt(character[16]))
+    				skillsXp.put(SkillType.UNARMED, Integer.valueOf(character[16]));
+    			if(character.length > 17 && m.isInt(character[17]))
+    				skillsXp.put(SkillType.HERBALISM, Integer.valueOf(character[17]));
+    			if(character.length > 18 && m.isInt(character[18]))
+    				skillsXp.put(SkillType.EXCAVATION, Integer.valueOf(character[18]));
+    			if(character.length > 19 && m.isInt(character[19]))
+    				skillsXp.put(SkillType.ARCHERY, Integer.valueOf(character[19]));
+    			if(character.length > 20 && m.isInt(character[20]))
+    				skillsXp.put(SkillType.SWORDS, Integer.valueOf(character[20]));
+    			if(character.length > 21 && m.isInt(character[21]))
+    				skillsXp.put(SkillType.AXES, Integer.valueOf(character[21]));
+    			if(character.length > 22 && m.isInt(character[22]))
+    				skillsXp.put(SkillType.ACROBATICS, Integer.valueOf(character[22]));
+    			if(character.length > 23 && m.isInt(character[23]))
+    				myspawnworld = character[23];
+    			if(character.length > 24 && m.isInt(character[24]))
+    				skills.put(SkillType.TAMING, Integer.valueOf(character[24]));
+    			if(character.length > 25 && m.isInt(character[25]))
+    				skillsXp.put(SkillType.TAMING, Integer.valueOf(character[25]));
+    			if(character.length > 26)
+    				berserkDATS = Integer.valueOf(character[26]);
+    			if(character.length > 27)
+    				gigaDrillBreakerDATS = Integer.valueOf(character[27]);
+    			if(character.length > 28)
+    				treeFellerDATS = Integer.valueOf(character[28]);
+    			if(character.length > 29)
+    				greenTerraDATS = Integer.valueOf(character[29]);
+    			if(character.length > 30)
+    				serratedStrikesDATS = Integer.valueOf(character[30]);
+    			if(character.length > 31)
+    				skullSplitterDATS = Integer.valueOf(character[31]);
+    			if(character.length > 32)
+    				superBreakerDATS = Integer.valueOf(character[32]);
+    			if(character.length > 33)
+    			{
+    				for(HUDType x : HUDType.values())
+    				{
+    					if(x.toString().equalsIgnoreCase(character[33]))
+    					{
+    						hud = x;
+    					}
+    				}
+    			}
+    			if(character.length > 34)
+    				skills.put(SkillType.FISHING, Integer.valueOf(character[34]));
+    			if(character.length > 35)
+    				skillsXp.put(SkillType.FISHING, Integer.valueOf(character[35]));
+            	in.close();
+    			return true;
+        	}
+        	in.close();
+        } catch (Exception e) {
+            log.log(Level.SEVERE, "Exception while reading "
+            		+ location + " (Are you sure you formatted it correctly?)", e);
+        }
+        return false;
+	}
+	
+    public void save()
+    {
+    	Long timestamp = System.currentTimeMillis()/1000; //Convert to seconds
+    	// if we are using mysql save to database
+    	if (LoadProperties.useMySQL) 
+    	{
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"huds SET "
+    				+" hudtype = '"+hud.toString()+"' WHERE user_id = "+this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET lastlogin = " + timestamp.intValue() + " WHERE id = " + this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET party = '"+this.party+"' WHERE id = " +this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + this.myspawnworld + "', x = " +getX()+", y = "+getY()+", z = "+getZ()+" WHERE user_id = "+this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"cooldowns SET "
+    				+" mining = "+(superBreakerDATS)
+    				+", woodcutting = "+(treeFellerDATS)
+    				+", unarmed = "+(berserkDATS)
+    				+", herbalism = "+(greenTerraDATS)
+    				+", excavation = "+(gigaDrillBreakerDATS)
+    				+", swords = " +(serratedStrikesDATS)
+    				+", axes = "+(skullSplitterDATS)
+    				+" WHERE user_id = "+this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"skills SET "
+    				+"  taming = "+skills.get(SkillType.TAMING)
+    				+", mining = "+skills.get(SkillType.MINING)
+    				+", repair = "+skills.get(SkillType.REPAIR)
+    				+", woodcutting = "+skills.get(SkillType.WOODCUTTING)
+    				+", unarmed = "+skills.get(SkillType.UNARMED)
+    				+", herbalism = "+skills.get(SkillType.HERBALISM)
+    				+", excavation = "+skills.get(SkillType.EXCAVATION)
+    				+", archery = " +skills.get(SkillType.ARCHERY)
+    				+", swords = " +skills.get(SkillType.SWORDS)
+    				+", axes = "+skills.get(SkillType.AXES)
+    				+", acrobatics = "+skills.get(SkillType.ACROBATICS)
+    				+", fishing = "+skills.get(SkillType.FISHING)
+    				+" WHERE user_id = "+this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"experience SET "
+    				+"  taming = "+skillsXp.get(SkillType.TAMING)
+    				+", mining = "+skillsXp.get(SkillType.MINING)
+    				+", repair = "+skillsXp.get(SkillType.REPAIR)
+    				+", woodcutting = "+skillsXp.get(SkillType.WOODCUTTING)
+    				+", unarmed = "+skillsXp.get(SkillType.UNARMED)
+    				+", herbalism = "+skillsXp.get(SkillType.HERBALISM)
+    				+", excavation = "+skillsXp.get(SkillType.EXCAVATION)
+    				+", archery = " +skillsXp.get(SkillType.ARCHERY)
+    				+", swords = " +skillsXp.get(SkillType.SWORDS)
+    				+", axes = "+skillsXp.get(SkillType.AXES)
+    				+", acrobatics = "+skillsXp.get(SkillType.ACROBATICS)
+    				+", fishing = "+skillsXp.get(SkillType.FISHING)
+    				+" WHERE user_id = "+this.userid);
+    	} else 
+    	{
+    		// otherwise save to flatfile
+	        try {
+	        	//Open the file
+	        	FileReader file = new FileReader(location);
+	            BufferedReader in = new BufferedReader(file);
+	            StringBuilder writer = new StringBuilder();
+	        	String line = "";
+	        	
+	        	//While not at the end of the file
+	        	while((line = in.readLine()) != null)
+	        	{
+	        		//Read the line in and copy it to the output it's not the player
+	        		//we want to edit
+	        		if(!line.split(":")[0].equalsIgnoreCase(playername))
+	        		{
+	                    writer.append(line).append("\r\n");
+	                    
+	                //Otherwise write the new player information
+	        		} else {
+	        			writer.append(playername + ":");
+	        			writer.append(skills.get(SkillType.MINING) + ":");
+	        			writer.append(myspawn + ":");
+	        			writer.append(party+":");
+	        			writer.append(skillsXp.get(SkillType.MINING) + ":");
+	        			writer.append(skills.get(SkillType.WOODCUTTING) + ":");
+	        			writer.append(skillsXp.get(SkillType.WOODCUTTING) + ":");
+	        			writer.append(skills.get(SkillType.REPAIR) + ":");
+	        			writer.append(skills.get(SkillType.UNARMED) + ":");
+	        			writer.append(skills.get(SkillType.HERBALISM) + ":");
+	        			writer.append(skills.get(SkillType.EXCAVATION) + ":");
+	        			writer.append(skills.get(SkillType.ARCHERY) + ":");
+	        			writer.append(skills.get(SkillType.SWORDS) + ":");
+	        			writer.append(skills.get(SkillType.AXES) + ":");
+	        			writer.append(skills.get(SkillType.ACROBATICS) + ":");
+	        			writer.append(skillsXp.get(SkillType.REPAIR) + ":");
+	        			writer.append(skillsXp.get(SkillType.UNARMED) + ":");
+	        			writer.append(skillsXp.get(SkillType.HERBALISM) + ":");
+	        			writer.append(skillsXp.get(SkillType.EXCAVATION) + ":");
+	        			writer.append(skillsXp.get(SkillType.ARCHERY) + ":");
+	        			writer.append(skillsXp.get(SkillType.SWORDS) + ":");
+	        			writer.append(skillsXp.get(SkillType.AXES) + ":");
+	        			writer.append(skillsXp.get(SkillType.ACROBATICS) + ":");
+	        			writer.append(myspawnworld+":");
+	        			writer.append(skills.get(SkillType.TAMING) + ":");
+	        			writer.append(skillsXp.get(SkillType.TAMING) + ":");
+	        			//Need to store the DATS of abilities nao
+	        			//Berserk, Gigadrillbreaker, Tree Feller, Green Terra, Serrated Strikes, Skull Splitter, Super Breaker
+	        			writer.append(String.valueOf(berserkDATS)+":");
+	        			writer.append(String.valueOf(gigaDrillBreakerDATS)+":");
+	        			writer.append(String.valueOf(treeFellerDATS)+":");
+	        			writer.append(String.valueOf(greenTerraDATS)+":");
+	        			writer.append(String.valueOf(serratedStrikesDATS)+":");
+	        			writer.append(String.valueOf(skullSplitterDATS)+":");
+	        			writer.append(String.valueOf(superBreakerDATS)+":");
+	        			writer.append(hud.toString()+":");
+	        			writer.append(skills.get(SkillType.FISHING) + ":");
+	        			writer.append(skillsXp.get(SkillType.FISHING) + ":");
+	        			writer.append("\r\n");                   			
+	        		}
+	        	}
+	        	in.close();
+	        	//Write the new file
+	            FileWriter out = new FileWriter(location);
+	            out.write(writer.toString());
+	            out.close();
+	        } catch (Exception e) {
+	                log.log(Level.SEVERE, "Exception while writing to " + location + " (Are you sure you formatted it correctly?)", e);
+	        }
+    	}
+	}
+    public void addPlayer()
+    {
+        try {
+        	//Open the file to write the player
+        	FileWriter file = new FileWriter(location, true);
+            BufferedWriter out = new BufferedWriter(file);
+            
+            //Add the player to the end
+            out.append(playername + ":");
+            out.append(0 + ":"); //mining
+            out.append(myspawn+":");
+            out.append(party+":");
+            out.append(0+":"); //XP
+            out.append(0+":"); //woodcutting
+            out.append(0+":"); //woodCuttingXP
+            out.append(0+":"); //repair
+            out.append(0+":"); //unarmed
+            out.append(0+":"); //herbalism
+            out.append(0+":"); //excavation
+            out.append(0+":"); //archery
+            out.append(0+":"); //swords
+            out.append(0+":"); //axes
+            out.append(0+":"); //acrobatics
+            out.append(0+":"); //repairXP
+            out.append(0+":"); //unarmedXP
+            out.append(0+":"); //herbalismXP
+            out.append(0+":"); //excavationXP
+            out.append(0+":"); //archeryXP
+            out.append(0+":"); //swordsXP
+            out.append(0+":"); //axesXP
+            out.append(0+":"); //acrobaticsXP
+            out.append(myspawnworld+":");
+            out.append(0+":"); //taming
+            out.append(0+":"); //tamingXP
+            out.append(0+":"); //DATS
+            out.append(0+":"); //DATS
+            out.append(0+":"); //DATS
+            out.append(0+":"); //DATS
+            out.append(0+":"); //DATS
+            out.append(0+":"); //DATS
+            out.append(0+":"); //DATS
+            out.append(LoadProperties.defaulthud.toString()+":");//HUD
+            out.append(0+":"); //Fishing
+            out.append(0+":"); //FishingXP
+
+            //Add more in the same format as the line above
+            
+			out.newLine();
+			out.close();
+        } catch (Exception e) {
+                log.log(Level.SEVERE, "Exception while writing to " + location + " (Are you sure you formatted it correctly?)", e);
+        }
+    }
+    public void togglePartyHUD()
+    {
+    	partyhud = !partyhud;
+    }
+    public boolean getPartyHUD()
+    {
+    	return partyhud;
+    }
+    public void toggleSpoutEnabled()
+    {
+    	spoutcraft = !spoutcraft;
+    }
+    
+    public boolean isFilling()
+    {
+    	return filling;
+    }
+    public void toggleFilling()
+    {
+    	filling = !filling;
+    }
+    public HUDType getHUDType()
+    {
+    	return hud;
+    }
+    public void setHUDType(HUDType type)
+    {
+    	hud = type;
+    	save();
+    }
+    public boolean getXpBarLocked()
+    {
+    	return xpbarlocked;
+    }
+    public void toggleXpBarLocked()
+    {
+    	xpbarlocked = !xpbarlocked;
+    }
+    public int getXpBarInc()
+    {
+    	return xpbarinc;
+    }
+    public void setXpBarInc(int newvalue)
+    {
+    	xpbarinc = newvalue;
+    }
+    public void setSkillLock(SkillType newvalue)
+    {
+    	skillLock = newvalue;
+    }
+    public SkillType getSkillLock()
+    {
+    	return skillLock;
+    }
+    public void setLastGained(SkillType newvalue)
+    {
+    	lastgained = newvalue;
+    }
+    public SkillType getLastGained()
+    {
+    	return lastgained;
+    }
+    
+    public boolean getAdminChatMode() {return adminChatMode;}
+    public boolean getPartyChatMode() {return partyChatMode;}
+    
+    public boolean getGodMode() {return godMode;}
+    
+    public void togglePlacedAnvil()
+    {
+    	placedAnvil = !placedAnvil;
+    }
+    public Boolean getPlacedAnvil()
+    {
+    	return placedAnvil;
+    }
+    public void toggleAdminChat()
+    {
+    	adminChatMode = !adminChatMode;
+    }
+	
+    public void toggleGodMode()
+    {
+    	godMode = !godMode;
+    }
+    
+    public void togglePartyChat()
+    {
+    	partyChatMode = !partyChatMode;
+    }
+    
+    public void setMana(int newvalue)
+    {
+    	mana = newvalue;
+    }
+
+    public int getCurrentMana()
+    {
+    	return mana;
+    }
+    public void setDyeChanged(Boolean bool)
+    {
+    	dyeChanged = bool;
+    }
+    public boolean getDyeChanged()
+    {
+    	return dyeChanged;
+    }
+    public void setBlueDyeCycle(int newvalue)
+    {
+    	blueDyeCycle = newvalue;
+    }
+    public int getBlueDyeCycle()
+    {
+    	return blueDyeCycle;
+    }
+    public void setBlueDyeCycleSel(int newvalue)
+    {
+    	blueDyeCycleSel = newvalue;
+    }
+    public int getBlueDyeCycleSel()
+    {
+    	return blueDyeCycleSel;
+    }
+    public void setGreenDyeCycle(int newvalue)
+    {
+    	greenDyeCycle = newvalue;
+    }
+    public int getGreenDyeCycle()
+    {
+    	return greenDyeCycle;
+    }
+    public void setGreenDyeCycleSel(int newvalue)
+    {
+    	greenDyeCycleSel = newvalue;
+    }
+    public int getGreenDyeCycleSel()
+    {
+    	return greenDyeCycleSel;
+    }
+
+	public boolean isPlayer(String player)
+	{
+		return player.equals(playername);
+	}
+	public boolean getPartyChatOnlyToggle(){return partyChatOnly;}
+	public void togglePartyChatOnly(){partyChatOnly = !partyChatOnly;}
+	public boolean getAbilityUse(){
+		return abilityuse;
+	}
+	public void toggleAbilityUse()
+	{
+		abilityuse = !abilityuse;
+	}
+	public long getMySpawnATS(){
+		return mySpawnATS;
+	}
+	public void setMySpawnATS(long newvalue)
+	{
+		mySpawnATS = (int) (newvalue/1000);
+	}
+	public void decreaseBleedTicks()
+	{
+		bleedticks--;
+	}
+	public Integer getBleedTicks(){
+		return bleedticks;
+	}
+	public void setBleedTicks(Integer newvalue){
+		bleedticks = newvalue;
+	}
+	public void addBleedTicks(Integer newvalue){
+		bleedticks+=newvalue;
+	}
+	/*
+	 * EXPLOIT PREVENTION
+	 */
+	public long getRespawnATS() {return respawnATS;}
+	public void setRespawnATS(long newvalue) {respawnATS = (int) (newvalue/1000);}
+	
+	/*
+	 * HOE PREPARATION
+	 */
+	public boolean getHoePreparationMode(){
+		return hoePreparationMode;
+	}
+	public void setHoePreparationMode(Boolean bool){
+		hoePreparationMode = bool;
+	}
+	public long getHoePreparationATS(){
+		return hoePreparationATS;
+	}
+	public void setHoePreparationATS(long newvalue){
+		hoePreparationATS = (int) (newvalue/1000);
+	}
+	
+	/*
+	 * SWORDS PREPARATION
+	 */
+	public boolean getSwordsPreparationMode(){
+		return swordsPreparationMode;
+	}
+	public void setSwordsPreparationMode(Boolean bool){
+		swordsPreparationMode = bool;
+	}
+	public long getSwordsPreparationATS(){
+		return swordsPreparationATS;
+	}
+	public void setSwordsPreparationATS(long newvalue){
+		swordsPreparationATS = (int) (newvalue/1000);
+	}
+	/*
+	 * SHOVEL PREPARATION
+	 */
+	public boolean getShovelPreparationMode(){
+		return shovelPreparationMode;
+	}
+	public void setShovelPreparationMode(Boolean bool){
+		shovelPreparationMode = bool;
+	}
+	public long getShovelPreparationATS(){
+		return shovelPreparationATS;
+	}
+	public void setShovelPreparationATS(long newvalue){
+		shovelPreparationATS = (int) (newvalue/1000);
+	}
+	/*
+	 * FISTS PREPARATION
+	 */
+	public boolean getFistsPreparationMode(){
+		return fistsPreparationMode;
+	}
+	public void setFistsPreparationMode(Boolean bool){
+		fistsPreparationMode = bool;
+	}
+	public long getFistsPreparationATS(){
+		return fistsPreparationATS;
+	}
+	public void setFistsPreparationATS(long newvalue){
+		fistsPreparationATS = (int) (newvalue/1000);
+	}
+	/*
+	 * AXE PREPARATION
+	 */
+	public boolean getAxePreparationMode(){
+		return axePreparationMode;
+	}
+	public void setAxePreparationMode(Boolean bool){
+		axePreparationMode = bool;
+	}
+	public long getAxePreparationATS(){
+		return axePreparationATS;
+	}
+	public void setAxePreparationATS(long newvalue){
+		axePreparationATS = (int) (newvalue/1000);
+	}
+	/*
+	 * PICKAXE PREPARATION
+	 */
+	public boolean getPickaxePreparationMode(){
+		return pickaxePreparationMode;
+	}
+	public void setPickaxePreparationMode(Boolean bool){
+		pickaxePreparationMode = bool;
+	}
+	public long getPickaxePreparationATS(){
+		return pickaxePreparationATS;
+	}
+	public void setPickaxePreparationATS(long newvalue){
+		pickaxePreparationATS = (int) (newvalue/1000);
+	}
+	/*
+	 * GREEN TERRA MODE
+	 */
+	public boolean getGreenTerraInformed() {return greenTerraInformed;}
+	public void setGreenTerraInformed(Boolean bool){
+		greenTerraInformed = bool;
+	}
+	public boolean getGreenTerraMode(){
+		return greenTerraMode;
+	}
+	public void setGreenTerraMode(Boolean bool){
+		greenTerraMode = bool;
+	}
+	public long getGreenTerraActivatedTimeStamp() {return greenTerraATS;}
+	public void setGreenTerraActivatedTimeStamp(Long newvalue){
+		greenTerraATS = (int) (newvalue/1000);
+	}
+	public long getGreenTerraDeactivatedTimeStamp() {return greenTerraDATS;}
+	public void setGreenTerraDeactivatedTimeStamp(Long newvalue){
+		greenTerraDATS = (int) (newvalue/1000);
+		save();
+	}
+	/*
+	 * BERSERK MODE
+	 */
+	public boolean getBerserkInformed() {return berserkInformed;}
+	public void setBerserkInformed(Boolean bool){
+		berserkInformed = bool;
+	}
+	public boolean getBerserkMode(){
+		return berserkMode;
+	}
+	public void setBerserkMode(Boolean bool){
+		berserkMode = bool;
+	}
+	public long getBerserkActivatedTimeStamp() {return berserkATS;}
+	public void setBerserkActivatedTimeStamp(Long newvalue){
+		berserkATS = (int) (newvalue/1000);
+	}
+	public long getBerserkDeactivatedTimeStamp() {return berserkDATS;}
+	public void setBerserkDeactivatedTimeStamp(Long newvalue){
+		berserkDATS = (int) (newvalue/1000);
+		save();
+	}
+	/*
+	 * SKULL SPLITTER
+	 */
+	public boolean getSkullSplitterInformed() {return skullSplitterInformed;}
+	public void setSkullSplitterInformed(Boolean bool){
+		skullSplitterInformed = bool;
+	}
+	public boolean getSkullSplitterMode(){
+		return skullSplitterMode;
+	}
+	public void setSkullSplitterMode(Boolean bool){
+		skullSplitterMode = bool;
+	}
+	public long getSkullSplitterActivatedTimeStamp() {return skullSplitterATS;}
+	public void setSkullSplitterActivatedTimeStamp(Long newvalue){
+		skullSplitterATS = (int) (newvalue/1000);
+	}
+	public long getSkullSplitterDeactivatedTimeStamp() {return skullSplitterDATS;}
+	public void setSkullSplitterDeactivatedTimeStamp(Long newvalue){
+		skullSplitterDATS = (int) (newvalue/1000);
+		save();
+	}
+	/*
+	 * SERRATED STRIKES
+	 */
+	public boolean getSerratedStrikesInformed() {return serratedStrikesInformed;}
+	public void setSerratedStrikesInformed(Boolean bool){
+		serratedStrikesInformed = bool;
+	}
+	public boolean getSerratedStrikesMode(){
+		return serratedStrikesMode;
+	}
+	public void setSerratedStrikesMode(Boolean bool){
+		serratedStrikesMode = bool;
+	}
+	public long getSerratedStrikesActivatedTimeStamp() {return serratedStrikesATS;}
+	public void setSerratedStrikesActivatedTimeStamp(Long newvalue){
+		serratedStrikesATS = (int) (newvalue/1000);
+	}
+	public long getSerratedStrikesDeactivatedTimeStamp() {return serratedStrikesDATS;}
+	public void setSerratedStrikesDeactivatedTimeStamp(Long newvalue){
+		serratedStrikesDATS = (int) (newvalue/1000);
+		save();
+	}
+	/*
+	 * GIGA DRILL BREAKER
+	 */
+	public boolean getGigaDrillBreakerInformed() {return gigaDrillBreakerInformed;}
+	public void setGigaDrillBreakerInformed(Boolean bool){
+		gigaDrillBreakerInformed = bool;
+	}
+	public boolean getGigaDrillBreakerMode(){
+		return gigaDrillBreakerMode;
+	}
+	public void setGigaDrillBreakerMode(Boolean bool){
+		gigaDrillBreakerMode = bool;
+	}
+	public long getGigaDrillBreakerActivatedTimeStamp() {return gigaDrillBreakerATS;}
+	public void setGigaDrillBreakerActivatedTimeStamp(Long newvalue){
+		gigaDrillBreakerATS = (int) (newvalue/1000);
+	}
+	public long getGigaDrillBreakerDeactivatedTimeStamp() {return gigaDrillBreakerDATS;}
+	public void setGigaDrillBreakerDeactivatedTimeStamp(Long newvalue){
+		gigaDrillBreakerDATS = (int) (newvalue/1000);
+		save();
+	}
+	/*
+	 * TREE FELLER STUFF
+	 */
+	public boolean getTreeFellerInformed() {return treeFellerInformed;}
+	public void setTreeFellerInformed(Boolean bool){
+		treeFellerInformed = bool;
+	}
+	public boolean getTreeFellerMode(){
+		return treeFellerMode;
+	}
+	public void setTreeFellerMode(Boolean bool){
+		treeFellerMode = bool;
+	}
+	public long getTreeFellerActivatedTimeStamp() {return treeFellerATS;}
+	public void setTreeFellerActivatedTimeStamp(Long newvalue){
+		treeFellerATS = (int) (newvalue/1000);
+	}
+	public long getTreeFellerDeactivatedTimeStamp() {return treeFellerDATS;}
+	public void setTreeFellerDeactivatedTimeStamp(Long newvalue){
+		treeFellerDATS = (int) (newvalue/1000);
+		save();
+	}
+	/*
+	 * MINING
+	 */
+	public boolean getSuperBreakerInformed() {return superBreakerInformed;}
+	public void setSuperBreakerInformed(Boolean bool){
+		superBreakerInformed = bool;
+	}
+	public boolean getSuperBreakerMode(){
+		return superBreakerMode;
+	}
+	public void setSuperBreakerMode(Boolean bool){
+		superBreakerMode = bool;
+	}
+	public long getSuperBreakerActivatedTimeStamp() {return superBreakerATS;}
+	public void setSuperBreakerActivatedTimeStamp(Long newvalue){
+		superBreakerATS = (int) (newvalue/1000);
+	}
+	public long getSuperBreakerDeactivatedTimeStamp() {return superBreakerDATS;}
+	public void setSuperBreakerDeactivatedTimeStamp(Long newvalue){
+		superBreakerDATS = (int) (newvalue/1000);
+		save();
+	}
+	public long getRecentlyHurt(){
+		return recentlyHurt;
+	}
+	public void setRecentlyHurt(long newvalue){
+		recentlyHurt = (int) (newvalue/1000);
+	}
+	public void skillUp(SkillType skillType, int newvalue)
+	{
+		skills.put(skillType, skills.get(skillType)+newvalue);
+		save();
+	}
+	public Integer getSkillLevel(SkillType skillType)
+	{
+		return skills.get(skillType);
+	}
+	public Integer getSkillXpLevel(SkillType skillType)
+	{
+		return skillsXp.get(skillType);
+	}
+	public void resetSkillXp(SkillType skillType)
+	{
+		skills.put(skillType, 0);
+	}
+	
+	/**
+	 * Adds XP to the player, this ignores skill modifiers
+	 * @param skillType The skill to add XP to
+	 * @param newvalue The amount of XP to add
+	 */
+	public void addXPOverride(SkillType skillType, int newvalue)
+	{
+		if(skillType == SkillType.ALL)
+		{
+			for(SkillType x : SkillType.values())
+			{
+				if(x == SkillType.ALL)
+					continue;
+				skillsXp.put(x, skillsXp.get(x)+newvalue);
+			}
+		} else {
+			int xp = newvalue;
+			
+			xp=xp*LoadProperties.xpGainMultiplier;
+			skillsXp.put(skillType, skillsXp.get(skillType)+xp);
+			lastgained = skillType;
+		}
+	}
+	/**
+	 * Adds XP to the player, this is affected by skill modifiers
+	 * @param skillType The skill to add XP to
+	 * @param newvalue The amount of XP to add
+	 */
+	public void addXP(SkillType skillType, int newvalue, Player thisplayer)
+	{
+		if(System.currentTimeMillis() < ((xpGainATS*1000)+250) || thisplayer.getGameMode() == GameMode.CREATIVE)
+			return;
+		
+		//Setup a timestamp of when xp was given
+		xpGainATS = (int) (System.currentTimeMillis()/1000);
+		
+		double bonusModifier = 0;
+		String leaderName = "";
+		
+		if(inParty())
+		{
+			for(Player x : Party.getInstance().getPartyMembers(thisplayer))
+			{
+				if(x.isOnline() && !x.getName().equals(thisplayer.getName()) && Party.getInstance().isPartyLeader(x.getName(), this.getParty()))
+				{
+					leaderName = x.getName();
+					if(m.getDistance(thisplayer.getLocation(), x.getLocation()) < 25)
+					{
+						PlayerProfile PartyLeader = Users.getProfile(x);
+						if(PartyLeader.getSkillLevel(skillType) >= this.getSkillLevel(skillType))
+						{
+							int leaderLevel = PartyLeader.getSkillLevel(skillType); 
+							int difference = leaderLevel - this.getSkillLevel(skillType);
+							bonusModifier = (difference*0.75D)/100D;
+						}
+					}
+				}
+			}
+		}
+		if(skillType == SkillType.ALL)
+		{
+			for(SkillType x : SkillType.values())
+			{
+				if(x == SkillType.ALL)
+					continue;
+				skillsXp.put(x, skillsXp.get(x)+newvalue);
+			}
+		} else {
+			int xp = newvalue;
+			
+			switch(skillType)
+			{
+			case TAMING:
+				xp=(int) (xp/LoadProperties.tamingxpmodifier);
+				break;
+			case MINING:
+				xp=(int) (xp/LoadProperties.miningxpmodifier);
+				break;
+			case WOODCUTTING:
+				xp=(int) (xp/LoadProperties.woodcuttingxpmodifier);
+				break;
+			case REPAIR:
+				xp=(int) (xp/LoadProperties.repairxpmodifier);
+				break;
+			case HERBALISM:
+				xp=(int) (xp/LoadProperties.herbalismxpmodifier);
+				break;
+			case ACROBATICS:
+				xp=(int) (xp/LoadProperties.acrobaticsxpmodifier);
+				break;
+			case SWORDS:
+				xp=(int) (xp/LoadProperties.swordsxpmodifier);
+				break;
+			case ARCHERY:
+				xp=(int) (xp/LoadProperties.archeryxpmodifier);
+				break;
+			case UNARMED:
+				xp=(int) (xp/LoadProperties.unarmedxpmodifier);
+				break;
+			case EXCAVATION:
+				xp=(int) (xp/LoadProperties.excavationxpmodifier);
+				break;
+			case AXES:
+				xp=(int) (xp/LoadProperties.axesxpmodifier);
+				break;
+			}
+			xp=xp*LoadProperties.xpGainMultiplier;
+			
+			if(bonusModifier > 0)
+			{
+				if(bonusModifier >= 2)
+					bonusModifier = 2;
+				
+				double trueBonus = bonusModifier * xp;
+				double oldxp = xp;
+				xp+=trueBonus;
+				double percent = (trueBonus/oldxp)*100;
+				thisplayer.sendMessage(ChatColor.GREEN+"XP: "+oldxp+" Bonus XP: "+trueBonus+" Total: "+xp+ChatColor.GOLD+" [Master: "+leaderName+" " +" +"+(int)percent+"%]");
+			}
+			skillsXp.put(skillType, skillsXp.get(skillType)+xp);
+			lastgained = skillType;
+		}
+		//save();
+	}
+	
+	public void removeXP(SkillType skillType, int newvalue)
+	{
+		if(skillType == SkillType.ALL)
+		{
+			skillsXp.put(SkillType.TAMING, skillsXp.get(SkillType.TAMING)-newvalue);
+			skillsXp.put(SkillType.MINING, skillsXp.get(SkillType.MINING)-newvalue);
+			skillsXp.put(SkillType.WOODCUTTING, skillsXp.get(SkillType.WOODCUTTING)-newvalue);
+			skillsXp.put(SkillType.REPAIR, skillsXp.get(SkillType.REPAIR)-newvalue);
+			skillsXp.put(SkillType.HERBALISM, skillsXp.get(SkillType.HERBALISM)-newvalue);
+			skillsXp.put(SkillType.ACROBATICS, skillsXp.get(SkillType.ACROBATICS)-newvalue);
+			skillsXp.put(SkillType.SWORDS, skillsXp.get(SkillType.SWORDS)-newvalue);
+			skillsXp.put(SkillType.ARCHERY, skillsXp.get(SkillType.ARCHERY)-newvalue);
+			skillsXp.put(SkillType.UNARMED, skillsXp.get(SkillType.UNARMED)-newvalue);
+			skillsXp.put(SkillType.EXCAVATION, skillsXp.get(SkillType.EXCAVATION)-newvalue);
+			skillsXp.put(SkillType.AXES, skillsXp.get(SkillType.AXES)-newvalue);
+			skillsXp.put(SkillType.FISHING, skillsXp.get(SkillType.FISHING)-newvalue);
+		} else {
+			skillsXp.put(skillType, skillsXp.get(skillType)-newvalue);
+		}
+		//save();
+	}
+	public void acceptInvite()
+	{
+		party = invite;
+		invite = "";
+	}
+	public void modifyInvite(String invitename)
+	{
+		invite = invitename;
+	}
+	public String getInvite() { return invite; }
+	
+	public void modifyskill(SkillType skillType, int newvalue)
+	{
+		if(skillType == SkillType.ALL)
+		{
+			skills.put(SkillType.TAMING, newvalue);
+			skills.put(SkillType.MINING, newvalue);
+			skills.put(SkillType.WOODCUTTING, newvalue);
+			skills.put(SkillType.REPAIR, newvalue);
+			skills.put(SkillType.HERBALISM, newvalue);
+			skills.put(SkillType.ACROBATICS, newvalue);
+			skills.put(SkillType.SWORDS, newvalue);
+			skills.put(SkillType.ARCHERY, newvalue);
+			skills.put(SkillType.UNARMED, newvalue);
+			skills.put(SkillType.EXCAVATION, newvalue);
+			skills.put(SkillType.AXES, newvalue);
+			skills.put(SkillType.FISHING, newvalue);
+			
+			skillsXp.put(SkillType.TAMING, 0);
+			skillsXp.put(SkillType.MINING, 0);
+			skillsXp.put(SkillType.WOODCUTTING, 0);
+			skillsXp.put(SkillType.REPAIR, 0);
+			skillsXp.put(SkillType.HERBALISM, 0);
+			skillsXp.put(SkillType.ACROBATICS, 0);
+			skillsXp.put(SkillType.SWORDS, 0);
+			skillsXp.put(SkillType.ARCHERY, 0);
+			skillsXp.put(SkillType.UNARMED, 0);
+			skillsXp.put(SkillType.EXCAVATION, 0);
+			skillsXp.put(SkillType.AXES, 0);
+			skillsXp.put(SkillType.FISHING, 0);
+		} else {
+			skills.put(skillType, newvalue);
+			skillsXp.put(skillType, newvalue);
+		}
+		save();
+	}
+	public Integer getXpToLevel(SkillType skillType)
+	{
+		return (int) ((1020+(skills.get(skillType) *  20)));
+	}
+    
+	//Store the player's party
+    public void setParty(String newParty)
+    {
+    	party = newParty;
+    	save();
+    }
+    //Retrieve the player's party
+    public String getParty() {return party;}
+            //Remove party
+    public void removeParty() {
+    	party = null;
+    	save();
+    }
+    //Retrieve whether or not the player is in a party
+    public boolean inParty() 
+    {
+    	if(party != null && !party.equals("") && !party.equals("null")){
+    		return true;
+    	} else {
+    		return false;
+    	}
+    }
+    
+    //Retrieve whether or not the player has an invite
+    public boolean hasPartyInvite() {
+    	if(invite != null && !invite.equals("") && !invite.equals("null")){
+    		return true;
+    	} else {
+    		return false;
+    	}
+    }
+    public String getMySpawnWorld()
+    {
+    	if(myspawnworld != null && !myspawnworld.equals("") && !myspawnworld.equals("null")){
+    		return myspawnworld;
+    	} else {
+    		return Bukkit.getServer().getWorlds().get(0).toString();
+    	}
+    }
+    //Save a users spawn location
+    public void setMySpawn(double x, double y, double z, String myspawnworldlocation){
+    	myspawn = x+","+y+","+z;
+    	myspawnworld = myspawnworldlocation;
+    	save();
+    }
+    public String getX(){
+    	if(myspawn != null)
+    	{
+    	String[] split = myspawn.split(",");
+    	return split[0];
+    	} 
+    	else
+    		return null;
+    }
+    public String getY(){
+    	if(myspawn != null)
+    	{
+    	String[] split = myspawn.split(",");
+    	return split[1];
+    	} 
+    	else
+    		return null;
+    }
+    public String getZ(){
+    	if(myspawn != null)
+    	{
+    	String[] split = myspawn.split(",");
+    	return split[2];
+    	} 
+    	else
+    		return null;
+    }
+    public boolean isDead(){
+    	return dead;
+    }
+    public Location getMySpawn(Player player)
+    {
+    	Location loc = null;
+    	if(myspawn != null)
+    	{
+    		if(m.isDouble(getX()) && m.isDouble(getY()) && m.isDouble(getZ()))
+    				loc = new Location(player.getWorld(),(Double.parseDouble(getX())), Double.parseDouble(getY()), Double.parseDouble(getZ()));
+    		else
+    			return null;
+    	} else
+    		return null;
+    	
+    	loc.setYaw(0);
+    	loc.setPitch(0);
+    	if(loc.getX() != 0 && loc.getY() != 0 && loc.getZ() != 0 && loc.getWorld() != null)
+    	{
+    		if(Bukkit.getServer().getWorld(this.getMySpawnWorld()) != null)
+    			loc.setWorld(Bukkit.getServer().getWorld(this.getMySpawnWorld()));
+    		else
+    			loc.setWorld(Bukkit.getServer().getWorlds().get(0));
+    		return loc;
+    	} else {
+    		return null;
+    	}
+    }
+}	

+ 22 - 22
src/com/gmail/nossr50/datatypes/PlayerStat.java → src/main/java/com/gmail/nossr50/datatypes/PlayerStat.java

@@ -1,23 +1,23 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-public class PlayerStat 
-{
-	public String name;
-	public int statVal = 0;
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+public class PlayerStat 
+{
+	public String name;
+	public int statVal = 0;
 }

+ 36 - 36
src/com/gmail/nossr50/datatypes/SkillType.java → src/main/java/com/gmail/nossr50/datatypes/SkillType.java

@@ -1,36 +1,36 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-public enum SkillType 
-{
-	ACROBATICS,
-	ALCHEMY,
-	ALL, //This one is just for convenience
-	ARCHERY,
-	AXES,
-	EXCAVATION,
-	ENCHANTING,
-	FISHING,
-	HERBALISM,
-	MINING,
-	REPAIR,
-	SWORDS,
-	TAMING,
-	UNARMED,
-	WOODCUTTING;
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+public enum SkillType 
+{
+	ACROBATICS,
+	ALCHEMY,
+	ALL, //This one is just for convenience
+	ARCHERY,
+	AXES,
+	EXCAVATION,
+	ENCHANTING,
+	FISHING,
+	HERBALISM,
+	MINING,
+	REPAIR,
+	SWORDS,
+	TAMING,
+	UNARMED,
+	WOODCUTTING;
+}

+ 55 - 55
src/com/gmail/nossr50/datatypes/Tree.java → src/main/java/com/gmail/nossr50/datatypes/Tree.java

@@ -1,55 +1,55 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-import java.util.ArrayList;
-
-import com.gmail.nossr50.datatypes.PlayerStat;
-
-public class Tree {
-
-	TreeNode root = null;
-
-	public Tree(){}
-
-	public void add(String p, int in)
-	{
-		if(root == null){
-			root = new TreeNode(p, in);
-		}
-		else
-			root.add(p,in);
-	}
-	
-	public PlayerStat[] inOrder()
-	{
-		if(root != null){
-			ArrayList<PlayerStat> order = root.inOrder(new ArrayList<PlayerStat>());
-			return order.toArray(new PlayerStat[order.size()]);	
-		} else {
-			//Throw some dummy info in case the users file is empty
-			//It's not a good fix but its better than rewriting the whole system
-			ArrayList<PlayerStat> x = new ArrayList<PlayerStat>();
-			PlayerStat y = new PlayerStat();
-			y.name = "$mcMMO_DummyInfo";
-			y.statVal = 0;
-			x.add(y);
-			return x.toArray(new PlayerStat[x.size()]);
-		}
-	}
-
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+import java.util.ArrayList;
+
+import com.gmail.nossr50.datatypes.PlayerStat;
+
+public class Tree {
+
+	TreeNode root = null;
+
+	public Tree(){}
+
+	public void add(String p, int in)
+	{
+		if(root == null){
+			root = new TreeNode(p, in);
+		}
+		else
+			root.add(p,in);
+	}
+	
+	public PlayerStat[] inOrder()
+	{
+		if(root != null){
+			ArrayList<PlayerStat> order = root.inOrder(new ArrayList<PlayerStat>());
+			return order.toArray(new PlayerStat[order.size()]);	
+		} else {
+			//Throw some dummy info in case the users file is empty
+			//It's not a good fix but its better than rewriting the whole system
+			ArrayList<PlayerStat> x = new ArrayList<PlayerStat>();
+			PlayerStat y = new PlayerStat();
+			y.name = "$mcMMO_DummyInfo";
+			y.statVal = 0;
+			x.add(y);
+			return x.toArray(new PlayerStat[x.size()]);
+		}
+	}
+
+}

+ 65 - 65
src/com/gmail/nossr50/datatypes/TreeNode.java → src/main/java/com/gmail/nossr50/datatypes/TreeNode.java

@@ -1,65 +1,65 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes;
-
-import java.util.ArrayList;
-
-import com.gmail.nossr50.datatypes.PlayerStat;
-
-public class TreeNode 
-{
-	TreeNode left = null
-	, right = null;
-	PlayerStat ps = new PlayerStat();
-
-	public TreeNode(String p, int in) {ps.statVal = in; ps.name = p;}
-
-	public void add (String p, int in) 
-	{
-		if (in >= ps.statVal)
-		{
-			if (left == null)
-				left = new TreeNode(p,in);
-			else
-				left.add(p, in);
-		}
-		else if(in < ps.statVal)
-		{
-		if (right == null)
-			right = new TreeNode(p,in);
-		else
-			right.add(p, in);
-		}
-	}
-	
-	public ArrayList<PlayerStat> inOrder(ArrayList<PlayerStat> a)
-	{
-		//if left node is not null than assign arrayList(a) to left.inOrder()
-		
-		//GOES THROUGH THE ENTIRE LEFT BRANCH AND GRABS THE GREATEST NUMBER
-		
-		if(left != null)
-			a = left.inOrder(a);
-	
-		a.add(ps);
-	
-		if(right != null)
-			a = right.inOrder(a);
-	
-		return a;
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes;
+
+import java.util.ArrayList;
+
+import com.gmail.nossr50.datatypes.PlayerStat;
+
+public class TreeNode 
+{
+	TreeNode left = null
+	, right = null;
+	PlayerStat ps = new PlayerStat();
+
+	public TreeNode(String p, int in) {ps.statVal = in; ps.name = p;}
+
+	public void add (String p, int in) 
+	{
+		if (in >= ps.statVal)
+		{
+			if (left == null)
+				left = new TreeNode(p,in);
+			else
+				left.add(p, in);
+		}
+		else if(in < ps.statVal)
+		{
+		if (right == null)
+			right = new TreeNode(p,in);
+		else
+			right.add(p, in);
+		}
+	}
+	
+	public ArrayList<PlayerStat> inOrder(ArrayList<PlayerStat> a)
+	{
+		//if left node is not null than assign arrayList(a) to left.inOrder()
+		
+		//GOES THROUGH THE ENTIRE LEFT BRANCH AND GRABS THE GREATEST NUMBER
+		
+		if(left != null)
+			a = left.inOrder(a);
+	
+		a.add(ps);
+	
+		if(right != null)
+			a = right.inOrder(a);
+	
+		return a;
+	}
+}

+ 28 - 28
src/com/gmail/nossr50/datatypes/buttons/ButtonEscape.java → src/main/java/com/gmail/nossr50/datatypes/buttons/ButtonEscape.java

@@ -1,29 +1,29 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes.buttons;
-
-import org.getspout.spoutapi.gui.GenericButton;
-
-public class ButtonEscape extends GenericButton
-{
-	public ButtonEscape()
-	{
-		this.setText("EXIT");
-		this.setWidth(60).setHeight(20);
-		this.setDirty(true);
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes.buttons;
+
+import org.getspout.spoutapi.gui.GenericButton;
+
+public class ButtonEscape extends GenericButton
+{
+	public ButtonEscape()
+	{
+		this.setText("EXIT");
+		this.setWidth(60).setHeight(20);
+		this.setDirty(true);
+	}
 }

+ 36 - 36
src/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java → src/main/java/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java

@@ -1,37 +1,37 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes.buttons;
-
-import org.getspout.spoutapi.gui.GenericButton;
-
-import com.gmail.nossr50.datatypes.PlayerProfile;
-
-public class ButtonHUDStyle extends GenericButton
-{
-	public ButtonHUDStyle(PlayerProfile PP)
-	{
-		this.setText("HUD Type: "+PP.getHUDType().toString());
-		this.setTooltip("Change your HUD style!");
-		this.setWidth(120).setHeight(20);
-		this.setDirty(true);
-	}
-	public void updateText(PlayerProfile PP)
-	{
-		this.setText("HUD Type: "+PP.getHUDType().toString());
-		this.setDirty(true);
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes.buttons;
+
+import org.getspout.spoutapi.gui.GenericButton;
+
+import com.gmail.nossr50.datatypes.PlayerProfile;
+
+public class ButtonHUDStyle extends GenericButton
+{
+	public ButtonHUDStyle(PlayerProfile PP)
+	{
+		this.setText("HUD Type: "+PP.getHUDType().toString());
+		this.setTooltip("Change your HUD style!");
+		this.setWidth(120).setHeight(20);
+		this.setDirty(true);
+	}
+	public void updateText(PlayerProfile PP)
+	{
+		this.setText("HUD Type: "+PP.getHUDType().toString());
+		this.setDirty(true);
+	}
 }

+ 0 - 0
src/com/gmail/nossr50/datatypes/buttons/ButtonPartyToggle.java → src/main/java/com/gmail/nossr50/datatypes/buttons/ButtonPartyToggle.java


+ 75 - 75
src/com/gmail/nossr50/datatypes/popups/PopupMMO.java → src/main/java/com/gmail/nossr50/datatypes/popups/PopupMMO.java

@@ -1,75 +1,75 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.datatypes.popups;
-
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-import org.getspout.spoutapi.gui.GenericLabel;
-import org.getspout.spoutapi.gui.GenericPopup;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
-import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
-import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle;
-
-public class PopupMMO extends GenericPopup
-{
-	ButtonHUDStyle HUDButton = null;
-	ButtonPartyToggle PartyButton = null;
-	ButtonEscape EscapeButton = null;
-	GenericLabel mcMMO_label = new GenericLabel();
-	GenericLabel tip_escape = new GenericLabel();
-	int center_x = 427/2;
-	int center_y = 240/2;
-	
-	public PopupMMO(Player player, PlayerProfile PP, mcMMO plugin)
-	{
-		//240, 427 are the bottom right
-		mcMMO_label.setText(ChatColor.GOLD+"~mcMMO Menu~");
-		mcMMO_label.setX(center_x-35).setY((center_y/2)-20).setDirty(true);
-		
-		tip_escape.setText(ChatColor.GRAY+"Press ESCAPE to exit!");
-		tip_escape.setX(mcMMO_label.getX()-15).setY(mcMMO_label.getY()+10).setDirty(true);
-		
-		HUDButton = new ButtonHUDStyle(PP);
-		HUDButton.setX(center_x-(HUDButton.getWidth()/2)).setY(center_y/2).setDirty(true);
-		
-		if(LoadProperties.partybar)
-		{
-			PartyButton = new ButtonPartyToggle(PP);
-			PartyButton.setX(center_x-(PartyButton.getWidth()/2)).setY(center_y/2+PartyButton.getHeight()).setDirty(true);
-			this.attachWidget(plugin, PartyButton);
-		}
-		
-		EscapeButton = new ButtonEscape();
-		EscapeButton.setX(center_x-(EscapeButton.getWidth()/2)).setY((center_y/2)+(HUDButton.getHeight()*2)+5).setDirty(true);
-		
-		this.attachWidget(plugin, HUDButton);
-		this.attachWidget(plugin, mcMMO_label);
-		this.attachWidget(plugin, tip_escape);
-		this.attachWidget(plugin, EscapeButton);
-		
-		this.setDirty(true);
-	}
-	
-	public void updateButtons(PlayerProfile PP)
-	{
-		HUDButton.updateText(PP);
-		this.setDirty(true);
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.datatypes.popups;
+
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
+import org.getspout.spoutapi.gui.GenericLabel;
+import org.getspout.spoutapi.gui.GenericPopup;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
+import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
+import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle;
+
+public class PopupMMO extends GenericPopup
+{
+	ButtonHUDStyle HUDButton = null;
+	ButtonPartyToggle PartyButton = null;
+	ButtonEscape EscapeButton = null;
+	GenericLabel mcMMO_label = new GenericLabel();
+	GenericLabel tip_escape = new GenericLabel();
+	int center_x = 427/2;
+	int center_y = 240/2;
+	
+	public PopupMMO(Player player, PlayerProfile PP, mcMMO plugin)
+	{
+		//240, 427 are the bottom right
+		mcMMO_label.setText(ChatColor.GOLD+"~mcMMO Menu~");
+		mcMMO_label.setX(center_x-35).setY((center_y/2)-20).setDirty(true);
+		
+		tip_escape.setText(ChatColor.GRAY+"Press ESCAPE to exit!");
+		tip_escape.setX(mcMMO_label.getX()-15).setY(mcMMO_label.getY()+10).setDirty(true);
+		
+		HUDButton = new ButtonHUDStyle(PP);
+		HUDButton.setX(center_x-(HUDButton.getWidth()/2)).setY(center_y/2).setDirty(true);
+		
+		if(LoadProperties.partybar)
+		{
+			PartyButton = new ButtonPartyToggle(PP);
+			PartyButton.setX(center_x-(PartyButton.getWidth()/2)).setY(center_y/2+PartyButton.getHeight()).setDirty(true);
+			this.attachWidget(plugin, PartyButton);
+		}
+		
+		EscapeButton = new ButtonEscape();
+		EscapeButton.setX(center_x-(EscapeButton.getWidth()/2)).setY((center_y/2)+(HUDButton.getHeight()*2)+5).setDirty(true);
+		
+		this.attachWidget(plugin, HUDButton);
+		this.attachWidget(plugin, mcMMO_label);
+		this.attachWidget(plugin, tip_escape);
+		this.attachWidget(plugin, EscapeButton);
+		
+		this.setDirty(true);
+	}
+	
+	public void updateButtons(PlayerProfile PP)
+	{
+		HUDButton.updateText(PP);
+		this.setDirty(true);
+	}
+}

+ 450 - 450
src/com/gmail/nossr50/listeners/mcBlockListener.java → src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java

@@ -1,451 +1,451 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.listeners;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-
-import org.bukkit.Material;
-import org.bukkit.Statistic;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.event.block.BlockDamageEvent;
-import org.bukkit.event.block.BlockFromToEvent;
-import org.bukkit.event.block.BlockListener;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.ItemStack;
-import org.getspout.spoutapi.SpoutManager;
-import org.getspout.spoutapi.player.SpoutPlayer;
-import org.getspout.spoutapi.sound.SoundEffect;
-
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.skills.*;
-import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
-
-
-public class mcBlockListener extends BlockListener 
-{
-    private final mcMMO plugin;
-
-    public mcBlockListener(final mcMMO plugin) 
-    {
-        this.plugin = plugin;
-    }
-    
-    public void onBlockPlace(BlockPlaceEvent event) 
-    {
-    	//Setup some basic vars
-    	Block block;
-    	Player player = event.getPlayer();
-    	
-    	//When blocks are placed on snow this event reports the wrong block.
-    	if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getTypeId() == 78) 
-    	{
-    		block = event.getBlockAgainst();
-    	}
-    	else 
-    	{
-    		block = event.getBlock();
-    	}
-    	
-    	//Check if the blocks placed should be monitored so they do not give out XP in the future
-    	if(m.shouldBeWatched(block))
-    	{
-    		if(block.getTypeId() != 17 && block.getTypeId() != 39 && block.getTypeId() != 40 && block.getTypeId() != 91 && block.getTypeId() != 86)
-    			block.setData((byte) 5); //Change the byte
-    		else if(block.getTypeId() == 17 || block.getTypeId() == 39 || block.getTypeId() == 40 || block.getTypeId() == 91 || block.getTypeId() == 86)
-    			plugin.misc.blockWatchList.add(block);
-    	}
-    	
-    	if(block.getTypeId() == 42 && LoadProperties.anvilmessages)
-    	{
-    		PlayerProfile PP = Users.getProfile(player);
-    		if(LoadProperties.spoutEnabled)
-    		{
-    			SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
-	    		if(sPlayer.isSpoutCraftEnabled())
-	    		{
-	    			if(!PP.getPlacedAnvil())
-	    			{
-	    				sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.IRON_BLOCK);
-	    				PP.togglePlacedAnvil();
-	    			}
-	    		}
-	    		else
-	    		{
-	    			if(!PP.getPlacedAnvil())
-	    			{
-	    				event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
-	    				PP.togglePlacedAnvil();
-	    			}
-	    		}
-    		}
-    		else
-    		{
-    			if(!PP.getPlacedAnvil())
-    			{
-    				event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
-    				PP.togglePlacedAnvil();
-    			}
-    		}
-    	}
-    }
-    
-    public void onBlockBreak(BlockBreakEvent event) 
-    {
-    	Player player = event.getPlayer();
-    	PlayerProfile PP = Users.getProfile(player);
-    	Block block = event.getBlock();
-    	ItemStack inhand = player.getItemInHand();
-    	if(event.isCancelled())
-    		return;
-    	if (event instanceof FakeBlockBreakEvent) 
-    		return;
-    	
-   		/*
-   		 * HERBALISM
-   		 */
-    	
-    	//Green Terra
-   		if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && block.getTypeId() == 59 && block.getData() == (byte) 0x07)
-   		{
-   			Herbalism.greenTerraCheck(player, block);
-   		}
-   		
-   		//Wheat && Triple drops
-   		if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
-   		{
-   			Herbalism.herbalismProcCheck(block, player, event, plugin);
-   			Herbalism.greenTerraWheat(player, block, event, plugin);
-   		}
-   		
-   		
-    	/*
-    	 * MINING
-    	 */
-    	if(mcPermissions.getInstance().mining(player))
-    	{
-    		if(LoadProperties.miningrequirespickaxe)
-    		{
-    			if(m.isMiningPick(inhand))
-    			{
-    				Mining.miningBlockCheck(false, player, block, plugin);
-    			}
-    		} else 
-    		{
-    			Mining.miningBlockCheck(false, player, block, plugin);
-    		}
-    	}
-    	/*
-   		 * WOOD CUTTING
-   		 */
-    	
-   		if(player != null && block.getTypeId() == 17 && mcPermissions.getInstance().woodcutting(player))
-   		{
-   			if(LoadProperties.woodcuttingrequiresaxe)
-   			{
-				if(m.isAxes(inhand))
-				{
-					if(!plugin.misc.blockWatchList.contains(block))
-					{
-	    				WoodCutting.woodCuttingProcCheck(player, block);
-	    				//Default
-	    				if(block.getData() == (byte)0)
-	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
-	    				//Spruce
-	    				if(block.getData() == (byte)1)
-	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mspruce, player);
-	    				//Birch
-	    				if(block.getData() == (byte)2)
-	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mbirch, player);
-					}
-    			}
-    		} else 
-    		{
-    			if(!plugin.misc.blockWatchList.contains(block))
-    			{
-	    			WoodCutting.woodCuttingProcCheck(player, block);
-	    			//Default
-    				if(block.getData() == (byte)0)
-    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
-    				//Spruce
-    				if(block.getData() == (byte)1)
-    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mspruce, player);
-    				//Birch
-    				if(block.getData() == (byte)2)
-    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mbirch, player);
-    			}
-   			}
-    		Skills.XpCheckSkill(SkillType.WOODCUTTING, player);
-    			
-    		/*
-    		 * IF PLAYER IS USING TREEFELLER
-    		 */
-   			if(mcPermissions.getInstance().woodCuttingAbility(player) 
-   					&& PP.getTreeFellerMode() 
-   					&& block.getTypeId() == 17
-   					&& m.blockBreakSimulate(block, player))
-   			{
-   				if(LoadProperties.spoutEnabled)
-   					SpoutStuff.playSoundForPlayer(SoundEffect.EXPLODE, player, block.getLocation());
-   				
-    			WoodCutting.treeFeller(block, player, plugin);
-    			for(Block blockx : plugin.misc.treeFeller)
-    			{
-    				if(blockx != null)
-    				{
-    					Material mat = Material.getMaterial(block.getTypeId());
-    					byte type = 0;
-    					if(block.getTypeId() == 17)
-    						type = block.getData();
-    					ItemStack item = new ItemStack(mat, 1, (byte)0, type);
-    					if(blockx.getTypeId() == 17)
-    					{
-    						blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
-    						//XP WOODCUTTING
-    						if(!plugin.misc.blockWatchList.contains(block))
-    						{
-	    						WoodCutting.woodCuttingProcCheck(player, blockx);
-	    						PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
-    						}
-    					}
-    					if(blockx.getTypeId() == 18)
-    					{
-    						mat = Material.SAPLING;
-    						
-    						item = new ItemStack(mat, 1, (short)0, blockx.getData());
-    						
-    						if(Math.random() * 10 > 9)
-    							blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
-    					}
-    					if(blockx.getType() != Material.AIR)
-    						player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
-    					blockx.setType(Material.AIR);
-    				}
-    			}
-    			if(LoadProperties.toolsLoseDurabilityFromAbilities)
-    		    	m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
-    			plugin.misc.treeFeller.clear();
-    		}
-    	}
-    	/*
-    	 * EXCAVATION
-    	 */
-    	if(Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 5)
-    		Excavation.excavationProcCheck(block.getData(), block.getType(), block.getLocation(), player);
-    	/*
-    	 * HERBALISM
-    	 */
-    	if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalism(player) && Herbalism.canBeGreenTerra(block))
-    	{
-    		Herbalism.greenTerraCheck(player, block);
-    	}
-    	if(mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5)
-			Herbalism.herbalismProcCheck(block, player, event, plugin);
-    	
-    	//Change the byte back when broken
-    	if(block.getData() == 5 && m.shouldBeWatched(block))
-    	{
-    		block.setData((byte) 0);
-    		if(plugin.misc.blockWatchList.contains(block))
-    		{
-    			plugin.misc.blockWatchList.remove(block);
-    		}
-    	}
-    }
-    
-    public void onBlockDamage(BlockDamageEvent event) 
-    {
-    	if(event.isCancelled())
-    		return;
-    	Player player = event.getPlayer();
-    	PlayerProfile PP = Users.getProfile(player);
-    	ItemStack inhand = player.getItemInHand();
-    	Block block = event.getBlock();
-    	
-    	Skills.monitorSkills(player);
-
-    	/*
-    	 * ABILITY PREPARATION CHECKS
-    	 */
-   		if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
-    		Herbalism.greenTerraCheck(player, block);
-    	if(PP.getAxePreparationMode() && block.getTypeId() == 17)
-    		WoodCutting.treeFellerCheck(player, block);
-    	if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
-    		Mining.superBreakerCheck(player, block);
-    	if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
-    		Excavation.gigaDrillBreakerActivationCheck(player, block);
-    	if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || block.getTypeId() == 78))
-    		Unarmed.berserkActivationCheck(player);
-    	
-    	/*
-    	 * TREE FELLAN STUFF
-    	 */
-    	if(LoadProperties.spoutEnabled && block.getTypeId() == 17 && Users.getProfile(player).getTreeFellerMode())
-    		SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
-    	
-    	/*
-    	 * GREEN TERRA STUFF
-    	 */
-    	if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player) && PP.getGreenTerraMode())
-    	{
-   			Herbalism.greenTerra(player, block);
-   		}
-    	
-    	/*
-    	 * GIGA DRILL BREAKER CHECKS
-    	 */
-    	if(PP.getGigaDrillBreakerMode() && m.blockBreakSimulate(block, player) 
-    			&& Excavation.canBeGigaDrillBroken(block) && m.isShovel(inhand))
-    	{
-    		int x = 0;
-    		
-    		while(x < 3)
-    		{
-    			if(block.getData() != (byte)5)
-    				Excavation.excavationProcCheck(block.getData(), block.getType(), block.getLocation(), player);
-    			x++;
-    		}
-    		
-    		Material mat = Material.getMaterial(block.getTypeId());
-    		
-    		if(block.getType() == Material.GRASS)
-    			mat = Material.DIRT;
-    		if(block.getType() == Material.CLAY)
-    			mat = Material.CLAY_BALL;
-    		
-			byte type = block.getData();
-			ItemStack item = new ItemStack(mat, 1, (byte)0, type);
-			
-			block.setType(Material.AIR);
-			
-			player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
-			
-			if(LoadProperties.toolsLoseDurabilityFromAbilities)
-	    		m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
-			
-			if(item.getType() == Material.CLAY_BALL)
-			{
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-			} else
-			{
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-			}
-			
-			//Spout stuff
-			if(LoadProperties.spoutEnabled)
-				SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
-    	}
-    	/*
-    	 * BERSERK MODE CHECKS
-    	 */
-    	if(PP.getBerserkMode() 
-    		&& m.blockBreakSimulate(block, player) 
-    		&& player.getItemInHand().getTypeId() == 0 
-    		&& (Excavation.canBeGigaDrillBroken(block) || block.getTypeId() == 78))
-    	{
-		   	Material mat = Material.getMaterial(block.getTypeId());
-		   	
-		   	if(block.getTypeId() == 2)
-		   		mat = Material.DIRT;
-		   	if(block.getTypeId() == 78)
-		   		mat = Material.SNOW_BALL;
-		   	if(block.getTypeId() == 82)
-		   		mat = Material.CLAY_BALL;
-		   	
-			byte type = block.getData();
-			
-			ItemStack item = new ItemStack(mat, 1, (byte)0, type);
-			player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
-			
-			block.setType(Material.AIR);
-			
-			if(item.getType() == Material.CLAY_BALL)
-			{
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-			} else
-			{
-				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
-			}
-			
-			if(LoadProperties.spoutEnabled)
-				SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
-    	}
-    	
-    	/*
-    	 * SUPER BREAKER CHECKS
-    	 */
-    	if(PP.getSuperBreakerMode() 
-    			&& Mining.canBeSuperBroken(block)
-    			&& m.blockBreakSimulate(block, player))
-    	{
-    		
-    		if(LoadProperties.miningrequirespickaxe)
-    		{
-    			if(m.isMiningPick(inhand))
-    				Mining.SuperBreakerBlockCheck(player, block, plugin);
-    		} else {
-    			Mining.SuperBreakerBlockCheck(player, block, plugin);
-    		}
-    	}
-    	
-    	/*
-    	 * LEAF BLOWER
-    	 */
-    	if(block.getTypeId() == 18 && mcPermissions.getInstance().woodcutting(player) && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100 && m.isAxes(player.getItemInHand()) && m.blockBreakSimulate(block, player))
-    	{
-    		m.damageTool(player, (short)1);
-    		if(Math.random() * 10 > 9)
-    		{
-    			ItemStack x = new ItemStack(Material.SAPLING, 1, (short)0, block.getData());
-    			block.getLocation().getWorld().dropItemNaturally(block.getLocation(), x);
-    		}
-    		block.setType(Material.AIR);
-    		player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
-    		if(LoadProperties.spoutEnabled)
-    			SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
-    	}
-    	if(block.getType() == Material.AIR && plugin.misc.blockWatchList.contains(block))
-    	{
-    		plugin.misc.blockWatchList.remove(block);
-    	}
-    }
-    
-    public void onBlockFromTo(BlockFromToEvent event) 
-    {
-        Block blockFrom = event.getBlock();
-        Block blockTo = event.getToBlock();
-        if(m.shouldBeWatched(blockFrom) && blockFrom.getData() == (byte)5)
-        {
-        	blockTo.setData((byte)5);
-        }
-    }
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.listeners;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+
+import org.bukkit.Material;
+import org.bukkit.Statistic;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockDamageEvent;
+import org.bukkit.event.block.BlockFromToEvent;
+import org.bukkit.event.block.BlockListener;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.inventory.ItemStack;
+import org.getspout.spoutapi.SpoutManager;
+import org.getspout.spoutapi.player.SpoutPlayer;
+import org.getspout.spoutapi.sound.SoundEffect;
+
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.skills.*;
+import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
+
+
+public class mcBlockListener extends BlockListener 
+{
+    private final mcMMO plugin;
+
+    public mcBlockListener(final mcMMO plugin) 
+    {
+        this.plugin = plugin;
+    }
+    
+    public void onBlockPlace(BlockPlaceEvent event) 
+    {
+    	//Setup some basic vars
+    	Block block;
+    	Player player = event.getPlayer();
+    	
+    	//When blocks are placed on snow this event reports the wrong block.
+    	if (event.getBlockReplacedState() != null && event.getBlockReplacedState().getTypeId() == 78) 
+    	{
+    		block = event.getBlockAgainst();
+    	}
+    	else 
+    	{
+    		block = event.getBlock();
+    	}
+    	
+    	//Check if the blocks placed should be monitored so they do not give out XP in the future
+    	if(m.shouldBeWatched(block))
+    	{
+    		if(block.getTypeId() != 17 && block.getTypeId() != 39 && block.getTypeId() != 40 && block.getTypeId() != 91 && block.getTypeId() != 86)
+    			block.setData((byte) 5); //Change the byte
+    		else if(block.getTypeId() == 17 || block.getTypeId() == 39 || block.getTypeId() == 40 || block.getTypeId() == 91 || block.getTypeId() == 86)
+    			plugin.misc.blockWatchList.add(block);
+    	}
+    	
+    	if(block.getTypeId() == 42 && LoadProperties.anvilmessages)
+    	{
+    		PlayerProfile PP = Users.getProfile(player);
+    		if(LoadProperties.spoutEnabled)
+    		{
+    			SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+	    		if(sPlayer.isSpoutCraftEnabled())
+	    		{
+	    			if(!PP.getPlacedAnvil())
+	    			{
+	    				sPlayer.sendNotification("[mcMMO] Anvil Placed", "Right click to repair!", Material.IRON_BLOCK);
+	    				PP.togglePlacedAnvil();
+	    			}
+	    		}
+	    		else
+	    		{
+	    			if(!PP.getPlacedAnvil())
+	    			{
+	    				event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
+	    				PP.togglePlacedAnvil();
+	    			}
+	    		}
+    		}
+    		else
+    		{
+    			if(!PP.getPlacedAnvil())
+    			{
+    				event.getPlayer().sendMessage(mcLocale.getString("mcBlockListener.PlacedAnvil")); //$NON-NLS-1$
+    				PP.togglePlacedAnvil();
+    			}
+    		}
+    	}
+    }
+    
+    public void onBlockBreak(BlockBreakEvent event) 
+    {
+    	Player player = event.getPlayer();
+    	PlayerProfile PP = Users.getProfile(player);
+    	Block block = event.getBlock();
+    	ItemStack inhand = player.getItemInHand();
+    	if(event.isCancelled())
+    		return;
+    	if (event instanceof FakeBlockBreakEvent) 
+    		return;
+    	
+   		/*
+   		 * HERBALISM
+   		 */
+    	
+    	//Green Terra
+   		if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && block.getTypeId() == 59 && block.getData() == (byte) 0x07)
+   		{
+   			Herbalism.greenTerraCheck(player, block);
+   		}
+   		
+   		//Wheat && Triple drops
+   		if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
+   		{
+   			Herbalism.herbalismProcCheck(block, player, event, plugin);
+   			Herbalism.greenTerraWheat(player, block, event, plugin);
+   		}
+   		
+   		
+    	/*
+    	 * MINING
+    	 */
+    	if(mcPermissions.getInstance().mining(player))
+    	{
+    		if(LoadProperties.miningrequirespickaxe)
+    		{
+    			if(m.isMiningPick(inhand))
+    			{
+    				Mining.miningBlockCheck(false, player, block, plugin);
+    			}
+    		} else 
+    		{
+    			Mining.miningBlockCheck(false, player, block, plugin);
+    		}
+    	}
+    	/*
+   		 * WOOD CUTTING
+   		 */
+    	
+   		if(player != null && block.getTypeId() == 17 && mcPermissions.getInstance().woodcutting(player))
+   		{
+   			if(LoadProperties.woodcuttingrequiresaxe)
+   			{
+				if(m.isAxes(inhand))
+				{
+					if(!plugin.misc.blockWatchList.contains(block))
+					{
+	    				WoodCutting.woodCuttingProcCheck(player, block);
+	    				//Default
+	    				if(block.getData() == (byte)0)
+	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
+	    				//Spruce
+	    				if(block.getData() == (byte)1)
+	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mspruce, player);
+	    				//Birch
+	    				if(block.getData() == (byte)2)
+	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mbirch, player);
+					}
+    			}
+    		} else 
+    		{
+    			if(!plugin.misc.blockWatchList.contains(block))
+    			{
+	    			WoodCutting.woodCuttingProcCheck(player, block);
+	    			//Default
+    				if(block.getData() == (byte)0)
+    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
+    				//Spruce
+    				if(block.getData() == (byte)1)
+    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mspruce, player);
+    				//Birch
+    				if(block.getData() == (byte)2)
+    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mbirch, player);
+    			}
+   			}
+    		Skills.XpCheckSkill(SkillType.WOODCUTTING, player);
+    			
+    		/*
+    		 * IF PLAYER IS USING TREEFELLER
+    		 */
+   			if(mcPermissions.getInstance().woodCuttingAbility(player) 
+   					&& PP.getTreeFellerMode() 
+   					&& block.getTypeId() == 17
+   					&& m.blockBreakSimulate(block, player))
+   			{
+   				if(LoadProperties.spoutEnabled)
+   					SpoutStuff.playSoundForPlayer(SoundEffect.EXPLODE, player, block.getLocation());
+   				
+    			WoodCutting.treeFeller(block, player, plugin);
+    			for(Block blockx : plugin.misc.treeFeller)
+    			{
+    				if(blockx != null)
+    				{
+    					Material mat = Material.getMaterial(block.getTypeId());
+    					byte type = 0;
+    					if(block.getTypeId() == 17)
+    						type = block.getData();
+    					ItemStack item = new ItemStack(mat, 1, (byte)0, type);
+    					if(blockx.getTypeId() == 17)
+    					{
+    						blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
+    						//XP WOODCUTTING
+    						if(!plugin.misc.blockWatchList.contains(block))
+    						{
+	    						WoodCutting.woodCuttingProcCheck(player, blockx);
+	    						PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine, player);
+    						}
+    					}
+    					if(blockx.getTypeId() == 18)
+    					{
+    						mat = Material.SAPLING;
+    						
+    						item = new ItemStack(mat, 1, (short)0, blockx.getData());
+    						
+    						if(Math.random() * 10 > 9)
+    							blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
+    					}
+    					if(blockx.getType() != Material.AIR)
+    						player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
+    					blockx.setType(Material.AIR);
+    				}
+    			}
+    			if(LoadProperties.toolsLoseDurabilityFromAbilities)
+    		    	m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
+    			plugin.misc.treeFeller.clear();
+    		}
+    	}
+    	/*
+    	 * EXCAVATION
+    	 */
+    	if(Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 5)
+    		Excavation.excavationProcCheck(block.getData(), block.getType(), block.getLocation(), player);
+    	/*
+    	 * HERBALISM
+    	 */
+    	if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalism(player) && Herbalism.canBeGreenTerra(block))
+    	{
+    		Herbalism.greenTerraCheck(player, block);
+    	}
+    	if(mcPermissions.getInstance().herbalism(player) && block.getData() != (byte) 5)
+			Herbalism.herbalismProcCheck(block, player, event, plugin);
+    	
+    	//Change the byte back when broken
+    	if(block.getData() == 5 && m.shouldBeWatched(block))
+    	{
+    		block.setData((byte) 0);
+    		if(plugin.misc.blockWatchList.contains(block))
+    		{
+    			plugin.misc.blockWatchList.remove(block);
+    		}
+    	}
+    }
+    
+    public void onBlockDamage(BlockDamageEvent event) 
+    {
+    	if(event.isCancelled())
+    		return;
+    	Player player = event.getPlayer();
+    	PlayerProfile PP = Users.getProfile(player);
+    	ItemStack inhand = player.getItemInHand();
+    	Block block = event.getBlock();
+    	
+    	Skills.monitorSkills(player);
+
+    	/*
+    	 * ABILITY PREPARATION CHECKS
+    	 */
+   		if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
+    		Herbalism.greenTerraCheck(player, block);
+    	if(PP.getAxePreparationMode() && block.getTypeId() == 17)
+    		WoodCutting.treeFellerCheck(player, block);
+    	if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
+    		Mining.superBreakerCheck(player, block);
+    	if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
+    		Excavation.gigaDrillBreakerActivationCheck(player, block);
+    	if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || block.getTypeId() == 78))
+    		Unarmed.berserkActivationCheck(player);
+    	
+    	/*
+    	 * TREE FELLAN STUFF
+    	 */
+    	if(LoadProperties.spoutEnabled && block.getTypeId() == 17 && Users.getProfile(player).getTreeFellerMode())
+    		SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
+    	
+    	/*
+    	 * GREEN TERRA STUFF
+    	 */
+    	if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player) && PP.getGreenTerraMode())
+    	{
+   			Herbalism.greenTerra(player, block);
+   		}
+    	
+    	/*
+    	 * GIGA DRILL BREAKER CHECKS
+    	 */
+    	if(PP.getGigaDrillBreakerMode() && m.blockBreakSimulate(block, player) 
+    			&& Excavation.canBeGigaDrillBroken(block) && m.isShovel(inhand))
+    	{
+    		int x = 0;
+    		
+    		while(x < 3)
+    		{
+    			if(block.getData() != (byte)5)
+    				Excavation.excavationProcCheck(block.getData(), block.getType(), block.getLocation(), player);
+    			x++;
+    		}
+    		
+    		Material mat = Material.getMaterial(block.getTypeId());
+    		
+    		if(block.getType() == Material.GRASS)
+    			mat = Material.DIRT;
+    		if(block.getType() == Material.CLAY)
+    			mat = Material.CLAY_BALL;
+    		
+			byte type = block.getData();
+			ItemStack item = new ItemStack(mat, 1, (byte)0, type);
+			
+			block.setType(Material.AIR);
+			
+			player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
+			
+			if(LoadProperties.toolsLoseDurabilityFromAbilities)
+	    		m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
+			
+			if(item.getType() == Material.CLAY_BALL)
+			{
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+			} else
+			{
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+			}
+			
+			//Spout stuff
+			if(LoadProperties.spoutEnabled)
+				SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
+    	}
+    	/*
+    	 * BERSERK MODE CHECKS
+    	 */
+    	if(PP.getBerserkMode() 
+    		&& m.blockBreakSimulate(block, player) 
+    		&& player.getItemInHand().getTypeId() == 0 
+    		&& (Excavation.canBeGigaDrillBroken(block) || block.getTypeId() == 78))
+    	{
+		   	Material mat = Material.getMaterial(block.getTypeId());
+		   	
+		   	if(block.getTypeId() == 2)
+		   		mat = Material.DIRT;
+		   	if(block.getTypeId() == 78)
+		   		mat = Material.SNOW_BALL;
+		   	if(block.getTypeId() == 82)
+		   		mat = Material.CLAY_BALL;
+		   	
+			byte type = block.getData();
+			
+			ItemStack item = new ItemStack(mat, 1, (byte)0, type);
+			player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
+			
+			block.setType(Material.AIR);
+			
+			if(item.getType() == Material.CLAY_BALL)
+			{
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+			} else
+			{
+				block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+			}
+			
+			if(LoadProperties.spoutEnabled)
+				SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
+    	}
+    	
+    	/*
+    	 * SUPER BREAKER CHECKS
+    	 */
+    	if(PP.getSuperBreakerMode() 
+    			&& Mining.canBeSuperBroken(block)
+    			&& m.blockBreakSimulate(block, player))
+    	{
+    		
+    		if(LoadProperties.miningrequirespickaxe)
+    		{
+    			if(m.isMiningPick(inhand))
+    				Mining.SuperBreakerBlockCheck(player, block, plugin);
+    		} else {
+    			Mining.SuperBreakerBlockCheck(player, block, plugin);
+    		}
+    	}
+    	
+    	/*
+    	 * LEAF BLOWER
+    	 */
+    	if(block.getTypeId() == 18 && mcPermissions.getInstance().woodcutting(player) && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100 && m.isAxes(player.getItemInHand()) && m.blockBreakSimulate(block, player))
+    	{
+    		m.damageTool(player, (short)1);
+    		if(Math.random() * 10 > 9)
+    		{
+    			ItemStack x = new ItemStack(Material.SAPLING, 1, (short)0, block.getData());
+    			block.getLocation().getWorld().dropItemNaturally(block.getLocation(), x);
+    		}
+    		block.setType(Material.AIR);
+    		player.incrementStatistic(Statistic.MINE_BLOCK, event.getBlock().getType());
+    		if(LoadProperties.spoutEnabled)
+    			SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
+    	}
+    	if(block.getType() == Material.AIR && plugin.misc.blockWatchList.contains(block))
+    	{
+    		plugin.misc.blockWatchList.remove(block);
+    	}
+    }
+    
+    public void onBlockFromTo(BlockFromToEvent event) 
+    {
+        Block blockFrom = event.getBlock();
+        Block blockTo = event.getToBlock();
+        if(m.shouldBeWatched(blockFrom) && blockFrom.getData() == (byte)5)
+        {
+        	blockTo.setData((byte)5);
+        }
+    }
 }

+ 208 - 208
src/com/gmail/nossr50/listeners/mcEntityListener.java → src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java

@@ -1,208 +1,208 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.listeners;
-
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Wolf;
-import org.bukkit.event.entity.CreatureSpawnEvent;
-import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
-import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
-import org.bukkit.event.entity.EntityDeathEvent;
-import org.bukkit.event.entity.EntityListener;
-import org.bukkit.inventory.ItemStack;
-
-import com.gmail.nossr50.Combat;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.skills.Acrobatics;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.skills.Taming;
-
-
-public class mcEntityListener extends EntityListener 
-{
-	private final mcMMO plugin;
-
-    public mcEntityListener(final mcMMO plugin) {
-        this.plugin = plugin;
-    }
-    
-    public void onEntityDamage(EntityDamageEvent event) 
-    {
-    	if(event.isCancelled())
-    		return;
-    	//Check for world pvp flag
-    	if(event instanceof EntityDamageByEntityEvent)
-    	{
-    		EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent)event;
-    		if(eventb.getEntity() instanceof Player && eventb.getDamager() instanceof Player && !event.getEntity().getWorld().getPVP())
-    			return;
-    	}
-    	/*
-    	 * CHECK FOR INVULNERABILITY
-    	 */
-    	if(event.getEntity() instanceof Player)
-    	{
-    		Player defender = (Player)event.getEntity();
-    		PlayerProfile PPd = Users.getProfile(defender);
-    		if(defender != null && PPd.getGodMode())
-    			event.setCancelled(true);
-    		if(PPd == null)
-    			Users.addUser(defender);
-    	}
-    	
-    	if(event.getEntity() instanceof LivingEntity)
-    	{
-    		//CraftEntity cEntity = (CraftEntity)event.getEntity();
-	    	//if(cEntity.getHandle() instanceof EntityLiving)
-	    	{
-		    	LivingEntity entityliving = (LivingEntity)event.getEntity();
-		    	if(entityliving.getNoDamageTicks() < entityliving.getMaximumNoDamageTicks()/2.0F)
-		    	{
-			    	Entity x = event.getEntity();
-			    	DamageCause type = event.getCause();
-			    	if(event.getEntity() instanceof Wolf && ((Wolf)event.getEntity()).isTamed() && Taming.getOwner(((Wolf)event.getEntity()), plugin) != null)
-			    	{
-			    		Wolf theWolf = (Wolf) event.getEntity();
-				    	Player master = Taming.getOwner(theWolf, plugin);
-				    	PlayerProfile PPo = Users.getProfile(master);
-				    	if(master == null || PPo == null)
-				    		return;
-			    		//Environmentally Aware
-						if((event.getCause() == DamageCause.CONTACT || event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.FIRE) && PPo.getSkillLevel(SkillType.TAMING) >= 100)
-						{
-							if(event.getDamage() < ((Wolf) event.getEntity()).getHealth())
-							{
-								event.getEntity().teleport(Taming.getOwner(theWolf, plugin).getLocation());
-								master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); //$NON-NLS-1$
-								event.getEntity().setFireTicks(0);
-							}
-						}
-						if(event.getCause() == DamageCause.FALL && PPo.getSkillLevel(SkillType.TAMING) >= 100)
-						{
-							event.setCancelled(true);
-						}
-						
-						//Thick Fur
-						if(event.getCause() == DamageCause.FIRE_TICK)
-						{
-							event.getEntity().setFireTicks(0);
-						}
-			    	}
-			    	
-			    	/*
-			    	 * ACROBATICS
-			    	 */
-			    	if(x instanceof Player){
-				    	Player player = (Player)x;
-				    	if(type == DamageCause.FALL){
-				    		Acrobatics.acrobaticsCheck(player, event);
-				    	}
-			    	}
-			    	
-			    	/*
-			    	 * Entity Damage by Entity checks
-			    	 */
-			    	if(event instanceof EntityDamageByEntityEvent && !event.isCancelled())
-			    	{
-			    		EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
-			    		Entity f = eventb.getDamager();
-			    		Entity e = event.getEntity();
-			    		/*
-			    		 * PARTY CHECKS
-			    		 */
-			    		if(event.getEntity() instanceof Player && f instanceof Player)
-			    		{
-			        		Player defender = (Player)e;
-			        		Player attacker = (Player)f;
-			        		if(Party.getInstance().inSameParty(defender, attacker))
-			        			event.setCancelled(true);
-			    		}
-			    		Combat.combatChecks(event, plugin);	
-			        }
-			    	/*
-			    	 * Check to see if the defender took damage so we can apply recently hurt
-			    	 */
-			    	if(event.getEntity() instanceof Player)
-			    	{
-			    		Player herpderp = (Player)event.getEntity();
-			    		if(!event.isCancelled() && event.getDamage() >= 1)
-			    		{
-			    			Users.getProfile(herpderp).setRecentlyHurt(System.currentTimeMillis());
-			    		}
-			    	}
-		    	}
-	    	}
-    	}
-    }
-    
-    public void onEntityDeath(EntityDeathEvent event) 
-    {
-    	Entity x = event.getEntity();
-    	x.setFireTicks(0);
-    	
-    	//Remove bleed track
-    	if(plugin.misc.bleedTracker.contains((LivingEntity)x))
-    		plugin.misc.addToBleedRemovalQue((LivingEntity)x);
-    	
-		Skills.arrowRetrievalCheck(x, plugin);
-		/*
-		if(Config.getInstance().isMobSpawnTracked(x)){
-			Config.getInstance().removeMobSpawnTrack(x);
-		}
-		*/
-    	if(x instanceof Player){
-    		Player player = (Player)x;
-    		Users.getProfile(player).setBleedTicks(0);
-    	}
-    	
-    }
-    
-    public void onCreatureSpawn(CreatureSpawnEvent event) 
-    {
-    	SpawnReason reason = event.getSpawnReason();
-    	
-    	if(reason == SpawnReason.SPAWNER && !LoadProperties.xpGainsMobSpawners)
-    	{
-    		plugin.misc.mobSpawnerList.add(event.getEntity());
-    	}
-    }
-    
-	public boolean isBow(ItemStack is){
-		if (is.getTypeId() == 261){
-			return true;
-		} else {
-			return false;
-		}
-	}
-	public boolean isPlayer(Entity entity){
-    	if (entity instanceof Player) {
-    	    return true;
-    	} else{
-    		return false;
-    	}
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.listeners;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Wolf;
+import org.bukkit.event.entity.CreatureSpawnEvent;
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
+import org.bukkit.event.entity.EntityDeathEvent;
+import org.bukkit.event.entity.EntityListener;
+import org.bukkit.inventory.ItemStack;
+
+import com.gmail.nossr50.Combat;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.skills.Acrobatics;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.Taming;
+
+
+public class mcEntityListener extends EntityListener 
+{
+	private final mcMMO plugin;
+
+    public mcEntityListener(final mcMMO plugin) {
+        this.plugin = plugin;
+    }
+    
+    public void onEntityDamage(EntityDamageEvent event) 
+    {
+    	if(event.isCancelled())
+    		return;
+    	//Check for world pvp flag
+    	if(event instanceof EntityDamageByEntityEvent)
+    	{
+    		EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent)event;
+    		if(eventb.getEntity() instanceof Player && eventb.getDamager() instanceof Player && !event.getEntity().getWorld().getPVP())
+    			return;
+    	}
+    	/*
+    	 * CHECK FOR INVULNERABILITY
+    	 */
+    	if(event.getEntity() instanceof Player)
+    	{
+    		Player defender = (Player)event.getEntity();
+    		PlayerProfile PPd = Users.getProfile(defender);
+    		if(defender != null && PPd.getGodMode())
+    			event.setCancelled(true);
+    		if(PPd == null)
+    			Users.addUser(defender);
+    	}
+    	
+    	if(event.getEntity() instanceof LivingEntity)
+    	{
+    		//CraftEntity cEntity = (CraftEntity)event.getEntity();
+	    	//if(cEntity.getHandle() instanceof EntityLiving)
+	    	{
+		    	LivingEntity entityliving = (LivingEntity)event.getEntity();
+		    	if(entityliving.getNoDamageTicks() < entityliving.getMaximumNoDamageTicks()/2.0F)
+		    	{
+			    	Entity x = event.getEntity();
+			    	DamageCause type = event.getCause();
+			    	if(event.getEntity() instanceof Wolf && ((Wolf)event.getEntity()).isTamed() && Taming.getOwner(((Wolf)event.getEntity()), plugin) != null)
+			    	{
+			    		Wolf theWolf = (Wolf) event.getEntity();
+				    	Player master = Taming.getOwner(theWolf, plugin);
+				    	PlayerProfile PPo = Users.getProfile(master);
+				    	if(master == null || PPo == null)
+				    		return;
+			    		//Environmentally Aware
+						if((event.getCause() == DamageCause.CONTACT || event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.FIRE) && PPo.getSkillLevel(SkillType.TAMING) >= 100)
+						{
+							if(event.getDamage() < ((Wolf) event.getEntity()).getHealth())
+							{
+								event.getEntity().teleport(Taming.getOwner(theWolf, plugin).getLocation());
+								master.sendMessage(mcLocale.getString("mcEntityListener.WolfComesBack")); //$NON-NLS-1$
+								event.getEntity().setFireTicks(0);
+							}
+						}
+						if(event.getCause() == DamageCause.FALL && PPo.getSkillLevel(SkillType.TAMING) >= 100)
+						{
+							event.setCancelled(true);
+						}
+						
+						//Thick Fur
+						if(event.getCause() == DamageCause.FIRE_TICK)
+						{
+							event.getEntity().setFireTicks(0);
+						}
+			    	}
+			    	
+			    	/*
+			    	 * ACROBATICS
+			    	 */
+			    	if(x instanceof Player){
+				    	Player player = (Player)x;
+				    	if(type == DamageCause.FALL){
+				    		Acrobatics.acrobaticsCheck(player, event);
+				    	}
+			    	}
+			    	
+			    	/*
+			    	 * Entity Damage by Entity checks
+			    	 */
+			    	if(event instanceof EntityDamageByEntityEvent && !event.isCancelled())
+			    	{
+			    		EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
+			    		Entity f = eventb.getDamager();
+			    		Entity e = event.getEntity();
+			    		/*
+			    		 * PARTY CHECKS
+			    		 */
+			    		if(event.getEntity() instanceof Player && f instanceof Player)
+			    		{
+			        		Player defender = (Player)e;
+			        		Player attacker = (Player)f;
+			        		if(Party.getInstance().inSameParty(defender, attacker))
+			        			event.setCancelled(true);
+			    		}
+			    		Combat.combatChecks(event, plugin);	
+			        }
+			    	/*
+			    	 * Check to see if the defender took damage so we can apply recently hurt
+			    	 */
+			    	if(event.getEntity() instanceof Player)
+			    	{
+			    		Player herpderp = (Player)event.getEntity();
+			    		if(!event.isCancelled() && event.getDamage() >= 1)
+			    		{
+			    			Users.getProfile(herpderp).setRecentlyHurt(System.currentTimeMillis());
+			    		}
+			    	}
+		    	}
+	    	}
+    	}
+    }
+    
+    public void onEntityDeath(EntityDeathEvent event) 
+    {
+    	Entity x = event.getEntity();
+    	x.setFireTicks(0);
+    	
+    	//Remove bleed track
+    	if(plugin.misc.bleedTracker.contains((LivingEntity)x))
+    		plugin.misc.addToBleedRemovalQue((LivingEntity)x);
+    	
+		Skills.arrowRetrievalCheck(x, plugin);
+		/*
+		if(Config.getInstance().isMobSpawnTracked(x)){
+			Config.getInstance().removeMobSpawnTrack(x);
+		}
+		*/
+    	if(x instanceof Player){
+    		Player player = (Player)x;
+    		Users.getProfile(player).setBleedTicks(0);
+    	}
+    	
+    }
+    
+    public void onCreatureSpawn(CreatureSpawnEvent event) 
+    {
+    	SpawnReason reason = event.getSpawnReason();
+    	
+    	if(reason == SpawnReason.SPAWNER && !LoadProperties.xpGainsMobSpawners)
+    	{
+    		plugin.misc.mobSpawnerList.add(event.getEntity());
+    	}
+    }
+    
+	public boolean isBow(ItemStack is){
+		if (is.getTypeId() == 261){
+			return true;
+		} else {
+			return false;
+		}
+	}
+	public boolean isPlayer(Entity entity){
+    	if (entity instanceof Player) {
+    	    return true;
+    	} else{
+    		return false;
+    	}
+    }
+}

+ 345 - 345
src/com/gmail/nossr50/listeners/mcPlayerListener.java → src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java

@@ -1,346 +1,346 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.listeners;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.World;
-import org.bukkit.block.Block;
-import org.bukkit.craftbukkit.command.ColouredConsoleSender;
-import org.bukkit.craftbukkit.entity.CraftItem;
-import org.bukkit.entity.CreatureType;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Wolf;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerChatEvent;
-import org.bukkit.event.player.PlayerCommandPreprocessEvent;
-import org.bukkit.event.player.PlayerFishEvent;
-import org.bukkit.event.player.PlayerFishEvent.State;
-import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.event.player.PlayerJoinEvent;
-import org.bukkit.event.player.PlayerListener;
-import org.bukkit.event.player.PlayerLoginEvent;
-import org.bukkit.event.player.PlayerPickupItemEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.event.player.PlayerRespawnEvent;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Item;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.commands.general.XprateCommand;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.spout.mmoHelper;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.skills.Fishing;
-import com.gmail.nossr50.skills.Herbalism;
-import com.gmail.nossr50.skills.Repair;
-import com.gmail.nossr50.skills.Skills;
-
-
-public class mcPlayerListener extends PlayerListener 
-{
-	protected static final Logger log = Logger.getLogger("Minecraft"); //$NON-NLS-1$
-	public Location spawn = null;
-	private mcMMO plugin;
-
-	public mcPlayerListener(mcMMO instance) 
-	{
-		plugin = instance;
-	}
-	
-	public void onPlayerFish(PlayerFishEvent event) 
-	{
-		if(mcPermissions.getInstance().fishing(event.getPlayer()))
-		{
-			if(event.getState() == State.CAUGHT_FISH)
-			{
-				if(event.getCaught() instanceof CraftItem)
-				{
-					Fishing.processResults(event);
-				}
-			} else if (event.getState() == State.CAUGHT_ENTITY)
-			{
-				if(Users.getProfile(event.getPlayer()).getSkillLevel(SkillType.FISHING) >= 150 && event.getCaught() instanceof LivingEntity)
-				{
-					Fishing.shakeMob(event);
-				}
-			}
-		}
-	}
-	
-	 public void onPlayerPickupItem(PlayerPickupItemEvent event) 
-	 {
-		 if(Users.getProfile(event.getPlayer()).getBerserkMode())
-		 {
-			 event.setCancelled(true);
-		 }
-	 }
-
-	public void onPlayerRespawn(PlayerRespawnEvent event) 
-	{
-		
-		Player player = event.getPlayer();
-		PlayerProfile PP = Users.getProfile(player);
-		if(LoadProperties.enableMySpawn && mcPermissions.getInstance().mySpawn(player))
-		{
-			if(player != null && PP != null)
-			{
-				PP.setRespawnATS(System.currentTimeMillis());
-				
-				Location mySpawn = PP.getMySpawn(player);
-				
-				if(mySpawn != null)
-				{
-					{
-						event.setRespawnLocation(mySpawn);
-					}
-				}
-			}
-		}
-	}
-	
-	public void onPlayerLogin(PlayerLoginEvent event) 
-	{
-		Users.addUser(event.getPlayer());
-	}
-
-	public void onPlayerQuit(PlayerQuitEvent event) 
-	{
-		
-		/*
-		 * GARBAGE COLLECTION
-		 */
-		//Discard the PlayerProfile object
-		Player player = event.getPlayer();
-		
-		if(LoadProperties.spoutEnabled)
-		{
-			if(SpoutStuff.playerHUDs.containsKey(player))
-				SpoutStuff.playerHUDs.remove(player);
-			if(mmoHelper.containers.containsKey(player))
-				mmoHelper.containers.remove(player);
-		}
-		
-		Users.removeUser(event.getPlayer());
-	}
-
-	public void onPlayerJoin(PlayerJoinEvent event) 
-	{
-		Player player = event.getPlayer();
-		if(mcPermissions.getInstance().motd(player) && LoadProperties.enableMotd)
-		{
-			player.sendMessage(mcLocale.getString("mcPlayerListener.MOTD", new Object[] {plugin.getDescription().getVersion(), LoadProperties.mcmmo}));
-			player.sendMessage(mcLocale.getString("mcPlayerListener.WIKI"));
-		}
-		//THIS IS VERY BAD WAY TO DO THINGS, NEED BETTER WAY
-		if(XprateCommand.xpevent)
-			player.sendMessage(ChatColor.GOLD+"mcMMO is currently in an XP rate event! XP rate is "+LoadProperties.xpGainMultiplier+"x!");
-	}
-
-	public void onPlayerInteract(PlayerInteractEvent event) 
-	{
-		Player player = event.getPlayer();
-		PlayerProfile PP = Users.getProfile(player);
-		Action action = event.getAction();
-		Block block = event.getClickedBlock();
-
-		/*
-		 * Ability checks
-		 */
-		if(action == Action.RIGHT_CLICK_BLOCK)
-		{
-			ItemStack is = player.getItemInHand();
-			if(LoadProperties.enableMySpawn && block != null && player != null)
-			{
-				if(block.getTypeId() == 26 && mcPermissions.getInstance().setMySpawn(player))
-				{
-					Location loc = player.getLocation();
-					if(mcPermissions.getInstance().setMySpawn(player)){
-						PP.setMySpawn(loc.getX(), loc.getY(), loc.getZ(), loc.getWorld().getName());
-					}
-					//player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnSet"));
-				}
-			}
-
-			if(block != null && player != null && mcPermissions.getInstance().repair(player) 
-					&& event.getClickedBlock().getTypeId() == 42 && (Repair.isTools(player.getItemInHand()) || Repair.isArmor(player.getItemInHand())))
-			{
-				Repair.repairCheck(player, is, event.getClickedBlock());
-				event.setCancelled(true);
-				player.updateInventory();
-			}
-
-			if(LoadProperties.enableAbilities && m.abilityBlockCheck(block))
-			{
-				if(block != null && m.isHoe(player.getItemInHand()) && block.getTypeId() != 3 && block.getTypeId() != 2 && block.getTypeId() != 60){
-					Skills.hoeReadinessCheck(player);
-				}
-				Skills.abilityActivationCheck(player);
-			}
-
-			//GREEN THUMB
-			if(block != null && mcPermissions.getInstance().herbalism(player) && (block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT || block.getType() == Material.SMOOTH_BRICK) && player.getItemInHand().getType() == Material.SEEDS)
-			{
-				boolean pass = false;
-				if(Herbalism.hasSeeds(player))
-				{
-					Herbalism.removeSeeds(player);
-					
-					if(block.getType() == Material.DIRT || block.getType() == Material.COBBLESTONE || block.getType() == Material.SMOOTH_BRICK)
-					{
-						if(Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM) && m.blockBreakSimulate(block, player))
-						{
-							switch(block.getType())
-							{
-							case COBBLESTONE:
-								if(LoadProperties.enableCobbleToMossy)
-								{
-									block.setType(Material.MOSSY_COBBLESTONE);
-									pass = true;
-								}
-								break;
-							case DIRT:
-								pass = true;
-								block.setType(Material.GRASS);
-								break;
-							case SMOOTH_BRICK:
-								pass = true;
-								block.setData((byte)1);
-								break;
-							}
-							if(pass == false)
-								player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumbFail"));
-						}
-					}
-				}
-				return;
-			}
-		}
-		if(LoadProperties.enableAbilities && action == Action.RIGHT_CLICK_AIR)
-		{
-			Skills.hoeReadinessCheck(player);
-			Skills.abilityActivationCheck(player);
-		}
-		
-		/*
-		 * ITEM CHECKS
-		 */
-		if(action == Action.RIGHT_CLICK_AIR)
-			Item.itemchecks(player, plugin);
-		if(action == Action.RIGHT_CLICK_BLOCK)
-		{
-			if(m.abilityBlockCheck(event.getClickedBlock()))
-				Item.itemchecks(player, plugin);
-		}
-		
-		if(player.isSneaking() && mcPermissions.getInstance().taming(player) && (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK))
-		{
-			if(player.getItemInHand().getType() == Material.BONE && player.getItemInHand().getAmount() > 9)
-			{
-				for(Entity x : player.getNearbyEntities(40, 40, 40))
-				{
-					if(x instanceof Wolf)
-					{
-						player.sendMessage(mcLocale.getString("m.TamingSummonFailed"));
-						return;
-					}
-				}
-				World world = player.getWorld();
-				world.spawnCreature(player.getLocation(), CreatureType.WOLF);
-				
-				ItemStack[] inventory = player.getInventory().getContents();
-    	    	for(ItemStack x : inventory){
-    	    		if(x != null && x.getAmount() > LoadProperties.bonesConsumedByCOTW-1 && x.getType() == Material.BONE){
-    	    			if(x.getAmount() >= LoadProperties.bonesConsumedByCOTW)
-    	    			{
-    	    				x.setAmount(x.getAmount() - LoadProperties.bonesConsumedByCOTW);
-    	    				player.getInventory().setContents(inventory);
-        	    			player.updateInventory();
-        	    			break;
-    	    			} else {
-    	    				x.setAmount(0);
-    	    				x.setTypeId(0);
-    	    				player.getInventory().setContents(inventory);
-        	    			player.updateInventory();
-        	    			break;
-    	    			}
-    	    		}
-    	    	}
-    	    	player.sendMessage(mcLocale.getString("m.TamingSummon"));
-			}
-		}
-	}
-
-	public void onPlayerChat(PlayerChatEvent event) 
-	{
-		Player player = event.getPlayer();
-		PlayerProfile PP = Users.getProfile(player);
-		if(PP.getPartyChatMode())
-		{
-			event.setCancelled(true);
-			String format = ChatColor.GREEN + "(" + ChatColor.WHITE + player.getDisplayName() + ChatColor.GREEN + ") "+event.getMessage();
-			for(Player x : Bukkit.getServer().getOnlinePlayers())
-			{
-				if(Party.getInstance().inSameParty(player, x))
-					x.sendMessage(format);
-			}
-			if(Bukkit.getServer() instanceof ColouredConsoleSender)
-			{
-				ColouredConsoleSender ccs = (ColouredConsoleSender) Bukkit.getServer();
-				ccs.sendMessage(ChatColor.GREEN+"[P]"+format); //Colors, woot!
-			}
-		} else if (PP.getAdminChatMode()) {
-			event.setCancelled(true);
-			String format = ChatColor.AQUA + "{" + ChatColor.WHITE + player.getDisplayName() + ChatColor.AQUA + "} "+event.getMessage();
-			for(Player x : Bukkit.getServer().getOnlinePlayers())
-			{
-				if(x.isOp() || mcPermissions.getInstance().adminChat(x))
-					x.sendMessage(format);
-			}
-			if(Bukkit.getServer() instanceof ColouredConsoleSender)
-			{
-				ColouredConsoleSender ccs = (ColouredConsoleSender) Bukkit.getServer();
-				ccs.sendMessage(ChatColor.AQUA+"[A]"+format); //Colors, woot!
-			} else {
-				log.log(Level.INFO, "[A]"+format);
-			}
-		}
-	}
-	
-	public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
-		String message = event.getMessage();
-		if(!message.startsWith("/")) return;
-		String command = message.substring(1).split(" ")[0];
-		if(plugin.aliasMap.containsKey(command)) {
-			event.setCancelled(true);
-			event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command)));
-		}
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.listeners;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.craftbukkit.command.ColouredConsoleSender;
+import org.bukkit.craftbukkit.entity.CraftItem;
+import org.bukkit.entity.CreatureType;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Wolf;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.PlayerCommandPreprocessEvent;
+import org.bukkit.event.player.PlayerFishEvent;
+import org.bukkit.event.player.PlayerFishEvent.State;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerListener;
+import org.bukkit.event.player.PlayerLoginEvent;
+import org.bukkit.event.player.PlayerPickupItemEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.event.player.PlayerRespawnEvent;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.Item;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.commands.general.XprateCommand;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.spout.mmoHelper;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.skills.Fishing;
+import com.gmail.nossr50.skills.Herbalism;
+import com.gmail.nossr50.skills.Repair;
+import com.gmail.nossr50.skills.Skills;
+
+
+public class mcPlayerListener extends PlayerListener 
+{
+	protected static final Logger log = Logger.getLogger("Minecraft"); //$NON-NLS-1$
+	public Location spawn = null;
+	private mcMMO plugin;
+
+	public mcPlayerListener(mcMMO instance) 
+	{
+		plugin = instance;
+	}
+	
+	public void onPlayerFish(PlayerFishEvent event) 
+	{
+		if(mcPermissions.getInstance().fishing(event.getPlayer()))
+		{
+			if(event.getState() == State.CAUGHT_FISH)
+			{
+				if(event.getCaught() instanceof CraftItem)
+				{
+					Fishing.processResults(event);
+				}
+			} else if (event.getState() == State.CAUGHT_ENTITY)
+			{
+				if(Users.getProfile(event.getPlayer()).getSkillLevel(SkillType.FISHING) >= 150 && event.getCaught() instanceof LivingEntity)
+				{
+					Fishing.shakeMob(event);
+				}
+			}
+		}
+	}
+	
+	 public void onPlayerPickupItem(PlayerPickupItemEvent event) 
+	 {
+		 if(Users.getProfile(event.getPlayer()).getBerserkMode())
+		 {
+			 event.setCancelled(true);
+		 }
+	 }
+
+	public void onPlayerRespawn(PlayerRespawnEvent event) 
+	{
+		
+		Player player = event.getPlayer();
+		PlayerProfile PP = Users.getProfile(player);
+		if(LoadProperties.enableMySpawn && mcPermissions.getInstance().mySpawn(player))
+		{
+			if(player != null && PP != null)
+			{
+				PP.setRespawnATS(System.currentTimeMillis());
+				
+				Location mySpawn = PP.getMySpawn(player);
+				
+				if(mySpawn != null)
+				{
+					{
+						event.setRespawnLocation(mySpawn);
+					}
+				}
+			}
+		}
+	}
+	
+	public void onPlayerLogin(PlayerLoginEvent event) 
+	{
+		Users.addUser(event.getPlayer());
+	}
+
+	public void onPlayerQuit(PlayerQuitEvent event) 
+	{
+		
+		/*
+		 * GARBAGE COLLECTION
+		 */
+		//Discard the PlayerProfile object
+		Player player = event.getPlayer();
+		
+		if(LoadProperties.spoutEnabled)
+		{
+			if(SpoutStuff.playerHUDs.containsKey(player))
+				SpoutStuff.playerHUDs.remove(player);
+			if(mmoHelper.containers.containsKey(player))
+				mmoHelper.containers.remove(player);
+		}
+		
+		Users.removeUser(event.getPlayer());
+	}
+
+	public void onPlayerJoin(PlayerJoinEvent event) 
+	{
+		Player player = event.getPlayer();
+		if(mcPermissions.getInstance().motd(player) && LoadProperties.enableMotd)
+		{
+			player.sendMessage(mcLocale.getString("mcPlayerListener.MOTD", new Object[] {plugin.getDescription().getVersion(), LoadProperties.mcmmo}));
+			player.sendMessage(mcLocale.getString("mcPlayerListener.WIKI"));
+		}
+		//THIS IS VERY BAD WAY TO DO THINGS, NEED BETTER WAY
+		if(XprateCommand.xpevent)
+			player.sendMessage(ChatColor.GOLD+"mcMMO is currently in an XP rate event! XP rate is "+LoadProperties.xpGainMultiplier+"x!");
+	}
+
+	public void onPlayerInteract(PlayerInteractEvent event) 
+	{
+		Player player = event.getPlayer();
+		PlayerProfile PP = Users.getProfile(player);
+		Action action = event.getAction();
+		Block block = event.getClickedBlock();
+
+		/*
+		 * Ability checks
+		 */
+		if(action == Action.RIGHT_CLICK_BLOCK)
+		{
+			ItemStack is = player.getItemInHand();
+			if(LoadProperties.enableMySpawn && block != null && player != null)
+			{
+				if(block.getTypeId() == 26 && mcPermissions.getInstance().setMySpawn(player))
+				{
+					Location loc = player.getLocation();
+					if(mcPermissions.getInstance().setMySpawn(player)){
+						PP.setMySpawn(loc.getX(), loc.getY(), loc.getZ(), loc.getWorld().getName());
+					}
+					//player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnSet"));
+				}
+			}
+
+			if(block != null && player != null && mcPermissions.getInstance().repair(player) 
+					&& event.getClickedBlock().getTypeId() == 42 && (Repair.isTools(player.getItemInHand()) || Repair.isArmor(player.getItemInHand())))
+			{
+				Repair.repairCheck(player, is, event.getClickedBlock());
+				event.setCancelled(true);
+				player.updateInventory();
+			}
+
+			if(LoadProperties.enableAbilities && m.abilityBlockCheck(block))
+			{
+				if(block != null && m.isHoe(player.getItemInHand()) && block.getTypeId() != 3 && block.getTypeId() != 2 && block.getTypeId() != 60){
+					Skills.hoeReadinessCheck(player);
+				}
+				Skills.abilityActivationCheck(player);
+			}
+
+			//GREEN THUMB
+			if(block != null && mcPermissions.getInstance().herbalism(player) && (block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT || block.getType() == Material.SMOOTH_BRICK) && player.getItemInHand().getType() == Material.SEEDS)
+			{
+				boolean pass = false;
+				if(Herbalism.hasSeeds(player))
+				{
+					Herbalism.removeSeeds(player);
+					
+					if(block.getType() == Material.DIRT || block.getType() == Material.COBBLESTONE || block.getType() == Material.SMOOTH_BRICK)
+					{
+						if(Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM) && m.blockBreakSimulate(block, player))
+						{
+							switch(block.getType())
+							{
+							case COBBLESTONE:
+								if(LoadProperties.enableCobbleToMossy)
+								{
+									block.setType(Material.MOSSY_COBBLESTONE);
+									pass = true;
+								}
+								break;
+							case DIRT:
+								pass = true;
+								block.setType(Material.GRASS);
+								break;
+							case SMOOTH_BRICK:
+								pass = true;
+								block.setData((byte)1);
+								break;
+							}
+							if(pass == false)
+								player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumbFail"));
+						}
+					}
+				}
+				return;
+			}
+		}
+		if(LoadProperties.enableAbilities && action == Action.RIGHT_CLICK_AIR)
+		{
+			Skills.hoeReadinessCheck(player);
+			Skills.abilityActivationCheck(player);
+		}
+		
+		/*
+		 * ITEM CHECKS
+		 */
+		if(action == Action.RIGHT_CLICK_AIR)
+			Item.itemchecks(player, plugin);
+		if(action == Action.RIGHT_CLICK_BLOCK)
+		{
+			if(m.abilityBlockCheck(event.getClickedBlock()))
+				Item.itemchecks(player, plugin);
+		}
+		
+		if(player.isSneaking() && mcPermissions.getInstance().taming(player) && (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK))
+		{
+			if(player.getItemInHand().getType() == Material.BONE && player.getItemInHand().getAmount() > 9)
+			{
+				for(Entity x : player.getNearbyEntities(40, 40, 40))
+				{
+					if(x instanceof Wolf)
+					{
+						player.sendMessage(mcLocale.getString("m.TamingSummonFailed"));
+						return;
+					}
+				}
+				World world = player.getWorld();
+				world.spawnCreature(player.getLocation(), CreatureType.WOLF);
+				
+				ItemStack[] inventory = player.getInventory().getContents();
+    	    	for(ItemStack x : inventory){
+    	    		if(x != null && x.getAmount() > LoadProperties.bonesConsumedByCOTW-1 && x.getType() == Material.BONE){
+    	    			if(x.getAmount() >= LoadProperties.bonesConsumedByCOTW)
+    	    			{
+    	    				x.setAmount(x.getAmount() - LoadProperties.bonesConsumedByCOTW);
+    	    				player.getInventory().setContents(inventory);
+        	    			player.updateInventory();
+        	    			break;
+    	    			} else {
+    	    				x.setAmount(0);
+    	    				x.setTypeId(0);
+    	    				player.getInventory().setContents(inventory);
+        	    			player.updateInventory();
+        	    			break;
+    	    			}
+    	    		}
+    	    	}
+    	    	player.sendMessage(mcLocale.getString("m.TamingSummon"));
+			}
+		}
+	}
+
+	public void onPlayerChat(PlayerChatEvent event) 
+	{
+		Player player = event.getPlayer();
+		PlayerProfile PP = Users.getProfile(player);
+		if(PP.getPartyChatMode())
+		{
+			event.setCancelled(true);
+			String format = ChatColor.GREEN + "(" + ChatColor.WHITE + player.getDisplayName() + ChatColor.GREEN + ") "+event.getMessage();
+			for(Player x : Bukkit.getServer().getOnlinePlayers())
+			{
+				if(Party.getInstance().inSameParty(player, x))
+					x.sendMessage(format);
+			}
+			if(Bukkit.getServer() instanceof ColouredConsoleSender)
+			{
+				ColouredConsoleSender ccs = (ColouredConsoleSender) Bukkit.getServer();
+				ccs.sendMessage(ChatColor.GREEN+"[P]"+format); //Colors, woot!
+			}
+		} else if (PP.getAdminChatMode()) {
+			event.setCancelled(true);
+			String format = ChatColor.AQUA + "{" + ChatColor.WHITE + player.getDisplayName() + ChatColor.AQUA + "} "+event.getMessage();
+			for(Player x : Bukkit.getServer().getOnlinePlayers())
+			{
+				if(x.isOp() || mcPermissions.getInstance().adminChat(x))
+					x.sendMessage(format);
+			}
+			if(Bukkit.getServer() instanceof ColouredConsoleSender)
+			{
+				ColouredConsoleSender ccs = (ColouredConsoleSender) Bukkit.getServer();
+				ccs.sendMessage(ChatColor.AQUA+"[A]"+format); //Colors, woot!
+			} else {
+				log.log(Level.INFO, "[A]"+format);
+			}
+		}
+	}
+	
+	public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
+		String message = event.getMessage();
+		if(!message.startsWith("/")) return;
+		String command = message.substring(1).split(" ")[0];
+		if(plugin.aliasMap.containsKey(command)) {
+			event.setCancelled(true);
+			event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command)));
+		}
+	}
 }

+ 60 - 60
src/com/gmail/nossr50/listeners/mcSpoutInputListener.java → src/main/java/com/gmail/nossr50/listeners/mcSpoutInputListener.java

@@ -1,61 +1,61 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.listeners;
-
-import org.getspout.spoutapi.event.input.InputListener;
-import org.getspout.spoutapi.event.input.KeyPressedEvent;
-import org.getspout.spoutapi.gui.ScreenType;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.popups.PopupMMO;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class mcSpoutInputListener extends InputListener
-{
-	mcMMO plugin = null;
-	
-	public mcSpoutInputListener(mcMMO pluginx)
-	{
-		plugin = pluginx;
-	}
-	
-	public void onKeyPressedEvent(KeyPressedEvent event) 
-	{
-		if(!event.getPlayer().isSpoutCraftEnabled() || event.getPlayer().getMainScreen().getActivePopup() != null)
-			return;
-		if(event.getScreenType() != ScreenType.GAME_SCREEN)
-			return;
-		
-		SpoutPlayer sPlayer = event.getPlayer();
-		
-		if(event.getKey() == SpoutStuff.keypress)
-		{
-			if(!SpoutStuff.playerScreens.containsKey(sPlayer))
-			{
-				PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin);
-				SpoutStuff.playerScreens.put(sPlayer, mmoPop);
-				sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));	
-				sPlayer.getMainScreen().setDirty(true);
-			} else {
-				sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));	
-				sPlayer.getMainScreen().setDirty(true);
-			}
-		}
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.listeners;
+
+import org.getspout.spoutapi.event.input.InputListener;
+import org.getspout.spoutapi.event.input.KeyPressedEvent;
+import org.getspout.spoutapi.gui.ScreenType;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.popups.PopupMMO;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class mcSpoutInputListener extends InputListener
+{
+	mcMMO plugin = null;
+	
+	public mcSpoutInputListener(mcMMO pluginx)
+	{
+		plugin = pluginx;
+	}
+	
+	public void onKeyPressedEvent(KeyPressedEvent event) 
+	{
+		if(!event.getPlayer().isSpoutCraftEnabled() || event.getPlayer().getMainScreen().getActivePopup() != null)
+			return;
+		if(event.getScreenType() != ScreenType.GAME_SCREEN)
+			return;
+		
+		SpoutPlayer sPlayer = event.getPlayer();
+		
+		if(event.getKey() == SpoutStuff.keypress)
+		{
+			if(!SpoutStuff.playerScreens.containsKey(sPlayer))
+			{
+				PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin);
+				SpoutStuff.playerScreens.put(sPlayer, mmoPop);
+				sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));	
+				sPlayer.getMainScreen().setDirty(true);
+			} else {
+				sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));	
+				sPlayer.getMainScreen().setDirty(true);
+			}
+		}
+	}
 }

+ 48 - 48
src/com/gmail/nossr50/listeners/mcSpoutListener.java → src/main/java/com/gmail/nossr50/listeners/mcSpoutListener.java

@@ -1,49 +1,49 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.listeners;
-
-import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent;
-import org.getspout.spoutapi.event.spout.SpoutListener;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.HUDmmo;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class mcSpoutListener extends SpoutListener
-{
-	mcMMO plugin = null;
-	
-	public mcSpoutListener(mcMMO pluginx)
-	{
-		plugin = pluginx;
-	}
-	
-	public void onSpoutCraftEnable(SpoutCraftEnableEvent event) 
-	{
-		SpoutPlayer sPlayer = event.getPlayer();
-		if(sPlayer.isSpoutCraftEnabled())
-		{
-			//Setup Party HUD stuff
-			SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer));
-
-			//Party.update(sPlayer);
-			Users.getProfile(sPlayer).toggleSpoutEnabled();
-		}
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.listeners;
+
+import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent;
+import org.getspout.spoutapi.event.spout.SpoutListener;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.HUDmmo;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class mcSpoutListener extends SpoutListener
+{
+	mcMMO plugin = null;
+	
+	public mcSpoutListener(mcMMO pluginx)
+	{
+		plugin = pluginx;
+	}
+	
+	public void onSpoutCraftEnable(SpoutCraftEnableEvent event) 
+	{
+		SpoutPlayer sPlayer = event.getPlayer();
+		if(sPlayer.isSpoutCraftEnabled())
+		{
+			//Setup Party HUD stuff
+			SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer));
+
+			//Party.update(sPlayer);
+			Users.getProfile(sPlayer).toggleSpoutEnabled();
+		}
+	}
 }

+ 92 - 92
src/com/gmail/nossr50/listeners/mcSpoutScreenListener.java → src/main/java/com/gmail/nossr50/listeners/mcSpoutScreenListener.java

@@ -1,93 +1,93 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.listeners;
-
-import org.getspout.spoutapi.event.screen.ButtonClickEvent;
-import org.getspout.spoutapi.event.screen.ScreenCloseEvent;
-import org.getspout.spoutapi.event.screen.ScreenListener;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.HUDType;
-import com.gmail.nossr50.datatypes.HUDmmo;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
-import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
-import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle;
-import com.gmail.nossr50.datatypes.popups.PopupMMO;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class mcSpoutScreenListener extends ScreenListener
-{
-	mcMMO plugin = null;
-	public mcSpoutScreenListener(mcMMO pluginx)
-	{
-		plugin = pluginx;
-	}
-	public void onButtonClick(ButtonClickEvent event) 
-	{
-		SpoutPlayer sPlayer = event.getPlayer();
-		PlayerProfile PP = Users.getProfile(sPlayer);
-		
-		if(event.getButton() instanceof ButtonHUDStyle)
-		{
-			if(SpoutStuff.playerHUDs.containsKey(sPlayer))
-			{
-				SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
-				SpoutStuff.playerHUDs.remove(sPlayer);
-				
-				switch(PP.getHUDType())
-				{
-				case RETRO:
-					PP.setHUDType(HUDType.STANDARD);
-					break;
-				case STANDARD:
-					PP.setHUDType(HUDType.SMALL);
-					break;
-				case SMALL:
-					PP.setHUDType(HUDType.DISABLED);
-					break;
-				case DISABLED:
-					PP.setHUDType(HUDType.RETRO);
-				}
-				
-				SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer));
-				
-				SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP);
-			}
-		} else if (event.getButton() instanceof ButtonEscape)
-		{
-			sPlayer.getMainScreen().closePopup();
-		} else if (event.getButton() instanceof ButtonPartyToggle)
-		{
-			PP.togglePartyHUD();
-			ButtonPartyToggle bpt = (ButtonPartyToggle)event.getButton();
-			bpt.updateText(PP);
-			SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
-			SpoutStuff.playerHUDs.get(sPlayer).initializeHUD(sPlayer);
-		}
-	}
-	
-	public void onScreenClose(ScreenCloseEvent event) 
-	{
-		if(event.getScreen() instanceof PopupMMO)
-		{
-			SpoutStuff.playerScreens.remove(event.getPlayer());
-		}
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.listeners;
+
+import org.getspout.spoutapi.event.screen.ButtonClickEvent;
+import org.getspout.spoutapi.event.screen.ScreenCloseEvent;
+import org.getspout.spoutapi.event.screen.ScreenListener;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.HUDType;
+import com.gmail.nossr50.datatypes.HUDmmo;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
+import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
+import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle;
+import com.gmail.nossr50.datatypes.popups.PopupMMO;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class mcSpoutScreenListener extends ScreenListener
+{
+	mcMMO plugin = null;
+	public mcSpoutScreenListener(mcMMO pluginx)
+	{
+		plugin = pluginx;
+	}
+	public void onButtonClick(ButtonClickEvent event) 
+	{
+		SpoutPlayer sPlayer = event.getPlayer();
+		PlayerProfile PP = Users.getProfile(sPlayer);
+		
+		if(event.getButton() instanceof ButtonHUDStyle)
+		{
+			if(SpoutStuff.playerHUDs.containsKey(sPlayer))
+			{
+				SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
+				SpoutStuff.playerHUDs.remove(sPlayer);
+				
+				switch(PP.getHUDType())
+				{
+				case RETRO:
+					PP.setHUDType(HUDType.STANDARD);
+					break;
+				case STANDARD:
+					PP.setHUDType(HUDType.SMALL);
+					break;
+				case SMALL:
+					PP.setHUDType(HUDType.DISABLED);
+					break;
+				case DISABLED:
+					PP.setHUDType(HUDType.RETRO);
+				}
+				
+				SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer));
+				
+				SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP);
+			}
+		} else if (event.getButton() instanceof ButtonEscape)
+		{
+			sPlayer.getMainScreen().closePopup();
+		} else if (event.getButton() instanceof ButtonPartyToggle)
+		{
+			PP.togglePartyHUD();
+			ButtonPartyToggle bpt = (ButtonPartyToggle)event.getButton();
+			bpt.updateText(PP);
+			SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
+			SpoutStuff.playerHUDs.get(sPlayer).initializeHUD(sPlayer);
+		}
+	}
+	
+	public void onScreenClose(ScreenCloseEvent event) 
+	{
+		if(event.getScreen() instanceof PopupMMO)
+		{
+			SpoutStuff.playerScreens.remove(event.getPlayer());
+		}
+	}
 }

+ 0 - 0
src/com/gmail/nossr50/locale/locale_de.properties → src/main/java/com/gmail/nossr50/locale/locale_de.properties


+ 389 - 389
src/com/gmail/nossr50/locale/locale_en_us.properties → src/main/java/com/gmail/nossr50/locale/locale_en_us.properties

@@ -1,390 +1,390 @@
-Combat.WolfExamine=[[GREEN]]**You examine the Wolf using Beast Lore**
-Combat.WolfShowMaster=[[DARK_GREEN]]The Beast's Master \: {0}
-Combat.Ignition=[[RED]]**IGNITION**
-Combat.BurningArrowHit=[[DARK_RED]]You were struck by a burning arrow\!
-Combat.TouchedFuzzy=[[DARK_RED]]Touched Fuzzy. Felt Dizzy.
-Combat.TargetDazed=Target was [[DARK_RED]]Dazed
-Combat.WolfNoMaster=[[GRAY]]This Beast has no Master...
-Combat.WolfHealth=[[GREEN]]This beast has {0} Health 
-Combat.StruckByGore=[[RED]]**STRUCK BY GORE**
-Combat.Gore=[[GREEN]]**GORE**
-Combat.ArrowDeflect=[[WHITE]]**ARROW DEFLECT**
-Item.ChimaeraWingFail=**CHIMAERA WING FAILED\!**
-Item.ChimaeraWingPass=**CHIMAERA WING**
-Item.InjuredWait=You were injured recently and must wait to use this. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]You need more feathers..
-m.mccPartyCommands=[[GREEN]]--PARTY COMMANDS--
-m.mccParty=[party name] [[RED]]- Create/Join designated party
-m.mccPartyQ=[[RED]]- Leave your current party
-m.mccPartyToggle=[[RED]] - Toggle Party Chat
-m.mccPartyInvite=[player name] [[RED]]- Send party invite
-m.mccPartyAccept=[[RED]]- Accept party invite
-m.mccPartyTeleport=[party member name] [[RED]]- Teleport to party member
-m.mccOtherCommands=[[GREEN]]--OTHER COMMANDS--
-m.mccStats=- View your mcMMO stats
-m.mccLeaderboards=- Leaderboards
-m.mccMySpawn=- Teleports to myspawn
-m.mccClearMySpawn=- Clears your MySpawn
-m.mccToggleAbility=- Toggle ability activation with right click
-m.mccAdminToggle=- Toggle admin chat
-m.mccWhois=[playername] [[RED]]- View detailed player info
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modify target
-m.mccMcGod=- God Mode
-m.mccSkillInfo=[skillname] [[RED]]- View detailed information about a skill
-m.mccModDescription=[[RED]]- Read brief mod description
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFFECTS
-m.YourStats=YOUR STATS
-m.SkillTaming=TAMING
-m.XPGainTaming=Wolves getting harmed
-m.EffectsTaming1_0=Beast Lore
-m.EffectsTaming1_1=Bone-whacking inspects wolves
-m.EffectsTaming2_0=Gore
-m.EffectsTaming2_1=Critical Strike that applies Bleed
-m.EffectsTaming3_0=Sharpened Claws
-m.EffectsTaming3_1=Damage Bonus
-m.EffectsTaming4_0=Environmentally Aware
-m.EffectsTaming4_1=Cactus/Lava Phobia, Fall DMG Immune
-m.EffectsTaming5_0=Thick Fur
-m.EffectsTaming5_1=DMG Reduction, Fire Resistance
-m.EffectsTaming6_0=Shock Proof
-m.EffectsTaming6_1=Explosive Damage Reduction
-m.AbilLockTaming1=LOCKED UNTIL 100+ SKILL (ENVIRONMENTALLY AWARE)
-m.AbilLockTaming2=LOCKED UNTIL 250+ SKILL (THICK FUR)
-m.AbilLockTaming3=LOCKED UNTIL 500+ SKILL (SHOCK PROOF)
-m.AbilLockTaming4=LOCKED UNTIL 750+ SKILL (SHARPENED CLAWS)
-m.AbilBonusTaming1_0=Environmentally Aware
-m.AbilBonusTaming1_1=Wolves avoid danger
-m.AbilBonusTaming2_0=Thick Fur
-m.AbilBonusTaming2_1=Halved Damage, Fire Resistance
-m.AbilBonusTaming3_0=Shock Proof
-m.AbilBonusTaming3_1=Explosives do 1/6 normal damage
-m.AbilBonusTaming4_0=Sharpened Claws
-m.AbilBonusTaming4_1=+2 Damage
-m.TamingGoreChance=[[RED]]Gore Chance: [[YELLOW]]{0}%
-m.SkillWoodCutting=WOODCUTTING
-m.XPGainWoodCutting=Chopping down trees
-m.EffectsWoodCutting1_0=Tree Feller (ABILITY)
-m.EffectsWoodCutting1_1=Make trees explode
-m.EffectsWoodCutting2_0=Leaf Blower
-m.EffectsWoodCutting2_1=Blow Away Leaves
-m.EffectsWoodCutting3_0=Double Drops
-m.EffectsWoodCutting3_1=Double the normal loot
-m.AbilLockWoodCutting1=LOCKED UNTIL 100+ SKILL (LEAF BLOWER)
-m.AbilBonusWoodCutting1_0=Leaf Blower
-m.AbilBonusWoodCutting1_1=Blow away leaves
-m.WoodCuttingDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Tree Feller Length: [[YELLOW]]{0}s
-m.SkillArchery=ARCHERY
-m.XPGainArchery=Attacking Monsters
-m.EffectsArchery1_0=Ignition
-m.EffectsArchery1_1=25% Chance Enemies will ignite
-m.EffectsArchery2_0=Daze (Players)
-m.EffectsArchery2_1=Disorients foes
-m.EffectsArchery3_0=Damage+
-m.EffectsArchery3_1=Modifies Damage
-m.EffectsArchery4_0=Arrow Retrieval
-m.EffectsArchery4_1=Chance to retrieve arrows from corpses
-m.ArcheryDazeChance=[[RED]]Chance to Daze: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Chance to Retrieve Arrows: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Length of Ignition: [[YELLOW]]{0} seconds
-m.ArcheryDamagePlus=[[RED]]Damage+ (Rank{0}): [[YELLOW]]Bonus {0} damage
-m.SkillAxes=AXES
-m.XPGainAxes=Attacking Monsters
-m.EffectsAxes1_0=Skull Splitter (ABILITY)
-m.EffectsAxes1_1=Deal AoE Damage
-m.EffectsAxes2_0=Critical Strikes
-m.EffectsAxes2_1=Double Damage
-m.EffectsAxes3_0=Axe Mastery
-m.EffectsAxes3_1=Modifies Damage
-m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXEMASTERY)
-m.AbilBonusAxes1_0=Axe Mastery
-m.AbilBonusAxes1_1=Bonus 4 damage
-m.AxesCritChance=[[RED]]Chance to critically strike: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Skull Splitter Length: [[YELLOW]]{0}s
-m.SkillSwords=SWORDS
-m.XPGainSwords=Attacking Monsters
-m.EffectsSwords1_0=Counter Attack
-m.EffectsSwords1_1=Reflect 50% of damage taken
-m.EffectsSwords2_0=Serrated Strikes (ABILITY)
-m.EffectsSwords2_1=25% DMG AoE, Bleed+ AoE
-m.EffectsSwords3_0=Serrated Strikes Bleed+
-m.EffectsSwords3_1=5 Tick Bleed
-m.EffectsSwords4_0=Parrying
-m.EffectsSwords4_1=Negates Damage
-m.EffectsSwords5_0=Bleed
-m.EffectsSwords5_1=Apply a bleed DoT
-m.SwordsCounterAttChance=[[RED]]Counter Attack Chance: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Bleed Length: [[YELLOW]]{0} ticks
-m.SwordsBleedChance=[[RED]]Bleed Chance: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Parry Chance: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Serrated Strikes Length: [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]NOTE: [[YELLOW]]1 Tick happens every 2 seconds
-m.SkillAcrobatics=ACROBATICS
-m.XPGainAcrobatics=Falling
-m.EffectsAcrobatics1_0=Roll
-m.EffectsAcrobatics1_1=Reduces or Negates damage
-m.EffectsAcrobatics2_0=Graceful Roll
-m.EffectsAcrobatics2_1=Twice as effective as Roll
-m.EffectsAcrobatics3_0=Dodge
-m.EffectsAcrobatics3_1=Reduce damage by half
-m.AcrobaticsRollChance=[[RED]]Roll Chance: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Graceful Roll Chance: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Dodge Chance: [[YELLOW]]{0}%
-m.SkillMining=MINING
-m.XPGainMining=Mining Stone & Ore
-m.EffectsMining1_0=Super Breaker (ABILITY)
-m.EffectsMining1_1=Speed+, Triple Drop Chance
-m.EffectsMining2_0=Double Drops
-m.EffectsMining2_1=Double the normal loot
-m.MiningDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Super Breaker Length: [[YELLOW]]{0}s
-m.SkillRepair=REPAIR
-m.XPGainRepair=Repairing
-m.EffectsRepair1_0=Repair
-m.EffectsRepair1_1=Repair Iron Tools & Armor
-m.EffectsRepair2_0=Repair Mastery
-m.EffectsRepair2_1=Increased repair amount
-m.EffectsRepair3_0=Super Repair
-m.EffectsRepair3_1=Double effectiveness
-m.EffectsRepair4_0=Diamond Repair ({0}+ SKILL)
-m.EffectsRepair4_1=Repair Diamond Tools & Armor
-m.RepairRepairMastery=[[RED]]Repair Mastery: [[YELLOW]]Extra {0}% durability restored
-m.RepairSuperRepairChance=[[RED]]Super Repair Chance: [[YELLOW]]{0}%
-m.SkillUnarmed=UNARMED
-m.XPGainUnarmed=Attacking Monsters
-m.EffectsUnarmed1_0=Berserk (ABILITY)
-m.EffectsUnarmed1_1=+50% DMG, Breaks weak materials
-m.EffectsUnarmed2_0=Disarm (Players)
-m.EffectsUnarmed2_1=Drops the foes item held in hand
-m.EffectsUnarmed3_0=Unarmed Mastery
-m.EffectsUnarmed3_1=Large Damage Upgrade
-m.EffectsUnarmed4_0=Unarmed Apprentice
-m.EffectsUnarmed4_1=Damage Upgrade
-m.EffectsUnarmed5_0=Arrow Deflect
-m.EffectsUnarmed5_1=Deflect arrows
-m.AbilLockUnarmed1=LOCKED UNTIL 250+ SKILL (UNARMED APPRENTICE)
-m.AbilLockUnarmed2=LOCKED UNTIL 500+ SKILL (UNARMED MASTERY)
-m.AbilBonusUnarmed1_0=Unarmed Apprentice
-m.AbilBonusUnarmed1_1=+2 DMG Upgrade
-m.AbilBonusUnarmed2_0=Unarmed Mastery
-m.AbilBonusUnarmed2_1=+4 DMG Upgrade
-m.UnarmedArrowDeflectChance=[[RED]]Arrow Deflect Chance: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Disarm Chance: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Berserk Length: [[YELLOW]]{0}s
-m.SkillHerbalism=HERBALISM
-m.XPGainHerbalism=Harvesting Herbs
-m.EffectsHerbalism1_0=Green Terra (ABILITY)
-m.EffectsHerbalism1_1=Spread the Terra, 3x Drops
-m.EffectsHerbalism2_0=Green Thumb (Wheat)
-m.EffectsHerbalism2_1=Auto-Plants wheat when harvesting
-m.EffectsHerbalism3_0=Green Thumb (Cobble)
-m.EffectsHerbalism3_1=Cobblestone -> Mossy w/ Seeds
-m.EffectsHerbalism4_0=Food+
-m.EffectsHerbalism4_1=Modifies health received from bread/stew
-m.EffectsHerbalism5_0=Double Drops (All Herbs)
-m.EffectsHerbalism5_1=Double the normal loot
-m.HerbalismGreenTerraLength=[[RED]]Green Terra Length: [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Green Thumb Chance: [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Green Thumb Stage: [[YELLOW]] Wheat grows in stage {0}
-m.HerbalismDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Food+ (Rank{0}): [[YELLOW]]Bonus {0} healing
-m.SkillExcavation=EXCAVATION
-m.XPGainExcavation=Digging and finding treasures
-m.EffectsExcavation1_0=Giga Drill Breaker (ABILITY)
-m.EffectsExcavation1_1=3x Drop Rate, 3x EXP, +Speed
-m.EffectsExcavation2_0=Treasure Hunter
-m.EffectsExcavation2_1=Ability to dig for treasure
-m.ExcavationGreenTerraLength=[[RED]]Giga Drill Breaker Length: [[YELLOW]]{0}s
-mcBlockListener.PlacedAnvil=[[DARK_RED]]You have placed an anvil, anvils can repair tools and armor.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Your wolf scurries back to you...
-mcPlayerListener.AbilitiesOff=Ability use toggled off
-mcPlayerListener.AbilitiesOn=Ability use toggled on
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**ABILITIES REFRESHED\!**
-mcPlayerListener.AcrobaticsSkill=Acrobatics: 
-mcPlayerListener.ArcherySkill=Archery: 
-mcPlayerListener.AxesSkill=Axes: 
-mcPlayerListener.ExcavationSkill=Excavation: 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Godmode Disabled
-mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Godmode Enabled
-mcPlayerListener.GreenThumb=[[GREEN]]**GREEN THUMB**
-mcPlayerListener.GreenThumbFail=[[RED]]**GREEN THUMB FAIL**
-mcPlayerListener.HerbalismSkill=Herbalism: 
-mcPlayerListener.MiningSkill=Mining: 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn is now cleared.
-mcPlayerListener.MyspawnNotExist=[[RED]]Configure your myspawn first with a bed.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn has been set to your current location.
-mcPlayerListener.MyspawnTimeNotice=You must wait {0}m {1}s to use myspawn
-mcPlayerListener.NoPermission=Insufficient mcPermissions.
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]If you don't have access to a skill it will not be shown here.
-mcPlayerListener.NotInParty=[[RED]]You are not in a party.
-mcPlayerListener.InviteSuccess=[[GREEN]]Invite sent successfully.
-mcPlayerListener.ReceivedInvite1=[[RED]]ALERT: [[GREEN]]You have received a party invite for {0} from {1}
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] to accept the invite 
-mcPlayerListener.InviteAccepted=[[GREEN]]Invite Accepted. You have joined party {0}
-mcPlayerListener.NoInvites=[[RED]]You have no invites at this time
-mcPlayerListener.YouAreInParty=[[GREEN]]You are in party {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Party Members
-mcPlayerListener.LeftParty=[[RED]]You have left that party
-mcPlayerListener.JoinedParty=Joined Party: {0}
-mcPlayerListener.PartyChatOn=Party Chat only [[GREEN]]On
-mcPlayerListener.PartyChatOff=Party Chat only [[RED]]Off
-mcPlayerListener.AdminChatOn=Admin Chat only [[GREEN]]On
-mcPlayerListener.AdminChatOff=Admin Chat only [[RED]]Off
-mcPlayerListener.MOTD=[[BLUE]]This server is running mcMMO {0} type [[YELLOW]]/{1}[[BLUE]] for help.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
-mcPlayerListener.PowerLevel=[[DARK_RED]]POWER LEVEL: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Leaderboard--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
-mcPlayerListener.RepairSkill=Repair: 
-mcPlayerListener.SwordsSkill=Swords: 
-mcPlayerListener.TamingSkill=Taming: 
-mcPlayerListener.UnarmedSkill=Unarmed: 
-mcPlayerListener.WoodcuttingSkill=Woodcutting: 
-mcPlayerListener.YourStats=[[GREEN]][mcMMO] Stats
-Party.InformedOnJoin={0} [[GREEN]] has joined your party
-Party.InformedOnQuit={0} [[GREEN]] has left your party
-Skills.YourGreenTerra=[[GREEN]]Your [[YELLOW]]Green Terra [[GREEN]]ability is refreshed!
-Skills.YourTreeFeller=[[GREEN]]Your [[YELLOW]]Tree Feller [[GREEN]]ability is refreshed!
-Skills.YourSuperBreaker=[[GREEN]]Your [[YELLOW]]Super Breaker [[GREEN]]ability is refreshed!
-Skills.YourSerratedStrikes=[[GREEN]]Your [[YELLOW]]Serrated Strikes [[GREEN]]ability is refreshed!
-Skills.YourBerserk=[[GREEN]]Your [[YELLOW]]Berserk [[GREEN]]ability is refreshed!
-Skills.YourSkullSplitter=[[GREEN]]Your [[YELLOW]]Skull Splitter [[GREEN]]ability is refreshed!
-Skills.YourGigaDrillBreaker=[[GREEN]]Your [[YELLOW]]Giga Drill Breaker [[GREEN]]ability is refreshed!
-Skills.TooTired=[[RED]]You are too tired to use that ability again.
-Skills.ReadyHoe=[[GREEN]]**YOU READY YOUR HOE**
-Skills.LowerHoe=[[GRAY]]**YOU LOWER YOUR HOE**
-Skills.ReadyAxe=[[GREEN]]**YOU READY YOUR AXE**
-Skills.LowerAxe=[[GRAY]]**YOU LOWER YOUR AXE**
-Skills.ReadyFists=[[GREEN]]**YOU READY YOUR FISTS**
-Skills.LowerFists=[[GRAY]]**YOU LOWER YOUR FISTS**
-Skills.ReadyPickAxe=[[GREEN]]**YOU READY YOUR PICKAXE**
-Skills.LowerPickAxe=[[GRAY]]**YOU LOWER YOUR PICKAXE**
-Skills.ReadyShovel=[[GREEN]]**YOU READY YOUR SHOVEL**
-Skills.LowerShovel=[[GRAY]]**YOU LOWER YOUR SHOVEL**
-Skills.ReadySword=[[GREEN]]**YOU READY YOUR SWORD**
-Skills.LowerSword=[[GRAY]]**YOU LOWER YOUR SWORD**
-Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
-Skills.GreenTerraOn=[[GREEN]]**GREEN TERRA ACTIVATED**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Green Terra!
-Skills.TreeFellerOn=[[GREEN]]**TREE FELLER ACTIVATED**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Tree Feller!
-Skills.SuperBreakerOn=[[GREEN]]**SUPER BREAKER ACTIVATED**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Super Breaker!
-Skills.SerratedStrikesOn=[[GREEN]]**SERRATED STRIKES ACTIVATED**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Serrated Strikes!
-Skills.SkullSplitterOn=[[GREEN]]**SKULL SPLITTER ACTIVATED**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Skull Splitter!
-Skills.GigaDrillBreakerOn=[[GREEN]]**GIGA DRILL BREAKER ACTIVATED**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Giga Drill Breaker!
-Skills.GreenTerraOff=[[RED]]**Green Terra has worn off**
-Skills.TreeFellerOff=[[RED]]**Tree Feller has worn off**
-Skills.SuperBreakerOff=[[RED]]**Super Breaker has worn off**
-Skills.SerratedStrikesOff=[[RED]]**Serrated Strikes has worn off**
-Skills.BerserkOff=[[RED]]**Berserk has worn off**
-Skills.SkullSplitterOff=[[RED]]**Skull Splitter has worn off**
-Skills.GigaDrillBreakerOff=[[RED]]**Giga Drill Breaker has worn off**
-Skills.TamingUp=[[YELLOW]]Taming skill increased by {0}. Total ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Acrobatics skill increased by {0}. Total ({1})
-Skills.ArcheryUp=[[YELLOW]]Archery skill increased by {0}. Total ({1})
-Skills.SwordsUp=[[YELLOW]]Swords skill increased by {0}. Total ({1})
-Skills.AxesUp=[[YELLOW]]Axes skill increased by {0}. Total ({1})
-Skills.UnarmedUp=[[YELLOW]]Unarmed skill increased by {0}. Total ({1})
-Skills.HerbalismUp=[[YELLOW]]Herbalism skill increased by {0}. Total ({1})
-Skills.MiningUp=[[YELLOW]]Mining skill increased by {0}. Total ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Woodcutting skill increased by {0}. Total ({1})
-Skills.RepairUp=[[YELLOW]]Repair skill increased by {0}. Total ({1})
-Skills.ExcavationUp=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
-Skills.FeltEasy=[[GRAY]]That felt easy.
-Skills.StackedItems=[[DARK_RED]]You can't repair stacked items
-Skills.NeedMore=[[DARK_RED]]You need more
-Skills.AdeptDiamond=[[DARK_RED]]You're not skilled enough to repair Diamond
-Skills.FullDurability=[[GRAY]]That is at full durability.
-Skills.Disarmed=[[DARK_RED]]You have been disarmed!
-mcPlayerListener.SorcerySkill=Sorcery: 
-m.SkillSorcery=SORCERY
-Sorcery.HasCast=[[GREEN]]**CASTING**[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]]MP
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} MP
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Out Of Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=THUNDER
-Sorcery.Curative.Self=CURE SELF
-Sorcery.Curative.Other=CURE OTHER
-m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
-Combat.BeastLore=[[GREEN]]**BEAST LORE**
-Combat.BeastLoreOwner=[[DARK_AQUA]]Owner ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/8)
-mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
-Party.Locked=[[RED]]Party is locked, only party leader may invite.
-Party.IsntLocked=[[GRAY]]Party is not locked
-Party.Unlocked=[[GRAY]]Party is unlocked
-Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
-Party.Help3=[[RED]]Consult /{0} ? for more information
-Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
-Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
-Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
-Party.NotOwner=[[DARK_RED]]You are not the party owner
-Party.InvalidName=[[DARK_RED]]That is not a valid party name
-Party.PasswordSet=[[GREEN]]Party password set to {0}
-Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
-Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
-Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
-Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
-Commands.xprate.proper3=[[RED]]Enter true or false for the second value
-Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
-Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
-Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
-Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
-Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
-Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]**You examine the Wolf using Beast Lore**
+Combat.WolfShowMaster=[[DARK_GREEN]]The Beast's Master \: {0}
+Combat.Ignition=[[RED]]**IGNITION**
+Combat.BurningArrowHit=[[DARK_RED]]You were struck by a burning arrow\!
+Combat.TouchedFuzzy=[[DARK_RED]]Touched Fuzzy. Felt Dizzy.
+Combat.TargetDazed=Target was [[DARK_RED]]Dazed
+Combat.WolfNoMaster=[[GRAY]]This Beast has no Master...
+Combat.WolfHealth=[[GREEN]]This beast has {0} Health 
+Combat.StruckByGore=[[RED]]**STRUCK BY GORE**
+Combat.Gore=[[GREEN]]**GORE**
+Combat.ArrowDeflect=[[WHITE]]**ARROW DEFLECT**
+Item.ChimaeraWingFail=**CHIMAERA WING FAILED\!**
+Item.ChimaeraWingPass=**CHIMAERA WING**
+Item.InjuredWait=You were injured recently and must wait to use this. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]You need more feathers..
+m.mccPartyCommands=[[GREEN]]--PARTY COMMANDS--
+m.mccParty=[party name] [[RED]]- Create/Join designated party
+m.mccPartyQ=[[RED]]- Leave your current party
+m.mccPartyToggle=[[RED]] - Toggle Party Chat
+m.mccPartyInvite=[player name] [[RED]]- Send party invite
+m.mccPartyAccept=[[RED]]- Accept party invite
+m.mccPartyTeleport=[party member name] [[RED]]- Teleport to party member
+m.mccOtherCommands=[[GREEN]]--OTHER COMMANDS--
+m.mccStats=- View your mcMMO stats
+m.mccLeaderboards=- Leaderboards
+m.mccMySpawn=- Teleports to myspawn
+m.mccClearMySpawn=- Clears your MySpawn
+m.mccToggleAbility=- Toggle ability activation with right click
+m.mccAdminToggle=- Toggle admin chat
+m.mccWhois=[playername] [[RED]]- View detailed player info
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modify target
+m.mccMcGod=- God Mode
+m.mccSkillInfo=[skillname] [[RED]]- View detailed information about a skill
+m.mccModDescription=[[RED]]- Read brief mod description
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFFECTS
+m.YourStats=YOUR STATS
+m.SkillTaming=TAMING
+m.XPGainTaming=Wolves getting harmed
+m.EffectsTaming1_0=Beast Lore
+m.EffectsTaming1_1=Bone-whacking inspects wolves
+m.EffectsTaming2_0=Gore
+m.EffectsTaming2_1=Critical Strike that applies Bleed
+m.EffectsTaming3_0=Sharpened Claws
+m.EffectsTaming3_1=Damage Bonus
+m.EffectsTaming4_0=Environmentally Aware
+m.EffectsTaming4_1=Cactus/Lava Phobia, Fall DMG Immune
+m.EffectsTaming5_0=Thick Fur
+m.EffectsTaming5_1=DMG Reduction, Fire Resistance
+m.EffectsTaming6_0=Shock Proof
+m.EffectsTaming6_1=Explosive Damage Reduction
+m.AbilLockTaming1=LOCKED UNTIL 100+ SKILL (ENVIRONMENTALLY AWARE)
+m.AbilLockTaming2=LOCKED UNTIL 250+ SKILL (THICK FUR)
+m.AbilLockTaming3=LOCKED UNTIL 500+ SKILL (SHOCK PROOF)
+m.AbilLockTaming4=LOCKED UNTIL 750+ SKILL (SHARPENED CLAWS)
+m.AbilBonusTaming1_0=Environmentally Aware
+m.AbilBonusTaming1_1=Wolves avoid danger
+m.AbilBonusTaming2_0=Thick Fur
+m.AbilBonusTaming2_1=Halved Damage, Fire Resistance
+m.AbilBonusTaming3_0=Shock Proof
+m.AbilBonusTaming3_1=Explosives do 1/6 normal damage
+m.AbilBonusTaming4_0=Sharpened Claws
+m.AbilBonusTaming4_1=+2 Damage
+m.TamingGoreChance=[[RED]]Gore Chance: [[YELLOW]]{0}%
+m.SkillWoodCutting=WOODCUTTING
+m.XPGainWoodCutting=Chopping down trees
+m.EffectsWoodCutting1_0=Tree Feller (ABILITY)
+m.EffectsWoodCutting1_1=Make trees explode
+m.EffectsWoodCutting2_0=Leaf Blower
+m.EffectsWoodCutting2_1=Blow Away Leaves
+m.EffectsWoodCutting3_0=Double Drops
+m.EffectsWoodCutting3_1=Double the normal loot
+m.AbilLockWoodCutting1=LOCKED UNTIL 100+ SKILL (LEAF BLOWER)
+m.AbilBonusWoodCutting1_0=Leaf Blower
+m.AbilBonusWoodCutting1_1=Blow away leaves
+m.WoodCuttingDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Tree Feller Length: [[YELLOW]]{0}s
+m.SkillArchery=ARCHERY
+m.XPGainArchery=Attacking Monsters
+m.EffectsArchery1_0=Ignition
+m.EffectsArchery1_1=25% Chance Enemies will ignite
+m.EffectsArchery2_0=Daze (Players)
+m.EffectsArchery2_1=Disorients foes
+m.EffectsArchery3_0=Damage+
+m.EffectsArchery3_1=Modifies Damage
+m.EffectsArchery4_0=Arrow Retrieval
+m.EffectsArchery4_1=Chance to retrieve arrows from corpses
+m.ArcheryDazeChance=[[RED]]Chance to Daze: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Chance to Retrieve Arrows: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Length of Ignition: [[YELLOW]]{0} seconds
+m.ArcheryDamagePlus=[[RED]]Damage+ (Rank{0}): [[YELLOW]]Bonus {0} damage
+m.SkillAxes=AXES
+m.XPGainAxes=Attacking Monsters
+m.EffectsAxes1_0=Skull Splitter (ABILITY)
+m.EffectsAxes1_1=Deal AoE Damage
+m.EffectsAxes2_0=Critical Strikes
+m.EffectsAxes2_1=Double Damage
+m.EffectsAxes3_0=Axe Mastery
+m.EffectsAxes3_1=Modifies Damage
+m.AbilLockAxes1=LOCKED UNTIL 500+ SKILL (AXEMASTERY)
+m.AbilBonusAxes1_0=Axe Mastery
+m.AbilBonusAxes1_1=Bonus 4 damage
+m.AxesCritChance=[[RED]]Chance to critically strike: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Skull Splitter Length: [[YELLOW]]{0}s
+m.SkillSwords=SWORDS
+m.XPGainSwords=Attacking Monsters
+m.EffectsSwords1_0=Counter Attack
+m.EffectsSwords1_1=Reflect 50% of damage taken
+m.EffectsSwords2_0=Serrated Strikes (ABILITY)
+m.EffectsSwords2_1=25% DMG AoE, Bleed+ AoE
+m.EffectsSwords3_0=Serrated Strikes Bleed+
+m.EffectsSwords3_1=5 Tick Bleed
+m.EffectsSwords4_0=Parrying
+m.EffectsSwords4_1=Negates Damage
+m.EffectsSwords5_0=Bleed
+m.EffectsSwords5_1=Apply a bleed DoT
+m.SwordsCounterAttChance=[[RED]]Counter Attack Chance: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Bleed Length: [[YELLOW]]{0} ticks
+m.SwordsBleedChance=[[RED]]Bleed Chance: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Parry Chance: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Serrated Strikes Length: [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]NOTE: [[YELLOW]]1 Tick happens every 2 seconds
+m.SkillAcrobatics=ACROBATICS
+m.XPGainAcrobatics=Falling
+m.EffectsAcrobatics1_0=Roll
+m.EffectsAcrobatics1_1=Reduces or Negates damage
+m.EffectsAcrobatics2_0=Graceful Roll
+m.EffectsAcrobatics2_1=Twice as effective as Roll
+m.EffectsAcrobatics3_0=Dodge
+m.EffectsAcrobatics3_1=Reduce damage by half
+m.AcrobaticsRollChance=[[RED]]Roll Chance: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Graceful Roll Chance: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Dodge Chance: [[YELLOW]]{0}%
+m.SkillMining=MINING
+m.XPGainMining=Mining Stone & Ore
+m.EffectsMining1_0=Super Breaker (ABILITY)
+m.EffectsMining1_1=Speed+, Triple Drop Chance
+m.EffectsMining2_0=Double Drops
+m.EffectsMining2_1=Double the normal loot
+m.MiningDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Super Breaker Length: [[YELLOW]]{0}s
+m.SkillRepair=REPAIR
+m.XPGainRepair=Repairing
+m.EffectsRepair1_0=Repair
+m.EffectsRepair1_1=Repair Iron Tools & Armor
+m.EffectsRepair2_0=Repair Mastery
+m.EffectsRepair2_1=Increased repair amount
+m.EffectsRepair3_0=Super Repair
+m.EffectsRepair3_1=Double effectiveness
+m.EffectsRepair4_0=Diamond Repair ({0}+ SKILL)
+m.EffectsRepair4_1=Repair Diamond Tools & Armor
+m.RepairRepairMastery=[[RED]]Repair Mastery: [[YELLOW]]Extra {0}% durability restored
+m.RepairSuperRepairChance=[[RED]]Super Repair Chance: [[YELLOW]]{0}%
+m.SkillUnarmed=UNARMED
+m.XPGainUnarmed=Attacking Monsters
+m.EffectsUnarmed1_0=Berserk (ABILITY)
+m.EffectsUnarmed1_1=+50% DMG, Breaks weak materials
+m.EffectsUnarmed2_0=Disarm (Players)
+m.EffectsUnarmed2_1=Drops the foes item held in hand
+m.EffectsUnarmed3_0=Unarmed Mastery
+m.EffectsUnarmed3_1=Large Damage Upgrade
+m.EffectsUnarmed4_0=Unarmed Apprentice
+m.EffectsUnarmed4_1=Damage Upgrade
+m.EffectsUnarmed5_0=Arrow Deflect
+m.EffectsUnarmed5_1=Deflect arrows
+m.AbilLockUnarmed1=LOCKED UNTIL 250+ SKILL (UNARMED APPRENTICE)
+m.AbilLockUnarmed2=LOCKED UNTIL 500+ SKILL (UNARMED MASTERY)
+m.AbilBonusUnarmed1_0=Unarmed Apprentice
+m.AbilBonusUnarmed1_1=+2 DMG Upgrade
+m.AbilBonusUnarmed2_0=Unarmed Mastery
+m.AbilBonusUnarmed2_1=+4 DMG Upgrade
+m.UnarmedArrowDeflectChance=[[RED]]Arrow Deflect Chance: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Disarm Chance: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Berserk Length: [[YELLOW]]{0}s
+m.SkillHerbalism=HERBALISM
+m.XPGainHerbalism=Harvesting Herbs
+m.EffectsHerbalism1_0=Green Terra (ABILITY)
+m.EffectsHerbalism1_1=Spread the Terra, 3x Drops
+m.EffectsHerbalism2_0=Green Thumb (Wheat)
+m.EffectsHerbalism2_1=Auto-Plants wheat when harvesting
+m.EffectsHerbalism3_0=Green Thumb (Cobble)
+m.EffectsHerbalism3_1=Cobblestone -> Mossy w/ Seeds
+m.EffectsHerbalism4_0=Food+
+m.EffectsHerbalism4_1=Modifies health received from bread/stew
+m.EffectsHerbalism5_0=Double Drops (All Herbs)
+m.EffectsHerbalism5_1=Double the normal loot
+m.HerbalismGreenTerraLength=[[RED]]Green Terra Length: [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Green Thumb Chance: [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Green Thumb Stage: [[YELLOW]] Wheat grows in stage {0}
+m.HerbalismDoubleDropChance=[[RED]]Double Drop Chance: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Food+ (Rank{0}): [[YELLOW]]Bonus {0} healing
+m.SkillExcavation=EXCAVATION
+m.XPGainExcavation=Digging and finding treasures
+m.EffectsExcavation1_0=Giga Drill Breaker (ABILITY)
+m.EffectsExcavation1_1=3x Drop Rate, 3x EXP, +Speed
+m.EffectsExcavation2_0=Treasure Hunter
+m.EffectsExcavation2_1=Ability to dig for treasure
+m.ExcavationGreenTerraLength=[[RED]]Giga Drill Breaker Length: [[YELLOW]]{0}s
+mcBlockListener.PlacedAnvil=[[DARK_RED]]You have placed an anvil, anvils can repair tools and armor.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Your wolf scurries back to you...
+mcPlayerListener.AbilitiesOff=Ability use toggled off
+mcPlayerListener.AbilitiesOn=Ability use toggled on
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**ABILITIES REFRESHED\!**
+mcPlayerListener.AcrobaticsSkill=Acrobatics: 
+mcPlayerListener.ArcherySkill=Archery: 
+mcPlayerListener.AxesSkill=Axes: 
+mcPlayerListener.ExcavationSkill=Excavation: 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Godmode Disabled
+mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Godmode Enabled
+mcPlayerListener.GreenThumb=[[GREEN]]**GREEN THUMB**
+mcPlayerListener.GreenThumbFail=[[RED]]**GREEN THUMB FAIL**
+mcPlayerListener.HerbalismSkill=Herbalism: 
+mcPlayerListener.MiningSkill=Mining: 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn is now cleared.
+mcPlayerListener.MyspawnNotExist=[[RED]]Configure your myspawn first with a bed.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn has been set to your current location.
+mcPlayerListener.MyspawnTimeNotice=You must wait {0}m {1}s to use myspawn
+mcPlayerListener.NoPermission=Insufficient mcPermissions.
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]If you don't have access to a skill it will not be shown here.
+mcPlayerListener.NotInParty=[[RED]]You are not in a party.
+mcPlayerListener.InviteSuccess=[[GREEN]]Invite sent successfully.
+mcPlayerListener.ReceivedInvite1=[[RED]]ALERT: [[GREEN]]You have received a party invite for {0} from {1}
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] to accept the invite 
+mcPlayerListener.InviteAccepted=[[GREEN]]Invite Accepted. You have joined party {0}
+mcPlayerListener.NoInvites=[[RED]]You have no invites at this time
+mcPlayerListener.YouAreInParty=[[GREEN]]You are in party {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Party Members
+mcPlayerListener.LeftParty=[[RED]]You have left that party
+mcPlayerListener.JoinedParty=Joined Party: {0}
+mcPlayerListener.PartyChatOn=Party Chat only [[GREEN]]On
+mcPlayerListener.PartyChatOff=Party Chat only [[RED]]Off
+mcPlayerListener.AdminChatOn=Admin Chat only [[GREEN]]On
+mcPlayerListener.AdminChatOff=Admin Chat only [[RED]]Off
+mcPlayerListener.MOTD=[[BLUE]]This server is running mcMMO {0} type [[YELLOW]]/{1}[[BLUE]] for help.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
+mcPlayerListener.PowerLevel=[[DARK_RED]]POWER LEVEL: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Leaderboard--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
+mcPlayerListener.RepairSkill=Repair: 
+mcPlayerListener.SwordsSkill=Swords: 
+mcPlayerListener.TamingSkill=Taming: 
+mcPlayerListener.UnarmedSkill=Unarmed: 
+mcPlayerListener.WoodcuttingSkill=Woodcutting: 
+mcPlayerListener.YourStats=[[GREEN]][mcMMO] Stats
+Party.InformedOnJoin={0} [[GREEN]] has joined your party
+Party.InformedOnQuit={0} [[GREEN]] has left your party
+Skills.YourGreenTerra=[[GREEN]]Your [[YELLOW]]Green Terra [[GREEN]]ability is refreshed!
+Skills.YourTreeFeller=[[GREEN]]Your [[YELLOW]]Tree Feller [[GREEN]]ability is refreshed!
+Skills.YourSuperBreaker=[[GREEN]]Your [[YELLOW]]Super Breaker [[GREEN]]ability is refreshed!
+Skills.YourSerratedStrikes=[[GREEN]]Your [[YELLOW]]Serrated Strikes [[GREEN]]ability is refreshed!
+Skills.YourBerserk=[[GREEN]]Your [[YELLOW]]Berserk [[GREEN]]ability is refreshed!
+Skills.YourSkullSplitter=[[GREEN]]Your [[YELLOW]]Skull Splitter [[GREEN]]ability is refreshed!
+Skills.YourGigaDrillBreaker=[[GREEN]]Your [[YELLOW]]Giga Drill Breaker [[GREEN]]ability is refreshed!
+Skills.TooTired=[[RED]]You are too tired to use that ability again.
+Skills.ReadyHoe=[[GREEN]]**YOU READY YOUR HOE**
+Skills.LowerHoe=[[GRAY]]**YOU LOWER YOUR HOE**
+Skills.ReadyAxe=[[GREEN]]**YOU READY YOUR AXE**
+Skills.LowerAxe=[[GRAY]]**YOU LOWER YOUR AXE**
+Skills.ReadyFists=[[GREEN]]**YOU READY YOUR FISTS**
+Skills.LowerFists=[[GRAY]]**YOU LOWER YOUR FISTS**
+Skills.ReadyPickAxe=[[GREEN]]**YOU READY YOUR PICKAXE**
+Skills.LowerPickAxe=[[GRAY]]**YOU LOWER YOUR PICKAXE**
+Skills.ReadyShovel=[[GREEN]]**YOU READY YOUR SHOVEL**
+Skills.LowerShovel=[[GRAY]]**YOU LOWER YOUR SHOVEL**
+Skills.ReadySword=[[GREEN]]**YOU READY YOUR SWORD**
+Skills.LowerSword=[[GRAY]]**YOU LOWER YOUR SWORD**
+Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
+Skills.GreenTerraOn=[[GREEN]]**GREEN TERRA ACTIVATED**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Green Terra!
+Skills.TreeFellerOn=[[GREEN]]**TREE FELLER ACTIVATED**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Tree Feller!
+Skills.SuperBreakerOn=[[GREEN]]**SUPER BREAKER ACTIVATED**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Super Breaker!
+Skills.SerratedStrikesOn=[[GREEN]]**SERRATED STRIKES ACTIVATED**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Serrated Strikes!
+Skills.SkullSplitterOn=[[GREEN]]**SKULL SPLITTER ACTIVATED**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Skull Splitter!
+Skills.GigaDrillBreakerOn=[[GREEN]]**GIGA DRILL BREAKER ACTIVATED**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Giga Drill Breaker!
+Skills.GreenTerraOff=[[RED]]**Green Terra has worn off**
+Skills.TreeFellerOff=[[RED]]**Tree Feller has worn off**
+Skills.SuperBreakerOff=[[RED]]**Super Breaker has worn off**
+Skills.SerratedStrikesOff=[[RED]]**Serrated Strikes has worn off**
+Skills.BerserkOff=[[RED]]**Berserk has worn off**
+Skills.SkullSplitterOff=[[RED]]**Skull Splitter has worn off**
+Skills.GigaDrillBreakerOff=[[RED]]**Giga Drill Breaker has worn off**
+Skills.TamingUp=[[YELLOW]]Taming skill increased by {0}. Total ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Acrobatics skill increased by {0}. Total ({1})
+Skills.ArcheryUp=[[YELLOW]]Archery skill increased by {0}. Total ({1})
+Skills.SwordsUp=[[YELLOW]]Swords skill increased by {0}. Total ({1})
+Skills.AxesUp=[[YELLOW]]Axes skill increased by {0}. Total ({1})
+Skills.UnarmedUp=[[YELLOW]]Unarmed skill increased by {0}. Total ({1})
+Skills.HerbalismUp=[[YELLOW]]Herbalism skill increased by {0}. Total ({1})
+Skills.MiningUp=[[YELLOW]]Mining skill increased by {0}. Total ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Woodcutting skill increased by {0}. Total ({1})
+Skills.RepairUp=[[YELLOW]]Repair skill increased by {0}. Total ({1})
+Skills.ExcavationUp=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
+Skills.FeltEasy=[[GRAY]]That felt easy.
+Skills.StackedItems=[[DARK_RED]]You can't repair stacked items
+Skills.NeedMore=[[DARK_RED]]You need more
+Skills.AdeptDiamond=[[DARK_RED]]You're not skilled enough to repair Diamond
+Skills.FullDurability=[[GRAY]]That is at full durability.
+Skills.Disarmed=[[DARK_RED]]You have been disarmed!
+mcPlayerListener.SorcerySkill=Sorcery: 
+m.SkillSorcery=SORCERY
+Sorcery.HasCast=[[GREEN]]**CASTING**[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]]MP
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} MP
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Out Of Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=THUNDER
+Sorcery.Curative.Self=CURE SELF
+Sorcery.Curative.Other=CURE OTHER
+m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
+Combat.BeastLore=[[GREEN]]**BEAST LORE**
+Combat.BeastLoreOwner=[[DARK_AQUA]]Owner ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/8)
+mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
+Party.Locked=[[RED]]Party is locked, only party leader may invite.
+Party.IsntLocked=[[GRAY]]Party is not locked
+Party.Unlocked=[[GRAY]]Party is unlocked
+Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
+Party.Help3=[[RED]]Consult /{0} ? for more information
+Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
+Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
+Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
+Party.NotOwner=[[DARK_RED]]You are not the party owner
+Party.InvalidName=[[DARK_RED]]That is not a valid party name
+Party.PasswordSet=[[GREEN]]Party password set to {0}
+Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
+Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
+Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
+Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
+Commands.xprate.proper3=[[RED]]Enter true or false for the second value
+Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
+Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
+Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
+Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
+Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
+Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 389 - 389
src/com/gmail/nossr50/locale/locale_es_es.properties → src/main/java/com/gmail/nossr50/locale/locale_es_es.properties

@@ -1,390 +1,390 @@
-Combat.WolfExamine=[[GREEN]]**Has examinado a un lobo usando tu conocimiento de fieras**
-Combat.WolfShowMaster=[[DARK_GREEN]]El maestro de las fieras \: {0}
-Combat.Ignition=[[RED]]**IGNICION**
-Combat.BurningArrowHit=[[DARK_RED]]Has sido golpeado por una flecha ardiendo\!
-Combat.TouchedFuzzy=[[DARK_RED]]Estas confuso. Te sientes mareado...
-Combat.TargetDazed=El objetivo fue [[DARK_RED]]aturdido
-Combat.WolfNoMaster=[[GRAY]]Esta bestia no tiene maestro...
-Combat.WolfHealth=[[GREEN]]Esta bestia tiene {0} de salud 
-Combat.StruckByGore=[[RED]]**GOLPEADO POR MORDISCO**
-Combat.Gore=[[GREEN]]**MORDISCO**
-Combat.ArrowDeflect=[[WHITE]]**FLECHA DESVIADA**
-Item.ChimaeraWingFail=**FLECHA QUIMERA FALLADA\!**
-Item.ChimaeraWingPass=**FLECHA QUIMERA**
-Item.InjuredWait=Has sido herido recientemente y tienes que esperar para usar esto. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]Necesitas mas plumas.
-m.mccPartyCommands=[[GREEN]]--COMANDOS DE FIESTA--
-m.mccParty=[party name] [[RED]]- Crea/Entra a una fiesta especifica
-m.mccPartyQ=[[RED]]- Abandona tu fiesta actual
-m.mccPartyToggle=[[RED]] - Activa/Desactiva el chat de fiesta
-m.mccPartyInvite=[player name] [[RED]]- Envia una invitacion para la fiesta
-m.mccPartyAccept=[[RED]]- Acepta una invitacion para la fiesta
-m.mccPartyTeleport=[party member name] [[RED]]- Teletransportate a un miembro de la fiesta
-m.mccOtherCommands=[[GREEN]]--OTROS COMANDOS--
-m.mccStats=- Mira tus estadisticas de McMMO
-m.mccLeaderboards=- Ranking de lideres
-m.mccMySpawn=- Teletransportate a tu lugar de nacimiento
-m.mccClearMySpawn=- Limpia tu lugar de nacimiento
-m.mccToggleAbility=- Activa/Desactiva la activacion de la habilidad con el click derecho
-m.mccAdminToggle=- Activa/Desactiva el chat de admins
-m.mccWhois=[playername] [[RED]]- Mira informacion detallada del jugador
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifica el objetivo
-m.mccMcGod=- Modo dios
-m.mccSkillInfo=[skillname] [[RED]]- Mira informacion detallada sobre una habilidad
-m.mccModDescription=[[RED]]- Lee la descripcion del MOD
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]GANANCIA DE EXP: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFECTOS
-m.YourStats=TUS ESTADISTICAS
-m.SkillTaming=DOMADURA
-m.XPGainTaming=Lobos siendo lastimados
-m.EffectsTaming1_0=Leyenda de bestias
-m.EffectsTaming1_1=Golpear con huesos examina a los lobos
-m.EffectsTaming2_0=Sangre
-m.EffectsTaming2_1=Golpe critico que hace sangrar
-m.EffectsTaming3_0=Garras afiladas
-m.EffectsTaming3_1=Bonus de daño
-m.EffectsTaming4_0=Consciente del medio ambiente
-m.EffectsTaming4_1=Inmunidad a heridas por caidas, Cactus/Lava fobia
-m.EffectsTaming5_0=Piel gruesa
-m.EffectsTaming5_1=Reduccion de daño, Resistencia al fuego
-m.EffectsTaming6_0=A prueba de golpes
-m.EffectsTaming6_1=Reduccion del daño con explosivos
-m.AbilLockTaming1=BLOQUEADO HASTA TENER HABILIDAD +100 (CONSCIENTE DEL MEDIO AMBIENTE)
-m.AbilLockTaming2=BLOQUEADO HASTA TENER HABILIDAD +250 (PIEL GRUESA)
-m.AbilLockTaming3=BLOQUEADO HASTA TENER HABILIDAD +500 (A PRUEBA DE GOLPES)
-m.AbilLockTaming4=BLOQUEADO HASTA TENER HABILIDAD +750 (GARRAS AFILADAS)
-m.AbilBonusTaming1_0=Consciente del medio ambiente
-m.AbilBonusTaming1_1=Los lobos evitan el peligro
-m.AbilBonusTaming2_0=Piel gruesa
-m.AbilBonusTaming2_1=Daño reducido a la mitad, Resistencia al fuego
-m.AbilBonusTaming3_0=A prueba de golpes
-m.AbilBonusTaming3_1=Los explosivos hacen 1/6 del daño normal
-m.AbilBonusTaming4_0=Garras afiladas
-m.AbilBonusTaming4_1=+2 de Daño
-m.TamingGoreChance=[[RED]]Oportunidad de sangre: [[YELLOW]]{0}%
-m.SkillWoodCutting=TALA DE ARBOLES
-m.XPGainWoodCutting=Cortando arboles
-m.EffectsWoodCutting1_0=Cortador de arboles (HABILIDAD)
-m.EffectsWoodCutting1_1=Haz que los arboles exploten
-m.EffectsWoodCutting2_0=Soplador de hojas
-m.EffectsWoodCutting2_1=Aparta las hojas
-m.EffectsWoodCutting3_0=Doble de gotas
-m.EffectsWoodCutting3_1=Doble del botin habitual
-m.AbilLockWoodCutting1=BLOQUEADO HASTA TENER HABILIDAD +100 (SOPLADOR DE HOJAS)
-m.AbilBonusWoodCutting1_0=Soplador de hojas
-m.AbilBonusWoodCutting1_1=Aparta las ojas
-m.WoodCuttingDoubleDropChance=[[RED]]Posibilidad de Doble de gotas: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Duracion de tala de arboles: [[YELLOW]]{0}s
-m.SkillArchery=Tiro con Arco
-m.XPGainArchery=Ataque a monstruos
-m.EffectsArchery1_0=Ignicion
-m.EffectsArchery1_1=25% de posibilidades de que un enemigo arda en llamas
-m.EffectsArchery2_0=Aturdir (Jugadores)
-m.EffectsArchery2_1=Desorienta a los enemigos
-m.EffectsArchery3_0=+ Daño
-m.EffectsArchery3_1=Modifica el daño
-m.EffectsArchery4_0=Recuperación de flecha
-m.EffectsArchery4_1=Posibilidad de obtener flechas de cadaveres
-m.ArcheryDazeChance=[[RED]]Posibilidad de aturdir: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Posibilidad de obtener flechas: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Duracion de la ignicion: [[YELLOW]]{0} seconds
-m.ArcheryDamagePlus=[[RED]]+ Daño (Rank{0}): [[YELLOW]] {0} de bonus de daño 
-m.SkillAxes=HACHAS
-m.XPGainAxes=Ataque a monstruos
-m.EffectsAxes1_0=Cortador de cabecas (HABILIDAD)
-m.EffectsAxes1_1=Causa daños en arena
-m.EffectsAxes2_0=Golpes criticos
-m.EffectsAxes2_1=Doble de daño
-m.EffectsAxes3_0=Maestria de hacha
-m.EffectsAxes3_1=Modifica el daño
-m.AbilLockAxes1=BLOQUEADO HASTA TENER HABILIDAD +500 (MAESTRIA DE HACHA)
-m.AbilBonusAxes1_0=Maestria de hacha
-m.AbilBonusAxes1_1=4 de daño de bonus
-m.AxesCritChance=[[RED]]Posibilad de golpe critico: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Longitud de Cortador de cabezas: [[YELLOW]]{0}s
-m.SkillSwords=ESPADAS
-m.XPGainSwords=Ataque a monstruos
-m.EffectsSwords1_0=Contraataque
-m.EffectsSwords1_1=Desviar el 50% del daño obtenido
-m.EffectsSwords2_0=Golpes dentados (HABILIDAD)
-m.EffectsSwords2_1=25% de daño en Arena, y efecto de hemorragia
-m.EffectsSwords3_0=Ataque cortante con efecto de hemorragia
-m.EffectsSwords3_1=5 sangramientos
-m.EffectsSwords4_0=Desviar
-m.EffectsSwords4_1=Anula el daño
-m.EffectsSwords5_0=Hemorragia
-m.EffectsSwords5_1=Causa sangramientos repetidos a lo largo del tiempo
-m.SwordsCounterAttChance=[[RED]]Posibilidad de contraataque: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Duracion del sangrado: [[YELLOW]]{0} ticks
-m.SwordsBleedChance=[[RED]]Posibilidad de hemorragia: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Posibilidad de desviacion: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Duracion de los golpes dentados: [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]NOTA: [[YELLOW]]1 Tick ocurre cada 2 segundos
-m.SkillAcrobatics=ACROBACIAS
-m.XPGainAcrobatics=Caida
-m.EffectsAcrobatics1_0=Rodar
-m.EffectsAcrobatics1_1=Reduce o evita daño
-m.EffectsAcrobatics2_0=Rodar con estilo
-m.EffectsAcrobatics2_1=Dos veces mas efectivos que Rodar
-m.EffectsAcrobatics3_0=Esquivar
-m.EffectsAcrobatics3_1=Reduce el daño a la mitad
-m.AcrobaticsRollChance=[[RED]]Posibilidad de Rodar: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Posibilidad de Rodar con estilo: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Posibilidad de Esquivar: [[YELLOW]]{0}%
-m.SkillMining=MINAR
-m.XPGainMining=Minar Piedra & Oro
-m.EffectsMining1_0=Super rompedor (HABILIDAD)
-m.EffectsMining1_1=+ Velocidad, Posibilidad de obtener triple beneficio
-m.EffectsMining2_0=Beneficio doble
-m.EffectsMining2_1=Dobla el botin normal
-m.MiningDoubleDropChance=[[RED]]Posibilidad de Beneficio doble: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Duracion de Super Rompedor: [[YELLOW]]{0}s
-m.SkillRepair=REPARAR
-m.XPGainRepair=Reparacion
-m.EffectsRepair1_0=Reparar
-m.EffectsRepair1_1=Reparar Herramientas y armadura de Hierro
-m.EffectsRepair2_0=Maestro de reparacion
-m.EffectsRepair2_1=Crecimiento de la cantidad de reparacion
-m.EffectsRepair3_0=Super Reparacion
-m.EffectsRepair3_1=Doble efectividad
-m.EffectsRepair4_0=Reparar diamantes (+{0} HABILIDAD)
-m.EffectsRepair4_1=Reparar Herramientas y armadura de Diamantes
-m.RepairRepairMastery=[[RED]]Maestro de reparacion: [[YELLOW]]{0}% extra de duracion obtenido
-m.RepairSuperRepairChance=[[RED]]Posibilidad de Super Reparacion: [[YELLOW]]{0}%
-m.SkillUnarmed=DESARMADO
-m.XPGainUnarmed=Ataque a monstruos
-m.EffectsUnarmed1_0=Enloquecer (HABILIDAD)
-m.EffectsUnarmed1_1=+50% daño, Romper materiales fragiles
-m.EffectsUnarmed2_0=Desarmar (Jugadores)
-m.EffectsUnarmed2_1=Caida del objeto de mano del enemigo
-m.EffectsUnarmed3_0=Maestro desarmado
-m.EffectsUnarmed3_1=Mejora de grandes daños
-m.EffectsUnarmed4_0=Aprendiz desarmado
-m.EffectsUnarmed4_1=Mejora de daños
-m.EffectsUnarmed5_0=Desviar flechas
-m.EffectsUnarmed5_1=Desviar flechas
-m.AbilLockUnarmed1=BLOQUEADO HASTA TENER HABILIDAD +250 (APRENDIZ DESARMADO)
-m.AbilLockUnarmed2=BLOQUEADO HASTA TENER HABILIDAD +500 (MAESTRO DESARMADO)
-m.AbilBonusUnarmed1_0=Aprendiz desarmado
-m.AbilBonusUnarmed1_1=Mejora de +2 de daño
-m.AbilBonusUnarmed2_0=Maestro desarmado
-m.AbilBonusUnarmed2_1=Mejora de +4 de daño
-m.UnarmedArrowDeflectChance=[[RED]]Posibilidad de Desviar flechas: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Posibilidad de Desarmar: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Posibilidad de Enloquecer: [[YELLOW]]{0}s
-m.SkillHerbalism=HERBORISTERIA
-m.XPGainHerbalism=Cosecha de hierbas
-m.EffectsHerbalism1_0=Tierra verde (HABILIDAD)
-m.EffectsHerbalism1_1=Triple experiencia, Triple beneficio
-m.EffectsHerbalism2_0=Dedos verdes (Trigo)
-m.EffectsHerbalism2_1=Autoplanta el trigo al recolectarlo
-m.EffectsHerbalism3_0=Dedos verdes (Piedras)
-m.EffectsHerbalism3_1=Transorma Cobblestone en Moss Stone (usa semillas)
-m.EffectsHerbalism4_0=+ Comida
-m.EffectsHerbalism4_1=Modifica la vida recivida por el pan/guiso
-m.EffectsHerbalism5_0=Doble beneficio (Todas las hierbas)
-m.EffectsHerbalism5_1=Dobla el botin normal
-m.HerbalismGreenTerraLength=[[RED]]Duracion de Tierra verde: [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Posibilidad de Dedos verdes: [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Etapa de Dedos verdes: [[YELLOW]] El Trigo crece en la etapa {0}
-m.HerbalismDoubleDropChance=[[RED]]Posibilidad de Doble beneficio: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]+ Comida (Rank{0}): [[YELLOW]]{0} de Bonus de Curacion
-m.SkillExcavation=EXCAVACION
-m.XPGainExcavation=Excavar y encontrar tesoros
-m.EffectsExcavation1_0=Ultra perforador (HABILIDAD)
-m.EffectsExcavation1_1=Triple beneficio, Triple EXP, + Velocidad
-m.EffectsExcavation2_0=Cazatesoros
-m.EffectsExcavation2_1=Habilidad para excavar y obtener tesoros
-m.ExcavationGreenTerraLength=[[RED]]Duracion de Ultra perforador: [[YELLOW]]{0}s
-mcBlockListener.PlacedAnvil=[[DARK_RED]]Has establecido un yunque, Los yunques pueden reparar herramientas y armadura.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]El lobo se escabuye hacia ti...
-mcPlayerListener.AbilitiesOff=Uso de habilidad desactivada
-mcPlayerListener.AbilitiesOn=Uso de habilidad activada
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**HABILIDADES ACTUALIZADAS\!**
-mcPlayerListener.AcrobaticsSkill=Acrobacias: 
-mcPlayerListener.ArcherySkill=Tiro con Arco: 
-mcPlayerListener.AxesSkill=Hachas: 
-mcPlayerListener.ExcavationSkill=Excavacion: 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Modo Dios Desactivado
-mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Modo Dios Activado
-mcPlayerListener.GreenThumb=[[GREEN]]**DEDOS VERDES**
-mcPlayerListener.GreenThumbFail=[[RED]]**DEDOS VERDES FALLIDO**
-mcPlayerListener.HerbalismSkill=Herboristeria: 
-mcPlayerListener.MiningSkill=Minar: 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn esta ahora limpio.
-mcPlayerListener.MyspawnNotExist=[[RED]]Configura tu myspawn primero con una cama.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn ha sido establecido hacia tu localizacion actual.
-mcPlayerListener.MyspawnTimeNotice=Tienes que esperar {0}min {1}seg para usar myspawn
-mcPlayerListener.NoPermission=mcPermisos insuficientes
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si no tienes acceso a una habilidad no seras mostrado aqui.
-mcPlayerListener.NotInParty=[[RED]]No estas en una fiesta.
-mcPlayerListener.InviteSuccess=[[GREEN]]Invitacion enviada satisfactoriamente.
-mcPlayerListener.ReceivedInvite1=[[RED]]ALERT: [[GREEN]]Has recivido una invitacion a la fiesta para {0} de {1}
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Escribe [[GREEN]]/{0}[[YELLOW]] para aceptar la invitacion 
-mcPlayerListener.InviteAccepted=[[GREEN]]Invitacion aceptada. Has entrado a la fiesta {0}
-mcPlayerListener.NoInvites=[[RED]]No tienes invitaciones ahora mismo
-mcPlayerListener.YouAreInParty=[[GREEN]]Estas en la fiesta {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Miembros de la fiesta
-mcPlayerListener.LeftParty=[[RED]]Has abandonado esta fiesta
-mcPlayerListener.JoinedParty=Ha entrado a la fiesta: {0}
-mcPlayerListener.PartyChatOn=Solo Chat de fiesta [[GREEN]]Activado
-mcPlayerListener.PartyChatOff=Solo Chat de fiesta [[RED]]Desactivado
-mcPlayerListener.AdminChatOn=Solo Chat de Admins [[GREEN]]Activado
-mcPlayerListener.AdminChatOff=Solo Chat de Admins [[RED]]Desactivado
-mcPlayerListener.MOTD=[[BLUE]]Este server esta ejecutando mcMMO {0} escribe [[YELLOW]]/{1}[[BLUE]] para obtener ayuda.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
-mcPlayerListener.PowerLevel=[[DARK_RED]]NIVEL DE PODER: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Nivel de Poder [[YELLOW]]Ranking de lideres--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Ranking de lideres--
-mcPlayerListener.RepairSkill=Reparar: 
-mcPlayerListener.SwordsSkill=Espadas: 
-mcPlayerListener.TamingSkill=Domar: 
-mcPlayerListener.UnarmedSkill=Desarmado: 
-mcPlayerListener.WoodcuttingSkill=Tala de arboles: 
-mcPlayerListener.YourStats=[[GREEN]][mcMMO] Estadisticas
-Party.InformedOnJoin={0} [[GREEN]] ha entrado a tu fiesta
-Party.InformedOnQuit={0} [[GREEN]] ha salido de tu fiesta
-Skills.YourGreenTerra=[[GREEN]]Tu habilidad [[YELLOW]]Tierra Verde [[GREEN]] ha sido actualizada!
-Skills.YourTreeFeller=[[GREEN]]Tu habilidad [[YELLOW]]Cortador de Arboles [[GREEN]] ha sido actualizada!
-Skills.YourSuperBreaker=[[GREEN]]Tu habilidad [[YELLOW]]Super Rompedor [[GREEN]]ha sido actualizada!
-Skills.YourSerratedStrikes=[[GREEN]]Tu habilidad [[YELLOW]]Golpes dentados [[GREEN]]ha sido actualizada!
-Skills.YourBerserk=[[GREEN]]Tu habilidad [[YELLOW]]Enloquecer [[GREEN]]ha sido actualizada!
-Skills.YourSkullSplitter=[[GREEN]]Tu habilidad [[YELLOW]]Cortador de cabezas [[GREEN]]ha sido actualizada!
-Skills.YourGigaDrillBreaker=[[GREEN]]Tu habilidad [[YELLOW]]Super Perforador [[GREEN]]ha sido actualizada!
-Skills.TooTired=[[RED]]Estas demasiado cansado para usar esta habilidad de nuevo.
-Skills.ReadyHoe=[[GREEN]]**SACHO LISTO PARA USAR TIERRA VERDE**
-Skills.LowerHoe=[[GRAY]]**TU SACHO HA SIDO DESCARGADO**
-Skills.ReadyAxe=[[GREEN]]**HACHA LISTA PARA USAR CORTADOR DE ARBOLES**
-Skills.LowerAxe=[[GRAY]]**TU HACHA HA SIDO DESCARGADA**
-Skills.ReadyFists=[[GREEN]]**TUS PUÑOS ESTAN LISTOS PARA USAR ENLOQUECER**
-Skills.LowerFists=[[GRAY]]**TUS PUÑOS HAN SIDO DESCARGADOS**
-Skills.ReadyPickAxe=[[GREEN]]**TU PICO ESTA LISTO PARA USAR SUPER ROMPEDOR**
-Skills.LowerPickAxe=[[GRAY]]**TU PICO HA SIDO DESCARGADO**
-Skills.ReadyShovel=[[GREEN]]**TU PALA ESTA PREPARADA PARA USAR ULTRA PERFORADOR**
-Skills.LowerShovel=[[GRAY]]**TU PALA HA SIDO DESCARGADA**
-Skills.ReadySword=[[GREEN]]**TU ESPADA ESTA PREPARADA PARA USAR GOLPES DENTADOS**
-Skills.LowerSword=[[GRAY]]**TU PALA HA SIDO DESCARGADA**
-Skills.BerserkOn=[[GREEN]]**ENLOQUECER ACTIVADO**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Enloquecer!
-Skills.GreenTerraOn=[[GREEN]]**TIERRA VERDE ACTIVADO**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Tierra Verde!
-Skills.TreeFellerOn=[[GREEN]]**CORTADOR DE ARBOLES ACTIVADO**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Cortador de arboles!
-Skills.SuperBreakerOn=[[GREEN]]**SUPER ROMPEDOR ACTIVADO**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Super Rompedor!
-Skills.SerratedStrikesOn=[[GREEN]]**GOLPES DENTADOS ACTIVADOS**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Golpes Dentados!
-Skills.SkullSplitterOn=[[GREEN]]**CORTADOR DE CABEZAS ACTIVADO**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Cortador de Cabezas!
-Skills.GigaDrillBreakerOn=[[GREEN]]**ULTRA PERFORADOR ACTIVADO**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Ultra Perforador!
-Skills.GreenTerraOff=[[RED]]**Tierra Verde se ha agotado**
-Skills.TreeFellerOff=[[RED]]**Tree Feller se ha agotado**
-Skills.SuperBreakerOff=[[RED]]**Super Rompedor se ha agotado**
-Skills.SerratedStrikesOff=[[RED]]**Golpes Dentados se ha agotado**
-Skills.BerserkOff=[[RED]]**Enloquecer se ha agotado**
-Skills.SkullSplitterOff=[[RED]]**Cortador de Cabezas se ha agotado**
-Skills.GigaDrillBreakerOff=[[RED]]**Ultra Perforador se ha agotado**
-Skills.TamingUp=[[YELLOW]]Habilidades de domar aumentaron en un {0}. En total: ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Habilidades acrobaticas aumentaron en un {0}. En Total: ({1})
-Skills.ArcheryUp=[[YELLOW]]Habilidades de Tiro con arco aumentadas en un {0}. En Total: ({1})
-Skills.SwordsUp=[[YELLOW]]Habilidades de espada aumentadas en un {0}. En total: ({1})
-Skills.AxesUp=[[YELLOW]]Habilidades de hacha aumentadas en un {0}. En total: ({1})
-Skills.UnarmedUp=[[YELLOW]]Habilidades sin arma aumentadas en un {0}. En total: ({1})
-Skills.HerbalismUp=[[YELLOW]]Habilidades de herboristeria aumentadas en un {0}. En total: ({1})
-Skills.MiningUp=[[YELLOW]]Habilidades de mineria aumentadas en un {0}. En total: ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Habilidades de tala de arboles aumentadas en un {0}. En total: ({1})
-Skills.RepairUp=[[YELLOW]]Habilidades de reparacion aumentadas en un {0}. En total: ({1})
-Skills.ExcavationUp=[[YELLOW]]Habilidades de exvacacion aumentadas en un {0}. En total: ({1})
-Skills.FeltEasy=[[GRAY]]Esa fue facil.
-Skills.StackedItems=[[DARK_RED]]No puedes reparar objetos apilados.
-Skills.NeedMore=[[DARK_RED]]Necesitas mas
-Skills.AdeptDiamond=[[DARK_RED]]No tienes habilidades suficientes para reparar Diamante
-Skills.FullDurability=[[GRAY]]Esto esta a su maxima duracion
-Skills.Disarmed=[[DARK_RED]]Has sido desarmado!
-mcPlayerListener.SorcerySkill=Hechiceria: 
-m.SkillSorcery=HECHICERIA
-Sorcery.HasCast=[[GREEN]]**FUNDICION**[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]]MP
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} MP
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Sin Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=TRUENO
-Sorcery.Curative.Self=CURARSE A SI MISMO
-Sorcery.Curative.Other=CURAR A OTRO
-m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]EXP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
-Combat.BeastLore=[[GREEN]]**LEYENDA DE BESTIAS**
-Combat.BeastLoreOwner=[[DARK_AQUA]]Dueño ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Salud ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Salud ([[GREEN]]{0}[[DARK_AQUA]]/8)
-mcMMO.Description=[[DARK_AQUA]]Q: QUE ES ESTO?,[[GOLD]]mcMMO es un MOD de [[RED]]CODIGO LIBRE[[GOLD]] para Bukkit por [[BLUE]]nossr50,[[GOLD]]Hay muchas habilidades añadidas por mcMMO para Minecraft.,[[GOLD]]Puedes ganar experiencia de muchas formas diferentes,[[GOLD]]Tu querras escribir [[GREEN]]/SKILLNAME[[GOLD]] para saber mas sobre una habilidad.,[[DARK_AQUA]]Q: QUE HACE?,[[GOLD]]Por ejemplo... en [[DARK_AQUA]]Mineria[[GOLD]] recibiras recompensas como,[[RED]]Doble beneficio[[GOLD]] o la habilidad [[RED]]Super Rompedor[[GOLD]] que cuando[[GOLD]] se activa con el click derecho permite la Mineria durante su duracion,[[GOLD]]que esta relacionado con tu nivel de habilidad. Subiendo de nivel en [[BLUE]]Mineria,[[GOLD]]es tan sencillo como minar simples materiales!
-Party.Locked=[[RED]]La fiesta esta bloqueda, solo el lider puede invitarte
-Party.IsntLocked=[[GRAY]]La fiesta no esta bloqueada
-Party.Unlocked=[[GRAY]]La fiesta esta desbloqueada
-Party.Help1=[[RED]]El uso correcto es [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] o [[WHITE]]'q' [[YELLOW]]para salir
-Party.Help2=[[RED]]Para entrar a una fiesta con contraseña usa [[YELLOW]]/{0} [[WHITE]]<name> <password>
-Party.Help3=[[RED]]Consulta /{0} ? para mas informacion
-Party.Help4=[[RED]]Usa [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]para entrar a una fiesta o [[WHITE]]'q' [[YELLOW]]para salir
-Party.Help5=[[RED]]Para bloquear tu fiesta usa [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]Para desbloquear tu fiesta usa [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]Para proteger tu fiesta con contraseña usa [[YELLOW]]/{0} [[WHITE]]password <password>
-Party.Help8=[[RED]]Para kickear a un jugador de tu fiesta usa [[YELLOW]]/{0} [[WHITE]]kick <player>
-Party.Help9=[[RED]]Para transferir el liderazgo de una fiesta usa [[YELLOW]]/{0} [[WHITE]]owner <player>
-Party.NotOwner=[[DARK_RED]]No eres el lider de la fiesta
-Party.InvalidName=[[DARK_RED]]Este no es un nombre valido para la fiesta
-Party.PasswordSet=[[GREEN]]Contraseña de la fiesta puesta a {0}
-Party.CouldNotKick=[[DARK_RED]]No se puede kickear al jugador {0}
-Party.NotInYourParty=[[DARK_RED]]{0} no esta en tu fiesta
-Party.CouldNotSetOwner=[[DARK_RED]]No se puede poner de lider a {0}
-Commands.xprate.proper=[[DARK_AQUA]]El uso correcto es /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Tambien puedes escribir /{0} reset para hacer que todo vuelva a la normalidad
-Commands.xprate.proper3=[[RED]]Introduzca true o false en el segundo valor
-Commands.xprate.over=[[RED]]mcMMO EXP Rate Event TERMINO!!
-Commands.xprate.started=[[GOLD]]mcMMO XP EVENT COMENZO!
-Commands.xprate.started2=[[GOLD]]mcMMO XP RATE ES AHORA {0}x!!
-Commands.xplock.locked=[[GOLD]]Tu BARRA DE EXP esta bloqueada a {0}!
-Commands.xplock.unlocked=[[GOLD]]Tu BARRA DE EXP esta ahora [[GREEN]]DESBLOQUEADA[[GOLD]]!
-Commands.xplock.invalid=[[RED]]Ese no es un nombre de habilidad valido! Try /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]**Has examinado a un lobo usando tu conocimiento de fieras**
+Combat.WolfShowMaster=[[DARK_GREEN]]El maestro de las fieras \: {0}
+Combat.Ignition=[[RED]]**IGNICION**
+Combat.BurningArrowHit=[[DARK_RED]]Has sido golpeado por una flecha ardiendo\!
+Combat.TouchedFuzzy=[[DARK_RED]]Estas confuso. Te sientes mareado...
+Combat.TargetDazed=El objetivo fue [[DARK_RED]]aturdido
+Combat.WolfNoMaster=[[GRAY]]Esta bestia no tiene maestro...
+Combat.WolfHealth=[[GREEN]]Esta bestia tiene {0} de salud 
+Combat.StruckByGore=[[RED]]**GOLPEADO POR MORDISCO**
+Combat.Gore=[[GREEN]]**MORDISCO**
+Combat.ArrowDeflect=[[WHITE]]**FLECHA DESVIADA**
+Item.ChimaeraWingFail=**FLECHA QUIMERA FALLADA\!**
+Item.ChimaeraWingPass=**FLECHA QUIMERA**
+Item.InjuredWait=Has sido herido recientemente y tienes que esperar para usar esto. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]Necesitas mas plumas.
+m.mccPartyCommands=[[GREEN]]--COMANDOS DE FIESTA--
+m.mccParty=[party name] [[RED]]- Crea/Entra a una fiesta especifica
+m.mccPartyQ=[[RED]]- Abandona tu fiesta actual
+m.mccPartyToggle=[[RED]] - Activa/Desactiva el chat de fiesta
+m.mccPartyInvite=[player name] [[RED]]- Envia una invitacion para la fiesta
+m.mccPartyAccept=[[RED]]- Acepta una invitacion para la fiesta
+m.mccPartyTeleport=[party member name] [[RED]]- Teletransportate a un miembro de la fiesta
+m.mccOtherCommands=[[GREEN]]--OTROS COMANDOS--
+m.mccStats=- Mira tus estadisticas de McMMO
+m.mccLeaderboards=- Ranking de lideres
+m.mccMySpawn=- Teletransportate a tu lugar de nacimiento
+m.mccClearMySpawn=- Limpia tu lugar de nacimiento
+m.mccToggleAbility=- Activa/Desactiva la activacion de la habilidad con el click derecho
+m.mccAdminToggle=- Activa/Desactiva el chat de admins
+m.mccWhois=[playername] [[RED]]- Mira informacion detallada del jugador
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifica el objetivo
+m.mccMcGod=- Modo dios
+m.mccSkillInfo=[skillname] [[RED]]- Mira informacion detallada sobre una habilidad
+m.mccModDescription=[[RED]]- Lee la descripcion del MOD
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]GANANCIA DE EXP: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFECTOS
+m.YourStats=TUS ESTADISTICAS
+m.SkillTaming=DOMADURA
+m.XPGainTaming=Lobos siendo lastimados
+m.EffectsTaming1_0=Leyenda de bestias
+m.EffectsTaming1_1=Golpear con huesos examina a los lobos
+m.EffectsTaming2_0=Sangre
+m.EffectsTaming2_1=Golpe critico que hace sangrar
+m.EffectsTaming3_0=Garras afiladas
+m.EffectsTaming3_1=Bonus de daño
+m.EffectsTaming4_0=Consciente del medio ambiente
+m.EffectsTaming4_1=Inmunidad a heridas por caidas, Cactus/Lava fobia
+m.EffectsTaming5_0=Piel gruesa
+m.EffectsTaming5_1=Reduccion de daño, Resistencia al fuego
+m.EffectsTaming6_0=A prueba de golpes
+m.EffectsTaming6_1=Reduccion del daño con explosivos
+m.AbilLockTaming1=BLOQUEADO HASTA TENER HABILIDAD +100 (CONSCIENTE DEL MEDIO AMBIENTE)
+m.AbilLockTaming2=BLOQUEADO HASTA TENER HABILIDAD +250 (PIEL GRUESA)
+m.AbilLockTaming3=BLOQUEADO HASTA TENER HABILIDAD +500 (A PRUEBA DE GOLPES)
+m.AbilLockTaming4=BLOQUEADO HASTA TENER HABILIDAD +750 (GARRAS AFILADAS)
+m.AbilBonusTaming1_0=Consciente del medio ambiente
+m.AbilBonusTaming1_1=Los lobos evitan el peligro
+m.AbilBonusTaming2_0=Piel gruesa
+m.AbilBonusTaming2_1=Daño reducido a la mitad, Resistencia al fuego
+m.AbilBonusTaming3_0=A prueba de golpes
+m.AbilBonusTaming3_1=Los explosivos hacen 1/6 del daño normal
+m.AbilBonusTaming4_0=Garras afiladas
+m.AbilBonusTaming4_1=+2 de Daño
+m.TamingGoreChance=[[RED]]Oportunidad de sangre: [[YELLOW]]{0}%
+m.SkillWoodCutting=TALA DE ARBOLES
+m.XPGainWoodCutting=Cortando arboles
+m.EffectsWoodCutting1_0=Cortador de arboles (HABILIDAD)
+m.EffectsWoodCutting1_1=Haz que los arboles exploten
+m.EffectsWoodCutting2_0=Soplador de hojas
+m.EffectsWoodCutting2_1=Aparta las hojas
+m.EffectsWoodCutting3_0=Doble de gotas
+m.EffectsWoodCutting3_1=Doble del botin habitual
+m.AbilLockWoodCutting1=BLOQUEADO HASTA TENER HABILIDAD +100 (SOPLADOR DE HOJAS)
+m.AbilBonusWoodCutting1_0=Soplador de hojas
+m.AbilBonusWoodCutting1_1=Aparta las ojas
+m.WoodCuttingDoubleDropChance=[[RED]]Posibilidad de Doble de gotas: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Duracion de tala de arboles: [[YELLOW]]{0}s
+m.SkillArchery=Tiro con Arco
+m.XPGainArchery=Ataque a monstruos
+m.EffectsArchery1_0=Ignicion
+m.EffectsArchery1_1=25% de posibilidades de que un enemigo arda en llamas
+m.EffectsArchery2_0=Aturdir (Jugadores)
+m.EffectsArchery2_1=Desorienta a los enemigos
+m.EffectsArchery3_0=+ Daño
+m.EffectsArchery3_1=Modifica el daño
+m.EffectsArchery4_0=Recuperación de flecha
+m.EffectsArchery4_1=Posibilidad de obtener flechas de cadaveres
+m.ArcheryDazeChance=[[RED]]Posibilidad de aturdir: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Posibilidad de obtener flechas: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Duracion de la ignicion: [[YELLOW]]{0} seconds
+m.ArcheryDamagePlus=[[RED]]+ Daño (Rank{0}): [[YELLOW]] {0} de bonus de daño 
+m.SkillAxes=HACHAS
+m.XPGainAxes=Ataque a monstruos
+m.EffectsAxes1_0=Cortador de cabecas (HABILIDAD)
+m.EffectsAxes1_1=Causa daños en arena
+m.EffectsAxes2_0=Golpes criticos
+m.EffectsAxes2_1=Doble de daño
+m.EffectsAxes3_0=Maestria de hacha
+m.EffectsAxes3_1=Modifica el daño
+m.AbilLockAxes1=BLOQUEADO HASTA TENER HABILIDAD +500 (MAESTRIA DE HACHA)
+m.AbilBonusAxes1_0=Maestria de hacha
+m.AbilBonusAxes1_1=4 de daño de bonus
+m.AxesCritChance=[[RED]]Posibilad de golpe critico: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Longitud de Cortador de cabezas: [[YELLOW]]{0}s
+m.SkillSwords=ESPADAS
+m.XPGainSwords=Ataque a monstruos
+m.EffectsSwords1_0=Contraataque
+m.EffectsSwords1_1=Desviar el 50% del daño obtenido
+m.EffectsSwords2_0=Golpes dentados (HABILIDAD)
+m.EffectsSwords2_1=25% de daño en Arena, y efecto de hemorragia
+m.EffectsSwords3_0=Ataque cortante con efecto de hemorragia
+m.EffectsSwords3_1=5 sangramientos
+m.EffectsSwords4_0=Desviar
+m.EffectsSwords4_1=Anula el daño
+m.EffectsSwords5_0=Hemorragia
+m.EffectsSwords5_1=Causa sangramientos repetidos a lo largo del tiempo
+m.SwordsCounterAttChance=[[RED]]Posibilidad de contraataque: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Duracion del sangrado: [[YELLOW]]{0} ticks
+m.SwordsBleedChance=[[RED]]Posibilidad de hemorragia: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Posibilidad de desviacion: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Duracion de los golpes dentados: [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]NOTA: [[YELLOW]]1 Tick ocurre cada 2 segundos
+m.SkillAcrobatics=ACROBACIAS
+m.XPGainAcrobatics=Caida
+m.EffectsAcrobatics1_0=Rodar
+m.EffectsAcrobatics1_1=Reduce o evita daño
+m.EffectsAcrobatics2_0=Rodar con estilo
+m.EffectsAcrobatics2_1=Dos veces mas efectivos que Rodar
+m.EffectsAcrobatics3_0=Esquivar
+m.EffectsAcrobatics3_1=Reduce el daño a la mitad
+m.AcrobaticsRollChance=[[RED]]Posibilidad de Rodar: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Posibilidad de Rodar con estilo: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Posibilidad de Esquivar: [[YELLOW]]{0}%
+m.SkillMining=MINAR
+m.XPGainMining=Minar Piedra & Oro
+m.EffectsMining1_0=Super rompedor (HABILIDAD)
+m.EffectsMining1_1=+ Velocidad, Posibilidad de obtener triple beneficio
+m.EffectsMining2_0=Beneficio doble
+m.EffectsMining2_1=Dobla el botin normal
+m.MiningDoubleDropChance=[[RED]]Posibilidad de Beneficio doble: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Duracion de Super Rompedor: [[YELLOW]]{0}s
+m.SkillRepair=REPARAR
+m.XPGainRepair=Reparacion
+m.EffectsRepair1_0=Reparar
+m.EffectsRepair1_1=Reparar Herramientas y armadura de Hierro
+m.EffectsRepair2_0=Maestro de reparacion
+m.EffectsRepair2_1=Crecimiento de la cantidad de reparacion
+m.EffectsRepair3_0=Super Reparacion
+m.EffectsRepair3_1=Doble efectividad
+m.EffectsRepair4_0=Reparar diamantes (+{0} HABILIDAD)
+m.EffectsRepair4_1=Reparar Herramientas y armadura de Diamantes
+m.RepairRepairMastery=[[RED]]Maestro de reparacion: [[YELLOW]]{0}% extra de duracion obtenido
+m.RepairSuperRepairChance=[[RED]]Posibilidad de Super Reparacion: [[YELLOW]]{0}%
+m.SkillUnarmed=DESARMADO
+m.XPGainUnarmed=Ataque a monstruos
+m.EffectsUnarmed1_0=Enloquecer (HABILIDAD)
+m.EffectsUnarmed1_1=+50% daño, Romper materiales fragiles
+m.EffectsUnarmed2_0=Desarmar (Jugadores)
+m.EffectsUnarmed2_1=Caida del objeto de mano del enemigo
+m.EffectsUnarmed3_0=Maestro desarmado
+m.EffectsUnarmed3_1=Mejora de grandes daños
+m.EffectsUnarmed4_0=Aprendiz desarmado
+m.EffectsUnarmed4_1=Mejora de daños
+m.EffectsUnarmed5_0=Desviar flechas
+m.EffectsUnarmed5_1=Desviar flechas
+m.AbilLockUnarmed1=BLOQUEADO HASTA TENER HABILIDAD +250 (APRENDIZ DESARMADO)
+m.AbilLockUnarmed2=BLOQUEADO HASTA TENER HABILIDAD +500 (MAESTRO DESARMADO)
+m.AbilBonusUnarmed1_0=Aprendiz desarmado
+m.AbilBonusUnarmed1_1=Mejora de +2 de daño
+m.AbilBonusUnarmed2_0=Maestro desarmado
+m.AbilBonusUnarmed2_1=Mejora de +4 de daño
+m.UnarmedArrowDeflectChance=[[RED]]Posibilidad de Desviar flechas: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Posibilidad de Desarmar: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Posibilidad de Enloquecer: [[YELLOW]]{0}s
+m.SkillHerbalism=HERBORISTERIA
+m.XPGainHerbalism=Cosecha de hierbas
+m.EffectsHerbalism1_0=Tierra verde (HABILIDAD)
+m.EffectsHerbalism1_1=Triple experiencia, Triple beneficio
+m.EffectsHerbalism2_0=Dedos verdes (Trigo)
+m.EffectsHerbalism2_1=Autoplanta el trigo al recolectarlo
+m.EffectsHerbalism3_0=Dedos verdes (Piedras)
+m.EffectsHerbalism3_1=Transorma Cobblestone en Moss Stone (usa semillas)
+m.EffectsHerbalism4_0=+ Comida
+m.EffectsHerbalism4_1=Modifica la vida recivida por el pan/guiso
+m.EffectsHerbalism5_0=Doble beneficio (Todas las hierbas)
+m.EffectsHerbalism5_1=Dobla el botin normal
+m.HerbalismGreenTerraLength=[[RED]]Duracion de Tierra verde: [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Posibilidad de Dedos verdes: [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Etapa de Dedos verdes: [[YELLOW]] El Trigo crece en la etapa {0}
+m.HerbalismDoubleDropChance=[[RED]]Posibilidad de Doble beneficio: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]+ Comida (Rank{0}): [[YELLOW]]{0} de Bonus de Curacion
+m.SkillExcavation=EXCAVACION
+m.XPGainExcavation=Excavar y encontrar tesoros
+m.EffectsExcavation1_0=Ultra perforador (HABILIDAD)
+m.EffectsExcavation1_1=Triple beneficio, Triple EXP, + Velocidad
+m.EffectsExcavation2_0=Cazatesoros
+m.EffectsExcavation2_1=Habilidad para excavar y obtener tesoros
+m.ExcavationGreenTerraLength=[[RED]]Duracion de Ultra perforador: [[YELLOW]]{0}s
+mcBlockListener.PlacedAnvil=[[DARK_RED]]Has establecido un yunque, Los yunques pueden reparar herramientas y armadura.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]El lobo se escabuye hacia ti...
+mcPlayerListener.AbilitiesOff=Uso de habilidad desactivada
+mcPlayerListener.AbilitiesOn=Uso de habilidad activada
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**HABILIDADES ACTUALIZADAS\!**
+mcPlayerListener.AcrobaticsSkill=Acrobacias: 
+mcPlayerListener.ArcherySkill=Tiro con Arco: 
+mcPlayerListener.AxesSkill=Hachas: 
+mcPlayerListener.ExcavationSkill=Excavacion: 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Modo Dios Desactivado
+mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Modo Dios Activado
+mcPlayerListener.GreenThumb=[[GREEN]]**DEDOS VERDES**
+mcPlayerListener.GreenThumbFail=[[RED]]**DEDOS VERDES FALLIDO**
+mcPlayerListener.HerbalismSkill=Herboristeria: 
+mcPlayerListener.MiningSkill=Minar: 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn esta ahora limpio.
+mcPlayerListener.MyspawnNotExist=[[RED]]Configura tu myspawn primero con una cama.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn ha sido establecido hacia tu localizacion actual.
+mcPlayerListener.MyspawnTimeNotice=Tienes que esperar {0}min {1}seg para usar myspawn
+mcPlayerListener.NoPermission=mcPermisos insuficientes
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si no tienes acceso a una habilidad no seras mostrado aqui.
+mcPlayerListener.NotInParty=[[RED]]No estas en una fiesta.
+mcPlayerListener.InviteSuccess=[[GREEN]]Invitacion enviada satisfactoriamente.
+mcPlayerListener.ReceivedInvite1=[[RED]]ALERT: [[GREEN]]Has recivido una invitacion a la fiesta para {0} de {1}
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Escribe [[GREEN]]/{0}[[YELLOW]] para aceptar la invitacion 
+mcPlayerListener.InviteAccepted=[[GREEN]]Invitacion aceptada. Has entrado a la fiesta {0}
+mcPlayerListener.NoInvites=[[RED]]No tienes invitaciones ahora mismo
+mcPlayerListener.YouAreInParty=[[GREEN]]Estas en la fiesta {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Miembros de la fiesta
+mcPlayerListener.LeftParty=[[RED]]Has abandonado esta fiesta
+mcPlayerListener.JoinedParty=Ha entrado a la fiesta: {0}
+mcPlayerListener.PartyChatOn=Solo Chat de fiesta [[GREEN]]Activado
+mcPlayerListener.PartyChatOff=Solo Chat de fiesta [[RED]]Desactivado
+mcPlayerListener.AdminChatOn=Solo Chat de Admins [[GREEN]]Activado
+mcPlayerListener.AdminChatOff=Solo Chat de Admins [[RED]]Desactivado
+mcPlayerListener.MOTD=[[BLUE]]Este server esta ejecutando mcMMO {0} escribe [[YELLOW]]/{1}[[BLUE]] para obtener ayuda.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
+mcPlayerListener.PowerLevel=[[DARK_RED]]NIVEL DE PODER: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Nivel de Poder [[YELLOW]]Ranking de lideres--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Ranking de lideres--
+mcPlayerListener.RepairSkill=Reparar: 
+mcPlayerListener.SwordsSkill=Espadas: 
+mcPlayerListener.TamingSkill=Domar: 
+mcPlayerListener.UnarmedSkill=Desarmado: 
+mcPlayerListener.WoodcuttingSkill=Tala de arboles: 
+mcPlayerListener.YourStats=[[GREEN]][mcMMO] Estadisticas
+Party.InformedOnJoin={0} [[GREEN]] ha entrado a tu fiesta
+Party.InformedOnQuit={0} [[GREEN]] ha salido de tu fiesta
+Skills.YourGreenTerra=[[GREEN]]Tu habilidad [[YELLOW]]Tierra Verde [[GREEN]] ha sido actualizada!
+Skills.YourTreeFeller=[[GREEN]]Tu habilidad [[YELLOW]]Cortador de Arboles [[GREEN]] ha sido actualizada!
+Skills.YourSuperBreaker=[[GREEN]]Tu habilidad [[YELLOW]]Super Rompedor [[GREEN]]ha sido actualizada!
+Skills.YourSerratedStrikes=[[GREEN]]Tu habilidad [[YELLOW]]Golpes dentados [[GREEN]]ha sido actualizada!
+Skills.YourBerserk=[[GREEN]]Tu habilidad [[YELLOW]]Enloquecer [[GREEN]]ha sido actualizada!
+Skills.YourSkullSplitter=[[GREEN]]Tu habilidad [[YELLOW]]Cortador de cabezas [[GREEN]]ha sido actualizada!
+Skills.YourGigaDrillBreaker=[[GREEN]]Tu habilidad [[YELLOW]]Super Perforador [[GREEN]]ha sido actualizada!
+Skills.TooTired=[[RED]]Estas demasiado cansado para usar esta habilidad de nuevo.
+Skills.ReadyHoe=[[GREEN]]**SACHO LISTO PARA USAR TIERRA VERDE**
+Skills.LowerHoe=[[GRAY]]**TU SACHO HA SIDO DESCARGADO**
+Skills.ReadyAxe=[[GREEN]]**HACHA LISTA PARA USAR CORTADOR DE ARBOLES**
+Skills.LowerAxe=[[GRAY]]**TU HACHA HA SIDO DESCARGADA**
+Skills.ReadyFists=[[GREEN]]**TUS PUÑOS ESTAN LISTOS PARA USAR ENLOQUECER**
+Skills.LowerFists=[[GRAY]]**TUS PUÑOS HAN SIDO DESCARGADOS**
+Skills.ReadyPickAxe=[[GREEN]]**TU PICO ESTA LISTO PARA USAR SUPER ROMPEDOR**
+Skills.LowerPickAxe=[[GRAY]]**TU PICO HA SIDO DESCARGADO**
+Skills.ReadyShovel=[[GREEN]]**TU PALA ESTA PREPARADA PARA USAR ULTRA PERFORADOR**
+Skills.LowerShovel=[[GRAY]]**TU PALA HA SIDO DESCARGADA**
+Skills.ReadySword=[[GREEN]]**TU ESPADA ESTA PREPARADA PARA USAR GOLPES DENTADOS**
+Skills.LowerSword=[[GRAY]]**TU PALA HA SIDO DESCARGADA**
+Skills.BerserkOn=[[GREEN]]**ENLOQUECER ACTIVADO**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Enloquecer!
+Skills.GreenTerraOn=[[GREEN]]**TIERRA VERDE ACTIVADO**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Tierra Verde!
+Skills.TreeFellerOn=[[GREEN]]**CORTADOR DE ARBOLES ACTIVADO**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Cortador de arboles!
+Skills.SuperBreakerOn=[[GREEN]]**SUPER ROMPEDOR ACTIVADO**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Super Rompedor!
+Skills.SerratedStrikesOn=[[GREEN]]**GOLPES DENTADOS ACTIVADOS**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Golpes Dentados!
+Skills.SkullSplitterOn=[[GREEN]]**CORTADOR DE CABEZAS ACTIVADO**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Cortador de Cabezas!
+Skills.GigaDrillBreakerOn=[[GREEN]]**ULTRA PERFORADOR ACTIVADO**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] ha usado [[RED]]Ultra Perforador!
+Skills.GreenTerraOff=[[RED]]**Tierra Verde se ha agotado**
+Skills.TreeFellerOff=[[RED]]**Tree Feller se ha agotado**
+Skills.SuperBreakerOff=[[RED]]**Super Rompedor se ha agotado**
+Skills.SerratedStrikesOff=[[RED]]**Golpes Dentados se ha agotado**
+Skills.BerserkOff=[[RED]]**Enloquecer se ha agotado**
+Skills.SkullSplitterOff=[[RED]]**Cortador de Cabezas se ha agotado**
+Skills.GigaDrillBreakerOff=[[RED]]**Ultra Perforador se ha agotado**
+Skills.TamingUp=[[YELLOW]]Habilidades de domar aumentaron en un {0}. En total: ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Habilidades acrobaticas aumentaron en un {0}. En Total: ({1})
+Skills.ArcheryUp=[[YELLOW]]Habilidades de Tiro con arco aumentadas en un {0}. En Total: ({1})
+Skills.SwordsUp=[[YELLOW]]Habilidades de espada aumentadas en un {0}. En total: ({1})
+Skills.AxesUp=[[YELLOW]]Habilidades de hacha aumentadas en un {0}. En total: ({1})
+Skills.UnarmedUp=[[YELLOW]]Habilidades sin arma aumentadas en un {0}. En total: ({1})
+Skills.HerbalismUp=[[YELLOW]]Habilidades de herboristeria aumentadas en un {0}. En total: ({1})
+Skills.MiningUp=[[YELLOW]]Habilidades de mineria aumentadas en un {0}. En total: ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Habilidades de tala de arboles aumentadas en un {0}. En total: ({1})
+Skills.RepairUp=[[YELLOW]]Habilidades de reparacion aumentadas en un {0}. En total: ({1})
+Skills.ExcavationUp=[[YELLOW]]Habilidades de exvacacion aumentadas en un {0}. En total: ({1})
+Skills.FeltEasy=[[GRAY]]Esa fue facil.
+Skills.StackedItems=[[DARK_RED]]No puedes reparar objetos apilados.
+Skills.NeedMore=[[DARK_RED]]Necesitas mas
+Skills.AdeptDiamond=[[DARK_RED]]No tienes habilidades suficientes para reparar Diamante
+Skills.FullDurability=[[GRAY]]Esto esta a su maxima duracion
+Skills.Disarmed=[[DARK_RED]]Has sido desarmado!
+mcPlayerListener.SorcerySkill=Hechiceria: 
+m.SkillSorcery=HECHICERIA
+Sorcery.HasCast=[[GREEN]]**FUNDICION**[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]]MP
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} MP
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Sin Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=TRUENO
+Sorcery.Curative.Self=CURARSE A SI MISMO
+Sorcery.Curative.Other=CURAR A OTRO
+m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]EXP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
+Combat.BeastLore=[[GREEN]]**LEYENDA DE BESTIAS**
+Combat.BeastLoreOwner=[[DARK_AQUA]]Dueño ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Salud ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Salud ([[GREEN]]{0}[[DARK_AQUA]]/8)
+mcMMO.Description=[[DARK_AQUA]]Q: QUE ES ESTO?,[[GOLD]]mcMMO es un MOD de [[RED]]CODIGO LIBRE[[GOLD]] para Bukkit por [[BLUE]]nossr50,[[GOLD]]Hay muchas habilidades añadidas por mcMMO para Minecraft.,[[GOLD]]Puedes ganar experiencia de muchas formas diferentes,[[GOLD]]Tu querras escribir [[GREEN]]/SKILLNAME[[GOLD]] para saber mas sobre una habilidad.,[[DARK_AQUA]]Q: QUE HACE?,[[GOLD]]Por ejemplo... en [[DARK_AQUA]]Mineria[[GOLD]] recibiras recompensas como,[[RED]]Doble beneficio[[GOLD]] o la habilidad [[RED]]Super Rompedor[[GOLD]] que cuando[[GOLD]] se activa con el click derecho permite la Mineria durante su duracion,[[GOLD]]que esta relacionado con tu nivel de habilidad. Subiendo de nivel en [[BLUE]]Mineria,[[GOLD]]es tan sencillo como minar simples materiales!
+Party.Locked=[[RED]]La fiesta esta bloqueda, solo el lider puede invitarte
+Party.IsntLocked=[[GRAY]]La fiesta no esta bloqueada
+Party.Unlocked=[[GRAY]]La fiesta esta desbloqueada
+Party.Help1=[[RED]]El uso correcto es [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] o [[WHITE]]'q' [[YELLOW]]para salir
+Party.Help2=[[RED]]Para entrar a una fiesta con contraseña usa [[YELLOW]]/{0} [[WHITE]]<name> <password>
+Party.Help3=[[RED]]Consulta /{0} ? para mas informacion
+Party.Help4=[[RED]]Usa [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]para entrar a una fiesta o [[WHITE]]'q' [[YELLOW]]para salir
+Party.Help5=[[RED]]Para bloquear tu fiesta usa [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]Para desbloquear tu fiesta usa [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]Para proteger tu fiesta con contraseña usa [[YELLOW]]/{0} [[WHITE]]password <password>
+Party.Help8=[[RED]]Para kickear a un jugador de tu fiesta usa [[YELLOW]]/{0} [[WHITE]]kick <player>
+Party.Help9=[[RED]]Para transferir el liderazgo de una fiesta usa [[YELLOW]]/{0} [[WHITE]]owner <player>
+Party.NotOwner=[[DARK_RED]]No eres el lider de la fiesta
+Party.InvalidName=[[DARK_RED]]Este no es un nombre valido para la fiesta
+Party.PasswordSet=[[GREEN]]Contraseña de la fiesta puesta a {0}
+Party.CouldNotKick=[[DARK_RED]]No se puede kickear al jugador {0}
+Party.NotInYourParty=[[DARK_RED]]{0} no esta en tu fiesta
+Party.CouldNotSetOwner=[[DARK_RED]]No se puede poner de lider a {0}
+Commands.xprate.proper=[[DARK_AQUA]]El uso correcto es /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Tambien puedes escribir /{0} reset para hacer que todo vuelva a la normalidad
+Commands.xprate.proper3=[[RED]]Introduzca true o false en el segundo valor
+Commands.xprate.over=[[RED]]mcMMO EXP Rate Event TERMINO!!
+Commands.xprate.started=[[GOLD]]mcMMO XP EVENT COMENZO!
+Commands.xprate.started2=[[GOLD]]mcMMO XP RATE ES AHORA {0}x!!
+Commands.xplock.locked=[[GOLD]]Tu BARRA DE EXP esta bloqueada a {0}!
+Commands.xplock.unlocked=[[GOLD]]Tu BARRA DE EXP esta ahora [[GREEN]]DESBLOQUEADA[[GOLD]]!
+Commands.xplock.invalid=[[RED]]Ese no es un nombre de habilidad valido! Try /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 368 - 368
src/com/gmail/nossr50/locale/locale_fi.properties → src/main/java/com/gmail/nossr50/locale/locale_fi.properties

@@ -1,369 +1,369 @@
-Combat.WolfExamine=[[GREEN]]**Tutkit sutta käyttämällä Pedon Tarinaa**
-Combat.WolfShowMaster=[[DARK_GREEN]]Pedon isäntä : {0}
-Combat.Ignition=[[RED]]**SYTYTYS**
-Combat.BurningArrowHit=[[DARK_RED]]Palava nuoli osui sinuun\!
-Combat.TouchedFuzzy=[[DARK_RED]]Touched Fuzzy. Felt Dizzy.
-Combat.TargetDazed=Kohde [[DARK_RED]]tyrmätty
-Combat.WolfNoMaster=[[GRAY]]Tällä pedolla ei ole isäntää...
-Combat.WolfHealth=[[GREEN]]Tämän pedon terveys on {0}
-Combat.StruckByGore=[[RED]]**SINUA ON PISTETTY**
-Combat.Gore=[[GREEN]]**PISTO**
-Combat.ArrowDeflect=[[WHITE]]**NUOLI TORJUTTU**
-Item.ChimaeraWingFail=**KHIMAIRAN SIIVEN KÄYTTÖ EPÄONNISTUI\!**
-Item.ChimaeraWingPass=**KHIMAIRAN SIIPI**
-Item.InjuredWait=Sinua on haavoitettu äskettäin joten joudut odottaa tämän käyttöä. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]Tarvitset lisää sulkia..
-m.mccPartyCommands=[[GREEN]]--RYHMÄKOMENNOT--
-m.mccParty=[party name] [[RED]]- Luo/liity nimettyyn ryhmään
-m.mccPartyQ=[[RED]]- Lähde ryhmästä
-m.mccPartyToggle=[[RED]] - Laita ryhmäjuttelu päälle/pois
-m.mccPartyInvite=[player name] [[RED]]- Lähetä ryhmäkutsu
-m.mccPartyAccept=[[RED]]- Hyväksy ryhmäkutsu
-m.mccPartyTeleport=[party member name] [[RED]]- Siirry ryhmän jäsenen luo
-m.mccOtherCommands=[[GREEN]]--MUUT KOMENNOT--
-m.mccStats=- Näytä mcMMO tilastosi
-m.mccLeaderboards=- Tulostaulukko
-m.mccMySpawn=- Siirtää sinut myspawniin
-m.mccClearMySpawn=- Tyhjää myspawnisi
-m.mccToggleAbility=- Laita taitojen aktivointi oikealla näppäimellä päälle/pois
-m.mccAdminToggle=- Laita admin juttelu päälle/pois
-m.mccWhois=[playername] [[RED]]- Näytä yksityiskohtaiset tiedot pelaajasta
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Muokkaa kohdetta
-m.mccMcGod=- "God Mode"
-m.mccSkillInfo=[skillname] [[RED]]- Näytä ykistyiskohtaiset tiedot taidosta
-m.mccModDescription=[[RED]]- Lue lyhyt kuvaus modista
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]KOKEMUSPISTEIDEN MÄÄRÄ: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFEKTIT
-m.YourStats=TILASTOSI
-m.SkillTaming=KESYTTÄMINEN
-m.XPGainTaming=Susien satuttaminen
-m.EffectsTaming1_0=Pedon Tarina
-m.EffectsTaming1_1=Luulla lyöminen tutkii susia
-m.EffectsTaming2_0=Pisto
-m.EffectsTaming2_1=Kriittinen Isku joka lisää Verenvuodon
-m.EffectsTaming3_0=Teroitetut Kynnet
-m.EffectsTaming3_1=Tuhoamis Bonus
-m.EffectsTaming4_0=Ympäristötietoinen
-m.EffectsTaming4_1=Kaktus/Laavapelko, immuuni Putousvahingolle
-m.EffectsTaming5_0=Paksu Turkki
-m.EffectsTaming5_1=Vahingon vähennys, Tulenkestävä
-m.EffectsTaming6_0=Räjähdyskestävä
-m.EffectsTaming6_1=Räjähdysvahingon vähennys
-m.AbilLockTaming1=LUKITTU KUNNES 100+ TAITO (YMPÄRISTÖTIETOINEN)
-m.AbilLockTaming2=LUKITTU KUNNES 250+ TAITO (PAKSU TURKKI)
-m.AbilLockTaming3=LUKITTU KUNNES 500+ TAITO (RÄJÄHDYSKESTÄVÄ)
-m.AbilLockTaming4=LUKITTU KUNNES 750+ TAITO (TEROITETUT KYNNET)
-m.AbilBonusTaming1_0=Ympäristötietoinen
-m.AbilBonusTaming1_1=Sudet karttavat vaaraa
-m.AbilBonusTaming2_0=Paksu Turkki
-m.AbilBonusTaming2_1=Puolitettu vahinko, Tulenkestävä
-m.AbilBonusTaming3_0=Räjähdyskestävä
-m.AbilBonusTaming3_1=Räjähteet vahingoittavat 1/6 vähemmän
-m.AbilBonusTaming4_0=Teroitetut Kynnet
-m.AbilBonusTaming4_1=+2 Vahinko
-m.TamingGoreChance=[[RED]]Piston todennäköisyys: [[YELLOW]]{0}%
-m.SkillWoodCutting=PUUN KAATO
-m.XPGainWoodCutting=Puiden pilkkominen
-m.EffectsWoodCutting1_0=Puunkaataja (TAITO)
-m.EffectsWoodCutting1_1=Räjäytä puita
-m.EffectsWoodCutting2_0=Lehdenpuhallin
-m.EffectsWoodCutting2_1=Puhalla lehtiä pois
-m.EffectsWoodCutting3_0=Tuplasaalis
-m.EffectsWoodCutting3_1=Tuplaa normaali saalis
-m.AbilLockWoodCutting1=LUKITTU KUNNES 100+ TAITO (LEHDENPUHALLIN)
-m.AbilBonusWoodCutting1_0=Lehdenpuhallin
-m.AbilBonusWoodCutting1_1=Puhalla lehtiä pois
-m.WoodCuttingDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Puunkaatajan kesto: [[YELLOW]]{0}s
-m.SkillArchery=JOUSIAMMUNTA
-m.XPGainArchery=Hyökkäämällä hirviöiden kimppuun
-m.EffectsArchery1_0=Sytytys
-m.EffectsArchery1_1=25% Todennäköisyys että vihollinen syttyy tuleen
-m.EffectsArchery2_0=Pökerrys (Pelaajat)
-m.EffectsArchery2_1=Saa viholliset pois tolaltaan
-m.EffectsArchery3_0=Vahinko+
-m.EffectsArchery3_1=Muokkaa vahinkoa
-m.EffectsArchery4_0=Nuolenkeräys
-m.EffectsArchery4_1=Todennäköisyys kerätä nuolia raadoista
-m.ArcheryDazeChance=[[RED]]Todennäköisyys Pökerryttää: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Todennäköisyys kerätä nuolia: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Sytytyksen kesto: [[YELLOW]]{0} sekuntia
-m.ArcheryDamagePlus=[[RED]]Vahinko+ (Rank{0}): [[YELLOW]]Bonus {0} vahinko
-m.SkillAxes=KIRVEET
-m.XPGainAxes=Hyökkäämällä hirviöiden kimppuun
-m.EffectsAxes1_0=Kallonhalkoja (TAITO)
-m.EffectsAxes1_1=Tee aluevahinkoa
-m.EffectsAxes2_0=Kriittiset Iskut
-m.EffectsAxes2_1=Tuplavahinko
-m.EffectsAxes3_0=Kirveiden Herra (500 TAITO)
-m.EffectsAxes3_1=Muokkaa vahinkoa
-m.AbilLockAxes1=LUKITTU KUNNES 500+ TAITO (KIRVEIDEN HERRA)
-m.AbilBonusAxes1_0=Kirveiden Herra
-m.AbilBonusAxes1_1=+4 Vahinko
-m.AxesCritChance=[[RED]]Todennäköisyys iskeä kriittisesti: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Kallonhalkojan kesto: [[YELLOW]]{0}s
-m.SkillSwords=MIEKAT
-m.XPGainSwords=Hyökkäämällä hirviöiden kimppuun
-m.EffectsSwords1_0=Vastaisku
-m.EffectsSwords1_1=Kimmota 50% saadusta vahingosta
-m.EffectsSwords2_0=Sahalaitaiset Iskut (TAITO)
-m.EffectsSwords2_1=25% Aluevahinko, Verenvuoto+ Aluevahinko
-m.EffectsSwords3_0=Sahalaitaiset Iskut Verenvuoto+
-m.EffectsSwords3_1=5 Aiheuta Verenvuotoa
-m.EffectsSwords4_0=Torjuminen
-m.EffectsSwords4_1=Estää saadun vahingon
-m.EffectsSwords5_0=Verenvuoto
-m.EffectsSwords5_1=Lisää Verenvuoto
-m.SwordsCounterAttChance=[[RED]]Vastaiskun todennäköisyys: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Verenvuodon kesto: [[YELLOW]]{0} vuotoa
-m.SwordsBleedChance=[[RED]]Verenvuodon todennäköisyys: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Torjumisen todennäköisyys: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Sahalaitaisten Iskujen kesto: [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]HUOMAA: [[YELLOW]]1 vuoto tapahtuu joka kahdes sekunti
-m.SkillAcrobatics=AKROBATIA
-m.XPGainAcrobatics=Tippumalla
-m.EffectsAcrobatics1_0=Kieriminen
-m.EffectsAcrobatics1_1=Vähentää tai estää vahinkoa
-m.EffectsAcrobatics2_0=Sulava Kieriminen
-m.EffectsAcrobatics2_1=Tuplasti tehokkaampi kuin Kieriminen
-m.EffectsAcrobatics3_0=Väistö
-m.EffectsAcrobatics3_1=Vähentää vahingon määrän puoleen
-m.AcrobaticsRollChance=[[RED]]Kierimisen todennäköisyys: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Sulavan Kierimisen todennäköisyys: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Väistön todennäköisyys: [[YELLOW]]{0}%
-m.SkillMining=LOUHINTA
-m.XPGainMining=Louhimalla kiveä ja malmia
-m.EffectsMining1_0=Supermurskain (TAITO)
-m.EffectsMining1_1=Nopeus+, Triplaa saaliin tippumistodennäköisyys
-m.EffectsMining2_0=Tuplasaalis
-m.EffectsMining2_1=Tuplaa normaali saaliin määrä
-m.MiningDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Supermurskaimen kesto: [[YELLOW]]{0}s
-m.SkillRepair=KORJAUS
-m.XPGainRepair=Korjaamalla
-m.EffectsRepair1_0=Korjaa
-m.EffectsRepair1_1=Korjaa rautatyökaluja ja haarniskoja
-m.EffectsRepair2_0=Korjausten Herra
-m.EffectsRepair2_1=Lisätty korjausten määrä
-m.EffectsRepair3_0=Superkorjaus
-m.EffectsRepair3_1=Tuplatehokkuus
-m.EffectsRepair4_0=Timanttikorjaus ({0}+ TAITO)
-m.EffectsRepair4_1=Korjaa timanttityökaluja ja haarniskoja
-m.RepairRepairMastery=[[RED]]Korjausten Herra: [[YELLOW]]Extra {0}% kestävyyttä palautettu
-m.RepairSuperRepairChance=[[RED]]Superkorjauksen todennäköisyys: [[YELLOW]]{0}%
-m.SkillUnarmed=ASEISTAMATON
-m.XPGainUnarmed=Hyökkäämällä hirviöiden kimppuun
-m.EffectsUnarmed1_0=Raivopää (TAITO)
-m.EffectsUnarmed1_1=+50% vahinko, rikkoo heikkoja materiaaleja
-m.EffectsUnarmed2_0=Aseista riisuminen (Pelaajat)
-m.EffectsUnarmed2_1=Pudottaa vihollisen esineen kädestä
-m.EffectsUnarmed3_0=Aseistamattomuuden Herra
-m.EffectsUnarmed3_1=Suuri vahingonlisäys
-m.EffectsUnarmed4_0=Aseistamattomuuden Aloittelija
-m.EffectsUnarmed4_1=Vahingonlisäys
-m.EffectsUnarmed5_0=Nuolentorjunta
-m.EffectsUnarmed5_1=Torjuu nuolia
-m.AbilLockUnarmed1=LUKITTU KUNNES 250+ TAITO (ASEISTAMATTOMUUDEN ALOITTELIJA)
-m.AbilLockUnarmed2=LUKITTU KUNNES 500+ TAITO (ASEISTAMATTOMUUDEN HERRA)
-m.AbilBonusUnarmed1_0=Aseistamattomuuden Aloittelija
-m.AbilBonusUnarmed1_1=+2 Vahinko
-m.AbilBonusUnarmed2_0=Aseistamattomuuden Herra
-m.AbilBonusUnarmed2_1=+4 Vahinko
-m.UnarmedArrowDeflectChance=[[RED]]Nuolentorjunnan todennäköisyys: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Aseista riisumisen todennäköisyys: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Raivopään kesto: [[YELLOW]]{0}s
-m.SkillHerbalism=YRTTIHOITO
-m.XPGainHerbalism=Keräämällä yrttejä
-m.EffectsHerbalism1_0=Vihermaa (TAITO)
-m.EffectsHerbalism1_1=Levitä vihreyttä, 3x saalis
-m.EffectsHerbalism2_0=Viherpeukalo (Vehnä)
-m.EffectsHerbalism2_1=Istuttaa vehnää automaattisesti kun keräät vehnää
-m.EffectsHerbalism3_0=Viherpeukalo (Mukulakivi)
-m.EffectsHerbalism3_1=Mukulakivi -> Sammaleinen mukulakivi ja siemeniä
-m.EffectsHerbalism4_0=Ruoka+
-m.EffectsHerbalism4_1=Muokkaa terveyttä jota saat leivästä/muhennoksesta
-m.EffectsHerbalism5_0=Tuplasaalis (Kaikki yrtit)
-m.EffectsHerbalism5_1=Tuplaa normaali saaliin määrä
-m.HerbalismGreenTerraLength=[[RED]]Vihermaan kesto: [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Viherpeukalon todennäköisyys: [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Viherpeukalon vaihe: [[YELLOW]] Vehnä kasvaa {0}:ssa vaiheessa
-m.HerbalismDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Ruoka+ (Rank{0}): [[YELLOW]]Bonus {0} terveyden määrä
-m.SkillExcavation=KAIVANTO
-m.XPGainExcavation=Kaivamalla ja löytämällä aarteita
-m.EffectsExcavation1_0=Giga Drill Breaker (TAITO)
-m.EffectsExcavation1_1=3x saaliin määrä, 3x kokemuspisteiden määrä, +Nopeus
-m.EffectsExcavation2_0=Aarteenmetsästäjä
-m.EffectsExcavation2_1=Taito jonka avulla voit kaivaa aarteita
-m.ExcavationGreenTerraLength=[[RED]]Giga Drill Breaker kesto: [[YELLOW]]{0}s
-mcBlockListener.PlacedAnvil=[[DARK_RED]]Olet asettanut alasimen maahan, sillä voit korjata työkaluja ja haarniskoja.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Sutesi kipittää takaisin luoksesi...
-mcPlayerListener.AbilitiesOff=Taitojen käyttö pois päältä
-mcPlayerListener.AbilitiesOn=Taitojen käyttö päällä
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**TAIDOT PÄIVITETTY\!**
-mcPlayerListener.AcrobaticsSkill=[[YELLOW]]Akrobatia: 
-mcPlayerListener.ArcherySkill=[[YELLOW]]Jousiammunta: 
-mcPlayerListener.AxesSkill=[[YELLOW]]Kirveet: 
-mcPlayerListener.ExcavationSkill=[[YELLOW]]Kaivanto: 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Godmode pois päältä
-mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Godmode päällä
-mcPlayerListener.GreenThumb=[[GREEN]]**VIHERPEUKALO**
-mcPlayerListener.GreenThumbFail=[[RED]]**VIHERPEUKALO EPÄONNISTUI**
-mcPlayerListener.HerbalismSkill=[[YELLOW]]Yrttihoito: 
-mcPlayerListener.MiningSkill=[[YELLOW]]Kaivanto: 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn on tyhjätty.
-mcPlayerListener.MyspawnNotExist=[[RED]]Määrää myspawnisi ensin laittamalla sänky maahan.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn on asetettu tämänhetkiseen sijaintiisi.
-mcPlayerListener.MyspawnTimeNotice=Sinun pitää odottaa {0}m {1}s käyttääksesi myspawnia
-mcPlayerListener.NoPermission=Puutteelliset oikeudet (mcPermissions)
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Jos sinulla ei ole käyttöoikeutta johonkin taitoon, sitä ei näytetä täällä.
-mcPlayerListener.NotInParty=[[RED]]Et ole ryhmässä.
-mcPlayerListener.InviteSuccess=[[GREEN]]Kutsu lähetetty.
-mcPlayerListener.ReceivedInvite1=[[RED]]HUOMIO: [[GREEN]]Olet saanut ryhmäkutsun ryhmään {0} pelaajalta {1}
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Kirjoita [[GREEN]]/{0}[[YELLOW]] hyväksyäksesi kutsun 
-mcPlayerListener.InviteAccepted=[[GREEN]]Kutsu hyväksytty. Olet liittynyt ryhmään {0}
-mcPlayerListener.NoInvites=[[RED]]Sinulla ei ole kutsuja
-mcPlayerListener.YouAreInParty=[[GREEN]]Olet ryhmässä {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Ryhmän jäsenet
-mcPlayerListener.LeftParty=[[RED]]Olet lähtenyt ryhmästä
-mcPlayerListener.JoinedParty=Liityit ryhmään: {0}
-mcPlayerListener.PartyChatOn=Vain ryhmäjuttelu [[GREEN]]Päällä
-mcPlayerListener.PartyChatOff=Vain ryhmäjuttelu [[RED]]Pois päältä
-mcPlayerListener.AdminChatOn=Vain admin juttelu [[GREEN]]Päällä
-mcPlayerListener.AdminChatOff=Vain admin juttelu [[RED]]Pois päältä
-mcPlayerListener.MOTD=[[BLUE]]Tällä serverillä on mcMMO {0} kirjoita [[YELLOW]]/{1}[[BLUE]] apua varten.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
-mcPlayerListener.PowerLevel=[[DARK_RED]]VOIMATASO: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Voimataso [[YELLOW]]Tulostaulukko--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Tulostaulukko--
-mcPlayerListener.RepairSkill=[[YELLOW]]Korjaus: 
-mcPlayerListener.SwordsSkill=[[YELLOW]]Miekat: 
-mcPlayerListener.TamingSkill=[[YELLOW]]Kesytys: 
-mcPlayerListener.UnarmedSkill=[[YELLOW]]Aseistamattomuus: 
-mcPlayerListener.WoodcuttingSkill=[[YELLOW]]Puunkaato: 
-mcPlayerListener.YourStats=[[GREEN]]Sinun MMO tilastosi
-Party.InformedOnJoin={0} [[GREEN]] on liittynyt ryhmään
-Party.InformedOnQuit={0} [[GREEN]] on lähtenyt ryhmästä
-Skills.YourGreenTerra=[[GREEN]]Your [[YELLOW]]Green Terra [[GREEN]]ability is refreshed!
-Skills.YourTreeFeller=[[GREEN]]Your [[YELLOW]]Tree Feller [[GREEN]]ability is refreshed!
-Skills.YourSuperBreaker=[[GREEN]]Your [[YELLOW]]Super Breaker [[GREEN]]ability is refreshed!
-Skills.YourSerratedStrikes=[[GREEN]]Your [[YELLOW]]Serrated Strikes [[GREEN]]ability is refreshed!
-Skills.YourBerserk=[[GREEN]]Your [[YELLOW]]Berserk [[GREEN]]ability is refreshed!
-Skills.YourSkullSplitter=[[GREEN]]Your [[YELLOW]]Skull Splitter [[GREEN]]ability is refreshed!
-Skills.YourGigaDrillBreaker=[[GREEN]]Your [[YELLOW]]Giga Drill Breaker [[GREEN]]ability is refreshed!
-Skills.TooTired=[[RED]]You are too tired to use that ability again.
-Skills.ReadyHoe=[[GREEN]]**YOU READY YOUR HOE**
-Skills.LowerHoe=[[GRAY]]**YOU LOWER YOUR HOE**
-Skills.ReadyAxe=[[GREEN]]**YOU READY YOUR AXE**
-Skills.LowerAxe=[[GRAY]]**YOU LOWER YOUR AXE**
-Skills.ReadyFists=[[GREEN]]**YOU READY YOUR FISTS**
-Skills.LowerFists=[[GRAY]]**YOU LOWER YOUR FISTS**
-Skills.ReadyPickAxe=[[GREEN]]**YOU READY YOUR PICKAXE**
-Skills.LowerPickAxe=[[GRAY]]**YOU LOWER YOUR PICKAXE**
-Skills.ReadyShovel=[[GREEN]]**YOU READY YOUR SHOVEL**
-Skills.LowerShovel=[[GRAY]]**YOU LOWER YOUR SHOVEL**
-Skills.ReadySword=[[GREEN]]**YOU READY YOUR SWORD**
-Skills.LowerSword=[[GRAY]]**YOU LOWER YOUR SWORD**
-Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
-Skills.GreenTerraOn=[[GREEN]]**GREEN TERRA ACTIVATED**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Green Terra!
-Skills.TreeFellerOn=[[GREEN]]**TREE FELLER ACTIVATED**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Tree Feller!
-Skills.SuperBreakerOn=[[GREEN]]**SUPER BREAKER ACTIVATED**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Super Breaker!
-Skills.SerratedStrikesOn=[[GREEN]]**SERRATED STRIKES ACTIVATED**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Serrated Strikes!
-Skills.SkullSplitterOn=[[GREEN]]**SKULL SPLITTER ACTIVATED**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Skull Splitter!
-Skills.GigaDrillBreakerOn=[[GREEN]]**GIGA DRILL BREAKER ACTIVATED**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Giga Drill Breaker!
-Skills.GreenTerraOff=[[RED]]**Green Terra has worn off**
-Skills.TreeFellerOff=[[RED]]**Tree Feller has worn off**
-Skills.SuperBreakerOff=[[RED]]**Super Breaker has worn off**
-Skills.SerratedStrikesOff=[[RED]]**Serrated Strikes has worn off**
-Skills.BerserkOff=[[RED]]**Berserk has worn off**
-Skills.SkullSplitterOff=[[RED]]**Skull Splitter has worn off**
-Skills.GigaDrillBreakerOff=[[RED]]**Giga Drill Breaker has worn off**
-Skills.TamingUp=[[YELLOW]]Taming skill increased by {0}. Total ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Acrobatics skill increased by {0}. Total ({1})
-Skills.ArcheryUp=[[YELLOW]]Archery skill increased by {0}. Total ({1})
-Skills.SwordsUp=[[YELLOW]]Swords skill increased by {0}. Total ({1})
-Skills.AxesUp=[[YELLOW]]Axes skill increased by {0}. Total ({1})
-Skills.UnarmedUp=[[YELLOW]]Unarmed skill increased by {0}. Total ({1})
-Skills.HerbalismUp=[[YELLOW]]Herbalism skill increased by {0}. Total ({1})
-Skills.MiningUp=[[YELLOW]]Mining skill increased by {0}. Total ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Woodcutting skill increased by {0}. Total ({1})
-Skills.RepairUp=[[YELLOW]]Repair skill increased by {0}. Total ({1})
-Skills.ExcavationUp=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
-mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
-Party.Locked=[[RED]]Party is locked, only party leader may invite.
-Party.IsntLocked=[[GRAY]]Party is not locked
-Party.Unlocked=[[GRAY]]Party is unlocked
-Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
-Party.Help3=[[RED]]Consult /{0} ? for more information
-Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
-Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
-Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
-Party.NotOwner=[[DARK_RED]]You are not the party owner
-Party.InvalidName=[[DARK_RED]]That is not a valid party name
-Party.PasswordSet=[[GREEN]]Party password set to {0}
-Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
-Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
-Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
-Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
-Commands.xprate.proper3=[[RED]]Enter true or false for the second value
-Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
-Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
-Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
-Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
-Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
-Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]**Tutkit sutta käyttämällä Pedon Tarinaa**
+Combat.WolfShowMaster=[[DARK_GREEN]]Pedon isäntä : {0}
+Combat.Ignition=[[RED]]**SYTYTYS**
+Combat.BurningArrowHit=[[DARK_RED]]Palava nuoli osui sinuun\!
+Combat.TouchedFuzzy=[[DARK_RED]]Touched Fuzzy. Felt Dizzy.
+Combat.TargetDazed=Kohde [[DARK_RED]]tyrmätty
+Combat.WolfNoMaster=[[GRAY]]Tällä pedolla ei ole isäntää...
+Combat.WolfHealth=[[GREEN]]Tämän pedon terveys on {0}
+Combat.StruckByGore=[[RED]]**SINUA ON PISTETTY**
+Combat.Gore=[[GREEN]]**PISTO**
+Combat.ArrowDeflect=[[WHITE]]**NUOLI TORJUTTU**
+Item.ChimaeraWingFail=**KHIMAIRAN SIIVEN KÄYTTÖ EPÄONNISTUI\!**
+Item.ChimaeraWingPass=**KHIMAIRAN SIIPI**
+Item.InjuredWait=Sinua on haavoitettu äskettäin joten joudut odottaa tämän käyttöä. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]Tarvitset lisää sulkia..
+m.mccPartyCommands=[[GREEN]]--RYHMÄKOMENNOT--
+m.mccParty=[party name] [[RED]]- Luo/liity nimettyyn ryhmään
+m.mccPartyQ=[[RED]]- Lähde ryhmästä
+m.mccPartyToggle=[[RED]] - Laita ryhmäjuttelu päälle/pois
+m.mccPartyInvite=[player name] [[RED]]- Lähetä ryhmäkutsu
+m.mccPartyAccept=[[RED]]- Hyväksy ryhmäkutsu
+m.mccPartyTeleport=[party member name] [[RED]]- Siirry ryhmän jäsenen luo
+m.mccOtherCommands=[[GREEN]]--MUUT KOMENNOT--
+m.mccStats=- Näytä mcMMO tilastosi
+m.mccLeaderboards=- Tulostaulukko
+m.mccMySpawn=- Siirtää sinut myspawniin
+m.mccClearMySpawn=- Tyhjää myspawnisi
+m.mccToggleAbility=- Laita taitojen aktivointi oikealla näppäimellä päälle/pois
+m.mccAdminToggle=- Laita admin juttelu päälle/pois
+m.mccWhois=[playername] [[RED]]- Näytä yksityiskohtaiset tiedot pelaajasta
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Muokkaa kohdetta
+m.mccMcGod=- "God Mode"
+m.mccSkillInfo=[skillname] [[RED]]- Näytä ykistyiskohtaiset tiedot taidosta
+m.mccModDescription=[[RED]]- Lue lyhyt kuvaus modista
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]KOKEMUSPISTEIDEN MÄÄRÄ: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFEKTIT
+m.YourStats=TILASTOSI
+m.SkillTaming=KESYTTÄMINEN
+m.XPGainTaming=Susien satuttaminen
+m.EffectsTaming1_0=Pedon Tarina
+m.EffectsTaming1_1=Luulla lyöminen tutkii susia
+m.EffectsTaming2_0=Pisto
+m.EffectsTaming2_1=Kriittinen Isku joka lisää Verenvuodon
+m.EffectsTaming3_0=Teroitetut Kynnet
+m.EffectsTaming3_1=Tuhoamis Bonus
+m.EffectsTaming4_0=Ympäristötietoinen
+m.EffectsTaming4_1=Kaktus/Laavapelko, immuuni Putousvahingolle
+m.EffectsTaming5_0=Paksu Turkki
+m.EffectsTaming5_1=Vahingon vähennys, Tulenkestävä
+m.EffectsTaming6_0=Räjähdyskestävä
+m.EffectsTaming6_1=Räjähdysvahingon vähennys
+m.AbilLockTaming1=LUKITTU KUNNES 100+ TAITO (YMPÄRISTÖTIETOINEN)
+m.AbilLockTaming2=LUKITTU KUNNES 250+ TAITO (PAKSU TURKKI)
+m.AbilLockTaming3=LUKITTU KUNNES 500+ TAITO (RÄJÄHDYSKESTÄVÄ)
+m.AbilLockTaming4=LUKITTU KUNNES 750+ TAITO (TEROITETUT KYNNET)
+m.AbilBonusTaming1_0=Ympäristötietoinen
+m.AbilBonusTaming1_1=Sudet karttavat vaaraa
+m.AbilBonusTaming2_0=Paksu Turkki
+m.AbilBonusTaming2_1=Puolitettu vahinko, Tulenkestävä
+m.AbilBonusTaming3_0=Räjähdyskestävä
+m.AbilBonusTaming3_1=Räjähteet vahingoittavat 1/6 vähemmän
+m.AbilBonusTaming4_0=Teroitetut Kynnet
+m.AbilBonusTaming4_1=+2 Vahinko
+m.TamingGoreChance=[[RED]]Piston todennäköisyys: [[YELLOW]]{0}%
+m.SkillWoodCutting=PUUN KAATO
+m.XPGainWoodCutting=Puiden pilkkominen
+m.EffectsWoodCutting1_0=Puunkaataja (TAITO)
+m.EffectsWoodCutting1_1=Räjäytä puita
+m.EffectsWoodCutting2_0=Lehdenpuhallin
+m.EffectsWoodCutting2_1=Puhalla lehtiä pois
+m.EffectsWoodCutting3_0=Tuplasaalis
+m.EffectsWoodCutting3_1=Tuplaa normaali saalis
+m.AbilLockWoodCutting1=LUKITTU KUNNES 100+ TAITO (LEHDENPUHALLIN)
+m.AbilBonusWoodCutting1_0=Lehdenpuhallin
+m.AbilBonusWoodCutting1_1=Puhalla lehtiä pois
+m.WoodCuttingDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Puunkaatajan kesto: [[YELLOW]]{0}s
+m.SkillArchery=JOUSIAMMUNTA
+m.XPGainArchery=Hyökkäämällä hirviöiden kimppuun
+m.EffectsArchery1_0=Sytytys
+m.EffectsArchery1_1=25% Todennäköisyys että vihollinen syttyy tuleen
+m.EffectsArchery2_0=Pökerrys (Pelaajat)
+m.EffectsArchery2_1=Saa viholliset pois tolaltaan
+m.EffectsArchery3_0=Vahinko+
+m.EffectsArchery3_1=Muokkaa vahinkoa
+m.EffectsArchery4_0=Nuolenkeräys
+m.EffectsArchery4_1=Todennäköisyys kerätä nuolia raadoista
+m.ArcheryDazeChance=[[RED]]Todennäköisyys Pökerryttää: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Todennäköisyys kerätä nuolia: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Sytytyksen kesto: [[YELLOW]]{0} sekuntia
+m.ArcheryDamagePlus=[[RED]]Vahinko+ (Rank{0}): [[YELLOW]]Bonus {0} vahinko
+m.SkillAxes=KIRVEET
+m.XPGainAxes=Hyökkäämällä hirviöiden kimppuun
+m.EffectsAxes1_0=Kallonhalkoja (TAITO)
+m.EffectsAxes1_1=Tee aluevahinkoa
+m.EffectsAxes2_0=Kriittiset Iskut
+m.EffectsAxes2_1=Tuplavahinko
+m.EffectsAxes3_0=Kirveiden Herra (500 TAITO)
+m.EffectsAxes3_1=Muokkaa vahinkoa
+m.AbilLockAxes1=LUKITTU KUNNES 500+ TAITO (KIRVEIDEN HERRA)
+m.AbilBonusAxes1_0=Kirveiden Herra
+m.AbilBonusAxes1_1=+4 Vahinko
+m.AxesCritChance=[[RED]]Todennäköisyys iskeä kriittisesti: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Kallonhalkojan kesto: [[YELLOW]]{0}s
+m.SkillSwords=MIEKAT
+m.XPGainSwords=Hyökkäämällä hirviöiden kimppuun
+m.EffectsSwords1_0=Vastaisku
+m.EffectsSwords1_1=Kimmota 50% saadusta vahingosta
+m.EffectsSwords2_0=Sahalaitaiset Iskut (TAITO)
+m.EffectsSwords2_1=25% Aluevahinko, Verenvuoto+ Aluevahinko
+m.EffectsSwords3_0=Sahalaitaiset Iskut Verenvuoto+
+m.EffectsSwords3_1=5 Aiheuta Verenvuotoa
+m.EffectsSwords4_0=Torjuminen
+m.EffectsSwords4_1=Estää saadun vahingon
+m.EffectsSwords5_0=Verenvuoto
+m.EffectsSwords5_1=Lisää Verenvuoto
+m.SwordsCounterAttChance=[[RED]]Vastaiskun todennäköisyys: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Verenvuodon kesto: [[YELLOW]]{0} vuotoa
+m.SwordsBleedChance=[[RED]]Verenvuodon todennäköisyys: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Torjumisen todennäköisyys: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Sahalaitaisten Iskujen kesto: [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]HUOMAA: [[YELLOW]]1 vuoto tapahtuu joka kahdes sekunti
+m.SkillAcrobatics=AKROBATIA
+m.XPGainAcrobatics=Tippumalla
+m.EffectsAcrobatics1_0=Kieriminen
+m.EffectsAcrobatics1_1=Vähentää tai estää vahinkoa
+m.EffectsAcrobatics2_0=Sulava Kieriminen
+m.EffectsAcrobatics2_1=Tuplasti tehokkaampi kuin Kieriminen
+m.EffectsAcrobatics3_0=Väistö
+m.EffectsAcrobatics3_1=Vähentää vahingon määrän puoleen
+m.AcrobaticsRollChance=[[RED]]Kierimisen todennäköisyys: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Sulavan Kierimisen todennäköisyys: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Väistön todennäköisyys: [[YELLOW]]{0}%
+m.SkillMining=LOUHINTA
+m.XPGainMining=Louhimalla kiveä ja malmia
+m.EffectsMining1_0=Supermurskain (TAITO)
+m.EffectsMining1_1=Nopeus+, Triplaa saaliin tippumistodennäköisyys
+m.EffectsMining2_0=Tuplasaalis
+m.EffectsMining2_1=Tuplaa normaali saaliin määrä
+m.MiningDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Supermurskaimen kesto: [[YELLOW]]{0}s
+m.SkillRepair=KORJAUS
+m.XPGainRepair=Korjaamalla
+m.EffectsRepair1_0=Korjaa
+m.EffectsRepair1_1=Korjaa rautatyökaluja ja haarniskoja
+m.EffectsRepair2_0=Korjausten Herra
+m.EffectsRepair2_1=Lisätty korjausten määrä
+m.EffectsRepair3_0=Superkorjaus
+m.EffectsRepair3_1=Tuplatehokkuus
+m.EffectsRepair4_0=Timanttikorjaus ({0}+ TAITO)
+m.EffectsRepair4_1=Korjaa timanttityökaluja ja haarniskoja
+m.RepairRepairMastery=[[RED]]Korjausten Herra: [[YELLOW]]Extra {0}% kestävyyttä palautettu
+m.RepairSuperRepairChance=[[RED]]Superkorjauksen todennäköisyys: [[YELLOW]]{0}%
+m.SkillUnarmed=ASEISTAMATON
+m.XPGainUnarmed=Hyökkäämällä hirviöiden kimppuun
+m.EffectsUnarmed1_0=Raivopää (TAITO)
+m.EffectsUnarmed1_1=+50% vahinko, rikkoo heikkoja materiaaleja
+m.EffectsUnarmed2_0=Aseista riisuminen (Pelaajat)
+m.EffectsUnarmed2_1=Pudottaa vihollisen esineen kädestä
+m.EffectsUnarmed3_0=Aseistamattomuuden Herra
+m.EffectsUnarmed3_1=Suuri vahingonlisäys
+m.EffectsUnarmed4_0=Aseistamattomuuden Aloittelija
+m.EffectsUnarmed4_1=Vahingonlisäys
+m.EffectsUnarmed5_0=Nuolentorjunta
+m.EffectsUnarmed5_1=Torjuu nuolia
+m.AbilLockUnarmed1=LUKITTU KUNNES 250+ TAITO (ASEISTAMATTOMUUDEN ALOITTELIJA)
+m.AbilLockUnarmed2=LUKITTU KUNNES 500+ TAITO (ASEISTAMATTOMUUDEN HERRA)
+m.AbilBonusUnarmed1_0=Aseistamattomuuden Aloittelija
+m.AbilBonusUnarmed1_1=+2 Vahinko
+m.AbilBonusUnarmed2_0=Aseistamattomuuden Herra
+m.AbilBonusUnarmed2_1=+4 Vahinko
+m.UnarmedArrowDeflectChance=[[RED]]Nuolentorjunnan todennäköisyys: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Aseista riisumisen todennäköisyys: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Raivopään kesto: [[YELLOW]]{0}s
+m.SkillHerbalism=YRTTIHOITO
+m.XPGainHerbalism=Keräämällä yrttejä
+m.EffectsHerbalism1_0=Vihermaa (TAITO)
+m.EffectsHerbalism1_1=Levitä vihreyttä, 3x saalis
+m.EffectsHerbalism2_0=Viherpeukalo (Vehnä)
+m.EffectsHerbalism2_1=Istuttaa vehnää automaattisesti kun keräät vehnää
+m.EffectsHerbalism3_0=Viherpeukalo (Mukulakivi)
+m.EffectsHerbalism3_1=Mukulakivi -> Sammaleinen mukulakivi ja siemeniä
+m.EffectsHerbalism4_0=Ruoka+
+m.EffectsHerbalism4_1=Muokkaa terveyttä jota saat leivästä/muhennoksesta
+m.EffectsHerbalism5_0=Tuplasaalis (Kaikki yrtit)
+m.EffectsHerbalism5_1=Tuplaa normaali saaliin määrä
+m.HerbalismGreenTerraLength=[[RED]]Vihermaan kesto: [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Viherpeukalon todennäköisyys: [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Viherpeukalon vaihe: [[YELLOW]] Vehnä kasvaa {0}:ssa vaiheessa
+m.HerbalismDoubleDropChance=[[RED]]Tuplasaaliin todennäköisyys: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Ruoka+ (Rank{0}): [[YELLOW]]Bonus {0} terveyden määrä
+m.SkillExcavation=KAIVANTO
+m.XPGainExcavation=Kaivamalla ja löytämällä aarteita
+m.EffectsExcavation1_0=Giga Drill Breaker (TAITO)
+m.EffectsExcavation1_1=3x saaliin määrä, 3x kokemuspisteiden määrä, +Nopeus
+m.EffectsExcavation2_0=Aarteenmetsästäjä
+m.EffectsExcavation2_1=Taito jonka avulla voit kaivaa aarteita
+m.ExcavationGreenTerraLength=[[RED]]Giga Drill Breaker kesto: [[YELLOW]]{0}s
+mcBlockListener.PlacedAnvil=[[DARK_RED]]Olet asettanut alasimen maahan, sillä voit korjata työkaluja ja haarniskoja.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Sutesi kipittää takaisin luoksesi...
+mcPlayerListener.AbilitiesOff=Taitojen käyttö pois päältä
+mcPlayerListener.AbilitiesOn=Taitojen käyttö päällä
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**TAIDOT PÄIVITETTY\!**
+mcPlayerListener.AcrobaticsSkill=[[YELLOW]]Akrobatia: 
+mcPlayerListener.ArcherySkill=[[YELLOW]]Jousiammunta: 
+mcPlayerListener.AxesSkill=[[YELLOW]]Kirveet: 
+mcPlayerListener.ExcavationSkill=[[YELLOW]]Kaivanto: 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Godmode pois päältä
+mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Godmode päällä
+mcPlayerListener.GreenThumb=[[GREEN]]**VIHERPEUKALO**
+mcPlayerListener.GreenThumbFail=[[RED]]**VIHERPEUKALO EPÄONNISTUI**
+mcPlayerListener.HerbalismSkill=[[YELLOW]]Yrttihoito: 
+mcPlayerListener.MiningSkill=[[YELLOW]]Kaivanto: 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn on tyhjätty.
+mcPlayerListener.MyspawnNotExist=[[RED]]Määrää myspawnisi ensin laittamalla sänky maahan.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn on asetettu tämänhetkiseen sijaintiisi.
+mcPlayerListener.MyspawnTimeNotice=Sinun pitää odottaa {0}m {1}s käyttääksesi myspawnia
+mcPlayerListener.NoPermission=Puutteelliset oikeudet (mcPermissions)
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Jos sinulla ei ole käyttöoikeutta johonkin taitoon, sitä ei näytetä täällä.
+mcPlayerListener.NotInParty=[[RED]]Et ole ryhmässä.
+mcPlayerListener.InviteSuccess=[[GREEN]]Kutsu lähetetty.
+mcPlayerListener.ReceivedInvite1=[[RED]]HUOMIO: [[GREEN]]Olet saanut ryhmäkutsun ryhmään {0} pelaajalta {1}
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Kirjoita [[GREEN]]/{0}[[YELLOW]] hyväksyäksesi kutsun 
+mcPlayerListener.InviteAccepted=[[GREEN]]Kutsu hyväksytty. Olet liittynyt ryhmään {0}
+mcPlayerListener.NoInvites=[[RED]]Sinulla ei ole kutsuja
+mcPlayerListener.YouAreInParty=[[GREEN]]Olet ryhmässä {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Ryhmän jäsenet
+mcPlayerListener.LeftParty=[[RED]]Olet lähtenyt ryhmästä
+mcPlayerListener.JoinedParty=Liityit ryhmään: {0}
+mcPlayerListener.PartyChatOn=Vain ryhmäjuttelu [[GREEN]]Päällä
+mcPlayerListener.PartyChatOff=Vain ryhmäjuttelu [[RED]]Pois päältä
+mcPlayerListener.AdminChatOn=Vain admin juttelu [[GREEN]]Päällä
+mcPlayerListener.AdminChatOff=Vain admin juttelu [[RED]]Pois päältä
+mcPlayerListener.MOTD=[[BLUE]]Tällä serverillä on mcMMO {0} kirjoita [[YELLOW]]/{1}[[BLUE]] apua varten.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
+mcPlayerListener.PowerLevel=[[DARK_RED]]VOIMATASO: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Voimataso [[YELLOW]]Tulostaulukko--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Tulostaulukko--
+mcPlayerListener.RepairSkill=[[YELLOW]]Korjaus: 
+mcPlayerListener.SwordsSkill=[[YELLOW]]Miekat: 
+mcPlayerListener.TamingSkill=[[YELLOW]]Kesytys: 
+mcPlayerListener.UnarmedSkill=[[YELLOW]]Aseistamattomuus: 
+mcPlayerListener.WoodcuttingSkill=[[YELLOW]]Puunkaato: 
+mcPlayerListener.YourStats=[[GREEN]]Sinun MMO tilastosi
+Party.InformedOnJoin={0} [[GREEN]] on liittynyt ryhmään
+Party.InformedOnQuit={0} [[GREEN]] on lähtenyt ryhmästä
+Skills.YourGreenTerra=[[GREEN]]Your [[YELLOW]]Green Terra [[GREEN]]ability is refreshed!
+Skills.YourTreeFeller=[[GREEN]]Your [[YELLOW]]Tree Feller [[GREEN]]ability is refreshed!
+Skills.YourSuperBreaker=[[GREEN]]Your [[YELLOW]]Super Breaker [[GREEN]]ability is refreshed!
+Skills.YourSerratedStrikes=[[GREEN]]Your [[YELLOW]]Serrated Strikes [[GREEN]]ability is refreshed!
+Skills.YourBerserk=[[GREEN]]Your [[YELLOW]]Berserk [[GREEN]]ability is refreshed!
+Skills.YourSkullSplitter=[[GREEN]]Your [[YELLOW]]Skull Splitter [[GREEN]]ability is refreshed!
+Skills.YourGigaDrillBreaker=[[GREEN]]Your [[YELLOW]]Giga Drill Breaker [[GREEN]]ability is refreshed!
+Skills.TooTired=[[RED]]You are too tired to use that ability again.
+Skills.ReadyHoe=[[GREEN]]**YOU READY YOUR HOE**
+Skills.LowerHoe=[[GRAY]]**YOU LOWER YOUR HOE**
+Skills.ReadyAxe=[[GREEN]]**YOU READY YOUR AXE**
+Skills.LowerAxe=[[GRAY]]**YOU LOWER YOUR AXE**
+Skills.ReadyFists=[[GREEN]]**YOU READY YOUR FISTS**
+Skills.LowerFists=[[GRAY]]**YOU LOWER YOUR FISTS**
+Skills.ReadyPickAxe=[[GREEN]]**YOU READY YOUR PICKAXE**
+Skills.LowerPickAxe=[[GRAY]]**YOU LOWER YOUR PICKAXE**
+Skills.ReadyShovel=[[GREEN]]**YOU READY YOUR SHOVEL**
+Skills.LowerShovel=[[GRAY]]**YOU LOWER YOUR SHOVEL**
+Skills.ReadySword=[[GREEN]]**YOU READY YOUR SWORD**
+Skills.LowerSword=[[GRAY]]**YOU LOWER YOUR SWORD**
+Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
+Skills.GreenTerraOn=[[GREEN]]**GREEN TERRA ACTIVATED**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Green Terra!
+Skills.TreeFellerOn=[[GREEN]]**TREE FELLER ACTIVATED**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Tree Feller!
+Skills.SuperBreakerOn=[[GREEN]]**SUPER BREAKER ACTIVATED**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Super Breaker!
+Skills.SerratedStrikesOn=[[GREEN]]**SERRATED STRIKES ACTIVATED**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Serrated Strikes!
+Skills.SkullSplitterOn=[[GREEN]]**SKULL SPLITTER ACTIVATED**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Skull Splitter!
+Skills.GigaDrillBreakerOn=[[GREEN]]**GIGA DRILL BREAKER ACTIVATED**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Giga Drill Breaker!
+Skills.GreenTerraOff=[[RED]]**Green Terra has worn off**
+Skills.TreeFellerOff=[[RED]]**Tree Feller has worn off**
+Skills.SuperBreakerOff=[[RED]]**Super Breaker has worn off**
+Skills.SerratedStrikesOff=[[RED]]**Serrated Strikes has worn off**
+Skills.BerserkOff=[[RED]]**Berserk has worn off**
+Skills.SkullSplitterOff=[[RED]]**Skull Splitter has worn off**
+Skills.GigaDrillBreakerOff=[[RED]]**Giga Drill Breaker has worn off**
+Skills.TamingUp=[[YELLOW]]Taming skill increased by {0}. Total ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Acrobatics skill increased by {0}. Total ({1})
+Skills.ArcheryUp=[[YELLOW]]Archery skill increased by {0}. Total ({1})
+Skills.SwordsUp=[[YELLOW]]Swords skill increased by {0}. Total ({1})
+Skills.AxesUp=[[YELLOW]]Axes skill increased by {0}. Total ({1})
+Skills.UnarmedUp=[[YELLOW]]Unarmed skill increased by {0}. Total ({1})
+Skills.HerbalismUp=[[YELLOW]]Herbalism skill increased by {0}. Total ({1})
+Skills.MiningUp=[[YELLOW]]Mining skill increased by {0}. Total ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Woodcutting skill increased by {0}. Total ({1})
+Skills.RepairUp=[[YELLOW]]Repair skill increased by {0}. Total ({1})
+Skills.ExcavationUp=[[YELLOW]]Excavation skill increased by {0}. Total ({1})
+mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
+Party.Locked=[[RED]]Party is locked, only party leader may invite.
+Party.IsntLocked=[[GRAY]]Party is not locked
+Party.Unlocked=[[GRAY]]Party is unlocked
+Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
+Party.Help3=[[RED]]Consult /{0} ? for more information
+Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
+Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
+Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
+Party.NotOwner=[[DARK_RED]]You are not the party owner
+Party.InvalidName=[[DARK_RED]]That is not a valid party name
+Party.PasswordSet=[[GREEN]]Party password set to {0}
+Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
+Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
+Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
+Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
+Commands.xprate.proper3=[[RED]]Enter true or false for the second value
+Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
+Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
+Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
+Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
+Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
+Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 389 - 389
src/com/gmail/nossr50/locale/locale_fr.properties → src/main/java/com/gmail/nossr50/locale/locale_fr.properties

@@ -1,390 +1,390 @@
-Combat.WolfExamine=[[GREEN]]**Vous examinez le loup avec le Beast Lore**
-Combat.WolfShowMaster=[[DARK_GREEN]]Le Maître des bêtes \: {0}
-Combat.Ignition=[[RED]]**ALLUMAGE**
-Combat.BurningArrowHit=[[DARK_RED]]Vous avez été frappé par une flèche brûlante\!
-Combat.TouchedFuzzy=[[DARK_RED]]Vous voyez flou. Vous vous sentez étourdi.
-Combat.TargetDazed=La cible a été [[DARK_RED]]Étourdi
-Combat.WolfNoMaster=[[GRAY]]Cette bête n'a pas de maître...
-Combat.WolfHealth=[[GREEN]]Cette bête a {0} points de vie 
-Combat.StruckByGore=[[RED]]**FRAPPÉ JUSQU'AU SANG**
-Combat.Gore=[[GREEN]]**SANG**
-Combat.ArrowDeflect=[[WHITE]]**FLÈCHE DEVIÉE**
-Item.ChimaeraWingFail=**CHIMAERA WING a échoué \!**
-Item.ChimaeraWingPass=**CHIMAERA WING**
-Item.InjuredWait=Vous avez été blessé récemment et vous devez attendre pour utiliser ça. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]Vous avez besoin de plus de plumes..
-m.mccPartyCommands=[[GREEN]]--COMMANDES GROUPE--
-m.mccParty=[party name] [[RED]]- Créer / Rejoindre un groupe
-m.mccPartyQ=[[RED]]- Vous quitter la partie en cours
-m.mccPartyToggle=[[RED]] - Active le Chat de groupe
-m.mccPartyInvite=[player name] [[RED]]- Envoyer une invitation
-m.mccPartyAccept=[[RED]]- Accepter l'invitation
-m.mccPartyTeleport=[party member name] [[RED]]- Vous téléporte à un membre du groupe
-m.mccOtherCommands=[[GREEN]]--AUTRES COMMANDES--
-m.mccStats=- Voir vos statistiques
-m.mccLeaderboards=- Classements
-m.mccMySpawn=- Vous téléporte à votre spawn
-m.mccClearMySpawn=- Éfface votre point de spawn
-m.mccToggleAbility=- Active les capacités spéciales avec clic droit
-m.mccAdminToggle=- Active le chat admin
-m.mccWhois=[playername] [[RED]]- Voir les infos détaillées du joueur
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifier 
-m.mccMcGod=- Mode dieu
-m.mccSkillInfo=[skillname] [[RED]]- Afficher des informations détaillées d'une compétence
-m.mccModDescription=[[RED]]- Affiche la description de mcMMO
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]POUR GAGNER DE l'XP: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFFETS
-m.YourStats=VOS STATS
-m.SkillTaming=DRESSAGE
-m.XPGainTaming=Attaquer avec un loup
-m.EffectsTaming1_0=Connaissance des bêtes
-m.EffectsTaming1_1=Inspecte un loup avec un os
-m.EffectsTaming2_0=Morsures
-m.EffectsTaming2_1=Des coups critiques lors d'une morsure
-m.EffectsTaming3_0=Griffes aiguisées
-m.EffectsTaming3_1=Bonus de dégâts
-m.EffectsTaming4_0=Conscient de l'environnement
-m.EffectsTaming4_1=Resistance aux Cactus, à la lave et aux chutes.
-m.EffectsTaming5_0=Epaisse fourrure
-m.EffectsTaming5_1=Réduction dégâts, Résistance au feu
-m.EffectsTaming6_0=Résistance aux chocs
-m.EffectsTaming6_1=Réduction des dommages explosifs
-m.AbilLockTaming1=Débloqué au niveau 100 (Conscient de l'environnement)
-m.AbilLockTaming2=Débloqué au niveau 250 (Épaisse fourrure)
-m.AbilLockTaming3=Débloqué au niveau 500 (Résistance aux chocs)
-m.AbilLockTaming4=Débloqué au niveau 750 (Griffes aiguisées)
-m.AbilBonusTaming1_0=Conscient de l'environnement
-m.AbilBonusTaming1_1=Le loup évite le danger
-m.AbilBonusTaming2_0=Epaisse fourrure
-m.AbilBonusTaming2_1=Réduit de moitié les dommages \+ résistance au feu
-m.AbilBonusTaming3_0=Résistance aux chocs
-m.AbilBonusTaming3_1=divise par 6 les dégats d'explosions
-m.AbilBonusTaming4_0=Griffes aiguisées
-m.AbilBonusTaming4_1=+2 Dommages
-m.TamingGoreChance=[[RED]]Chances de Morsure: [[YELLOW]]{0}%
-m.SkillWoodCutting=BÛCHERONNAGE
-m.XPGainWoodCutting=Abattre des arbres
-m.EffectsWoodCutting1_0=L'abatteur d'arbres (capacité spéciale)
-m.EffectsWoodCutting1_1=Faire exploser les arbres
-m.EffectsWoodCutting2_0=Souffleur de feuilles
-m.EffectsWoodCutting2_1=Détruire plus de feuilles
-m.EffectsWoodCutting3_0=Double Butin
-m.EffectsWoodCutting3_1=Double le butin normal
-m.AbilLockWoodCutting1=Débloqué au niveau 100 (Souffleur de feuilles)
-m.AbilBonusWoodCutting1_0=Soufler les feuilles
-m.AbilBonusWoodCutting1_1=Détruire plus de feuilles
-m.WoodCuttingDoubleDropChance=[[RED]]Chance de double butin: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
-m.SkillArchery=TIR À L'ARC
-m.XPGainArchery=Attaquer les monstres
-m.EffectsArchery1_0=Allumage
-m.EffectsArchery1_1=25% de chances que l'ennemi s'enflamme
-m.EffectsArchery2_0=Étourdir (les joueurs)
-m.EffectsArchery2_1=Étourdi les joueurs
-m.EffectsArchery3_0=Dégâts+
-m.EffectsArchery3_1=Augmente les dégâts
-m.EffectsArchery4_0=Récupération de flèches
-m.EffectsArchery4_1=Chances de récupérer vos flèches sur un cadavre
-m.ArcheryDazeChance=[[RED]]Chances d'étourdir : [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Chances de récupération des flèches : [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Durée du feu : [[YELLOW]]{0} secondes
-m.ArcheryDamagePlus=[[RED]]Dégâts+ (Rang {0}): [[YELLOW]]Bonus de {0} dommages
-m.SkillAxes=HACHE
-m.XPGainAxes=Attaquer des monstres
-m.EffectsAxes1_0=Fendeur de crânes (capacité spéciale)
-m.EffectsAxes1_1=provoque des dégâts de zone 
-m.EffectsAxes2_0=Coup critiques
-m.EffectsAxes2_1=double les dégâts
-m.EffectsAxes3_0=Maîtrise de la hache (niveau 500)
-m.EffectsAxes3_1=Augmente les dégâts
-m.AbilLockAxes1=Débloqué au niveau 500 (Maîtrise de la hache)
-m.AbilBonusAxes1_0=Maîtrise de la hache
-m.AbilBonusAxes1_1=4 Blessures en bonus
-m.AxesCritChance=[[RED]]Chances de coup critique : [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
-m.SkillSwords=ÉPÉE
-m.XPGainSwords=Attaque des monstres
-m.EffectsSwords1_0=Contre-Attaque
-m.EffectsSwords1_1=Renvoie 50% des degats subis
-m.EffectsSwords2_0=Lame crantée (capacité spéciale)
-m.EffectsSwords2_1=25% de dégâts et saignements succesifs.
-m.EffectsSwords3_0=Lame crantée avec saignement+
-m.EffectsSwords3_1=5 saignements
-m.EffectsSwords4_0=Parer
-m.EffectsSwords4_1=Annule les dommages
-m.EffectsSwords5_0=Saignement
-m.EffectsSwords5_1=provoque un saignement répété
-m.SwordsCounterAttChance=[[RED]]Chances de Contre-Attaque : [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Nombre de saignements : [[YELLOW]]{0}
-m.SwordsBleedChance=[[RED]]Chances de provoquer des saignements : [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Chances de parer : [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]NOTE: [[YELLOW]]1 saignement va durer 2 secondes
-m.SkillAcrobatics=ACROBATIE
-m.XPGainAcrobatics=Chuter
-m.EffectsAcrobatics1_0=Roulade
-m.EffectsAcrobatics1_1=Réduit ou annule les dommages
-m.EffectsAcrobatics2_0=Super roulade
-m.EffectsAcrobatics2_1=Roulade deux fois plus efficace
-m.EffectsAcrobatics3_0=Esquive
-m.EffectsAcrobatics3_1=Dommages reduits de moitié
-m.AcrobaticsRollChance=[[RED]]Chances de roulade : [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Chances de super roulade: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Chances d'esquiver : [[YELLOW]]{0}%
-m.SkillMining=MINAGE
-m.XPGainMining=Miner de la roche et des minerais
-m.EffectsMining1_0=Super Breaker (capacité spéciale)
-m.EffectsMining1_1=Augmente la vitesse et triple les chances de trouver un butin
-m.EffectsMining2_0=Double Butin
-m.EffectsMining2_1=Double le butin normal
-m.MiningDoubleDropChance=[[RED]]Chances de Double Butin: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
-m.SkillRepair=RÉPARATION
-m.XPGainRepair=Réparer des objets
-m.EffectsRepair1_0=Réparer
-m.EffectsRepair1_1=Réparation d'outils & Armures en Fer
-m.EffectsRepair2_0=Maître en réparation
-m.EffectsRepair2_1=Augmente le nombre de réparations possibles
-m.EffectsRepair3_0=Super Réparation
-m.EffectsRepair3_1=Double l'efficacité
-m.EffectsRepair4_0=Réparation du Diamant (requiert niveau {0})
-m.EffectsRepair4_1=Réparation des outils & armures en diamant
-m.RepairRepairMastery=[[RED]]Maître en réparation : [[YELLOW]]{0}% de durabilité restaurée
-m.RepairSuperRepairChance=[[RED]]Chances de Super Réparation : [[YELLOW]]{0}%
-m.SkillUnarmed=MAINS NUES
-m.XPGainUnarmed=Attaquer des monstres sans armes
-m.EffectsUnarmed1_0=Berserk (capacité spéciale)
-m.EffectsUnarmed1_1=+50% de dégâts, brise les matériaux faibles
-m.EffectsUnarmed2_0=Désarmer (les joueurs)
-m.EffectsUnarmed2_1=Vole l'objet que l'ennemi a dans la main
-m.EffectsUnarmed3_0=Apprenti du désarmement
-m.EffectsUnarmed3_1=Plus de dégâts
-m.EffectsUnarmed4_0=Maîtrise du désarmement
-m.EffectsUnarmed4_1=Beaucoup plus de dégâts
-m.EffectsUnarmed5_0=Déviation des flèches
-m.EffectsUnarmed5_1=Dévie les flèches qui vous foncent dessus
-m.AbilLockUnarmed1=Débloqué au niveau 250 (Apprenti du désarmement)
-m.AbilLockUnarmed2=Débloqué au niveau 500 (Maîtrise du désarmement)
-m.AbilBonusUnarmed1_0=Apprenti du désarmement
-m.AbilBonusUnarmed1_1=+2 dégâts
-m.AbilBonusUnarmed2_0=Maîtrise du désarmement
-m.AbilBonusUnarmed2_1=+4 dégâts
-m.UnarmedArrowDeflectChance=[[RED]]Chances dévier les flèches : [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Chances de Désarmer : [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
-m.SkillHerbalism=Herboristerie
-m.XPGainHerbalism=Récoler des herbes
-m.EffectsHerbalism1_0=Main verte (capacité spéciale)
-m.EffectsHerbalism1_1=répand la main verte, 3x Butin
-m.EffectsHerbalism2_0=Main verte (Blé)
-m.EffectsHerbalism2_1=Auto-plantes du blé lors de la récolte
-m.EffectsHerbalism3_0=Main verte (Cobblestone)
-m.EffectsHerbalism3_1=Transforme la Cobble en Mossy avec des graines
-m.EffectsHerbalism4_0=Nouriture+
-m.EffectsHerbalism4_1=Modifie la santé reçue via le pain / ragoût
-m.EffectsHerbalism5_0=Double butin (Toutes cultures)
-m.EffectsHerbalism5_1=Double les récoltes
-m.HerbalismGreenTerraLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Cances d'obtenir la main verte : [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Main verte par niveaux : [[YELLOW]] Wheat grows in stage {0}
-m.HerbalismDoubleDropChance=[[RED]]Chances du Double Butin : [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Nourriture+ (Rang {0}): [[YELLOW]]{0} plus nourissant
-m.SkillExcavation=EXCAVATION
-m.XPGainExcavation=Creuser et trouver des trésors
-m.EffectsExcavation1_0=Super broyeur (capacité spéciale)
-m.EffectsExcavation1_1=3x Butin, 3x XP, +Vitesse
-m.EffectsExcavation2_0=Chercheur de trésors
-m.EffectsExcavation2_1=Capacité de trouver un trésor
-m.ExcavationGreenTerraLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
-mcBlockListener.PlacedAnvil=[[DARK_RED]]Vous avez placé une enclume, Les enclumes peuvent réparer les outils et l'armure.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Votre loup revient vers vous...
-mcPlayerListener.AbilitiesOff=Capacité spéciale désactivée
-mcPlayerListener.AbilitiesOn=Capacité spéciale activée
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**CAPACITÉ RECHARGÉE**
-mcPlayerListener.AcrobaticsSkill=[[YELLOW]]Acrobatie (/Acrobatics) : 
-mcPlayerListener.ArcherySkill=[[YELLOW]]Tir a l'arc (/Archery) : 
-mcPlayerListener.AxesSkill=[[YELLOW]]Hache (/Axes) : 
-mcPlayerListener.ExcavationSkill=[[YELLOW]]Excavation (/Excavation): 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO godMode désactivé
-mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO godMode activé
-mcPlayerListener.GreenThumb=[[GREEN]]**MAIN VERTE**
-mcPlayerListener.GreenThumbFail=[[RED]]**MAIN VERTE A ECHOUÉ**
-mcPlayerListener.HerbalismSkill=[[YELLOW]]Herboriste (/Herbalism) : 
-mcPlayerListener.MiningSkill=[[YELLOW]]Minage (/Mining): 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Votre point de spawn a été éffacé.
-mcPlayerListener.MyspawnNotExist=[[RED]]Dormez dans un lit pour définir votre point de spawn.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Votre point de spawn a été enregistré ici.
-mcPlayerListener.MyspawnTimeNotice=Vous devez attendre {0}m {1}s avant d'utiliser votre spawn
-mcPlayerListener.NoPermission=Vous n'avez pas les permissions nécessaires.
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si vous n'avez pas accès à une compé, elle ne sera pas affichée ici.
-mcPlayerListener.NotInParty=[[RED]]Vous n'êtes pas dans un groupe.
-mcPlayerListener.InviteSuccess=[[GREEN]]L'invitation a été envoyée avec succès.
-mcPlayerListener.ReceivedInvite1=[[RED]]ALERTE: [[GREEN]]Vous avez reçu une invitation pour le groupe {0} de la part de {1}
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Tapez [[GREEN]]/{0}[[YELLOW]] pour accepter l'invitation
-mcPlayerListener.InviteAccepted=[[GREEN]]Invite acceptée. Vous avez rejoint le groupe {0}
-mcPlayerListener.NoInvites=[[RED]]Vous n'avez pas d'invitation pour le moment 
-mcPlayerListener.YouAreInParty=[[GREEN]]Vous êtes dans le groupe {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Membres du groupe
-mcPlayerListener.LeftParty=[[RED]]Vous avez quitté le groupe
-mcPlayerListener.JoinedParty=Votre groupe: {0}
-mcPlayerListener.PartyChatOn=Chat de Groupe uniquement [[GREEN]]On
-mcPlayerListener.PartyChatOff=Chat de Groupe uniquement [[RED]]Off
-mcPlayerListener.AdminChatOn=Admin Chat uniquement [[GREEN]]On
-mcPlayerListener.AdminChatOff=Admin Chat uniquement [[RED]]Off
-mcPlayerListener.MOTD=[[BLUE]]Ce serveur fonctionne avec mcMMO {0} [[YELLOW]]/{1}[[BLUE]] pour voir l'aide.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki - [[YELLOW]]Traduit par avalondrey & Misa
-mcPlayerListener.PowerLevel=[[DARK_RED]]POWER LEVEL: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Leaderboard--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
-mcPlayerListener.RepairSkill=[[YELLOW]]Réparation (/Repair) : 
-mcPlayerListener.SwordsSkill=[[YELLOW]]Epee (/Swords) : 
-mcPlayerListener.TamingSkill=[[YELLOW]]Dressage (/Taming) : 
-mcPlayerListener.UnarmedSkill=[[YELLOW]]Mains nues (/Unarmed) : 
-mcPlayerListener.WoodcuttingSkill=[[YELLOW]]Bucheron (/Woodcutting): 
-mcPlayerListener.YourStats=[[GREEN]]Vos statistiques
-Party.InformedOnJoin={0} [[GREEN]] a rejoint votre groupe
-Party.InformedOnQuit={0} [[GREEN]] a quitté votre groupe
-Skills.YourGreenTerra=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Main verte [[GREEN]]est rechargée
-Skills.YourTreeFeller=[[GREEN]]Votre capacitée spéciale [[YELLOW]]L'abatteur d'arbres [[GREEN]]est rechargée
-Skills.YourSuperBreaker=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Super Breaker[[GREEN]]est rechargée
-Skills.YourSerratedStrikes=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Epee cranté [[GREEN]]est rechargée
-Skills.YourBerserk=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Berserk [[GREEN]]est rechargée
-Skills.YourSkullSplitter=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Fendeur de crânes [[GREEN]]est rechargée
-Skills.YourGigaDrillBreaker=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Super broyeur [[GREEN]]est rechargée
-Skills.TooTired=[[RED]]Vous êtes trop fatigué pour utiliser cette capacité pour l'instant.
-Skills.ReadyHoe=[[GREEN]]**Votre bêche est chargée**
-Skills.LowerHoe=[[GRAY]]Votre bêche s'est déchargée..
-Skills.ReadyAxe=[[GREEN]]**Votre hache est chargée**
-Skills.LowerAxe=[[GRAY]]Votre hache s'est déchargée..
-Skills.ReadyFists=[[GREEN]]**Vos poings sont chargés**
-Skills.LowerFists=[[GRAY]]Vos poings se sont déchargés..
-Skills.ReadyPickAxe=[[GREEN]]**Votre pioche est chargée**
-Skills.LowerPickAxe=[[GRAY]]Votre pioche s'est déchargée..
-Skills.ReadyShovel=[[GREEN]]**Votre pelle est chargée**
-Skills.LowerShovel=[[GRAY]]Votre pelle s'est déchargée..
-Skills.ReadySword=[[GREEN]]**Votre épée est chargée**
-Skills.LowerSword=[[GRAY]]Votre épée s'est déchargée..
-Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
-Skills.GreenTerraOn=[[GREEN]]**Compétence [[YELLOW]]Main Verte [[GREEN]]activée**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Main verte !
-Skills.TreeFellerOn=[[GREEN]]**Compétence [[YELLOW]]L'abatteur d'Arbres [[GREEN]]activée**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Abatteur d'Arbres !
-Skills.SuperBreakerOn=[[GREEN]]**Compétence [[YELLOW]]Super Breaker [[GREEN]]activée**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Super Breaker !
-Skills.SerratedStrikesOn=[[GREEN]]**Compétence [[YELLOW]]Lame Crantée [[GREEN]]activée**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Lame crantée !
-Skills.SkullSplitterOn=[[GREEN]]**Compétence [[YELLOW]]Fendeur de crânes [[GREEN]]activée**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Fendeur de crânes !
-Skills.GigaDrillBreakerOn=[[GREEN]]**Compétence [[YELLOW]]Super Broyeur [[GREEN]]activée**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Super broyeur !
-Skills.GreenTerraOff=[[RED]]**Compétence [[YELLOW]]Main Verte [[GREEN]]terminée**
-Skills.TreeFellerOff=[[RED]]**Compétence [[YELLOW]]L'abatteur d'Arbres [[GREEN]]terminée**
-Skills.SuperBreakerOff=[[RED]]**Compétence [[YELLOW]]Super Breaker [[GREEN]]terminée**
-Skills.SerratedStrikesOff=[[RED]]**Compétence [[YELLOW]]Lame Crantée [[GREEN]]terminée**
-Skills.BerserkOff=[[RED]]**Berserk est fini**
-Skills.SkullSplitterOff=[[RED]]**Casseur de tete est fini**
-Skills.GigaDrillBreakerOff=[[RED]]**Super broyeur est fini**
-Skills.TamingUp=[[YELLOW]]La competence du dressage a augmenté de {0}. Total ({1})
-Skills.AcrobaticsUp=[[YELLOW]]La competence acrobatie a augmenté de {0}. Total ({1})
-Skills.ArcheryUp=[[YELLOW]]La competence tir a l'arc a augmenté de {0}. Total ({1})
-Skills.SwordsUp=[[YELLOW]]La competence épée a augmenté de {0}. Total ({1})
-Skills.AxesUp=[[YELLOW]]La competence hache a augmenté de {0}. Total ({1})
-Skills.UnarmedUp=[[YELLOW]]La compétence de combat à mains nues a augmenté de {0}. Total ({1})
-Skills.HerbalismUp=[[YELLOW]]La competence herboriste a augmenté de {0}. Total ({1})
-Skills.MiningUp=[[YELLOW]]La competence minage a augmenté de {0}. Total ({1})
-Skills.WoodcuttingUp=[[YELLOW]]La competence bucherônage a augmenté de {0}. Total ({1})
-Skills.RepairUp=[[YELLOW]]La competence réparation a augmenté de {0}. Total ({1})
-Skills.ExcavationUp=[[YELLOW]]La competence excavation a augmenté de {0}. Total ({1})
-Skills.FeltEasy=[[GRAY]]That felt easy.
-Skills.StackedItems=[[DARK_RED]]Vous ne pouvez pas réparer les objets empilés
-Skills.NeedMore=[[DARK_RED]]Vous devez en avoir plus
-Skills.AdeptDiamond=[[DARK_RED]]Vous n'avez pas encore le niveau nécessaire pour réparer du diamant
-Skills.FullDurability=[[GRAY]]Cet objet est déjà en bonne état.
-Skills.Disarmed=[[DARK_RED]]Vous avez été désarmé !
-mcPlayerListener.SorcerySkill=Sorcery: 
-m.SkillSorcery=SORCERY
-Sorcery.HasCast=[[GREEN]]**CASTING**[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]]MP
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} MP
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Out Of Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=THUNDER
-Sorcery.Curative.Self=CURE SELF
-Sorcery.Curative.Other=CURE OTHER
-m.LVL=NIVEAU [[GREEN]]{0} - [[DARK_AQUA]]XP : [[YELLOW]][[[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]]]
-Combat.BeastLore=[[GREEN]]**Connaissances des bêtes**
-Combat.BeastLoreOwner=[[DARK_AQUA]]Propriétaire ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Vie ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Vie ([[GREEN]]{0}[[DARK_AQUA]]/8)
-mcMMO.Description=[[DARK_AQUA]]Q: QU'EST-CE QUE C'EST ?,[[GOLD]]mcMMO est un plugin RPG [[RED]]OPEN SOURCE[[GOLD]] pour Bukkit créé par [[BLUE]]nossr50,[[GOLD]]mcMMO ajoute beaucoup de compétences dans Minecraft,[[GOLD]]Vous pouvez gagner de l'expérience de différentes façons,[[GOLD]]Vous devriez taper [[GREEN]]/NOM_COMPETENCE[[GOLD]] pour en savoir plus.,[[DARK_AQUA]]Q: QU'EST-CE QUE ÇA FAIT?,[[GOLD]]Par exemple... en [[DARK_AQUA]]Minant[[GOLD]] Vous allez recevoir des bénéfices comme,[[RED]]le Double Butin[[GOLD]] ou la compétence [[RED]]Super Breaker[[GOLD]] qui lorsqu'elle est,[[GOLD]]activée avec clique droit permet de miner vite, sa durée,[[GOLD]]dépend du niveau de votre compétence. Améliorer [[BLUE]]Le Minage,[[GOLD]]Est aussi simple que de mine des ressources précieuses !,[[DARK_AQUA]]Q: QU'EST-CE QUE ÇA VEUT DIRE ?,[[GOLD]]Presque toutes les compétences dans [[GREEN]]mcMMO[[GOLD]] Sont des nouveaux trucs cools!.,[[GOLD]]Tapez [[GREEN]]/{0}[[GOLD]] pour trouver les commandes,[[GOLD]]Le but de mcMMO est de créer une expérience RPG de qualité.,[[DARK_AQUA]]Q: OÙ JE PEUX SUGGÉRER DES IDÉES !?,[[DARK_AQUA]]bit.ly/MCmmoIDEA,[[DARK_AQUA]]Q: COMMENT JE FAIS CI ET ÇA?,[[RED]]MERCI [[GOLD]]d'aller voir le wiki ! [[DARK_AQUA]]mcmmo.wikia.com
-Party.Locked=[[RED]]Party is locked, only party leader may invite.
-Party.IsntLocked=[[GRAY]]Party is not locked
-Party.Unlocked=[[GRAY]]Party is unlocked
-Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
-Party.Help3=[[RED]]Consult /{0} ? for more information
-Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
-Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
-Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
-Party.NotOwner=[[DARK_RED]]You are not the party owner
-Party.InvalidName=[[DARK_RED]]That is not a valid party name
-Party.PasswordSet=[[GREEN]]Party password set to {0}
-Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
-Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
-Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
-Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
-Commands.xprate.proper3=[[RED]]Enter true or false for the second value
-Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
-Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
-Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
-Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
-Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
-Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]**Vous examinez le loup avec le Beast Lore**
+Combat.WolfShowMaster=[[DARK_GREEN]]Le Maître des bêtes \: {0}
+Combat.Ignition=[[RED]]**ALLUMAGE**
+Combat.BurningArrowHit=[[DARK_RED]]Vous avez été frappé par une flèche brûlante\!
+Combat.TouchedFuzzy=[[DARK_RED]]Vous voyez flou. Vous vous sentez étourdi.
+Combat.TargetDazed=La cible a été [[DARK_RED]]Étourdi
+Combat.WolfNoMaster=[[GRAY]]Cette bête n'a pas de maître...
+Combat.WolfHealth=[[GREEN]]Cette bête a {0} points de vie 
+Combat.StruckByGore=[[RED]]**FRAPPÉ JUSQU'AU SANG**
+Combat.Gore=[[GREEN]]**SANG**
+Combat.ArrowDeflect=[[WHITE]]**FLÈCHE DEVIÉE**
+Item.ChimaeraWingFail=**CHIMAERA WING a échoué \!**
+Item.ChimaeraWingPass=**CHIMAERA WING**
+Item.InjuredWait=Vous avez été blessé récemment et vous devez attendre pour utiliser ça. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]Vous avez besoin de plus de plumes..
+m.mccPartyCommands=[[GREEN]]--COMMANDES GROUPE--
+m.mccParty=[party name] [[RED]]- Créer / Rejoindre un groupe
+m.mccPartyQ=[[RED]]- Vous quitter la partie en cours
+m.mccPartyToggle=[[RED]] - Active le Chat de groupe
+m.mccPartyInvite=[player name] [[RED]]- Envoyer une invitation
+m.mccPartyAccept=[[RED]]- Accepter l'invitation
+m.mccPartyTeleport=[party member name] [[RED]]- Vous téléporte à un membre du groupe
+m.mccOtherCommands=[[GREEN]]--AUTRES COMMANDES--
+m.mccStats=- Voir vos statistiques
+m.mccLeaderboards=- Classements
+m.mccMySpawn=- Vous téléporte à votre spawn
+m.mccClearMySpawn=- Éfface votre point de spawn
+m.mccToggleAbility=- Active les capacités spéciales avec clic droit
+m.mccAdminToggle=- Active le chat admin
+m.mccWhois=[playername] [[RED]]- Voir les infos détaillées du joueur
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifier 
+m.mccMcGod=- Mode dieu
+m.mccSkillInfo=[skillname] [[RED]]- Afficher des informations détaillées d'une compétence
+m.mccModDescription=[[RED]]- Affiche la description de mcMMO
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]POUR GAGNER DE l'XP: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFFETS
+m.YourStats=VOS STATS
+m.SkillTaming=DRESSAGE
+m.XPGainTaming=Attaquer avec un loup
+m.EffectsTaming1_0=Connaissance des bêtes
+m.EffectsTaming1_1=Inspecte un loup avec un os
+m.EffectsTaming2_0=Morsures
+m.EffectsTaming2_1=Des coups critiques lors d'une morsure
+m.EffectsTaming3_0=Griffes aiguisées
+m.EffectsTaming3_1=Bonus de dégâts
+m.EffectsTaming4_0=Conscient de l'environnement
+m.EffectsTaming4_1=Resistance aux Cactus, à la lave et aux chutes.
+m.EffectsTaming5_0=Epaisse fourrure
+m.EffectsTaming5_1=Réduction dégâts, Résistance au feu
+m.EffectsTaming6_0=Résistance aux chocs
+m.EffectsTaming6_1=Réduction des dommages explosifs
+m.AbilLockTaming1=Débloqué au niveau 100 (Conscient de l'environnement)
+m.AbilLockTaming2=Débloqué au niveau 250 (Épaisse fourrure)
+m.AbilLockTaming3=Débloqué au niveau 500 (Résistance aux chocs)
+m.AbilLockTaming4=Débloqué au niveau 750 (Griffes aiguisées)
+m.AbilBonusTaming1_0=Conscient de l'environnement
+m.AbilBonusTaming1_1=Le loup évite le danger
+m.AbilBonusTaming2_0=Epaisse fourrure
+m.AbilBonusTaming2_1=Réduit de moitié les dommages \+ résistance au feu
+m.AbilBonusTaming3_0=Résistance aux chocs
+m.AbilBonusTaming3_1=divise par 6 les dégats d'explosions
+m.AbilBonusTaming4_0=Griffes aiguisées
+m.AbilBonusTaming4_1=+2 Dommages
+m.TamingGoreChance=[[RED]]Chances de Morsure: [[YELLOW]]{0}%
+m.SkillWoodCutting=BÛCHERONNAGE
+m.XPGainWoodCutting=Abattre des arbres
+m.EffectsWoodCutting1_0=L'abatteur d'arbres (capacité spéciale)
+m.EffectsWoodCutting1_1=Faire exploser les arbres
+m.EffectsWoodCutting2_0=Souffleur de feuilles
+m.EffectsWoodCutting2_1=Détruire plus de feuilles
+m.EffectsWoodCutting3_0=Double Butin
+m.EffectsWoodCutting3_1=Double le butin normal
+m.AbilLockWoodCutting1=Débloqué au niveau 100 (Souffleur de feuilles)
+m.AbilBonusWoodCutting1_0=Soufler les feuilles
+m.AbilBonusWoodCutting1_1=Détruire plus de feuilles
+m.WoodCuttingDoubleDropChance=[[RED]]Chance de double butin: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
+m.SkillArchery=TIR À L'ARC
+m.XPGainArchery=Attaquer les monstres
+m.EffectsArchery1_0=Allumage
+m.EffectsArchery1_1=25% de chances que l'ennemi s'enflamme
+m.EffectsArchery2_0=Étourdir (les joueurs)
+m.EffectsArchery2_1=Étourdi les joueurs
+m.EffectsArchery3_0=Dégâts+
+m.EffectsArchery3_1=Augmente les dégâts
+m.EffectsArchery4_0=Récupération de flèches
+m.EffectsArchery4_1=Chances de récupérer vos flèches sur un cadavre
+m.ArcheryDazeChance=[[RED]]Chances d'étourdir : [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Chances de récupération des flèches : [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Durée du feu : [[YELLOW]]{0} secondes
+m.ArcheryDamagePlus=[[RED]]Dégâts+ (Rang {0}): [[YELLOW]]Bonus de {0} dommages
+m.SkillAxes=HACHE
+m.XPGainAxes=Attaquer des monstres
+m.EffectsAxes1_0=Fendeur de crânes (capacité spéciale)
+m.EffectsAxes1_1=provoque des dégâts de zone 
+m.EffectsAxes2_0=Coup critiques
+m.EffectsAxes2_1=double les dégâts
+m.EffectsAxes3_0=Maîtrise de la hache (niveau 500)
+m.EffectsAxes3_1=Augmente les dégâts
+m.AbilLockAxes1=Débloqué au niveau 500 (Maîtrise de la hache)
+m.AbilBonusAxes1_0=Maîtrise de la hache
+m.AbilBonusAxes1_1=4 Blessures en bonus
+m.AxesCritChance=[[RED]]Chances de coup critique : [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
+m.SkillSwords=ÉPÉE
+m.XPGainSwords=Attaque des monstres
+m.EffectsSwords1_0=Contre-Attaque
+m.EffectsSwords1_1=Renvoie 50% des degats subis
+m.EffectsSwords2_0=Lame crantée (capacité spéciale)
+m.EffectsSwords2_1=25% de dégâts et saignements succesifs.
+m.EffectsSwords3_0=Lame crantée avec saignement+
+m.EffectsSwords3_1=5 saignements
+m.EffectsSwords4_0=Parer
+m.EffectsSwords4_1=Annule les dommages
+m.EffectsSwords5_0=Saignement
+m.EffectsSwords5_1=provoque un saignement répété
+m.SwordsCounterAttChance=[[RED]]Chances de Contre-Attaque : [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Nombre de saignements : [[YELLOW]]{0}
+m.SwordsBleedChance=[[RED]]Chances de provoquer des saignements : [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Chances de parer : [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]NOTE: [[YELLOW]]1 saignement va durer 2 secondes
+m.SkillAcrobatics=ACROBATIE
+m.XPGainAcrobatics=Chuter
+m.EffectsAcrobatics1_0=Roulade
+m.EffectsAcrobatics1_1=Réduit ou annule les dommages
+m.EffectsAcrobatics2_0=Super roulade
+m.EffectsAcrobatics2_1=Roulade deux fois plus efficace
+m.EffectsAcrobatics3_0=Esquive
+m.EffectsAcrobatics3_1=Dommages reduits de moitié
+m.AcrobaticsRollChance=[[RED]]Chances de roulade : [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Chances de super roulade: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Chances d'esquiver : [[YELLOW]]{0}%
+m.SkillMining=MINAGE
+m.XPGainMining=Miner de la roche et des minerais
+m.EffectsMining1_0=Super Breaker (capacité spéciale)
+m.EffectsMining1_1=Augmente la vitesse et triple les chances de trouver un butin
+m.EffectsMining2_0=Double Butin
+m.EffectsMining2_1=Double le butin normal
+m.MiningDoubleDropChance=[[RED]]Chances de Double Butin: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
+m.SkillRepair=RÉPARATION
+m.XPGainRepair=Réparer des objets
+m.EffectsRepair1_0=Réparer
+m.EffectsRepair1_1=Réparation d'outils & Armures en Fer
+m.EffectsRepair2_0=Maître en réparation
+m.EffectsRepair2_1=Augmente le nombre de réparations possibles
+m.EffectsRepair3_0=Super Réparation
+m.EffectsRepair3_1=Double l'efficacité
+m.EffectsRepair4_0=Réparation du Diamant (requiert niveau {0})
+m.EffectsRepair4_1=Réparation des outils & armures en diamant
+m.RepairRepairMastery=[[RED]]Maître en réparation : [[YELLOW]]{0}% de durabilité restaurée
+m.RepairSuperRepairChance=[[RED]]Chances de Super Réparation : [[YELLOW]]{0}%
+m.SkillUnarmed=MAINS NUES
+m.XPGainUnarmed=Attaquer des monstres sans armes
+m.EffectsUnarmed1_0=Berserk (capacité spéciale)
+m.EffectsUnarmed1_1=+50% de dégâts, brise les matériaux faibles
+m.EffectsUnarmed2_0=Désarmer (les joueurs)
+m.EffectsUnarmed2_1=Vole l'objet que l'ennemi a dans la main
+m.EffectsUnarmed3_0=Apprenti du désarmement
+m.EffectsUnarmed3_1=Plus de dégâts
+m.EffectsUnarmed4_0=Maîtrise du désarmement
+m.EffectsUnarmed4_1=Beaucoup plus de dégâts
+m.EffectsUnarmed5_0=Déviation des flèches
+m.EffectsUnarmed5_1=Dévie les flèches qui vous foncent dessus
+m.AbilLockUnarmed1=Débloqué au niveau 250 (Apprenti du désarmement)
+m.AbilLockUnarmed2=Débloqué au niveau 500 (Maîtrise du désarmement)
+m.AbilBonusUnarmed1_0=Apprenti du désarmement
+m.AbilBonusUnarmed1_1=+2 dégâts
+m.AbilBonusUnarmed2_0=Maîtrise du désarmement
+m.AbilBonusUnarmed2_1=+4 dégâts
+m.UnarmedArrowDeflectChance=[[RED]]Chances dévier les flèches : [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Chances de Désarmer : [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Durée de votre capacité spéciale : [[YELLOW]]{0}s
+m.SkillHerbalism=Herboristerie
+m.XPGainHerbalism=Récoler des herbes
+m.EffectsHerbalism1_0=Main verte (capacité spéciale)
+m.EffectsHerbalism1_1=répand la main verte, 3x Butin
+m.EffectsHerbalism2_0=Main verte (Blé)
+m.EffectsHerbalism2_1=Auto-plantes du blé lors de la récolte
+m.EffectsHerbalism3_0=Main verte (Cobblestone)
+m.EffectsHerbalism3_1=Transforme la Cobble en Mossy avec des graines
+m.EffectsHerbalism4_0=Nouriture+
+m.EffectsHerbalism4_1=Modifie la santé reçue via le pain / ragoût
+m.EffectsHerbalism5_0=Double butin (Toutes cultures)
+m.EffectsHerbalism5_1=Double les récoltes
+m.HerbalismGreenTerraLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Cances d'obtenir la main verte : [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Main verte par niveaux : [[YELLOW]] Wheat grows in stage {0}
+m.HerbalismDoubleDropChance=[[RED]]Chances du Double Butin : [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Nourriture+ (Rang {0}): [[YELLOW]]{0} plus nourissant
+m.SkillExcavation=EXCAVATION
+m.XPGainExcavation=Creuser et trouver des trésors
+m.EffectsExcavation1_0=Super broyeur (capacité spéciale)
+m.EffectsExcavation1_1=3x Butin, 3x XP, +Vitesse
+m.EffectsExcavation2_0=Chercheur de trésors
+m.EffectsExcavation2_1=Capacité de trouver un trésor
+m.ExcavationGreenTerraLength=[[RED]]Durée de la capacité spéciale : [[YELLOW]]{0}s
+mcBlockListener.PlacedAnvil=[[DARK_RED]]Vous avez placé une enclume, Les enclumes peuvent réparer les outils et l'armure.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Votre loup revient vers vous...
+mcPlayerListener.AbilitiesOff=Capacité spéciale désactivée
+mcPlayerListener.AbilitiesOn=Capacité spéciale activée
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**CAPACITÉ RECHARGÉE**
+mcPlayerListener.AcrobaticsSkill=[[YELLOW]]Acrobatie (/Acrobatics) : 
+mcPlayerListener.ArcherySkill=[[YELLOW]]Tir a l'arc (/Archery) : 
+mcPlayerListener.AxesSkill=[[YELLOW]]Hache (/Axes) : 
+mcPlayerListener.ExcavationSkill=[[YELLOW]]Excavation (/Excavation): 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO godMode désactivé
+mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO godMode activé
+mcPlayerListener.GreenThumb=[[GREEN]]**MAIN VERTE**
+mcPlayerListener.GreenThumbFail=[[RED]]**MAIN VERTE A ECHOUÉ**
+mcPlayerListener.HerbalismSkill=[[YELLOW]]Herboriste (/Herbalism) : 
+mcPlayerListener.MiningSkill=[[YELLOW]]Minage (/Mining): 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Votre point de spawn a été éffacé.
+mcPlayerListener.MyspawnNotExist=[[RED]]Dormez dans un lit pour définir votre point de spawn.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Votre point de spawn a été enregistré ici.
+mcPlayerListener.MyspawnTimeNotice=Vous devez attendre {0}m {1}s avant d'utiliser votre spawn
+mcPlayerListener.NoPermission=Vous n'avez pas les permissions nécessaires.
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Si vous n'avez pas accès à une compé, elle ne sera pas affichée ici.
+mcPlayerListener.NotInParty=[[RED]]Vous n'êtes pas dans un groupe.
+mcPlayerListener.InviteSuccess=[[GREEN]]L'invitation a été envoyée avec succès.
+mcPlayerListener.ReceivedInvite1=[[RED]]ALERTE: [[GREEN]]Vous avez reçu une invitation pour le groupe {0} de la part de {1}
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Tapez [[GREEN]]/{0}[[YELLOW]] pour accepter l'invitation
+mcPlayerListener.InviteAccepted=[[GREEN]]Invite acceptée. Vous avez rejoint le groupe {0}
+mcPlayerListener.NoInvites=[[RED]]Vous n'avez pas d'invitation pour le moment 
+mcPlayerListener.YouAreInParty=[[GREEN]]Vous êtes dans le groupe {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Membres du groupe
+mcPlayerListener.LeftParty=[[RED]]Vous avez quitté le groupe
+mcPlayerListener.JoinedParty=Votre groupe: {0}
+mcPlayerListener.PartyChatOn=Chat de Groupe uniquement [[GREEN]]On
+mcPlayerListener.PartyChatOff=Chat de Groupe uniquement [[RED]]Off
+mcPlayerListener.AdminChatOn=Admin Chat uniquement [[GREEN]]On
+mcPlayerListener.AdminChatOff=Admin Chat uniquement [[RED]]Off
+mcPlayerListener.MOTD=[[BLUE]]Ce serveur fonctionne avec mcMMO {0} [[YELLOW]]/{1}[[BLUE]] pour voir l'aide.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki - [[YELLOW]]Traduit par avalondrey & Misa
+mcPlayerListener.PowerLevel=[[DARK_RED]]POWER LEVEL: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Leaderboard--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
+mcPlayerListener.RepairSkill=[[YELLOW]]Réparation (/Repair) : 
+mcPlayerListener.SwordsSkill=[[YELLOW]]Epee (/Swords) : 
+mcPlayerListener.TamingSkill=[[YELLOW]]Dressage (/Taming) : 
+mcPlayerListener.UnarmedSkill=[[YELLOW]]Mains nues (/Unarmed) : 
+mcPlayerListener.WoodcuttingSkill=[[YELLOW]]Bucheron (/Woodcutting): 
+mcPlayerListener.YourStats=[[GREEN]]Vos statistiques
+Party.InformedOnJoin={0} [[GREEN]] a rejoint votre groupe
+Party.InformedOnQuit={0} [[GREEN]] a quitté votre groupe
+Skills.YourGreenTerra=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Main verte [[GREEN]]est rechargée
+Skills.YourTreeFeller=[[GREEN]]Votre capacitée spéciale [[YELLOW]]L'abatteur d'arbres [[GREEN]]est rechargée
+Skills.YourSuperBreaker=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Super Breaker[[GREEN]]est rechargée
+Skills.YourSerratedStrikes=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Epee cranté [[GREEN]]est rechargée
+Skills.YourBerserk=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Berserk [[GREEN]]est rechargée
+Skills.YourSkullSplitter=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Fendeur de crânes [[GREEN]]est rechargée
+Skills.YourGigaDrillBreaker=[[GREEN]]Votre capacitée spéciale [[YELLOW]]Super broyeur [[GREEN]]est rechargée
+Skills.TooTired=[[RED]]Vous êtes trop fatigué pour utiliser cette capacité pour l'instant.
+Skills.ReadyHoe=[[GREEN]]**Votre bêche est chargée**
+Skills.LowerHoe=[[GRAY]]Votre bêche s'est déchargée..
+Skills.ReadyAxe=[[GREEN]]**Votre hache est chargée**
+Skills.LowerAxe=[[GRAY]]Votre hache s'est déchargée..
+Skills.ReadyFists=[[GREEN]]**Vos poings sont chargés**
+Skills.LowerFists=[[GRAY]]Vos poings se sont déchargés..
+Skills.ReadyPickAxe=[[GREEN]]**Votre pioche est chargée**
+Skills.LowerPickAxe=[[GRAY]]Votre pioche s'est déchargée..
+Skills.ReadyShovel=[[GREEN]]**Votre pelle est chargée**
+Skills.LowerShovel=[[GRAY]]Votre pelle s'est déchargée..
+Skills.ReadySword=[[GREEN]]**Votre épée est chargée**
+Skills.LowerSword=[[GRAY]]Votre épée s'est déchargée..
+Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
+Skills.GreenTerraOn=[[GREEN]]**Compétence [[YELLOW]]Main Verte [[GREEN]]activée**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Main verte !
+Skills.TreeFellerOn=[[GREEN]]**Compétence [[YELLOW]]L'abatteur d'Arbres [[GREEN]]activée**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Abatteur d'Arbres !
+Skills.SuperBreakerOn=[[GREEN]]**Compétence [[YELLOW]]Super Breaker [[GREEN]]activée**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Super Breaker !
+Skills.SerratedStrikesOn=[[GREEN]]**Compétence [[YELLOW]]Lame Crantée [[GREEN]]activée**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Lame crantée !
+Skills.SkullSplitterOn=[[GREEN]]**Compétence [[YELLOW]]Fendeur de crânes [[GREEN]]activée**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Fendeur de crânes !
+Skills.GigaDrillBreakerOn=[[GREEN]]**Compétence [[YELLOW]]Super Broyeur [[GREEN]]activée**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilisé la compétence spéciale [[RED]]Super broyeur !
+Skills.GreenTerraOff=[[RED]]**Compétence [[YELLOW]]Main Verte [[GREEN]]terminée**
+Skills.TreeFellerOff=[[RED]]**Compétence [[YELLOW]]L'abatteur d'Arbres [[GREEN]]terminée**
+Skills.SuperBreakerOff=[[RED]]**Compétence [[YELLOW]]Super Breaker [[GREEN]]terminée**
+Skills.SerratedStrikesOff=[[RED]]**Compétence [[YELLOW]]Lame Crantée [[GREEN]]terminée**
+Skills.BerserkOff=[[RED]]**Berserk est fini**
+Skills.SkullSplitterOff=[[RED]]**Casseur de tete est fini**
+Skills.GigaDrillBreakerOff=[[RED]]**Super broyeur est fini**
+Skills.TamingUp=[[YELLOW]]La competence du dressage a augmenté de {0}. Total ({1})
+Skills.AcrobaticsUp=[[YELLOW]]La competence acrobatie a augmenté de {0}. Total ({1})
+Skills.ArcheryUp=[[YELLOW]]La competence tir a l'arc a augmenté de {0}. Total ({1})
+Skills.SwordsUp=[[YELLOW]]La competence épée a augmenté de {0}. Total ({1})
+Skills.AxesUp=[[YELLOW]]La competence hache a augmenté de {0}. Total ({1})
+Skills.UnarmedUp=[[YELLOW]]La compétence de combat à mains nues a augmenté de {0}. Total ({1})
+Skills.HerbalismUp=[[YELLOW]]La competence herboriste a augmenté de {0}. Total ({1})
+Skills.MiningUp=[[YELLOW]]La competence minage a augmenté de {0}. Total ({1})
+Skills.WoodcuttingUp=[[YELLOW]]La competence bucherônage a augmenté de {0}. Total ({1})
+Skills.RepairUp=[[YELLOW]]La competence réparation a augmenté de {0}. Total ({1})
+Skills.ExcavationUp=[[YELLOW]]La competence excavation a augmenté de {0}. Total ({1})
+Skills.FeltEasy=[[GRAY]]That felt easy.
+Skills.StackedItems=[[DARK_RED]]Vous ne pouvez pas réparer les objets empilés
+Skills.NeedMore=[[DARK_RED]]Vous devez en avoir plus
+Skills.AdeptDiamond=[[DARK_RED]]Vous n'avez pas encore le niveau nécessaire pour réparer du diamant
+Skills.FullDurability=[[GRAY]]Cet objet est déjà en bonne état.
+Skills.Disarmed=[[DARK_RED]]Vous avez été désarmé !
+mcPlayerListener.SorcerySkill=Sorcery: 
+m.SkillSorcery=SORCERY
+Sorcery.HasCast=[[GREEN]]**CASTING**[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]]MP
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} MP
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Out Of Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=THUNDER
+Sorcery.Curative.Self=CURE SELF
+Sorcery.Curative.Other=CURE OTHER
+m.LVL=NIVEAU [[GREEN]]{0} - [[DARK_AQUA]]XP : [[YELLOW]][[[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]]]
+Combat.BeastLore=[[GREEN]]**Connaissances des bêtes**
+Combat.BeastLoreOwner=[[DARK_AQUA]]Propriétaire ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Vie ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Vie ([[GREEN]]{0}[[DARK_AQUA]]/8)
+mcMMO.Description=[[DARK_AQUA]]Q: QU'EST-CE QUE C'EST ?,[[GOLD]]mcMMO est un plugin RPG [[RED]]OPEN SOURCE[[GOLD]] pour Bukkit créé par [[BLUE]]nossr50,[[GOLD]]mcMMO ajoute beaucoup de compétences dans Minecraft,[[GOLD]]Vous pouvez gagner de l'expérience de différentes façons,[[GOLD]]Vous devriez taper [[GREEN]]/NOM_COMPETENCE[[GOLD]] pour en savoir plus.,[[DARK_AQUA]]Q: QU'EST-CE QUE ÇA FAIT?,[[GOLD]]Par exemple... en [[DARK_AQUA]]Minant[[GOLD]] Vous allez recevoir des bénéfices comme,[[RED]]le Double Butin[[GOLD]] ou la compétence [[RED]]Super Breaker[[GOLD]] qui lorsqu'elle est,[[GOLD]]activée avec clique droit permet de miner vite, sa durée,[[GOLD]]dépend du niveau de votre compétence. Améliorer [[BLUE]]Le Minage,[[GOLD]]Est aussi simple que de mine des ressources précieuses !,[[DARK_AQUA]]Q: QU'EST-CE QUE ÇA VEUT DIRE ?,[[GOLD]]Presque toutes les compétences dans [[GREEN]]mcMMO[[GOLD]] Sont des nouveaux trucs cools!.,[[GOLD]]Tapez [[GREEN]]/{0}[[GOLD]] pour trouver les commandes,[[GOLD]]Le but de mcMMO est de créer une expérience RPG de qualité.,[[DARK_AQUA]]Q: OÙ JE PEUX SUGGÉRER DES IDÉES !?,[[DARK_AQUA]]bit.ly/MCmmoIDEA,[[DARK_AQUA]]Q: COMMENT JE FAIS CI ET ÇA?,[[RED]]MERCI [[GOLD]]d'aller voir le wiki ! [[DARK_AQUA]]mcmmo.wikia.com
+Party.Locked=[[RED]]Party is locked, only party leader may invite.
+Party.IsntLocked=[[GRAY]]Party is not locked
+Party.Unlocked=[[GRAY]]Party is unlocked
+Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
+Party.Help3=[[RED]]Consult /{0} ? for more information
+Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
+Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
+Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
+Party.NotOwner=[[DARK_RED]]You are not the party owner
+Party.InvalidName=[[DARK_RED]]That is not a valid party name
+Party.PasswordSet=[[GREEN]]Party password set to {0}
+Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
+Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
+Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
+Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
+Commands.xprate.proper3=[[RED]]Enter true or false for the second value
+Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
+Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
+Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
+Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
+Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
+Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 395 - 395
src/com/gmail/nossr50/locale/locale_nl.properties → src/main/java/com/gmail/nossr50/locale/locale_nl.properties

@@ -1,396 +1,396 @@
-# Dutch translation by Pluis65 v1.1
-# To use: Set locale to nl
-# DO NOT EDIT THIS FILE WITH NORMAL NOTEPAD, use Notepad++
-# Verander deze file alleen met Notepad++
-# Geef fouten door aan pluis65@hotmail.com
-# Last official edit: 8-7-2011
-Combat.WolfExamine=[[GREEN]]**Je bekijkt de wolf met Wolfinspectie**
-Combat.WolfShowMaster=[[DARK_GREEN]]Eigenaar van de wolf \: {0}
-Combat.Ignition=[[RED]]**IGNITION**
-Combat.BurningArrowHit=[[DARK_RED]]Je bent geraakt door een brandende pijl\!
-Combat.TouchedFuzzy=[[DARK_RED]]Je raakte Fuzzy aan. Je voelt je duizelig.
-Combat.TargetDazed=Doelwit was [[DARK_RED]]versuft
-Combat.WolfNoMaster=[[GRAY]]Deze wolf heeft geen eigenaar...
-Combat.WolfHealth=[[GREEN]]Deze wolf heeft {0} levens 
-Combat.StruckByGore=[[RED]]**VAST DOOR GESTOLD BLOED**
-Combat.Gore=[[GREEN]]**GESTOLD BLOED**
-Combat.ArrowDeflect=[[WHITE]]**PIJL AFWIJKING**
-Item.ChimaeraWingFail=**CHIMAERA WING MISLUKT\!**
-Item.ChimaeraWingPass=**CHIMAERA WING**
-Item.InjuredWait=Je bent gewond en moet wachten. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]Je hebt meer veren nodig..
-m.mccPartyCommands=[[GREEN]]--PARTY COMMANDOS--
-m.mccParty=[party name] [[RED]]- Maak/Join getypte party
-m.mccPartyQ=[[RED]]- Verlaat je huidige party
-m.mccPartyToggle=[[RED]] - Doe party chat aan/uit
-m.mccPartyInvite=[player name] [[RED]]- Stuur een uitnodiging voor je party
-m.mccPartyAccept=[[RED]]- Accepteer party uitnodiging
-m.mccPartyTeleport=[party member name] [[RED]]- Teleporteer naar je party medelid
-m.mccOtherCommands=[[GREEN]]--ANDERE COMMANDOS--
-m.mccStats=- Laat je levels zien
-m.mccLeaderboards=- Topscores
-m.mccMySpawn=- Teleporteer naar MySpawn
-m.mccClearMySpawn=- Verwijder je MySpawn
-m.mccToggleAbility=- Doe ability activatie aan/uit
-m.mccAdminToggle=- Doe admin chat aan/uit
-m.mccWhois=[playername] [[RED]]- Laat informatie zien over speler
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Verander levels
-m.mccMcGod=- God Modus
-m.mccSkillInfo=[skillname] [[RED]]- Laat informatie zien over een skill
-m.mccModDescription=[[RED]]- Lees MOD beschrijving
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]XP: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFFECTEN
-m.YourStats=JOUW STATUS
-m.SkillTaming=TEMMEN
-m.XPGainTaming=Wolven krijgen schade
-m.EffectsTaming1_0=Wolfinspectie
-m.EffectsTaming1_1=Bone-meal inspecteert wolven
-m.EffectsTaming2_0=Gestold bloed
-m.EffectsTaming2_1=Critical Strike zorgt voor bloedingen
-m.EffectsTaming3_0=Scherpere klauwen
-m.EffectsTaming3_1=Geeft meer schade
-m.EffectsTaming4_0=Mileukennis
-m.EffectsTaming4_1=Geen cactus/lava schade, geen falldamage
-m.EffectsTaming5_0=Dikke huis
-m.EffectsTaming5_1=Minder schade, kan tegen vuur
-m.EffectsTaming6_0=Explosieschild
-m.EffectsTaming6_1=Minder explosie schade
-m.AbilLockTaming1=GEBLOKEERD TOT 100+ SKILL (MILIEUKENNIS)
-m.AbilLockTaming2=GEBLOKEERD TOT 250+ SKILL (DIKKE HUIS)
-m.AbilLockTaming3=GEBLOKEERD TOT 500+ SKILL (EXPLOSIESCHILD)
-m.AbilLockTaming4=GEBLOKEERD TOT 750+ SKILL (SCHERPERE KLAUWEN)
-m.AbilBonusTaming1_0=Milieukennis
-m.AbilBonusTaming1_1=Wolven ontwijken gevaar (cactus, lava)
-m.AbilBonusTaming2_0=Dikkere huid
-m.AbilBonusTaming2_1=Halve schade, kan tegen vuur
-m.AbilBonusTaming3_0=Explosieschild
-m.AbilBonusTaming3_1=Explosies geven 1/6 van de normale schade
-m.AbilBonusTaming4_0=Scherpere klauwen
-m.AbilBonusTaming4_1=+2 Schade
-m.TamingGoreChance=[[RED]]Kans op gestold bloed: [[YELLOW]]{0}%
-m.SkillWoodCutting=HOUTHAKKEN
-m.XPGainWoodCutting=Bomen omhakken
-m.EffectsWoodCutting1_0=Tree Feller (ABILITY)
-m.EffectsWoodCutting1_1=Laat bomen deels exploderen
-m.EffectsWoodCutting2_0=Leaf Blower
-m.EffectsWoodCutting2_1=Laat leaves verdwijnen
-m.EffectsWoodCutting3_0=Dubbele Drop
-m.EffectsWoodCutting3_1=Geeft een dubbele drop
-m.AbilLockWoodCutting1=GEBLOKEERD TOT 100+ SKILL (LEAF BLOWER)
-m.AbilBonusWoodCutting1_0=Leaf Blower
-m.AbilBonusWoodCutting1_1=Laat leaves verdwijnen
-m.WoodCuttingDoubleDropChance=[[RED]]Dubbele Drop kans: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Tree Feller lengte: [[YELLOW]]{0}s
-m.SkillArchery=BOOGSCHIETEN
-m.XPGainArchery=Schiet op vijanden
-m.EffectsArchery1_0=Brandende pijl
-m.EffectsArchery1_1=25% kans dat een vijand verbrand
-m.EffectsArchery2_0=Verdoof (Players)
-m.EffectsArchery2_1=Gedesorienteerde vijanden
-m.EffectsArchery3_0=Schade+
-m.EffectsArchery3_1=Verhoogt schade
-m.EffectsArchery4_0=Pijlen terugkrijgen
-m.EffectsArchery4_1=Kans dat dode vijanden pijlen droppen
-m.ArcheryDazeChance=[[RED]]Kans op verdoving: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Kans om pijlen terug te krijgen: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Lengte van Brandende pijl: [[YELLOW]]{0} seconds
-m.ArcheryDamagePlus=[[RED]]Schade+ (Rank{0}): [[YELLOW]]Bonus {0} schade
-m.SkillAxes=BIJLEN
-m.XPGainAxes=Val monsters aan met een bijl
-m.EffectsAxes1_0=Schedelsplijter (ABILITY)
-m.EffectsAxes1_1=Geef schade rond om je heen
-m.EffectsAxes2_0=Critical Strikes
-m.EffectsAxes2_1=Dubbele schade
-m.EffectsAxes3_0=Bijl Master (500 SKILL)
-m.EffectsAxes3_1=Verhoogt schade
-m.AbilLockAxes1=GEBLOKEERD TOT 500+ SKILL (BIJL MASTER)
-m.AbilBonusAxes1_0=Bijl Master
-m.AbilBonusAxes1_1=4 schade extra
-m.AxesCritChance=[[RED]]Kans op Critical Strikes: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Schedelsplijter lengte: [[YELLOW]]{0}s
-m.SkillSwords=ZWAARDEN
-m.XPGainSwords=Val monsters aan met een zwaard
-m.EffectsSwords1_0=Terugkaats Aanval
-m.EffectsSwords1_1=Kaats 50% van de schade terug
-m.EffectsSwords2_0=Serrated Strikes (ABILITY)
-m.EffectsSwords2_1=25% meer schade, kans op Bloeding+ om je heen
-m.EffectsSwords3_0=Serrated Strikes Bloeding+
-m.EffectsSwords3_1=Kans op extra bloeding bij vijanden
-m.EffectsSwords4_0=Pareren
-m.EffectsSwords4_1=Blokkeer vijandelijke aanval
-m.EffectsSwords5_0=5 Tikken van Bloeding
-m.EffectsSwords5_1=Laat anderen bloeden
-m.SwordsCounterAttChance=[[RED]]Kans op Terugkeer Aanval: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Bloeding lengte: [[YELLOW]]{0} ticks
-m.SwordsBleedChance=[[RED]]Kans op Bloeding: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Kans op Pareren: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Serrated Strikes lengte: [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]NOTE: [[YELLOW]]1 tik per 2 seconden
-m.SkillAcrobatics=ACROBATIEK
-m.XPGainAcrobatics=Vallen
-m.EffectsAcrobatics1_0=Rollen
-m.EffectsAcrobatics1_1=Verminderd of voorkomt schade
-m.EffectsAcrobatics2_0=Perfecte Rol
-m.EffectsAcrobatics2_1=Twee keer zo effectief als Rollen
-m.EffectsAcrobatics3_0=Ontwijken
-m.EffectsAcrobatics3_1=50% minder schade
-m.AcrobaticsRollChance=[[RED]]Kans om te rollen: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Kans op Perfecte Rol: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Kans om te ontwijken: [[YELLOW]]{0}%
-m.SkillMining=MIJNBOUW
-m.XPGainMining=Hak steen & erts met een pickaxe
-m.EffectsMining1_0=Super Breeker (ABILITY)
-m.EffectsMining1_1=Hogere snelheid, Kans op 3x drop
-m.EffectsMining2_0=Dubbele Drops
-m.EffectsMining2_1=Dubbele van normale drop
-m.MiningDoubleDropChance=[[RED]]Kans op Dubbele Drop: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Super Breeker lengte: [[YELLOW]]{0}s
-m.SkillRepair=REPAREREN
-m.XPGainRepair=Repareer tools en armor
-m.EffectsRepair1_0=Repareer
-m.EffectsRepair1_1=Repareer Iron Tools & Armor
-m.EffectsRepair2_0=Repareer Master
-m.EffectsRepair2_1=Vergroot de reparatiehoeveelheid
-m.EffectsRepair3_0=Super Repareren
-m.EffectsRepair3_1=Dubbel effectief
-m.EffectsRepair4_0=Diamond Repareren ({0}+ SKILL)
-m.EffectsRepair4_1=Repareer Diamond Tools & Armor
-m.RepairRepairMastery=[[RED]]Repareer Master: [[YELLOW]]Extra {0}% durability restored
-m.RepairSuperRepairChance=[[RED]]Kans op Super Repareren: [[YELLOW]]{0}%
-m.SkillUnarmed=ONBEWAPEND
-m.XPGainUnarmed=Val monsters aan met hand
-m.EffectsUnarmed1_0=Onbewapende gek (ABILITY)
-m.EffectsUnarmed1_1=+50% schade, hak zachte materialen weg
-m.EffectsUnarmed2_0=Ontwapen (Players)
-m.EffectsUnarmed2_1=Dropt het wapen van de vijand
-m.EffectsUnarmed3_0=Onbewapende held
-m.EffectsUnarmed3_1=Nog meer schade
-m.EffectsUnarmed4_0=Onbewapende leerling
-m.EffectsUnarmed4_1=Meer schade
-m.EffectsUnarmed5_0=Pijlafwijking
-m.EffectsUnarmed5_1=Laat pijlen afwijken
-m.AbilLockUnarmed1=GEBLOKEERD TOT 250+ SKILL (Onbewapende leerling)
-m.AbilLockUnarmed2=GEBLOKEERD TOT 500+ SKILL (Onbewapende held)
-m.AbilBonusUnarmed1_0=Onbewapende leerling
-m.AbilBonusUnarmed1_1=+2 meer schade
-m.AbilBonusUnarmed2_0=Onbewapende held
-m.AbilBonusUnarmed2_1=+4 meer schade
-m.UnarmedArrowDeflectChance=[[RED]]Kans op Pijlafwijking: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Kans op Ontwapening: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Lengte van Onbewapende gek: [[YELLOW]]{0}s
-m.SkillHerbalism=LANDBOUW
-m.XPGainHerbalism=Verzamel kruiden en planten
-m.EffectsHerbalism1_0=Groene Aarde (ABILITY)
-m.EffectsHerbalism1_1=3x meer XP en kans op 3x drop
-m.EffectsHerbalism2_0=Groene vingers (Wheat)
-m.EffectsHerbalism2_1=Plant wheat bij het oogsten
-m.EffectsHerbalism3_0=Groene vingers (Cobble)
-m.EffectsHerbalism3_1=Maakt van cobblestone moss-stone met seeds
-m.EffectsHerbalism4_0=Voedsel+
-m.EffectsHerbalism4_1=Verhoogt de heling van brood en stews
-m.EffectsHerbalism5_0=Dubbele Drop (Alle planten)
-m.EffectsHerbalism5_1=Dubbele drop van planten
-m.HerbalismGreenTerraLength=[[RED]]Groene Aarde lengte: [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Kans op Groene vingers: [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Groene vingers periode: [[YELLOW]] Wheat groeit in periode {0}
-m.HerbalismDoubleDropChance=[[RED]]Kans op Dubbele Drop: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Voedsel+ (Rank{0}): [[YELLOW]]Bonus {0} heling
-m.SkillExcavation=UITGRAVING
-m.XPGainExcavation=Graven
-m.EffectsExcavation1_0=Giga Drilboor (ABILITY)
-m.EffectsExcavation1_1=3x drop, 3x XP, hogere snelheid
-m.EffectsExcavation2_0=Schatzoeker
-m.EffectsExcavation2_1=Mogelijkheid om schatten te zoeken
-m.ExcavationGreenTerraLength=[[RED]]Giga Drilboor lengte: [[YELLOW]]{0}s
-mcBlockListener.PlacedAnvil=[[DARK_RED]]Je hebt een aambeeld geplaatst. Hierop kun je tools en armor repareren.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Je wolf dribbelt terug naar je...
-mcPlayerListener.AbilitiesOff=Ability activatie is uit
-mcPlayerListener.AbilitiesOn=Ability activatie is aan
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**ABILITIES HERLADEN\!**
-mcPlayerListener.AcrobaticsSkill=Acrobatiek: 
-mcPlayerListener.ArcherySkill=Boogschieten:
-mcPlayerListener.AxesSkill=Bijlen: 
-mcPlayerListener.ExcavationSkill=Uitgraving: 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]Godmodus uitgeschakeld
-mcPlayerListener.GodModeEnabled=[[YELLOW]]Godmodus ingeschakeld
-mcPlayerListener.GreenThumb=[[GREEN]]**GROENE VINGERS**
-mcPlayerListener.GreenThumbFail=[[RED]]**GROENE VINNGERS MISLUKT**
-mcPlayerListener.HerbalismSkill=Landbouw: 
-mcPlayerListener.MiningSkill=Mijnbouw: 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn is verwijderd.
-mcPlayerListener.MyspawnNotExist=[[RED]]Plaats Myspawn eerst door op een bed te drukken.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn is geplaatst op je huidige locatie.
-mcPlayerListener.MyspawnTimeNotice=Je moet {0}m {1}s wachten voordat je myspawn kan gebruiken.
-mcPlayerListener.NoPermission=Je hebt geen permissie.
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Als je geen toegang hebt tot een skill wordt hij hier niet weergegeven.
-mcPlayerListener.NotInParty=[[RED]]Je zit niet in een party.
-mcPlayerListener.InviteSuccess=[[GREEN]]Uitnodiging succesvol verzonden.
-mcPlayerListener.ReceivedInvite1=[[RED]]BERICHT: [[GREEN]]Je bent uitgenodigd voor de party {0} door {1}
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] om de uitnodiging te accepteren.
-mcPlayerListener.InviteAccepted=[[GREEN]]Uitnodiging geaccepteerd. Je bent nu lid van {0}
-mcPlayerListener.NoInvites=[[RED]]Je hebt geen uitnodigingen
-mcPlayerListener.YouAreInParty=[[GREEN]]Je zit in de party {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Party Leden
-mcPlayerListener.LeftParty=[[RED]]Je hebt de party verlaten
-mcPlayerListener.JoinedParty=Lid geworden van: {0}
-mcPlayerListener.PartyChatOn=Alleen Party Chat [[GREEN]]aan
-mcPlayerListener.PartyChatOff=Alleen Party Chat [[RED]]uit
-mcPlayerListener.AdminChatOn=Alleen Admin Chat [[GREEN]]aan
-mcPlayerListener.AdminChatOff=Alleen Admin Chat [[RED]]uit
-mcPlayerListener.MOTD=[[BLUE]]Deze server werkt op mcMMO {0} type [[YELLOW]]/{1}[[BLUE]] voor hulp.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
-mcPlayerListener.PowerLevel=[[DARK_RED]]POWER LEVEL: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Highscore--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Highscore--
-mcPlayerListener.RepairSkill=Repareren: 
-mcPlayerListener.SwordsSkill=Zwaarden: 
-mcPlayerListener.TamingSkill=Temmen: 
-mcPlayerListener.UnarmedSkill=Onbewapend: 
-mcPlayerListener.WoodcuttingSkill=Houthakken: 
-mcPlayerListener.YourStats=[[GREEN]][mcMMO] Status
-Party.InformedOnJoin={0} [[GREEN]] heeft je party gejoined
-Party.InformedOnQuit={0} [[GREEN]] heeft je party verlaten
-Skills.YourGreenTerra=[[GREEN]]Je [[YELLOW]]Groene Aarde [[GREEN]]ability is opgeladen!
-Skills.YourTreeFeller=[[GREEN]]Je [[YELLOW]]Tree Feller [[GREEN]]ability is opgeladen!
-Skills.YourSuperBreaker=[[GREEN]]Je [[YELLOW]]Super Breeker [[GREEN]]ability is opgeladen!
-Skills.YourSerratedStrikes=[[GREEN]]Je [[YELLOW]]Serrated Strikes [[GREEN]]ability is opgeladen!
-Skills.YourBerserk=[[GREEN]]Je [[YELLOW]]Onbewapende gek [[GREEN]]ability is opgeladen!
-Skills.YourSkullSplitter=[[GREEN]]Je [[YELLOW]]Schedelsplijter [[GREEN]]ability is opgeladen!
-Skills.YourGigaDrillBreaker=[[GREEN]]Je [[YELLOW]]Giga Drilboor [[GREEN]]ability is opgeladen!
-Skills.TooTired=[[RED]]Je bent te moe om die ability te gebruiken.
-Skills.ReadyHoe=[[GREEN]]**JE TILT JE SCHOFFEL OP**
-Skills.LowerHoe=[[GRAY]]**JE LAAT JE SCHOFFEL ZAKKEN**
-Skills.ReadyAxe=[[GREEN]]**JE TILT JE BIJL OP**
-Skills.LowerAxe=[[GRAY]]**JE LAAT JE BIJL ZAKKEN**
-Skills.ReadyFists=[[GREEN]]**JE BALT JE VUISTEN**
-Skills.LowerFists=[[GRAY]]**JE LAAT JE VUISTEN ZAKKEN**
-Skills.ReadyPickAxe=[[GREEN]]**JE TILT JE PICKAXE OP**
-Skills.LowerPickAxe=[[GRAY]]**JE LAAT JE PICKAXE ZAKKEN**
-Skills.ReadyShovel=[[GREEN]]**JE TILT JE SCHEP OP**
-Skills.LowerShovel=[[GRAY]]**JE LAAT JE SCHEP ZAKKEN**
-Skills.ReadySword=[[GREEN]]**JE TILT JE ZWAARD OP**
-Skills.LowerSword=[[GRAY]]**JE LAAT JE ZWAARD ZAKKEN**
-Skills.BerserkOn=[[GREEN]]**ONBEWAPENDE GEK GEACTIVEERD**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Onbewapende gek!
-Skills.GreenTerraOn=[[GREEN]]**GROENE AARDE GEACTIVEERD**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Groene Aarde!
-Skills.TreeFellerOn=[[GREEN]]**TREE FELLER GEACTIVEERD**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Tree Feller!
-Skills.SuperBreakerOn=[[GREEN]]**SUPER BREEKER GEACTIVEERD**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Super Breeker!
-Skills.SerratedStrikesOn=[[GREEN]]**SERRATED STRIKES GEACTIVEERD**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Serrated Strikes!
-Skills.SkullSplitterOn=[[GREEN]]**SCHEDELSPLIJTER GEACTIVEERD**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Schedelsplijter!
-Skills.GigaDrillBreakerOn=[[GREEN]]**GIGA DRILBOOR GEACTIVEERD**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Giga Drilboor!
-Skills.GreenTerraOff=[[RED]]**Groene Aarde is uitgewerkt**
-Skills.TreeFellerOff=[[RED]]**Tree Feller is uitgewerkt**
-Skills.SuperBreakerOff=[[RED]]**Super Breeker is uitgewerkt**
-Skills.SerratedStrikesOff=[[RED]]**Serrated Strikes is uitgewerkt**
-Skills.BerserkOff=[[RED]]**Onbewapende gek is uitgewerkt**
-Skills.SkullSplitterOff=[[RED]]**Schedelsplijter is uitgewerkt**
-Skills.GigaDrillBreakerOff=[[RED]]**Giga Drilboor is uitgewerkt**
-Skills.TamingUp=[[YELLOW]]Temmen skill verhoogt met {0}. Totaal ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Acrobatics skill verhoogt met {0}. Total ({1})
-Skills.ArcheryUp=[[YELLOW]]Boogschieten skill verhoogt met {0}. Totaal ({1})
-Skills.SwordsUp=[[YELLOW]]Zwaarden skill verhoogt met {0}. Totaal ({1})
-Skills.AxesUp=[[YELLOW]]Bijlen skill verhoogt met {0}. Totaal ({1})
-Skills.UnarmedUp=[[YELLOW]]Onbewapend skill verhoogt met {0}. Totaal ({1})
-Skills.HerbalismUp=[[YELLOW]]Landbouw skill verhoogt met {0}. Totaal ({1})
-Skills.MiningUp=[[YELLOW]]Mijnbouw skill verhoogt met {0}. Totaal ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Houthakken skill verhoogt met {0}. Totaal ({1})
-Skills.RepairUp=[[YELLOW]]Repareren skill verhoogt met {0}. Totaal ({1})
-Skills.ExcavationUp=[[YELLOW]]Uitgraven skill verhoogt met {0}. Totaal ({1})
-Skills.FeltEasy=[[GRAY]]Dat was makkelijk.
-Skills.StackedItems=[[DARK_RED]]Je kan geen gestackte items repareren
-Skills.NeedMore=[[DARK_RED]]Je hebt te weinig
-Skills.AdeptDiamond=[[DARK_RED]]Je bent niet goed genoeg om diamond te repareren.
-Skills.FullDurability=[[GRAY]]Dat is nog helemaal heel.
-Skills.Disarmed=[[DARK_RED]]Je bent ontwapend!
-mcPlayerListener.SorcerySkill=Tovenarij: 
-m.SkillSorcery=TOVERNARIJ
-Sorcery.HasCast=[[GREEN]]**UITROEPEN VAN**[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]]MP
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} MP
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Geen Mana meer [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=DONDER
-Sorcery.Curative.Self=HEEL JEZELF
-Sorcery.Curative.Other=HEEL EEN ANDER
-m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
-Combat.BeastLore=[[GREEN]]**WOLFINSPECTIE**
-Combat.BeastLoreOwner=[[DARK_AQUA]]Eigenaar ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Levens ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Levens ([[GREEN]]{0}[[DARK_AQUA]]/8)
-mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
-Party.Locked=[[RED]]Party is locked, only party leader may invite.
-Party.IsntLocked=[[GRAY]]Party is not locked
-Party.Unlocked=[[GRAY]]Party is unlocked
-Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
-Party.Help3=[[RED]]Consult /{0} ? for more information
-Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
-Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
-Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
-Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
-Party.NotOwner=[[DARK_RED]]You are not the party owner
-Party.InvalidName=[[DARK_RED]]That is not a valid party name
-Party.PasswordSet=[[GREEN]]Party password set to {0}
-Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
-Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
-Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
-Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
-Commands.xprate.proper3=[[RED]]Enter true or false for the second value
-Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
-Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
-Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
-Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
-Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
-Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+# Dutch translation by Pluis65 v1.1
+# To use: Set locale to nl
+# DO NOT EDIT THIS FILE WITH NORMAL NOTEPAD, use Notepad++
+# Verander deze file alleen met Notepad++
+# Geef fouten door aan pluis65@hotmail.com
+# Last official edit: 8-7-2011
+Combat.WolfExamine=[[GREEN]]**Je bekijkt de wolf met Wolfinspectie**
+Combat.WolfShowMaster=[[DARK_GREEN]]Eigenaar van de wolf \: {0}
+Combat.Ignition=[[RED]]**IGNITION**
+Combat.BurningArrowHit=[[DARK_RED]]Je bent geraakt door een brandende pijl\!
+Combat.TouchedFuzzy=[[DARK_RED]]Je raakte Fuzzy aan. Je voelt je duizelig.
+Combat.TargetDazed=Doelwit was [[DARK_RED]]versuft
+Combat.WolfNoMaster=[[GRAY]]Deze wolf heeft geen eigenaar...
+Combat.WolfHealth=[[GREEN]]Deze wolf heeft {0} levens 
+Combat.StruckByGore=[[RED]]**VAST DOOR GESTOLD BLOED**
+Combat.Gore=[[GREEN]]**GESTOLD BLOED**
+Combat.ArrowDeflect=[[WHITE]]**PIJL AFWIJKING**
+Item.ChimaeraWingFail=**CHIMAERA WING MISLUKT\!**
+Item.ChimaeraWingPass=**CHIMAERA WING**
+Item.InjuredWait=Je bent gewond en moet wachten. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]Je hebt meer veren nodig..
+m.mccPartyCommands=[[GREEN]]--PARTY COMMANDOS--
+m.mccParty=[party name] [[RED]]- Maak/Join getypte party
+m.mccPartyQ=[[RED]]- Verlaat je huidige party
+m.mccPartyToggle=[[RED]] - Doe party chat aan/uit
+m.mccPartyInvite=[player name] [[RED]]- Stuur een uitnodiging voor je party
+m.mccPartyAccept=[[RED]]- Accepteer party uitnodiging
+m.mccPartyTeleport=[party member name] [[RED]]- Teleporteer naar je party medelid
+m.mccOtherCommands=[[GREEN]]--ANDERE COMMANDOS--
+m.mccStats=- Laat je levels zien
+m.mccLeaderboards=- Topscores
+m.mccMySpawn=- Teleporteer naar MySpawn
+m.mccClearMySpawn=- Verwijder je MySpawn
+m.mccToggleAbility=- Doe ability activatie aan/uit
+m.mccAdminToggle=- Doe admin chat aan/uit
+m.mccWhois=[playername] [[RED]]- Laat informatie zien over speler
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Verander levels
+m.mccMcGod=- God Modus
+m.mccSkillInfo=[skillname] [[RED]]- Laat informatie zien over een skill
+m.mccModDescription=[[RED]]- Lees MOD beschrijving
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]XP: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFFECTEN
+m.YourStats=JOUW STATUS
+m.SkillTaming=TEMMEN
+m.XPGainTaming=Wolven krijgen schade
+m.EffectsTaming1_0=Wolfinspectie
+m.EffectsTaming1_1=Bone-meal inspecteert wolven
+m.EffectsTaming2_0=Gestold bloed
+m.EffectsTaming2_1=Critical Strike zorgt voor bloedingen
+m.EffectsTaming3_0=Scherpere klauwen
+m.EffectsTaming3_1=Geeft meer schade
+m.EffectsTaming4_0=Mileukennis
+m.EffectsTaming4_1=Geen cactus/lava schade, geen falldamage
+m.EffectsTaming5_0=Dikke huis
+m.EffectsTaming5_1=Minder schade, kan tegen vuur
+m.EffectsTaming6_0=Explosieschild
+m.EffectsTaming6_1=Minder explosie schade
+m.AbilLockTaming1=GEBLOKEERD TOT 100+ SKILL (MILIEUKENNIS)
+m.AbilLockTaming2=GEBLOKEERD TOT 250+ SKILL (DIKKE HUIS)
+m.AbilLockTaming3=GEBLOKEERD TOT 500+ SKILL (EXPLOSIESCHILD)
+m.AbilLockTaming4=GEBLOKEERD TOT 750+ SKILL (SCHERPERE KLAUWEN)
+m.AbilBonusTaming1_0=Milieukennis
+m.AbilBonusTaming1_1=Wolven ontwijken gevaar (cactus, lava)
+m.AbilBonusTaming2_0=Dikkere huid
+m.AbilBonusTaming2_1=Halve schade, kan tegen vuur
+m.AbilBonusTaming3_0=Explosieschild
+m.AbilBonusTaming3_1=Explosies geven 1/6 van de normale schade
+m.AbilBonusTaming4_0=Scherpere klauwen
+m.AbilBonusTaming4_1=+2 Schade
+m.TamingGoreChance=[[RED]]Kans op gestold bloed: [[YELLOW]]{0}%
+m.SkillWoodCutting=HOUTHAKKEN
+m.XPGainWoodCutting=Bomen omhakken
+m.EffectsWoodCutting1_0=Tree Feller (ABILITY)
+m.EffectsWoodCutting1_1=Laat bomen deels exploderen
+m.EffectsWoodCutting2_0=Leaf Blower
+m.EffectsWoodCutting2_1=Laat leaves verdwijnen
+m.EffectsWoodCutting3_0=Dubbele Drop
+m.EffectsWoodCutting3_1=Geeft een dubbele drop
+m.AbilLockWoodCutting1=GEBLOKEERD TOT 100+ SKILL (LEAF BLOWER)
+m.AbilBonusWoodCutting1_0=Leaf Blower
+m.AbilBonusWoodCutting1_1=Laat leaves verdwijnen
+m.WoodCuttingDoubleDropChance=[[RED]]Dubbele Drop kans: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Tree Feller lengte: [[YELLOW]]{0}s
+m.SkillArchery=BOOGSCHIETEN
+m.XPGainArchery=Schiet op vijanden
+m.EffectsArchery1_0=Brandende pijl
+m.EffectsArchery1_1=25% kans dat een vijand verbrand
+m.EffectsArchery2_0=Verdoof (Players)
+m.EffectsArchery2_1=Gedesorienteerde vijanden
+m.EffectsArchery3_0=Schade+
+m.EffectsArchery3_1=Verhoogt schade
+m.EffectsArchery4_0=Pijlen terugkrijgen
+m.EffectsArchery4_1=Kans dat dode vijanden pijlen droppen
+m.ArcheryDazeChance=[[RED]]Kans op verdoving: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Kans om pijlen terug te krijgen: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Lengte van Brandende pijl: [[YELLOW]]{0} seconds
+m.ArcheryDamagePlus=[[RED]]Schade+ (Rank{0}): [[YELLOW]]Bonus {0} schade
+m.SkillAxes=BIJLEN
+m.XPGainAxes=Val monsters aan met een bijl
+m.EffectsAxes1_0=Schedelsplijter (ABILITY)
+m.EffectsAxes1_1=Geef schade rond om je heen
+m.EffectsAxes2_0=Critical Strikes
+m.EffectsAxes2_1=Dubbele schade
+m.EffectsAxes3_0=Bijl Master (500 SKILL)
+m.EffectsAxes3_1=Verhoogt schade
+m.AbilLockAxes1=GEBLOKEERD TOT 500+ SKILL (BIJL MASTER)
+m.AbilBonusAxes1_0=Bijl Master
+m.AbilBonusAxes1_1=4 schade extra
+m.AxesCritChance=[[RED]]Kans op Critical Strikes: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Schedelsplijter lengte: [[YELLOW]]{0}s
+m.SkillSwords=ZWAARDEN
+m.XPGainSwords=Val monsters aan met een zwaard
+m.EffectsSwords1_0=Terugkaats Aanval
+m.EffectsSwords1_1=Kaats 50% van de schade terug
+m.EffectsSwords2_0=Serrated Strikes (ABILITY)
+m.EffectsSwords2_1=25% meer schade, kans op Bloeding+ om je heen
+m.EffectsSwords3_0=Serrated Strikes Bloeding+
+m.EffectsSwords3_1=Kans op extra bloeding bij vijanden
+m.EffectsSwords4_0=Pareren
+m.EffectsSwords4_1=Blokkeer vijandelijke aanval
+m.EffectsSwords5_0=5 Tikken van Bloeding
+m.EffectsSwords5_1=Laat anderen bloeden
+m.SwordsCounterAttChance=[[RED]]Kans op Terugkeer Aanval: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Bloeding lengte: [[YELLOW]]{0} ticks
+m.SwordsBleedChance=[[RED]]Kans op Bloeding: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Kans op Pareren: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Serrated Strikes lengte: [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]NOTE: [[YELLOW]]1 tik per 2 seconden
+m.SkillAcrobatics=ACROBATIEK
+m.XPGainAcrobatics=Vallen
+m.EffectsAcrobatics1_0=Rollen
+m.EffectsAcrobatics1_1=Verminderd of voorkomt schade
+m.EffectsAcrobatics2_0=Perfecte Rol
+m.EffectsAcrobatics2_1=Twee keer zo effectief als Rollen
+m.EffectsAcrobatics3_0=Ontwijken
+m.EffectsAcrobatics3_1=50% minder schade
+m.AcrobaticsRollChance=[[RED]]Kans om te rollen: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Kans op Perfecte Rol: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Kans om te ontwijken: [[YELLOW]]{0}%
+m.SkillMining=MIJNBOUW
+m.XPGainMining=Hak steen & erts met een pickaxe
+m.EffectsMining1_0=Super Breeker (ABILITY)
+m.EffectsMining1_1=Hogere snelheid, Kans op 3x drop
+m.EffectsMining2_0=Dubbele Drops
+m.EffectsMining2_1=Dubbele van normale drop
+m.MiningDoubleDropChance=[[RED]]Kans op Dubbele Drop: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Super Breeker lengte: [[YELLOW]]{0}s
+m.SkillRepair=REPAREREN
+m.XPGainRepair=Repareer tools en armor
+m.EffectsRepair1_0=Repareer
+m.EffectsRepair1_1=Repareer Iron Tools & Armor
+m.EffectsRepair2_0=Repareer Master
+m.EffectsRepair2_1=Vergroot de reparatiehoeveelheid
+m.EffectsRepair3_0=Super Repareren
+m.EffectsRepair3_1=Dubbel effectief
+m.EffectsRepair4_0=Diamond Repareren ({0}+ SKILL)
+m.EffectsRepair4_1=Repareer Diamond Tools & Armor
+m.RepairRepairMastery=[[RED]]Repareer Master: [[YELLOW]]Extra {0}% durability restored
+m.RepairSuperRepairChance=[[RED]]Kans op Super Repareren: [[YELLOW]]{0}%
+m.SkillUnarmed=ONBEWAPEND
+m.XPGainUnarmed=Val monsters aan met hand
+m.EffectsUnarmed1_0=Onbewapende gek (ABILITY)
+m.EffectsUnarmed1_1=+50% schade, hak zachte materialen weg
+m.EffectsUnarmed2_0=Ontwapen (Players)
+m.EffectsUnarmed2_1=Dropt het wapen van de vijand
+m.EffectsUnarmed3_0=Onbewapende held
+m.EffectsUnarmed3_1=Nog meer schade
+m.EffectsUnarmed4_0=Onbewapende leerling
+m.EffectsUnarmed4_1=Meer schade
+m.EffectsUnarmed5_0=Pijlafwijking
+m.EffectsUnarmed5_1=Laat pijlen afwijken
+m.AbilLockUnarmed1=GEBLOKEERD TOT 250+ SKILL (Onbewapende leerling)
+m.AbilLockUnarmed2=GEBLOKEERD TOT 500+ SKILL (Onbewapende held)
+m.AbilBonusUnarmed1_0=Onbewapende leerling
+m.AbilBonusUnarmed1_1=+2 meer schade
+m.AbilBonusUnarmed2_0=Onbewapende held
+m.AbilBonusUnarmed2_1=+4 meer schade
+m.UnarmedArrowDeflectChance=[[RED]]Kans op Pijlafwijking: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Kans op Ontwapening: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Lengte van Onbewapende gek: [[YELLOW]]{0}s
+m.SkillHerbalism=LANDBOUW
+m.XPGainHerbalism=Verzamel kruiden en planten
+m.EffectsHerbalism1_0=Groene Aarde (ABILITY)
+m.EffectsHerbalism1_1=3x meer XP en kans op 3x drop
+m.EffectsHerbalism2_0=Groene vingers (Wheat)
+m.EffectsHerbalism2_1=Plant wheat bij het oogsten
+m.EffectsHerbalism3_0=Groene vingers (Cobble)
+m.EffectsHerbalism3_1=Maakt van cobblestone moss-stone met seeds
+m.EffectsHerbalism4_0=Voedsel+
+m.EffectsHerbalism4_1=Verhoogt de heling van brood en stews
+m.EffectsHerbalism5_0=Dubbele Drop (Alle planten)
+m.EffectsHerbalism5_1=Dubbele drop van planten
+m.HerbalismGreenTerraLength=[[RED]]Groene Aarde lengte: [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Kans op Groene vingers: [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Groene vingers periode: [[YELLOW]] Wheat groeit in periode {0}
+m.HerbalismDoubleDropChance=[[RED]]Kans op Dubbele Drop: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Voedsel+ (Rank{0}): [[YELLOW]]Bonus {0} heling
+m.SkillExcavation=UITGRAVING
+m.XPGainExcavation=Graven
+m.EffectsExcavation1_0=Giga Drilboor (ABILITY)
+m.EffectsExcavation1_1=3x drop, 3x XP, hogere snelheid
+m.EffectsExcavation2_0=Schatzoeker
+m.EffectsExcavation2_1=Mogelijkheid om schatten te zoeken
+m.ExcavationGreenTerraLength=[[RED]]Giga Drilboor lengte: [[YELLOW]]{0}s
+mcBlockListener.PlacedAnvil=[[DARK_RED]]Je hebt een aambeeld geplaatst. Hierop kun je tools en armor repareren.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Je wolf dribbelt terug naar je...
+mcPlayerListener.AbilitiesOff=Ability activatie is uit
+mcPlayerListener.AbilitiesOn=Ability activatie is aan
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**ABILITIES HERLADEN\!**
+mcPlayerListener.AcrobaticsSkill=Acrobatiek: 
+mcPlayerListener.ArcherySkill=Boogschieten:
+mcPlayerListener.AxesSkill=Bijlen: 
+mcPlayerListener.ExcavationSkill=Uitgraving: 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]Godmodus uitgeschakeld
+mcPlayerListener.GodModeEnabled=[[YELLOW]]Godmodus ingeschakeld
+mcPlayerListener.GreenThumb=[[GREEN]]**GROENE VINGERS**
+mcPlayerListener.GreenThumbFail=[[RED]]**GROENE VINNGERS MISLUKT**
+mcPlayerListener.HerbalismSkill=Landbouw: 
+mcPlayerListener.MiningSkill=Mijnbouw: 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn is verwijderd.
+mcPlayerListener.MyspawnNotExist=[[RED]]Plaats Myspawn eerst door op een bed te drukken.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn is geplaatst op je huidige locatie.
+mcPlayerListener.MyspawnTimeNotice=Je moet {0}m {1}s wachten voordat je myspawn kan gebruiken.
+mcPlayerListener.NoPermission=Je hebt geen permissie.
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Als je geen toegang hebt tot een skill wordt hij hier niet weergegeven.
+mcPlayerListener.NotInParty=[[RED]]Je zit niet in een party.
+mcPlayerListener.InviteSuccess=[[GREEN]]Uitnodiging succesvol verzonden.
+mcPlayerListener.ReceivedInvite1=[[RED]]BERICHT: [[GREEN]]Je bent uitgenodigd voor de party {0} door {1}
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] om de uitnodiging te accepteren.
+mcPlayerListener.InviteAccepted=[[GREEN]]Uitnodiging geaccepteerd. Je bent nu lid van {0}
+mcPlayerListener.NoInvites=[[RED]]Je hebt geen uitnodigingen
+mcPlayerListener.YouAreInParty=[[GREEN]]Je zit in de party {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Party Leden
+mcPlayerListener.LeftParty=[[RED]]Je hebt de party verlaten
+mcPlayerListener.JoinedParty=Lid geworden van: {0}
+mcPlayerListener.PartyChatOn=Alleen Party Chat [[GREEN]]aan
+mcPlayerListener.PartyChatOff=Alleen Party Chat [[RED]]uit
+mcPlayerListener.AdminChatOn=Alleen Admin Chat [[GREEN]]aan
+mcPlayerListener.AdminChatOff=Alleen Admin Chat [[RED]]uit
+mcPlayerListener.MOTD=[[BLUE]]Deze server werkt op mcMMO {0} type [[YELLOW]]/{1}[[BLUE]] voor hulp.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
+mcPlayerListener.PowerLevel=[[DARK_RED]]POWER LEVEL: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Highscore--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Highscore--
+mcPlayerListener.RepairSkill=Repareren: 
+mcPlayerListener.SwordsSkill=Zwaarden: 
+mcPlayerListener.TamingSkill=Temmen: 
+mcPlayerListener.UnarmedSkill=Onbewapend: 
+mcPlayerListener.WoodcuttingSkill=Houthakken: 
+mcPlayerListener.YourStats=[[GREEN]][mcMMO] Status
+Party.InformedOnJoin={0} [[GREEN]] heeft je party gejoined
+Party.InformedOnQuit={0} [[GREEN]] heeft je party verlaten
+Skills.YourGreenTerra=[[GREEN]]Je [[YELLOW]]Groene Aarde [[GREEN]]ability is opgeladen!
+Skills.YourTreeFeller=[[GREEN]]Je [[YELLOW]]Tree Feller [[GREEN]]ability is opgeladen!
+Skills.YourSuperBreaker=[[GREEN]]Je [[YELLOW]]Super Breeker [[GREEN]]ability is opgeladen!
+Skills.YourSerratedStrikes=[[GREEN]]Je [[YELLOW]]Serrated Strikes [[GREEN]]ability is opgeladen!
+Skills.YourBerserk=[[GREEN]]Je [[YELLOW]]Onbewapende gek [[GREEN]]ability is opgeladen!
+Skills.YourSkullSplitter=[[GREEN]]Je [[YELLOW]]Schedelsplijter [[GREEN]]ability is opgeladen!
+Skills.YourGigaDrillBreaker=[[GREEN]]Je [[YELLOW]]Giga Drilboor [[GREEN]]ability is opgeladen!
+Skills.TooTired=[[RED]]Je bent te moe om die ability te gebruiken.
+Skills.ReadyHoe=[[GREEN]]**JE TILT JE SCHOFFEL OP**
+Skills.LowerHoe=[[GRAY]]**JE LAAT JE SCHOFFEL ZAKKEN**
+Skills.ReadyAxe=[[GREEN]]**JE TILT JE BIJL OP**
+Skills.LowerAxe=[[GRAY]]**JE LAAT JE BIJL ZAKKEN**
+Skills.ReadyFists=[[GREEN]]**JE BALT JE VUISTEN**
+Skills.LowerFists=[[GRAY]]**JE LAAT JE VUISTEN ZAKKEN**
+Skills.ReadyPickAxe=[[GREEN]]**JE TILT JE PICKAXE OP**
+Skills.LowerPickAxe=[[GRAY]]**JE LAAT JE PICKAXE ZAKKEN**
+Skills.ReadyShovel=[[GREEN]]**JE TILT JE SCHEP OP**
+Skills.LowerShovel=[[GRAY]]**JE LAAT JE SCHEP ZAKKEN**
+Skills.ReadySword=[[GREEN]]**JE TILT JE ZWAARD OP**
+Skills.LowerSword=[[GRAY]]**JE LAAT JE ZWAARD ZAKKEN**
+Skills.BerserkOn=[[GREEN]]**ONBEWAPENDE GEK GEACTIVEERD**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Onbewapende gek!
+Skills.GreenTerraOn=[[GREEN]]**GROENE AARDE GEACTIVEERD**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Groene Aarde!
+Skills.TreeFellerOn=[[GREEN]]**TREE FELLER GEACTIVEERD**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Tree Feller!
+Skills.SuperBreakerOn=[[GREEN]]**SUPER BREEKER GEACTIVEERD**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Super Breeker!
+Skills.SerratedStrikesOn=[[GREEN]]**SERRATED STRIKES GEACTIVEERD**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Serrated Strikes!
+Skills.SkullSplitterOn=[[GREEN]]**SCHEDELSPLIJTER GEACTIVEERD**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Schedelsplijter!
+Skills.GigaDrillBreakerOn=[[GREEN]]**GIGA DRILBOOR GEACTIVEERD**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] gebruikt [[RED]]Giga Drilboor!
+Skills.GreenTerraOff=[[RED]]**Groene Aarde is uitgewerkt**
+Skills.TreeFellerOff=[[RED]]**Tree Feller is uitgewerkt**
+Skills.SuperBreakerOff=[[RED]]**Super Breeker is uitgewerkt**
+Skills.SerratedStrikesOff=[[RED]]**Serrated Strikes is uitgewerkt**
+Skills.BerserkOff=[[RED]]**Onbewapende gek is uitgewerkt**
+Skills.SkullSplitterOff=[[RED]]**Schedelsplijter is uitgewerkt**
+Skills.GigaDrillBreakerOff=[[RED]]**Giga Drilboor is uitgewerkt**
+Skills.TamingUp=[[YELLOW]]Temmen skill verhoogt met {0}. Totaal ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Acrobatics skill verhoogt met {0}. Total ({1})
+Skills.ArcheryUp=[[YELLOW]]Boogschieten skill verhoogt met {0}. Totaal ({1})
+Skills.SwordsUp=[[YELLOW]]Zwaarden skill verhoogt met {0}. Totaal ({1})
+Skills.AxesUp=[[YELLOW]]Bijlen skill verhoogt met {0}. Totaal ({1})
+Skills.UnarmedUp=[[YELLOW]]Onbewapend skill verhoogt met {0}. Totaal ({1})
+Skills.HerbalismUp=[[YELLOW]]Landbouw skill verhoogt met {0}. Totaal ({1})
+Skills.MiningUp=[[YELLOW]]Mijnbouw skill verhoogt met {0}. Totaal ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Houthakken skill verhoogt met {0}. Totaal ({1})
+Skills.RepairUp=[[YELLOW]]Repareren skill verhoogt met {0}. Totaal ({1})
+Skills.ExcavationUp=[[YELLOW]]Uitgraven skill verhoogt met {0}. Totaal ({1})
+Skills.FeltEasy=[[GRAY]]Dat was makkelijk.
+Skills.StackedItems=[[DARK_RED]]Je kan geen gestackte items repareren
+Skills.NeedMore=[[DARK_RED]]Je hebt te weinig
+Skills.AdeptDiamond=[[DARK_RED]]Je bent niet goed genoeg om diamond te repareren.
+Skills.FullDurability=[[GRAY]]Dat is nog helemaal heel.
+Skills.Disarmed=[[DARK_RED]]Je bent ontwapend!
+mcPlayerListener.SorcerySkill=Tovenarij: 
+m.SkillSorcery=TOVERNARIJ
+Sorcery.HasCast=[[GREEN]]**UITROEPEN VAN**[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]]MP
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} MP
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Geen Mana meer [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=DONDER
+Sorcery.Curative.Self=HEEL JEZELF
+Sorcery.Curative.Other=HEEL EEN ANDER
+m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
+Combat.BeastLore=[[GREEN]]**WOLFINSPECTIE**
+Combat.BeastLoreOwner=[[DARK_AQUA]]Eigenaar ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Levens ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Levens ([[GREEN]]{0}[[DARK_AQUA]]/8)
+mcMMO.Description=[[DARK_AQUA]]Q: WHAT IS IT?,[[GOLD]]mcMMO is an [[RED]]OPEN SOURCE[[GOLD]] RPG mod for Bukkit by [[BLUE]]nossr50,[[GOLD]]There are many skills added by mcMMO to Minecraft.,[[GOLD]]You can gain experience in many different ways,[[GOLD]]You will want to type [[GREEN]]/SKILLNAME[[GOLD]] to find out more about a skill.,[[DARK_AQUA]]Q: WHAT DOES IT DO?,[[GOLD]]As an example... in [[DARK_AQUA]]Mining[[GOLD]] you will receive benefits like,[[RED]]Double Drops[[GOLD]] or the ability [[RED]]Super Breaker[[GOLD]] which when,[[GOLD]]activated by right-click allows fast Mining during its duration,[[GOLD]]which is related to your skill level. Leveling [[BLUE]]Mining,[[GOLD]]is as simple as mining precious materials!,[[DARK_AQUA]]Q: WHAT DOES THIS MEAN?,[[GOLD]]Almost all of the skills in [[GREEN]]mcMMO[[GOLD]] add cool new things!.,[[GOLD]]You can also type [[GREEN]]/{0}[[GOLD]] to find out commands,[[GOLD]]The goal of mcMMO is to provide a quality RPG experience.,[[DARK_AQUA]]Q: WHERE DO I SUGGEST NEW STUFF!?,[[GOLD]]On the mcMMO thread in the bukkit forums!,[[DARK_AQUA]]Q: HOW DO I DO THIS AND THAT?,[[RED]]PLEASE [[GOLD]]checkout the wiki! [[DARK_AQUA]]mcmmo.wikia.com
+Party.Locked=[[RED]]Party is locked, only party leader may invite.
+Party.IsntLocked=[[GRAY]]Party is not locked
+Party.Unlocked=[[GRAY]]Party is unlocked
+Party.Help1=[[RED]]Proper usage is [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help2=[[RED]]To join a passworded party use [[YELLOW]]/{0} [[WHITE]]<name> <password>
+Party.Help3=[[RED]]Consult /{0} ? for more information
+Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]to join a party or [[WHITE]]'q' [[YELLOW]]to quit
+Party.Help5=[[RED]]To lock your party use [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]To unlock your party use [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]To password protect your party use [[YELLOW]]/{0} [[WHITE]]password <password>
+Party.Help8=[[RED]]To kick a player from your party use [[YELLOW]]/{0} [[WHITE]]kick <player>
+Party.Help9=[[RED]]To transfer ownership of your party use [[YELLOW]]/{0} [[WHITE]]owner <player>
+Party.NotOwner=[[DARK_RED]]You are not the party owner
+Party.InvalidName=[[DARK_RED]]That is not a valid party name
+Party.PasswordSet=[[GREEN]]Party password set to {0}
+Party.CouldNotKick=[[DARK_RED]]Could not kick player {0}
+Party.NotInYourParty=[[DARK_RED]]{0} is not in your party
+Party.CouldNotSetOwner=[[DARK_RED]]Could not set owner to {0}
+Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
+Commands.xprate.proper3=[[RED]]Enter true or false for the second value
+Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
+Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
+Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
+Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
+Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
+Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 389 - 389
src/com/gmail/nossr50/locale/locale_pl.properties → src/main/java/com/gmail/nossr50/locale/locale_pl.properties

@@ -1,390 +1,390 @@
-Combat.WolfExamine=[[GREEN]]**Zbadales wilka uzywajac wiedzy o zwierzetach**
-Combat.WolfShowMaster=[[DARK_GREEN]]Wlascicielem wilka jest \: {0}
-Combat.Ignition=[[RED]]**PODPALENIE**
-Combat.BurningArrowHit=[[DARK_RED]]Zostales trafiony plonaca strzala\!
-Combat.TouchedFuzzy=[[DARK_RED]]Zostales oszolomiony.
-Combat.TargetDazed=Cel zostal [[DARK_RED]]oszolomiony.
-Combat.WolfNoMaster=[[GRAY]]Ten wilk nie ma wlasciciela...
-Combat.WolfHealth=[[GREEN]]Ten wilk ma {0} zycia.
-Combat.StruckByGore=[[RED]]**WYKRWAWIENIE**
-Combat.Gore=[[GREEN]]**KRWOTOK**
-Combat.ArrowDeflect=[[WHITE]]**ODBICIE STRZALY**
-Item.ChimaeraWingFail=**UZYCIE SKRZYDLA CHIMERY NIE POWIODLO SIE\!**
-Item.ChimaeraWingPass=**UZYLES SKRZYDLA CHIMERY**
-Item.InjuredWait=Zostales ranny. Musisz poczekac [[YELLOW]]{0}[[WHITE]] sekund przed uzyciem.
-Item.NeedFeathers=[[GRAY]]Potrzebujesz wiecej pior.
-m.mccPartyCommands=[[GREEN]]--KOMENDY DRUZYNOWE--
-m.mccParty=[party name] [[RED]]- Tworzy lub dolacza do danej druzyny.
-m.mccPartyQ=[[RED]]- Pozwala opuscic druzyne.
-m.mccPartyToggle=[[RED]] - Wlacza chat druzynowy.
-m.mccPartyInvite=[player name] [[RED]]- Wysyla zaproszenie do druzyny.
-m.mccPartyAccept=[[RED]]- Akceptuje zaproszenie do druzyny.
-m.mccPartyTeleport=[imie czlonka druzyny] [[RED]]- Teleportuje cie do czlonka druzyny.
-m.mccOtherCommands=[[GREEN]]--INNE KOMENDY--
-m.mccStats=- Pokazuje twoje statystyki.
-m.mccLeaderboards=- Pokazuje najlepszych graczy.
-m.mccMySpawn=- Teleportuje do twojego spawna.
-m.mccClearMySpawn=- Kasuje twoj spawn i zmienia na domyslny.
-m.mccToggleAbility=- Wlacza specjalna umiejetnosc prawym przyciskiem myszy.
-m.mccAdminToggle=- Wlacza chat adminow.
-m.mccWhois=[nazwa gracza] [[RED]]- Zobacz szczegolowe informacje o graczu.
-m.mccMmoedit=[nazwa gracza] [umiejetnosc] [nowa wartosc] [[RED]]- Modyfikuje cel.
-m.mccMcGod=- Niesmiertelnosc.
-m.mccSkillInfo=/[nazwa umiejetnosci (np. Mining)] [[RED]]- Wyswietla informacje na temat umiejetnosci.
-m.mccModDescription=[[RED]]- Wyswietla opis moda.
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]Dostajesz doswiadczenie za: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFEKTY
-m.YourStats=TWOJE STATYSTYKI
-m.SkillTaming=OSWAJANIE
-m.XPGainTaming=Utrate zdrowia wilkow.
-m.EffectsTaming1_0=Wiedza o zwierzetach
-m.EffectsTaming1_1=Uderz koscia aby sprawdzic wilka.
-m.EffectsTaming2_0=Krwotok
-m.EffectsTaming2_1=Atak krytyczny powodujacy silny krwotok.
-m.EffectsTaming3_0=Ostre pazury
-m.EffectsTaming3_1=Zwiekszenie obrazen.
-m.EffectsTaming4_0=Sztuka przetrwania
-m.EffectsTaming4_1=Unikanie kaktusow i lawy. Zawsze spada na 4 lapy.
-m.EffectsTaming5_0=Grube futro
-m.EffectsTaming5_1=Wieksza odpornosc na obrazenia i ogien.
-m.EffectsTaming6_0=Odpornosc na eksplozje
-m.EffectsTaming6_1=Wieksza odpornosc na obrazenia od wybuchow.
-m.AbilLockTaming1=Aby odblokowac sztuke przetrwania, zdobadz 100 poziom.
-m.AbilLockTaming2=Aby odblokowac grube futro, zdobadz 250 poziom.
-m.AbilLockTaming3=Aby odblokowac odpornosc na eksplozje, zdobadz 500 poziom.
-m.AbilLockTaming4=Aby odblokowac ostre pazury, zdobadz 750 poziom.
-m.AbilBonusTaming1_0=Sztuka przetrwania
-m.AbilBonusTaming1_1=Wilki unikaja zagrozen.
-m.AbilBonusTaming2_0=Grube futro
-m.AbilBonusTaming2_1=Obrazenia ogolne i od ognia zmniejszone do polowy.
-m.AbilBonusTaming3_0=Odpornosc na eksplozje
-m.AbilBonusTaming3_1=Wybuchy zadaja 1/6 obrazen.
-m.AbilBonusTaming4_0=Ostre pazury
-m.AbilBonusTaming4_1=+2 do obrazen
-m.TamingGoreChance=[[RED]]Szansa na spowodowanie krwotoku: [[YELLOW]]{0}%
-m.SkillWoodCutting=DRWALNICTWO
-m.XPGainWoodCutting=Scinanie drzew
-m.EffectsWoodCutting1_0=Powalacz drzew (UMIEJETNOSC)
-m.EffectsWoodCutting1_1=Blyskawicznie scina drzewa.
-m.EffectsWoodCutting2_0=Zdmuchiwacz lisci
-m.EffectsWoodCutting2_1=Zdmuchuje wszystkie liscie.
-m.EffectsWoodCutting3_0=Fachowa wycinka
-m.EffectsWoodCutting3_1=Pozyskujesz dwa razy wiecej drewna z jednego drzewa. Nic sie nie zmarnuje.
-m.AbilLockWoodCutting1=Aby odblokowac zdmuchiwacza lisci, zdobadz 100 poziom.
-m.AbilBonusWoodCutting1_0=Zdmuchiwacz lisci
-m.AbilBonusWoodCutting1_1=Zdmuchuje wszystkie liscie.
-m.WoodCuttingDoubleDropChance=[[RED]]Szansa na fachowa wycinke: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Czas trwania powalacza drzew: [[YELLOW]]{0} sekund
-m.SkillArchery=LUCZNICTWO
-m.XPGainArchery=Atakowanie potworow przy uzyciu luku.
-m.EffectsArchery1_0=Podpalenie
-m.EffectsArchery1_1=25% szansa na podpalenie wroga.
-m.EffectsArchery2_0=Oszolomienie(Tylko na graczy)
-m.EffectsArchery2_1=Dezorientuje przeciwnika.
-m.EffectsArchery3_0=Wieksze obrazenia
-m.EffectsArchery3_1=Zwieksza obrazenia zadawane lukiem.
-m.EffectsArchery4_0=Odzyskiwanie strzal
-m.EffectsArchery4_1=Szansa na odzyskanie strzal z cial wrogow.
-m.ArcheryDazeChance=[[RED]]Szansa na oszolomienie: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Szansa na odzyskanie strzal: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Dlugosc podpalenia: [[YELLOW]]{0} sekund
-m.ArcheryDamagePlus=[[RED]]Wieksze obrazenia (Rank{0}): [[YELLOW]]Obrazenia zwiekszone o {0}
-m.SkillAxes=TOPORY
-m.XPGainAxes=Atakowanie potworow przy uzyciu toporow.
-m.EffectsAxes1_0=Berserk (UMIEJETNOSC)
-m.EffectsAxes1_1=Zadaje obrazenia wszystkiemu dookola.
-m.EffectsAxes2_0=Krytyczne uderzenie
-m.EffectsAxes2_1=Potrafisz trafic wroga tam gdzie boli, zadajac podwojne obrazenia.
-m.EffectsAxes3_0=Doswiadczony wojownik
-m.EffectsAxes3_1=Mordowanie setek potworow zwiekszylo twoja sile i celnosc. Zadajesz wiecej obrazen.
-m.AbilLockAxes1=Aby odblokowac doswiadczonego wojownika, zdobadz 500 poziom.
-m.AbilBonusAxes1_0=Doswiadczony wojownik
-m.AbilBonusAxes1_1=Zadajesz dodatkowe 4 punkty obrazen.
-m.AxesCritChance=[[RED]]Szansa na krytyczne uderzenie: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Dlugosc berserku: [[YELLOW]]{0} sekund
-m.SkillSwords=MIECZE
-m.XPGainSwords=Atakowanie potworow przy uzyciu mieczy.
-m.EffectsSwords1_0=Kontratak
-m.EffectsSwords1_1=Nikt bezkarnie cie nie zrani. Oddajesz przeciwnikowi 50% otrzymanych obrazen.
-m.EffectsSwords2_0=Furia ostrzy (UMIEJETNOSC)
-m.EffectsSwords2_1=25% obrazen obszarowych powodujacych krwotok.
-m.EffectsSwords3_0=Krwawa furia ostrzy
-m.EffectsSwords3_1=Celujesz w zyly i tetnice, pododujac jak najwiecej ran.
-m.EffectsSwords4_0=Blok
-m.EffectsSwords4_1=Calkowicie blokujesz cios.
-m.EffectsSwords5_0=Krwotok
-m.EffectsSwords5_1=Powoduje krwawiace otwarte rany.
-m.SwordsCounterAttChance=[[RED]]Szansa na kontratak: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Rany zadawane krwotokiem: [[YELLOW]]{0} ran.
-m.SwordsBleedChance=[[RED]]Szansa na spowodowanie krwotoku: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Szansa na blok: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Dlugosc furii ostrzy: [[YELLOW]]{0} sekund
-m.SwordsTickNote=[[GRAY]]UWAGA: [[YELLOW]]1 rana goi sie co 2 sekundy.
-m.SkillAcrobatics=AKROBATYKA
-m.XPGainAcrobatics=Spadanie
-m.EffectsAcrobatics1_0=Przewrot
-m.EffectsAcrobatics1_1=Zmniejsza badz niweluje obrazenia.
-m.EffectsAcrobatics2_0=Idealny przewrot
-m.EffectsAcrobatics2_1=Dwa razy skuteczniejszy od normalnego.
-m.EffectsAcrobatics3_0=Unik
-m.EffectsAcrobatics3_1=Redukuje obrazenia o polowe.
-m.AcrobaticsRollChance=[[RED]]Szansa na przewrot: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Szansa na idealny przewrot: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Szansa na unik: [[YELLOW]]{0}%
-m.SkillMining=GORNICTWO
-m.XPGainMining=Wykopywanie kamienia i roznych rud.
-m.EffectsMining1_0=Super kopacz (UMIEJETNOSC)
-m.EffectsMining1_1=Kopiesz sybciej i marnujesz trzy razy mniej rudy.
-m.EffectsMining2_0=Fachowy wykop
-m.EffectsMining2_1=Pozyskujesz dwa razy wiecej rudy. Nic sie nie marnuje.
-m.MiningDoubleDropChance=[[RED]]Szansa na fachowy wykop: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Dlugosc super kopania: [[YELLOW]]{0} sekund
-m.SkillRepair=NAPRAWA
-m.XPGainRepair=Naprawianie przedmiotow.
-m.EffectsRepair1_0=Naprawa
-m.EffectsRepair1_1=Naprawianie zelaznych przedmiotow.
-m.EffectsRepair2_0=Mistrz naprawy
-m.EffectsRepair2_1=Zwiekszona liczba napraw.
-m.EffectsRepair3_0=Fachowa naprawa
-m.EffectsRepair3_1=Naprawiles przedmiot dwa razy lepiej niz zwykle.
-m.EffectsRepair4_0=Diamentowa odnowa ({0}+ UMIEJETNOSC)
-m.EffectsRepair4_1=Naprawia diamentowe przedmioty.
-m.RepairRepairMastery=[[RED]]Mistrz naprawy: [[YELLOW]]Dodatkowe {0}% wytrzymalosci odzyskane.
-m.RepairSuperRepairChance=[[RED]]Szansa na fachowa naprawe: [[YELLOW]]{0}%
-m.SkillUnarmed=KUNG-FU
-m.XPGainUnarmed=Atakowanie potworow bez broni.
-m.EffectsUnarmed1_0=Wejscie Smoka (UMIEJETNOSC)
-m.EffectsUnarmed1_1=Polowe wieksze obrazenia, niszczy slabe przedmioty.
-m.EffectsUnarmed2_0=Rozbrojenie (Tylko graczy)
-m.EffectsUnarmed2_1=Przeciwnik upuszcza trzymany w reku przedmiot.
-m.EffectsUnarmed3_0=Wsciekle Piesci
-m.EffectsUnarmed3_1=Znaczne zwiekszenie zadawanych obrazen.
-m.EffectsUnarmed4_0=Droga Smoka
-m.EffectsUnarmed4_1=Zwiekszenie zadawanych obrazen.
-m.EffectsUnarmed5_0=Odbicie strzaly
-m.EffectsUnarmed5_1=Golymi rekoma potrafisz odbic nadlatujaca strzale.
-m.AbilLockUnarmed1=Aby odblokowac Droge Smoka, zdobadz 250 poziom.
-m.AbilLockUnarmed2=Aby odblokowac Wsciekle Piesci, zdobadz 500 poziom.
-m.AbilBonusUnarmed1_0=Droga Smoka
-m.AbilBonusUnarmed1_1=Zadawane obrazenia zwiekszone o 2.
-m.AbilBonusUnarmed2_0=Wsciekle Piesci
-m.AbilBonusUnarmed2_1=Zadawane obrazenia zwiekszone o 4.
-m.UnarmedArrowDeflectChance=[[RED]]Szansa na odbicie strzaly: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Szansa na rozbrojenie: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Dlugosc Wejscia Smoka: [[YELLOW]]{0} sekund.
-m.SkillHerbalism=ZIELARSTWO
-m.XPGainHerbalism=Zbieranie ziol.
-m.EffectsHerbalism1_0=Zielona ziemia (UMIEJETNOSC)
-m.EffectsHerbalism1_1=Rozprzestrzenia ziemie, potraja plony.
-m.EffectsHerbalism2_0=Wprawne rece (zboze)
-m.EffectsHerbalism2_1=Zbierajac zboze, od razu sadzisz nasiona.
-m.EffectsHerbalism3_0=Wprawne rece (bruk)
-m.EffectsHerbalism3_1=Zamienia bruk w porosniety mchem kamien z nasionami.
-m.EffectsHerbalism4_0=Lepsze jedzenie
-m.EffectsHerbalism4_1=Modyfikowana genetycznie zywnosc jest zdrowsza. Chleb i zupa chlebowa regeneruja wiecej zdrowia.
-m.EffectsHerbalism5_0=Udane zbiory
-m.EffectsHerbalism5_1=Dwa razy wieksze plony wszystkich roslin.
-m.HerbalismGreenTerraLength=[[RED]]Czas trwania zielonej ziemi: [[YELLOW]]{0} sekund
-m.HerbalismGreenThumbChance=[[RED]]Szansa na wprawne rece: [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Poziom wprawnych rak: [[YELLOW]] Zboze rosnie na poziomie {0}
-m.HerbalismDoubleDropChance=[[RED]]Szansa na udane zbiory: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Lepsze jedzenie (Ranga{0}): [[YELLOW]]Dodatkowe {0} zdrowia
-m.SkillExcavation=WYKOPALISKA
-m.XPGainExcavation=Kopanie i odnajdywanie skarbow.
-m.EffectsExcavation1_0=Super Szybka Saperka (UMIEJETNOSC)
-m.EffectsExcavation1_1=Zwiekszona szybkosc kopania i trzykrotnie wiekszy urobek i zdobyte doswiadczenie.
-m.EffectsExcavation2_0=Lowca Skarbow
-m.EffectsExcavation2_1=Umiejetnosc znajdywania skarbow
-m.ExcavationGreenTerraLength=[[RED]]Czas trwania Super Szybkiej Saperki: [[YELLOW]]{0} sekund.
-mcBlockListener.PlacedAnvil=[[DARK_RED]]Polozyles kowadlo, ktore pozwala na naprawe przedmiotow.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Twoj wilk przybiega z powrotem.
-mcPlayerListener.AbilitiesOff=Uzywanie umiejetnosci wylaczone
-mcPlayerListener.AbilitiesOn=Uzywanie umiejetnosci wlaczone
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**UMIEJETNOSCI ODSWIEZONE\!**
-mcPlayerListener.AcrobaticsSkill=Akrobatyka: 
-mcPlayerListener.ArcherySkill=Lucznictwo: 
-mcPlayerListener.AxesSkill=Topory: 
-mcPlayerListener.ExcavationSkill=Wykopaliska: 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]Niesmiertelnosc wylaczona
-mcPlayerListener.GodModeEnabled=[[YELLOW]]Niesmiertelnosc wlaczona
-mcPlayerListener.GreenThumb=[[GREEN]]**UZYLES ZIELONEJ ZIEMI**
-mcPlayerListener.GreenThumbFail=[[RED]]**UZYWANIE ZIELONEJ ZIEMI NIE POWIODLO SIE**
-mcPlayerListener.HerbalismSkill=Zielarstwo: 
-mcPlayerListener.MiningSkill=Gornictwo: 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Twoj spawn zostal usuniety.
-mcPlayerListener.MyspawnNotExist=[[RED]]Musisz ustawic swoj spawn za pomoca lozka.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Twoj spawn zostal ustawiony na twoje aktualne polozenie.
-mcPlayerListener.MyspawnTimeNotice=Musisz zaczekac {0} minut i {1} sekund aby przeteleportowac sie na spawn.
-mcPlayerListener.NoPermission=Brak mcPermissions.
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Umiejetnosci, ktorych nie mozesz uzyc nie sa wyswietlane.
-mcPlayerListener.NotInParty=[[RED]]Nie jestes w grupie.
-mcPlayerListener.InviteSuccess=[[GREEN]]Zaproszenie wyslane.
-mcPlayerListener.ReceivedInvite1=[[RED]]UWAGA: [[GREEN]]Dostales zaproszenie do grupy {0} od {1}.
-mcPlayerListener.ReceivedInvite2=[[YELLOW]Wpisz [[GREEN]]/{0}[[YELLOW]] aby zaakceptowac zaproszenie.
-mcPlayerListener.InviteAccepted=[[GREEN]]Zaproszenie akceptowane. Doszles do grupy {0}.
-mcPlayerListener.NoInvites=[[RED]]Nie masz zaproszen do zadnej grupy.
-mcPlayerListener.YouAreInParty=[[GREEN]]Jestes w grupie {0}.
-mcPlayerListener.PartyMembers=[[GREEN]]Czlonkowie grupy
-mcPlayerListener.LeftParty=[[RED]]Wyszles z tej grupy.
-mcPlayerListener.JoinedParty=Doszedles do grupy: {0}
-mcPlayerListener.PartyChatOn=Chat tylko dla grupy [[GREEN]]WLACZONY
-mcPlayerListener.PartyChatOff=Chat tylko dla grupy [[RED]]WYLACZONY
-mcPlayerListener.AdminChatOn=Chat tylko dla adminow [[GREEN]]WLACZONY
-mcPlayerListener.AdminChatOff=Chat tylko dla adminow [[RED]]WYLACZONY
-mcPlayerListener.MOTD=[[BLUE]]Ten server uzywa plugina mcMMO {0} wpisz [[YELLOW]]/{1}[[BLUE]] aby uzyskac pomoc.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
-mcPlayerListener.PowerLevel=[[DARK_RED]]POZIOM MOCY: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--Ranking [[BLUE]]poziomu mocy [[YELLOW]]mcMMO--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--Ranking [[BLUE]]{0}[[YELLOW]] mcMMO--
-mcPlayerListener.RepairSkill=Naprawa: 
-mcPlayerListener.SwordsSkill=Miecze: 
-mcPlayerListener.TamingSkill=Oswajanie: 
-mcPlayerListener.UnarmedSkill=Kung-fu: 
-mcPlayerListener.WoodcuttingSkill=Drwalnictwo: 
-mcPlayerListener.YourStats=[[GREEN]][mcMMO] Statystyki
-Party.InformedOnJoin={0} [[GREEN]] dolaczyl do twojej grupy.
-Party.InformedOnQuit={0} [[GREEN]] wyszedl z twojej grupy.
-Skills.YourGreenTerra=[[GREEN]]Twoja umiejetnosc [[YELLOW]]zielona ziemia [[GREEN]]zostala naladowana!
-Skills.YourTreeFeller=[[GREEN]]Twoja umiejetnosc [[YELLOW]]powalacz drzew [[GREEN]]zostala naladowana!
-Skills.YourSuperBreaker=[[GREEN]]Twoja umiejetnosc [[YELLOW]]Super kopacz [[GREEN]]zostala naladowana!
-Skills.YourSerratedStrikes=[[GREEN]]Twoja umiejetnosc [[YELLOW]]furia ostrzy [[GREEN]]zostala naladowana!
-Skills.YourBerserk=[[GREEN]]Twoja umiejetnosc [[YELLOW]]Wejscie Smoka [[GREEN]]zostala naladowana!
-Skills.YourSkullSplitter=[[GREEN]]Twoja umiejetnosc [[YELLOW]]berserk [[GREEN]]zostala naladowana!
-Skills.YourGigaDrillBreaker=[[GREEN]]Twoja umiejetnosc [[YELLOW]]Super Szybka Saperka [[GREEN]]zostala naladowana!
-Skills.TooTired=[[RED]]Musisz odpoczac zanim ponownie uzyjesz tej umiejetnosci.
-Skills.ReadyHoe=[[GREEN]]**PODNOSISZ SWOJA MOTYKE**
-Skills.LowerHoe=[[GRAY]]**OPUSZCZASZ SWOJA MOTYKE**
-Skills.ReadyAxe=[[GREEN]]**PODNOSISZ SWOJ TOPOR**
-Skills.LowerAxe=[[GRAY]]**OPUSZCZASZ SWOJ TOPOR**
-Skills.ReadyFists=[[GREEN]]**PODNOSISZ SWOJE PIESCI**
-Skills.LowerFists=[[GRAY]]**OPUSZCZASZ SWOJE PIESCI**
-Skills.ReadyPickAxe=[[GREEN]]**PODNOSISZ SWOJ KILOF**
-Skills.LowerPickAxe=[[GRAY]]**OPUSZCZASZ SWOJ KILOF**
-Skills.ReadyShovel=[[GREEN]]**PODNOSISZ SWOJA LOPATE**
-Skills.LowerShovel=[[GRAY]]**OPUSZCZASZ SWOJA LOPATE**
-Skills.ReadySword=[[GREEN]]**PODNOSISZ SWOJ MIECZ**
-Skills.LowerSword=[[GRAY]]**OPUSZCZASZ SWOJ MIECZ**
-Skills.BerserkOn=[[GREEN]]**ROBISZ WEJSCIE SMOKA**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] zrobil [[RED]]Wejscie Smoka!
-Skills.GreenTerraOn=[[GREEN]]**ZIELONA ZIEMIA**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]zielonej ziemi!
-Skills.TreeFellerOn=[[GREEN]]**POWALACZ DRZEW**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]powalacza drzew!
-Skills.SuperBreakerOn=[[GREEN]]**SUPER KOPACZ**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]Super Kopacza!
-Skills.SerratedStrikesOn=[[GREEN]]**FURIA OSTRZY**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]furii ostrzy!
-Skills.SkullSplitterOn=[[GREEN]]**BERSERK**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] wpadl w [[RED]]berserk!
-Skills.GigaDrillBreakerOn=[[GREEN]]**SUPER SZYBKA SAPERKA**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]Super Szybkiej Saperki!
-Skills.GreenTerraOff=[[RED]]**Zielona ziemia zostala zuzyta**
-Skills.TreeFellerOff=[[RED]]**Powalacz drzew zostal zuzyty**
-Skills.SuperBreakerOff=[[RED]]**Super Kopacz zostal zuzyty**
-Skills.SerratedStrikesOff=[[RED]]**Furia ostrzy zostala zuzyta**
-Skills.BerserkOff=[[RED]]**Wejscie Smoka zostalo zuzyte**
-Skills.SkullSplitterOff=[[RED]]**Berserk zostal zuzyty**
-Skills.GigaDrillBreakerOff=[[RED]]**Super Szybka Saperka zostala zuzyta**
-Skills.TamingUp=[[YELLOW]]Umiejetnosc oswajania wzrosla o {0}. Razem ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Umiejetnosci akrobatyczne wzrosly o {0}. Razem ({1})
-Skills.ArcheryUp=[[YELLOW]]Umiejetnosci lucznicze wzrosly o {0}. Razem ({1})
-Skills.SwordsUp=[[YELLOW]]Umiejetnosc uzywania mieczy wzrosla o {0}. Razem ({1})
-Skills.AxesUp=[[YELLOW]]Umiejetnosc uzywania toporow wzrosla o {0}. Razem ({1})
-Skills.UnarmedUp=[[YELLOW]]Znajomosc Kung-Fu wzrosla o {0}. Razem ({1})
-Skills.HerbalismUp=[[YELLOW]]Znajomosc zielarstwa wzrosla o {0}. Razem ({1})
-Skills.MiningUp=[[YELLOW]]Umiejetnosci gornicze wzrosly o {0}. Razem ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Umiejetnosci drwalnicze wzrosly o {0}. Razem ({1})
-Skills.RepairUp=[[YELLOW]]Umiejetnosc naprawy wzrosla o {0}. Razem ({1})
-Skills.ExcavationUp=[[YELLOW]]Umiejetnosci wykopaliskowe wzrosly o {0}. Razem ({1})
-Skills.FeltEasy=[[GRAY]]To bylo proste.
-Skills.StackedItems=[[DARK_RED]]Nie mozesz naprawiac grup przedmiotow.
-Skills.NeedMore=[[DARK_RED]]Potrzebujesz wiecej
-Skills.AdeptDiamond=[[DARK_RED]]Nie potrafisz jeszcze naprawiac diamentow
-Skills.FullDurability=[[GRAY]]Ten przedmiot nie wymaga naprawy.
-Skills.Disarmed=[[DARK_RED]]Zostales rozbrojony!
-mcPlayerListener.SorcerySkill=Magia: 
-m.SkillSorcery=MAGIA
-Sorcery.HasCast=[[GREEN]]**RZUCANIE ZAKLECIA**[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]]Mana
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} Many
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Brak Many [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=PIORUN
-Sorcery.Curative.Self=ULECZ SIEBIE
-Sorcery.Curative.Other=ULECZ INNYCH
-m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]Doswiadczenia[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
-Combat.BeastLore=[[GREEN]]**WIEDZA O ZWIERZETACH**
-Combat.BeastLoreOwner=[[DARK_AQUA]]Wlasciciel ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Zycie ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Zycie ([[GREEN]]{0}[[DARK_AQUA]]/8)
-mcMMO.Description=[[DARK_AQUA]]P: Czym jest mcMMO?,[[GOLD]]mcMMO jest [[RED]]open source'owym[[GOLD]] RPG modem korzystajacym z Bukkita, autorstwa [[BLUE]]nossr50,[[GOLD]]mcMMO dodaje wiele umiejetnosci do Minecrafta.,[[GOLD]]Mozna rowniez zbierac doswiadczenie na rozne sposoby,[[GOLD]]Najlepiej wpisac [[GREEN]]/nazwaumiejetnosci[[GOLD]] aby dowiedziec sie wiecej o niej.,[[DARK_AQUA]]P: A co robi mcMMO?,[[GOLD]]Dla przykladu, [[DARK_AQUA]]gornictwo[[GOLD]] pozwala na [[RED]]zwiekszone zyski[[GOLD]] oraz daje mozliwosc [[RED]]szybszego kopania[[GOLD]], ktore mozna [[GOLD]]aktywowac prawym przyciskiem myszy i trwa dluzej [[GOLD]]im wyzszy masz poziom. Zdobywanie poziomow w [[BLUE]]gornictwie[[GOLD]] odbywa sie przez zwyczajne wykopywanie roznych mineralow.,[[DARK_AQUA]]P: Co to wszystko daje?,[[GOLD]]Prawie wszystkie umiejetnosci w [[GREEN]]mcMMO[[GOLD]] dodaja nowe fajne rzeczy!.,[[GOLD]]Wpisujac [[GREEN]]/{0}[[GOLD]] poznasz wszystkie dostepne polecenia,[[GOLD]]Celem mcMMO jest sprawienie aby Minecraft stal sie prawie eRPeGiem.,[[DARK_AQUA]]P: Mam genialny pomysl, dodasz to!?,[[GOLD]]Napisz w temacie mcMMO na forum bukkit i zobaczymy!,[[DARK_AQUA]]Q: A jak zrobic to albo tamto?,[[RED]]CZYTAJ [[GOLD]]strone wiki moda! [[DARK_AQUA]]mcmmo.wikia.com
-Party.Locked=[[RED]]Grupa jest zamknieta, tylko wlasciciel moze dodac graczy.
-Party.IsntLocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
-Party.Unlocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
-Party.Help1=[[RED]]Prawidlowe polecenie to [[YELLOW]]/{0} [[WHITE]]<nazwa>[[YELLOW]] lub [[WHITE]]'q' [[YELLOW]]aby wyjsc.
-Party.Help2=[[RED]]Aby dolaczyc do grupy zabezpieczonej haslem wpisz[[YELLOW]]/{0} [[WHITE]]<nazwa> <haslo>
-Party.Help3=[[RED]]Sprawdz /{0} ? aby dowiedziec sie wiecej.
-Party.Help4=[[RED]]Wpisz [[YELLOW]]/{0} [[WHITE]]<nazwa> [[YELLOW]]aby dolaczyc do grupy lub [[WHITE]]'q' [[YELLOW]]aby z niej wyjsc.
-Party.Help5=[[RED]]Aby zamknac grupe wpisz [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]Aby otworzyc zamknieta grupe wpisz [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]Aby zabezpieczyc grupe haslem wpisz [[YELLOW]]/{0} [[WHITE]]password <haslo>
-Party.Help8=[[RED]]Aby wyrzucic gracza z grupy wpisz [[YELLOW]]/{0} [[WHITE]]kick <imiegracza>
-Party.Help9=[[RED]]Aby przekazac wladze w grupie innej osobie wpisz [[YELLOW]]/{0} [[WHITE]]owner <imiegracza>
-Party.NotOwner=[[DARK_RED]]Nie jestes wlascicielem tej grupy.
-Party.InvalidName=[[DARK_RED]]To nie jest dozwolona nazwa grupy.
-Party.PasswordSet=[[GREEN]]Haslo grupy zmienione na: {0}
-Party.CouldNotKick=[[DARK_RED]]Nie mozna wyrzucic gracza {0}
-Party.NotInYourParty=[[DARK_RED]]{0} nie jest czlonkiem twojej grupy.
-Party.CouldNotSetOwner=[[DARK_RED]]Nie mozna przekazac grupy do {0}
-Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
-Commands.xprate.proper3=[[RED]]Enter true or false for the second value
-Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
-Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
-Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
-Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
-Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
-Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]**Zbadales wilka uzywajac wiedzy o zwierzetach**
+Combat.WolfShowMaster=[[DARK_GREEN]]Wlascicielem wilka jest \: {0}
+Combat.Ignition=[[RED]]**PODPALENIE**
+Combat.BurningArrowHit=[[DARK_RED]]Zostales trafiony plonaca strzala\!
+Combat.TouchedFuzzy=[[DARK_RED]]Zostales oszolomiony.
+Combat.TargetDazed=Cel zostal [[DARK_RED]]oszolomiony.
+Combat.WolfNoMaster=[[GRAY]]Ten wilk nie ma wlasciciela...
+Combat.WolfHealth=[[GREEN]]Ten wilk ma {0} zycia.
+Combat.StruckByGore=[[RED]]**WYKRWAWIENIE**
+Combat.Gore=[[GREEN]]**KRWOTOK**
+Combat.ArrowDeflect=[[WHITE]]**ODBICIE STRZALY**
+Item.ChimaeraWingFail=**UZYCIE SKRZYDLA CHIMERY NIE POWIODLO SIE\!**
+Item.ChimaeraWingPass=**UZYLES SKRZYDLA CHIMERY**
+Item.InjuredWait=Zostales ranny. Musisz poczekac [[YELLOW]]{0}[[WHITE]] sekund przed uzyciem.
+Item.NeedFeathers=[[GRAY]]Potrzebujesz wiecej pior.
+m.mccPartyCommands=[[GREEN]]--KOMENDY DRUZYNOWE--
+m.mccParty=[party name] [[RED]]- Tworzy lub dolacza do danej druzyny.
+m.mccPartyQ=[[RED]]- Pozwala opuscic druzyne.
+m.mccPartyToggle=[[RED]] - Wlacza chat druzynowy.
+m.mccPartyInvite=[player name] [[RED]]- Wysyla zaproszenie do druzyny.
+m.mccPartyAccept=[[RED]]- Akceptuje zaproszenie do druzyny.
+m.mccPartyTeleport=[imie czlonka druzyny] [[RED]]- Teleportuje cie do czlonka druzyny.
+m.mccOtherCommands=[[GREEN]]--INNE KOMENDY--
+m.mccStats=- Pokazuje twoje statystyki.
+m.mccLeaderboards=- Pokazuje najlepszych graczy.
+m.mccMySpawn=- Teleportuje do twojego spawna.
+m.mccClearMySpawn=- Kasuje twoj spawn i zmienia na domyslny.
+m.mccToggleAbility=- Wlacza specjalna umiejetnosc prawym przyciskiem myszy.
+m.mccAdminToggle=- Wlacza chat adminow.
+m.mccWhois=[nazwa gracza] [[RED]]- Zobacz szczegolowe informacje o graczu.
+m.mccMmoedit=[nazwa gracza] [umiejetnosc] [nowa wartosc] [[RED]]- Modyfikuje cel.
+m.mccMcGod=- Niesmiertelnosc.
+m.mccSkillInfo=/[nazwa umiejetnosci (np. Mining)] [[RED]]- Wyswietla informacje na temat umiejetnosci.
+m.mccModDescription=[[RED]]- Wyswietla opis moda.
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]Dostajesz doswiadczenie za: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFEKTY
+m.YourStats=TWOJE STATYSTYKI
+m.SkillTaming=OSWAJANIE
+m.XPGainTaming=Utrate zdrowia wilkow.
+m.EffectsTaming1_0=Wiedza o zwierzetach
+m.EffectsTaming1_1=Uderz koscia aby sprawdzic wilka.
+m.EffectsTaming2_0=Krwotok
+m.EffectsTaming2_1=Atak krytyczny powodujacy silny krwotok.
+m.EffectsTaming3_0=Ostre pazury
+m.EffectsTaming3_1=Zwiekszenie obrazen.
+m.EffectsTaming4_0=Sztuka przetrwania
+m.EffectsTaming4_1=Unikanie kaktusow i lawy. Zawsze spada na 4 lapy.
+m.EffectsTaming5_0=Grube futro
+m.EffectsTaming5_1=Wieksza odpornosc na obrazenia i ogien.
+m.EffectsTaming6_0=Odpornosc na eksplozje
+m.EffectsTaming6_1=Wieksza odpornosc na obrazenia od wybuchow.
+m.AbilLockTaming1=Aby odblokowac sztuke przetrwania, zdobadz 100 poziom.
+m.AbilLockTaming2=Aby odblokowac grube futro, zdobadz 250 poziom.
+m.AbilLockTaming3=Aby odblokowac odpornosc na eksplozje, zdobadz 500 poziom.
+m.AbilLockTaming4=Aby odblokowac ostre pazury, zdobadz 750 poziom.
+m.AbilBonusTaming1_0=Sztuka przetrwania
+m.AbilBonusTaming1_1=Wilki unikaja zagrozen.
+m.AbilBonusTaming2_0=Grube futro
+m.AbilBonusTaming2_1=Obrazenia ogolne i od ognia zmniejszone do polowy.
+m.AbilBonusTaming3_0=Odpornosc na eksplozje
+m.AbilBonusTaming3_1=Wybuchy zadaja 1/6 obrazen.
+m.AbilBonusTaming4_0=Ostre pazury
+m.AbilBonusTaming4_1=+2 do obrazen
+m.TamingGoreChance=[[RED]]Szansa na spowodowanie krwotoku: [[YELLOW]]{0}%
+m.SkillWoodCutting=DRWALNICTWO
+m.XPGainWoodCutting=Scinanie drzew
+m.EffectsWoodCutting1_0=Powalacz drzew (UMIEJETNOSC)
+m.EffectsWoodCutting1_1=Blyskawicznie scina drzewa.
+m.EffectsWoodCutting2_0=Zdmuchiwacz lisci
+m.EffectsWoodCutting2_1=Zdmuchuje wszystkie liscie.
+m.EffectsWoodCutting3_0=Fachowa wycinka
+m.EffectsWoodCutting3_1=Pozyskujesz dwa razy wiecej drewna z jednego drzewa. Nic sie nie zmarnuje.
+m.AbilLockWoodCutting1=Aby odblokowac zdmuchiwacza lisci, zdobadz 100 poziom.
+m.AbilBonusWoodCutting1_0=Zdmuchiwacz lisci
+m.AbilBonusWoodCutting1_1=Zdmuchuje wszystkie liscie.
+m.WoodCuttingDoubleDropChance=[[RED]]Szansa na fachowa wycinke: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Czas trwania powalacza drzew: [[YELLOW]]{0} sekund
+m.SkillArchery=LUCZNICTWO
+m.XPGainArchery=Atakowanie potworow przy uzyciu luku.
+m.EffectsArchery1_0=Podpalenie
+m.EffectsArchery1_1=25% szansa na podpalenie wroga.
+m.EffectsArchery2_0=Oszolomienie(Tylko na graczy)
+m.EffectsArchery2_1=Dezorientuje przeciwnika.
+m.EffectsArchery3_0=Wieksze obrazenia
+m.EffectsArchery3_1=Zwieksza obrazenia zadawane lukiem.
+m.EffectsArchery4_0=Odzyskiwanie strzal
+m.EffectsArchery4_1=Szansa na odzyskanie strzal z cial wrogow.
+m.ArcheryDazeChance=[[RED]]Szansa na oszolomienie: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Szansa na odzyskanie strzal: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Dlugosc podpalenia: [[YELLOW]]{0} sekund
+m.ArcheryDamagePlus=[[RED]]Wieksze obrazenia (Rank{0}): [[YELLOW]]Obrazenia zwiekszone o {0}
+m.SkillAxes=TOPORY
+m.XPGainAxes=Atakowanie potworow przy uzyciu toporow.
+m.EffectsAxes1_0=Berserk (UMIEJETNOSC)
+m.EffectsAxes1_1=Zadaje obrazenia wszystkiemu dookola.
+m.EffectsAxes2_0=Krytyczne uderzenie
+m.EffectsAxes2_1=Potrafisz trafic wroga tam gdzie boli, zadajac podwojne obrazenia.
+m.EffectsAxes3_0=Doswiadczony wojownik
+m.EffectsAxes3_1=Mordowanie setek potworow zwiekszylo twoja sile i celnosc. Zadajesz wiecej obrazen.
+m.AbilLockAxes1=Aby odblokowac doswiadczonego wojownika, zdobadz 500 poziom.
+m.AbilBonusAxes1_0=Doswiadczony wojownik
+m.AbilBonusAxes1_1=Zadajesz dodatkowe 4 punkty obrazen.
+m.AxesCritChance=[[RED]]Szansa na krytyczne uderzenie: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Dlugosc berserku: [[YELLOW]]{0} sekund
+m.SkillSwords=MIECZE
+m.XPGainSwords=Atakowanie potworow przy uzyciu mieczy.
+m.EffectsSwords1_0=Kontratak
+m.EffectsSwords1_1=Nikt bezkarnie cie nie zrani. Oddajesz przeciwnikowi 50% otrzymanych obrazen.
+m.EffectsSwords2_0=Furia ostrzy (UMIEJETNOSC)
+m.EffectsSwords2_1=25% obrazen obszarowych powodujacych krwotok.
+m.EffectsSwords3_0=Krwawa furia ostrzy
+m.EffectsSwords3_1=Celujesz w zyly i tetnice, pododujac jak najwiecej ran.
+m.EffectsSwords4_0=Blok
+m.EffectsSwords4_1=Calkowicie blokujesz cios.
+m.EffectsSwords5_0=Krwotok
+m.EffectsSwords5_1=Powoduje krwawiace otwarte rany.
+m.SwordsCounterAttChance=[[RED]]Szansa na kontratak: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Rany zadawane krwotokiem: [[YELLOW]]{0} ran.
+m.SwordsBleedChance=[[RED]]Szansa na spowodowanie krwotoku: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Szansa na blok: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Dlugosc furii ostrzy: [[YELLOW]]{0} sekund
+m.SwordsTickNote=[[GRAY]]UWAGA: [[YELLOW]]1 rana goi sie co 2 sekundy.
+m.SkillAcrobatics=AKROBATYKA
+m.XPGainAcrobatics=Spadanie
+m.EffectsAcrobatics1_0=Przewrot
+m.EffectsAcrobatics1_1=Zmniejsza badz niweluje obrazenia.
+m.EffectsAcrobatics2_0=Idealny przewrot
+m.EffectsAcrobatics2_1=Dwa razy skuteczniejszy od normalnego.
+m.EffectsAcrobatics3_0=Unik
+m.EffectsAcrobatics3_1=Redukuje obrazenia o polowe.
+m.AcrobaticsRollChance=[[RED]]Szansa na przewrot: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Szansa na idealny przewrot: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Szansa na unik: [[YELLOW]]{0}%
+m.SkillMining=GORNICTWO
+m.XPGainMining=Wykopywanie kamienia i roznych rud.
+m.EffectsMining1_0=Super kopacz (UMIEJETNOSC)
+m.EffectsMining1_1=Kopiesz sybciej i marnujesz trzy razy mniej rudy.
+m.EffectsMining2_0=Fachowy wykop
+m.EffectsMining2_1=Pozyskujesz dwa razy wiecej rudy. Nic sie nie marnuje.
+m.MiningDoubleDropChance=[[RED]]Szansa na fachowy wykop: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Dlugosc super kopania: [[YELLOW]]{0} sekund
+m.SkillRepair=NAPRAWA
+m.XPGainRepair=Naprawianie przedmiotow.
+m.EffectsRepair1_0=Naprawa
+m.EffectsRepair1_1=Naprawianie zelaznych przedmiotow.
+m.EffectsRepair2_0=Mistrz naprawy
+m.EffectsRepair2_1=Zwiekszona liczba napraw.
+m.EffectsRepair3_0=Fachowa naprawa
+m.EffectsRepair3_1=Naprawiles przedmiot dwa razy lepiej niz zwykle.
+m.EffectsRepair4_0=Diamentowa odnowa ({0}+ UMIEJETNOSC)
+m.EffectsRepair4_1=Naprawia diamentowe przedmioty.
+m.RepairRepairMastery=[[RED]]Mistrz naprawy: [[YELLOW]]Dodatkowe {0}% wytrzymalosci odzyskane.
+m.RepairSuperRepairChance=[[RED]]Szansa na fachowa naprawe: [[YELLOW]]{0}%
+m.SkillUnarmed=KUNG-FU
+m.XPGainUnarmed=Atakowanie potworow bez broni.
+m.EffectsUnarmed1_0=Wejscie Smoka (UMIEJETNOSC)
+m.EffectsUnarmed1_1=Polowe wieksze obrazenia, niszczy slabe przedmioty.
+m.EffectsUnarmed2_0=Rozbrojenie (Tylko graczy)
+m.EffectsUnarmed2_1=Przeciwnik upuszcza trzymany w reku przedmiot.
+m.EffectsUnarmed3_0=Wsciekle Piesci
+m.EffectsUnarmed3_1=Znaczne zwiekszenie zadawanych obrazen.
+m.EffectsUnarmed4_0=Droga Smoka
+m.EffectsUnarmed4_1=Zwiekszenie zadawanych obrazen.
+m.EffectsUnarmed5_0=Odbicie strzaly
+m.EffectsUnarmed5_1=Golymi rekoma potrafisz odbic nadlatujaca strzale.
+m.AbilLockUnarmed1=Aby odblokowac Droge Smoka, zdobadz 250 poziom.
+m.AbilLockUnarmed2=Aby odblokowac Wsciekle Piesci, zdobadz 500 poziom.
+m.AbilBonusUnarmed1_0=Droga Smoka
+m.AbilBonusUnarmed1_1=Zadawane obrazenia zwiekszone o 2.
+m.AbilBonusUnarmed2_0=Wsciekle Piesci
+m.AbilBonusUnarmed2_1=Zadawane obrazenia zwiekszone o 4.
+m.UnarmedArrowDeflectChance=[[RED]]Szansa na odbicie strzaly: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Szansa na rozbrojenie: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Dlugosc Wejscia Smoka: [[YELLOW]]{0} sekund.
+m.SkillHerbalism=ZIELARSTWO
+m.XPGainHerbalism=Zbieranie ziol.
+m.EffectsHerbalism1_0=Zielona ziemia (UMIEJETNOSC)
+m.EffectsHerbalism1_1=Rozprzestrzenia ziemie, potraja plony.
+m.EffectsHerbalism2_0=Wprawne rece (zboze)
+m.EffectsHerbalism2_1=Zbierajac zboze, od razu sadzisz nasiona.
+m.EffectsHerbalism3_0=Wprawne rece (bruk)
+m.EffectsHerbalism3_1=Zamienia bruk w porosniety mchem kamien z nasionami.
+m.EffectsHerbalism4_0=Lepsze jedzenie
+m.EffectsHerbalism4_1=Modyfikowana genetycznie zywnosc jest zdrowsza. Chleb i zupa chlebowa regeneruja wiecej zdrowia.
+m.EffectsHerbalism5_0=Udane zbiory
+m.EffectsHerbalism5_1=Dwa razy wieksze plony wszystkich roslin.
+m.HerbalismGreenTerraLength=[[RED]]Czas trwania zielonej ziemi: [[YELLOW]]{0} sekund
+m.HerbalismGreenThumbChance=[[RED]]Szansa na wprawne rece: [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Poziom wprawnych rak: [[YELLOW]] Zboze rosnie na poziomie {0}
+m.HerbalismDoubleDropChance=[[RED]]Szansa na udane zbiory: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Lepsze jedzenie (Ranga{0}): [[YELLOW]]Dodatkowe {0} zdrowia
+m.SkillExcavation=WYKOPALISKA
+m.XPGainExcavation=Kopanie i odnajdywanie skarbow.
+m.EffectsExcavation1_0=Super Szybka Saperka (UMIEJETNOSC)
+m.EffectsExcavation1_1=Zwiekszona szybkosc kopania i trzykrotnie wiekszy urobek i zdobyte doswiadczenie.
+m.EffectsExcavation2_0=Lowca Skarbow
+m.EffectsExcavation2_1=Umiejetnosc znajdywania skarbow
+m.ExcavationGreenTerraLength=[[RED]]Czas trwania Super Szybkiej Saperki: [[YELLOW]]{0} sekund.
+mcBlockListener.PlacedAnvil=[[DARK_RED]]Polozyles kowadlo, ktore pozwala na naprawe przedmiotow.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Twoj wilk przybiega z powrotem.
+mcPlayerListener.AbilitiesOff=Uzywanie umiejetnosci wylaczone
+mcPlayerListener.AbilitiesOn=Uzywanie umiejetnosci wlaczone
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**UMIEJETNOSCI ODSWIEZONE\!**
+mcPlayerListener.AcrobaticsSkill=Akrobatyka: 
+mcPlayerListener.ArcherySkill=Lucznictwo: 
+mcPlayerListener.AxesSkill=Topory: 
+mcPlayerListener.ExcavationSkill=Wykopaliska: 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]Niesmiertelnosc wylaczona
+mcPlayerListener.GodModeEnabled=[[YELLOW]]Niesmiertelnosc wlaczona
+mcPlayerListener.GreenThumb=[[GREEN]]**UZYLES ZIELONEJ ZIEMI**
+mcPlayerListener.GreenThumbFail=[[RED]]**UZYWANIE ZIELONEJ ZIEMI NIE POWIODLO SIE**
+mcPlayerListener.HerbalismSkill=Zielarstwo: 
+mcPlayerListener.MiningSkill=Gornictwo: 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Twoj spawn zostal usuniety.
+mcPlayerListener.MyspawnNotExist=[[RED]]Musisz ustawic swoj spawn za pomoca lozka.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Twoj spawn zostal ustawiony na twoje aktualne polozenie.
+mcPlayerListener.MyspawnTimeNotice=Musisz zaczekac {0} minut i {1} sekund aby przeteleportowac sie na spawn.
+mcPlayerListener.NoPermission=Brak mcPermissions.
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Umiejetnosci, ktorych nie mozesz uzyc nie sa wyswietlane.
+mcPlayerListener.NotInParty=[[RED]]Nie jestes w grupie.
+mcPlayerListener.InviteSuccess=[[GREEN]]Zaproszenie wyslane.
+mcPlayerListener.ReceivedInvite1=[[RED]]UWAGA: [[GREEN]]Dostales zaproszenie do grupy {0} od {1}.
+mcPlayerListener.ReceivedInvite2=[[YELLOW]Wpisz [[GREEN]]/{0}[[YELLOW]] aby zaakceptowac zaproszenie.
+mcPlayerListener.InviteAccepted=[[GREEN]]Zaproszenie akceptowane. Doszles do grupy {0}.
+mcPlayerListener.NoInvites=[[RED]]Nie masz zaproszen do zadnej grupy.
+mcPlayerListener.YouAreInParty=[[GREEN]]Jestes w grupie {0}.
+mcPlayerListener.PartyMembers=[[GREEN]]Czlonkowie grupy
+mcPlayerListener.LeftParty=[[RED]]Wyszles z tej grupy.
+mcPlayerListener.JoinedParty=Doszedles do grupy: {0}
+mcPlayerListener.PartyChatOn=Chat tylko dla grupy [[GREEN]]WLACZONY
+mcPlayerListener.PartyChatOff=Chat tylko dla grupy [[RED]]WYLACZONY
+mcPlayerListener.AdminChatOn=Chat tylko dla adminow [[GREEN]]WLACZONY
+mcPlayerListener.AdminChatOff=Chat tylko dla adminow [[RED]]WYLACZONY
+mcPlayerListener.MOTD=[[BLUE]]Ten server uzywa plugina mcMMO {0} wpisz [[YELLOW]]/{1}[[BLUE]] aby uzyskac pomoc.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
+mcPlayerListener.PowerLevel=[[DARK_RED]]POZIOM MOCY: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--Ranking [[BLUE]]poziomu mocy [[YELLOW]]mcMMO--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--Ranking [[BLUE]]{0}[[YELLOW]] mcMMO--
+mcPlayerListener.RepairSkill=Naprawa: 
+mcPlayerListener.SwordsSkill=Miecze: 
+mcPlayerListener.TamingSkill=Oswajanie: 
+mcPlayerListener.UnarmedSkill=Kung-fu: 
+mcPlayerListener.WoodcuttingSkill=Drwalnictwo: 
+mcPlayerListener.YourStats=[[GREEN]][mcMMO] Statystyki
+Party.InformedOnJoin={0} [[GREEN]] dolaczyl do twojej grupy.
+Party.InformedOnQuit={0} [[GREEN]] wyszedl z twojej grupy.
+Skills.YourGreenTerra=[[GREEN]]Twoja umiejetnosc [[YELLOW]]zielona ziemia [[GREEN]]zostala naladowana!
+Skills.YourTreeFeller=[[GREEN]]Twoja umiejetnosc [[YELLOW]]powalacz drzew [[GREEN]]zostala naladowana!
+Skills.YourSuperBreaker=[[GREEN]]Twoja umiejetnosc [[YELLOW]]Super kopacz [[GREEN]]zostala naladowana!
+Skills.YourSerratedStrikes=[[GREEN]]Twoja umiejetnosc [[YELLOW]]furia ostrzy [[GREEN]]zostala naladowana!
+Skills.YourBerserk=[[GREEN]]Twoja umiejetnosc [[YELLOW]]Wejscie Smoka [[GREEN]]zostala naladowana!
+Skills.YourSkullSplitter=[[GREEN]]Twoja umiejetnosc [[YELLOW]]berserk [[GREEN]]zostala naladowana!
+Skills.YourGigaDrillBreaker=[[GREEN]]Twoja umiejetnosc [[YELLOW]]Super Szybka Saperka [[GREEN]]zostala naladowana!
+Skills.TooTired=[[RED]]Musisz odpoczac zanim ponownie uzyjesz tej umiejetnosci.
+Skills.ReadyHoe=[[GREEN]]**PODNOSISZ SWOJA MOTYKE**
+Skills.LowerHoe=[[GRAY]]**OPUSZCZASZ SWOJA MOTYKE**
+Skills.ReadyAxe=[[GREEN]]**PODNOSISZ SWOJ TOPOR**
+Skills.LowerAxe=[[GRAY]]**OPUSZCZASZ SWOJ TOPOR**
+Skills.ReadyFists=[[GREEN]]**PODNOSISZ SWOJE PIESCI**
+Skills.LowerFists=[[GRAY]]**OPUSZCZASZ SWOJE PIESCI**
+Skills.ReadyPickAxe=[[GREEN]]**PODNOSISZ SWOJ KILOF**
+Skills.LowerPickAxe=[[GRAY]]**OPUSZCZASZ SWOJ KILOF**
+Skills.ReadyShovel=[[GREEN]]**PODNOSISZ SWOJA LOPATE**
+Skills.LowerShovel=[[GRAY]]**OPUSZCZASZ SWOJA LOPATE**
+Skills.ReadySword=[[GREEN]]**PODNOSISZ SWOJ MIECZ**
+Skills.LowerSword=[[GRAY]]**OPUSZCZASZ SWOJ MIECZ**
+Skills.BerserkOn=[[GREEN]]**ROBISZ WEJSCIE SMOKA**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] zrobil [[RED]]Wejscie Smoka!
+Skills.GreenTerraOn=[[GREEN]]**ZIELONA ZIEMIA**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]zielonej ziemi!
+Skills.TreeFellerOn=[[GREEN]]**POWALACZ DRZEW**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]powalacza drzew!
+Skills.SuperBreakerOn=[[GREEN]]**SUPER KOPACZ**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]Super Kopacza!
+Skills.SerratedStrikesOn=[[GREEN]]**FURIA OSTRZY**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]furii ostrzy!
+Skills.SkullSplitterOn=[[GREEN]]**BERSERK**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] wpadl w [[RED]]berserk!
+Skills.GigaDrillBreakerOn=[[GREEN]]**SUPER SZYBKA SAPERKA**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] uzyl [[RED]]Super Szybkiej Saperki!
+Skills.GreenTerraOff=[[RED]]**Zielona ziemia zostala zuzyta**
+Skills.TreeFellerOff=[[RED]]**Powalacz drzew zostal zuzyty**
+Skills.SuperBreakerOff=[[RED]]**Super Kopacz zostal zuzyty**
+Skills.SerratedStrikesOff=[[RED]]**Furia ostrzy zostala zuzyta**
+Skills.BerserkOff=[[RED]]**Wejscie Smoka zostalo zuzyte**
+Skills.SkullSplitterOff=[[RED]]**Berserk zostal zuzyty**
+Skills.GigaDrillBreakerOff=[[RED]]**Super Szybka Saperka zostala zuzyta**
+Skills.TamingUp=[[YELLOW]]Umiejetnosc oswajania wzrosla o {0}. Razem ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Umiejetnosci akrobatyczne wzrosly o {0}. Razem ({1})
+Skills.ArcheryUp=[[YELLOW]]Umiejetnosci lucznicze wzrosly o {0}. Razem ({1})
+Skills.SwordsUp=[[YELLOW]]Umiejetnosc uzywania mieczy wzrosla o {0}. Razem ({1})
+Skills.AxesUp=[[YELLOW]]Umiejetnosc uzywania toporow wzrosla o {0}. Razem ({1})
+Skills.UnarmedUp=[[YELLOW]]Znajomosc Kung-Fu wzrosla o {0}. Razem ({1})
+Skills.HerbalismUp=[[YELLOW]]Znajomosc zielarstwa wzrosla o {0}. Razem ({1})
+Skills.MiningUp=[[YELLOW]]Umiejetnosci gornicze wzrosly o {0}. Razem ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Umiejetnosci drwalnicze wzrosly o {0}. Razem ({1})
+Skills.RepairUp=[[YELLOW]]Umiejetnosc naprawy wzrosla o {0}. Razem ({1})
+Skills.ExcavationUp=[[YELLOW]]Umiejetnosci wykopaliskowe wzrosly o {0}. Razem ({1})
+Skills.FeltEasy=[[GRAY]]To bylo proste.
+Skills.StackedItems=[[DARK_RED]]Nie mozesz naprawiac grup przedmiotow.
+Skills.NeedMore=[[DARK_RED]]Potrzebujesz wiecej
+Skills.AdeptDiamond=[[DARK_RED]]Nie potrafisz jeszcze naprawiac diamentow
+Skills.FullDurability=[[GRAY]]Ten przedmiot nie wymaga naprawy.
+Skills.Disarmed=[[DARK_RED]]Zostales rozbrojony!
+mcPlayerListener.SorcerySkill=Magia: 
+m.SkillSorcery=MAGIA
+Sorcery.HasCast=[[GREEN]]**RZUCANIE ZAKLECIA**[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]]Mana
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} Many
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Brak Many [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=PIORUN
+Sorcery.Curative.Self=ULECZ SIEBIE
+Sorcery.Curative.Other=ULECZ INNYCH
+m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]Doswiadczenia[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
+Combat.BeastLore=[[GREEN]]**WIEDZA O ZWIERZETACH**
+Combat.BeastLoreOwner=[[DARK_AQUA]]Wlasciciel ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Zycie ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Zycie ([[GREEN]]{0}[[DARK_AQUA]]/8)
+mcMMO.Description=[[DARK_AQUA]]P: Czym jest mcMMO?,[[GOLD]]mcMMO jest [[RED]]open source'owym[[GOLD]] RPG modem korzystajacym z Bukkita, autorstwa [[BLUE]]nossr50,[[GOLD]]mcMMO dodaje wiele umiejetnosci do Minecrafta.,[[GOLD]]Mozna rowniez zbierac doswiadczenie na rozne sposoby,[[GOLD]]Najlepiej wpisac [[GREEN]]/nazwaumiejetnosci[[GOLD]] aby dowiedziec sie wiecej o niej.,[[DARK_AQUA]]P: A co robi mcMMO?,[[GOLD]]Dla przykladu, [[DARK_AQUA]]gornictwo[[GOLD]] pozwala na [[RED]]zwiekszone zyski[[GOLD]] oraz daje mozliwosc [[RED]]szybszego kopania[[GOLD]], ktore mozna [[GOLD]]aktywowac prawym przyciskiem myszy i trwa dluzej [[GOLD]]im wyzszy masz poziom. Zdobywanie poziomow w [[BLUE]]gornictwie[[GOLD]] odbywa sie przez zwyczajne wykopywanie roznych mineralow.,[[DARK_AQUA]]P: Co to wszystko daje?,[[GOLD]]Prawie wszystkie umiejetnosci w [[GREEN]]mcMMO[[GOLD]] dodaja nowe fajne rzeczy!.,[[GOLD]]Wpisujac [[GREEN]]/{0}[[GOLD]] poznasz wszystkie dostepne polecenia,[[GOLD]]Celem mcMMO jest sprawienie aby Minecraft stal sie prawie eRPeGiem.,[[DARK_AQUA]]P: Mam genialny pomysl, dodasz to!?,[[GOLD]]Napisz w temacie mcMMO na forum bukkit i zobaczymy!,[[DARK_AQUA]]Q: A jak zrobic to albo tamto?,[[RED]]CZYTAJ [[GOLD]]strone wiki moda! [[DARK_AQUA]]mcmmo.wikia.com
+Party.Locked=[[RED]]Grupa jest zamknieta, tylko wlasciciel moze dodac graczy.
+Party.IsntLocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
+Party.Unlocked=[[GRAY]]Grupa jest otwarta dla wszystkich.
+Party.Help1=[[RED]]Prawidlowe polecenie to [[YELLOW]]/{0} [[WHITE]]<nazwa>[[YELLOW]] lub [[WHITE]]'q' [[YELLOW]]aby wyjsc.
+Party.Help2=[[RED]]Aby dolaczyc do grupy zabezpieczonej haslem wpisz[[YELLOW]]/{0} [[WHITE]]<nazwa> <haslo>
+Party.Help3=[[RED]]Sprawdz /{0} ? aby dowiedziec sie wiecej.
+Party.Help4=[[RED]]Wpisz [[YELLOW]]/{0} [[WHITE]]<nazwa> [[YELLOW]]aby dolaczyc do grupy lub [[WHITE]]'q' [[YELLOW]]aby z niej wyjsc.
+Party.Help5=[[RED]]Aby zamknac grupe wpisz [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]Aby otworzyc zamknieta grupe wpisz [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]Aby zabezpieczyc grupe haslem wpisz [[YELLOW]]/{0} [[WHITE]]password <haslo>
+Party.Help8=[[RED]]Aby wyrzucic gracza z grupy wpisz [[YELLOW]]/{0} [[WHITE]]kick <imiegracza>
+Party.Help9=[[RED]]Aby przekazac wladze w grupie innej osobie wpisz [[YELLOW]]/{0} [[WHITE]]owner <imiegracza>
+Party.NotOwner=[[DARK_RED]]Nie jestes wlascicielem tej grupy.
+Party.InvalidName=[[DARK_RED]]To nie jest dozwolona nazwa grupy.
+Party.PasswordSet=[[GREEN]]Haslo grupy zmienione na: {0}
+Party.CouldNotKick=[[DARK_RED]]Nie mozna wyrzucic gracza {0}
+Party.NotInYourParty=[[DARK_RED]]{0} nie jest czlonkiem twojej grupy.
+Party.CouldNotSetOwner=[[DARK_RED]]Nie mozna przekazac grupy do {0}
+Commands.xprate.proper=[[DARK_AQUA]]Proper usage is /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Also you can type /{0} reset to turn everything back to normal
+Commands.xprate.proper3=[[RED]]Enter true or false for the second value
+Commands.xprate.over=[[RED]]mcMMO XP Rate Event is OVER!!
+Commands.xprate.started=[[GOLD]]XP EVENT FOR mcMMO HAS STARTED!
+Commands.xprate.started2=[[GOLD]]mcMMO XP RATE IS NOW {0}x!!
+Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
+Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
+Commands.xplock.invalid=[[RED]]That is not a valid skillname! Try /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 403 - 403
src/com/gmail/nossr50/locale/locale_pt_br.properties → src/main/java/com/gmail/nossr50/locale/locale_pt_br.properties

@@ -1,404 +1,404 @@
-Combat.WolfExamine=[[GREEN]]*Você examinou um lobo usando Conhecimento de Feras*
-Combat.WolfShowMaster=[[DARK_GREEN]]O Mestre das Feras \: {0}
-Combat.Ignition=[[RED]]*IGNIÇAO*
-Combat.BurningArrowHit=[[DARK_RED]]Você foi atingido por uma flecha flamejante\!
-Combat.TouchedFuzzy=[[DARK_RED]]Visao turva. Sente Tonturas.
-Combat.TargetDazed=Alvo foi [[DARK_RED]]Atordoado
-Combat.WolfNoMaster=[[GRAY]]Esse Animal nao tem um mestre...
-Combat.WolfHealth=[[GREEN]]Esse animal tem {0} de vida 
-Combat.StruckByGore=[[RED]]*ATINGIDO POR MORDIDA*
-Combat.Gore=[[GREEN]]*MORDIDA*
-Combat.ArrowDeflect=[[WHITE]]*DESVIOU A FLECHA*
-Item.ChimaeraWingFail=*ASA QUIMERA FALHOU\!*
-Item.ChimaeraWingPass=*ASA QUIMERA*
-Item.InjuredWait=Você foi ferido recentemente e tem que esperar para usar isto. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]Você precisa de mais penas...
-m.mccPartyCommands=[[GREEN]]--COMANDOS DE EQUIPES--
-m.mccParty=[party name] [[RED]]- Criar/Juntar-se a uma equipe
-m.mccPartyQ=[[RED]]- Sair da equipe atual
-m.mccPartyToggle=[[RED]] - Ligar/Desligar chat da equipe
-m.mccPartyInvite=[player name] [[RED]]- Enviar um convite
-m.mccPartyAccept=[[RED]]- Aceitar convite
-m.mccPartyTeleport=[party member name] [[RED]]- Teleportar para um membro de equipe
-m.mccOtherCommands=[[GREEN]]--OUTROS COMANDOS--
-m.mccStats=- Ver seus status
-m.mccLeaderboards=- Classificaçao
-m.mccMySpawn=- Teleportar para o spawn
-m.mccClearMySpawn=- Remove o Ponto de Spawn
-m.mccToggleAbility=- Ativa habilidades especiais com botao direito
-m.mccAdminToggle=- Ativa o chat dos admin
-m.mccWhois=[playername] [[RED]]- Ver informaçoes do jogador
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modificar atributos do jogador
-m.mccMcGod=- Modo Deus
-m.mccSkillInfo=[skillname] [[RED]]- Ver informaçoes sobre a habilidade
-m.mccModDescription=[[RED]]- Breve descriçao do Mod
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]COMO GANHA XP: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=EFEITOS
-m.YourStats=SUAS ESTATISTICAS
-m.SkillTaming=DOMESTICAR
-m.XPGainTaming=Ataque com um lobo
-m.EffectsTaming1_0=Conhecimento de Feras
-m.EffectsTaming1_1=Inspeciona um lobo com um osso
-m.EffectsTaming2_0=Mordida
-m.EffectsTaming2_1=Ataque crítico que causa hemorragia
-m.EffectsTaming3_0=Garras afiadas
-m.EffectsTaming3_1=Bônus de Dano
-m.EffectsTaming4_0=Consciência do Ambiente
-m.EffectsTaming4_1=Medo de Cactos e Lava, Imune a Dano por queda
-m.EffectsTaming5_0=Pele Grossa
-m.EffectsTaming5_1=Reduçao nos Danos, Resistência ao fogo
-m.EffectsTaming6_0=A Prova de Choque
-m.EffectsTaming6_1=Reduz danos tomados com explosivos
-m.AbilLockTaming1=DESBLOQUEIE NO NIVEL 100 (Conciência do ambiente)
-m.AbilLockTaming2=DESBLOQUEIE NO NIVEL 250 (Pele grossa)
-m.AbilLockTaming3=DESBLOQUEIE NO NIVEL 500 (A prova de choque)
-m.AbilLockTaming4=DESBLOQUEIE NO NIVEL 750 (Garras afiadas)
-m.AbilBonusTaming1_0=Conciência do ambiente
-m.AbilBonusTaming1_1=Lobos evitam perigo
-m.AbilBonusTaming2_0=Pele grossa
-m.AbilBonusTaming2_1=Danos pela metade, Resistência ao fogo
-m.AbilBonusTaming3_0=A prova de choque
-m.AbilBonusTaming3_1=Explosivos causam 1/6 do dano normal
-m.AbilBonusTaming4_0=Garras afiadas
-m.AbilBonusTaming4_1=+2 Dano
-m.TamingGoreChance=[[RED]]Chance de Mordida: [[YELLOW]]{0}%
-
-m.SkillWoodCutting=LENHADOR
-m.XPGainWoodCutting=Cortando árvores
-m.EffectsWoodCutting1_0=Derrubador de árvores (HABILIDADE ESPECIAL)
-m.EffectsWoodCutting1_1=Explode árvores 
-m.EffectsWoodCutting2_0=Soprador de Folhas
-m.EffectsWoodCutting2_1=Destrói folhas rapidamente
-m.EffectsWoodCutting3_0=Drop x2
-m.EffectsWoodCutting3_1=Dobra a quantidade de item dropados
-m.AbilLockWoodCutting1=DESBLOQUEIE NO NIVEL 100 (SOPRADOR DE FOLHAS)
-m.AbilBonusWoodCutting1_0=Soprador de Folhas
-m.AbilBonusWoodCutting1_1=Destrói folhas rapidamente
-m.WoodCuttingDoubleDropChance=[[RED]]Chance de Drop x2: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Duraçao do Derrubador de árvores: [[YELLOW]]{0}s
-
-m.SkillArchery=ARCO E FLECHA
-m.XPGainArchery=Atacando monstros/
-m.EffectsArchery1_0=Igniçao
-m.EffectsArchery1_1=25% de chance dos inimigos pegarem fogo
-m.EffectsArchery2_0=Atordoar (Jogadores)
-m.EffectsArchery2_1=Desorienta os adversários
-m.EffectsArchery3_0=+Dano
-m.EffectsArchery3_1=Aumenta o Dano
-m.EffectsArchery4_0=Recuperar Flechas
-m.EffectsArchery4_1=Chance de recuperar flechas de corpos
-m.ArcheryDazeChance=[[RED]]Chance de atordoar: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Chance de recuperar flechas: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Duraçao da Igniçao: [[YELLOW]]{0}s
-m.ArcheryDamagePlus=[[RED]]+Dano (Rank{0}): [[YELLOW]]Bonus de {0} dano
-
-m.SkillAxes=MACHADOS
-m.XPGainAxes=Atacando monstros
-m.EffectsAxes1_0=Rachador de Crânios (HABILIDADE ESPECIAL)
-m.EffectsAxes1_1=Causa Danos em Area
-m.EffectsAxes2_0=Ataques Críticos
-m.EffectsAxes2_1=Dobra o Dano
-m.EffectsAxes3_0=Mestre com Machados (NIVEL 500)
-m.EffectsAxes3_1=Aumenta o Dano
-m.AbilLockAxes1=DESBLOQUEIE NO NIVEL 500 (Mestre com Machados)
-m.AbilBonusAxes1_0=Mestre com Machados/
-m.AbilBonusAxes1_1=Bônus de 4 de dano
-m.AxesCritChance=[[RED]]Chance ataque crítico: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Duraçao do Rachador de Crânios: [[YELLOW]]{0}s
-
-m.SkillSwords=ESPADAS
-m.XPGainSwords=Atacando monstros
-m.EffectsSwords1_0=Contra-Ataque
-m.EffectsSwords1_1=Retorna 50% do dano tomado
-m.EffectsSwords2_0=Ataques Cortantes (HABILIDADE ESPECIAL)
-m.EffectsSwords2_1=25% de Danos em Area, e Efeito de Hemorraria
-m.EffectsSwords3_0=Ataque Cortante com Hemorragia
-m.EffectsSwords3_1=5 Sangramentos
-m.EffectsSwords4_0=Desviar
-m.EffectsSwords4_1=Anula o Dano
-m.EffectsSwords5_0=Hemorragia
-m.EffectsSwords5_1=Causa sangramentos repetidos ao longo do tempo
-m.SwordsCounterAttChance=[[RED]]Chance de Contra-Ataque: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Duraçao da Hemorragia: [[YELLOW]]{0} ticks
-m.SwordsBleedChance=[[RED]]Chance de Hemorragia: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Chance de Desviar: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Duraçao do Ataques Cortantes: [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]NOTA: [[YELLOW]]1 sangramento a cada 2 segundos
-
-m.SkillAcrobatics=ACROBACIA
-m.XPGainAcrobatics=Caindo
-m.EffectsAcrobatics1_0=Rolar
-m.EffectsAcrobatics1_1=Reduz ou anula o dano
-m.EffectsAcrobatics2_0=Rolar com estilo
-m.EffectsAcrobatics2_1=2 vezes mais efetivo de que "Rolar"
-m.EffectsAcrobatics3_0=Esquivar
-m.EffectsAcrobatics3_1=Reduz o dano pela metade
-m.AcrobaticsRollChance=[[RED]]Chance de Rolar: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Chance de Rolar com estilo: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Chance de Esquivar: [[YELLOW]]{0}%
-
-m.SkillMining=MINERAÇAO
-m.XPGainMining=Minerando Pedras e Minérios
-m.EffectsMining1_0=Super Britadeira (HABILIDADE ESPECIAL)
-m.EffectsMining1_1=+ Velocidade, Chance de Drop x3
-m.EffectsMining2_0=Drop x2
-m.EffectsMining2_1=Dobra a quantia de itens obtidos minerando
-m.MiningDoubleDropChance=[[RED]]Chance de D/rop x2: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Duraçao da Super Britadeira: [[YELLOW]]{0}s
-
-m.SkillRepair=REPARAÇAO
-m.XPGainRepair=Reparando itens
-m.EffectsRepair1_0=Reparar
-m.EffectsRepair1_1=Reparando Ferramentas e Armaduras de Ferro
-m.EffectsRepair2_0=Mestre em Raparaçao
-m.EffectsRepair2_1=Aumenta a quantia reparada
-m.EffectsRepair3_0=Super Reparaçao
-m.EffectsRepair3_1=Dobra a efetividade da Reparaçao
-m.EffectsRepair4_0=Reparaçao de diamantes (Nível {0})
-m.EffectsRepair4_1=Rapara Ferramentas e Armaduras de Diamante
-m.RepairRepairMastery=[[RED]]Mestre em Raparaçao: [[YELLOW]]{0}% extra restaurado
-m.RepairSuperRepairChance=[[RED]]Chance de Super Reparaçao: [[YELLOW]]{0}%
-
-m.SkillUnarmed=DESARMADO
-m.XPGainUnarmed=Atacando monstros
-m.EffectsUnarmed1_0=Fúria (HABILIDADE ESPECIAL)
-m.EffectsUnarmed1_1=+50% de Dano, Quebra materiais frágeis
-m.EffectsUnarmed2_0=Desarmar (Jogadores)
-m.EffectsUnarmed2_1=Derruba a arma que o adversário está segurando
-m.EffectsUnarmed3_0=Mestre do Desarmamento
-m.EffectsUnarmed3_1=Aumenta muito o Dano
-m.EffectsUnarmed4_0=Aprendiz do Desarmamento
-m.EffectsUnarmed4_1=Aumenta o Dano
-m.EffectsUnarmed5_0=Desviar Flechas
-m.EffectsUnarmed5_1=Desvia Flechas jogadas em você
-m.AbilLockUnarmed1=DESBLOQUEIE NO NIVEL 250 (APRENDIZ DE DESARMAMENTO)
-m.AbilLockUnarmed2=DESBLOQUEIE NO NIVEL 500 (MESTRE DE DESARMAMENTO)
-m.AbilBonusUnarmed1_0=Aprendiz do Desarmamento
-m.AbilBonusUnarmed1_1=+2 de Danos
-m.AbilBonusUnarmed2_0=Mestre do Desarmamento
-m.AbilBonusUnarmed2_1=+4 de Danos
-m.UnarmedArrowDeflectChance=[[RED]]Chance de Desviar Flechas: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Chance de Desarmar: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Duraçao da Fúria: [[YELLOW]]{0}s
-
-m.SkillHerbalism=HERBALISMO
-m.XPGainHerbalism=Colhendo Ervas
-m.EffectsHerbalism1_0=Green Terra (HABILIDADE ESPECIAL)
-m.EffectsHerbalism1_1=EXP x3, Drop x3
-m.EffectsHerbalism2_0=Dedos Verdes (Trigo)
-m.EffectsHerbalism2_1=Planta automaticamente, ao colher trigo
-m.EffectsHerbalism3_0=Dedos Verdes (Pedras)
-m.EffectsHerbalism3_1=Transforma Cobblestone em Moss Stone (usa sementes)
-m.EffectsHerbalism4_0=Comida+
-m.EffectsHerbalism4_1=Aumenta a vida recebida comendo pao ou sopa
-m.EffectsHerbalism5_0=Drop x2 (Todas Ervas)
-m.EffectsHerbalism5_1=Dobra a quantia de itens obtidos colhendo
-m.HerbalismGreenTerraLength=[[RED]]Duraçao do Green Terra: [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Chance do Dedos Verdes: [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Nível do Dedos Verdes: [[YELLOW]] Trigo Cresce no Nível {0}
-m.HerbalismDoubleDropChance=[[RED]]Chance de Drop x2: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Comida+ (Rank{0}): [[YELLOW]]Bônus de {0} de vida
-
-m.SkillExcavation=ESCAVAÇAO
-m.XPGainExcavation=Cavando e encontrando tesouros
-m.EffectsExcavation1_0=Super Broca (HABILIDADE ESPECIAL)
-m.EffectsExcavation1_1=Drop x3, EXP x3, mais velocidade
-m.EffectsExcavation2_0=Caçad/or de Tesouros
-m.EffectsExcavation2_1=Encontra itens raros enquanto cava
-m.ExcavationGreenTerraLength=[[RED]]Duraçao da Super Broca: [[YELLOW]]{0}s
-
-mcBlockListener.PlacedAnvil=[[DARK_RED]] Você colocou uma bigorna, a bigorna pode reparar ferramentas e armaduras.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Seu lobo voltou para você...
-mcPlayerListener.AbilitiesOff=Habilidade especial desabilitada
-mcPlayerListener.AbilitiesOn=Habilidade especial ativada
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]*HABILIDAE DISPONIVEL\!*
-mcPlayerListener.AcrobaticsSkill=Acrobacia (Acrobatics): 
-mcPlayerListener.ArcherySkill=Arqueiro (Archery): 
-mcPlayerListener.AxesSkill=Machado (Axes): 
-mcPlayerListener.ExcavationSkill=Escavaçao (Excavation): 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Modo Deus Desabilitado
-mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Modo Deus Ativo
-mcPlayerListener.GreenThumb=[[GREEN]]*DEDOS VERDES*
-mcPlayerListener.GreenThumbFail=[[RED]]*DEDOS VERDES FALHOU*
-mcPlayerListener.HerbalismSkill=Herbalismo (Herbalism): 
-mcPlayerListener.MiningSkill=Mineraçao (Mining): 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Ponto de Spawn foi apagado.
-mcPlayerListener.MyspawnNotExist=[[RED]]Primeiro crie um spawn durmindo na cama.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Spawn foi gravado neste local.
-mcPlayerListener.MyspawnTimeNotice=Você precisa esperar {0}m {1}s para usar "myspawn"
-mcPlayerListener.NoPermission=Nao tem permissao para realizar esta açao.
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Se você nao tem acesso a uma habilidade, ela nao será exibida aqui.
-mcPlayerListener.NotInParty=[[RED]]Você nao está em nenhuma equipe.
-mcPlayerListener.InviteSuccess=[[GREEN]]Convite enviado.
-mcPlayerListener.ReceivedInvite1=[[RED]]ALERTA: [[GREEN]]Você recebeu um convite do {1} para a equipe {0}.
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Digite [[GREEN]]/{0}[[YELLOW]] para aceitar o convite 
-mcPlayerListener.InviteAccepted=[[GREEN]]Convite aceito. Você se juntou a equipe {0}
-mcPlayerListener.NoInvites=[[RED]]Você nao tem convites pendentes.
-mcPlayerListener.YouAreInParty=[[GREEN]]Você está na equipe {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Membros da Equipe
-mcPlayerListener.LeftParty=[[RED]]Você saiu da equipe
-mcPlayerListener.JoinedParty=Sua Equipe: {0}
-mcPlayerListener.PartyChatOn=Chat da Equipe [[GREEN]]On
-mcPlayerListener.PartyChatOff=Chat da Equipe [[RED]]Off
-mcPlayerListener.AdminChatOn=Chat do Admin [[GREEN]]On
-mcPlayerListener.AdminChatOff=Chat do Admin [[RED]]Off
-mcPlayerListener.MOTD=[[BLUE]]Esse Server está rodando o mcMMO {0} digite [[YELLOW]]/{1}[[BLUE]] para obter ajuda.
-mcPlayerListener.WIKI=[[BLUE]]Para mais informaçoes - [[GREEN]]http://mcmmo.wikia.com
-mcPlayerListener.PowerLevel=[[RED]]NIVEL TOTAL: 
-mcPlayerListener.PowerLevelLeaderboard=[[BLUE]]-Classificaçao - [[GREEN]]Nível - [[WHITE]]Jogador-
-mcPlayerListener.SkillLeaderboard=[[BLUE]]-Classificaçao em [[GREEN]]{0}
-mcPlayerListener.RepairSkill=Reparaçao (Repair): 
-mcPlayerListener.SwordsSkill=Espadas (Swords): 
-mcPlayerListener.TamingSkill=Domar (Taming): 
-mcPlayerListener.UnarmedSkill=Desarmado (Unarmed): 
-mcPlayerListener.WoodcuttingSkill=Lenhador (Woodcutting): 
-mcPlayerListener.YourStats=[[GREEN]][mcMMO] Estatísticas
-Party.InformedOnJoin={0} [[GREEN]] entrou na equipe
-Party.InformedOnQuit={0} [[GREEN]] saiu da equipe
-
-Skills.YourGreenTerra=[[GREEN]]Sua habilidade [[YELLOW]]Green Terra [[GREEN]]está disponível!
-Skills.YourTreeFeller=[[GREEN]]Sua habilidade [[YELLOW]]Derrubador de Arvores [[GREEN]]está disponível!
-Skills.YourSuperBreaker=[[GREEN]]Sua habilidade [[YELLOW]]Super Britadeira [[GREEN]]está disponível!
-Skills.YourSerratedStrikes=[[GREEN]]Sua habilidade [[YELLOW]]Ataques Cortantes [[GREEN]]está disponível!
-Skills.YourBerserk=[[GREEN]]Sua habilidade [[YELLOW]]Fúria [[GREEN]]está disponível!
-Skills.YourSkullSplitter=[[GREEN]]Sua habilidade [[YELLOW]]Rachador de Crânios [[GREEN]]está disponível!
-Skills.YourGigaDrillBreaker=[[GREEN]]Sua habilidade [[YELLOW]]Super Broca [[GREEN]]está disponível!
-Skills.TooTired=[[RED]]Você está cansado pra usar essa habilidade.
-Skills.ReadyHoe=[[GREEN]]*ENXADA PRONTA PARA USAR GREEN TERRA*
-Skills.LowerHoe=[[GRAY]]*DESCARREGOU A ENXADA*
-Skills.ReadyAxe=[[GREEN]]*MACHADO PRONTO PARA USAR DERRUBADOR DE ARVORES*
-Skills.LowerAxe=[[GRAY]]*DESCARREGOU O MACHADO*
-Skills.ReadyFists=[[GREEN]]*PUNHO PRONTO PARA USAR FURIA*
-Skills.LowerFists=[[GRAY]]*DESCARREGOU O PUNHO*
-Skills.ReadyPickAxe=[[GREEN]]*PICARETA PRONTA PARA USAR SUPER BRITADEIRA*
-Skills.LowerPickAxe=[[GRAY]]*DESCARREGOU A PICARETA*
-Skills.ReadyShovel=[[GREEN]]*PA PRONTA PARA USAR SUPER BROCA*
-Skills.LowerShovel=[[GRAY]]*DESCARREGOU A PA*
-Skills.ReadySword=[[GREEN]]*ESPADA PRONTA PARA USAR ATAQUES CORTANTES*
-Skills.LowerSword=[[GRAY]]*DESCARREGOU A ESPADA*
-Skills.BerserkOn=[[GREEN]]*FURIA ATIVADA*
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] Usou a [[RED]]Fúria!
-Skills.GreenTerraOn=[[GREEN]]*GREEN TERRA ATIVADO*
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Green Terra!
-Skills.TreeFellerOn=[[GREEN]]*DERRUBADOR E ARVORES ATIVADO*
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Tree Feller!
-Skills.SuperBreakerOn=[[GREEN]]*SUPER BRITADEIRA ATIVADA*
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Super Britadeira!
-Skills.SerratedStrikesOn=[[GREEN]]*ATAQUES CORTANTES ATIVADO*
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Ataques Cortantes!
-Skills.SkullSplitterOn=[[GREEN]]*RACHADOR DE CRANIOS ATIVADO*
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Rachador de Crânios!
-Skills.GigaDrillBreakerOn=[[GREEN]]*SUPER BROCA ATIVADO*
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Super Broca!
-Skills.GreenTerraOff=[[RED]]*Green Terra acabou*
-Skills.TreeFellerOff=[[RED]]*Derrubador de Arvores acabou*
-Skills.SuperBreakerOff=[[RED]]*Super Britadeira acabou*
-Skills.SerratedStrikesOff=[[RED]]*Ataques Cortantes acabou*
-Skills.BerserkOff=[[RED]]*Fúria acabou*
-Skills.SkullSplitterOff=[[RED]]*Rachador de Crânios acabou*
-Skills.GigaDrillBreakerOff=[[RED]]*Super Broca acabou*
-Skills.TamingUp=[[YELLOW]]Habilidade de Domar aumentada em {0}. Total ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Habilidade Acrobacia aumentada em {0}. Total ({1})
-Skills.ArcheryUp=[[YELLOW]]Habilidade de Arqueiro aumentada em {0}. Total ({1})
-Skills.SwordsUp=[[YELLOW]]Habilidade com Espadas aumentada em {0}. Total ({1})
-Skills.AxesUp=[[YELLOW]]Habilidade com Machados aumentada em {0}. Total ({1})
-Skills.UnarmedUp=[[YELLOW]]Habilidade Desarmado aumentada em {0}. Total ({1})
-Skills.HerbalismUp=[[YELLOW]]Habilidade Herbalismo aumentada em {0}. Total ({1})
-Skills.MiningUp=[[YELLOW]]Habilidade de Mineraçao aumentada em {0}. Total ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Habilidade de Lenhador aumentada em {0}. Total ({1})
-Skills.RepairUp=[[YELLOW]]Habilidade de Reparaçao aumentada em {0}. Total ({1})
-Skills.ExcavationUp=[[YELLOW]]Habilidade de Escavaçao aumentada em {0}. Total ({1})
-Skills.FeltEasy=[[GRAY]]Essa foi fácil.
-Skills.StackedItems=[[DARK_RED]]Nao pode reparar itens empilhados juntos.
-Skills.NeedMore=[[DARK_RED]]Você precisa de mais
-Skills.AdeptDiamond=[[DARK_RED]]Você nao tem o nível necessário para reparar Diamante
-Skills.FullDurability=[[GRAY]]Já está com Durabilidade cheia.
-Skills.Disarmed=[[DARK_RED]]Você foi Desarmado!
-mcPlayerListener.SorcerySkill=Feitiçaria (Sorcery): 
-
-m.SkillSorcery=FEITIÇARIA
-Sorcery.HasCast=[[GREEN]]*CASTING*[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]]MP
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} MP
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Sem Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=TROVAO
-Sorcery.Curative.Self=CURAR-SE
-Sorcery.Curative.Other=CURAR AMIGOS
-
-m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
-Combat.BeastLore=[[GREEN]]*CONHECIMENTO DE FERAS*
-Combat.BeastLoreOwner=[[DARK_AQUA]]Dono ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Vida ([[GREEN]]{0}[[DARK_AQUA]]/8)
-mcMMO.Description=[[DARK_AQUA]]Q: O QUE E? [[GOLD]]mcMMO é um mod [[RED]]OPEN SOURCE[[GOLD]] de RPG para a plataforma "Bukkit" feito por [[BLUE]]nossr50.[[GOLD]] Ele acresenta uma série de habilidades ao Minecraft. [[GOLD]]Você pode ganhar experiência de muitas maneiras.,[[GOLD]]Digite [[GREEN]]/NOME_DA_HABILIDADE[[GOLD]] para obter informaçoes sobre a habilidade.,[[DARK_AQUA]]Q: O QUE ELE FAZ? [[GOLD]]Por exemplo... em [[DARK_AQUA]]Mineraçao[[GOLD]] você receberá benefícios tais como [[RED]]Drop x2[[GOLD]] ou a habilidade [[RED]]Super Esmagador.[[GOLD]] que quando ativada com o clique direito permite minerar rapidamente durante sua duraçao. [[GOLD]]que depende do nível da sua habilidade. Aumentar o nível de [[BLUE]]Mineraçao[[GOLD]] é simples. basta minerar pedras ou minérios!,[[GOLD]]O objetivo do mcMMO é criar uma experiência de RPG de qualidade.,[[GOLD]]Digite [[GREEN]]/{0}[[GOLD]] para uma lista de comandos possíveis.,[[DARK_AQUA]]Q: ONDE POSSO SUGERIR IDEIAS!?,[[GOLD]]No tópico do mcMMO no fórum bukkit! (www.bit.ly/MCmmoIDEA),[[DARK_AQUA]]Q: Para mais informaçoes. leia a wiki do McMMO: [[RED]]mcmmo.wikia.com
-Party.Locked=[[RED]]Equipe está trancada, só o líder pode convidar.
-Party.IsntLocked=[[GRAY]]Equipe nao está trancada
-Party.Unlocked=[[GRAY]]Equipe foi Destrancada
-Party.Help1=[[RED]]O uso certo é [[YELLOW]]/{0} [[WHITE]]<nome>[[YELLOW]] ou [[WHITE]]'q' [[YELLOW]]para sair
-Party.Help2=[[RED]]Para entrar em uma equipe com senha use [[YELLOW]]/{0} [[WHITE]]<nome> <senha>
-Party.Help3=[[RED]]Consulte /{0} ? para mais informaçoes
-Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<nome> [[YELLOW]]para entrar em uma equipe ou [[WHITE]]'q' [[YELLOW]]para sair
-Party.Help5=[[RED]]Para trancar sua equipe use [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]Para destrancar sua equipe use [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]Para colocar senha na sua equipe use [[YELLOW]]/{0} [[WHITE]]password <password>
-Party.Help8=[[RED]]Para excluir um jogador da equipe use [[YELLOW]]/{0} [[WHITE]]kick <player>
-Party.Help9=[[RED]]Para transferir a liderança da equipe use [[YELLOW]]/{0} [[WHITE]]owner <player>
-Party.NotOwner=[[DARK_RED]]Você nao é o líder da equipe
-Party.InvalidName=[[DARK_RED]]Este nome nao é valido
-Party.PasswordSet=[[GREEN]]Senha da equipe: {0}
-Party.CouldNotKick=[[DARK_RED]]Nao foi possível excluir o jogador {0}
-Party.NotInYourParty=[[DARK_RED]]{0} nao está na sua equipe
-Party.CouldNotSetOwner=[[DARK_RED]]Nao foi possível passar a liderança para {0}
-Commands.xprate.proper=[[DARK_AQUA]]Uso certo é /{0} [integer] [true:false]
-Commands.xprate.proper2=[[DARK_AQUA]]Também pode digitar /{0} reset para voltar tudo ao padrao
-Commands.xprate.proper3=[[RED]]Enter true or false for the second value
-Commands.xprate.over=[[RED]]Evento de XP Rate acabou!!
-Commands.xprate.started=[[GOLD]]EVENTO DE XP COMEÇOU!
-Commands.xprate.started2=[[GOLD]]XP RATE AGORA é {0}x!!
-Commands.xplock.locked=[[GOLD]]Sua barra de XP BAR está travada em {0}!
-Commands.xplock.unlocked=[[GOLD]]Sua barra de XP foi [[GREEN]]DESTRAVADA[[GOLD]]!
-Commands.xplock.invalid=[[RED]]Nao existe habilidade com esse nome! Tente /xplock mining
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]*Você examinou um lobo usando Conhecimento de Feras*
+Combat.WolfShowMaster=[[DARK_GREEN]]O Mestre das Feras \: {0}
+Combat.Ignition=[[RED]]*IGNIÇAO*
+Combat.BurningArrowHit=[[DARK_RED]]Você foi atingido por uma flecha flamejante\!
+Combat.TouchedFuzzy=[[DARK_RED]]Visao turva. Sente Tonturas.
+Combat.TargetDazed=Alvo foi [[DARK_RED]]Atordoado
+Combat.WolfNoMaster=[[GRAY]]Esse Animal nao tem um mestre...
+Combat.WolfHealth=[[GREEN]]Esse animal tem {0} de vida 
+Combat.StruckByGore=[[RED]]*ATINGIDO POR MORDIDA*
+Combat.Gore=[[GREEN]]*MORDIDA*
+Combat.ArrowDeflect=[[WHITE]]*DESVIOU A FLECHA*
+Item.ChimaeraWingFail=*ASA QUIMERA FALHOU\!*
+Item.ChimaeraWingPass=*ASA QUIMERA*
+Item.InjuredWait=Você foi ferido recentemente e tem que esperar para usar isto. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]Você precisa de mais penas...
+m.mccPartyCommands=[[GREEN]]--COMANDOS DE EQUIPES--
+m.mccParty=[party name] [[RED]]- Criar/Juntar-se a uma equipe
+m.mccPartyQ=[[RED]]- Sair da equipe atual
+m.mccPartyToggle=[[RED]] - Ligar/Desligar chat da equipe
+m.mccPartyInvite=[player name] [[RED]]- Enviar um convite
+m.mccPartyAccept=[[RED]]- Aceitar convite
+m.mccPartyTeleport=[party member name] [[RED]]- Teleportar para um membro de equipe
+m.mccOtherCommands=[[GREEN]]--OUTROS COMANDOS--
+m.mccStats=- Ver seus status
+m.mccLeaderboards=- Classificaçao
+m.mccMySpawn=- Teleportar para o spawn
+m.mccClearMySpawn=- Remove o Ponto de Spawn
+m.mccToggleAbility=- Ativa habilidades especiais com botao direito
+m.mccAdminToggle=- Ativa o chat dos admin
+m.mccWhois=[playername] [[RED]]- Ver informaçoes do jogador
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modificar atributos do jogador
+m.mccMcGod=- Modo Deus
+m.mccSkillInfo=[skillname] [[RED]]- Ver informaçoes sobre a habilidade
+m.mccModDescription=[[RED]]- Breve descriçao do Mod
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]COMO GANHA XP: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=EFEITOS
+m.YourStats=SUAS ESTATISTICAS
+m.SkillTaming=DOMESTICAR
+m.XPGainTaming=Ataque com um lobo
+m.EffectsTaming1_0=Conhecimento de Feras
+m.EffectsTaming1_1=Inspeciona um lobo com um osso
+m.EffectsTaming2_0=Mordida
+m.EffectsTaming2_1=Ataque crítico que causa hemorragia
+m.EffectsTaming3_0=Garras afiadas
+m.EffectsTaming3_1=Bônus de Dano
+m.EffectsTaming4_0=Consciência do Ambiente
+m.EffectsTaming4_1=Medo de Cactos e Lava, Imune a Dano por queda
+m.EffectsTaming5_0=Pele Grossa
+m.EffectsTaming5_1=Reduçao nos Danos, Resistência ao fogo
+m.EffectsTaming6_0=A Prova de Choque
+m.EffectsTaming6_1=Reduz danos tomados com explosivos
+m.AbilLockTaming1=DESBLOQUEIE NO NIVEL 100 (Conciência do ambiente)
+m.AbilLockTaming2=DESBLOQUEIE NO NIVEL 250 (Pele grossa)
+m.AbilLockTaming3=DESBLOQUEIE NO NIVEL 500 (A prova de choque)
+m.AbilLockTaming4=DESBLOQUEIE NO NIVEL 750 (Garras afiadas)
+m.AbilBonusTaming1_0=Conciência do ambiente
+m.AbilBonusTaming1_1=Lobos evitam perigo
+m.AbilBonusTaming2_0=Pele grossa
+m.AbilBonusTaming2_1=Danos pela metade, Resistência ao fogo
+m.AbilBonusTaming3_0=A prova de choque
+m.AbilBonusTaming3_1=Explosivos causam 1/6 do dano normal
+m.AbilBonusTaming4_0=Garras afiadas
+m.AbilBonusTaming4_1=+2 Dano
+m.TamingGoreChance=[[RED]]Chance de Mordida: [[YELLOW]]{0}%
+
+m.SkillWoodCutting=LENHADOR
+m.XPGainWoodCutting=Cortando árvores
+m.EffectsWoodCutting1_0=Derrubador de árvores (HABILIDADE ESPECIAL)
+m.EffectsWoodCutting1_1=Explode árvores 
+m.EffectsWoodCutting2_0=Soprador de Folhas
+m.EffectsWoodCutting2_1=Destrói folhas rapidamente
+m.EffectsWoodCutting3_0=Drop x2
+m.EffectsWoodCutting3_1=Dobra a quantidade de item dropados
+m.AbilLockWoodCutting1=DESBLOQUEIE NO NIVEL 100 (SOPRADOR DE FOLHAS)
+m.AbilBonusWoodCutting1_0=Soprador de Folhas
+m.AbilBonusWoodCutting1_1=Destrói folhas rapidamente
+m.WoodCuttingDoubleDropChance=[[RED]]Chance de Drop x2: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Duraçao do Derrubador de árvores: [[YELLOW]]{0}s
+
+m.SkillArchery=ARCO E FLECHA
+m.XPGainArchery=Atacando monstros/
+m.EffectsArchery1_0=Igniçao
+m.EffectsArchery1_1=25% de chance dos inimigos pegarem fogo
+m.EffectsArchery2_0=Atordoar (Jogadores)
+m.EffectsArchery2_1=Desorienta os adversários
+m.EffectsArchery3_0=+Dano
+m.EffectsArchery3_1=Aumenta o Dano
+m.EffectsArchery4_0=Recuperar Flechas
+m.EffectsArchery4_1=Chance de recuperar flechas de corpos
+m.ArcheryDazeChance=[[RED]]Chance de atordoar: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Chance de recuperar flechas: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Duraçao da Igniçao: [[YELLOW]]{0}s
+m.ArcheryDamagePlus=[[RED]]+Dano (Rank{0}): [[YELLOW]]Bonus de {0} dano
+
+m.SkillAxes=MACHADOS
+m.XPGainAxes=Atacando monstros
+m.EffectsAxes1_0=Rachador de Crânios (HABILIDADE ESPECIAL)
+m.EffectsAxes1_1=Causa Danos em Area
+m.EffectsAxes2_0=Ataques Críticos
+m.EffectsAxes2_1=Dobra o Dano
+m.EffectsAxes3_0=Mestre com Machados (NIVEL 500)
+m.EffectsAxes3_1=Aumenta o Dano
+m.AbilLockAxes1=DESBLOQUEIE NO NIVEL 500 (Mestre com Machados)
+m.AbilBonusAxes1_0=Mestre com Machados/
+m.AbilBonusAxes1_1=Bônus de 4 de dano
+m.AxesCritChance=[[RED]]Chance ataque crítico: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Duraçao do Rachador de Crânios: [[YELLOW]]{0}s
+
+m.SkillSwords=ESPADAS
+m.XPGainSwords=Atacando monstros
+m.EffectsSwords1_0=Contra-Ataque
+m.EffectsSwords1_1=Retorna 50% do dano tomado
+m.EffectsSwords2_0=Ataques Cortantes (HABILIDADE ESPECIAL)
+m.EffectsSwords2_1=25% de Danos em Area, e Efeito de Hemorraria
+m.EffectsSwords3_0=Ataque Cortante com Hemorragia
+m.EffectsSwords3_1=5 Sangramentos
+m.EffectsSwords4_0=Desviar
+m.EffectsSwords4_1=Anula o Dano
+m.EffectsSwords5_0=Hemorragia
+m.EffectsSwords5_1=Causa sangramentos repetidos ao longo do tempo
+m.SwordsCounterAttChance=[[RED]]Chance de Contra-Ataque: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Duraçao da Hemorragia: [[YELLOW]]{0} ticks
+m.SwordsBleedChance=[[RED]]Chance de Hemorragia: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Chance de Desviar: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Duraçao do Ataques Cortantes: [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]NOTA: [[YELLOW]]1 sangramento a cada 2 segundos
+
+m.SkillAcrobatics=ACROBACIA
+m.XPGainAcrobatics=Caindo
+m.EffectsAcrobatics1_0=Rolar
+m.EffectsAcrobatics1_1=Reduz ou anula o dano
+m.EffectsAcrobatics2_0=Rolar com estilo
+m.EffectsAcrobatics2_1=2 vezes mais efetivo de que "Rolar"
+m.EffectsAcrobatics3_0=Esquivar
+m.EffectsAcrobatics3_1=Reduz o dano pela metade
+m.AcrobaticsRollChance=[[RED]]Chance de Rolar: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Chance de Rolar com estilo: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Chance de Esquivar: [[YELLOW]]{0}%
+
+m.SkillMining=MINERAÇAO
+m.XPGainMining=Minerando Pedras e Minérios
+m.EffectsMining1_0=Super Britadeira (HABILIDADE ESPECIAL)
+m.EffectsMining1_1=+ Velocidade, Chance de Drop x3
+m.EffectsMining2_0=Drop x2
+m.EffectsMining2_1=Dobra a quantia de itens obtidos minerando
+m.MiningDoubleDropChance=[[RED]]Chance de D/rop x2: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Duraçao da Super Britadeira: [[YELLOW]]{0}s
+
+m.SkillRepair=REPARAÇAO
+m.XPGainRepair=Reparando itens
+m.EffectsRepair1_0=Reparar
+m.EffectsRepair1_1=Reparando Ferramentas e Armaduras de Ferro
+m.EffectsRepair2_0=Mestre em Raparaçao
+m.EffectsRepair2_1=Aumenta a quantia reparada
+m.EffectsRepair3_0=Super Reparaçao
+m.EffectsRepair3_1=Dobra a efetividade da Reparaçao
+m.EffectsRepair4_0=Reparaçao de diamantes (Nível {0})
+m.EffectsRepair4_1=Rapara Ferramentas e Armaduras de Diamante
+m.RepairRepairMastery=[[RED]]Mestre em Raparaçao: [[YELLOW]]{0}% extra restaurado
+m.RepairSuperRepairChance=[[RED]]Chance de Super Reparaçao: [[YELLOW]]{0}%
+
+m.SkillUnarmed=DESARMADO
+m.XPGainUnarmed=Atacando monstros
+m.EffectsUnarmed1_0=Fúria (HABILIDADE ESPECIAL)
+m.EffectsUnarmed1_1=+50% de Dano, Quebra materiais frágeis
+m.EffectsUnarmed2_0=Desarmar (Jogadores)
+m.EffectsUnarmed2_1=Derruba a arma que o adversário está segurando
+m.EffectsUnarmed3_0=Mestre do Desarmamento
+m.EffectsUnarmed3_1=Aumenta muito o Dano
+m.EffectsUnarmed4_0=Aprendiz do Desarmamento
+m.EffectsUnarmed4_1=Aumenta o Dano
+m.EffectsUnarmed5_0=Desviar Flechas
+m.EffectsUnarmed5_1=Desvia Flechas jogadas em você
+m.AbilLockUnarmed1=DESBLOQUEIE NO NIVEL 250 (APRENDIZ DE DESARMAMENTO)
+m.AbilLockUnarmed2=DESBLOQUEIE NO NIVEL 500 (MESTRE DE DESARMAMENTO)
+m.AbilBonusUnarmed1_0=Aprendiz do Desarmamento
+m.AbilBonusUnarmed1_1=+2 de Danos
+m.AbilBonusUnarmed2_0=Mestre do Desarmamento
+m.AbilBonusUnarmed2_1=+4 de Danos
+m.UnarmedArrowDeflectChance=[[RED]]Chance de Desviar Flechas: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Chance de Desarmar: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Duraçao da Fúria: [[YELLOW]]{0}s
+
+m.SkillHerbalism=HERBALISMO
+m.XPGainHerbalism=Colhendo Ervas
+m.EffectsHerbalism1_0=Green Terra (HABILIDADE ESPECIAL)
+m.EffectsHerbalism1_1=EXP x3, Drop x3
+m.EffectsHerbalism2_0=Dedos Verdes (Trigo)
+m.EffectsHerbalism2_1=Planta automaticamente, ao colher trigo
+m.EffectsHerbalism3_0=Dedos Verdes (Pedras)
+m.EffectsHerbalism3_1=Transforma Cobblestone em Moss Stone (usa sementes)
+m.EffectsHerbalism4_0=Comida+
+m.EffectsHerbalism4_1=Aumenta a vida recebida comendo pao ou sopa
+m.EffectsHerbalism5_0=Drop x2 (Todas Ervas)
+m.EffectsHerbalism5_1=Dobra a quantia de itens obtidos colhendo
+m.HerbalismGreenTerraLength=[[RED]]Duraçao do Green Terra: [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Chance do Dedos Verdes: [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Nível do Dedos Verdes: [[YELLOW]] Trigo Cresce no Nível {0}
+m.HerbalismDoubleDropChance=[[RED]]Chance de Drop x2: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Comida+ (Rank{0}): [[YELLOW]]Bônus de {0} de vida
+
+m.SkillExcavation=ESCAVAÇAO
+m.XPGainExcavation=Cavando e encontrando tesouros
+m.EffectsExcavation1_0=Super Broca (HABILIDADE ESPECIAL)
+m.EffectsExcavation1_1=Drop x3, EXP x3, mais velocidade
+m.EffectsExcavation2_0=Caçad/or de Tesouros
+m.EffectsExcavation2_1=Encontra itens raros enquanto cava
+m.ExcavationGreenTerraLength=[[RED]]Duraçao da Super Broca: [[YELLOW]]{0}s
+
+mcBlockListener.PlacedAnvil=[[DARK_RED]] Você colocou uma bigorna, a bigorna pode reparar ferramentas e armaduras.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Seu lobo voltou para você...
+mcPlayerListener.AbilitiesOff=Habilidade especial desabilitada
+mcPlayerListener.AbilitiesOn=Habilidade especial ativada
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]*HABILIDAE DISPONIVEL\!*
+mcPlayerListener.AcrobaticsSkill=Acrobacia (Acrobatics): 
+mcPlayerListener.ArcherySkill=Arqueiro (Archery): 
+mcPlayerListener.AxesSkill=Machado (Axes): 
+mcPlayerListener.ExcavationSkill=Escavaçao (Excavation): 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Modo Deus Desabilitado
+mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Modo Deus Ativo
+mcPlayerListener.GreenThumb=[[GREEN]]*DEDOS VERDES*
+mcPlayerListener.GreenThumbFail=[[RED]]*DEDOS VERDES FALHOU*
+mcPlayerListener.HerbalismSkill=Herbalismo (Herbalism): 
+mcPlayerListener.MiningSkill=Mineraçao (Mining): 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Ponto de Spawn foi apagado.
+mcPlayerListener.MyspawnNotExist=[[RED]]Primeiro crie um spawn durmindo na cama.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Spawn foi gravado neste local.
+mcPlayerListener.MyspawnTimeNotice=Você precisa esperar {0}m {1}s para usar "myspawn"
+mcPlayerListener.NoPermission=Nao tem permissao para realizar esta açao.
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Se você nao tem acesso a uma habilidade, ela nao será exibida aqui.
+mcPlayerListener.NotInParty=[[RED]]Você nao está em nenhuma equipe.
+mcPlayerListener.InviteSuccess=[[GREEN]]Convite enviado.
+mcPlayerListener.ReceivedInvite1=[[RED]]ALERTA: [[GREEN]]Você recebeu um convite do {1} para a equipe {0}.
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Digite [[GREEN]]/{0}[[YELLOW]] para aceitar o convite 
+mcPlayerListener.InviteAccepted=[[GREEN]]Convite aceito. Você se juntou a equipe {0}
+mcPlayerListener.NoInvites=[[RED]]Você nao tem convites pendentes.
+mcPlayerListener.YouAreInParty=[[GREEN]]Você está na equipe {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Membros da Equipe
+mcPlayerListener.LeftParty=[[RED]]Você saiu da equipe
+mcPlayerListener.JoinedParty=Sua Equipe: {0}
+mcPlayerListener.PartyChatOn=Chat da Equipe [[GREEN]]On
+mcPlayerListener.PartyChatOff=Chat da Equipe [[RED]]Off
+mcPlayerListener.AdminChatOn=Chat do Admin [[GREEN]]On
+mcPlayerListener.AdminChatOff=Chat do Admin [[RED]]Off
+mcPlayerListener.MOTD=[[BLUE]]Esse Server está rodando o mcMMO {0} digite [[YELLOW]]/{1}[[BLUE]] para obter ajuda.
+mcPlayerListener.WIKI=[[BLUE]]Para mais informaçoes - [[GREEN]]http://mcmmo.wikia.com
+mcPlayerListener.PowerLevel=[[RED]]NIVEL TOTAL: 
+mcPlayerListener.PowerLevelLeaderboard=[[BLUE]]-Classificaçao - [[GREEN]]Nível - [[WHITE]]Jogador-
+mcPlayerListener.SkillLeaderboard=[[BLUE]]-Classificaçao em [[GREEN]]{0}
+mcPlayerListener.RepairSkill=Reparaçao (Repair): 
+mcPlayerListener.SwordsSkill=Espadas (Swords): 
+mcPlayerListener.TamingSkill=Domar (Taming): 
+mcPlayerListener.UnarmedSkill=Desarmado (Unarmed): 
+mcPlayerListener.WoodcuttingSkill=Lenhador (Woodcutting): 
+mcPlayerListener.YourStats=[[GREEN]][mcMMO] Estatísticas
+Party.InformedOnJoin={0} [[GREEN]] entrou na equipe
+Party.InformedOnQuit={0} [[GREEN]] saiu da equipe
+
+Skills.YourGreenTerra=[[GREEN]]Sua habilidade [[YELLOW]]Green Terra [[GREEN]]está disponível!
+Skills.YourTreeFeller=[[GREEN]]Sua habilidade [[YELLOW]]Derrubador de Arvores [[GREEN]]está disponível!
+Skills.YourSuperBreaker=[[GREEN]]Sua habilidade [[YELLOW]]Super Britadeira [[GREEN]]está disponível!
+Skills.YourSerratedStrikes=[[GREEN]]Sua habilidade [[YELLOW]]Ataques Cortantes [[GREEN]]está disponível!
+Skills.YourBerserk=[[GREEN]]Sua habilidade [[YELLOW]]Fúria [[GREEN]]está disponível!
+Skills.YourSkullSplitter=[[GREEN]]Sua habilidade [[YELLOW]]Rachador de Crânios [[GREEN]]está disponível!
+Skills.YourGigaDrillBreaker=[[GREEN]]Sua habilidade [[YELLOW]]Super Broca [[GREEN]]está disponível!
+Skills.TooTired=[[RED]]Você está cansado pra usar essa habilidade.
+Skills.ReadyHoe=[[GREEN]]*ENXADA PRONTA PARA USAR GREEN TERRA*
+Skills.LowerHoe=[[GRAY]]*DESCARREGOU A ENXADA*
+Skills.ReadyAxe=[[GREEN]]*MACHADO PRONTO PARA USAR DERRUBADOR DE ARVORES*
+Skills.LowerAxe=[[GRAY]]*DESCARREGOU O MACHADO*
+Skills.ReadyFists=[[GREEN]]*PUNHO PRONTO PARA USAR FURIA*
+Skills.LowerFists=[[GRAY]]*DESCARREGOU O PUNHO*
+Skills.ReadyPickAxe=[[GREEN]]*PICARETA PRONTA PARA USAR SUPER BRITADEIRA*
+Skills.LowerPickAxe=[[GRAY]]*DESCARREGOU A PICARETA*
+Skills.ReadyShovel=[[GREEN]]*PA PRONTA PARA USAR SUPER BROCA*
+Skills.LowerShovel=[[GRAY]]*DESCARREGOU A PA*
+Skills.ReadySword=[[GREEN]]*ESPADA PRONTA PARA USAR ATAQUES CORTANTES*
+Skills.LowerSword=[[GRAY]]*DESCARREGOU A ESPADA*
+Skills.BerserkOn=[[GREEN]]*FURIA ATIVADA*
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] Usou a [[RED]]Fúria!
+Skills.GreenTerraOn=[[GREEN]]*GREEN TERRA ATIVADO*
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Green Terra!
+Skills.TreeFellerOn=[[GREEN]]*DERRUBADOR E ARVORES ATIVADO*
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Tree Feller!
+Skills.SuperBreakerOn=[[GREEN]]*SUPER BRITADEIRA ATIVADA*
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Super Britadeira!
+Skills.SerratedStrikesOn=[[GREEN]]*ATAQUES CORTANTES ATIVADO*
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Ataques Cortantes!
+Skills.SkullSplitterOn=[[GREEN]]*RACHADOR DE CRANIOS ATIVADO*
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Rachador de Crânios!
+Skills.GigaDrillBreakerOn=[[GREEN]]*SUPER BROCA ATIVADO*
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Super Broca!
+Skills.GreenTerraOff=[[RED]]*Green Terra acabou*
+Skills.TreeFellerOff=[[RED]]*Derrubador de Arvores acabou*
+Skills.SuperBreakerOff=[[RED]]*Super Britadeira acabou*
+Skills.SerratedStrikesOff=[[RED]]*Ataques Cortantes acabou*
+Skills.BerserkOff=[[RED]]*Fúria acabou*
+Skills.SkullSplitterOff=[[RED]]*Rachador de Crânios acabou*
+Skills.GigaDrillBreakerOff=[[RED]]*Super Broca acabou*
+Skills.TamingUp=[[YELLOW]]Habilidade de Domar aumentada em {0}. Total ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Habilidade Acrobacia aumentada em {0}. Total ({1})
+Skills.ArcheryUp=[[YELLOW]]Habilidade de Arqueiro aumentada em {0}. Total ({1})
+Skills.SwordsUp=[[YELLOW]]Habilidade com Espadas aumentada em {0}. Total ({1})
+Skills.AxesUp=[[YELLOW]]Habilidade com Machados aumentada em {0}. Total ({1})
+Skills.UnarmedUp=[[YELLOW]]Habilidade Desarmado aumentada em {0}. Total ({1})
+Skills.HerbalismUp=[[YELLOW]]Habilidade Herbalismo aumentada em {0}. Total ({1})
+Skills.MiningUp=[[YELLOW]]Habilidade de Mineraçao aumentada em {0}. Total ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Habilidade de Lenhador aumentada em {0}. Total ({1})
+Skills.RepairUp=[[YELLOW]]Habilidade de Reparaçao aumentada em {0}. Total ({1})
+Skills.ExcavationUp=[[YELLOW]]Habilidade de Escavaçao aumentada em {0}. Total ({1})
+Skills.FeltEasy=[[GRAY]]Essa foi fácil.
+Skills.StackedItems=[[DARK_RED]]Nao pode reparar itens empilhados juntos.
+Skills.NeedMore=[[DARK_RED]]Você precisa de mais
+Skills.AdeptDiamond=[[DARK_RED]]Você nao tem o nível necessário para reparar Diamante
+Skills.FullDurability=[[GRAY]]Já está com Durabilidade cheia.
+Skills.Disarmed=[[DARK_RED]]Você foi Desarmado!
+mcPlayerListener.SorcerySkill=Feitiçaria (Sorcery): 
+
+m.SkillSorcery=FEITIÇARIA
+Sorcery.HasCast=[[GREEN]]*CASTING*[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]]MP
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} MP
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Sem Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=TROVAO
+Sorcery.Curative.Self=CURAR-SE
+Sorcery.Curative.Other=CURAR AMIGOS
+
+m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
+Combat.BeastLore=[[GREEN]]*CONHECIMENTO DE FERAS*
+Combat.BeastLoreOwner=[[DARK_AQUA]]Dono ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Health ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Vida ([[GREEN]]{0}[[DARK_AQUA]]/8)
+mcMMO.Description=[[DARK_AQUA]]Q: O QUE E? [[GOLD]]mcMMO é um mod [[RED]]OPEN SOURCE[[GOLD]] de RPG para a plataforma "Bukkit" feito por [[BLUE]]nossr50.[[GOLD]] Ele acresenta uma série de habilidades ao Minecraft. [[GOLD]]Você pode ganhar experiência de muitas maneiras.,[[GOLD]]Digite [[GREEN]]/NOME_DA_HABILIDADE[[GOLD]] para obter informaçoes sobre a habilidade.,[[DARK_AQUA]]Q: O QUE ELE FAZ? [[GOLD]]Por exemplo... em [[DARK_AQUA]]Mineraçao[[GOLD]] você receberá benefícios tais como [[RED]]Drop x2[[GOLD]] ou a habilidade [[RED]]Super Esmagador.[[GOLD]] que quando ativada com o clique direito permite minerar rapidamente durante sua duraçao. [[GOLD]]que depende do nível da sua habilidade. Aumentar o nível de [[BLUE]]Mineraçao[[GOLD]] é simples. basta minerar pedras ou minérios!,[[GOLD]]O objetivo do mcMMO é criar uma experiência de RPG de qualidade.,[[GOLD]]Digite [[GREEN]]/{0}[[GOLD]] para uma lista de comandos possíveis.,[[DARK_AQUA]]Q: ONDE POSSO SUGERIR IDEIAS!?,[[GOLD]]No tópico do mcMMO no fórum bukkit! (www.bit.ly/MCmmoIDEA),[[DARK_AQUA]]Q: Para mais informaçoes. leia a wiki do McMMO: [[RED]]mcmmo.wikia.com
+Party.Locked=[[RED]]Equipe está trancada, só o líder pode convidar.
+Party.IsntLocked=[[GRAY]]Equipe nao está trancada
+Party.Unlocked=[[GRAY]]Equipe foi Destrancada
+Party.Help1=[[RED]]O uso certo é [[YELLOW]]/{0} [[WHITE]]<nome>[[YELLOW]] ou [[WHITE]]'q' [[YELLOW]]para sair
+Party.Help2=[[RED]]Para entrar em uma equipe com senha use [[YELLOW]]/{0} [[WHITE]]<nome> <senha>
+Party.Help3=[[RED]]Consulte /{0} ? para mais informaçoes
+Party.Help4=[[RED]]Use [[YELLOW]]/{0} [[WHITE]]<nome> [[YELLOW]]para entrar em uma equipe ou [[WHITE]]'q' [[YELLOW]]para sair
+Party.Help5=[[RED]]Para trancar sua equipe use [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]Para destrancar sua equipe use [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]Para colocar senha na sua equipe use [[YELLOW]]/{0} [[WHITE]]password <password>
+Party.Help8=[[RED]]Para excluir um jogador da equipe use [[YELLOW]]/{0} [[WHITE]]kick <player>
+Party.Help9=[[RED]]Para transferir a liderança da equipe use [[YELLOW]]/{0} [[WHITE]]owner <player>
+Party.NotOwner=[[DARK_RED]]Você nao é o líder da equipe
+Party.InvalidName=[[DARK_RED]]Este nome nao é valido
+Party.PasswordSet=[[GREEN]]Senha da equipe: {0}
+Party.CouldNotKick=[[DARK_RED]]Nao foi possível excluir o jogador {0}
+Party.NotInYourParty=[[DARK_RED]]{0} nao está na sua equipe
+Party.CouldNotSetOwner=[[DARK_RED]]Nao foi possível passar a liderança para {0}
+Commands.xprate.proper=[[DARK_AQUA]]Uso certo é /{0} [integer] [true:false]
+Commands.xprate.proper2=[[DARK_AQUA]]Também pode digitar /{0} reset para voltar tudo ao padrao
+Commands.xprate.proper3=[[RED]]Enter true or false for the second value
+Commands.xprate.over=[[RED]]Evento de XP Rate acabou!!
+Commands.xprate.started=[[GOLD]]EVENTO DE XP COMEÇOU!
+Commands.xprate.started2=[[GOLD]]XP RATE AGORA é {0}x!!
+Commands.xplock.locked=[[GOLD]]Sua barra de XP BAR está travada em {0}!
+Commands.xplock.unlocked=[[GOLD]]Sua barra de XP foi [[GREEN]]DESTRAVADA[[GOLD]]!
+Commands.xplock.invalid=[[RED]]Nao existe habilidade com esse nome! Tente /xplock mining
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 381 - 381
src/com/gmail/nossr50/locale/locale_ru.properties → src/main/java/com/gmail/nossr50/locale/locale_ru.properties

@@ -1,382 +1,382 @@
-Combat.WolfExamine=[[GREEN]]**Вы научили Волка использованию "Удара волка"**
-Combat.WolfExamine=[[GREEN]]**Вы научили Волка использованию "Удара волка"**
-Combat.WolfShowMaster=[[DARK_GREEN]]Мастер по приручению Волков \: {0}
-Combat.Ignition=[[RED]]**Вы подожгли противника стрелой!!**
-Combat.BurningArrowHit=[[DARK_RED]]Вы были поражены горящей стрелой\!
-Combat.TouchedFuzzy=[[DARK_RED]]Вы истекаете кровью. Кружится голова.
-Combat.TargetDazed=Ваша цель [[DARK_RED]]Шокирована
-Combat.WolfNoMaster=[[GRAY]]У этого Волка нет хозяина
-Combat.WolfHealth=[[GREEN]]У этого Волка {0} Здоровья 
-Combat.StruckByGore=[[RED]]**Окравление неудачно**
-Combat.Gore=[[GREEN]]**Окравление**
-Combat.ArrowDeflect=[[WHITE]]**Стрела отскочила**
-Item.ChimaeraWingFail=**Крылья Химеры не смогли вас унести\!**
-Item.ChimaeraWingPass=**Крылья Химеры уносят вас...**
-Item.InjuredWait=Вы ранены и не сможете пока использовать это. [[YELLOW]]({0}s)
-Item.NeedFeathers=[[GRAY]]Вам нужно больше перьев..
-m.mccPartyCommands=[[GREEN]]--Групповые команды--
-m.mccParty=[party name] [[RED]]- Создание группы
-m.mccPartyQ=[[RED]]- Покиньте текущую группу
-m.mccPartyToggle=[[RED]] - Включить групповой чат
-m.mccPartyInvite=[player name] [[RED]]- Прислать приглашение в группу
-m.mccPartyAccept=[[RED]]- Подтвердить приглашение в группу
-m.mccPartyTeleport=[party member name] [[RED]]- Телепортироваться к члену группы
-m.mccOtherCommands=[[GREEN]]--Другие команды--
-m.mccStats=- Посмотреть ваши McMMo характеристики
-m.mccLeaderboards=- Доска Лидеров
-m.mccMySpawn=- Телепортирует к вашей кровати
-m.mccClearMySpawn=- Убирает вашу кровать
-m.mccToggleAbility=- Активировать возможность правым кликом мыши
-m.mccAdminToggle=- Включить админский чат
-m.mccWhois=[playername] [[RED]]- Посмотреть детальную информацию
-m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Изменить цель
-m.mccMcGod=- Режим Бога
-m.mccSkillInfo=[skillname] [[RED]]- Посмотреть детальную информацию о умении
-m.mccModDescription=[[RED]]- Прочитать информацию о моде McMMo
-m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
-m.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
-m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
-m.AbilityLockTemplate=[[GRAY]]{0}
-m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
-m.Effects=ЭФФЕКТЫ
-m.YourStats=ВАШИ ХАРАКТЕРИСТИКИ
-m.SkillTaming=Приручение
-m.XPGainTaming=Волки причиняют ущерб
-m.EffectsTaming1_0=Удар Волка
-m.EffectsTaming1_1=Уменьшение количества костей
-m.EffectsTaming2_0=Окравление
-m.EffectsTaming2_1=Критический удар во время истекания кровью
-m.EffectsTaming3_0=Острые Когти
-m.EffectsTaming3_1=Бонус к урону
-m.EffectsTaming4_0=Независимость от экологии
-m.EffectsTaming4_1=Имунитет к падению, боязнь лавы/кактусов
-m.EffectsTaming5_0=Густой мех
-m.EffectsTaming5_1=Сокращение урона, огнеустойчивость
-m.EffectsTaming6_0=Надежная защита от повреждений
-m.EffectsTaming6_1=Снижение урона от взрывов
-m.AbilLockTaming1=Блокируется до 100+ уровня(Независимость от экологии)
-m.AbilLockTaming2=Блокируется до 250+ уровня (Густой мех)
-m.AbilLockTaming3=Блокируется до 500+ уровня (Надежная защита от повреждений)
-m.AbilLockTaming4=Блокируется до 700+ уровня (Острые Когти)
-m.AbilBonusTaming1_0=Независимость от экологии
-m.AbilBonusTaming1_1=Волки избегают опасностей
-m.AbilBonusTaming2_0=Густой мех
-m.AbilBonusTaming2_1=Урон наполовину, Огнеустойчивость
-m.AbilBonusTaming3_0=Надежная защита от повреждений
-m.AbilBonusTaming3_1=Взрывы причиняют 1/6 нормального урона
-m.AbilBonusTaming4_0=Острые Когти
-m.AbilBonusTaming4_1=+2 Урона
-m.TamingGoreChance=[[RED]]Шанс окравления: [[YELLOW]]{0}%
-m.SkillWoodCutting=Деревообработка
-m.XPGainWoodCutting=Рубить деревья
-m.EffectsWoodCutting1_0=Любитель деревьев(способность)
-m.EffectsWoodCutting1_1=Делать взрывы деревьев
-m.EffectsWoodCutting2_0=Быстрое срезание листьев
-m.EffectsWoodCutting2_1=Сдувать листья
-m.EffectsWoodCutting3_0=Двойной дроп
-m.EffectsWoodCutting3_1=Нормальный двойной дроп
-m.AbilLockWoodCutting1=Блокируется до 100+ уровня(Быстрое срезание листьев)
-m.AbilBonusWoodCutting1_0=Быстрое срезание листьев
-m.AbilBonusWoodCutting1_1=Сдувать листья
-m.WoodCuttingDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
-m.WoodCuttingTreeFellerLength=[[RED]]Продолжительность Любителя деревьев: [[YELLOW]]{0}s
-m.SkillArchery=Стрельба из лука
-m.XPGainArchery=Атаковать монстров из лука
-m.EffectsArchery1_0=Поджёг
-m.EffectsArchery1_1=25% шанс, что цель подожгётся
-m.EffectsArchery2_0=Шокирование(Игроков)
-m.EffectsArchery2_1=Дезориентирует врагов
-m.EffectsArchery3_0=Урон+
-m.EffectsArchery3_1=Улучшает Урон
-m.EffectsArchery4_0=Получение стрел
-m.EffectsArchery4_1=Шанс получить стрелы из трупов
-m.ArcheryDazeChance=[[RED]]Шанс шокировать: [[YELLOW]]{0}%
-m.ArcheryRetrieveChance=[[RED]]Шанс получить стрелы: [[YELLOW]]{0}%
-m.ArcheryIgnitionLength=[[RED]]Длительность поджёга: [[YELLOW]]{0} секунд
-m.ArcheryDamagePlus=[[RED]]Урон+ (Rank{0}): [[YELLOW]]Bonus {0} damage
-m.SkillAxes=Топоры
-m.XPGainAxes=Атаковать монстров топором
-m.EffectsAxes1_0=Разрушитель черепов(способность)
-m.EffectsAxes1_1=Увеличение урона от топора
-m.EffectsAxes2_0=Критические удары
-m.EffectsAxes2_1=Двойной урон
-m.EffectsAxes3_0=Мастерство топора(500 уровень)
-m.EffectsAxes3_1=Улучшение урона
-m.AbilLockAxes1=Блокируется до 500+ уровня(Мастерство топора)
-m.AbilBonusAxes1_0=Мастерство топора
-m.AbilBonusAxes1_1=Дает бонус в 4 урона
-m.AxesCritChance=[[RED]]Шанс критического удара: [[YELLOW]]{0}%
-m.AxesSkullLength=[[RED]]Продолжительность Разрушителя Черепов: [[YELLOW]]{0}s
-m.SkillSwords=Мечи
-m.XPGainSwords=Атаковать монстров мечом
-m.EffectsSwords1_0=Контр-Атака
-m.EffectsSwords1_1=Отражает 50% полученного урона
-m.EffectsSwords2_0=Зазубренные мечи(способность)
-m.EffectsSwords2_1=25% Урона+ и кровотечение от удара
-m.EffectsSwords3_0=Увелечение длительности способности "Зазубренные мечи"
-m.EffectsSwords3_1=Кровотечение 5 раз
-m.EffectsSwords4_0=Парирование
-m.EffectsSwords4_1=Отрицательный урон
-m.EffectsSwords5_0=Кровотечение
-m.EffectsSwords5_1=Заставляет врага кровоточить
-m.SwordsCounterAttChance=[[RED]]Шанс Контр-Атаки: [[YELLOW]]{0}%
-m.SwordsBleedLength=[[RED]]Длительность кровотечения: [[YELLOW]]{0} раз
-m.SwordsBleedChance=[[RED]]Шанс кровотечения: [[YELLOW]]{0} %
-m.SwordsParryChance=[[RED]]Шанс парирования: [[YELLOW]]{0} %
-m.SwordsSSLength=[[RED]]Длительность "Зазубренныx мечей": [[YELLOW]]{0}s
-m.SwordsTickNote=[[GRAY]]Заметка: [[YELLOW]]1 раз длиться 2 секунды
-m.SkillAcrobatics=Акробатика
-m.XPGainAcrobatics=Нужно Падать с гор
-m.EffectsAcrobatics1_0=Переворот
-m.EffectsAcrobatics1_1=Поглощает или уменьшает урон
-m.EffectsAcrobatics2_0=Превосходный переворот
-m.EffectsAcrobatics2_1=Дважды эффективнее переворота
-m.EffectsAcrobatics3_0=Уворот
-m.EffectsAcrobatics3_1=Уменьшает урон наполовину от стрелы
-m.AcrobaticsRollChance=[[RED]]Шанс переворота: [[YELLOW]]{0}%
-m.AcrobaticsGracefulRollChance=[[RED]]Шанс превосходного переворота: [[YELLOW]]{0}%
-m.AcrobaticsDodgeChance=[[RED]]Шанс уворота: [[YELLOW]]{0}%
-m.SkillMining=Шахтёрство
-m.XPGainMining=Добывать руду и камни в шахтах
-m.EffectsMining1_0=Супер разрушитель(способность)
-m.EffectsMining1_1=Увеличение скорости, Шанс тройного дропа
-m.EffectsMining2_0=Двойной дроп
-m.EffectsMining2_1=Двойной дроп становится нормальным
-m.MiningDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
-m.MiningSuperBreakerLength=[[RED]]Длительность способности "Супер Разрушитель": [[YELLOW]]{0}s
-m.SkillRepair=Починка
-m.XPGainRepair=Чинить вещи
-m.EffectsRepair1_0=Починка
-m.EffectsRepair1_1=Чинит Железные инструменты и броню
-m.EffectsRepair2_0=Мастерство починки
-m.EffectsRepair2_1=Увеличивает качество ремонта
-m.EffectsRepair3_0=Супер починка
-m.EffectsRepair3_1=Двойная эффективность вещей
-m.EffectsRepair4_0=Починка Алмазных вещей ({0}+ уровень)
-m.EffectsRepair4_1=Чинить Алмазные инструменты и броню
-m.RepairRepairMastery=[[RED]]Мастерство починки: [[YELLOW]]Дополнительно {0}% долговечности восстановлено
-m.RepairSuperRepairChance=[[RED]]Шанс Супер починки: [[YELLOW]]{0}%
-m.SkillUnarmed=Рукопашный бой
-m.XPGainUnarmed=Атаковать монстров голыми руками
-m.EffectsUnarmed1_0=Берсерк(способность)
-m.EffectsUnarmed1_1=+50% Урона, Ломать слабые материалы
-m.EffectsUnarmed2_0=Обезоружение(Игроки)
-m.EffectsUnarmed2_1=Падает оружие противника на землю, которое находится в руках у него.
-m.EffectsUnarmed3_0=Мастер Рукопашного боя
-m.EffectsUnarmed3_1=Улучшение урона от кулаков
-m.EffectsUnarmed4_0=Ученик рукопашного боя
-m.EffectsUnarmed4_1=Увеличение урона от кулаков
-m.EffectsUnarmed5_0=Отражение стрел
-m.EffectsUnarmed5_1=Стрелы отражаются
-m.AbilLockUnarmed1=Блокируется до 250+ уровня(Ученик рукопашного боя)
-m.AbilLockUnarmed2=Блокируется до 500+ уровня(Мастер Рукопашного боя)
-m.AbilBonusUnarmed1_0=Ученик рукопашного боя
-m.AbilBonusUnarmed1_1=+2 бонус к урону
-m.AbilBonusUnarmed2_0=Мастер Рукопашного боя
-m.AbilBonusUnarmed2_1=+4 бонус к урону
-m.UnarmedArrowDeflectChance=[[RED]]Шанс отразить стрелы: [[YELLOW]]{0}%
-m.UnarmedDisarmChance=[[RED]]Шанс обезоружить: [[YELLOW]]{0}%
-m.UnarmedBerserkLength=[[RED]]Длительность "Берсерка": [[YELLOW]]{0}s
-m.SkillHerbalism=Травоведение
-m.XPGainHerbalism=Выращивать растения
-m.EffectsHerbalism1_0=Озеленитель(способность)
-m.EffectsHerbalism1_1=Распростронение озеленений, 3-ой дроп
-m.EffectsHerbalism2_0="Зеленый фермер"(Пщеница)
-m.EffectsHerbalism2_1=Авто выращивание пщеницы после посадки
-m.EffectsHerbalism3_0="Зеленый фермер"(Мох)
-m.EffectsHerbalism3_1=Камень -> Замшелый камень + семена
-m.EffectsHerbalism4_0=Улучшение еды
-m.EffectsHerbalism4_1=Улучшает количество здоровья от хлеба и грибного супа
-m.EffectsHerbalism5_0=Дройной дроп(Все растения)
-m.EffectsHerbalism5_1=Двойной дроп становится нормальным
-m.HerbalismGreenTerraLength=[[RED]]Продолжительность "Озеленителя": [[YELLOW]]{0}s
-m.HerbalismGreenThumbChance=[[RED]]Шанс "Зеленого фермера": [[YELLOW]]{0}%
-m.HerbalismGreenThumbStage=[[RED]]Уровень "Зеленого фермера": [[YELLOW]] Пщеница растет по-уровнево {0}
-m.HerbalismDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
-m.HerbalismFoodPlus=[[RED]]Еда+ (Rank{0}): [[YELLOW]]Бонус {0} лечения
-m.SkillExcavation=Раскопка
-m.XPGainExcavation=Раскапывать и искать сокровища
-m.EffectsExcavation1_0=Мега дрель(способность)
-m.EffectsExcavation1_1=3-ой дроп, 3-ой опыт, Увеличение скорости
-m.EffectsExcavation2_0=Охотник за сокровищами
-m.EffectsExcavation2_1=Способность копать сокровища
-m.ExcavationGreenTerraLength=[[RED]]Продолжительность "Мега дрели": [[YELLOW]]{0}s
-mcBlockListener.PlacedAnvil=[[DARK_RED]]Вы разместили наковальни и теперь можете чинить вещи.
-mcEntityListener.WolfComesBack=[[DARK_GRAY]]Ваш волк хочет вернуться к вам
-mcPlayerListener.AbilitiesOff=Использование способностей выключено
-mcPlayerListener.AbilitiesOn=Использование способностей включено
-mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**Способности восстановлены\!**
-mcPlayerListener.AcrobaticsSkill=Акробатика: 
-mcPlayerListener.ArcherySkill=Стрельба из лука: 
-mcPlayerListener.AxesSkill=Топоры: 
-mcPlayerListener.ExcavationSkill=Раскопка: 
-mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO режим бога выключен
-mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO режим бога включён
-mcPlayerListener.GreenThumb=[[GREEN]]**"Зеленый фермер"**
-mcPlayerListener.GreenThumbFail=[[RED]]**"Зеленый фермер" неудался**
-mcPlayerListener.HerbalismSkill=Травоведение: 
-mcPlayerListener.MiningSkill=Шахтёрство: 
-mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Ваша кровать убрана.
-mcPlayerListener.MyspawnNotExist=[[RED]]Сделайте вашу точку появления возле кровати, поспав на кровати.
-mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Моя точка появления сохранена в этой локации.
-mcPlayerListener.MyspawnTimeNotice=Вы должны подождать {0}m {1}s чтобы использовать появление около кровати
-mcPlayerListener.NoPermission=Недостаточные права.
-mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Если у вас нет доступа к умению, то оно здесь не отобразится.
-mcPlayerListener.NotInParty=[[RED]]Вы не в группе!
-mcPlayerListener.InviteSuccess=[[GREEN]]Приглашение успешно послано.
-mcPlayerListener.ReceivedInvite1=[[RED]]ТРЕВОГА: [[GREEN]]Вы получили приглашение на вступление в группу {0} от {1}
-mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] чтобы одобрить вступление
-mcPlayerListener.InviteAccepted=[[GREEN]]Приглашение одобрено. Вы вступили в группу {0}
-mcPlayerListener.NoInvites=[[RED]]У вас нет приглашений в группу сейчас
-mcPlayerListener.YouAreInParty=[[GREEN]]Вы уже в группе {0}
-mcPlayerListener.PartyMembers=[[GREEN]]Члены группы
-mcPlayerListener.LeftParty=[[RED]]Вы вышли из группы
-mcPlayerListener.JoinedParty=Присоединные группы: {0}
-mcPlayerListener.PartyChatOn=Только чат группы [[GREEN]]Включено
-mcPlayerListener.PartyChatOff=Только чат группы [[RED]]Выключено
-mcPlayerListener.AdminChatOn=Только админ чат [[GREEN]]Включено
-mcPlayerListener.AdminChatOff=Только админ чат [[RED]]Выключено
-mcPlayerListener.MOTD=[[BLUE]]На этом сервере установлен плагин McMMO {0} type [[YELLOW]]/{1}[[BLUE]] для помощи.
-mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Википедия
-mcPlayerListener.PowerLevel=[[DARK_RED]]Уровень умений: 
-mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Уровень умений [[YELLOW]]Доска Лидеров--
-mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Доска Лидеров--
-mcPlayerListener.RepairSkill=Починка: 
-mcPlayerListener.SwordsSkill=Мечи: 
-mcPlayerListener.TamingSkill=Приручение волков: 
-mcPlayerListener.UnarmedSkill=Рукопашный бой: 
-mcPlayerListener.WoodcuttingSkill=Деревообработка: 
-mcPlayerListener.YourStats=[[GREEN]][mcMMO] Характеристики
-Party.InformedOnJoin={0} [[GREEN]] присоединился к группе
-Party.InformedOnQuit={0} [[GREEN]] ушёл из группы
-Skills.YourGreenTerra=[[GREEN]]Ваша способность[[YELLOW]]"Озеленение" [[GREEN]]восстановлена!
-Skills.YourTreeFeller=[[GREEN]]Ваша способность [[YELLOW]]"Любитель деревьев" [[GREEN]]восстановлена!
-Skills.YourSuperBreaker=[[GREEN]]Ваша способность [[YELLOW]]"Супер разрушитель" [[GREEN]]восстановлена!
-Skills.YourSerratedStrikes=[[GREEN]]Ваша способность [[YELLOW]]"Зазубренные мечи" [[GREEN]]восстановлена!
-Skills.YourBerserk=[[GREEN]]Ваша способность [[YELLOW]]"Берсерк" [[GREEN]]восстановлена!
-Skills.YourSkullSplitter=[[GREEN]]Ваша способность [[YELLOW]]"Разрушитель черепов" [[GREEN]]восстановлена!
-Skills.YourGigaDrillBreaker=[[GREEN]]Ваша способность [[YELLOW]]"Мега дрель" [[GREEN]]восстановлена!
-Skills.TooTired=[[RED]]Вы слишком устали, чтобы использовать способность ещё раз.
-Skills.ReadyHoe=[[GREEN]]**Приготовьте вашу Мотыгу**
-Skills.LowerHoe=[[GRAY]]**Опустите вашу Мотыгу**
-Skills.ReadyAxe=[[GREEN]]**Приготовьте ваш Топор**
-Skills.LowerAxe=[[GRAY]]**Опустите ваш Топор**
-Skills.ReadyFists=[[GREEN]]**Приготовьте ваши Кулаки**
-Skills.LowerFists=[[GRAY]]**Опустите ваши Кулаки**
-Skills.ReadyPickAxe=[[GREEN]]**Приготовьте вашу Кирку**
-Skills.LowerPickAxe=[[GRAY]]**Опустите вашу Кирку**
-Skills.ReadyShovel=[[GREEN]]**Приготовьте вашу Лопату**
-Skills.LowerShovel=[[GRAY]]**Опустите вашу Лопату**
-Skills.ReadySword=[[GREEN]]**Приготовьте ваш Меч**
-Skills.LowerSword=[[GRAY]]**Опустите ваш Меч**
-Skills.BerserkOn=[[GREEN]]**Способность "Берсерк" активирована**
-Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Берсерк"!
-Skills.GreenTerraOn=[[GREEN]]**Способность "Озеленение" активирована**
-Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Озеленение"!
-Skills.TreeFellerOn=[[GREEN]]**Способность "Любитель Деревьев" активирована**
-Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Любитель Деревьев"!
-Skills.SuperBreakerOn=[[GREEN]]**Способность "Супер Разрушитель" активирована**
-Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Супер Разрушитель"!
-Skills.SerratedStrikesOn=[[GREEN]]**Способность "Зазубренные мечи" активирована**
-Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Зазубренные мечи"!
-Skills.SkullSplitterOn=[[GREEN]]**Способность "Разрешитель черепов" активирована**
-Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Разрушитель черепов"!
-Skills.GigaDrillBreakerOn=[[GREEN]]**Способность "Мега дрель" активирована**
-Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Мега дрель"!
-Skills.GreenTerraOff=[[RED]]**Способность "Озеленение" деактивирована**
-Skills.TreeFellerOff=[[RED]]**Способность "Любитель Деревьев" деактивирована**
-Skills.SuperBreakerOff=[[RED]]**Способность "Супер Разрушитель" деактивирована**
-Skills.SerratedStrikesOff=[[RED]]**Способность "Зазубренные мечи" деактивирована**
-Skills.BerserkOff=[[RED]]**Способность "Берсерк" деактивирована**
-Skills.SkullSplitterOff=[[RED]]**Способность "Разрешитель черепов" деактивирована**
-Skills.GigaDrillBreakerOff=[[RED]]**Способность "Мега дрель" деактивирована**
-Skills.TamingUp=[[YELLOW]]Умение "Приручение волков" повышено на {0}. Всего ({1})
-Skills.AcrobaticsUp=[[YELLOW]]Умение "Акробатика" повышено на {0}. Всего ({1})
-Skills.ArcheryUp=[[YELLOW]]Умение "Стрельба из лука" повышено на {0}. Всего ({1})
-Skills.SwordsUp=[[YELLOW]]Умение "Мечи" повышено на {0}. Всего ({1})
-Skills.AxesUp=[[YELLOW]]Умение "Топоры" повышено на {0}. Всего ({1})
-Skills.UnarmedUp=[[YELLOW]]Умение "Рукопашный бой" повышено на {0}. Всего ({1})
-Skills.HerbalismUp=[[YELLOW]]Умение "Травоведение" повышено на {0}. Всего ({1})
-Skills.MiningUp=[[YELLOW]]Умение "Шахтёрство" повышено на {0}. Всего ({1})
-Skills.WoodcuttingUp=[[YELLOW]]Умение "Деревообработка" повышено на {0}. Всего ({1})
-Skills.RepairUp=[[YELLOW]]Умение "Починка" повышено на {0}. Всего ({1})
-Skills.ExcavationUp=[[YELLOW]]Умение "Раскопка" повышено на {0}. Всего ({1})
-Skills.FeltEasy=[[GRAY]]Это было легко.
-Skills.StackedItems=[[DARK_RED]]Вы не можете чинить стакующиеся предметы
-Skills.NeedMore=[[DARK_RED]]Нужно больше материала
-Skills.AdeptDiamond=[[DARK_RED]]Вы не обучены чинить алмазные инструменты и броню
-Skills.FullDurability=[[GRAY]]Вещь не нуждается в починке.
-Skills.Disarmed=[[DARK_RED]]Вы обезоружены!
-mcPlayerListener.SorcerySkill=Колдовство: 
-m.SkillSorcery=Колдовство
-Sorcery.HasCast=[[GREEN]]**Использую "Колдовство"**[[GOLD]]
-Sorcery.Current_Mana=[[DARK_AQUA]] Маны
-Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
-Sorcery.Cost=[[RED]][COST] {0} Маны
-Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Не хватает маны [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
-Sorcery.Water.Thunder=Гром
-Sorcery.Curative.Self=Вылечить себя
-Sorcery.Curative.Other=Вылечить других
-m.LVL=[[DARK_GRAY]]Уровень: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
-Combat.BeastLore=[[GREEN]]**Умение "Удар волка" активировано**
-Combat.BeastLoreOwner=[[DARK_AQUA]]Владелец ([[RED]]{0}[[DARK_AQUA]])
-Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Здоровья ([[GREEN]]{0}[[DARK_AQUA]]/20)
-Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Здоровья ([[GREEN]]{0}[[DARK_AQUA]]/8)
-Party.Locked=[[RED]]Группа запаролена, только лидер группы может приглашать.
-Party.IsntLocked=[[GRAY]]Группа разблокирована
-Party.Unlocked=[[GRAY]]Группа разблокирована
-Party.Help1=[[RED]]Использование [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] или [[WHITE]]'q' [[YELLOW]]для выхода
-Party.Help2=[[RED]]Чтобы присоединится к запароленной группе введите [[YELLOW]]/{0} [[WHITE]]<имя> <пароль>
-Party.Help3=[[RED]]Введите /{0} ? для большей информации
-Party.Help4=[[RED]]Используйте [[YELLOW]]/{0} [[WHITE]]<имя> [[YELLOW]]чтобы присоединится к группе или [[WHITE]]'q' [[YELLOW]]для выхода
-Party.Help5=[[RED]]Чтобы заблокировать группу введите [[YELLOW]]/{0} [[WHITE]]lock
-Party.Help6=[[RED]]Чтобы разблокировать группу введите [[YELLOW]]/{0} [[WHITE]]unlock
-Party.Help7=[[RED]]Чтобы запаролить группу введите [[YELLOW]]/{0} [[WHITE]]password <пароль>
-Party.Help8=[[RED]]Чтобы выкинуть игрока из группы введите [[YELLOW]]/{0} [[WHITE]]kick <игрок>
-Party.Help9=[[RED]]Чтобы отдать лидерство группы введите [[YELLOW]]/{0} [[WHITE]]owner <игрок>
-Party.NotOwner=[[DARK_RED]]Вы теперь не лидер группы
-Party.InvalidName=[[DARK_RED]]Некорректное имя группы
-Party.PasswordSet=[[GREEN]]Пароль группы назначен {0}
-Party.CouldNotKick=[[DARK_RED]]Вы не можете убрать игрока из группы {0}
-Party.NotInYourParty=[[DARK_RED]]{0} не в группе
-Party.CouldNotSetOwner=[[DARK_RED]]Вы не можете отдать лидерство игроку {0}
-mcMMO.Description=[[DARK_AQUA]]Q: Что это?,[[GOLD]]mcMMO это [[RED]]ОПЕН СУРС[[GOLD]] RPG мод для сервера Bukkit от пользователя [[BLUE]]nossr50,[[GOLD]]Здесь было добавлено много умений для Minecraft сервера.,[[GOLD]]Вы можете прокачать их разными способами,[[GOLD]]Вы хотите найти больше информации о умении [[GREEN]]/SKILLNAME[[GOLD]] ?,[[DARK_AQUA]]Q: Что я должен сделать?,[[GOLD]]Для примера... in [[DARK_AQUA]]Шахтёрство[[GOLD]] вы получите [[RED]]2-ой дроп[[GOLD]] или способность [[RED]]"Супер разрушитель"[[GOLD]] ,которая активируется [[GOLD]]нажатием правой кнопки мыши на некоторое время,[[GOLD]]связанное с вашим уровнем умения. Поднять уровень [[BLUE]]Шахтёрства,[[GOLD]]легко просто копайте руды и камни!
-m.SkillAlchemy=ALCHEMY
-m.SkillEnchanting=ENCHANTING
-m.SkillFishing=FISHING
-mcPlayerListener.AlchemySkill=Alchemy: 
-mcPlayerListener.EnchantingSkill=Enchanting: 
-mcPlayerListener.FishingSkill=Fishing: 
-Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
-Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
-Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
-Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
-Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
-Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
-Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
-m.EffectsRepair5_0=Arcane Forging
-m.EffectsRepair5_1=Repair magic items
-m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
-m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
-m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
-m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
-m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
-Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
-Fishing.ItemFound=[[GRAY]]Treasure found!
-m.SkillFishing=FISHING
-m.XPGainFishing=Fishing (Go figure!)
-m.EffectsFishing1_0=Treasure Hunter (Passive)
-m.EffectsFishing1_1=Fish up misc objects
-m.EffectsFishing2_0=Magic Hunter
-m.EffectsFishing2_1=Find Enchanted Items
-m.EffectsFishing3_0=Shake (vs. Entities)
-m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
-m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
-m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
-m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
-m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
-m.TamingSummon=[[GREEN]]Summoning complete
-m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
-m.EffectsTaming7_0=Call of the Wild
-m.EffectsTaming7_1=Summon a wolf to your side
+Combat.WolfExamine=[[GREEN]]**Вы научили Волка использованию "Удара волка"**
+Combat.WolfExamine=[[GREEN]]**Вы научили Волка использованию "Удара волка"**
+Combat.WolfShowMaster=[[DARK_GREEN]]Мастер по приручению Волков \: {0}
+Combat.Ignition=[[RED]]**Вы подожгли противника стрелой!!**
+Combat.BurningArrowHit=[[DARK_RED]]Вы были поражены горящей стрелой\!
+Combat.TouchedFuzzy=[[DARK_RED]]Вы истекаете кровью. Кружится голова.
+Combat.TargetDazed=Ваша цель [[DARK_RED]]Шокирована
+Combat.WolfNoMaster=[[GRAY]]У этого Волка нет хозяина
+Combat.WolfHealth=[[GREEN]]У этого Волка {0} Здоровья 
+Combat.StruckByGore=[[RED]]**Окравление неудачно**
+Combat.Gore=[[GREEN]]**Окравление**
+Combat.ArrowDeflect=[[WHITE]]**Стрела отскочила**
+Item.ChimaeraWingFail=**Крылья Химеры не смогли вас унести\!**
+Item.ChimaeraWingPass=**Крылья Химеры уносят вас...**
+Item.InjuredWait=Вы ранены и не сможете пока использовать это. [[YELLOW]]({0}s)
+Item.NeedFeathers=[[GRAY]]Вам нужно больше перьев..
+m.mccPartyCommands=[[GREEN]]--Групповые команды--
+m.mccParty=[party name] [[RED]]- Создание группы
+m.mccPartyQ=[[RED]]- Покиньте текущую группу
+m.mccPartyToggle=[[RED]] - Включить групповой чат
+m.mccPartyInvite=[player name] [[RED]]- Прислать приглашение в группу
+m.mccPartyAccept=[[RED]]- Подтвердить приглашение в группу
+m.mccPartyTeleport=[party member name] [[RED]]- Телепортироваться к члену группы
+m.mccOtherCommands=[[GREEN]]--Другие команды--
+m.mccStats=- Посмотреть ваши McMMo характеристики
+m.mccLeaderboards=- Доска Лидеров
+m.mccMySpawn=- Телепортирует к вашей кровати
+m.mccClearMySpawn=- Убирает вашу кровать
+m.mccToggleAbility=- Активировать возможность правым кликом мыши
+m.mccAdminToggle=- Включить админский чат
+m.mccWhois=[playername] [[RED]]- Посмотреть детальную информацию
+m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Изменить цель
+m.mccMcGod=- Режим Бога
+m.mccSkillInfo=[skillname] [[RED]]- Посмотреть детальную информацию о умении
+m.mccModDescription=[[RED]]- Прочитать информацию о моде McMMo
+m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
+m.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
+m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
+m.AbilityLockTemplate=[[GRAY]]{0}
+m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
+m.Effects=ЭФФЕКТЫ
+m.YourStats=ВАШИ ХАРАКТЕРИСТИКИ
+m.SkillTaming=Приручение
+m.XPGainTaming=Волки причиняют ущерб
+m.EffectsTaming1_0=Удар Волка
+m.EffectsTaming1_1=Уменьшение количества костей
+m.EffectsTaming2_0=Окравление
+m.EffectsTaming2_1=Критический удар во время истекания кровью
+m.EffectsTaming3_0=Острые Когти
+m.EffectsTaming3_1=Бонус к урону
+m.EffectsTaming4_0=Независимость от экологии
+m.EffectsTaming4_1=Имунитет к падению, боязнь лавы/кактусов
+m.EffectsTaming5_0=Густой мех
+m.EffectsTaming5_1=Сокращение урона, огнеустойчивость
+m.EffectsTaming6_0=Надежная защита от повреждений
+m.EffectsTaming6_1=Снижение урона от взрывов
+m.AbilLockTaming1=Блокируется до 100+ уровня(Независимость от экологии)
+m.AbilLockTaming2=Блокируется до 250+ уровня (Густой мех)
+m.AbilLockTaming3=Блокируется до 500+ уровня (Надежная защита от повреждений)
+m.AbilLockTaming4=Блокируется до 700+ уровня (Острые Когти)
+m.AbilBonusTaming1_0=Независимость от экологии
+m.AbilBonusTaming1_1=Волки избегают опасностей
+m.AbilBonusTaming2_0=Густой мех
+m.AbilBonusTaming2_1=Урон наполовину, Огнеустойчивость
+m.AbilBonusTaming3_0=Надежная защита от повреждений
+m.AbilBonusTaming3_1=Взрывы причиняют 1/6 нормального урона
+m.AbilBonusTaming4_0=Острые Когти
+m.AbilBonusTaming4_1=+2 Урона
+m.TamingGoreChance=[[RED]]Шанс окравления: [[YELLOW]]{0}%
+m.SkillWoodCutting=Деревообработка
+m.XPGainWoodCutting=Рубить деревья
+m.EffectsWoodCutting1_0=Любитель деревьев(способность)
+m.EffectsWoodCutting1_1=Делать взрывы деревьев
+m.EffectsWoodCutting2_0=Быстрое срезание листьев
+m.EffectsWoodCutting2_1=Сдувать листья
+m.EffectsWoodCutting3_0=Двойной дроп
+m.EffectsWoodCutting3_1=Нормальный двойной дроп
+m.AbilLockWoodCutting1=Блокируется до 100+ уровня(Быстрое срезание листьев)
+m.AbilBonusWoodCutting1_0=Быстрое срезание листьев
+m.AbilBonusWoodCutting1_1=Сдувать листья
+m.WoodCuttingDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
+m.WoodCuttingTreeFellerLength=[[RED]]Продолжительность Любителя деревьев: [[YELLOW]]{0}s
+m.SkillArchery=Стрельба из лука
+m.XPGainArchery=Атаковать монстров из лука
+m.EffectsArchery1_0=Поджёг
+m.EffectsArchery1_1=25% шанс, что цель подожгётся
+m.EffectsArchery2_0=Шокирование(Игроков)
+m.EffectsArchery2_1=Дезориентирует врагов
+m.EffectsArchery3_0=Урон+
+m.EffectsArchery3_1=Улучшает Урон
+m.EffectsArchery4_0=Получение стрел
+m.EffectsArchery4_1=Шанс получить стрелы из трупов
+m.ArcheryDazeChance=[[RED]]Шанс шокировать: [[YELLOW]]{0}%
+m.ArcheryRetrieveChance=[[RED]]Шанс получить стрелы: [[YELLOW]]{0}%
+m.ArcheryIgnitionLength=[[RED]]Длительность поджёга: [[YELLOW]]{0} секунд
+m.ArcheryDamagePlus=[[RED]]Урон+ (Rank{0}): [[YELLOW]]Bonus {0} damage
+m.SkillAxes=Топоры
+m.XPGainAxes=Атаковать монстров топором
+m.EffectsAxes1_0=Разрушитель черепов(способность)
+m.EffectsAxes1_1=Увеличение урона от топора
+m.EffectsAxes2_0=Критические удары
+m.EffectsAxes2_1=Двойной урон
+m.EffectsAxes3_0=Мастерство топора(500 уровень)
+m.EffectsAxes3_1=Улучшение урона
+m.AbilLockAxes1=Блокируется до 500+ уровня(Мастерство топора)
+m.AbilBonusAxes1_0=Мастерство топора
+m.AbilBonusAxes1_1=Дает бонус в 4 урона
+m.AxesCritChance=[[RED]]Шанс критического удара: [[YELLOW]]{0}%
+m.AxesSkullLength=[[RED]]Продолжительность Разрушителя Черепов: [[YELLOW]]{0}s
+m.SkillSwords=Мечи
+m.XPGainSwords=Атаковать монстров мечом
+m.EffectsSwords1_0=Контр-Атака
+m.EffectsSwords1_1=Отражает 50% полученного урона
+m.EffectsSwords2_0=Зазубренные мечи(способность)
+m.EffectsSwords2_1=25% Урона+ и кровотечение от удара
+m.EffectsSwords3_0=Увелечение длительности способности "Зазубренные мечи"
+m.EffectsSwords3_1=Кровотечение 5 раз
+m.EffectsSwords4_0=Парирование
+m.EffectsSwords4_1=Отрицательный урон
+m.EffectsSwords5_0=Кровотечение
+m.EffectsSwords5_1=Заставляет врага кровоточить
+m.SwordsCounterAttChance=[[RED]]Шанс Контр-Атаки: [[YELLOW]]{0}%
+m.SwordsBleedLength=[[RED]]Длительность кровотечения: [[YELLOW]]{0} раз
+m.SwordsBleedChance=[[RED]]Шанс кровотечения: [[YELLOW]]{0} %
+m.SwordsParryChance=[[RED]]Шанс парирования: [[YELLOW]]{0} %
+m.SwordsSSLength=[[RED]]Длительность "Зазубренныx мечей": [[YELLOW]]{0}s
+m.SwordsTickNote=[[GRAY]]Заметка: [[YELLOW]]1 раз длиться 2 секунды
+m.SkillAcrobatics=Акробатика
+m.XPGainAcrobatics=Нужно Падать с гор
+m.EffectsAcrobatics1_0=Переворот
+m.EffectsAcrobatics1_1=Поглощает или уменьшает урон
+m.EffectsAcrobatics2_0=Превосходный переворот
+m.EffectsAcrobatics2_1=Дважды эффективнее переворота
+m.EffectsAcrobatics3_0=Уворот
+m.EffectsAcrobatics3_1=Уменьшает урон наполовину от стрелы
+m.AcrobaticsRollChance=[[RED]]Шанс переворота: [[YELLOW]]{0}%
+m.AcrobaticsGracefulRollChance=[[RED]]Шанс превосходного переворота: [[YELLOW]]{0}%
+m.AcrobaticsDodgeChance=[[RED]]Шанс уворота: [[YELLOW]]{0}%
+m.SkillMining=Шахтёрство
+m.XPGainMining=Добывать руду и камни в шахтах
+m.EffectsMining1_0=Супер разрушитель(способность)
+m.EffectsMining1_1=Увеличение скорости, Шанс тройного дропа
+m.EffectsMining2_0=Двойной дроп
+m.EffectsMining2_1=Двойной дроп становится нормальным
+m.MiningDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
+m.MiningSuperBreakerLength=[[RED]]Длительность способности "Супер Разрушитель": [[YELLOW]]{0}s
+m.SkillRepair=Починка
+m.XPGainRepair=Чинить вещи
+m.EffectsRepair1_0=Починка
+m.EffectsRepair1_1=Чинит Железные инструменты и броню
+m.EffectsRepair2_0=Мастерство починки
+m.EffectsRepair2_1=Увеличивает качество ремонта
+m.EffectsRepair3_0=Супер починка
+m.EffectsRepair3_1=Двойная эффективность вещей
+m.EffectsRepair4_0=Починка Алмазных вещей ({0}+ уровень)
+m.EffectsRepair4_1=Чинить Алмазные инструменты и броню
+m.RepairRepairMastery=[[RED]]Мастерство починки: [[YELLOW]]Дополнительно {0}% долговечности восстановлено
+m.RepairSuperRepairChance=[[RED]]Шанс Супер починки: [[YELLOW]]{0}%
+m.SkillUnarmed=Рукопашный бой
+m.XPGainUnarmed=Атаковать монстров голыми руками
+m.EffectsUnarmed1_0=Берсерк(способность)
+m.EffectsUnarmed1_1=+50% Урона, Ломать слабые материалы
+m.EffectsUnarmed2_0=Обезоружение(Игроки)
+m.EffectsUnarmed2_1=Падает оружие противника на землю, которое находится в руках у него.
+m.EffectsUnarmed3_0=Мастер Рукопашного боя
+m.EffectsUnarmed3_1=Улучшение урона от кулаков
+m.EffectsUnarmed4_0=Ученик рукопашного боя
+m.EffectsUnarmed4_1=Увеличение урона от кулаков
+m.EffectsUnarmed5_0=Отражение стрел
+m.EffectsUnarmed5_1=Стрелы отражаются
+m.AbilLockUnarmed1=Блокируется до 250+ уровня(Ученик рукопашного боя)
+m.AbilLockUnarmed2=Блокируется до 500+ уровня(Мастер Рукопашного боя)
+m.AbilBonusUnarmed1_0=Ученик рукопашного боя
+m.AbilBonusUnarmed1_1=+2 бонус к урону
+m.AbilBonusUnarmed2_0=Мастер Рукопашного боя
+m.AbilBonusUnarmed2_1=+4 бонус к урону
+m.UnarmedArrowDeflectChance=[[RED]]Шанс отразить стрелы: [[YELLOW]]{0}%
+m.UnarmedDisarmChance=[[RED]]Шанс обезоружить: [[YELLOW]]{0}%
+m.UnarmedBerserkLength=[[RED]]Длительность "Берсерка": [[YELLOW]]{0}s
+m.SkillHerbalism=Травоведение
+m.XPGainHerbalism=Выращивать растения
+m.EffectsHerbalism1_0=Озеленитель(способность)
+m.EffectsHerbalism1_1=Распростронение озеленений, 3-ой дроп
+m.EffectsHerbalism2_0="Зеленый фермер"(Пщеница)
+m.EffectsHerbalism2_1=Авто выращивание пщеницы после посадки
+m.EffectsHerbalism3_0="Зеленый фермер"(Мох)
+m.EffectsHerbalism3_1=Камень -> Замшелый камень + семена
+m.EffectsHerbalism4_0=Улучшение еды
+m.EffectsHerbalism4_1=Улучшает количество здоровья от хлеба и грибного супа
+m.EffectsHerbalism5_0=Дройной дроп(Все растения)
+m.EffectsHerbalism5_1=Двойной дроп становится нормальным
+m.HerbalismGreenTerraLength=[[RED]]Продолжительность "Озеленителя": [[YELLOW]]{0}s
+m.HerbalismGreenThumbChance=[[RED]]Шанс "Зеленого фермера": [[YELLOW]]{0}%
+m.HerbalismGreenThumbStage=[[RED]]Уровень "Зеленого фермера": [[YELLOW]] Пщеница растет по-уровнево {0}
+m.HerbalismDoubleDropChance=[[RED]]Шанс двойного дропа: [[YELLOW]]{0}%
+m.HerbalismFoodPlus=[[RED]]Еда+ (Rank{0}): [[YELLOW]]Бонус {0} лечения
+m.SkillExcavation=Раскопка
+m.XPGainExcavation=Раскапывать и искать сокровища
+m.EffectsExcavation1_0=Мега дрель(способность)
+m.EffectsExcavation1_1=3-ой дроп, 3-ой опыт, Увеличение скорости
+m.EffectsExcavation2_0=Охотник за сокровищами
+m.EffectsExcavation2_1=Способность копать сокровища
+m.ExcavationGreenTerraLength=[[RED]]Продолжительность "Мега дрели": [[YELLOW]]{0}s
+mcBlockListener.PlacedAnvil=[[DARK_RED]]Вы разместили наковальни и теперь можете чинить вещи.
+mcEntityListener.WolfComesBack=[[DARK_GRAY]]Ваш волк хочет вернуться к вам
+mcPlayerListener.AbilitiesOff=Использование способностей выключено
+mcPlayerListener.AbilitiesOn=Использование способностей включено
+mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**Способности восстановлены\!**
+mcPlayerListener.AcrobaticsSkill=Акробатика: 
+mcPlayerListener.ArcherySkill=Стрельба из лука: 
+mcPlayerListener.AxesSkill=Топоры: 
+mcPlayerListener.ExcavationSkill=Раскопка: 
+mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO режим бога выключен
+mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO режим бога включён
+mcPlayerListener.GreenThumb=[[GREEN]]**"Зеленый фермер"**
+mcPlayerListener.GreenThumbFail=[[RED]]**"Зеленый фермер" неудался**
+mcPlayerListener.HerbalismSkill=Травоведение: 
+mcPlayerListener.MiningSkill=Шахтёрство: 
+mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Ваша кровать убрана.
+mcPlayerListener.MyspawnNotExist=[[RED]]Сделайте вашу точку появления возле кровати, поспав на кровати.
+mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Моя точка появления сохранена в этой локации.
+mcPlayerListener.MyspawnTimeNotice=Вы должны подождать {0}m {1}s чтобы использовать появление около кровати
+mcPlayerListener.NoPermission=Недостаточные права.
+mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Если у вас нет доступа к умению, то оно здесь не отобразится.
+mcPlayerListener.NotInParty=[[RED]]Вы не в группе!
+mcPlayerListener.InviteSuccess=[[GREEN]]Приглашение успешно послано.
+mcPlayerListener.ReceivedInvite1=[[RED]]ТРЕВОГА: [[GREEN]]Вы получили приглашение на вступление в группу {0} от {1}
+mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] чтобы одобрить вступление
+mcPlayerListener.InviteAccepted=[[GREEN]]Приглашение одобрено. Вы вступили в группу {0}
+mcPlayerListener.NoInvites=[[RED]]У вас нет приглашений в группу сейчас
+mcPlayerListener.YouAreInParty=[[GREEN]]Вы уже в группе {0}
+mcPlayerListener.PartyMembers=[[GREEN]]Члены группы
+mcPlayerListener.LeftParty=[[RED]]Вы вышли из группы
+mcPlayerListener.JoinedParty=Присоединные группы: {0}
+mcPlayerListener.PartyChatOn=Только чат группы [[GREEN]]Включено
+mcPlayerListener.PartyChatOff=Только чат группы [[RED]]Выключено
+mcPlayerListener.AdminChatOn=Только админ чат [[GREEN]]Включено
+mcPlayerListener.AdminChatOff=Только админ чат [[RED]]Выключено
+mcPlayerListener.MOTD=[[BLUE]]На этом сервере установлен плагин McMMO {0} type [[YELLOW]]/{1}[[BLUE]] для помощи.
+mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Википедия
+mcPlayerListener.PowerLevel=[[DARK_RED]]Уровень умений: 
+mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Уровень умений [[YELLOW]]Доска Лидеров--
+mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Доска Лидеров--
+mcPlayerListener.RepairSkill=Починка: 
+mcPlayerListener.SwordsSkill=Мечи: 
+mcPlayerListener.TamingSkill=Приручение волков: 
+mcPlayerListener.UnarmedSkill=Рукопашный бой: 
+mcPlayerListener.WoodcuttingSkill=Деревообработка: 
+mcPlayerListener.YourStats=[[GREEN]][mcMMO] Характеристики
+Party.InformedOnJoin={0} [[GREEN]] присоединился к группе
+Party.InformedOnQuit={0} [[GREEN]] ушёл из группы
+Skills.YourGreenTerra=[[GREEN]]Ваша способность[[YELLOW]]"Озеленение" [[GREEN]]восстановлена!
+Skills.YourTreeFeller=[[GREEN]]Ваша способность [[YELLOW]]"Любитель деревьев" [[GREEN]]восстановлена!
+Skills.YourSuperBreaker=[[GREEN]]Ваша способность [[YELLOW]]"Супер разрушитель" [[GREEN]]восстановлена!
+Skills.YourSerratedStrikes=[[GREEN]]Ваша способность [[YELLOW]]"Зазубренные мечи" [[GREEN]]восстановлена!
+Skills.YourBerserk=[[GREEN]]Ваша способность [[YELLOW]]"Берсерк" [[GREEN]]восстановлена!
+Skills.YourSkullSplitter=[[GREEN]]Ваша способность [[YELLOW]]"Разрушитель черепов" [[GREEN]]восстановлена!
+Skills.YourGigaDrillBreaker=[[GREEN]]Ваша способность [[YELLOW]]"Мега дрель" [[GREEN]]восстановлена!
+Skills.TooTired=[[RED]]Вы слишком устали, чтобы использовать способность ещё раз.
+Skills.ReadyHoe=[[GREEN]]**Приготовьте вашу Мотыгу**
+Skills.LowerHoe=[[GRAY]]**Опустите вашу Мотыгу**
+Skills.ReadyAxe=[[GREEN]]**Приготовьте ваш Топор**
+Skills.LowerAxe=[[GRAY]]**Опустите ваш Топор**
+Skills.ReadyFists=[[GREEN]]**Приготовьте ваши Кулаки**
+Skills.LowerFists=[[GRAY]]**Опустите ваши Кулаки**
+Skills.ReadyPickAxe=[[GREEN]]**Приготовьте вашу Кирку**
+Skills.LowerPickAxe=[[GRAY]]**Опустите вашу Кирку**
+Skills.ReadyShovel=[[GREEN]]**Приготовьте вашу Лопату**
+Skills.LowerShovel=[[GRAY]]**Опустите вашу Лопату**
+Skills.ReadySword=[[GREEN]]**Приготовьте ваш Меч**
+Skills.LowerSword=[[GRAY]]**Опустите ваш Меч**
+Skills.BerserkOn=[[GREEN]]**Способность "Берсерк" активирована**
+Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Берсерк"!
+Skills.GreenTerraOn=[[GREEN]]**Способность "Озеленение" активирована**
+Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Озеленение"!
+Skills.TreeFellerOn=[[GREEN]]**Способность "Любитель Деревьев" активирована**
+Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Любитель Деревьев"!
+Skills.SuperBreakerOn=[[GREEN]]**Способность "Супер Разрушитель" активирована**
+Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Супер Разрушитель"!
+Skills.SerratedStrikesOn=[[GREEN]]**Способность "Зазубренные мечи" активирована**
+Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Зазубренные мечи"!
+Skills.SkullSplitterOn=[[GREEN]]**Способность "Разрешитель черепов" активирована**
+Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Разрушитель черепов"!
+Skills.GigaDrillBreakerOn=[[GREEN]]**Способность "Мега дрель" активирована**
+Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] использовал способность [[RED]]"Мега дрель"!
+Skills.GreenTerraOff=[[RED]]**Способность "Озеленение" деактивирована**
+Skills.TreeFellerOff=[[RED]]**Способность "Любитель Деревьев" деактивирована**
+Skills.SuperBreakerOff=[[RED]]**Способность "Супер Разрушитель" деактивирована**
+Skills.SerratedStrikesOff=[[RED]]**Способность "Зазубренные мечи" деактивирована**
+Skills.BerserkOff=[[RED]]**Способность "Берсерк" деактивирована**
+Skills.SkullSplitterOff=[[RED]]**Способность "Разрешитель черепов" деактивирована**
+Skills.GigaDrillBreakerOff=[[RED]]**Способность "Мега дрель" деактивирована**
+Skills.TamingUp=[[YELLOW]]Умение "Приручение волков" повышено на {0}. Всего ({1})
+Skills.AcrobaticsUp=[[YELLOW]]Умение "Акробатика" повышено на {0}. Всего ({1})
+Skills.ArcheryUp=[[YELLOW]]Умение "Стрельба из лука" повышено на {0}. Всего ({1})
+Skills.SwordsUp=[[YELLOW]]Умение "Мечи" повышено на {0}. Всего ({1})
+Skills.AxesUp=[[YELLOW]]Умение "Топоры" повышено на {0}. Всего ({1})
+Skills.UnarmedUp=[[YELLOW]]Умение "Рукопашный бой" повышено на {0}. Всего ({1})
+Skills.HerbalismUp=[[YELLOW]]Умение "Травоведение" повышено на {0}. Всего ({1})
+Skills.MiningUp=[[YELLOW]]Умение "Шахтёрство" повышено на {0}. Всего ({1})
+Skills.WoodcuttingUp=[[YELLOW]]Умение "Деревообработка" повышено на {0}. Всего ({1})
+Skills.RepairUp=[[YELLOW]]Умение "Починка" повышено на {0}. Всего ({1})
+Skills.ExcavationUp=[[YELLOW]]Умение "Раскопка" повышено на {0}. Всего ({1})
+Skills.FeltEasy=[[GRAY]]Это было легко.
+Skills.StackedItems=[[DARK_RED]]Вы не можете чинить стакующиеся предметы
+Skills.NeedMore=[[DARK_RED]]Нужно больше материала
+Skills.AdeptDiamond=[[DARK_RED]]Вы не обучены чинить алмазные инструменты и броню
+Skills.FullDurability=[[GRAY]]Вещь не нуждается в починке.
+Skills.Disarmed=[[DARK_RED]]Вы обезоружены!
+mcPlayerListener.SorcerySkill=Колдовство: 
+m.SkillSorcery=Колдовство
+Sorcery.HasCast=[[GREEN]]**Использую "Колдовство"**[[GOLD]]
+Sorcery.Current_Mana=[[DARK_AQUA]] Маны
+Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
+Sorcery.Cost=[[RED]][COST] {0} Маны
+Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] Не хватает маны [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
+Sorcery.Water.Thunder=Гром
+Sorcery.Curative.Self=Вылечить себя
+Sorcery.Curative.Other=Вылечить других
+m.LVL=[[DARK_GRAY]]Уровень: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
+Combat.BeastLore=[[GREEN]]**Умение "Удар волка" активировано**
+Combat.BeastLoreOwner=[[DARK_AQUA]]Владелец ([[RED]]{0}[[DARK_AQUA]])
+Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Здоровья ([[GREEN]]{0}[[DARK_AQUA]]/20)
+Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Здоровья ([[GREEN]]{0}[[DARK_AQUA]]/8)
+Party.Locked=[[RED]]Группа запаролена, только лидер группы может приглашать.
+Party.IsntLocked=[[GRAY]]Группа разблокирована
+Party.Unlocked=[[GRAY]]Группа разблокирована
+Party.Help1=[[RED]]Использование [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] или [[WHITE]]'q' [[YELLOW]]для выхода
+Party.Help2=[[RED]]Чтобы присоединится к запароленной группе введите [[YELLOW]]/{0} [[WHITE]]<имя> <пароль>
+Party.Help3=[[RED]]Введите /{0} ? для большей информации
+Party.Help4=[[RED]]Используйте [[YELLOW]]/{0} [[WHITE]]<имя> [[YELLOW]]чтобы присоединится к группе или [[WHITE]]'q' [[YELLOW]]для выхода
+Party.Help5=[[RED]]Чтобы заблокировать группу введите [[YELLOW]]/{0} [[WHITE]]lock
+Party.Help6=[[RED]]Чтобы разблокировать группу введите [[YELLOW]]/{0} [[WHITE]]unlock
+Party.Help7=[[RED]]Чтобы запаролить группу введите [[YELLOW]]/{0} [[WHITE]]password <пароль>
+Party.Help8=[[RED]]Чтобы выкинуть игрока из группы введите [[YELLOW]]/{0} [[WHITE]]kick <игрок>
+Party.Help9=[[RED]]Чтобы отдать лидерство группы введите [[YELLOW]]/{0} [[WHITE]]owner <игрок>
+Party.NotOwner=[[DARK_RED]]Вы теперь не лидер группы
+Party.InvalidName=[[DARK_RED]]Некорректное имя группы
+Party.PasswordSet=[[GREEN]]Пароль группы назначен {0}
+Party.CouldNotKick=[[DARK_RED]]Вы не можете убрать игрока из группы {0}
+Party.NotInYourParty=[[DARK_RED]]{0} не в группе
+Party.CouldNotSetOwner=[[DARK_RED]]Вы не можете отдать лидерство игроку {0}
+mcMMO.Description=[[DARK_AQUA]]Q: Что это?,[[GOLD]]mcMMO это [[RED]]ОПЕН СУРС[[GOLD]] RPG мод для сервера Bukkit от пользователя [[BLUE]]nossr50,[[GOLD]]Здесь было добавлено много умений для Minecraft сервера.,[[GOLD]]Вы можете прокачать их разными способами,[[GOLD]]Вы хотите найти больше информации о умении [[GREEN]]/SKILLNAME[[GOLD]] ?,[[DARK_AQUA]]Q: Что я должен сделать?,[[GOLD]]Для примера... in [[DARK_AQUA]]Шахтёрство[[GOLD]] вы получите [[RED]]2-ой дроп[[GOLD]] или способность [[RED]]"Супер разрушитель"[[GOLD]] ,которая активируется [[GOLD]]нажатием правой кнопки мыши на некоторое время,[[GOLD]]связанное с вашим уровнем умения. Поднять уровень [[BLUE]]Шахтёрства,[[GOLD]]легко просто копайте руды и камни!
+m.SkillAlchemy=ALCHEMY
+m.SkillEnchanting=ENCHANTING
+m.SkillFishing=FISHING
+mcPlayerListener.AlchemySkill=Alchemy: 
+mcPlayerListener.EnchantingSkill=Enchanting: 
+mcPlayerListener.FishingSkill=Fishing: 
+Skills.AlchemyUp=[[YELLOW]]Alchemy skill increased by {0}. Total ({1})
+Skills.EnchantingUp=[[YELLOW]]Enchanting skill increased by {0}. Total ({1})
+Skills.FishingUp=[[YELLOW]]Fishing skill increased by {0}. Total ({1})
+Repair.LostEnchants=[[RED]]You were not skilled enough to keep any enchantments.
+Repair.ArcanePerfect=[[GREEN]]You have sustained the arcane energies in this item.
+Repair.Downgraded=[[RED]]Arcane power has decreased for this item.
+Repair.ArcaneFailed=[[RED]]Arcane power has permanently left the item.
+m.EffectsRepair5_0=Arcane Forging
+m.EffectsRepair5_1=Repair magic items
+m.ArcaneForgingRank=[[RED]]Arcane Forging: [[YELLOW]]Rank {0}/4
+m.ArcaneEnchantKeepChance=[[GRAY]]AF Success Rate: [[YELLOW]]{0}%
+m.ArcaneEnchantDowngradeChance=[[GRAY]]AF Downgrade Chance: [[YELLOW]]{0}%
+m.ArcaneForgingMilestones=[[GOLD]][TIP] AF Rank Ups: [[GRAY]]Rank 1 = 100+, Rank 2 = 250+,
+m.ArcaneForgingMilestones2=[[GRAY]] Rank 3 = 500+, Rank 4 = 750+
+Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
+Fishing.ItemFound=[[GRAY]]Treasure found!
+m.SkillFishing=FISHING
+m.XPGainFishing=Fishing (Go figure!)
+m.EffectsFishing1_0=Treasure Hunter (Passive)
+m.EffectsFishing1_1=Fish up misc objects
+m.EffectsFishing2_0=Magic Hunter
+m.EffectsFishing2_1=Find Enchanted Items
+m.EffectsFishing3_0=Shake (vs. Entities)
+m.EffectsFishing3_1=Shake items off of mobs w/ fishing pole
+m.FishingRank=[[RED]]Treasure Hunter Rank: [[YELLOW]]{0}/5
+m.FishingMagicInfo=[[RED]]Magic Hunter: [[GRAY]] **Improves With Treasure Hunter Rank**
+m.ShakeInfo=[[RED]]Shake: [[YELLOW]]Tear items off mobs, mutilating them in the process ;_;
+m.AbilLockFishing1=LOCKED UNTIL 150+ SKILL (SHAKE)
+m.TamingSummon=[[GREEN]]Summoning complete
+m.TamingSummonFailed=[[RED]]You have too many wolves nearby to summon any more.
+m.EffectsTaming7_0=Call of the Wild
+m.EffectsTaming7_1=Summon a wolf to your side
 m.EffectsTaming7_2=[[GRAY]]COTW HOW-TO: Crouch and right click with {0} Bones in hand

+ 91 - 91
src/com/gmail/nossr50/locale/mcLocale.java → src/main/java/com/gmail/nossr50/locale/mcLocale.java

@@ -1,91 +1,91 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.locale;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.bukkit.ChatColor;
-
-import com.gmail.nossr50.config.LoadProperties;
-
-public class mcLocale 
-{
-	private static final String BUNDLE_NAME = "com.gmail.nossr50.locale.locale"; //$NON-NLS-1$
-
-	private static ResourceBundle RESOURCE_BUNDLE = null;
-
-	public static String getString(String key) 
-	{
-		return getString(key, null);
-	}
-
-	public static String getString(String key, Object[] messageArguments) 
-	{
-		try {
-			if (RESOURCE_BUNDLE == null) 
-			{
-				String myLocale = LoadProperties.locale.toLowerCase();
-				try {
-					//attempt to get the locale denoted
-					RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, new Locale(myLocale));
-				} catch (MissingResourceException e) {
-					//System.out.println("Failed to load locale specified by mcmmo.properties '"+myLocale+"', defaulting to en_us");
-					RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, new Locale("en_us"));
-				}
-			}
-			
-			String output = RESOURCE_BUNDLE.getString(key);
-
-			if (messageArguments != null) 
-			{
-				MessageFormat formatter = new MessageFormat("");
-				formatter.applyPattern(output);
-				output = formatter.format(messageArguments);
-			}
-			
-			output = addColors(output);
-			
-			return output;
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-	
-	private static String addColors(String input) {
-		input = input.replaceAll("\\Q[[BLACK]]\\E", ChatColor.BLACK.toString());
-		input = input.replaceAll("\\Q[[DARK_BLUE]]\\E", ChatColor.DARK_BLUE.toString());
-		input = input.replaceAll("\\Q[[DARK_GREEN]]\\E", ChatColor.DARK_GREEN.toString());
-		input = input.replaceAll("\\Q[[DARK_AQUA]]\\E", ChatColor.DARK_AQUA.toString());
-		input = input.replaceAll("\\Q[[DARK_RED]]\\E", ChatColor.DARK_RED.toString());
-		input = input.replaceAll("\\Q[[DARK_PURPLE]]\\E", ChatColor.DARK_PURPLE.toString());
-		input = input.replaceAll("\\Q[[GOLD]]\\E", ChatColor.GOLD.toString());
-		input = input.replaceAll("\\Q[[GRAY]]\\E", ChatColor.GRAY.toString());
-		input = input.replaceAll("\\Q[[DARK_GRAY]]\\E", ChatColor.DARK_GRAY.toString());
-		input = input.replaceAll("\\Q[[BLUE]]\\E", ChatColor.BLUE.toString());
-		input = input.replaceAll("\\Q[[GREEN]]\\E", ChatColor.GREEN.toString());
-		input = input.replaceAll("\\Q[[AQUA]]\\E", ChatColor.AQUA.toString());
-		input = input.replaceAll("\\Q[[RED]]\\E", ChatColor.RED.toString());
-		input = input.replaceAll("\\Q[[LIGHT_PURPLE]]\\E", ChatColor.LIGHT_PURPLE.toString());
-		input = input.replaceAll("\\Q[[YELLOW]]\\E", ChatColor.YELLOW.toString());
-		input = input.replaceAll("\\Q[[WHITE]]\\E", ChatColor.WHITE.toString());
-		
-		return input;
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.locale;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.bukkit.ChatColor;
+
+import com.gmail.nossr50.config.LoadProperties;
+
+public class mcLocale 
+{
+	private static final String BUNDLE_NAME = "com.gmail.nossr50.locale.locale"; //$NON-NLS-1$
+
+	private static ResourceBundle RESOURCE_BUNDLE = null;
+
+	public static String getString(String key) 
+	{
+		return getString(key, null);
+	}
+
+	public static String getString(String key, Object[] messageArguments) 
+	{
+		try {
+			if (RESOURCE_BUNDLE == null) 
+			{
+				String myLocale = LoadProperties.locale.toLowerCase();
+				try {
+					//attempt to get the locale denoted
+					RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, new Locale(myLocale));
+				} catch (MissingResourceException e) {
+					//System.out.println("Failed to load locale specified by mcmmo.properties '"+myLocale+"', defaulting to en_us");
+					RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, new Locale("en_us"));
+				}
+			}
+			
+			String output = RESOURCE_BUNDLE.getString(key);
+
+			if (messageArguments != null) 
+			{
+				MessageFormat formatter = new MessageFormat("");
+				formatter.applyPattern(output);
+				output = formatter.format(messageArguments);
+			}
+			
+			output = addColors(output);
+			
+			return output;
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+	
+	private static String addColors(String input) {
+		input = input.replaceAll("\\Q[[BLACK]]\\E", ChatColor.BLACK.toString());
+		input = input.replaceAll("\\Q[[DARK_BLUE]]\\E", ChatColor.DARK_BLUE.toString());
+		input = input.replaceAll("\\Q[[DARK_GREEN]]\\E", ChatColor.DARK_GREEN.toString());
+		input = input.replaceAll("\\Q[[DARK_AQUA]]\\E", ChatColor.DARK_AQUA.toString());
+		input = input.replaceAll("\\Q[[DARK_RED]]\\E", ChatColor.DARK_RED.toString());
+		input = input.replaceAll("\\Q[[DARK_PURPLE]]\\E", ChatColor.DARK_PURPLE.toString());
+		input = input.replaceAll("\\Q[[GOLD]]\\E", ChatColor.GOLD.toString());
+		input = input.replaceAll("\\Q[[GRAY]]\\E", ChatColor.GRAY.toString());
+		input = input.replaceAll("\\Q[[DARK_GRAY]]\\E", ChatColor.DARK_GRAY.toString());
+		input = input.replaceAll("\\Q[[BLUE]]\\E", ChatColor.BLUE.toString());
+		input = input.replaceAll("\\Q[[GREEN]]\\E", ChatColor.GREEN.toString());
+		input = input.replaceAll("\\Q[[AQUA]]\\E", ChatColor.AQUA.toString());
+		input = input.replaceAll("\\Q[[RED]]\\E", ChatColor.RED.toString());
+		input = input.replaceAll("\\Q[[LIGHT_PURPLE]]\\E", ChatColor.LIGHT_PURPLE.toString());
+		input = input.replaceAll("\\Q[[YELLOW]]\\E", ChatColor.YELLOW.toString());
+		input = input.replaceAll("\\Q[[WHITE]]\\E", ChatColor.WHITE.toString());
+		
+		return input;
+	}
+}

+ 521 - 521
src/com/gmail/nossr50/m.java → src/main/java/com/gmail/nossr50/m.java

@@ -1,521 +1,521 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.*;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.config.*;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
-import com.gmail.nossr50.datatypes.SkillType;
-
-public class m 
-{
-	public static final Logger log = Logger.getLogger("Minecraft"); 
-	/*
-	 * I'm storing my misc functions/methods in here in an unorganized manner. Spheal with it.
-	 * This is probably the most embarrassing part of my code for mcMMO
-	 * I really should find an organized place for these things!
-	 */
-	
-	public static String getCapitalized(String target)
-	{
-		String firstLetter = target.substring(0,1);
-		String remainder   = target.substring(1);
-		String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
-		
-		return capitalized;
-	}
-	public static int getInt(String string)
-	{
-		if(isInt(string))
-		{
-			return Integer.parseInt(string);
-		}
-		else
-		{
-			return 0;
-		}
-	}
-	
-	public static Double getDouble(String string)
-	{
-		if(isDouble(string))
-		{
-			return Double.parseDouble(string);
-		}
-		else
-		{
-			return (double) 0;
-		}
-	}
-	
-	public static boolean isDouble(String string)
-	{
-		try 
-		{
-			Double.parseDouble(string);
-		}
-		catch(NumberFormatException nFE) {
-			return false;
-		}
-		return true;
-	}
-	
-	public static boolean shouldBeWatched(Block block)
-	{
-		int id = block.getTypeId();
-		return id == 103 || id == 82 || id == 16 || id == 73 || id == 49 || id == 81 || id == 83 || id == 86 || id == 91 || id == 1 || id == 17 || id == 42 || id == 87 || id == 89 || id == 2 || id == 3 || id == 12 || id == 13 || id == 21 || id == 15 || id == 14 || id == 56 || id == 38 || id == 37 || id == 39 || id == 40 || id == 24;
-	}
-	
-	public static int getPowerLevel(Player player)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-		int x = 0;
-		if(mcPermissions.getInstance().taming(player))
-			x+=PP.getSkillLevel(SkillType.TAMING);
-		if(mcPermissions.getInstance().mining(player))
-			x+=PP.getSkillLevel(SkillType.MINING);
-		if(mcPermissions.getInstance().woodcutting(player))
-			x+=PP.getSkillLevel(SkillType.WOODCUTTING);
-		if(mcPermissions.getInstance().unarmed(player))
-			x+=PP.getSkillLevel(SkillType.UNARMED);
-		if(mcPermissions.getInstance().herbalism(player))
-			x+=PP.getSkillLevel(SkillType.HERBALISM);
-		if(mcPermissions.getInstance().excavation(player))
-			x+=PP.getSkillLevel(SkillType.EXCAVATION);
-		if(mcPermissions.getInstance().archery(player))
-			x+=PP.getSkillLevel(SkillType.ARCHERY);
-		if(mcPermissions.getInstance().swords(player))
-			x+=PP.getSkillLevel(SkillType.SWORDS);
-		if(mcPermissions.getInstance().axes(player))
-			x+=PP.getSkillLevel(SkillType.AXES);
-		if(mcPermissions.getInstance().acrobatics(player))
-			x+=PP.getSkillLevel(SkillType.ACROBATICS);
-		if(mcPermissions.getInstance().repair(player))
-			x+=PP.getSkillLevel(SkillType.REPAIR);
-		if(mcPermissions.getInstance().fishing(player))
-			x+=PP.getSkillLevel(SkillType.FISHING);
-		return x;
-	}
-
-	public static boolean blockBreakSimulate(Block block, Player player)
-	{
-		FakeBlockBreakEvent event = new FakeBlockBreakEvent(block, player);
-		if(block != null && player != null){
-			Bukkit.getServer().getPluginManager().callEvent(event);
-			if(!event.isCancelled())
-			{
-				return true; //Return true if not cancelled
-			} else {
-				return false; //Return false if cancelled
-			}
-		} else {
-			return false; //Return false if something went wrong
-		}
-	}
-
-	public static void damageTool(Player player, short damage)
-	{
-		if(player.getItemInHand().getTypeId() == 0)
-			return;
-		player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability() + damage));
-		if(player.getItemInHand().getDurability() >= getMaxDurability(getTier(player), player.getItemInHand()))
-		{
-			ItemStack[] inventory = player.getInventory().getContents();
-			for(ItemStack x : inventory)
-			{
-				if(x != null && x.getTypeId() == player.getItemInHand().getTypeId() && x.getDurability() == player.getItemInHand().getDurability()){
-					x.setTypeId(0);
-					x.setAmount(0);
-					player.getInventory().setContents(inventory);
-					return;
-				}
-			}
-		}
-	}
-	public static Integer getTier(Player player)
-	{
-		int i = player.getItemInHand().getTypeId();
-		if(i == 268 || i == 269 || i == 270 || i == 271 || i == 290){
-			return 1; //WOOD
-		} else if (i == 272 || i == 273 || i == 274 || i == 275 || i == 291){
-			return 2; //STONE
-		} else if (i == 256 || i == 257 || i == 258 || i == 267 || i == 292){
-			return 3; //IRON
-		} else if (i == 283 || i == 284 || i == 285 || i == 286 || i == 294){
-			return 1; //GOLD
-		} else if (i == 276 || i == 277 || i == 278 || i == 279 || i == 293){
-			return 4; //DIAMOND
-		} else {
-			return 1; //UNRECOGNIZED
-		}
-	}
-	public static Integer getMaxDurability(Integer tier, ItemStack item)
-	{
-		int id = item.getTypeId();
-		if(tier == 1){
-			if((id == 276 || id == 277 || id == 278 || id == 279 || id == 293)){
-				return 33;
-			} else {
-				return 60;
-			}
-		} else if (tier == 2){
-			return 132;
-		} else if (tier == 3){
-			return 251;
-		} else if (tier == 4){
-			return 1562;
-		} else {
-			return 0;
-		}
-	}
-
-	public static double getDistance(Location loca, Location locb)
-	{
-		return Math.sqrt(Math.pow(loca.getX() - locb.getX(), 2) + Math.pow(loca.getY() - locb.getY(), 2)
-				+ Math.pow(loca.getZ() - locb.getZ(), 2));
-	}
-
-	public static boolean abilityBlockCheck(Block block)
-	{
-		int i = block.getTypeId();
-		if(i == 107 ||i == 117 || i == 116 || i == 96 || i == 68 || i == 355 || i == 26 || i == 323 || i == 25 || i == 54 || i == 69 || i == 92 || i == 77 || i == 58 || i == 61 || i == 62 || i == 42 || i == 71 || i == 64 || i == 84 || i == 324 || i == 330){
-			return false;
-		} else {
-			return true;
-		}
-	}
-
-	public static boolean isBlockAround(Location loc, Integer radius, Integer typeid)
-	{
-		Block blockx = loc.getBlock();
-		int ox = blockx.getX();
-		int oy = blockx.getY();
-		int oz = blockx.getZ();
-		for (int cx = -radius; cx <= radius; cx++) {
-			for (int cy = -radius; cy <= radius; cy++) {
-				for (int cz = -radius; cz <= radius; cz++) {
-					Block block = loc.getWorld().getBlockAt(ox + cx, oy + cy, oz + cz);
-					if (block.getTypeId() == typeid) {
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-
-	public static Integer calculateHealth(Integer health, Integer newvalue){
-		if((health + newvalue) > 20){
-			return 20;
-		} else {
-			return health+newvalue;
-		}
-	}
-	public Integer calculateMinusHealth(Integer health, Integer newvalue){
-		if((health - newvalue) < 1){
-			return 0;
-		} else {
-			return health-newvalue;
-		}
-	}
-	public static boolean isInt(String string)
-	{
-		try 
-		{
-			Integer.parseInt(string);
-		}
-		catch(NumberFormatException nFE) 
-		{
-			return false;
-		}
-		return true;
-	}
-	public static void mcDropItem(Location loc, int id)
-	{
-		if(loc != null)
-		{
-			Material mat = Material.getMaterial(id);
-			byte damage = 0;
-			ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-		}
-	}
-
-	public static boolean isSwords(ItemStack is)
-	{
-		return is.getTypeId() == 268 || is.getTypeId() == 267 || is.getTypeId() == 272 || is.getTypeId() == 283 || is.getTypeId() == 276;
-	}
-	
-	public static boolean isHoe(ItemStack is)
-	{
-		int id = is.getTypeId();
-		return id == 290 || id == 291 || id == 292 || id == 293 || id == 294;
-	}
-	
-	public static boolean isShovel(ItemStack is){
-		return is.getTypeId() == 269 || is.getTypeId() == 273 || is.getTypeId() == 277 || is.getTypeId() == 284 || is.getTypeId() == 256;
-	}
-	
-	public static boolean isAxes(ItemStack is){
-		if(is.getTypeId() == 271 || is.getTypeId() == 258 || is.getTypeId() == 286 || is.getTypeId() == 279 || is.getTypeId() == 275){
-			return true;
-		} else {
-			return false;
-		}
-	}
-	public static boolean isMiningPick(ItemStack is)
-	{
-		if(is.getTypeId() == 270 || is.getTypeId() == 274 || is.getTypeId() == 285 || is.getTypeId() == 257 || is.getTypeId() == 278)
-		{
-			return true;
-		} else {
-			return false;
-		}
-	}
-	public boolean isGold(ItemStack is)
-	{
-		int i = is.getTypeId();
-		if(i == 283 || i == 284 || i == 285 || i == 286 || i == 294 || i == 314 || i == 315 || i == 316 || i == 317){
-			return true;
-		} else {
-			return false;
-		}
-	}
-	public static void convertToMySQL()
-	{
-		if(!LoadProperties.useMySQL)
-			return;
-		
-		Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), new Runnable(){
-			public void run() {
-				String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
-				try {
-					//Open the user file
-					FileReader file = new FileReader(location);
-					BufferedReader in = new BufferedReader(file);
-					String line = "";
-					String playerName = null, mining = null, party = null, miningXP = null, woodcutting = null, woodCuttingXP = null, repair = null, unarmed = null, herbalism = null, excavation = null, archery = null, swords = null, axes = null, acrobatics = null, repairXP = null, unarmedXP = null, herbalismXP = null, excavationXP = null, archeryXP = null, swordsXP = null, axesXP = null, acrobaticsXP = null, taming = null, tamingXP = null, fishing = null, fishingXP = null;
-					int id = 0, theCount = 0;
-					while ((line = in.readLine()) != null) {
-						//Find if the line contains the player we want.
-						String[] character = line.split(":");
-						playerName = character[0];
-						//Check for things we don't want put in the DB
-						if (playerName == null
-								|| playerName.equals("null")
-								|| playerName
-										.equals("#Storage place for user information"))
-							continue;
-
-						//Get Mining
-						if (character.length > 1)
-							mining = character[1];
-						//Party
-						if (character.length > 3)
-							party = character[3];
-						//Mining XP
-						if (character.length > 4)
-							miningXP = character[4];
-						if (character.length > 5)
-							woodcutting = character[5];
-						if (character.length > 6)
-							woodCuttingXP = character[6];
-						if (character.length > 7)
-							repair = character[7];
-						if (character.length > 8)
-							unarmed = character[8];
-						if (character.length > 9)
-							herbalism = character[9];
-						if (character.length > 10)
-							excavation = character[10];
-						if (character.length > 11)
-							archery = character[11];
-						if (character.length > 12)
-							swords = character[12];
-						if (character.length > 13)
-							axes = character[13];
-						if (character.length > 14)
-							acrobatics = character[14];
-						if (character.length > 15)
-							repairXP = character[15];
-						if (character.length > 16)
-							unarmedXP = character[16];
-						if (character.length > 17)
-							herbalismXP = character[17];
-						if (character.length > 18)
-							excavationXP = character[18];
-						if (character.length > 19)
-							archeryXP = character[19];
-						if (character.length > 20)
-							swordsXP = character[20];
-						if (character.length > 21)
-							axesXP = character[21];
-						if (character.length > 22)
-							acrobaticsXP = character[22];
-						if (character.length > 24)
-							taming = character[24];
-						if (character.length > 25)
-							tamingXP = character[25];
-						if (character.length > 34)
-							fishing = character[34];
-						if (character.length > 35)
-							fishingXP = character[35];
-
-						//Check to see if the user is in the DB
-						id = mcMMO.database.GetInt("SELECT id FROM "
-								+ LoadProperties.MySQLtablePrefix
-								+ "users WHERE user = '" + playerName + "'");
-
-						if (id > 0) {
-							theCount++;
-							//Update the skill values
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "users SET lastlogin = " + 0
-									+ " WHERE id = " + id);
-							//if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
-							//mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "skills SET " + "  taming = taming+"
-									+ getInt(taming) + ", mining = mining+"
-									+ getInt(mining) + ", repair = repair+"
-									+ getInt(repair)
-									+ ", woodcutting = woodcutting+"
-									+ getInt(woodcutting)
-									+ ", unarmed = unarmed+" + getInt(unarmed)
-									+ ", herbalism = herbalism+"
-									+ getInt(herbalism)
-									+ ", excavation = excavation+"
-									+ getInt(excavation)
-									+ ", archery = archery+" + getInt(archery)
-									+ ", swords = swords+" + getInt(swords)
-									+ ", axes = axes+" + getInt(axes)
-									+ ", acrobatics = acrobatics+"
-									+ getInt(acrobatics)
-									+ ", fishing = fishing+" + getInt(fishing)
-									+ " WHERE user_id = " + id);
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "experience SET " + "  taming = "
-									+ getInt(tamingXP) + ", mining = "
-									+ getInt(miningXP) + ", repair = "
-									+ getInt(repairXP) + ", woodcutting = "
-									+ getInt(woodCuttingXP) + ", unarmed = "
-									+ getInt(unarmedXP) + ", herbalism = "
-									+ getInt(herbalismXP) + ", excavation = "
-									+ getInt(excavationXP) + ", archery = "
-									+ getInt(archeryXP) + ", swords = "
-									+ getInt(swordsXP) + ", axes = "
-									+ getInt(axesXP) + ", acrobatics = "
-									+ getInt(acrobaticsXP) + ", fishing = "
-									+ getInt(fishingXP) + " WHERE user_id = "
-									+ id);
-						} else {
-							theCount++;
-							//Create the user in the DB
-							mcMMO.database.Write("INSERT INTO "
-									+ LoadProperties.MySQLtablePrefix
-									+ "users (user, lastlogin) VALUES ('"
-									+ playerName + "',"
-									+ System.currentTimeMillis() / 1000 + ")");
-							id = mcMMO.database
-									.GetInt("SELECT id FROM "
-											+ LoadProperties.MySQLtablePrefix
-											+ "users WHERE user = '"
-											+ playerName + "'");
-							mcMMO.database.Write("INSERT INTO "
-									+ LoadProperties.MySQLtablePrefix
-									+ "spawn (user_id) VALUES (" + id + ")");
-							mcMMO.database.Write("INSERT INTO "
-									+ LoadProperties.MySQLtablePrefix
-									+ "skills (user_id) VALUES (" + id + ")");
-							mcMMO.database.Write("INSERT INTO "
-									+ LoadProperties.MySQLtablePrefix
-									+ "experience (user_id) VALUES (" + id
-									+ ")");
-							//Update the skill values
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "users SET lastlogin = " + 0
-									+ " WHERE id = " + id);
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "users SET party = '" + party
-									+ "' WHERE id = " + id);
-							/*
-							if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
-								mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
-							 */
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "skills SET " + "  taming = "
-									+ getInt(taming) + ", mining = "
-									+ getInt(mining) + ", repair = "
-									+ getInt(repair) + ", woodcutting = "
-									+ getInt(woodcutting) + ", unarmed = "
-									+ getInt(unarmed) + ", herbalism = "
-									+ getInt(herbalism) + ", excavation = "
-									+ getInt(excavation) + ", archery = "
-									+ getInt(archery) + ", swords = "
-									+ getInt(swords) + ", axes = "
-									+ getInt(axes) + ", acrobatics = "
-									+ getInt(acrobatics) + ", fishing = "
-									+ getInt(fishing) + " WHERE user_id = "
-									+ id);
-							mcMMO.database.Write("UPDATE "
-									+ LoadProperties.MySQLtablePrefix
-									+ "experience SET " + "  taming = "
-									+ getInt(tamingXP) + ", mining = "
-									+ getInt(miningXP) + ", repair = "
-									+ getInt(repairXP) + ", woodcutting = "
-									+ getInt(woodCuttingXP) + ", unarmed = "
-									+ getInt(unarmedXP) + ", herbalism = "
-									+ getInt(herbalismXP) + ", excavation = "
-									+ getInt(excavationXP) + ", archery = "
-									+ getInt(archeryXP) + ", swords = "
-									+ getInt(swordsXP) + ", axes = "
-									+ getInt(axesXP) + ", acrobatics = "
-									+ getInt(acrobaticsXP) + ", fishing = "
-									+ getInt(fishingXP) + " WHERE user_id = "
-									+ id);
-						}
-					}
-					System.out
-							.println("[mcMMO] MySQL Updated from users file, "
-									+ theCount
-									+ " items added/updated to MySQL DB");
-					in.close();
-				} catch (Exception e) {
-					log.log(Level.SEVERE, "Exception while reading " + location
-							+ " (Are you sure you formatted it correctly?)", e);
-				}
-			}
-		}, 1);
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.*;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.config.*;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
+import com.gmail.nossr50.datatypes.SkillType;
+
+public class m 
+{
+	public static final Logger log = Logger.getLogger("Minecraft"); 
+	/*
+	 * I'm storing my misc functions/methods in here in an unorganized manner. Spheal with it.
+	 * This is probably the most embarrassing part of my code for mcMMO
+	 * I really should find an organized place for these things!
+	 */
+	
+	public static String getCapitalized(String target)
+	{
+		String firstLetter = target.substring(0,1);
+		String remainder   = target.substring(1);
+		String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
+		
+		return capitalized;
+	}
+	public static int getInt(String string)
+	{
+		if(isInt(string))
+		{
+			return Integer.parseInt(string);
+		}
+		else
+		{
+			return 0;
+		}
+	}
+	
+	public static Double getDouble(String string)
+	{
+		if(isDouble(string))
+		{
+			return Double.parseDouble(string);
+		}
+		else
+		{
+			return (double) 0;
+		}
+	}
+	
+	public static boolean isDouble(String string)
+	{
+		try 
+		{
+			Double.parseDouble(string);
+		}
+		catch(NumberFormatException nFE) {
+			return false;
+		}
+		return true;
+	}
+	
+	public static boolean shouldBeWatched(Block block)
+	{
+		int id = block.getTypeId();
+		return id == 103 || id == 82 || id == 16 || id == 73 || id == 49 || id == 81 || id == 83 || id == 86 || id == 91 || id == 1 || id == 17 || id == 42 || id == 87 || id == 89 || id == 2 || id == 3 || id == 12 || id == 13 || id == 21 || id == 15 || id == 14 || id == 56 || id == 38 || id == 37 || id == 39 || id == 40 || id == 24;
+	}
+	
+	public static int getPowerLevel(Player player)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+		int x = 0;
+		if(mcPermissions.getInstance().taming(player))
+			x+=PP.getSkillLevel(SkillType.TAMING);
+		if(mcPermissions.getInstance().mining(player))
+			x+=PP.getSkillLevel(SkillType.MINING);
+		if(mcPermissions.getInstance().woodcutting(player))
+			x+=PP.getSkillLevel(SkillType.WOODCUTTING);
+		if(mcPermissions.getInstance().unarmed(player))
+			x+=PP.getSkillLevel(SkillType.UNARMED);
+		if(mcPermissions.getInstance().herbalism(player))
+			x+=PP.getSkillLevel(SkillType.HERBALISM);
+		if(mcPermissions.getInstance().excavation(player))
+			x+=PP.getSkillLevel(SkillType.EXCAVATION);
+		if(mcPermissions.getInstance().archery(player))
+			x+=PP.getSkillLevel(SkillType.ARCHERY);
+		if(mcPermissions.getInstance().swords(player))
+			x+=PP.getSkillLevel(SkillType.SWORDS);
+		if(mcPermissions.getInstance().axes(player))
+			x+=PP.getSkillLevel(SkillType.AXES);
+		if(mcPermissions.getInstance().acrobatics(player))
+			x+=PP.getSkillLevel(SkillType.ACROBATICS);
+		if(mcPermissions.getInstance().repair(player))
+			x+=PP.getSkillLevel(SkillType.REPAIR);
+		if(mcPermissions.getInstance().fishing(player))
+			x+=PP.getSkillLevel(SkillType.FISHING);
+		return x;
+	}
+
+	public static boolean blockBreakSimulate(Block block, Player player)
+	{
+		FakeBlockBreakEvent event = new FakeBlockBreakEvent(block, player);
+		if(block != null && player != null){
+			Bukkit.getServer().getPluginManager().callEvent(event);
+			if(!event.isCancelled())
+			{
+				return true; //Return true if not cancelled
+			} else {
+				return false; //Return false if cancelled
+			}
+		} else {
+			return false; //Return false if something went wrong
+		}
+	}
+
+	public static void damageTool(Player player, short damage)
+	{
+		if(player.getItemInHand().getTypeId() == 0)
+			return;
+		player.getItemInHand().setDurability((short) (player.getItemInHand().getDurability() + damage));
+		if(player.getItemInHand().getDurability() >= getMaxDurability(getTier(player), player.getItemInHand()))
+		{
+			ItemStack[] inventory = player.getInventory().getContents();
+			for(ItemStack x : inventory)
+			{
+				if(x != null && x.getTypeId() == player.getItemInHand().getTypeId() && x.getDurability() == player.getItemInHand().getDurability()){
+					x.setTypeId(0);
+					x.setAmount(0);
+					player.getInventory().setContents(inventory);
+					return;
+				}
+			}
+		}
+	}
+	public static Integer getTier(Player player)
+	{
+		int i = player.getItemInHand().getTypeId();
+		if(i == 268 || i == 269 || i == 270 || i == 271 || i == 290){
+			return 1; //WOOD
+		} else if (i == 272 || i == 273 || i == 274 || i == 275 || i == 291){
+			return 2; //STONE
+		} else if (i == 256 || i == 257 || i == 258 || i == 267 || i == 292){
+			return 3; //IRON
+		} else if (i == 283 || i == 284 || i == 285 || i == 286 || i == 294){
+			return 1; //GOLD
+		} else if (i == 276 || i == 277 || i == 278 || i == 279 || i == 293){
+			return 4; //DIAMOND
+		} else {
+			return 1; //UNRECOGNIZED
+		}
+	}
+	public static Integer getMaxDurability(Integer tier, ItemStack item)
+	{
+		int id = item.getTypeId();
+		if(tier == 1){
+			if((id == 276 || id == 277 || id == 278 || id == 279 || id == 293)){
+				return 33;
+			} else {
+				return 60;
+			}
+		} else if (tier == 2){
+			return 132;
+		} else if (tier == 3){
+			return 251;
+		} else if (tier == 4){
+			return 1562;
+		} else {
+			return 0;
+		}
+	}
+
+	public static double getDistance(Location loca, Location locb)
+	{
+		return Math.sqrt(Math.pow(loca.getX() - locb.getX(), 2) + Math.pow(loca.getY() - locb.getY(), 2)
+				+ Math.pow(loca.getZ() - locb.getZ(), 2));
+	}
+
+	public static boolean abilityBlockCheck(Block block)
+	{
+		int i = block.getTypeId();
+		if(i == 107 ||i == 117 || i == 116 || i == 96 || i == 68 || i == 355 || i == 26 || i == 323 || i == 25 || i == 54 || i == 69 || i == 92 || i == 77 || i == 58 || i == 61 || i == 62 || i == 42 || i == 71 || i == 64 || i == 84 || i == 324 || i == 330){
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	public static boolean isBlockAround(Location loc, Integer radius, Integer typeid)
+	{
+		Block blockx = loc.getBlock();
+		int ox = blockx.getX();
+		int oy = blockx.getY();
+		int oz = blockx.getZ();
+		for (int cx = -radius; cx <= radius; cx++) {
+			for (int cy = -radius; cy <= radius; cy++) {
+				for (int cz = -radius; cz <= radius; cz++) {
+					Block block = loc.getWorld().getBlockAt(ox + cx, oy + cy, oz + cz);
+					if (block.getTypeId() == typeid) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+	public static Integer calculateHealth(Integer health, Integer newvalue){
+		if((health + newvalue) > 20){
+			return 20;
+		} else {
+			return health+newvalue;
+		}
+	}
+	public Integer calculateMinusHealth(Integer health, Integer newvalue){
+		if((health - newvalue) < 1){
+			return 0;
+		} else {
+			return health-newvalue;
+		}
+	}
+	public static boolean isInt(String string)
+	{
+		try 
+		{
+			Integer.parseInt(string);
+		}
+		catch(NumberFormatException nFE) 
+		{
+			return false;
+		}
+		return true;
+	}
+	public static void mcDropItem(Location loc, int id)
+	{
+		if(loc != null)
+		{
+			Material mat = Material.getMaterial(id);
+			byte damage = 0;
+			ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+		}
+	}
+
+	public static boolean isSwords(ItemStack is)
+	{
+		return is.getTypeId() == 268 || is.getTypeId() == 267 || is.getTypeId() == 272 || is.getTypeId() == 283 || is.getTypeId() == 276;
+	}
+	
+	public static boolean isHoe(ItemStack is)
+	{
+		int id = is.getTypeId();
+		return id == 290 || id == 291 || id == 292 || id == 293 || id == 294;
+	}
+	
+	public static boolean isShovel(ItemStack is){
+		return is.getTypeId() == 269 || is.getTypeId() == 273 || is.getTypeId() == 277 || is.getTypeId() == 284 || is.getTypeId() == 256;
+	}
+	
+	public static boolean isAxes(ItemStack is){
+		if(is.getTypeId() == 271 || is.getTypeId() == 258 || is.getTypeId() == 286 || is.getTypeId() == 279 || is.getTypeId() == 275){
+			return true;
+		} else {
+			return false;
+		}
+	}
+	public static boolean isMiningPick(ItemStack is)
+	{
+		if(is.getTypeId() == 270 || is.getTypeId() == 274 || is.getTypeId() == 285 || is.getTypeId() == 257 || is.getTypeId() == 278)
+		{
+			return true;
+		} else {
+			return false;
+		}
+	}
+	public boolean isGold(ItemStack is)
+	{
+		int i = is.getTypeId();
+		if(i == 283 || i == 284 || i == 285 || i == 286 || i == 294 || i == 314 || i == 315 || i == 316 || i == 317){
+			return true;
+		} else {
+			return false;
+		}
+	}
+	public static void convertToMySQL()
+	{
+		if(!LoadProperties.useMySQL)
+			return;
+		
+		Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), new Runnable(){
+			public void run() {
+				String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
+				try {
+					//Open the user file
+					FileReader file = new FileReader(location);
+					BufferedReader in = new BufferedReader(file);
+					String line = "";
+					String playerName = null, mining = null, party = null, miningXP = null, woodcutting = null, woodCuttingXP = null, repair = null, unarmed = null, herbalism = null, excavation = null, archery = null, swords = null, axes = null, acrobatics = null, repairXP = null, unarmedXP = null, herbalismXP = null, excavationXP = null, archeryXP = null, swordsXP = null, axesXP = null, acrobaticsXP = null, taming = null, tamingXP = null, fishing = null, fishingXP = null;
+					int id = 0, theCount = 0;
+					while ((line = in.readLine()) != null) {
+						//Find if the line contains the player we want.
+						String[] character = line.split(":");
+						playerName = character[0];
+						//Check for things we don't want put in the DB
+						if (playerName == null
+								|| playerName.equals("null")
+								|| playerName
+										.equals("#Storage place for user information"))
+							continue;
+
+						//Get Mining
+						if (character.length > 1)
+							mining = character[1];
+						//Party
+						if (character.length > 3)
+							party = character[3];
+						//Mining XP
+						if (character.length > 4)
+							miningXP = character[4];
+						if (character.length > 5)
+							woodcutting = character[5];
+						if (character.length > 6)
+							woodCuttingXP = character[6];
+						if (character.length > 7)
+							repair = character[7];
+						if (character.length > 8)
+							unarmed = character[8];
+						if (character.length > 9)
+							herbalism = character[9];
+						if (character.length > 10)
+							excavation = character[10];
+						if (character.length > 11)
+							archery = character[11];
+						if (character.length > 12)
+							swords = character[12];
+						if (character.length > 13)
+							axes = character[13];
+						if (character.length > 14)
+							acrobatics = character[14];
+						if (character.length > 15)
+							repairXP = character[15];
+						if (character.length > 16)
+							unarmedXP = character[16];
+						if (character.length > 17)
+							herbalismXP = character[17];
+						if (character.length > 18)
+							excavationXP = character[18];
+						if (character.length > 19)
+							archeryXP = character[19];
+						if (character.length > 20)
+							swordsXP = character[20];
+						if (character.length > 21)
+							axesXP = character[21];
+						if (character.length > 22)
+							acrobaticsXP = character[22];
+						if (character.length > 24)
+							taming = character[24];
+						if (character.length > 25)
+							tamingXP = character[25];
+						if (character.length > 34)
+							fishing = character[34];
+						if (character.length > 35)
+							fishingXP = character[35];
+
+						//Check to see if the user is in the DB
+						id = mcMMO.database.GetInt("SELECT id FROM "
+								+ LoadProperties.MySQLtablePrefix
+								+ "users WHERE user = '" + playerName + "'");
+
+						if (id > 0) {
+							theCount++;
+							//Update the skill values
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "users SET lastlogin = " + 0
+									+ " WHERE id = " + id);
+							//if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
+							//mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "skills SET " + "  taming = taming+"
+									+ getInt(taming) + ", mining = mining+"
+									+ getInt(mining) + ", repair = repair+"
+									+ getInt(repair)
+									+ ", woodcutting = woodcutting+"
+									+ getInt(woodcutting)
+									+ ", unarmed = unarmed+" + getInt(unarmed)
+									+ ", herbalism = herbalism+"
+									+ getInt(herbalism)
+									+ ", excavation = excavation+"
+									+ getInt(excavation)
+									+ ", archery = archery+" + getInt(archery)
+									+ ", swords = swords+" + getInt(swords)
+									+ ", axes = axes+" + getInt(axes)
+									+ ", acrobatics = acrobatics+"
+									+ getInt(acrobatics)
+									+ ", fishing = fishing+" + getInt(fishing)
+									+ " WHERE user_id = " + id);
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "experience SET " + "  taming = "
+									+ getInt(tamingXP) + ", mining = "
+									+ getInt(miningXP) + ", repair = "
+									+ getInt(repairXP) + ", woodcutting = "
+									+ getInt(woodCuttingXP) + ", unarmed = "
+									+ getInt(unarmedXP) + ", herbalism = "
+									+ getInt(herbalismXP) + ", excavation = "
+									+ getInt(excavationXP) + ", archery = "
+									+ getInt(archeryXP) + ", swords = "
+									+ getInt(swordsXP) + ", axes = "
+									+ getInt(axesXP) + ", acrobatics = "
+									+ getInt(acrobaticsXP) + ", fishing = "
+									+ getInt(fishingXP) + " WHERE user_id = "
+									+ id);
+						} else {
+							theCount++;
+							//Create the user in the DB
+							mcMMO.database.Write("INSERT INTO "
+									+ LoadProperties.MySQLtablePrefix
+									+ "users (user, lastlogin) VALUES ('"
+									+ playerName + "',"
+									+ System.currentTimeMillis() / 1000 + ")");
+							id = mcMMO.database
+									.GetInt("SELECT id FROM "
+											+ LoadProperties.MySQLtablePrefix
+											+ "users WHERE user = '"
+											+ playerName + "'");
+							mcMMO.database.Write("INSERT INTO "
+									+ LoadProperties.MySQLtablePrefix
+									+ "spawn (user_id) VALUES (" + id + ")");
+							mcMMO.database.Write("INSERT INTO "
+									+ LoadProperties.MySQLtablePrefix
+									+ "skills (user_id) VALUES (" + id + ")");
+							mcMMO.database.Write("INSERT INTO "
+									+ LoadProperties.MySQLtablePrefix
+									+ "experience (user_id) VALUES (" + id
+									+ ")");
+							//Update the skill values
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "users SET lastlogin = " + 0
+									+ " WHERE id = " + id);
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "users SET party = '" + party
+									+ "' WHERE id = " + id);
+							/*
+							if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
+								mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
+							 */
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "skills SET " + "  taming = "
+									+ getInt(taming) + ", mining = "
+									+ getInt(mining) + ", repair = "
+									+ getInt(repair) + ", woodcutting = "
+									+ getInt(woodcutting) + ", unarmed = "
+									+ getInt(unarmed) + ", herbalism = "
+									+ getInt(herbalism) + ", excavation = "
+									+ getInt(excavation) + ", archery = "
+									+ getInt(archery) + ", swords = "
+									+ getInt(swords) + ", axes = "
+									+ getInt(axes) + ", acrobatics = "
+									+ getInt(acrobatics) + ", fishing = "
+									+ getInt(fishing) + " WHERE user_id = "
+									+ id);
+							mcMMO.database.Write("UPDATE "
+									+ LoadProperties.MySQLtablePrefix
+									+ "experience SET " + "  taming = "
+									+ getInt(tamingXP) + ", mining = "
+									+ getInt(miningXP) + ", repair = "
+									+ getInt(repairXP) + ", woodcutting = "
+									+ getInt(woodCuttingXP) + ", unarmed = "
+									+ getInt(unarmedXP) + ", herbalism = "
+									+ getInt(herbalismXP) + ", excavation = "
+									+ getInt(excavationXP) + ", archery = "
+									+ getInt(archeryXP) + ", swords = "
+									+ getInt(swordsXP) + ", axes = "
+									+ getInt(axesXP) + ", acrobatics = "
+									+ getInt(acrobaticsXP) + ", fishing = "
+									+ getInt(fishingXP) + " WHERE user_id = "
+									+ id);
+						}
+					}
+					System.out
+							.println("[mcMMO] MySQL Updated from users file, "
+									+ theCount
+									+ " items added/updated to MySQL DB");
+					in.close();
+				} catch (Exception e) {
+					log.log(Level.SEVERE, "Exception while reading " + location
+							+ " (Are you sure you formatted it correctly?)", e);
+				}
+			}
+		}, 1);
+	}
+}

+ 417 - 417
src/com/gmail/nossr50/mcMMO.java → src/main/java/com/gmail/nossr50/mcMMO.java

@@ -1,418 +1,418 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.commands.skills.*;
-import com.gmail.nossr50.commands.spout.*;
-import com.gmail.nossr50.commands.mc.*;
-import com.gmail.nossr50.commands.party.*;
-import com.gmail.nossr50.commands.general.*;
-import com.gmail.nossr50.config.*;
-import com.gmail.nossr50.runnables.mcTimer;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.listeners.mcBlockListener;
-import com.gmail.nossr50.listeners.mcEntityListener;
-import com.gmail.nossr50.listeners.mcPlayerListener;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.skills.*;
-import com.nijikokun.bukkit.Permissions.Permissions;
-
-import org.bukkit.Bukkit;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.bukkit.event.Event.Priority;
-import org.bukkit.event.Event;
-import org.bukkit.plugin.PluginDescriptionFile;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.plugin.PluginManager;
-import org.bukkit.entity.Player;
-import org.getspout.spoutapi.SpoutManager;
-import org.getspout.spoutapi.player.FileManager;
-
-
-public class mcMMO extends JavaPlugin 
-{
-	/*
-	 * I never expected mcMMO to get so popular!
-	 * Thanks for all the support for the mod
-	 * Thanks to the people who have worked on the code
-	 * Thanks to the donators who helped me out financially
-	 * Thanks to the server admins who use my mod :)
-	 * 
-	 * This mod is open source, and its going to stay that way >:3
-	 * 
-	 * Donate via paypal to nossr50@gmail.com (A million thanks to anyone that does!)
-	 */
-	
-	public static String maindirectory = "plugins" + File.separator + "mcMMO";
-	File file = new File(maindirectory + File.separator + "config.yml");
-	static File versionFile = new File(maindirectory + File.separator + "VERSION");
-	public static final Logger log = Logger.getLogger("Minecraft"); 
-	
-	private final mcPlayerListener playerListener = new mcPlayerListener(this);
-	private final mcBlockListener blockListener = new mcBlockListener(this);
-	private final mcEntityListener entityListener = new mcEntityListener(this);
-	
-	public static mcPermissions permissionHandler = new mcPermissions();
-	private Permissions permissions;
-
-	private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION
-	//private Timer mcMMO_SpellTimer = new Timer(true);
-
-	//Alias - Command
-	public HashMap<String, String> aliasMap = new HashMap<String, String>();
-	
-	public static Database database = null;
-	public Misc misc = new Misc(this);
-
-	//Config file stuff
-	LoadProperties config = new LoadProperties();
-	//Jar stuff
-	public static File mcmmo;
-
-	public void onEnable() 
-	{
-		mcmmo = this.getFile();
-		new File(maindirectory).mkdir();
-		
-		if(!versionFile.exists()) 
-		{
-			updateVersion();
-		} else 
-		{
-			String vnum = readVersion();
-			//This will be changed to whatever version preceded when we actually need updater code.
-			//Version 1.0.48 is the first to implement this, no checking before that version can be done.
-			if(vnum.equalsIgnoreCase("1.0.48")) {
-				updateFrom(1);
-			}
-			//Just add in more else if blocks for versions that need updater code.  Increment the updateFrom age int as we do so.
-			//Catch all for versions not matching and no specific code being needed
-			else if(!vnum.equalsIgnoreCase(this.getDescription().getVersion())) updateFrom(-1);
-		}
-		
-		mcPermissions.initialize(getServer());
-		
-		config.configCheck();
-		
-		Party.getInstance().loadParties();
-		new Party(this);
-		
-		if(!LoadProperties.useMySQL)
-			Users.getInstance().loadUsers(); //Load Users file
-		/*
-		 * REGISTER EVENTS
-		 */
-
-		PluginManager pm = getServer().getPluginManager();
-		
-		if(pm.getPlugin("Spout") != null)
-			LoadProperties.spoutEnabled = true;
-		else
-			LoadProperties.spoutEnabled = false;
-
-		//Player Stuff
-		pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Lowest, this);
-		pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this);
-		pm.registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, playerListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.PLAYER_FISH, playerListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Lowest, this);
-
-		//Block Stuff
-		pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Highest, this);
-		pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Monitor, this);
-		pm.registerEvent(Event.Type.BLOCK_FROMTO, blockListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this);
-
-		//Entity Stuff
-		pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
-		pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.Monitor, this);
-		pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
-
-		PluginDescriptionFile pdfFile = this.getDescription();
-		mcPermissions.initialize(getServer());
-
-		if(LoadProperties.useMySQL)
-		{
-			database = new Database(this);
-			database.createStructure();
-		} else
-			Leaderboard.makeLeaderboards(); //Make the leaderboards
-
-		for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile   
-		System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
-		
-		Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20);
-		
-		registerCommands();
-		
-		//Spout Stuff
-		if(LoadProperties.spoutEnabled)
-		{
-			SpoutStuff.setupSpoutConfigs();
-			SpoutStuff.registerCustomEvent();
-			SpoutStuff.extractFiles(); //Extract source materials
-			
-			FileManager FM = SpoutManager.getFileManager();
-			FM.addToPreLoginCache(this, SpoutStuff.getFiles());
-			
-			/*
-			Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this,
-					  new Runnable() {
-
-						  @Override
-						  public void run() {
-							  mmoHelper.updateAll();
-						  }
-					  }, 20, 20);
-			 */
-		}
-	}
-
-	public PlayerProfile getPlayerProfile(Player player)
-	{
-		return Users.getProfile(player);
-	}
-	
-	public void checkXp(Player player, SkillType skillType)
-	{
-		if(skillType == SkillType.ALL)
-			Skills.XpCheckAll(player);
-		else
-			Skills.XpCheckSkill(skillType, player);
-	}
-	
-	public boolean inSameParty(Player playera, Player playerb)
-	{
-		if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){
-			if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){
-				return true;
-			} else {
-				return false;
-			}
-		} else {
-			return false;
-		}
-	}
-	public ArrayList<String> getParties(){
-		String location = "plugins/mcMMO/mcmmo.users"; 
-		ArrayList<String> parties = new ArrayList<String>();
-		try {
-			//Open the users file
-			FileReader file = new FileReader(location);
-			BufferedReader in = new BufferedReader(file);
-			String line = ""; 
-			while((line = in.readLine()) != null)
-			{
-				String[] character = line.split(":"); 
-				String theparty = null;
-				//Party
-				if(character.length > 3)
-					theparty = character[3];
-				if(!parties.contains(theparty))
-					parties.add(theparty);
-			}
-			in.close();
-		} catch (Exception e) {
-			log.log(Level.SEVERE, "Exception while reading " 
-					+ location + " (Are you sure you formatted it correctly?)", e); 
-		}
-		return parties;
-	}
-	public static String getPartyName(Player player){
-		PlayerProfile PP = Users.getProfile(player);
-		return PP.getParty();
-	}
-	public static boolean inParty(Player player){
-		PlayerProfile PP = Users.getProfile(player);
-		return PP.inParty();
-	}
-	public Permissions getPermissions() {
-		return permissions;
-	}
-	public void onDisable() {
-		Bukkit.getServer().getScheduler().cancelTasks(this);
-		System.out.println("mcMMO was disabled."); 
-	}
-	
-	private void registerCommands() {
-		//Register aliases with the aliasmap (used in the playercommandpreprocessevent to ugly alias them to actual commands)
-		//Skills commands
-		aliasMap.put(mcLocale.getString("m.SkillAcrobatics").toLowerCase(), "acrobatics");
-		aliasMap.put(mcLocale.getString("m.SkillArchery").toLowerCase(), "archery");
-		aliasMap.put(mcLocale.getString("m.SkillAxes").toLowerCase(), "axes");
-		aliasMap.put(mcLocale.getString("m.SkillExcavation").toLowerCase(), "excavation");
-		aliasMap.put(mcLocale.getString("m.SkillFishing").toLowerCase(), "fishing");
-		aliasMap.put(mcLocale.getString("m.SkillHerbalism").toLowerCase(), "herbalism");
-		aliasMap.put(mcLocale.getString("m.SkillMining").toLowerCase(), "mining");
-		aliasMap.put(mcLocale.getString("m.SkillRepair").toLowerCase(), "repair");
-		aliasMap.put(mcLocale.getString("m.SkillSwords").toLowerCase(), "swords");
-		aliasMap.put(mcLocale.getString("m.SkillTaming").toLowerCase(), "taming");
-		aliasMap.put(mcLocale.getString("m.SkillUnarmed").toLowerCase(), "unarmed");
-		aliasMap.put(mcLocale.getString("m.SkillWoodCutting").toLowerCase(), "woodcutting");
-		
-		//Mc* commands
-		aliasMap.put(LoadProperties.mcability, "mcability");
-		aliasMap.put(LoadProperties.mcc, "mcc");
-		aliasMap.put(LoadProperties.mcgod, "mcgod");
-		aliasMap.put(LoadProperties.mcmmo, "mcmmo");
-		aliasMap.put(LoadProperties.mcrefresh, "mcrefresh");
-		aliasMap.put(LoadProperties.mctop, "mctop");
-		
-		//Party commands
-		aliasMap.put(LoadProperties.accept, "accept");
-		//aliasMap.put(null, "a");
-		aliasMap.put(LoadProperties.invite, "invite");
-		aliasMap.put(LoadProperties.party, "party");
-		//aliasMap.put(null, "p");
-		aliasMap.put(LoadProperties.ptp, "ptp");
-		
-		//Other commands
-		aliasMap.put(LoadProperties.addxp, "addxp");
-		aliasMap.put(LoadProperties.clearmyspawn, "clearmyspawn");
-		aliasMap.put(LoadProperties.mmoedit, "mmoedit");
-		//aliasMap.put(key, "mmoupdate");
-		aliasMap.put(LoadProperties.myspawn, "myspawn");
-		aliasMap.put(LoadProperties.stats, "stats");
-		aliasMap.put(LoadProperties.whois, "whois");
-		aliasMap.put(LoadProperties.xprate, "xprate");
-		
-		//Spout commands
-		//aliasMap.put(null, "mchud");
-		aliasMap.put(LoadProperties.xplock, "xplock");
-		
-		
-		//Register commands
-		//Skills commands
-		getCommand("acrobatics").setExecutor(new AcrobaticsCommand());
-		getCommand("archery").setExecutor(new ArcheryCommand());
-		getCommand("axes").setExecutor(new AxesCommand());
-		getCommand("excavation").setExecutor(new ExcavationCommand());
-		getCommand("fishing").setExecutor(new FishingCommand());
-		getCommand("herbalism").setExecutor(new HerbalismCommand());
-		getCommand("mining").setExecutor(new MiningCommand());
-		getCommand("repair").setExecutor(new RepairCommand());
-		getCommand("swords").setExecutor(new SwordsCommand());
-		getCommand("taming").setExecutor(new TamingCommand());
-		getCommand("unarmed").setExecutor(new UnarmedCommand());
-		getCommand("woodcutting").setExecutor(new WoodcuttingCommand());
-		
-		//Mc* commands
-		getCommand("mcability").setExecutor(new McabilityCommand());
-		getCommand("mcc").setExecutor(new MccCommand());
-		getCommand("mcgod").setExecutor(new McgodCommand());
-		getCommand("mcmmo").setExecutor(new McmmoCommand());
-		getCommand("mcrefresh").setExecutor(new McrefreshCommand(this));
-		getCommand("mctop").setExecutor(new MctopCommand());
-		
-		//Party commands
-		getCommand("accept").setExecutor(new AcceptCommand());
-		getCommand("a").setExecutor(new ACommand());
-		getCommand("invite").setExecutor(new InviteCommand(this));
-		getCommand("party").setExecutor(new PartyCommand());
-		getCommand("p").setExecutor(new PCommand());
-		getCommand("ptp").setExecutor(new PtpCommand(this));
-		
-		//Other commands
-		getCommand("addxp").setExecutor(new AddxpCommand(this));
-		getCommand("clearmyspawn").setExecutor(new ClearmyspawnCommand());
-		getCommand("mmoedit").setExecutor(new MmoeditCommand(this));
-		getCommand("mmoupdate").setExecutor(new MmoupdateCommand());
-		getCommand("myspawn").setExecutor(new MyspawnCommand());
-		getCommand("stats").setExecutor(new StatsCommand());
-		getCommand("whois").setExecutor(new WhoisCommand(this));
-		getCommand("xprate").setExecutor(new XprateCommand());
-		
-		//Spout commands
-		getCommand("mchud").setExecutor(new MchudCommand());
-		getCommand("xplock").setExecutor(new XplockCommand());
-		
-	}
-
-	/*
-	 * It is important to always assume that you are updating from the lowest possible version.
-	 * Thus, every block of updater code should be complete and self-contained; finishing all 
-	 * SQL transactions and closing all file handlers, such that the next block of updater code
-	 * if called will handle updating as expected.
-	 */
-	public void updateFrom(int age) {
-		//No updater code needed, just update the version.
-		if(age == -1) {
-			updateVersion();
-			return;
-		}
-		//Updater code from age 1 goes here
-		if(age <= 1) {
-			//Since age 1 is an example for now, we will just let it do nothing.
-			
-		}
-		//If we are updating from age 1 but we need more to reach age 2, this will run too.
-		if(age <= 2) {
-			
-		}
-		updateVersion();
-	}
-	
-	public void updateVersion() {
-		try {
-			versionFile.createNewFile();
-			BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile));
-			vout.write(this.getDescription().getVersion());
-			vout.close();
-		} catch (IOException ex) {
-			ex.printStackTrace();
-		} catch (SecurityException ex) {
-			ex.printStackTrace();
-		}
-	}
-
-	public String readVersion() {
-		byte[] buffer = new byte[(int) versionFile.length()];
-		BufferedInputStream f = null;
-		try {
-			f = new BufferedInputStream(new FileInputStream(versionFile));
-			f.read(buffer);
-		} catch (FileNotFoundException ex) {
-			ex.printStackTrace();
-		} catch (IOException ex) {
-			ex.printStackTrace();
-		} finally {
-			if (f != null) try { f.close(); } catch (IOException ignored) { }
-		}
-		
-		return new String(buffer);
-	}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.commands.skills.*;
+import com.gmail.nossr50.commands.spout.*;
+import com.gmail.nossr50.commands.mc.*;
+import com.gmail.nossr50.commands.party.*;
+import com.gmail.nossr50.commands.general.*;
+import com.gmail.nossr50.config.*;
+import com.gmail.nossr50.runnables.mcTimer;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.listeners.mcBlockListener;
+import com.gmail.nossr50.listeners.mcEntityListener;
+import com.gmail.nossr50.listeners.mcPlayerListener;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.skills.*;
+import com.nijikokun.bukkit.Permissions.Permissions;
+
+import org.bukkit.Bukkit;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.bukkit.event.Event.Priority;
+import org.bukkit.event.Event;
+import org.bukkit.plugin.PluginDescriptionFile;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.entity.Player;
+import org.getspout.spoutapi.SpoutManager;
+import org.getspout.spoutapi.player.FileManager;
+
+
+public class mcMMO extends JavaPlugin 
+{
+	/*
+	 * I never expected mcMMO to get so popular!
+	 * Thanks for all the support for the mod
+	 * Thanks to the people who have worked on the code
+	 * Thanks to the donators who helped me out financially
+	 * Thanks to the server admins who use my mod :)
+	 * 
+	 * This mod is open source, and its going to stay that way >:3
+	 * 
+	 * Donate via paypal to nossr50@gmail.com (A million thanks to anyone that does!)
+	 */
+	
+	public static String maindirectory = "plugins" + File.separator + "mcMMO";
+	File file = new File(maindirectory + File.separator + "config.yml");
+	static File versionFile = new File(maindirectory + File.separator + "VERSION");
+	public static final Logger log = Logger.getLogger("Minecraft"); 
+	
+	private final mcPlayerListener playerListener = new mcPlayerListener(this);
+	private final mcBlockListener blockListener = new mcBlockListener(this);
+	private final mcEntityListener entityListener = new mcEntityListener(this);
+	
+	public static mcPermissions permissionHandler = new mcPermissions();
+	private Permissions permissions;
+
+	private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION
+	//private Timer mcMMO_SpellTimer = new Timer(true);
+
+	//Alias - Command
+	public HashMap<String, String> aliasMap = new HashMap<String, String>();
+	
+	public static Database database = null;
+	public Misc misc = new Misc(this);
+
+	//Config file stuff
+	LoadProperties config = new LoadProperties();
+	//Jar stuff
+	public static File mcmmo;
+
+	public void onEnable() 
+	{
+		mcmmo = this.getFile();
+		new File(maindirectory).mkdir();
+		
+		if(!versionFile.exists()) 
+		{
+			updateVersion();
+		} else 
+		{
+			String vnum = readVersion();
+			//This will be changed to whatever version preceded when we actually need updater code.
+			//Version 1.0.48 is the first to implement this, no checking before that version can be done.
+			if(vnum.equalsIgnoreCase("1.0.48")) {
+				updateFrom(1);
+			}
+			//Just add in more else if blocks for versions that need updater code.  Increment the updateFrom age int as we do so.
+			//Catch all for versions not matching and no specific code being needed
+			else if(!vnum.equalsIgnoreCase(this.getDescription().getVersion())) updateFrom(-1);
+		}
+		
+		mcPermissions.initialize(getServer());
+		
+		config.configCheck();
+		
+		Party.getInstance().loadParties();
+		new Party(this);
+		
+		if(!LoadProperties.useMySQL)
+			Users.getInstance().loadUsers(); //Load Users file
+		/*
+		 * REGISTER EVENTS
+		 */
+
+		PluginManager pm = getServer().getPluginManager();
+		
+		if(pm.getPlugin("Spout") != null)
+			LoadProperties.spoutEnabled = true;
+		else
+			LoadProperties.spoutEnabled = false;
+
+		//Player Stuff
+		pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Lowest, this);
+		pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this);
+		pm.registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, playerListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.PLAYER_FISH, playerListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Lowest, this);
+
+		//Block Stuff
+		pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Highest, this);
+		pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Monitor, this);
+		pm.registerEvent(Event.Type.BLOCK_FROMTO, blockListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this);
+
+		//Entity Stuff
+		pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
+		pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.Monitor, this);
+		pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
+
+		PluginDescriptionFile pdfFile = this.getDescription();
+		mcPermissions.initialize(getServer());
+
+		if(LoadProperties.useMySQL)
+		{
+			database = new Database(this);
+			database.createStructure();
+		} else
+			Leaderboard.makeLeaderboards(); //Make the leaderboards
+
+		for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile   
+		System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
+		
+		Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20);
+		
+		registerCommands();
+		
+		//Spout Stuff
+		if(LoadProperties.spoutEnabled)
+		{
+			SpoutStuff.setupSpoutConfigs();
+			SpoutStuff.registerCustomEvent();
+			SpoutStuff.extractFiles(); //Extract source materials
+			
+			FileManager FM = SpoutManager.getFileManager();
+			FM.addToPreLoginCache(this, SpoutStuff.getFiles());
+			
+			/*
+			Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this,
+					  new Runnable() {
+
+						  @Override
+						  public void run() {
+							  mmoHelper.updateAll();
+						  }
+					  }, 20, 20);
+			 */
+		}
+	}
+
+	public PlayerProfile getPlayerProfile(Player player)
+	{
+		return Users.getProfile(player);
+	}
+	
+	public void checkXp(Player player, SkillType skillType)
+	{
+		if(skillType == SkillType.ALL)
+			Skills.XpCheckAll(player);
+		else
+			Skills.XpCheckSkill(skillType, player);
+	}
+	
+	public boolean inSameParty(Player playera, Player playerb)
+	{
+		if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){
+			if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){
+				return true;
+			} else {
+				return false;
+			}
+		} else {
+			return false;
+		}
+	}
+	public ArrayList<String> getParties(){
+		String location = "plugins/mcMMO/mcmmo.users"; 
+		ArrayList<String> parties = new ArrayList<String>();
+		try {
+			//Open the users file
+			FileReader file = new FileReader(location);
+			BufferedReader in = new BufferedReader(file);
+			String line = ""; 
+			while((line = in.readLine()) != null)
+			{
+				String[] character = line.split(":"); 
+				String theparty = null;
+				//Party
+				if(character.length > 3)
+					theparty = character[3];
+				if(!parties.contains(theparty))
+					parties.add(theparty);
+			}
+			in.close();
+		} catch (Exception e) {
+			log.log(Level.SEVERE, "Exception while reading " 
+					+ location + " (Are you sure you formatted it correctly?)", e); 
+		}
+		return parties;
+	}
+	public static String getPartyName(Player player){
+		PlayerProfile PP = Users.getProfile(player);
+		return PP.getParty();
+	}
+	public static boolean inParty(Player player){
+		PlayerProfile PP = Users.getProfile(player);
+		return PP.inParty();
+	}
+	public Permissions getPermissions() {
+		return permissions;
+	}
+	public void onDisable() {
+		Bukkit.getServer().getScheduler().cancelTasks(this);
+		System.out.println("mcMMO was disabled."); 
+	}
+	
+	private void registerCommands() {
+		//Register aliases with the aliasmap (used in the playercommandpreprocessevent to ugly alias them to actual commands)
+		//Skills commands
+		aliasMap.put(mcLocale.getString("m.SkillAcrobatics").toLowerCase(), "acrobatics");
+		aliasMap.put(mcLocale.getString("m.SkillArchery").toLowerCase(), "archery");
+		aliasMap.put(mcLocale.getString("m.SkillAxes").toLowerCase(), "axes");
+		aliasMap.put(mcLocale.getString("m.SkillExcavation").toLowerCase(), "excavation");
+		aliasMap.put(mcLocale.getString("m.SkillFishing").toLowerCase(), "fishing");
+		aliasMap.put(mcLocale.getString("m.SkillHerbalism").toLowerCase(), "herbalism");
+		aliasMap.put(mcLocale.getString("m.SkillMining").toLowerCase(), "mining");
+		aliasMap.put(mcLocale.getString("m.SkillRepair").toLowerCase(), "repair");
+		aliasMap.put(mcLocale.getString("m.SkillSwords").toLowerCase(), "swords");
+		aliasMap.put(mcLocale.getString("m.SkillTaming").toLowerCase(), "taming");
+		aliasMap.put(mcLocale.getString("m.SkillUnarmed").toLowerCase(), "unarmed");
+		aliasMap.put(mcLocale.getString("m.SkillWoodCutting").toLowerCase(), "woodcutting");
+		
+		//Mc* commands
+		aliasMap.put(LoadProperties.mcability, "mcability");
+		aliasMap.put(LoadProperties.mcc, "mcc");
+		aliasMap.put(LoadProperties.mcgod, "mcgod");
+		aliasMap.put(LoadProperties.mcmmo, "mcmmo");
+		aliasMap.put(LoadProperties.mcrefresh, "mcrefresh");
+		aliasMap.put(LoadProperties.mctop, "mctop");
+		
+		//Party commands
+		aliasMap.put(LoadProperties.accept, "accept");
+		//aliasMap.put(null, "a");
+		aliasMap.put(LoadProperties.invite, "invite");
+		aliasMap.put(LoadProperties.party, "party");
+		//aliasMap.put(null, "p");
+		aliasMap.put(LoadProperties.ptp, "ptp");
+		
+		//Other commands
+		aliasMap.put(LoadProperties.addxp, "addxp");
+		aliasMap.put(LoadProperties.clearmyspawn, "clearmyspawn");
+		aliasMap.put(LoadProperties.mmoedit, "mmoedit");
+		//aliasMap.put(key, "mmoupdate");
+		aliasMap.put(LoadProperties.myspawn, "myspawn");
+		aliasMap.put(LoadProperties.stats, "stats");
+		aliasMap.put(LoadProperties.whois, "whois");
+		aliasMap.put(LoadProperties.xprate, "xprate");
+		
+		//Spout commands
+		//aliasMap.put(null, "mchud");
+		aliasMap.put(LoadProperties.xplock, "xplock");
+		
+		
+		//Register commands
+		//Skills commands
+		getCommand("acrobatics").setExecutor(new AcrobaticsCommand());
+		getCommand("archery").setExecutor(new ArcheryCommand());
+		getCommand("axes").setExecutor(new AxesCommand());
+		getCommand("excavation").setExecutor(new ExcavationCommand());
+		getCommand("fishing").setExecutor(new FishingCommand());
+		getCommand("herbalism").setExecutor(new HerbalismCommand());
+		getCommand("mining").setExecutor(new MiningCommand());
+		getCommand("repair").setExecutor(new RepairCommand());
+		getCommand("swords").setExecutor(new SwordsCommand());
+		getCommand("taming").setExecutor(new TamingCommand());
+		getCommand("unarmed").setExecutor(new UnarmedCommand());
+		getCommand("woodcutting").setExecutor(new WoodcuttingCommand());
+		
+		//Mc* commands
+		getCommand("mcability").setExecutor(new McabilityCommand());
+		getCommand("mcc").setExecutor(new MccCommand());
+		getCommand("mcgod").setExecutor(new McgodCommand());
+		getCommand("mcmmo").setExecutor(new McmmoCommand());
+		getCommand("mcrefresh").setExecutor(new McrefreshCommand(this));
+		getCommand("mctop").setExecutor(new MctopCommand());
+		
+		//Party commands
+		getCommand("accept").setExecutor(new AcceptCommand());
+		getCommand("a").setExecutor(new ACommand());
+		getCommand("invite").setExecutor(new InviteCommand(this));
+		getCommand("party").setExecutor(new PartyCommand());
+		getCommand("p").setExecutor(new PCommand());
+		getCommand("ptp").setExecutor(new PtpCommand(this));
+		
+		//Other commands
+		getCommand("addxp").setExecutor(new AddxpCommand(this));
+		getCommand("clearmyspawn").setExecutor(new ClearmyspawnCommand());
+		getCommand("mmoedit").setExecutor(new MmoeditCommand(this));
+		getCommand("mmoupdate").setExecutor(new MmoupdateCommand());
+		getCommand("myspawn").setExecutor(new MyspawnCommand());
+		getCommand("stats").setExecutor(new StatsCommand());
+		getCommand("whois").setExecutor(new WhoisCommand(this));
+		getCommand("xprate").setExecutor(new XprateCommand());
+		
+		//Spout commands
+		getCommand("mchud").setExecutor(new MchudCommand());
+		getCommand("xplock").setExecutor(new XplockCommand());
+		
+	}
+
+	/*
+	 * It is important to always assume that you are updating from the lowest possible version.
+	 * Thus, every block of updater code should be complete and self-contained; finishing all 
+	 * SQL transactions and closing all file handlers, such that the next block of updater code
+	 * if called will handle updating as expected.
+	 */
+	public void updateFrom(int age) {
+		//No updater code needed, just update the version.
+		if(age == -1) {
+			updateVersion();
+			return;
+		}
+		//Updater code from age 1 goes here
+		if(age <= 1) {
+			//Since age 1 is an example for now, we will just let it do nothing.
+			
+		}
+		//If we are updating from age 1 but we need more to reach age 2, this will run too.
+		if(age <= 2) {
+			
+		}
+		updateVersion();
+	}
+	
+	public void updateVersion() {
+		try {
+			versionFile.createNewFile();
+			BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile));
+			vout.write(this.getDescription().getVersion());
+			vout.close();
+		} catch (IOException ex) {
+			ex.printStackTrace();
+		} catch (SecurityException ex) {
+			ex.printStackTrace();
+		}
+	}
+
+	public String readVersion() {
+		byte[] buffer = new byte[(int) versionFile.length()];
+		BufferedInputStream f = null;
+		try {
+			f = new BufferedInputStream(new FileInputStream(versionFile));
+			f.read(buffer);
+		} catch (FileNotFoundException ex) {
+			ex.printStackTrace();
+		} catch (IOException ex) {
+			ex.printStackTrace();
+		} finally {
+			if (f != null) try { f.close(); } catch (IOException ignored) { }
+		}
+		
+		return new String(buffer);
+	}
 }

+ 352 - 352
src/com/gmail/nossr50/mcPermissions.java → src/main/java/com/gmail/nossr50/mcPermissions.java

@@ -1,352 +1,352 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50;
-
-import java.util.logging.Logger;
-
-import org.bukkit.Server;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
-
-import ru.tehkode.permissions.PermissionManager;
-import ru.tehkode.permissions.bukkit.PermissionsEx;
-
-import com.nijiko.permissions.PermissionHandler;
-import com.nijikokun.bukkit.Permissions.Permissions;
-
-public class mcPermissions 
-{
-    private static volatile mcPermissions instance;
-    
-	private enum PermissionType {
-		PEX, PERMISSIONS, BUKKIT
-	}
-	
-	private static PermissionType permissionType;
-	private static Object PHandle;
-	public static boolean permissionsEnabled = false;
-
-    public static void initialize(Server server) 
-    {
-        Logger log = Logger.getLogger("Minecraft");
-        
-		if(permissionsEnabled && permissionType != PermissionType.PERMISSIONS) return;
-		
-		Plugin PEXtest = server.getPluginManager().getPlugin("PermissionsEx");
-		Plugin test = server.getPluginManager().getPlugin("Permissions");
-		if(PEXtest != null) {
-			PHandle = (PermissionManager) PermissionsEx.getPermissionManager();
-			permissionType = PermissionType.PEX;
-			permissionsEnabled = true;
-			log.info("[mcMMO] PermissionsEx found, using PermissionsEx.");
-		} else if(test != null) {
-			PHandle = (PermissionHandler) ((Permissions) test).getHandler();
-			permissionType = PermissionType.PERMISSIONS;
-			permissionsEnabled = true;
-			log.info("[mcMMO] Permissions version "+test.getDescription().getVersion()+" found, using Permissions.");
-		} else {
-			permissionType = PermissionType.BUKKIT;
-			permissionsEnabled = true;
-			log.info("[mcMMO] Using Bukkit Permissions.");
-		}
-    }
-    
-    public static boolean getEnabled()
-    {
-    	return permissionsEnabled;
-    }
-  
-    public static boolean permission(Player player, String permission) 
-    {
-		if(!permissionsEnabled) return player.isOp();
-		switch(permissionType) {
-			case PEX:
-				return ((PermissionManager) PHandle).has(player, permission);
-			case PERMISSIONS:
-				return ((PermissionHandler) PHandle).has(player, permission);
-			case BUKKIT:
-				return player.hasPermission(permission);
-			default:
-				return true;
-		}
-	}
-    public boolean admin(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.admin");
-        } else {
-            return true;
-        }
-    }
-    public boolean mcrefresh(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.tools.mcrefresh");
-        } else {
-            return true;
-        }
-    }
-    public boolean mmoedit(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.tools.mmoedit");
-        } else {
-            return true;
-        }
-    }
-    public boolean herbalismAbility(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.herbalism");
-        } else {
-            return true;
-        }
-    }
-    public boolean excavationAbility(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.excavation");
-        } else {
-            return true;
-        }
-    }
-    public boolean unarmedAbility(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.unarmed");
-        } else {
-            return true;
-        }
-    }
-    public boolean chimaeraWing(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.item.chimaerawing");
-        } else {
-            return true;
-        }
-    }
-    public boolean miningAbility(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.mining");
-        } else {
-            return true;
-        }
-    }
-    public boolean axesAbility(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.axes");
-        } else {
-            return true;
-        }
-    }
-    public boolean swordsAbility(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.swords");
-        } else {
-            return true;
-        }
-    }
-    public boolean woodCuttingAbility(Player player) {
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.ability.woodcutting");
-        } else {
-            return true;
-        }
-    }
-    public boolean mcgod(Player player) {
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.tools.mcgod");
-        } else {
-            return true;
-        }
-    }
-    public boolean regeneration(Player player){
-    	if (permissionsEnabled) {
-            return permission(player, "mcmmo.regeneration");
-        } else {
-            return true;
-        }
-    }
-    public boolean motd(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.motd");
-        } else {
-            return true;
-        }
-    }
-    public boolean mcAbility(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.commands.ability");
-        } else {
-            return true;
-        }
-    }
-    public boolean mySpawn(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.commands.myspawn");
-        } else {
-            return true;
-        }
-    }
-    public boolean setMySpawn(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.commands.setmyspawn");
-        } else {
-            return true;
-        }
-    }
-    public boolean partyChat(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.chat.partychat");
-        } else {
-            return true;
-        }
-    }
-    public boolean partyLock(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.chat.partylock");
-        } else {
-            return true;
-        }
-    }
-    public boolean partyTeleport(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.commands.ptp");
-        } else {
-            return true;
-        }
-    }
-    public boolean whois(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.commands.whois");
-        } else {
-            return true;
-        }
-    }
-    public boolean party(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.commands.party");
-        } else {
-            return true;
-        }
-    }
-    public boolean adminChat(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.chat.adminchat");
-        } else {
-            return true;
-        }
-    }
-    public static mcPermissions getInstance() {
-    	if (instance == null) {
-    	instance = new mcPermissions();
-    	}
-    	return instance;
-    	}
-    public boolean taming(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.taming");
-        } else {
-            return true;
-        }
-    }
-    public boolean mining(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.mining");
-        } else {
-            return true;
-        }
-    }
-    public boolean fishing(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.fishing");
-        } else {
-            return true;
-        }
-    }
-    public boolean alchemy(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.alchemy");
-        } else {
-            return true;
-        }
-    }
-    public boolean enchanting(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.enchanting");
-        } else {
-            return true;
-        }
-    }
-    public boolean woodcutting(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.woodcutting");
-        } else {
-            return true;
-        }
-    }
-    public boolean repair(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.repair");
-        } else {
-            return true;
-        }
-    }
-    public boolean unarmed(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.unarmed");
-        } else {
-            return true;
-        }
-    }
-    public boolean archery(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.archery");
-        } else {
-            return true;
-        }
-    }
-    public boolean herbalism(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.herbalism");
-        } else {
-            return true;
-        }
-    }
-    public boolean excavation(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.excavation");
-        } else {
-            return true;
-        }
-    }
-    public boolean swords(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.swords");
-        } else {
-            return true;
-        }
-    }
-    public boolean axes(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.axes");
-        } else {
-            return true;
-        }
-    }
-    public boolean acrobatics(Player player) {
-        if (permissionsEnabled) {
-            return permission(player, "mcmmo.skills.acrobatics");
-        } else {
-            return true;
-        }
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50;
+
+import java.util.logging.Logger;
+
+import org.bukkit.Server;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+import ru.tehkode.permissions.PermissionManager;
+import ru.tehkode.permissions.bukkit.PermissionsEx;
+
+import com.nijiko.permissions.PermissionHandler;
+import com.nijikokun.bukkit.Permissions.Permissions;
+
+public class mcPermissions 
+{
+    private static volatile mcPermissions instance;
+    
+	private enum PermissionType {
+		PEX, PERMISSIONS, BUKKIT
+	}
+	
+	private static PermissionType permissionType;
+	private static Object PHandle;
+	public static boolean permissionsEnabled = false;
+
+    public static void initialize(Server server) 
+    {
+        Logger log = Logger.getLogger("Minecraft");
+        
+		if(permissionsEnabled && permissionType != PermissionType.PERMISSIONS) return;
+		
+		Plugin PEXtest = server.getPluginManager().getPlugin("PermissionsEx");
+		Plugin test = server.getPluginManager().getPlugin("Permissions");
+		if(PEXtest != null) {
+			PHandle = (PermissionManager) PermissionsEx.getPermissionManager();
+			permissionType = PermissionType.PEX;
+			permissionsEnabled = true;
+			log.info("[mcMMO] PermissionsEx found, using PermissionsEx.");
+		} else if(test != null) {
+			PHandle = (PermissionHandler) ((Permissions) test).getHandler();
+			permissionType = PermissionType.PERMISSIONS;
+			permissionsEnabled = true;
+			log.info("[mcMMO] Permissions version "+test.getDescription().getVersion()+" found, using Permissions.");
+		} else {
+			permissionType = PermissionType.BUKKIT;
+			permissionsEnabled = true;
+			log.info("[mcMMO] Using Bukkit Permissions.");
+		}
+    }
+    
+    public static boolean getEnabled()
+    {
+    	return permissionsEnabled;
+    }
+  
+    public static boolean permission(Player player, String permission) 
+    {
+		if(!permissionsEnabled) return player.isOp();
+		switch(permissionType) {
+			case PEX:
+				return ((PermissionManager) PHandle).has(player, permission);
+			case PERMISSIONS:
+				return ((PermissionHandler) PHandle).has(player, permission);
+			case BUKKIT:
+				return player.hasPermission(permission);
+			default:
+				return true;
+		}
+	}
+    public boolean admin(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.admin");
+        } else {
+            return true;
+        }
+    }
+    public boolean mcrefresh(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.tools.mcrefresh");
+        } else {
+            return true;
+        }
+    }
+    public boolean mmoedit(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.tools.mmoedit");
+        } else {
+            return true;
+        }
+    }
+    public boolean herbalismAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.herbalism");
+        } else {
+            return true;
+        }
+    }
+    public boolean excavationAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.excavation");
+        } else {
+            return true;
+        }
+    }
+    public boolean unarmedAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.unarmed");
+        } else {
+            return true;
+        }
+    }
+    public boolean chimaeraWing(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.item.chimaerawing");
+        } else {
+            return true;
+        }
+    }
+    public boolean miningAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.mining");
+        } else {
+            return true;
+        }
+    }
+    public boolean axesAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.axes");
+        } else {
+            return true;
+        }
+    }
+    public boolean swordsAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.swords");
+        } else {
+            return true;
+        }
+    }
+    public boolean woodCuttingAbility(Player player) {
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.woodcutting");
+        } else {
+            return true;
+        }
+    }
+    public boolean mcgod(Player player) {
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.tools.mcgod");
+        } else {
+            return true;
+        }
+    }
+    public boolean regeneration(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.regeneration");
+        } else {
+            return true;
+        }
+    }
+    public boolean motd(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.motd");
+        } else {
+            return true;
+        }
+    }
+    public boolean mcAbility(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.commands.ability");
+        } else {
+            return true;
+        }
+    }
+    public boolean mySpawn(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.commands.myspawn");
+        } else {
+            return true;
+        }
+    }
+    public boolean setMySpawn(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.commands.setmyspawn");
+        } else {
+            return true;
+        }
+    }
+    public boolean partyChat(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.chat.partychat");
+        } else {
+            return true;
+        }
+    }
+    public boolean partyLock(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.chat.partylock");
+        } else {
+            return true;
+        }
+    }
+    public boolean partyTeleport(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.commands.ptp");
+        } else {
+            return true;
+        }
+    }
+    public boolean whois(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.commands.whois");
+        } else {
+            return true;
+        }
+    }
+    public boolean party(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.commands.party");
+        } else {
+            return true;
+        }
+    }
+    public boolean adminChat(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.chat.adminchat");
+        } else {
+            return true;
+        }
+    }
+    public static mcPermissions getInstance() {
+    	if (instance == null) {
+    	instance = new mcPermissions();
+    	}
+    	return instance;
+    	}
+    public boolean taming(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.taming");
+        } else {
+            return true;
+        }
+    }
+    public boolean mining(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.mining");
+        } else {
+            return true;
+        }
+    }
+    public boolean fishing(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.fishing");
+        } else {
+            return true;
+        }
+    }
+    public boolean alchemy(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.alchemy");
+        } else {
+            return true;
+        }
+    }
+    public boolean enchanting(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.enchanting");
+        } else {
+            return true;
+        }
+    }
+    public boolean woodcutting(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.woodcutting");
+        } else {
+            return true;
+        }
+    }
+    public boolean repair(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.repair");
+        } else {
+            return true;
+        }
+    }
+    public boolean unarmed(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.unarmed");
+        } else {
+            return true;
+        }
+    }
+    public boolean archery(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.archery");
+        } else {
+            return true;
+        }
+    }
+    public boolean herbalism(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.herbalism");
+        } else {
+            return true;
+        }
+    }
+    public boolean excavation(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.excavation");
+        } else {
+            return true;
+        }
+    }
+    public boolean swords(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.swords");
+        } else {
+            return true;
+        }
+    }
+    public boolean axes(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.axes");
+        } else {
+            return true;
+        }
+    }
+    public boolean acrobatics(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.skills.acrobatics");
+        } else {
+            return true;
+        }
+    }
+}

+ 481 - 481
src/com/gmail/nossr50/party/Party.java → src/main/java/com/gmail/nossr50/party/Party.java

@@ -1,481 +1,481 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.party;
-
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.spout.util.ArrayListString;
-
-
-public class Party 
-{
-	/*
-	 * This file is part of mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
-	 * 
-	 * mmoMinecraft is free software: you can redistribute it and/or modify
-	 * it under the terms of the GNU General Public License as published by
-	 * the Free Software Foundation, either version 3 of the License, or
-	 * (at your option) any later version.
-	 *
-	 * This program is distributed in the hope that it will be useful,
-	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 * GNU General Public License for more details.
-
-	 * You should have received a copy of the GNU General Public License
-	 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-	 */
-	
-	public static String partyPlayersFile = mcMMO.maindirectory + File.separator + "FlatFileStuff" + File.separator + "partyPlayers";
-	public static String partyLocksFile = mcMMO.maindirectory + File.separator + "FlatFileStuff" + File.separator + "partyLocks";
-	public static String partyPasswordsFile = mcMMO.maindirectory + File.separator + "FlatFileStuff" + File.separator + "partyPasswords";
-
-	HashMap<String, HashMap<String, Boolean>> partyPlayers = new HashMap<String, HashMap<String, Boolean>>();
-	HashMap<String, Boolean> partyLocks = new HashMap<String, Boolean>();
-	HashMap<String, String> partyPasswords = new HashMap<String, String>();
-	
-	private static mcMMO plugin;
-	public Party(mcMMO instance) {
-		new File(mcMMO.maindirectory + File.separator + "FlatFileStuff").mkdir();
-    	plugin = instance;
-    }
-	private static volatile Party instance;
-	
-	public static Party getInstance() 
-	{
-    	if (instance == null) {
-    		instance = new Party(plugin);
-    	}
-    	return instance;
-    }
-	
-    public boolean inSameParty(Player playera, Player playerb){
-    	if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty())
-    	{
-	        if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty()))
-	        {
-	            return true;
-	        } else 
-	        {
-	            return false;
-	        }
-    	} else 
-    	{
-    		return false;
-    	}
-    }
-    
-	public int partyCount(Player player, Player[] players)
-	{
-        int x = 0;
-        for(Player hurrdurr : players)
-        {
-        	if(player != null && hurrdurr != null)
-        	{
-        	if(Users.getProfile(player).getParty().equals(Users.getProfile(hurrdurr).getParty()))
-        	x++;
-        	}
-        }
-        return x;
-    }
-	
-    public void informPartyMembers(Player player) 
-    {
-    	informPartyMembers(player, Bukkit.getServer().getOnlinePlayers());
-    }
-    
-	
-    public void informPartyMembers(Player player, Player[] players)
-    {
-        int x = 0;
-        for(Player p : players)
-        {
-        	if(player != null && p != null)
-        	{
-                if(inSameParty(player, p) && !p.getName().equals(player.getName()))
-                {
-                	p.sendMessage(mcLocale.getString("Party.InformedOnJoin", new Object[] {player.getName()}));
-                	x++;
-                }
-            }
-        }
-    }
-    
-    public ArrayList<Player> getPartyMembers(Player player)
-    {
-    	ArrayList<Player> players = new ArrayList<Player>();
-    	
-    	for(Player p : Bukkit.getServer().getOnlinePlayers())
-        {
-        	if(p.isOnline() && player != null && p != null)
-        	{
-                if(inSameParty(player, p) && !p.getName().equals(player.getName()))
-                {
-                	players.add(p);
-                }
-            }
-        }
-    	return players;
-    }
-    public ArrayListString getPartyMembersByName(Player player)
-    {
-    	ArrayListString players = new ArrayListString();
-    	
-    	for(Player p : Bukkit.getServer().getOnlinePlayers())
-        {
-        	if(p.isOnline())
-        	{
-                if(inSameParty(player, p))
-                {
-                	players.add(p.getName());
-                }
-            }
-        }
-    	return players;
-    }
-    
-    public void informPartyMembersOwnerChange(String newOwner) {
-    	Player newOwnerPlayer = plugin.getServer().getPlayer(newOwner);
-    	informPartyMembersOwnerChange(newOwnerPlayer, Bukkit.getServer().getOnlinePlayers());
-    }
-    
-    public void informPartyMembersOwnerChange(Player newOwner, Player[] players) {
-        int x = 0;
-        for(Player p : players){
-        	if(newOwner != null && p != null){
-        		if(inSameParty(newOwner, p))
-        		{
-        			//TODO: Needs more locale.
-        			p.sendMessage(newOwner.getName()+" is the new party owner.");
-        			x++;
-                }
-        	}
-        }
-    }
-    
-    public void informPartyMembersQuit(Player player) 
-    {
-    	informPartyMembersQuit(player, Bukkit.getServer().getOnlinePlayers());
-    }
-    
-    public void informPartyMembersQuit(Player player, Player[] players)
-    {
-        int x = 0;
-        for(Player p : players){
-        	if(player != null && p != null){
-        		if(inSameParty(player, p) && !p.getName().equals(player.getName()))
-        		{
-        			p.sendMessage(mcLocale.getString("Party.InformedOnQuit", new Object[] {player.getName()}));
-        			x++;
-                }
-        	}
-        }
-    }
-    
-    public void removeFromParty(Player player, PlayerProfile PP) 
-    {
-    	//Stop NPE... hopefully
-    	if(!isParty(PP.getParty()) || !isInParty(player, PP))
-    		addToParty(player, PP, PP.getParty(), false);
-    		
-    	informPartyMembersQuit(player);
-    	String party = PP.getParty();
-    	if(isPartyLeader(player.getName(), party)) 
-    	{
-    		if(isPartyLocked(party)) {
-    			unlockParty(party);
-    		}
-    	}
-    	
-    	this.partyPlayers.get(party).remove(player.getName());
-    	if(isPartyEmpty(party)) deleteParty(party);
-		PP.removeParty();
-		savePartyPlayers();
-    }
-    
-    public void addToParty(Player player, PlayerProfile PP, String newParty, Boolean invite) {
-    	newParty = newParty.replace(":", ".");
-    	addToParty(player, PP, newParty, invite, null);
-    }
-
-    
-    public void addToParty(Player player, PlayerProfile PP, String newParty, Boolean invite, String password) 
-    {
-    	//Fix for FFS
-    	newParty = newParty.replace(":", ".");
-    	
-    	//Don't care about passwords on invites
-    	if(!invite) 
-    	{
-    		//Don't care about passwords if it isn't locked
-    		if(isPartyLocked(newParty)) 
-    		{
-    			if(isPartyPasswordProtected(newParty)) 
-    			{
-	    			if(password == null) 
-	    			{
-	    				//TODO: Needs more locale.
-	    				player.sendMessage("This party requires a password. Use "+LoadProperties.party+" <party> <password> to join it.");
-	    				return;
-	    			} else if(!password.equalsIgnoreCase(getPartyPassword(newParty))) 
-	    			{
-	    				//TODO: Needs more locale.
-	    				player.sendMessage("Party password incorrect.");
-	    				return;
-	    			}
-    			} else 
-    			{
-    				//TODO: Needs more locale.
-    				player.sendMessage("Party is locked.");
-    				return;
-    			}
-    		}
-    	} else 
-    	{
-			PP.acceptInvite();
-    	}
-    	//New party?
-    	if(!isParty(newParty)) 
-    	{
-    		putNestedEntry(this.partyPlayers, newParty, player.getName(), true);
-    		
-    		//Get default locking behavior from config?
-    		this.partyLocks.put(newParty, false);
-    		this.partyPasswords.put(newParty, null);
-    		saveParties();
-    	} else 
-    	{		
-    		putNestedEntry(this.partyPlayers, newParty, player.getName(), false);
-
-    		savePartyPlayers();
-    	}
-		PP.setParty(newParty);
-		informPartyMembers(player);
-		
-		if(!invite) 
-		{
-			player.sendMessage(mcLocale.getString("mcPlayerListener.JoinedParty", new Object[] { newParty }));
-		} else 
-		{
-			player.sendMessage(mcLocale.getString("mcPlayerListener.InviteAccepted", new Object[]{ PP.getParty() }));
-		}
-    }
-    
-    private static <U,V,W> W putNestedEntry(
-            HashMap<U,HashMap<V,W>> nest,
-            U nestKey,
-            V nestedKey,
-            W nestedValue)
-    {
-        HashMap<V,W> nested = nest.get(nestKey);
-
-        if (nested == null) {
-            nested = new HashMap<V,W>();
-            nest.put(nestKey, nested);
-        }
-
-        return nested.put(nestedKey, nestedValue);        
-    }
-    
-    public void dump(Player player) {
-    	player.sendMessage(partyPlayers.toString());
-    	player.sendMessage(partyLocks.toString());
-    	player.sendMessage(partyPasswords.toString());
-    	Iterator<String> i = partyPlayers.keySet().iterator();
-    	while(i.hasNext()) {
-    		String nestkey = i.next();
-    		player.sendMessage(nestkey);
-    		Iterator<String> j = partyPlayers.get(nestkey).keySet().iterator();
-    		while(j.hasNext()) {
-    			String nestedkey = j.next();
-    			player.sendMessage("."+nestedkey);
-    			if(partyPlayers.get(nestkey).get(nestedkey)) {
-    				player.sendMessage("..True");
-    			} else {
-    				player.sendMessage("..False");
-    			}
-    		}
-    	}
-    }
-    
-    public void lockParty(String partyName) {
-    	this.partyLocks.put(partyName, true);
-    	savePartyLocks();
-    }
-    
-    public void unlockParty(String partyName) {
-    	this.partyLocks.put(partyName, false);
-    	savePartyLocks();
-    }
-    
-    public void deleteParty(String partyName) {
-    	this.partyPlayers.remove(partyName);
-    	this.partyLocks.remove(partyName);
-    	this.partyPasswords.remove(partyName);
-    	saveParties();
-    }
-    
-    public void setPartyPassword(String partyName, String password) {
-    	if(password.equalsIgnoreCase("\"\"")) password = null;
-    	this.partyPasswords.put(partyName, password);
-    	savePartyPasswords();
-    }
-    
-    public void setPartyLeader(String partyName, String playerName) {
-    	Iterator<String> i = partyPlayers.get(partyName).keySet().iterator();
-    	while(i.hasNext()) {
-    		String playerKey = i.next();
-    		if(playerKey.equalsIgnoreCase(playerName)) {
-    			partyPlayers.get(partyName).put(playerName, true);
-    			informPartyMembersOwnerChange(playerName);
-    			//TODO: Needs more locale.
-    			plugin.getServer().getPlayer(playerName).sendMessage("You are now the party owner.");
-    			continue;
-    		}
-    		if(partyPlayers.get(partyName).get(playerKey)) {
-    			//TODO: Needs more locale.
-    			plugin.getServer().getPlayer(playerKey).sendMessage("You are no longer party owner.");
-    			partyPlayers.get(partyName).put(playerKey, false);
-    		}
-    	}
-    }
-    
-    public String getPartyPassword(String partyName) {
-    	return this.partyPasswords.get(partyName);
-    }
-    
-    public boolean canInvite(Player player, PlayerProfile PP) {
-    	return (isPartyLocked(PP.getParty()) && !isPartyLeader(player.getName(), PP.getParty())) ? false : true;
-    }
-    
-    public boolean isParty(String partyName) {
-    	return this.partyPlayers.containsKey(partyName);
-    }
-
-    public boolean isPartyEmpty(String partyName) {
-    	return this.partyPlayers.get(partyName).isEmpty();
-    }
-    
-    public boolean isPartyLeader(String playerName, String partyName) {
-    	if(this.partyPlayers.get(partyName) != null)
-    	{
-	    	if(this.partyPlayers.get(partyName).get(playerName) == null) return false;
-	    	return this.partyPlayers.get(partyName).get(playerName);
-    	}
-    	else
-    		return false;
-    }
-    
-    public boolean isPartyLocked(String partyName) {
-    	if(this.partyLocks.get(partyName) ==  null) return false;
-    	return this.partyLocks.get(partyName);
-    }
-    
-    public boolean isPartyPasswordProtected(String partyName) {
-    	return !(this.partyPasswords.get(partyName) == null);
-    }
-    
-    public boolean isInParty(Player player, PlayerProfile PP) {
-    	return partyPlayers.get(PP.getParty()).containsKey(player.getName());
-    }
-    
-    @SuppressWarnings("unchecked")
-	public void loadParties() {
-    	if(new File(partyPlayersFile).exists()) {
-			try {
-				ObjectInputStream obj = new ObjectInputStream(new FileInputStream(partyPlayersFile));
-				this.partyPlayers = (HashMap<String, HashMap<String, Boolean>>)obj.readObject();
-			} catch (FileNotFoundException e) { e.printStackTrace();
-			} catch (EOFException e) { mcMMO.log.info("partyPlayersFile empty.");
-			} catch (IOException e) { e.printStackTrace();
-			} catch (ClassNotFoundException e) { e.printStackTrace(); }
-    	}
-
-    	if(new File(partyLocksFile).exists()) {
-			try {
-				ObjectInputStream obj = new ObjectInputStream(new FileInputStream(partyLocksFile));
-				this.partyLocks = (HashMap<String, Boolean>)obj.readObject();
-			} catch (FileNotFoundException e) { e.printStackTrace();
-			} catch (EOFException e) { mcMMO.log.info("partyLocksFile empty.");
-			} catch (IOException e) { e.printStackTrace();
-			} catch (ClassNotFoundException e) { e.printStackTrace(); }
-    	}
-
-    	if(new File(partyPasswordsFile).exists()) {
-			try {
-				ObjectInputStream obj = new ObjectInputStream(new FileInputStream(partyPasswordsFile));
-				this.partyPasswords = (HashMap<String, String>)obj.readObject();
-			} catch (FileNotFoundException e) { e.printStackTrace();
-			} catch (EOFException e) { mcMMO.log.info("partyPasswordsFile empty.");
-			} catch (IOException e) { e.printStackTrace();
-			} catch (ClassNotFoundException e) { e.printStackTrace(); }
-    	}
-    }
-    
-    public void saveParties() {
-    	savePartyPlayers();
-    	savePartyLocks();
-    	savePartyPasswords();
-    }
-    
-    public void savePartyPlayers() {
-    	try {
-			new File(partyPlayersFile).createNewFile();
-			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(partyPlayersFile));
-			obj.writeObject(this.partyPlayers);
-			obj.close();
-		} catch (FileNotFoundException e) { e.printStackTrace();
-		} catch (IOException e) { e.printStackTrace(); }
-    }
-    
-    public void savePartyLocks() {
-    	try {
-			new File(partyLocksFile).createNewFile();
-			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(partyLocksFile));
-			obj.writeObject(this.partyLocks);
-			obj.close();
-		} catch (FileNotFoundException e) { e.printStackTrace();
-		} catch (IOException e) { e.printStackTrace(); }
-    }
-    
-    public void savePartyPasswords() {
-    	try {
-			new File(partyPasswordsFile).createNewFile();
-			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(partyPasswordsFile));
-			obj.writeObject(this.partyPasswords);
-			obj.close();
-		} catch (FileNotFoundException e) { e.printStackTrace();
-		} catch (IOException e) { e.printStackTrace(); }
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.party;
+
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.spout.util.ArrayListString;
+
+
+public class Party 
+{
+	/*
+	 * This file is part of mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
+	 * 
+	 * mmoMinecraft is free software: you can redistribute it and/or modify
+	 * it under the terms of the GNU General Public License as published by
+	 * the Free Software Foundation, either version 3 of the License, or
+	 * (at your option) any later version.
+	 *
+	 * This program is distributed in the hope that it will be useful,
+	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 * GNU General Public License for more details.
+
+	 * You should have received a copy of the GNU General Public License
+	 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+	 */
+	
+	public static String partyPlayersFile = mcMMO.maindirectory + File.separator + "FlatFileStuff" + File.separator + "partyPlayers";
+	public static String partyLocksFile = mcMMO.maindirectory + File.separator + "FlatFileStuff" + File.separator + "partyLocks";
+	public static String partyPasswordsFile = mcMMO.maindirectory + File.separator + "FlatFileStuff" + File.separator + "partyPasswords";
+
+	HashMap<String, HashMap<String, Boolean>> partyPlayers = new HashMap<String, HashMap<String, Boolean>>();
+	HashMap<String, Boolean> partyLocks = new HashMap<String, Boolean>();
+	HashMap<String, String> partyPasswords = new HashMap<String, String>();
+	
+	private static mcMMO plugin;
+	public Party(mcMMO instance) {
+		new File(mcMMO.maindirectory + File.separator + "FlatFileStuff").mkdir();
+    	plugin = instance;
+    }
+	private static volatile Party instance;
+	
+	public static Party getInstance() 
+	{
+    	if (instance == null) {
+    		instance = new Party(plugin);
+    	}
+    	return instance;
+    }
+	
+    public boolean inSameParty(Player playera, Player playerb){
+    	if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty())
+    	{
+	        if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty()))
+	        {
+	            return true;
+	        } else 
+	        {
+	            return false;
+	        }
+    	} else 
+    	{
+    		return false;
+    	}
+    }
+    
+	public int partyCount(Player player, Player[] players)
+	{
+        int x = 0;
+        for(Player hurrdurr : players)
+        {
+        	if(player != null && hurrdurr != null)
+        	{
+        	if(Users.getProfile(player).getParty().equals(Users.getProfile(hurrdurr).getParty()))
+        	x++;
+        	}
+        }
+        return x;
+    }
+	
+    public void informPartyMembers(Player player) 
+    {
+    	informPartyMembers(player, Bukkit.getServer().getOnlinePlayers());
+    }
+    
+	
+    public void informPartyMembers(Player player, Player[] players)
+    {
+        int x = 0;
+        for(Player p : players)
+        {
+        	if(player != null && p != null)
+        	{
+                if(inSameParty(player, p) && !p.getName().equals(player.getName()))
+                {
+                	p.sendMessage(mcLocale.getString("Party.InformedOnJoin", new Object[] {player.getName()}));
+                	x++;
+                }
+            }
+        }
+    }
+    
+    public ArrayList<Player> getPartyMembers(Player player)
+    {
+    	ArrayList<Player> players = new ArrayList<Player>();
+    	
+    	for(Player p : Bukkit.getServer().getOnlinePlayers())
+        {
+        	if(p.isOnline() && player != null && p != null)
+        	{
+                if(inSameParty(player, p) && !p.getName().equals(player.getName()))
+                {
+                	players.add(p);
+                }
+            }
+        }
+    	return players;
+    }
+    public ArrayListString getPartyMembersByName(Player player)
+    {
+    	ArrayListString players = new ArrayListString();
+    	
+    	for(Player p : Bukkit.getServer().getOnlinePlayers())
+        {
+        	if(p.isOnline())
+        	{
+                if(inSameParty(player, p))
+                {
+                	players.add(p.getName());
+                }
+            }
+        }
+    	return players;
+    }
+    
+    public void informPartyMembersOwnerChange(String newOwner) {
+    	Player newOwnerPlayer = plugin.getServer().getPlayer(newOwner);
+    	informPartyMembersOwnerChange(newOwnerPlayer, Bukkit.getServer().getOnlinePlayers());
+    }
+    
+    public void informPartyMembersOwnerChange(Player newOwner, Player[] players) {
+        int x = 0;
+        for(Player p : players){
+        	if(newOwner != null && p != null){
+        		if(inSameParty(newOwner, p))
+        		{
+        			//TODO: Needs more locale.
+        			p.sendMessage(newOwner.getName()+" is the new party owner.");
+        			x++;
+                }
+        	}
+        }
+    }
+    
+    public void informPartyMembersQuit(Player player) 
+    {
+    	informPartyMembersQuit(player, Bukkit.getServer().getOnlinePlayers());
+    }
+    
+    public void informPartyMembersQuit(Player player, Player[] players)
+    {
+        int x = 0;
+        for(Player p : players){
+        	if(player != null && p != null){
+        		if(inSameParty(player, p) && !p.getName().equals(player.getName()))
+        		{
+        			p.sendMessage(mcLocale.getString("Party.InformedOnQuit", new Object[] {player.getName()}));
+        			x++;
+                }
+        	}
+        }
+    }
+    
+    public void removeFromParty(Player player, PlayerProfile PP) 
+    {
+    	//Stop NPE... hopefully
+    	if(!isParty(PP.getParty()) || !isInParty(player, PP))
+    		addToParty(player, PP, PP.getParty(), false);
+    		
+    	informPartyMembersQuit(player);
+    	String party = PP.getParty();
+    	if(isPartyLeader(player.getName(), party)) 
+    	{
+    		if(isPartyLocked(party)) {
+    			unlockParty(party);
+    		}
+    	}
+    	
+    	this.partyPlayers.get(party).remove(player.getName());
+    	if(isPartyEmpty(party)) deleteParty(party);
+		PP.removeParty();
+		savePartyPlayers();
+    }
+    
+    public void addToParty(Player player, PlayerProfile PP, String newParty, Boolean invite) {
+    	newParty = newParty.replace(":", ".");
+    	addToParty(player, PP, newParty, invite, null);
+    }
+
+    
+    public void addToParty(Player player, PlayerProfile PP, String newParty, Boolean invite, String password) 
+    {
+    	//Fix for FFS
+    	newParty = newParty.replace(":", ".");
+    	
+    	//Don't care about passwords on invites
+    	if(!invite) 
+    	{
+    		//Don't care about passwords if it isn't locked
+    		if(isPartyLocked(newParty)) 
+    		{
+    			if(isPartyPasswordProtected(newParty)) 
+    			{
+	    			if(password == null) 
+	    			{
+	    				//TODO: Needs more locale.
+	    				player.sendMessage("This party requires a password. Use "+LoadProperties.party+" <party> <password> to join it.");
+	    				return;
+	    			} else if(!password.equalsIgnoreCase(getPartyPassword(newParty))) 
+	    			{
+	    				//TODO: Needs more locale.
+	    				player.sendMessage("Party password incorrect.");
+	    				return;
+	    			}
+    			} else 
+    			{
+    				//TODO: Needs more locale.
+    				player.sendMessage("Party is locked.");
+    				return;
+    			}
+    		}
+    	} else 
+    	{
+			PP.acceptInvite();
+    	}
+    	//New party?
+    	if(!isParty(newParty)) 
+    	{
+    		putNestedEntry(this.partyPlayers, newParty, player.getName(), true);
+    		
+    		//Get default locking behavior from config?
+    		this.partyLocks.put(newParty, false);
+    		this.partyPasswords.put(newParty, null);
+    		saveParties();
+    	} else 
+    	{		
+    		putNestedEntry(this.partyPlayers, newParty, player.getName(), false);
+
+    		savePartyPlayers();
+    	}
+		PP.setParty(newParty);
+		informPartyMembers(player);
+		
+		if(!invite) 
+		{
+			player.sendMessage(mcLocale.getString("mcPlayerListener.JoinedParty", new Object[] { newParty }));
+		} else 
+		{
+			player.sendMessage(mcLocale.getString("mcPlayerListener.InviteAccepted", new Object[]{ PP.getParty() }));
+		}
+    }
+    
+    private static <U,V,W> W putNestedEntry(
+            HashMap<U,HashMap<V,W>> nest,
+            U nestKey,
+            V nestedKey,
+            W nestedValue)
+    {
+        HashMap<V,W> nested = nest.get(nestKey);
+
+        if (nested == null) {
+            nested = new HashMap<V,W>();
+            nest.put(nestKey, nested);
+        }
+
+        return nested.put(nestedKey, nestedValue);        
+    }
+    
+    public void dump(Player player) {
+    	player.sendMessage(partyPlayers.toString());
+    	player.sendMessage(partyLocks.toString());
+    	player.sendMessage(partyPasswords.toString());
+    	Iterator<String> i = partyPlayers.keySet().iterator();
+    	while(i.hasNext()) {
+    		String nestkey = i.next();
+    		player.sendMessage(nestkey);
+    		Iterator<String> j = partyPlayers.get(nestkey).keySet().iterator();
+    		while(j.hasNext()) {
+    			String nestedkey = j.next();
+    			player.sendMessage("."+nestedkey);
+    			if(partyPlayers.get(nestkey).get(nestedkey)) {
+    				player.sendMessage("..True");
+    			} else {
+    				player.sendMessage("..False");
+    			}
+    		}
+    	}
+    }
+    
+    public void lockParty(String partyName) {
+    	this.partyLocks.put(partyName, true);
+    	savePartyLocks();
+    }
+    
+    public void unlockParty(String partyName) {
+    	this.partyLocks.put(partyName, false);
+    	savePartyLocks();
+    }
+    
+    public void deleteParty(String partyName) {
+    	this.partyPlayers.remove(partyName);
+    	this.partyLocks.remove(partyName);
+    	this.partyPasswords.remove(partyName);
+    	saveParties();
+    }
+    
+    public void setPartyPassword(String partyName, String password) {
+    	if(password.equalsIgnoreCase("\"\"")) password = null;
+    	this.partyPasswords.put(partyName, password);
+    	savePartyPasswords();
+    }
+    
+    public void setPartyLeader(String partyName, String playerName) {
+    	Iterator<String> i = partyPlayers.get(partyName).keySet().iterator();
+    	while(i.hasNext()) {
+    		String playerKey = i.next();
+    		if(playerKey.equalsIgnoreCase(playerName)) {
+    			partyPlayers.get(partyName).put(playerName, true);
+    			informPartyMembersOwnerChange(playerName);
+    			//TODO: Needs more locale.
+    			plugin.getServer().getPlayer(playerName).sendMessage("You are now the party owner.");
+    			continue;
+    		}
+    		if(partyPlayers.get(partyName).get(playerKey)) {
+    			//TODO: Needs more locale.
+    			plugin.getServer().getPlayer(playerKey).sendMessage("You are no longer party owner.");
+    			partyPlayers.get(partyName).put(playerKey, false);
+    		}
+    	}
+    }
+    
+    public String getPartyPassword(String partyName) {
+    	return this.partyPasswords.get(partyName);
+    }
+    
+    public boolean canInvite(Player player, PlayerProfile PP) {
+    	return (isPartyLocked(PP.getParty()) && !isPartyLeader(player.getName(), PP.getParty())) ? false : true;
+    }
+    
+    public boolean isParty(String partyName) {
+    	return this.partyPlayers.containsKey(partyName);
+    }
+
+    public boolean isPartyEmpty(String partyName) {
+    	return this.partyPlayers.get(partyName).isEmpty();
+    }
+    
+    public boolean isPartyLeader(String playerName, String partyName) {
+    	if(this.partyPlayers.get(partyName) != null)
+    	{
+	    	if(this.partyPlayers.get(partyName).get(playerName) == null) return false;
+	    	return this.partyPlayers.get(partyName).get(playerName);
+    	}
+    	else
+    		return false;
+    }
+    
+    public boolean isPartyLocked(String partyName) {
+    	if(this.partyLocks.get(partyName) ==  null) return false;
+    	return this.partyLocks.get(partyName);
+    }
+    
+    public boolean isPartyPasswordProtected(String partyName) {
+    	return !(this.partyPasswords.get(partyName) == null);
+    }
+    
+    public boolean isInParty(Player player, PlayerProfile PP) {
+    	return partyPlayers.get(PP.getParty()).containsKey(player.getName());
+    }
+    
+    @SuppressWarnings("unchecked")
+	public void loadParties() {
+    	if(new File(partyPlayersFile).exists()) {
+			try {
+				ObjectInputStream obj = new ObjectInputStream(new FileInputStream(partyPlayersFile));
+				this.partyPlayers = (HashMap<String, HashMap<String, Boolean>>)obj.readObject();
+			} catch (FileNotFoundException e) { e.printStackTrace();
+			} catch (EOFException e) { mcMMO.log.info("partyPlayersFile empty.");
+			} catch (IOException e) { e.printStackTrace();
+			} catch (ClassNotFoundException e) { e.printStackTrace(); }
+    	}
+
+    	if(new File(partyLocksFile).exists()) {
+			try {
+				ObjectInputStream obj = new ObjectInputStream(new FileInputStream(partyLocksFile));
+				this.partyLocks = (HashMap<String, Boolean>)obj.readObject();
+			} catch (FileNotFoundException e) { e.printStackTrace();
+			} catch (EOFException e) { mcMMO.log.info("partyLocksFile empty.");
+			} catch (IOException e) { e.printStackTrace();
+			} catch (ClassNotFoundException e) { e.printStackTrace(); }
+    	}
+
+    	if(new File(partyPasswordsFile).exists()) {
+			try {
+				ObjectInputStream obj = new ObjectInputStream(new FileInputStream(partyPasswordsFile));
+				this.partyPasswords = (HashMap<String, String>)obj.readObject();
+			} catch (FileNotFoundException e) { e.printStackTrace();
+			} catch (EOFException e) { mcMMO.log.info("partyPasswordsFile empty.");
+			} catch (IOException e) { e.printStackTrace();
+			} catch (ClassNotFoundException e) { e.printStackTrace(); }
+    	}
+    }
+    
+    public void saveParties() {
+    	savePartyPlayers();
+    	savePartyLocks();
+    	savePartyPasswords();
+    }
+    
+    public void savePartyPlayers() {
+    	try {
+			new File(partyPlayersFile).createNewFile();
+			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(partyPlayersFile));
+			obj.writeObject(this.partyPlayers);
+			obj.close();
+		} catch (FileNotFoundException e) { e.printStackTrace();
+		} catch (IOException e) { e.printStackTrace(); }
+    }
+    
+    public void savePartyLocks() {
+    	try {
+			new File(partyLocksFile).createNewFile();
+			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(partyLocksFile));
+			obj.writeObject(this.partyLocks);
+			obj.close();
+		} catch (FileNotFoundException e) { e.printStackTrace();
+		} catch (IOException e) { e.printStackTrace(); }
+    }
+    
+    public void savePartyPasswords() {
+    	try {
+			new File(partyPasswordsFile).createNewFile();
+			ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(partyPasswordsFile));
+			obj.writeObject(this.partyPasswords);
+			obj.close();
+		} catch (FileNotFoundException e) { e.printStackTrace();
+		} catch (IOException e) { e.printStackTrace(); }
+    }
+}

+ 80 - 80
src/com/gmail/nossr50/runnables/mcTimer.java → src/main/java/com/gmail/nossr50/runnables/mcTimer.java

@@ -1,80 +1,80 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.runnables;
-import org.bukkit.entity.*;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.skills.Swords;
-
-
-public class mcTimer implements Runnable
-{
-	private final mcMMO plugin;
-	int thecount = 1;
-
-    public mcTimer(final mcMMO plugin) 
-    {
-        this.plugin = plugin;
-    }
-    
-	public void run() 
-	{
-		for(Player player : plugin.getServer().getOnlinePlayers())
-		{
-			if(player == null)
-				continue;
-			PlayerProfile PP = Users.getProfile(player);
-			
-			if(PP == null)
-				continue;
-			
-			/*
-			 * MONITOR SKILLS
-			 */
-			Skills.monitorSkills(player);
-			
-			/*
-			 * COOLDOWN MONITORING
-			 */
-			Skills.watchCooldowns(player);
-			
-			/*
-			 * PLAYER BLEED MONITORING
-			 */
-			if(thecount % 2 == 0 && PP.getBleedTicks() >= 1)
-			{
-        		player.damage(2);
-        		PP.decreaseBleedTicks();
-        	}
-		
-			/*
-			 * NON-PLAYER BLEED MONITORING
-			 */
-			
-			if(thecount % 2 == 0)
-				Swords.bleedSimulate(plugin);
-			
-			//SETUP FOR HP REGEN/BLEED
-			thecount++;
-			if(thecount >= 81)
-				thecount = 1;
-		}
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.runnables;
+import org.bukkit.entity.*;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.Swords;
+
+
+public class mcTimer implements Runnable
+{
+	private final mcMMO plugin;
+	int thecount = 1;
+
+    public mcTimer(final mcMMO plugin) 
+    {
+        this.plugin = plugin;
+    }
+    
+	public void run() 
+	{
+		for(Player player : plugin.getServer().getOnlinePlayers())
+		{
+			if(player == null)
+				continue;
+			PlayerProfile PP = Users.getProfile(player);
+			
+			if(PP == null)
+				continue;
+			
+			/*
+			 * MONITOR SKILLS
+			 */
+			Skills.monitorSkills(player);
+			
+			/*
+			 * COOLDOWN MONITORING
+			 */
+			Skills.watchCooldowns(player);
+			
+			/*
+			 * PLAYER BLEED MONITORING
+			 */
+			if(thecount % 2 == 0 && PP.getBleedTicks() >= 1)
+			{
+        		player.damage(2);
+        		PP.decreaseBleedTicks();
+        	}
+		
+			/*
+			 * NON-PLAYER BLEED MONITORING
+			 */
+			
+			if(thecount % 2 == 0)
+				Swords.bleedSimulate(plugin);
+			
+			//SETUP FOR HP REGEN/BLEED
+			thecount++;
+			if(thecount >= 81)
+				thecount = 1;
+		}
+	}
+}

+ 105 - 105
src/com/gmail/nossr50/skills/Acrobatics.java → src/main/java/com/gmail/nossr50/skills/Acrobatics.java

@@ -1,105 +1,105 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-
-
-public class Acrobatics {
-	public static void acrobaticsCheck(Player player, EntityDamageEvent event)
-	{
-    	if(player != null && mcPermissions.getInstance().acrobatics(player))
-    	{
-    		PlayerProfile PP = Users.getProfile(player);
-    		int acrovar = PP.getSkillLevel(SkillType.ACROBATICS);
-    		
-    		if(player.isSneaking())
-    			acrovar = acrovar * 2;
-    		
-			if(Math.random() * 1000 <= acrovar && !event.isCancelled())
-			{
-				int threshold = 7;
-				if(player.isSneaking())
-					threshold = 14;
-				
-				int newDamage = event.getDamage() - threshold;
-				if(newDamage < 0)
-					newDamage = 0;
-				/*
-				 * Check for death
-				 */
-				if(player.getHealth() - newDamage >= 1){
-					if(!event.isCancelled())
-						PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 8)*10, player);
-					Skills.XpCheckSkill(SkillType.ACROBATICS, player);
-					event.setDamage(newDamage);
-					if(event.getDamage() <= 0)
-						event.setCancelled(true);
-					if(player.isSneaking()){
-						player.sendMessage(ChatColor.GREEN+"**GRACEFUL ROLL**");
-					} else {
-						player.sendMessage("**ROLL**");
-					}
-				}
-			} else if (!event.isCancelled()){
-				if(player.getHealth() - event.getDamage() >= 1){
-					PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, player);
-					Skills.XpCheckSkill(SkillType.ACROBATICS, player);
-				}
-			}
-    	}
-    }
-	public static void dodgeChecks(EntityDamageByEntityEvent event){
-		Player defender = (Player) event.getEntity();
-		PlayerProfile PPd = Users.getProfile(defender);
-		
-		if(mcPermissions.getInstance().acrobatics(defender)){
-			if(PPd.getSkillLevel(SkillType.ACROBATICS) <= 800){
-	    		if(Math.random() * 4000 <= PPd.getSkillLevel(SkillType.ACROBATICS)){
-	    			defender.sendMessage(ChatColor.GREEN+"**DODGE**");
-	    			if(System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1){
-	    				PPd.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*1, defender);
-	    				Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
-	    			}
-	    			event.setDamage(event.getDamage() / 2);
-	    			//Needs to do minimal damage
-	    			if(event.getDamage() <= 0)
-	    				event.setDamage(1);
-	    		}
-			} else if(Math.random() * 4000 <= 800) {
-				defender.sendMessage(ChatColor.GREEN+"**DODGE**");
-				if(System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1){
-					PPd.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, defender);
-					Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
-				}
-				event.setDamage(event.getDamage() / 2);
-				//Needs to deal minimal damage
-				if(event.getDamage() <= 0)
-					event.setDamage(1);
-			}
-		}
-	}
-	
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+
+
+public class Acrobatics {
+	public static void acrobaticsCheck(Player player, EntityDamageEvent event)
+	{
+    	if(player != null && mcPermissions.getInstance().acrobatics(player))
+    	{
+    		PlayerProfile PP = Users.getProfile(player);
+    		int acrovar = PP.getSkillLevel(SkillType.ACROBATICS);
+    		
+    		if(player.isSneaking())
+    			acrovar = acrovar * 2;
+    		
+			if(Math.random() * 1000 <= acrovar && !event.isCancelled())
+			{
+				int threshold = 7;
+				if(player.isSneaking())
+					threshold = 14;
+				
+				int newDamage = event.getDamage() - threshold;
+				if(newDamage < 0)
+					newDamage = 0;
+				/*
+				 * Check for death
+				 */
+				if(player.getHealth() - newDamage >= 1){
+					if(!event.isCancelled())
+						PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 8)*10, player);
+					Skills.XpCheckSkill(SkillType.ACROBATICS, player);
+					event.setDamage(newDamage);
+					if(event.getDamage() <= 0)
+						event.setCancelled(true);
+					if(player.isSneaking()){
+						player.sendMessage(ChatColor.GREEN+"**GRACEFUL ROLL**");
+					} else {
+						player.sendMessage("**ROLL**");
+					}
+				}
+			} else if (!event.isCancelled()){
+				if(player.getHealth() - event.getDamage() >= 1){
+					PP.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, player);
+					Skills.XpCheckSkill(SkillType.ACROBATICS, player);
+				}
+			}
+    	}
+    }
+	public static void dodgeChecks(EntityDamageByEntityEvent event){
+		Player defender = (Player) event.getEntity();
+		PlayerProfile PPd = Users.getProfile(defender);
+		
+		if(mcPermissions.getInstance().acrobatics(defender)){
+			if(PPd.getSkillLevel(SkillType.ACROBATICS) <= 800){
+	    		if(Math.random() * 4000 <= PPd.getSkillLevel(SkillType.ACROBATICS)){
+	    			defender.sendMessage(ChatColor.GREEN+"**DODGE**");
+	    			if(System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1){
+	    				PPd.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*1, defender);
+	    				Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
+	    			}
+	    			event.setDamage(event.getDamage() / 2);
+	    			//Needs to do minimal damage
+	    			if(event.getDamage() <= 0)
+	    				event.setDamage(1);
+	    		}
+			} else if(Math.random() * 4000 <= 800) {
+				defender.sendMessage(ChatColor.GREEN+"**DODGE**");
+				if(System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1){
+					PPd.addXP(SkillType.ACROBATICS, (event.getDamage() * 12)*10, defender);
+					Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
+				}
+				event.setDamage(event.getDamage() / 2);
+				//Needs to deal minimal damage
+				if(event.getDamage() <= 0)
+					event.setDamage(1);
+			}
+		}
+	}
+	
+}

+ 0 - 0
src/com/gmail/nossr50/skills/Alchemy.java → src/main/java/com/gmail/nossr50/skills/Alchemy.java


+ 119 - 119
src/com/gmail/nossr50/skills/Archery.java → src/main/java/com/gmail/nossr50/skills/Archery.java

@@ -1,119 +1,119 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.Location;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-
-public class Archery 
-{
-	public static void trackArrows(mcMMO pluginx, Entity x, EntityDamageByEntityEvent event, Player attacker)
-	{
-		PlayerProfile PPa = Users.getProfile(attacker);
-		if(!pluginx.misc.arrowTracker.containsKey(x) && event.getDamage() > 0)
-		{
-			pluginx.misc.arrowTracker.put(x, 0);
-			if(attacker != null)
-			{
-				if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.ARCHERY))
-				{
-					pluginx.misc.arrowTracker.put(x, 1);
-				}
-			}
-		} else 
-		{
-			if(event.getDamage() > 0)
-			{
-				if(attacker != null)
-				{
-					if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.ARCHERY))
-					{
-						pluginx.misc.arrowTracker.put(x, 1);
-					}
-				}
-			}
-		}
-	}
-	public static void ignitionCheck(Entity x, EntityDamageByEntityEvent event, Player attacker)
-	{
-		//Check to see if PVP for this world is disabled before executing
-		if(!x.getWorld().getPVP())
-			return;
-		
-		PlayerProfile PPa = Users.getProfile(attacker);
-		if(Math.random() * 100 >= 75)
-		{
-			
-			int ignition = 20;	
-			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 200)
-				ignition+=20;
-			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 400)
-				ignition+=20;
-			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 600)
-				ignition+=20;
-			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 800)
-				ignition+=20;
-			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000)
-				ignition+=20;
-			
-			if(x instanceof Player)
-			{
-				Player Defender = (Player)x;
-				if(!Party.getInstance().inSameParty(attacker, Defender))
-				{
-					event.getEntity().setFireTicks(ignition);
-					attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
-					Defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); //$NON-NLS-1$
-				}
-			} else {
-			event.getEntity().setFireTicks(ignition);
-			attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
-			}
-		}
-	}
-	public static void dazeCheck(Player defender, Player attacker)
-	{
-		PlayerProfile PPa = Users.getProfile(attacker);
-		
-		Location loc = defender.getLocation();
-		if(Math.random() * 10 > 5)
-		{
-		loc.setPitch(90);
-		} else {
-			loc.setPitch(-90);
-		}
-		if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000){
-			if(Math.random() * 1000 <= 500){
-				defender.teleport(loc);
-				defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
-				attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		} else if(Math.random() * 2000 <= PPa.getSkillLevel(SkillType.ARCHERY)){
-			defender.teleport(loc);
-			defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
-			attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.Location;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+
+public class Archery 
+{
+	public static void trackArrows(mcMMO pluginx, Entity x, EntityDamageByEntityEvent event, Player attacker)
+	{
+		PlayerProfile PPa = Users.getProfile(attacker);
+		if(!pluginx.misc.arrowTracker.containsKey(x) && event.getDamage() > 0)
+		{
+			pluginx.misc.arrowTracker.put(x, 0);
+			if(attacker != null)
+			{
+				if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.ARCHERY))
+				{
+					pluginx.misc.arrowTracker.put(x, 1);
+				}
+			}
+		} else 
+		{
+			if(event.getDamage() > 0)
+			{
+				if(attacker != null)
+				{
+					if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.ARCHERY))
+					{
+						pluginx.misc.arrowTracker.put(x, 1);
+					}
+				}
+			}
+		}
+	}
+	public static void ignitionCheck(Entity x, EntityDamageByEntityEvent event, Player attacker)
+	{
+		//Check to see if PVP for this world is disabled before executing
+		if(!x.getWorld().getPVP())
+			return;
+		
+		PlayerProfile PPa = Users.getProfile(attacker);
+		if(Math.random() * 100 >= 75)
+		{
+			
+			int ignition = 20;	
+			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 200)
+				ignition+=20;
+			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 400)
+				ignition+=20;
+			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 600)
+				ignition+=20;
+			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 800)
+				ignition+=20;
+			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000)
+				ignition+=20;
+			
+			if(x instanceof Player)
+			{
+				Player Defender = (Player)x;
+				if(!Party.getInstance().inSameParty(attacker, Defender))
+				{
+					event.getEntity().setFireTicks(ignition);
+					attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
+					Defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); //$NON-NLS-1$
+				}
+			} else {
+			event.getEntity().setFireTicks(ignition);
+			attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$
+			}
+		}
+	}
+	public static void dazeCheck(Player defender, Player attacker)
+	{
+		PlayerProfile PPa = Users.getProfile(attacker);
+		
+		Location loc = defender.getLocation();
+		if(Math.random() * 10 > 5)
+		{
+		loc.setPitch(90);
+		} else {
+			loc.setPitch(-90);
+		}
+		if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000){
+			if(Math.random() * 1000 <= 500){
+				defender.teleport(loc);
+				defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
+				attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		} else if(Math.random() * 2000 <= PPa.getSkillLevel(SkillType.ARCHERY)){
+			defender.teleport(loc);
+			defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$
+			attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+}

+ 172 - 172
src/com/gmail/nossr50/skills/Axes.java → src/main/java/com/gmail/nossr50/skills/Axes.java

@@ -1,172 +1,172 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Wolf;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.plugin.Plugin;
-
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.party.Party;
-
-public class Axes {
-	public static void skullSplitterCheck(Player player){
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(m.isAxes(player.getItemInHand()) && mcPermissions.getInstance().axesAbility(player)){
-    		/*
-    		 * CHECK FOR AXE PREP MODE
-    		 */
-    		if(PP.getAxePreparationMode())
-    		{
-    			PP.setAxePreparationMode(false);
-    		}
-    		int ticks = 2;
-    		int x = PP.getSkillLevel(SkillType.AXES);
-    		while(x >= 50){
-    			x-=50;
-    			ticks++;
-    		}
-
-    		if(!PP.getSkullSplitterMode() && Skills.cooldownOver(player, (PP.getSkullSplitterDeactivatedTimeStamp()*1000), LoadProperties.skullSplitterCooldown))
-    		{
-    			player.sendMessage(mcLocale.getString("Skills.SkullSplitterOn"));
-    			for(Player y : player.getWorld().getPlayers()){
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.SkullSplitterPlayer", new Object[] {player.getName()}));
-	    		}
-    			PP.setSkullSplitterActivatedTimeStamp(System.currentTimeMillis());
-    			PP.setSkullSplitterDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-    			PP.setSkullSplitterMode(true);
-    		}
-    		if(!PP.getSkullSplitterMode() && !Skills.cooldownOver(player, (PP.getSkullSplitterDeactivatedTimeStamp()*1000), LoadProperties.skullSplitterCooldown)){
-    			player.sendMessage(mcLocale.getString("Skills.TooTired")
-    					+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkullSplitterDeactivatedTimeStamp()*1000), LoadProperties.skullSplitterCooldown)+"s)");
-    		}
-    	}
-    }
-	public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
-	{
-    	Entity x = event.getEntity();
-    	if(x instanceof Wolf){
-    		Wolf wolf = (Wolf)x;
-    		if(Taming.getOwner(wolf, pluginx) != null)
-    		{
-	    		if(Taming.getOwner(wolf, pluginx) == attacker)
-	    			return;
-	    		if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
-	    			return;
-    		}
-    	}
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
-    		if(PPa.getSkillLevel(SkillType.AXES) >= 750){
-    			if(Math.random() * 1000 <= 750){
-    				if(x instanceof Player){
-    					Player player = (Player)x;
-    					player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
-    				}
-    				if(x instanceof Player){
-        				event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
-        			} else {
-        				event.setDamage(event.getDamage() * 2);
-        			}
-    				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
-    			}
-    		} else if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.AXES)){
-    			if(x instanceof Player){
-    				Player player = (Player)x;
-    				player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
-    			}
-    			if(x instanceof Player){
-    				event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
-    			} else {
-    				event.setDamage(event.getDamage() * 2);
-    			}
-				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
-    		}
-    	}
-    }
-	
-	public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
-	{
-		int targets = 0;
-    	
-    	if(event.getEntity() instanceof LivingEntity)
-    	{
-    		LivingEntity x = (LivingEntity) event.getEntity();
-	    	targets = m.getTier(attacker);
-	    	
-	    	for(Entity derp : x.getWorld().getEntities())
-	    	{
-	    		if(m.getDistance(x.getLocation(), derp.getLocation()) < 5)
-	    		{
-	    			
-	    			
-	    			//Make sure the Wolf is not friendly
-	    			if(derp instanceof Wolf)
-	    			{
-						Wolf hurrDurr = (Wolf)derp;
-						if(Taming.getOwner(hurrDurr, pluginx) == attacker)
-							continue;
-						if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
-							continue;
-					}
-	    			//Damage nearby LivingEntities
-	    			if(derp instanceof LivingEntity && targets >= 1)
-	    			{
-	    				if(derp instanceof Player)
-		    			{
-		    				Player target = (Player)derp;
-		    				
-		    				if(Users.getProfile(target).getGodMode())
-		    					continue;
-
-		    				if(target.getName().equals(attacker.getName()))
-		    					continue;
-		    				
-		    				if(Party.getInstance().inSameParty(attacker, target))
-		    					continue;
-		    				if(targets >= 1 && derp.getWorld().getPVP())
-		    				{
-		    					target.damage(event.getDamage() / 2);
-		    					target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
-		    					targets--;
-		    					continue;
-		    				}
-		    			} 
-	    				else
-		    			{			
-		    				LivingEntity target = (LivingEntity)derp;
-		    				target.damage(event.getDamage() / 2);
-		    				targets--;
-		    			}
-	    			}
-	    		}
-	    	}
-    	}
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Wolf;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.plugin.Plugin;
+
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.party.Party;
+
+public class Axes {
+	public static void skullSplitterCheck(Player player){
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(m.isAxes(player.getItemInHand()) && mcPermissions.getInstance().axesAbility(player)){
+    		/*
+    		 * CHECK FOR AXE PREP MODE
+    		 */
+    		if(PP.getAxePreparationMode())
+    		{
+    			PP.setAxePreparationMode(false);
+    		}
+    		int ticks = 2;
+    		int x = PP.getSkillLevel(SkillType.AXES);
+    		while(x >= 50){
+    			x-=50;
+    			ticks++;
+    		}
+
+    		if(!PP.getSkullSplitterMode() && Skills.cooldownOver(player, (PP.getSkullSplitterDeactivatedTimeStamp()*1000), LoadProperties.skullSplitterCooldown))
+    		{
+    			player.sendMessage(mcLocale.getString("Skills.SkullSplitterOn"));
+    			for(Player y : player.getWorld().getPlayers()){
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.SkullSplitterPlayer", new Object[] {player.getName()}));
+	    		}
+    			PP.setSkullSplitterActivatedTimeStamp(System.currentTimeMillis());
+    			PP.setSkullSplitterDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+    			PP.setSkullSplitterMode(true);
+    		}
+    		if(!PP.getSkullSplitterMode() && !Skills.cooldownOver(player, (PP.getSkullSplitterDeactivatedTimeStamp()*1000), LoadProperties.skullSplitterCooldown)){
+    			player.sendMessage(mcLocale.getString("Skills.TooTired")
+    					+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkullSplitterDeactivatedTimeStamp()*1000), LoadProperties.skullSplitterCooldown)+"s)");
+    		}
+    	}
+    }
+	public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
+	{
+    	Entity x = event.getEntity();
+    	if(x instanceof Wolf){
+    		Wolf wolf = (Wolf)x;
+    		if(Taming.getOwner(wolf, pluginx) != null)
+    		{
+	    		if(Taming.getOwner(wolf, pluginx) == attacker)
+	    			return;
+	    		if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
+	    			return;
+    		}
+    	}
+    	PlayerProfile PPa = Users.getProfile(attacker);
+    	if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
+    		if(PPa.getSkillLevel(SkillType.AXES) >= 750){
+    			if(Math.random() * 1000 <= 750){
+    				if(x instanceof Player){
+    					Player player = (Player)x;
+    					player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
+    				}
+    				if(x instanceof Player){
+        				event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
+        			} else {
+        				event.setDamage(event.getDamage() * 2);
+        			}
+    				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
+    			}
+    		} else if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.AXES)){
+    			if(x instanceof Player){
+    				Player player = (Player)x;
+    				player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
+    			}
+    			if(x instanceof Player){
+    				event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
+    			} else {
+    				event.setDamage(event.getDamage() * 2);
+    			}
+				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
+    		}
+    	}
+    }
+	
+	public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
+	{
+		int targets = 0;
+    	
+    	if(event.getEntity() instanceof LivingEntity)
+    	{
+    		LivingEntity x = (LivingEntity) event.getEntity();
+	    	targets = m.getTier(attacker);
+	    	
+	    	for(Entity derp : x.getWorld().getEntities())
+	    	{
+	    		if(m.getDistance(x.getLocation(), derp.getLocation()) < 5)
+	    		{
+	    			
+	    			
+	    			//Make sure the Wolf is not friendly
+	    			if(derp instanceof Wolf)
+	    			{
+						Wolf hurrDurr = (Wolf)derp;
+						if(Taming.getOwner(hurrDurr, pluginx) == attacker)
+							continue;
+						if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
+							continue;
+					}
+	    			//Damage nearby LivingEntities
+	    			if(derp instanceof LivingEntity && targets >= 1)
+	    			{
+	    				if(derp instanceof Player)
+		    			{
+		    				Player target = (Player)derp;
+		    				
+		    				if(Users.getProfile(target).getGodMode())
+		    					continue;
+
+		    				if(target.getName().equals(attacker.getName()))
+		    					continue;
+		    				
+		    				if(Party.getInstance().inSameParty(attacker, target))
+		    					continue;
+		    				if(targets >= 1 && derp.getWorld().getPVP())
+		    				{
+		    					target.damage(event.getDamage() / 2);
+		    					target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
+		    					targets--;
+		    					continue;
+		    				}
+		    			} 
+	    				else
+		    			{			
+		    				LivingEntity target = (LivingEntity)derp;
+		    				target.damage(event.getDamage() / 2);
+		    				targets--;
+		    			}
+	    			}
+	    		}
+	    	}
+    	}
+    }
+}

+ 0 - 0
src/com/gmail/nossr50/skills/Enchanting.java → src/main/java/com/gmail/nossr50/skills/Enchanting.java


+ 279 - 279
src/com/gmail/nossr50/skills/Excavation.java → src/main/java/com/gmail/nossr50/skills/Excavation.java

@@ -1,279 +1,279 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import java.util.ArrayList;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-
-
-public class Excavation 
-{
-	public static void gigaDrillBreakerActivationCheck(Player player, Block block)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-		if(m.isShovel(player.getItemInHand()))
-		{
-	    	if(block != null)
-	    	{
-		    	if(!m.abilityBlockCheck(block))
-		    		return;
-	    	}
-	    	if(PP.getShovelPreparationMode())
-	    	{
-    			PP.setShovelPreparationMode(false);
-    		}
-	    	int ticks = 2;
-	    	int x = PP.getSkillLevel(SkillType.EXCAVATION);
-    		while(x >= 50)
-    		{
-    			x-=50;
-    			ticks++;
-    		}
-    		
-	    	if(!PP.getGigaDrillBreakerMode() && PP.getGigaDrillBreakerDeactivatedTimeStamp() < System.currentTimeMillis())
-	    	{
-	    		player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOn"));
-	    		for(Player y : player.getWorld().getPlayers())
-	    		{
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerPlayer", new Object[] {player.getName()}));
-	    		}
-	    		PP.setGigaDrillBreakerActivatedTimeStamp(System.currentTimeMillis());
-	    		PP.setGigaDrillBreakerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-	    		PP.setGigaDrillBreakerMode(true);
-	    	}
-	    	
-	    }
-	}
-	public static boolean canBeGigaDrillBroken(Block block)
-	{
-		return block.getType() == Material.DIRT || block.getType() == Material.GRASS || block.getType() == Material.SAND || block.getType() == Material.GRAVEL || block.getType() == Material.CLAY;
-	}
-	public static void excavationProcCheck(byte data, Material type, Location loc, Player player)
-	{
-		if(LoadProperties.excavationRequiresShovel && !m.isShovel(player.getItemInHand()))
-			return;
-		
-		PlayerProfile PP = Users.getProfile(player);
-    	ArrayList<ItemStack> is = new ArrayList<ItemStack>();
-    	
-    	int xp = 0;
-    	
-    	switch(type)
-    	{
-    	case GRASS:
-    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 250)
-    		{
-	    		//CHANCE TO GET EGGS
-	    		if(LoadProperties.eggs == true && Math.random() * 100 > 99)
-	    		{
-	    			xp+= LoadProperties.meggs;
-					is.add(new ItemStack(Material.EGG, 1, (byte)0, (byte)0));
-	    		}
-	    		//CHANCE TO GET APPLES
-	    		if(LoadProperties.apples == true && Math.random() * 100 > 99)
-	    		{
-	    			xp+= LoadProperties.mapple;
-					is.add(new ItemStack(Material.APPLE, 1, (byte)0, (byte)0));
-	    		}
-    		}
-    		break;
-    	case GRAVEL:
-    		//CHANCE TO GET NETHERRACK
-    		if(LoadProperties.netherrack == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 850 && Math.random() * 200 > 199)
-    		{
-    			xp+= LoadProperties.mnetherrack;
-				is.add(new ItemStack(Material.NETHERRACK, 1, (byte)0, (byte)0));
-				
-    		}
-    		//CHANCE TO GET SULPHUR
-    		if(LoadProperties.sulphur == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 75)
-    		{
-	    		if(Math.random() * 10 > 9)
-	    		{
-	    			xp+= LoadProperties.msulphur;
-					is.add(new ItemStack(Material.SULPHUR, 1, (byte)0, (byte)0));
-	    		}
-    		}
-    		//CHANCE TO GET BONES
-    		if(LoadProperties.bones == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 175)
-    		{
-        		if(Math.random() * 10 > 9)
-        		{
-        			xp+= LoadProperties.mbones;
-    				is.add(new ItemStack(Material.BONE, 1, (byte)0, (byte)0));
-        		}
-        	}
-    		break;
-    	case SAND:
-    		//CHANCE TO GET GLOWSTONE
-    		if(LoadProperties.glowstone == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 50 && Math.random() * 100 > 95)
-    		{
-    			xp+= LoadProperties.mglowstone2;
-				is.add(new ItemStack(Material.GLOWSTONE_DUST, 1, (byte)0, (byte)0));
-				
-    		}
-    		//CHANCE TO GET SOUL SAND
-    		if(LoadProperties.slowsand == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 650 && Math.random() * 200 > 199)
-    		{
-    			xp+= LoadProperties.mslowsand;
-				is.add(new ItemStack(Material.SOUL_SAND, 1, (byte)0, (byte)0));
-    		}
-    		break;
-    	case CLAY:
-    		if(LoadProperties.slimeballs && PP.getSkillLevel(SkillType.EXCAVATION) >= 50)
-    		{
-    			if(Math.random() * 20 > 19)
-    			{
-    				xp+= LoadProperties.mslimeballs;
-    				is.add(new ItemStack(Material.SLIME_BALL, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		if(LoadProperties.string && PP.getSkillLevel(SkillType.EXCAVATION) >= 250)
-    		{
-    			if(Math.random() * 20 > 19)
-    			{
-    				xp+= LoadProperties.mstring;
-    				is.add(new ItemStack(Material.STRING, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		if(LoadProperties.watch && PP.getSkillLevel(SkillType.EXCAVATION) >= 500)
-    		{
-    			if(Math.random() * 100 > 99)
-    			{
-    				xp+= LoadProperties.mwatch;
-    				is.add(new ItemStack(Material.WATCH, 1, (byte)0));
-    			}
-    		}
-    		if(LoadProperties.bucket && PP.getSkillLevel(SkillType.EXCAVATION) >= 500)
-    		{
-    			if(Math.random() * 100 > 99)
-    			{
-    				xp+= LoadProperties.mbucket;
-    				is.add(new ItemStack(Material.BUCKET, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		if(LoadProperties.web && PP.getSkillLevel(SkillType.EXCAVATION) >= 750)
-    		{
-    			if(Math.random() * 20 > 19)
-    			{
-    				xp+= LoadProperties.mweb;
-    				is.add(new ItemStack(Material.WEB, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		break;
-    	}
-    	
-    	//DIRT SAND OR GRAVEL
-    	if(type == Material.GRASS || type == Material.DIRT || type == Material.GRAVEL || type == Material.SAND || type == Material.CLAY)
-    	{
-    		xp+= LoadProperties.mbase;
-    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 750)
-    		{
-    			//CHANCE TO GET CAKE
-    			if(LoadProperties.cake == true && Math.random() * 2000 > 1999)
-    			{
-    				xp+= LoadProperties.mcake;
-    				is.add(new ItemStack(Material.CAKE, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 350)
-    		{
-    			//CHANCE TO GET DIAMOND
-    			if(LoadProperties.diamond == true && Math.random() * 750 > 749)
-    			{
-    					xp+= LoadProperties.mdiamond2;
-        				is.add(new ItemStack(Material.DIAMOND, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 250)
-    		{
-    			//CHANCE TO GET YELLOW MUSIC
-    			if(LoadProperties.music == true && Math.random() * 2000 > 1999)
-    			{
-    				xp+= LoadProperties.mmusic;
-    				is.add(new ItemStack(Material.GOLD_RECORD, 1, (byte)0, (byte)0));
-    			}
-    		}
-    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 350)
-    		{
-    			//CHANCE TO GET GREEN MUSIC
-    			if(LoadProperties.music == true && Math.random() * 2000 > 1999)
-    			{
-    				xp+= LoadProperties.mmusic;
-    				is.add(new ItemStack(Material.GREEN_RECORD, 1, (byte)0, (byte)0));
-    			}
-    		}
-    	}
-    	
-    	//GRASS OR DIRT
-    	if(type == Material.DIRT || type == Material.GRASS)
-    	{
-    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 50)
-    		{
-    			//CHANCE FOR COCOA BEANS
-    			if(LoadProperties.cocoabeans == true && Math.random() * 75 > 74)
-    			{
-    				xp+= LoadProperties.mcocoa;
-					is.add(new ItemStack(Material.getMaterial(351), 1, (byte)0, (byte)3));
-    			}
-    		}
-    		//CHANCE FOR SHROOMS
-    		if(LoadProperties.mushrooms == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 500 && Math.random() * 200 > 199)
-    		{
-    			xp+= LoadProperties.mmushroom2;
-    			switch((int) Math.random() * 1)
-    			{
-    			case 0:
-    				is.add(new ItemStack(Material.BROWN_MUSHROOM, 1, (byte)0, (byte)0));
-    				break;
-    			case 1:
-    				is.add(new ItemStack(Material.RED_MUSHROOM, 1, (byte)0, (byte)0));
-    				break;
-    			}
-				
-    		}
-    		//CHANCE TO GET GLOWSTONE
-    		if(LoadProperties.glowstone == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 25 && Math.random() * 100 > 95)
-    		{
-    			xp+= LoadProperties.mglowstone2;
-				is.add(new ItemStack(Material.GLOWSTONE_DUST, 1, (byte)0, (byte)0));
-    		}
-    	}
-    	
-    	//Drop items
-    	for(ItemStack x : is)
-    	{
-    		if(x != null)
-    			loc.getWorld().dropItemNaturally(loc, x);
-    	}
-    	
-    	//Handle XP related tasks
-    	PP.addXP(SkillType.EXCAVATION, xp, player);
-    	Skills.XpCheckSkill(SkillType.EXCAVATION, player);
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import java.util.ArrayList;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+
+
+public class Excavation 
+{
+	public static void gigaDrillBreakerActivationCheck(Player player, Block block)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+		if(m.isShovel(player.getItemInHand()))
+		{
+	    	if(block != null)
+	    	{
+		    	if(!m.abilityBlockCheck(block))
+		    		return;
+	    	}
+	    	if(PP.getShovelPreparationMode())
+	    	{
+    			PP.setShovelPreparationMode(false);
+    		}
+	    	int ticks = 2;
+	    	int x = PP.getSkillLevel(SkillType.EXCAVATION);
+    		while(x >= 50)
+    		{
+    			x-=50;
+    			ticks++;
+    		}
+    		
+	    	if(!PP.getGigaDrillBreakerMode() && PP.getGigaDrillBreakerDeactivatedTimeStamp() < System.currentTimeMillis())
+	    	{
+	    		player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOn"));
+	    		for(Player y : player.getWorld().getPlayers())
+	    		{
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerPlayer", new Object[] {player.getName()}));
+	    		}
+	    		PP.setGigaDrillBreakerActivatedTimeStamp(System.currentTimeMillis());
+	    		PP.setGigaDrillBreakerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+	    		PP.setGigaDrillBreakerMode(true);
+	    	}
+	    	
+	    }
+	}
+	public static boolean canBeGigaDrillBroken(Block block)
+	{
+		return block.getType() == Material.DIRT || block.getType() == Material.GRASS || block.getType() == Material.SAND || block.getType() == Material.GRAVEL || block.getType() == Material.CLAY;
+	}
+	public static void excavationProcCheck(byte data, Material type, Location loc, Player player)
+	{
+		if(LoadProperties.excavationRequiresShovel && !m.isShovel(player.getItemInHand()))
+			return;
+		
+		PlayerProfile PP = Users.getProfile(player);
+    	ArrayList<ItemStack> is = new ArrayList<ItemStack>();
+    	
+    	int xp = 0;
+    	
+    	switch(type)
+    	{
+    	case GRASS:
+    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 250)
+    		{
+	    		//CHANCE TO GET EGGS
+	    		if(LoadProperties.eggs == true && Math.random() * 100 > 99)
+	    		{
+	    			xp+= LoadProperties.meggs;
+					is.add(new ItemStack(Material.EGG, 1, (byte)0, (byte)0));
+	    		}
+	    		//CHANCE TO GET APPLES
+	    		if(LoadProperties.apples == true && Math.random() * 100 > 99)
+	    		{
+	    			xp+= LoadProperties.mapple;
+					is.add(new ItemStack(Material.APPLE, 1, (byte)0, (byte)0));
+	    		}
+    		}
+    		break;
+    	case GRAVEL:
+    		//CHANCE TO GET NETHERRACK
+    		if(LoadProperties.netherrack == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 850 && Math.random() * 200 > 199)
+    		{
+    			xp+= LoadProperties.mnetherrack;
+				is.add(new ItemStack(Material.NETHERRACK, 1, (byte)0, (byte)0));
+				
+    		}
+    		//CHANCE TO GET SULPHUR
+    		if(LoadProperties.sulphur == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 75)
+    		{
+	    		if(Math.random() * 10 > 9)
+	    		{
+	    			xp+= LoadProperties.msulphur;
+					is.add(new ItemStack(Material.SULPHUR, 1, (byte)0, (byte)0));
+	    		}
+    		}
+    		//CHANCE TO GET BONES
+    		if(LoadProperties.bones == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 175)
+    		{
+        		if(Math.random() * 10 > 9)
+        		{
+        			xp+= LoadProperties.mbones;
+    				is.add(new ItemStack(Material.BONE, 1, (byte)0, (byte)0));
+        		}
+        	}
+    		break;
+    	case SAND:
+    		//CHANCE TO GET GLOWSTONE
+    		if(LoadProperties.glowstone == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 50 && Math.random() * 100 > 95)
+    		{
+    			xp+= LoadProperties.mglowstone2;
+				is.add(new ItemStack(Material.GLOWSTONE_DUST, 1, (byte)0, (byte)0));
+				
+    		}
+    		//CHANCE TO GET SOUL SAND
+    		if(LoadProperties.slowsand == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 650 && Math.random() * 200 > 199)
+    		{
+    			xp+= LoadProperties.mslowsand;
+				is.add(new ItemStack(Material.SOUL_SAND, 1, (byte)0, (byte)0));
+    		}
+    		break;
+    	case CLAY:
+    		if(LoadProperties.slimeballs && PP.getSkillLevel(SkillType.EXCAVATION) >= 50)
+    		{
+    			if(Math.random() * 20 > 19)
+    			{
+    				xp+= LoadProperties.mslimeballs;
+    				is.add(new ItemStack(Material.SLIME_BALL, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		if(LoadProperties.string && PP.getSkillLevel(SkillType.EXCAVATION) >= 250)
+    		{
+    			if(Math.random() * 20 > 19)
+    			{
+    				xp+= LoadProperties.mstring;
+    				is.add(new ItemStack(Material.STRING, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		if(LoadProperties.watch && PP.getSkillLevel(SkillType.EXCAVATION) >= 500)
+    		{
+    			if(Math.random() * 100 > 99)
+    			{
+    				xp+= LoadProperties.mwatch;
+    				is.add(new ItemStack(Material.WATCH, 1, (byte)0));
+    			}
+    		}
+    		if(LoadProperties.bucket && PP.getSkillLevel(SkillType.EXCAVATION) >= 500)
+    		{
+    			if(Math.random() * 100 > 99)
+    			{
+    				xp+= LoadProperties.mbucket;
+    				is.add(new ItemStack(Material.BUCKET, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		if(LoadProperties.web && PP.getSkillLevel(SkillType.EXCAVATION) >= 750)
+    		{
+    			if(Math.random() * 20 > 19)
+    			{
+    				xp+= LoadProperties.mweb;
+    				is.add(new ItemStack(Material.WEB, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		break;
+    	}
+    	
+    	//DIRT SAND OR GRAVEL
+    	if(type == Material.GRASS || type == Material.DIRT || type == Material.GRAVEL || type == Material.SAND || type == Material.CLAY)
+    	{
+    		xp+= LoadProperties.mbase;
+    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 750)
+    		{
+    			//CHANCE TO GET CAKE
+    			if(LoadProperties.cake == true && Math.random() * 2000 > 1999)
+    			{
+    				xp+= LoadProperties.mcake;
+    				is.add(new ItemStack(Material.CAKE, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 350)
+    		{
+    			//CHANCE TO GET DIAMOND
+    			if(LoadProperties.diamond == true && Math.random() * 750 > 749)
+    			{
+    					xp+= LoadProperties.mdiamond2;
+        				is.add(new ItemStack(Material.DIAMOND, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 250)
+    		{
+    			//CHANCE TO GET YELLOW MUSIC
+    			if(LoadProperties.music == true && Math.random() * 2000 > 1999)
+    			{
+    				xp+= LoadProperties.mmusic;
+    				is.add(new ItemStack(Material.GOLD_RECORD, 1, (byte)0, (byte)0));
+    			}
+    		}
+    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 350)
+    		{
+    			//CHANCE TO GET GREEN MUSIC
+    			if(LoadProperties.music == true && Math.random() * 2000 > 1999)
+    			{
+    				xp+= LoadProperties.mmusic;
+    				is.add(new ItemStack(Material.GREEN_RECORD, 1, (byte)0, (byte)0));
+    			}
+    		}
+    	}
+    	
+    	//GRASS OR DIRT
+    	if(type == Material.DIRT || type == Material.GRASS)
+    	{
+    		if(PP.getSkillLevel(SkillType.EXCAVATION) >= 50)
+    		{
+    			//CHANCE FOR COCOA BEANS
+    			if(LoadProperties.cocoabeans == true && Math.random() * 75 > 74)
+    			{
+    				xp+= LoadProperties.mcocoa;
+					is.add(new ItemStack(Material.getMaterial(351), 1, (byte)0, (byte)3));
+    			}
+    		}
+    		//CHANCE FOR SHROOMS
+    		if(LoadProperties.mushrooms == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 500 && Math.random() * 200 > 199)
+    		{
+    			xp+= LoadProperties.mmushroom2;
+    			switch((int) Math.random() * 1)
+    			{
+    			case 0:
+    				is.add(new ItemStack(Material.BROWN_MUSHROOM, 1, (byte)0, (byte)0));
+    				break;
+    			case 1:
+    				is.add(new ItemStack(Material.RED_MUSHROOM, 1, (byte)0, (byte)0));
+    				break;
+    			}
+				
+    		}
+    		//CHANCE TO GET GLOWSTONE
+    		if(LoadProperties.glowstone == true && PP.getSkillLevel(SkillType.EXCAVATION) >= 25 && Math.random() * 100 > 95)
+    		{
+    			xp+= LoadProperties.mglowstone2;
+				is.add(new ItemStack(Material.GLOWSTONE_DUST, 1, (byte)0, (byte)0));
+    		}
+    	}
+    	
+    	//Drop items
+    	for(ItemStack x : is)
+    	{
+    		if(x != null)
+    			loc.getWorld().dropItemNaturally(loc, x);
+    	}
+    	
+    	//Handle XP related tasks
+    	PP.addXP(SkillType.EXCAVATION, xp, player);
+    	Skills.XpCheckSkill(SkillType.EXCAVATION, player);
+    }
+}

+ 0 - 0
src/com/gmail/nossr50/skills/Fishing.java → src/main/java/com/gmail/nossr50/skills/Fishing.java


+ 338 - 338
src/com/gmail/nossr50/skills/Herbalism.java → src/main/java/com/gmail/nossr50/skills/Herbalism.java

@@ -1,338 +1,338 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.World;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-
-public class Herbalism 
-{
-	
-	public static void greenTerraCheck(Player player, Block block)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-	    if(m.isHoe(player.getItemInHand()))
-	    {
-	    	if(block != null)
-	    	{
-		    	if(!m.abilityBlockCheck(block))
-		    		return;
-	    	}
-	    	if(PP.getHoePreparationMode())
-	    	{
-				PP.setHoePreparationMode(false);
-			}
-	    	int ticks = 2;
-	    	int x = PP.getSkillLevel(SkillType.HERBALISM);
-			while(x >= 50)
-			{
-				x-=50;
-				ticks++;
-			}
-			
-	    	if(!PP.getGreenTerraMode() && Skills.cooldownOver(player, PP.getGreenTerraDeactivatedTimeStamp(), LoadProperties.greenTerraCooldown))
-	    	{
-	    		player.sendMessage(mcLocale.getString("Skills.GreenTerraOn"));
-	    		for(Player y : player.getWorld().getPlayers())
-	    		{
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.GreenTerraPlayer", new Object[] {player.getName()}));
-	    		}
-	    		PP.setGreenTerraActivatedTimeStamp(System.currentTimeMillis());
-	    		PP.setGreenTerraDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-	    		PP.setGreenTerraMode(true);
-	    	}
-	    	
-	    }
-	}
-	public static void greenTerraWheat(Player player, Block block, BlockBreakEvent event, mcMMO plugin)
-	{
-		if(block.getType() == Material.WHEAT && block.getData() == (byte) 0x07)
-		{
-			event.setCancelled(true);
-			PlayerProfile PP = Users.getProfile(player);
-			Material mat = Material.getMaterial(296);
-			Location loc = block.getLocation();
-			ItemStack is = new ItemStack(mat, 1, (byte)0, (byte)0);
-			PP.addXP(SkillType.HERBALISM, LoadProperties.mwheat, player);
-	    	loc.getWorld().dropItemNaturally(loc, is);
-	    	
-	    	//DROP SOME SEEDS
-			mat = Material.SEEDS;
-			is = new ItemStack(mat, 1, (byte)0, (byte)0);
-			loc.getWorld().dropItemNaturally(loc, is);
-			
-	    	herbalismProcCheck(block, player, event, plugin);
-	    	herbalismProcCheck(block, player, event, plugin);
-			block.setData((byte) 0x03);
-		}
-	}
-	
-	public static void greenTerra(Player player, Block block){
-		if(block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT){
-			if(!hasSeeds(player))
-				player.sendMessage("You need more seeds to spread Green Terra");
-			if(hasSeeds(player) && block.getType() != Material.WHEAT)
-			{
-				removeSeeds(player);
-			if(block.getType() == Material.SMOOTH_BRICK)
-				block.setData((byte)1);
-			if(block.getType() == Material.DIRT)
-				block.setType(Material.GRASS);
-			if(LoadProperties.enableCobbleToMossy && block.getType() == Material.COBBLESTONE)
-				block.setType(Material.MOSSY_COBBLESTONE);
-			}
-		}
-	}
-	
-	public static Boolean canBeGreenTerra(Block block){
-    	int t = block.getTypeId();
-    	if(t == 103 || t == 4 || t == 3 || t == 59 || t == 81 || t == 83 || t == 91 || t == 86 || t == 39 || t == 46 || t == 37 || t == 38){
-    		return true;
-    	} else {
-    		return false;
-    	}
-    }
-	public static boolean hasSeeds(Player player){
-    	ItemStack[] inventory = player.getInventory().getContents();
-    	for(ItemStack x : inventory){
-    		if(x != null && x.getTypeId() == 295){
-    			return true;
-    		}
-    	}
-    	return false;
-    }
-	public static void removeSeeds(Player player){
-    	ItemStack[] inventory = player.getInventory().getContents();
-    	for(ItemStack x : inventory){
-    		if(x != null && x.getTypeId() == 295){
-    			if(x.getAmount() == 1){
-    				x.setTypeId(0);
-    				x.setAmount(0);
-    				player.getInventory().setContents(inventory);
-    			} else{
-    			x.setAmount(x.getAmount() - 1);
-    			player.getInventory().setContents(inventory);
-    			}
-    			return;
-    		}
-    	}
-    }
-	public static void herbalismProcCheck(Block block, Player player, BlockBreakEvent event, mcMMO plugin)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-    	int type = block.getTypeId();
-    	Location loc = block.getLocation();
-    	ItemStack is = null;
-    	Material mat = null;
-    	
-    	if(plugin.misc.blockWatchList.contains(block))
-    	{
-    		return;
-    	}
-    	if(type == 59 && block.getData() == (byte) 0x7)
-    	{
-    		mat = Material.getMaterial(296);
-			is = new ItemStack(mat, 1, (byte)0, (byte)0);
-    		PP.addXP(SkillType.HERBALISM, LoadProperties.mwheat, player);
-    		if(player != null)
-    		{
-	    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
-	    		{
-	    			loc.getWorld().dropItemNaturally(loc, is);
-	    		}
-    		}
-    		//GREEN THUMB
-    		if(Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM))
-    		{
-    			event.setCancelled(true);
-    			loc.getWorld().dropItemNaturally(loc, is);
-    			//DROP SOME SEEDS
-    			mat = Material.SEEDS;
-    			is = new ItemStack(mat, 1, (byte)0, (byte)0);
-    			loc.getWorld().dropItemNaturally(loc, is);
-    			
-    			block.setData((byte) 0x1); //Change it to first stage
-    			
-    			//Setup the bonuses
-    			int bonus = 0;
-    			if(PP.getSkillLevel(SkillType.HERBALISM) >= 200)
-    				bonus++;
-    			if(PP.getSkillLevel(SkillType.HERBALISM) >= 400)
-    				bonus++;
-    			if(PP.getSkillLevel(SkillType.HERBALISM) >= 600)
-    				bonus++;
-    			
-    			//Change wheat to be whatever stage based on the bonus
-    			if(bonus == 1)
-    				block.setData((byte) 0x2);
-    			if(bonus == 2)
-    				block.setData((byte) 0x3);
-    			if(bonus == 3)
-    				block.setData((byte) 0x4);
-    		}
-    	}
-    	/*
-    	 * We need to check not-wheat stuff for if it was placed by the player or not
-    	 */
-    	if(block.getData() != (byte) 5)
-    	{
-    		//Cactus
-	    	if(type == 81){
-	    		//Setup the loop
-	    		World world = block.getWorld();
-	    		Block[] blockArray = new Block[3];
-	    		blockArray[0] = block;
-	    		blockArray[1] = world.getBlockAt(block.getX(), block.getY()+1, block.getZ());
-	    		blockArray[2] = world.getBlockAt(block.getX(), block.getY()+2, block.getZ());
-	    		
-	    		Material[] materialArray = new Material[3];
-	    		materialArray[0] = blockArray[0].getType();
-	    		materialArray[1] = blockArray[1].getType();
-	    		materialArray[2] = blockArray[2].getType();
-	    		
-	    		byte[] byteArray = new byte[3];
-	    		byteArray[0] = blockArray[0].getData();
-	    		byteArray[1] = blockArray[0].getData();
-	    		byteArray[2] = blockArray[0].getData();
-	    		
-	    		int x = 0;
-	    		for(Block target : blockArray)
-	    		{
-	    			if(materialArray[x] == Material.CACTUS)
-	    			{
-	    				is = new ItemStack(Material.CACTUS, 1, (byte)0, (byte)0);
-	    				if(byteArray[x] != (byte) 5)
-	    				{
-		    		    	if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
-		    		    	{
-		    		    		loc.getWorld().dropItemNaturally(target.getLocation(), is);
-		    		    	}
-		    		    	PP.addXP(SkillType.HERBALISM, LoadProperties.mcactus, player);
-	    				}
-	    			}
-	    			x++;
-	    		}
-	    	}
-    		//Sugar Canes
-	    	if(type == 83)
-	    	{
-	    		//Setup the loop
-	    		World world = block.getWorld();
-	    		Block[] blockArray = new Block[3];
-	    		blockArray[0] = block;
-	    		blockArray[1] = world.getBlockAt(block.getX(), block.getY()+1, block.getZ());
-	    		blockArray[2] = world.getBlockAt(block.getX(), block.getY()+2, block.getZ());
-	    		
-	    		Material[] materialArray = new Material[3];
-	    		materialArray[0] = blockArray[0].getType();
-	    		materialArray[1] = blockArray[1].getType();
-	    		materialArray[2] = blockArray[2].getType();
-	    		
-	    		byte[] byteArray = new byte[3];
-	    		byteArray[0] = blockArray[0].getData();
-	    		byteArray[1] = blockArray[0].getData();
-	    		byteArray[2] = blockArray[0].getData();
-	    		
-	    		int x = 0;
-	    		for(Block target : blockArray)
-	    		{
-	    			if(materialArray[x] == Material.SUGAR_CANE_BLOCK)
-	    			{
-	    				is = new ItemStack(Material.SUGAR_CANE, 1, (byte)0, (byte)0);
-	    				//Check for being placed by the player
-	    				if(byteArray[x] != (byte) 5)
-	    				{
-		    		    	if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
-		    		    	{
-		    		    		loc.getWorld().dropItemNaturally(target.getLocation(), is);
-		    		    	}
-		    		    	PP.addXP(SkillType.HERBALISM, LoadProperties.msugar, player);
-	    				}
-	    			}
-	    			x++;
-	    		}
-	    	}
-	    	
-    		//Pumpkins
-	    	if((type == 91 || type == 86))
-	    	{
-	    		mat = Material.getMaterial(block.getTypeId());
-				is = new ItemStack(mat, 1, (byte)0, (byte)0);
-	    		if(player != null)
-	    		{
-		    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
-		    		{
-		    			loc.getWorld().dropItemNaturally(loc, is);
-		    		}
-	    		}
-	    		PP.addXP(SkillType.HERBALISM, LoadProperties.mpumpkin, player);
-	    	}
-	    	//Melon
-	    	if(type == 103)
-	    	{
-	    		mat = Material.getMaterial(block.getTypeId());
-				is = new ItemStack(mat, 1, (byte)0, (byte)0);
-				
-				if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
-	    		{
-	    			loc.getWorld().dropItemNaturally(loc, is);
-	    		}
-				PP.addXP(SkillType.HERBALISM, LoadProperties.mmelon, player);
-	    	}
-    		//Mushroom
-	    	if(type == 39 || type == 40)
-	    	{
-	    		mat = Material.getMaterial(block.getTypeId());
-				is = new ItemStack(mat, 1, (byte)0, (byte)0);
-	    		if(player != null)
-	    		{
-		    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
-		    		{
-		    			loc.getWorld().dropItemNaturally(loc, is);
-		    		}
-	    		}
-	    		PP.addXP(SkillType.HERBALISM, LoadProperties.mmushroom, player);
-	    	}
-	    	//Flower
-	    	if(type == 37 || type == 38){
-	    		mat = Material.getMaterial(block.getTypeId());
-				is = new ItemStack(mat, 1, (byte)0, (byte)0);
-	    		if(player != null){
-		    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM)){
-		    			loc.getWorld().dropItemNaturally(loc, is);
-		    		}
-	    		}
-	    		PP.addXP(SkillType.HERBALISM, LoadProperties.mflower, player);
-	    	}
-    	}
-    	Skills.XpCheckSkill(SkillType.HERBALISM, player);
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+
+public class Herbalism 
+{
+	
+	public static void greenTerraCheck(Player player, Block block)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+	    if(m.isHoe(player.getItemInHand()))
+	    {
+	    	if(block != null)
+	    	{
+		    	if(!m.abilityBlockCheck(block))
+		    		return;
+	    	}
+	    	if(PP.getHoePreparationMode())
+	    	{
+				PP.setHoePreparationMode(false);
+			}
+	    	int ticks = 2;
+	    	int x = PP.getSkillLevel(SkillType.HERBALISM);
+			while(x >= 50)
+			{
+				x-=50;
+				ticks++;
+			}
+			
+	    	if(!PP.getGreenTerraMode() && Skills.cooldownOver(player, PP.getGreenTerraDeactivatedTimeStamp(), LoadProperties.greenTerraCooldown))
+	    	{
+	    		player.sendMessage(mcLocale.getString("Skills.GreenTerraOn"));
+	    		for(Player y : player.getWorld().getPlayers())
+	    		{
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.GreenTerraPlayer", new Object[] {player.getName()}));
+	    		}
+	    		PP.setGreenTerraActivatedTimeStamp(System.currentTimeMillis());
+	    		PP.setGreenTerraDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+	    		PP.setGreenTerraMode(true);
+	    	}
+	    	
+	    }
+	}
+	public static void greenTerraWheat(Player player, Block block, BlockBreakEvent event, mcMMO plugin)
+	{
+		if(block.getType() == Material.WHEAT && block.getData() == (byte) 0x07)
+		{
+			event.setCancelled(true);
+			PlayerProfile PP = Users.getProfile(player);
+			Material mat = Material.getMaterial(296);
+			Location loc = block.getLocation();
+			ItemStack is = new ItemStack(mat, 1, (byte)0, (byte)0);
+			PP.addXP(SkillType.HERBALISM, LoadProperties.mwheat, player);
+	    	loc.getWorld().dropItemNaturally(loc, is);
+	    	
+	    	//DROP SOME SEEDS
+			mat = Material.SEEDS;
+			is = new ItemStack(mat, 1, (byte)0, (byte)0);
+			loc.getWorld().dropItemNaturally(loc, is);
+			
+	    	herbalismProcCheck(block, player, event, plugin);
+	    	herbalismProcCheck(block, player, event, plugin);
+			block.setData((byte) 0x03);
+		}
+	}
+	
+	public static void greenTerra(Player player, Block block){
+		if(block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT){
+			if(!hasSeeds(player))
+				player.sendMessage("You need more seeds to spread Green Terra");
+			if(hasSeeds(player) && block.getType() != Material.WHEAT)
+			{
+				removeSeeds(player);
+			if(block.getType() == Material.SMOOTH_BRICK)
+				block.setData((byte)1);
+			if(block.getType() == Material.DIRT)
+				block.setType(Material.GRASS);
+			if(LoadProperties.enableCobbleToMossy && block.getType() == Material.COBBLESTONE)
+				block.setType(Material.MOSSY_COBBLESTONE);
+			}
+		}
+	}
+	
+	public static Boolean canBeGreenTerra(Block block){
+    	int t = block.getTypeId();
+    	if(t == 103 || t == 4 || t == 3 || t == 59 || t == 81 || t == 83 || t == 91 || t == 86 || t == 39 || t == 46 || t == 37 || t == 38){
+    		return true;
+    	} else {
+    		return false;
+    	}
+    }
+	public static boolean hasSeeds(Player player){
+    	ItemStack[] inventory = player.getInventory().getContents();
+    	for(ItemStack x : inventory){
+    		if(x != null && x.getTypeId() == 295){
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+	public static void removeSeeds(Player player){
+    	ItemStack[] inventory = player.getInventory().getContents();
+    	for(ItemStack x : inventory){
+    		if(x != null && x.getTypeId() == 295){
+    			if(x.getAmount() == 1){
+    				x.setTypeId(0);
+    				x.setAmount(0);
+    				player.getInventory().setContents(inventory);
+    			} else{
+    			x.setAmount(x.getAmount() - 1);
+    			player.getInventory().setContents(inventory);
+    			}
+    			return;
+    		}
+    	}
+    }
+	public static void herbalismProcCheck(Block block, Player player, BlockBreakEvent event, mcMMO plugin)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+    	int type = block.getTypeId();
+    	Location loc = block.getLocation();
+    	ItemStack is = null;
+    	Material mat = null;
+    	
+    	if(plugin.misc.blockWatchList.contains(block))
+    	{
+    		return;
+    	}
+    	if(type == 59 && block.getData() == (byte) 0x7)
+    	{
+    		mat = Material.getMaterial(296);
+			is = new ItemStack(mat, 1, (byte)0, (byte)0);
+    		PP.addXP(SkillType.HERBALISM, LoadProperties.mwheat, player);
+    		if(player != null)
+    		{
+	    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
+	    		{
+	    			loc.getWorld().dropItemNaturally(loc, is);
+	    		}
+    		}
+    		//GREEN THUMB
+    		if(Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM))
+    		{
+    			event.setCancelled(true);
+    			loc.getWorld().dropItemNaturally(loc, is);
+    			//DROP SOME SEEDS
+    			mat = Material.SEEDS;
+    			is = new ItemStack(mat, 1, (byte)0, (byte)0);
+    			loc.getWorld().dropItemNaturally(loc, is);
+    			
+    			block.setData((byte) 0x1); //Change it to first stage
+    			
+    			//Setup the bonuses
+    			int bonus = 0;
+    			if(PP.getSkillLevel(SkillType.HERBALISM) >= 200)
+    				bonus++;
+    			if(PP.getSkillLevel(SkillType.HERBALISM) >= 400)
+    				bonus++;
+    			if(PP.getSkillLevel(SkillType.HERBALISM) >= 600)
+    				bonus++;
+    			
+    			//Change wheat to be whatever stage based on the bonus
+    			if(bonus == 1)
+    				block.setData((byte) 0x2);
+    			if(bonus == 2)
+    				block.setData((byte) 0x3);
+    			if(bonus == 3)
+    				block.setData((byte) 0x4);
+    		}
+    	}
+    	/*
+    	 * We need to check not-wheat stuff for if it was placed by the player or not
+    	 */
+    	if(block.getData() != (byte) 5)
+    	{
+    		//Cactus
+	    	if(type == 81){
+	    		//Setup the loop
+	    		World world = block.getWorld();
+	    		Block[] blockArray = new Block[3];
+	    		blockArray[0] = block;
+	    		blockArray[1] = world.getBlockAt(block.getX(), block.getY()+1, block.getZ());
+	    		blockArray[2] = world.getBlockAt(block.getX(), block.getY()+2, block.getZ());
+	    		
+	    		Material[] materialArray = new Material[3];
+	    		materialArray[0] = blockArray[0].getType();
+	    		materialArray[1] = blockArray[1].getType();
+	    		materialArray[2] = blockArray[2].getType();
+	    		
+	    		byte[] byteArray = new byte[3];
+	    		byteArray[0] = blockArray[0].getData();
+	    		byteArray[1] = blockArray[0].getData();
+	    		byteArray[2] = blockArray[0].getData();
+	    		
+	    		int x = 0;
+	    		for(Block target : blockArray)
+	    		{
+	    			if(materialArray[x] == Material.CACTUS)
+	    			{
+	    				is = new ItemStack(Material.CACTUS, 1, (byte)0, (byte)0);
+	    				if(byteArray[x] != (byte) 5)
+	    				{
+		    		    	if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
+		    		    	{
+		    		    		loc.getWorld().dropItemNaturally(target.getLocation(), is);
+		    		    	}
+		    		    	PP.addXP(SkillType.HERBALISM, LoadProperties.mcactus, player);
+	    				}
+	    			}
+	    			x++;
+	    		}
+	    	}
+    		//Sugar Canes
+	    	if(type == 83)
+	    	{
+	    		//Setup the loop
+	    		World world = block.getWorld();
+	    		Block[] blockArray = new Block[3];
+	    		blockArray[0] = block;
+	    		blockArray[1] = world.getBlockAt(block.getX(), block.getY()+1, block.getZ());
+	    		blockArray[2] = world.getBlockAt(block.getX(), block.getY()+2, block.getZ());
+	    		
+	    		Material[] materialArray = new Material[3];
+	    		materialArray[0] = blockArray[0].getType();
+	    		materialArray[1] = blockArray[1].getType();
+	    		materialArray[2] = blockArray[2].getType();
+	    		
+	    		byte[] byteArray = new byte[3];
+	    		byteArray[0] = blockArray[0].getData();
+	    		byteArray[1] = blockArray[0].getData();
+	    		byteArray[2] = blockArray[0].getData();
+	    		
+	    		int x = 0;
+	    		for(Block target : blockArray)
+	    		{
+	    			if(materialArray[x] == Material.SUGAR_CANE_BLOCK)
+	    			{
+	    				is = new ItemStack(Material.SUGAR_CANE, 1, (byte)0, (byte)0);
+	    				//Check for being placed by the player
+	    				if(byteArray[x] != (byte) 5)
+	    				{
+		    		    	if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
+		    		    	{
+		    		    		loc.getWorld().dropItemNaturally(target.getLocation(), is);
+		    		    	}
+		    		    	PP.addXP(SkillType.HERBALISM, LoadProperties.msugar, player);
+	    				}
+	    			}
+	    			x++;
+	    		}
+	    	}
+	    	
+    		//Pumpkins
+	    	if((type == 91 || type == 86))
+	    	{
+	    		mat = Material.getMaterial(block.getTypeId());
+				is = new ItemStack(mat, 1, (byte)0, (byte)0);
+	    		if(player != null)
+	    		{
+		    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
+		    		{
+		    			loc.getWorld().dropItemNaturally(loc, is);
+		    		}
+	    		}
+	    		PP.addXP(SkillType.HERBALISM, LoadProperties.mpumpkin, player);
+	    	}
+	    	//Melon
+	    	if(type == 103)
+	    	{
+	    		mat = Material.getMaterial(block.getTypeId());
+				is = new ItemStack(mat, 1, (byte)0, (byte)0);
+				
+				if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
+	    		{
+	    			loc.getWorld().dropItemNaturally(loc, is);
+	    		}
+				PP.addXP(SkillType.HERBALISM, LoadProperties.mmelon, player);
+	    	}
+    		//Mushroom
+	    	if(type == 39 || type == 40)
+	    	{
+	    		mat = Material.getMaterial(block.getTypeId());
+				is = new ItemStack(mat, 1, (byte)0, (byte)0);
+	    		if(player != null)
+	    		{
+		    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM))
+		    		{
+		    			loc.getWorld().dropItemNaturally(loc, is);
+		    		}
+	    		}
+	    		PP.addXP(SkillType.HERBALISM, LoadProperties.mmushroom, player);
+	    	}
+	    	//Flower
+	    	if(type == 37 || type == 38){
+	    		mat = Material.getMaterial(block.getTypeId());
+				is = new ItemStack(mat, 1, (byte)0, (byte)0);
+	    		if(player != null){
+		    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.HERBALISM)){
+		    			loc.getWorld().dropItemNaturally(loc, is);
+		    		}
+	    		}
+	    		PP.addXP(SkillType.HERBALISM, LoadProperties.mflower, player);
+	    	}
+    	}
+    	Skills.XpCheckSkill(SkillType.HERBALISM, player);
+    }
+}

+ 440 - 440
src/com/gmail/nossr50/skills/Mining.java → src/main/java/com/gmail/nossr50/skills/Mining.java

@@ -1,440 +1,440 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import net.minecraft.server.Enchantment;
-
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.Statistic;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.getspout.spoutapi.sound.SoundEffect;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-
-public class Mining 
-{	
-	public static void superBreakerCheck(Player player, Block block)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-	    if(m.isMiningPick(player.getItemInHand()))
-	    {
-	    	if(block != null)
-	    	{
-		    	if(!m.abilityBlockCheck(block))
-		    		return;
-	    	}
-	    	if(PP.getPickaxePreparationMode())
-	    	{
-    			PP.setPickaxePreparationMode(false);
-    		}
-	    	
-	    	int ticks = 2;
-	    	int x = PP.getSkillLevel(SkillType.MINING);
-	    	
-    		while(x >= 50)
-    		{
-    			x-=50;
-    			ticks++;
-    		}
-    		
-	    	if(!PP.getSuperBreakerMode() && Skills.cooldownOver(player, PP.getSuperBreakerDeactivatedTimeStamp(), LoadProperties.superBreakerCooldown)){
-	    		player.sendMessage(mcLocale.getString("Skills.SuperBreakerOn"));
-	    		for(Player y : player.getWorld().getPlayers())
-	    		{
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.SuperBreakerPlayer", new Object[] {player.getName()}));
-	    		}
-	    		PP.setSuperBreakerActivatedTimeStamp(System.currentTimeMillis());
-	    		PP.setSuperBreakerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-	    		PP.setSuperBreakerMode(true);
-	    	}
-	    	
-	    }
-	}
-	public static void blockProcSimulate(Block block)
-	{
-    	Location loc = block.getLocation();
-    	Material mat = Material.getMaterial(block.getTypeId());
-		byte damage = 0;
-		ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
-		if(block.getTypeId() != 89 && block.getTypeId() != 73 && block.getTypeId() != 74 && block.getTypeId() != 56 
-				&& block.getTypeId() != 21 && block.getTypeId() != 1 && block.getTypeId() != 16)
-			loc.getWorld().dropItemNaturally(loc, item);
-		if(block.getTypeId() == 89)
-		{
-			mat = Material.getMaterial(348);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-		}
-		if(block.getTypeId() == 73 || block.getTypeId() == 74)
-		{
-			mat = Material.getMaterial(331);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			if(Math.random() * 10 > 5){
-				loc.getWorld().dropItemNaturally(loc, item);
-			}
-		}
-		if(block.getTypeId() == 21)
-		{
-			mat = Material.getMaterial(351);
-			item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-		}
-		if(block.getTypeId() == 56)
-		{
-			mat = Material.getMaterial(264);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-		}
-		if(block.getTypeId() == 1)
-		{
-			mat = Material.getMaterial(4);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-		}
-		if(block.getTypeId() == 16)
-		{
-			mat = Material.getMaterial(263);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-		}
-    }
-    public static void blockProcCheck(Block block, Player player)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-
-    	if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.MINING))
-    	{
-	    	blockProcSimulate(block);
-			return;
-    	}	
-	}
-    
-    public static void miningBlockCheck(Boolean smelt, Player player, Block block, mcMMO plugin)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(plugin.misc.blockWatchList.contains(block) || block.getData() == (byte) 5)
-    		return;
-    	int xp = 0;
-    	if(block.getTypeId() == 1 || block.getTypeId() == 24)
-    	{
-    		xp += LoadProperties.mstone;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//OBSIDIAN
-    	if(block.getTypeId() == 49)
-    	{
-    		xp += LoadProperties.mobsidian;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//NETHERRACK
-    	if(block.getTypeId() == 87)
-    	{
-    		xp += LoadProperties.mnetherrack;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//GLOWSTONE
-    	if(block.getTypeId() == 89)
-    	{
-    		xp += LoadProperties.mglowstone;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//COAL
-    	if(block.getTypeId() == 16)
-    	{
-    		xp += LoadProperties.mcoal;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//GOLD
-    	if(block.getTypeId() == 14)
-    	{
-    		xp += LoadProperties.mgold;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//DIAMOND
-    	if(block.getTypeId() == 56){
-    		xp += LoadProperties.mdiamond;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//IRON
-    	if(block.getTypeId() == 15)
-    	{
-    		xp += LoadProperties.miron;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//REDSTONE
-    	if(block.getTypeId() == 73 || block.getTypeId() == 74)
-    	{
-    		xp += LoadProperties.mredstone;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	//LAPUS
-    	if(block.getTypeId() == 21)
-    	{
-    		xp += LoadProperties.mlapis;
-    		if(smelt = false)
-    			blockProcCheck(block, player);
-    		else
-    			blockProcCheck(block, player);
-    	}
-    	PP.addXP(SkillType.MINING, xp, player);
-    	Skills.XpCheckSkill(SkillType.MINING, player);
-    }
-    /*
-     * Handling SuperBreaker stuff
-     */
-    public static Boolean canBeSuperBroken(Block block)
-    {
-    	int t = block.getTypeId();
-    	if(t == 49 || t == 87 || t == 89 || t == 73 || t == 74 || t == 56 || t == 21 || t == 1 || t == 16 || t == 14 || t == 15)
-    	{
-    		return true;
-    	} else {
-    		return false;
-    	}
-    }
-    
-    public static void SuperBreakerBlockCheck(Player player, Block block, mcMMO plugin)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(LoadProperties.toolsLoseDurabilityFromAbilities)
-    	{
-    		if(player.getItemInHand().getEnchantments().containsKey(Enchantment.DURABILITY))
-    		{
-    			
-    		}
-    		m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
-    	}
-    	
-    	Location loc = block.getLocation();
-    	Material mat = Material.getMaterial(block.getTypeId());
-    	int xp = 0;
-		byte damage = 0;
-		ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
-    	if(block.getTypeId() == 1 || block.getTypeId() == 24)
-    	{
-    		if(block.getTypeId() == 1)
-    		{
-    			mat = Material.COBBLESTONE;
-    			if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
-        		{
-        			xp += LoadProperties.mstone;
-        			blockProcCheck(block, player);
-        			blockProcCheck(block, player);
-        		}
-    		} else 
-    		{
-    			mat = Material.SANDSTONE;
-    			if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
-        		{
-        			xp += LoadProperties.msandstone;
-        			blockProcCheck(block, player);
-        			blockProcCheck(block, player);
-        		}
-    		}
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//NETHERRACK
-    	if(block.getTypeId() == 87)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mnetherrack;
-    			blockProcCheck(block, player);
-    			blockProcCheck(block, player);
-    		}
-    		mat = Material.getMaterial(87);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//GLOWSTONE
-    	if(block.getTypeId() == 89)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mglowstone;
-    			blockProcCheck(block, player);
-    			blockProcCheck(block, player);
-    		}
-    		mat = Material.getMaterial(348);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//COAL
-    	if(block.getTypeId() == 16)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mcoal;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        		}
-    		mat = Material.getMaterial(263);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//GOLD
-    	if(block.getTypeId() == 14 && m.getTier(player) >= 3)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mgold;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        		}
-    		item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//OBSIDIAN
-    	if(block.getTypeId() == 49 && m.getTier(player) >= 4)
-    	{
-    		if(LoadProperties.toolsLoseDurabilityFromAbilities)
-        		m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mobsidian;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        	}
-    		mat = Material.getMaterial(49);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//DIAMOND
-    	if(block.getTypeId() == 56 && m.getTier(player) >= 3)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mdiamond;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        	}
-    		mat = Material.getMaterial(264);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//IRON
-    	if(block.getTypeId() == 15 && m.getTier(player) >= 2)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.miron;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        	}
-    		item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//REDSTONE
-    	if((block.getTypeId() == 73 || block.getTypeId() == 74) && m.getTier(player) >= 4)
-    	{
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5)
-    		{
-    			xp += LoadProperties.mredstone;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        	}
-    		mat = Material.getMaterial(331);
-			item = new ItemStack(mat, 1, (byte)0, damage);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			if(Math.random() * 10 > 5)
-			{
-				loc.getWorld().dropItemNaturally(loc, item);
-			}
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	//LAPUS
-    	if(block.getTypeId() == 21 && m.getTier(player) >= 3){
-    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
-    			xp += LoadProperties.mlapis;
-        		blockProcCheck(block, player);
-        		blockProcCheck(block, player);
-        	}
-    		mat = Material.getMaterial(351);
-			item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			loc.getWorld().dropItemNaturally(loc, item);
-			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
-    		block.setType(Material.AIR);
-    	}
-    	if(block.getData() != (byte) 5)
-    		PP.addXP(SkillType.MINING, xp, player);
-    	if(LoadProperties.spoutEnabled)
-    		SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
-    	
-    	Skills.XpCheckSkill(SkillType.MINING, player);
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import net.minecraft.server.Enchantment;
+
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.Statistic;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.getspout.spoutapi.sound.SoundEffect;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+
+public class Mining 
+{	
+	public static void superBreakerCheck(Player player, Block block)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+	    if(m.isMiningPick(player.getItemInHand()))
+	    {
+	    	if(block != null)
+	    	{
+		    	if(!m.abilityBlockCheck(block))
+		    		return;
+	    	}
+	    	if(PP.getPickaxePreparationMode())
+	    	{
+    			PP.setPickaxePreparationMode(false);
+    		}
+	    	
+	    	int ticks = 2;
+	    	int x = PP.getSkillLevel(SkillType.MINING);
+	    	
+    		while(x >= 50)
+    		{
+    			x-=50;
+    			ticks++;
+    		}
+    		
+	    	if(!PP.getSuperBreakerMode() && Skills.cooldownOver(player, PP.getSuperBreakerDeactivatedTimeStamp(), LoadProperties.superBreakerCooldown)){
+	    		player.sendMessage(mcLocale.getString("Skills.SuperBreakerOn"));
+	    		for(Player y : player.getWorld().getPlayers())
+	    		{
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.SuperBreakerPlayer", new Object[] {player.getName()}));
+	    		}
+	    		PP.setSuperBreakerActivatedTimeStamp(System.currentTimeMillis());
+	    		PP.setSuperBreakerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+	    		PP.setSuperBreakerMode(true);
+	    	}
+	    	
+	    }
+	}
+	public static void blockProcSimulate(Block block)
+	{
+    	Location loc = block.getLocation();
+    	Material mat = Material.getMaterial(block.getTypeId());
+		byte damage = 0;
+		ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
+		if(block.getTypeId() != 89 && block.getTypeId() != 73 && block.getTypeId() != 74 && block.getTypeId() != 56 
+				&& block.getTypeId() != 21 && block.getTypeId() != 1 && block.getTypeId() != 16)
+			loc.getWorld().dropItemNaturally(loc, item);
+		if(block.getTypeId() == 89)
+		{
+			mat = Material.getMaterial(348);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+		}
+		if(block.getTypeId() == 73 || block.getTypeId() == 74)
+		{
+			mat = Material.getMaterial(331);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			if(Math.random() * 10 > 5){
+				loc.getWorld().dropItemNaturally(loc, item);
+			}
+		}
+		if(block.getTypeId() == 21)
+		{
+			mat = Material.getMaterial(351);
+			item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+		}
+		if(block.getTypeId() == 56)
+		{
+			mat = Material.getMaterial(264);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+		}
+		if(block.getTypeId() == 1)
+		{
+			mat = Material.getMaterial(4);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+		}
+		if(block.getTypeId() == 16)
+		{
+			mat = Material.getMaterial(263);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+		}
+    }
+    public static void blockProcCheck(Block block, Player player)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+
+    	if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.MINING))
+    	{
+	    	blockProcSimulate(block);
+			return;
+    	}	
+	}
+    
+    public static void miningBlockCheck(Boolean smelt, Player player, Block block, mcMMO plugin)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(plugin.misc.blockWatchList.contains(block) || block.getData() == (byte) 5)
+    		return;
+    	int xp = 0;
+    	if(block.getTypeId() == 1 || block.getTypeId() == 24)
+    	{
+    		xp += LoadProperties.mstone;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//OBSIDIAN
+    	if(block.getTypeId() == 49)
+    	{
+    		xp += LoadProperties.mobsidian;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//NETHERRACK
+    	if(block.getTypeId() == 87)
+    	{
+    		xp += LoadProperties.mnetherrack;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//GLOWSTONE
+    	if(block.getTypeId() == 89)
+    	{
+    		xp += LoadProperties.mglowstone;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//COAL
+    	if(block.getTypeId() == 16)
+    	{
+    		xp += LoadProperties.mcoal;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//GOLD
+    	if(block.getTypeId() == 14)
+    	{
+    		xp += LoadProperties.mgold;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//DIAMOND
+    	if(block.getTypeId() == 56){
+    		xp += LoadProperties.mdiamond;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//IRON
+    	if(block.getTypeId() == 15)
+    	{
+    		xp += LoadProperties.miron;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//REDSTONE
+    	if(block.getTypeId() == 73 || block.getTypeId() == 74)
+    	{
+    		xp += LoadProperties.mredstone;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	//LAPUS
+    	if(block.getTypeId() == 21)
+    	{
+    		xp += LoadProperties.mlapis;
+    		if(smelt = false)
+    			blockProcCheck(block, player);
+    		else
+    			blockProcCheck(block, player);
+    	}
+    	PP.addXP(SkillType.MINING, xp, player);
+    	Skills.XpCheckSkill(SkillType.MINING, player);
+    }
+    /*
+     * Handling SuperBreaker stuff
+     */
+    public static Boolean canBeSuperBroken(Block block)
+    {
+    	int t = block.getTypeId();
+    	if(t == 49 || t == 87 || t == 89 || t == 73 || t == 74 || t == 56 || t == 21 || t == 1 || t == 16 || t == 14 || t == 15)
+    	{
+    		return true;
+    	} else {
+    		return false;
+    	}
+    }
+    
+    public static void SuperBreakerBlockCheck(Player player, Block block, mcMMO plugin)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(LoadProperties.toolsLoseDurabilityFromAbilities)
+    	{
+    		if(player.getItemInHand().getEnchantments().containsKey(Enchantment.DURABILITY))
+    		{
+    			
+    		}
+    		m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
+    	}
+    	
+    	Location loc = block.getLocation();
+    	Material mat = Material.getMaterial(block.getTypeId());
+    	int xp = 0;
+		byte damage = 0;
+		ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
+    	if(block.getTypeId() == 1 || block.getTypeId() == 24)
+    	{
+    		if(block.getTypeId() == 1)
+    		{
+    			mat = Material.COBBLESTONE;
+    			if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
+        		{
+        			xp += LoadProperties.mstone;
+        			blockProcCheck(block, player);
+        			blockProcCheck(block, player);
+        		}
+    		} else 
+    		{
+    			mat = Material.SANDSTONE;
+    			if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
+        		{
+        			xp += LoadProperties.msandstone;
+        			blockProcCheck(block, player);
+        			blockProcCheck(block, player);
+        		}
+    		}
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//NETHERRACK
+    	if(block.getTypeId() == 87)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mnetherrack;
+    			blockProcCheck(block, player);
+    			blockProcCheck(block, player);
+    		}
+    		mat = Material.getMaterial(87);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//GLOWSTONE
+    	if(block.getTypeId() == 89)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mglowstone;
+    			blockProcCheck(block, player);
+    			blockProcCheck(block, player);
+    		}
+    		mat = Material.getMaterial(348);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//COAL
+    	if(block.getTypeId() == 16)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mcoal;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        		}
+    		mat = Material.getMaterial(263);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//GOLD
+    	if(block.getTypeId() == 14 && m.getTier(player) >= 3)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mgold;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        		}
+    		item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//OBSIDIAN
+    	if(block.getTypeId() == 49 && m.getTier(player) >= 4)
+    	{
+    		if(LoadProperties.toolsLoseDurabilityFromAbilities)
+        		m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mobsidian;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        	}
+    		mat = Material.getMaterial(49);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//DIAMOND
+    	if(block.getTypeId() == 56 && m.getTier(player) >= 3)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mdiamond;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        	}
+    		mat = Material.getMaterial(264);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//IRON
+    	if(block.getTypeId() == 15 && m.getTier(player) >= 2)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.miron;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        	}
+    		item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//REDSTONE
+    	if((block.getTypeId() == 73 || block.getTypeId() == 74) && m.getTier(player) >= 4)
+    	{
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5)
+    		{
+    			xp += LoadProperties.mredstone;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        	}
+    		mat = Material.getMaterial(331);
+			item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			if(Math.random() * 10 > 5)
+			{
+				loc.getWorld().dropItemNaturally(loc, item);
+			}
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	//LAPUS
+    	if(block.getTypeId() == 21 && m.getTier(player) >= 3){
+    		if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
+    			xp += LoadProperties.mlapis;
+        		blockProcCheck(block, player);
+        		blockProcCheck(block, player);
+        	}
+    		mat = Material.getMaterial(351);
+			item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			loc.getWorld().dropItemNaturally(loc, item);
+			player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
+    		block.setType(Material.AIR);
+    	}
+    	if(block.getData() != (byte) 5)
+    		PP.addXP(SkillType.MINING, xp, player);
+    	if(LoadProperties.spoutEnabled)
+    		SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
+    	
+    	Skills.XpCheckSkill(SkillType.MINING, player);
+    }
+}

+ 623 - 623
src/com/gmail/nossr50/skills/Repair.java → src/main/java/com/gmail/nossr50/skills/Repair.java

@@ -1,624 +1,624 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.ChatColor;
-import org.bukkit.block.Block;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-
-public class Repair {
-        
-       /*
-        * Repair requirements for each material
-        */
-        private static int rGold =  LoadProperties.rGold;
-        private static String nGold =  LoadProperties.nGold;        
-        private static int rStone =  LoadProperties.rStone;
-        private static String nStone =  LoadProperties.nStone;        
-        private static int rWood =  LoadProperties.rWood;
-        private static String nWood =  LoadProperties.nWood;        
-        private static int rDiamond =  LoadProperties.rDiamond;
-        private static String nDiamond =  LoadProperties.nDiamond;        
-        private static int rIron =  LoadProperties.rIron;
-        private static String nIron =  LoadProperties.nIron;
-        
-	
-	public static void repairCheck(Player player, ItemStack is, Block block){
-		PlayerProfile PP = Users.getProfile(player);
-		short durabilityBefore = player.getItemInHand().getDurability();
-		short durabilityAfter = 0;
-		short dif = 0;
-		
-		//Stuff for keeping enchants
-		Enchantment[] enchants = new Enchantment[is.getEnchantments().size()];
-		int[] enchantsLevel = new int[is.getEnchantments().size()];
-		
-		int pos = 0;
-		for(Enchantment x : is.getEnchantments().keySet())
-		{
-			enchants[pos] = x;
-			enchantsLevel[pos] = is.getEnchantmentLevel(x);
-			pos++;
-		}
-		
-    	if(block != null && mcPermissions.getInstance().repair(player))
-    	{
-        	if(player.getItemInHand().getDurability() > 0 && player.getItemInHand().getAmount() < 2){
-        		/*
-        		 * ARMOR
-        		 */
-        		if(isArmor(is)){
-        			/*
-        			 * DIAMOND ARMOR
-        			 */
-        			if(isDiamondArmor(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){
-        				removeItem(player, rDiamond);
-	        			repairItem(player, enchants, enchantsLevel);
-	        			
-	        			durabilityAfter = player.getItemInHand().getDurability();
-	        			dif = (short) (durabilityBefore - durabilityAfter);
-	        			dif = (short) (dif * 6); //Boost XP
-	        			PP.addXP(SkillType.REPAIR, dif*10, player);
-	        			
-	        			//CLANG CLANG
-	        			if(LoadProperties.spoutEnabled)
-	        				SpoutStuff.playRepairNoise(player);
-        			} 
-        			else if (isIronArmor(is) && hasItem(player, rIron)){
-        			/*
-        			 * IRON ARMOR
-        			 */
-        				removeItem(player, rIron);
-        				repairItem(player, enchants, enchantsLevel);
-	        			
-	            		durabilityAfter = player.getItemInHand().getDurability();
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		dif = (short) (dif * 2); //Boost XP
-	            		PP.addXP(SkillType.REPAIR, dif*10, player);
-	            		
-	            		//CLANG CLANG
-	        			if(LoadProperties.spoutEnabled)
-	        				SpoutStuff.playRepairNoise(player);
-	            	//GOLD ARMOR
-        			} else if (isGoldArmor(is) && hasItem(player, rGold)){
-        				removeItem(player, rGold);
-        				repairItem(player, enchants, enchantsLevel);
-        				
-        				durabilityAfter = player.getItemInHand().getDurability();
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		dif = (short) (dif * 4); //Boost XP of Gold to around Iron
-        				PP.addXP(SkillType.REPAIR, dif*10, player);
-        				
-        				//CLANG CLANG
-	        			if(LoadProperties.spoutEnabled)
-	        				SpoutStuff.playRepairNoise(player);
-        			} else {
-        				needMoreVespeneGas(is, player);
-        			}
-        		}
-        		/*
-        		 * TOOLS
-        		 */
-        		if(isTools(is)){
-        			if(isStoneTools(is) && hasItem(player, rStone)){
-        				removeItem(player, rStone);
-        				repairItem(player, enchants, enchantsLevel);
-        				
-            			durabilityAfter = player.getItemInHand().getDurability();
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		if(m.isShovel(is))
-	        				dif = (short) (dif / 3);
-	        			if(m.isSwords(is))
-	        				dif = (short) (dif / 2);
-	        			if(m.isHoe(is))
-	        				dif = (short) (dif / 2);
-	        			//STONE NERF
-	        			dif = (short) (dif / 2);
-	        			
-            			PP.addXP(SkillType.REPAIR, dif*10, player);
-        			} else if(isWoodTools(is) && hasItem(player,rWood)){
-        				removeItem(player,rWood);
-        				repairItem(player, enchants, enchantsLevel);
-	        			
-            			durabilityAfter = player.getItemInHand().getDurability();
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		if(m.isShovel(is))
-	        				dif = (short) (dif / 3);
-	        			if(m.isSwords(is))
-	        				dif = (short) (dif / 2);
-	        			if(m.isHoe(is))
-	        				dif = (short) (dif / 2);
-	        			//WOOD NERF
-	        			dif = (short) (dif / 2);
-	        			
-            			PP.addXP(SkillType.REPAIR, dif*10, player);
-        			} else if(isIronTools(is) && hasItem(player, rIron)){
-            			removeItem(player, rIron);
-            			repairItem(player, enchants, enchantsLevel);
-	        			
-            			durabilityAfter = (short) (player.getItemInHand().getDurability()-getRepairAmount(is, player));
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		if(m.isShovel(is))
-	        				dif = (short) (dif / 3);
-	        			if(m.isSwords(is))
-	        				dif = (short) (dif / 2);
-	        			if(m.isHoe(is))
-	        				dif = (short) (dif / 2);
-            			PP.addXP(SkillType.REPAIR, dif*10, player);
-            			
-            			//CLANG CLANG
-	        			if(LoadProperties.spoutEnabled)
-	        				SpoutStuff.playRepairNoise(player);
-            		} else if (isDiamondTools(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){
-            			removeItem(player, rDiamond);
-            			repairItem(player, enchants, enchantsLevel);
-            			
-            			durabilityAfter = player.getItemInHand().getDurability();
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		if(m.isShovel(is))
-	        				dif = (short) (dif / 3);
-	        			if(m.isSwords(is))
-	        				dif = (short) (dif / 2);
-	        			if(m.isHoe(is))
-	        				dif = (short) (dif / 2);
-            			PP.addXP(SkillType.REPAIR, dif*10, player);
-            			
-            			//CLANG CLANG
-	        			if(LoadProperties.spoutEnabled)
-	        				SpoutStuff.playRepairNoise(player);
-            		} else if(isGoldTools(is) && hasItem(player, rGold)){
-            			removeItem(player, rGold);
-            			repairItem(player, enchants, enchantsLevel);
-            			
-            			durabilityAfter = player.getItemInHand().getDurability();
-	            		dif = (short) (durabilityBefore - durabilityAfter);
-	            		dif = (short) (dif * 7.6); //Boost XP for Gold to that of around Iron
-	            		if(m.isShovel(is))
-	        				dif = (short) (dif / 3);
-	        			if(m.isSwords(is))
-	        				dif = (short) (dif / 2);
-	        			if(m.isHoe(is))
-	        				dif = (short) (dif / 2);
-            			PP.addXP(SkillType.REPAIR, dif*10, player);
-            			
-            			//CLANG CLANG
-	        			if(LoadProperties.spoutEnabled)
-	        				SpoutStuff.playRepairNoise(player);
-            		} else {
-            			needMoreVespeneGas(is, player);
-            		}
-        		}
-        		
-        	} else {
-        		player.sendMessage(mcLocale.getString("Skills.FullDurability"));
-        	}
-        	//player.updateInventory();
-        	/*
-        	 * GIVE SKILL IF THERE IS ENOUGH XP
-        	 */
-        	Skills.XpCheckSkill(SkillType.REPAIR, player);
-        	}
-    }
-	public static int getArcaneForgingRank(PlayerProfile PP)
-	{
-		int rank = 0;
-		
-		if(PP.getSkillLevel(SkillType.REPAIR) >= 750)
-		{
-			rank = 4;
-		} else if (PP.getSkillLevel(SkillType.REPAIR) >= 500)
-		{
-			rank = 3;
-		} else if(PP.getSkillLevel(SkillType.REPAIR) >= 250)
-		{
-			rank = 2;
-		} else if (PP.getSkillLevel(SkillType.REPAIR) >= 100)
-		{
-			rank = 1;
-		}
-		return rank;
-	}
-	public static void addEnchants(ItemStack is, Enchantment[] enchants, int[] enchantsLvl, PlayerProfile PP, Player player)
-	{
-		if(is.getEnchantments().keySet().size() == 0)
-			return;
-		
-		int pos = 0;
-		int rank = getArcaneForgingRank(PP);
-		
-		if(rank == 0)
-		{
-			player.sendMessage(mcLocale.getString("Repair.LostEnchants"));
-			for(Enchantment x : enchants)
-			{
-				is.removeEnchantment(x);
-			}
-			return;
-		}
-		
-		boolean failure = false, downgrade = false;
-
-		for(Enchantment x : enchants)
-		{
-			//Remove enchant
-			is.removeEnchantment(x);
-			
-			if(x.canEnchantItem(is))
-			{
-				if(Math.random() * 100 <= getEnchantChance(rank))
-				{
-					if(enchantsLvl[pos] > 1)
-					{
-						if(Math.random() * 100 <= getDowngradeChance(rank))
-						{
-							is.addEnchantment(x, enchantsLvl[pos]-1);
-							downgrade = true;
-						} else
-						{
-							is.addEnchantment(x, enchantsLvl[pos]);
-						}
-					}
-					else {
-						is.addEnchantment(x, enchantsLvl[pos]);
-					}
-				} else {
-					failure = true;	
-				}
-			}
-			pos++;
-		}
-		
-		if(failure == false && downgrade == false)
-		{
-			player.sendMessage(mcLocale.getString("Repair.ArcanePerfect"));
-		} else {
-			if(failure == true)
-				player.sendMessage(mcLocale.getString("Repair.ArcaneFailed"));
-			if(downgrade == true)
-				player.sendMessage(mcLocale.getString("Repair.Downgraded"));
-		}
-	}
-	public static int getEnchantChance(int rank)
-	{
-		switch(rank)
-		{
-		case 4:
-			return 40;
-		case 3:
-			return 30;
-		case 2:
-			return 20;
-		case 1:
-			return 10;
-		default:
-			return 0;
-		}
-	}
-	public static int getDowngradeChance(int rank)
-	{
-		switch(rank)
-		{
-		case 4:
-			return 15;
-		case 3:
-			return 25;
-		case 2:
-			return 50;
-		case 1:
-			return 75;
-		default:
-			return 100;
-		}
-	}
-	public static boolean isArmor(ItemStack is){
-    	return is.getTypeId() == 306 || is.getTypeId() == 307 ||is.getTypeId() == 308 ||is.getTypeId() == 309 ||
-    			is.getTypeId() == 310 ||is.getTypeId() == 311 ||is.getTypeId() == 312 ||is.getTypeId() == 313 ||
-    			is.getTypeId() == 314 || is.getTypeId() == 315 || is.getTypeId() == 316 || is.getTypeId() == 317;
-    }
-	public static boolean isGoldArmor(ItemStack is){
-		return is.getTypeId() == 314 || is.getTypeId() == 315 || is.getTypeId() == 316 || is.getTypeId() == 317;
-	}
-    public static boolean isIronArmor(ItemStack is){
-    	return is.getTypeId() == 306 || is.getTypeId() == 307 || is.getTypeId() == 308 || is.getTypeId() == 309;
-    }
-    public static boolean isDiamondArmor(ItemStack is){
-    	return is.getTypeId() == 310 || is.getTypeId() == 311 || is.getTypeId() == 312 || is.getTypeId() == 313;
-    }
-    public static boolean isTools(ItemStack is)
-    {
-    	return is.getTypeId() == 359 || is.getTypeId() == 256 || is.getTypeId() == 257 || is.getTypeId() == 258 || is.getTypeId() == 267 || is.getTypeId() == 292 || //IRON
-    			is.getTypeId() == 276 || is.getTypeId() == 277 || is.getTypeId() == 278 || is.getTypeId() == 279 || is.getTypeId() == 293 || //DIAMOND
-    			is.getTypeId() == 283 || is.getTypeId() == 285 || is.getTypeId() == 286 || is.getTypeId() == 284 || //GOLD
-    			is.getTypeId() == 268 || is.getTypeId() == 269 || is.getTypeId() == 270 || is.getTypeId() == 271 || is.getTypeId() == 290 ||//WOOD
-    			is.getTypeId() == 272 || is.getTypeId() == 273 || is.getTypeId() == 274 || is.getTypeId() == 275|| is.getTypeId() == 291;  //STONE
-    }
-    public static boolean isStoneTools(ItemStack is){
-    	return is.getTypeId() == 272 || is.getTypeId() == 273 || is.getTypeId() == 274 || is.getTypeId() == 275 || is.getTypeId() == 291;
-    }
-    public static boolean isWoodTools(ItemStack is){
-    	return is.getTypeId() == 268 || is.getTypeId() == 269 || is.getTypeId() == 270 || is.getTypeId() == 271 || is.getTypeId() == 290;
-    }
-    public static boolean isGoldTools(ItemStack is){
-    	return is.getTypeId() == 283 || is.getTypeId() == 285 || is.getTypeId() == 286 || is.getTypeId() == 284 || is.getTypeId() == 294;
-    }
-    public static boolean isIronTools(ItemStack is){
-    	return is.getTypeId() == 359 || is.getTypeId() == 256 || is.getTypeId() == 257 || is.getTypeId() == 258 || is.getTypeId() == 267 || is.getTypeId() == 292;
-    }
-    
-    public static boolean isDiamondTools(ItemStack is){
-    	if(is.getTypeId() == 276 || is.getTypeId() == 277 || is.getTypeId() == 278 || is.getTypeId() == 279 || is.getTypeId() == 293)
-    	{
-    		return true;
-    	} else {
-    		return false;
-    	}
-    }
-    public static void removeItem(Player player, int typeid)
-    {
-    	ItemStack[] inventory = player.getInventory().getContents();
-    	for(ItemStack x : inventory){
-    		if(x != null && x.getTypeId() == typeid){
-    			if(x.getAmount() == 1){
-    				x.setTypeId(0);
-    				x.setAmount(0);
-    				player.getInventory().setContents(inventory);
-    			} else{
-    			x.setAmount(x.getAmount() - 1);
-    			player.getInventory().setContents(inventory);
-    			}
-    			return;
-    		}
-    	}
-    }
-    public static boolean hasItem(Player player, int typeid){
-    	ItemStack[] inventory = player.getInventory().getContents();
-    	for(ItemStack x : inventory){
-    		if(x != null && x.getTypeId() == typeid){
-    			return true;
-    		}
-    	}
-    	return false;
-    }
-    public static short repairCalculate(Player player, short durability, short ramt){
-    	PlayerProfile PP = Users.getProfile(player);
-    	float bonus = (PP.getSkillLevel(SkillType.REPAIR) / 500);
-    	bonus = (ramt * bonus);
-    	ramt = ramt+=bonus;
-    	if(checkPlayerProcRepair(player)){
-    		ramt = (short) (ramt * 2);
-    	}
-        //player.sendMessage(ChatColor.DARK_RED + "test " +ChatColor.BLUE+ );
-    	durability-=ramt;
-       // player.sendMessage(ChatColor.DARK_RED + "durability " +ChatColor.BLUE+ durability);
-    	if(durability < 0){
-    		durability = 0;
-    	}
-    	return durability;
-    }
-    public static short getRepairAmount(ItemStack is, Player player){
-    	short durability = is.getDurability();
-    	short ramt = 0;
-    	switch(is.getTypeId())
-		{
-    	/*
-    	 * TOOLS
-    	 */
-    	//SHEARS
-    	case 359:
-    		ramt = 119;
-    		break;
-    	//WOOD SWORD
-		case 268:
-    		ramt = 30;
-    		break;
-    	//WOOD SHOVEL
-		case 269:
-    		ramt = 60;
-    		break;
-    	//WOOD PICKAXE
-		case 270:
-    		ramt = 20;
-    		break;
-    	//WOOD AXE
-		case 271:
-    		ramt = 20;
-    		break;
-    	//WOOD HOE
-		case 290:
-			ramt = 30;
-			break;
-    	//STONE SWORD
-		case 272:
-    		ramt = 66;
-    		break;
-    	//STONE SHOVEL
-		case 273:
-    		ramt = 132;
-    		break;
-    	//STONE PICKAXE
-		case 274:
-    		ramt = 44;
-    		break;
-    	//STONE AXE
-		case 275:
-    		ramt = 44;
-    		break;
-		//STONE HOE
-		case 291:
-			ramt = 66;
-			break;
-    	//GOLD SHOVEL
-    	case 284:
-    		ramt = 33;
-    		break;
-    	//IRON SHOVEL
-    	case 256:
-    		ramt = 251;
-    		break;
-    	//DIAMOND SHOVEL
-    	case 277:
-    		ramt = 1562;
-    		break;
-    	//IRON PICK
-    	case 257:
-    		ramt = 84;
-    		break;
-    	//IRON AXE
-    	case 258:
-    		ramt = 84;
-    		break;
-    	//IRON SWORD
-    	case 267:
-    		ramt = 126;
-    		break;
-    	//IRON HOE
-    	case 292:
-    		ramt = 126;
-    		break;
-    	//DIAMOND SWORD
-    	case 276:
-    		ramt = 781;
-    		break;
-    	//DIAMOND PICK
-    	case 278:
-    		ramt = 521;
-    		break;
-    	//DIAMOND AXE
-    	case 279:
-    		ramt = 521;
-    		break;
-    	//DIAMOND HOE
-    	case 293:
-    		ramt = 781;
-    		break;
-    	//GOLD SWORD
-    	case 283:
-    		ramt = 17;
-    		break;
-    	//GOLD PICK
-    	case 285:
-    		ramt = 11;
-    		break;
-    	//GOLD AXE
-    	case 286:
-    		ramt = 11;
-    		break;
-    	//GOLD HOE
-    	case 294:
-    		ramt = 17;
-    		break;
-    	/*
-    	 * ARMOR
-    	 */
-    	case 306:
-			ramt = 27;
-			break;
-		case 310:
-			ramt = 55;
-    		break;
-		case 307:
-			ramt = 24;
-    		break;
-		case 311:
-			ramt = 48;
-    		break;
-		case 308:
-			ramt = 27;
-    		break;
-		case 312:
-			ramt = 53;
-    		break;
-		case 309:
-			ramt = 40;
-    		break;
-		case 313:
-			ramt = 80;
-    		break;
-		case 314:
-    		ramt = 13;
-    		break;
-		case 315:
-    		ramt = 12;
-    		break;
-		case 316:
-    		ramt = 14;
-    		break;
-		case 317:
-    		ramt = 20;
-    		break;
-		}
-		return repairCalculate(player, durability, ramt);
-    }
-    public static void needMoreVespeneGas(ItemStack is, Player player)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-    	if ((isDiamondTools(is) || isDiamondArmor(is)) && PP.getSkillLevel(SkillType.REPAIR) < LoadProperties.repairdiamondlevel)
-    	{
-			player.sendMessage(mcLocale.getString("Skills.AdeptDiamond"));
-		} else if (isDiamondTools(is) && !hasItem(player, rDiamond) || isIronTools(is) && !hasItem(player, rIron) || isGoldTools(is) && !hasItem(player, rGold)){
-			if(isDiamondTools(is) && !hasItem(player, rDiamond))
-				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
-			if(isIronTools(is) && !hasItem(player, rIron))
-				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
-			if(isGoldTools(is) && !hasItem(player, rGold))
-				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+nGold);
-			if(isWoodTools(is) && !hasItem(player,rWood))
-				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.DARK_GREEN+ nWood);
-			if(isStoneTools(is) && !hasItem(player, rStone))
-				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+nStone);
-		} else if (isDiamondArmor(is) && !hasItem(player, rDiamond)){
-			player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
-		} else if (isIronArmor(is) && !hasItem(player, rIron)){
-			player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
-		} else if (isGoldArmor(is) && !hasItem(player, rGold)){
-			player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+ nGold);
-		} else if (is.getAmount() > 1)
-			player.sendMessage(mcLocale.getString("Skills.StackedItems"));
-    }
-    public static boolean checkPlayerProcRepair(Player player)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-		if(player != null)
-		{
-			if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.REPAIR))
-			{
-				player.sendMessage(mcLocale.getString("Skills.FeltEasy"));
-				return true;
-			}
-		}
-		return false;
-    }
-    public static void repairItem(Player player, Enchantment[] enchants, int[] enchantsLevel)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-    	ItemStack is = player.getItemInHand();
-    	//Handle the enchantments
-    	addEnchants(player.getItemInHand(), enchants, enchantsLevel, PP, player);
-    	player.getItemInHand().setDurability(getRepairAmount(is, player));
-    }
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.ChatColor;
+import org.bukkit.block.Block;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+
+public class Repair {
+        
+       /*
+        * Repair requirements for each material
+        */
+        private static int rGold =  LoadProperties.rGold;
+        private static String nGold =  LoadProperties.nGold;        
+        private static int rStone =  LoadProperties.rStone;
+        private static String nStone =  LoadProperties.nStone;        
+        private static int rWood =  LoadProperties.rWood;
+        private static String nWood =  LoadProperties.nWood;        
+        private static int rDiamond =  LoadProperties.rDiamond;
+        private static String nDiamond =  LoadProperties.nDiamond;        
+        private static int rIron =  LoadProperties.rIron;
+        private static String nIron =  LoadProperties.nIron;
+        
+	
+	public static void repairCheck(Player player, ItemStack is, Block block){
+		PlayerProfile PP = Users.getProfile(player);
+		short durabilityBefore = player.getItemInHand().getDurability();
+		short durabilityAfter = 0;
+		short dif = 0;
+		
+		//Stuff for keeping enchants
+		Enchantment[] enchants = new Enchantment[is.getEnchantments().size()];
+		int[] enchantsLevel = new int[is.getEnchantments().size()];
+		
+		int pos = 0;
+		for(Enchantment x : is.getEnchantments().keySet())
+		{
+			enchants[pos] = x;
+			enchantsLevel[pos] = is.getEnchantmentLevel(x);
+			pos++;
+		}
+		
+    	if(block != null && mcPermissions.getInstance().repair(player))
+    	{
+        	if(player.getItemInHand().getDurability() > 0 && player.getItemInHand().getAmount() < 2){
+        		/*
+        		 * ARMOR
+        		 */
+        		if(isArmor(is)){
+        			/*
+        			 * DIAMOND ARMOR
+        			 */
+        			if(isDiamondArmor(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){
+        				removeItem(player, rDiamond);
+	        			repairItem(player, enchants, enchantsLevel);
+	        			
+	        			durabilityAfter = player.getItemInHand().getDurability();
+	        			dif = (short) (durabilityBefore - durabilityAfter);
+	        			dif = (short) (dif * 6); //Boost XP
+	        			PP.addXP(SkillType.REPAIR, dif*10, player);
+	        			
+	        			//CLANG CLANG
+	        			if(LoadProperties.spoutEnabled)
+	        				SpoutStuff.playRepairNoise(player);
+        			} 
+        			else if (isIronArmor(is) && hasItem(player, rIron)){
+        			/*
+        			 * IRON ARMOR
+        			 */
+        				removeItem(player, rIron);
+        				repairItem(player, enchants, enchantsLevel);
+	        			
+	            		durabilityAfter = player.getItemInHand().getDurability();
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		dif = (short) (dif * 2); //Boost XP
+	            		PP.addXP(SkillType.REPAIR, dif*10, player);
+	            		
+	            		//CLANG CLANG
+	        			if(LoadProperties.spoutEnabled)
+	        				SpoutStuff.playRepairNoise(player);
+	            	//GOLD ARMOR
+        			} else if (isGoldArmor(is) && hasItem(player, rGold)){
+        				removeItem(player, rGold);
+        				repairItem(player, enchants, enchantsLevel);
+        				
+        				durabilityAfter = player.getItemInHand().getDurability();
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		dif = (short) (dif * 4); //Boost XP of Gold to around Iron
+        				PP.addXP(SkillType.REPAIR, dif*10, player);
+        				
+        				//CLANG CLANG
+	        			if(LoadProperties.spoutEnabled)
+	        				SpoutStuff.playRepairNoise(player);
+        			} else {
+        				needMoreVespeneGas(is, player);
+        			}
+        		}
+        		/*
+        		 * TOOLS
+        		 */
+        		if(isTools(is)){
+        			if(isStoneTools(is) && hasItem(player, rStone)){
+        				removeItem(player, rStone);
+        				repairItem(player, enchants, enchantsLevel);
+        				
+            			durabilityAfter = player.getItemInHand().getDurability();
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		if(m.isShovel(is))
+	        				dif = (short) (dif / 3);
+	        			if(m.isSwords(is))
+	        				dif = (short) (dif / 2);
+	        			if(m.isHoe(is))
+	        				dif = (short) (dif / 2);
+	        			//STONE NERF
+	        			dif = (short) (dif / 2);
+	        			
+            			PP.addXP(SkillType.REPAIR, dif*10, player);
+        			} else if(isWoodTools(is) && hasItem(player,rWood)){
+        				removeItem(player,rWood);
+        				repairItem(player, enchants, enchantsLevel);
+	        			
+            			durabilityAfter = player.getItemInHand().getDurability();
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		if(m.isShovel(is))
+	        				dif = (short) (dif / 3);
+	        			if(m.isSwords(is))
+	        				dif = (short) (dif / 2);
+	        			if(m.isHoe(is))
+	        				dif = (short) (dif / 2);
+	        			//WOOD NERF
+	        			dif = (short) (dif / 2);
+	        			
+            			PP.addXP(SkillType.REPAIR, dif*10, player);
+        			} else if(isIronTools(is) && hasItem(player, rIron)){
+            			removeItem(player, rIron);
+            			repairItem(player, enchants, enchantsLevel);
+	        			
+            			durabilityAfter = (short) (player.getItemInHand().getDurability()-getRepairAmount(is, player));
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		if(m.isShovel(is))
+	        				dif = (short) (dif / 3);
+	        			if(m.isSwords(is))
+	        				dif = (short) (dif / 2);
+	        			if(m.isHoe(is))
+	        				dif = (short) (dif / 2);
+            			PP.addXP(SkillType.REPAIR, dif*10, player);
+            			
+            			//CLANG CLANG
+	        			if(LoadProperties.spoutEnabled)
+	        				SpoutStuff.playRepairNoise(player);
+            		} else if (isDiamondTools(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){
+            			removeItem(player, rDiamond);
+            			repairItem(player, enchants, enchantsLevel);
+            			
+            			durabilityAfter = player.getItemInHand().getDurability();
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		if(m.isShovel(is))
+	        				dif = (short) (dif / 3);
+	        			if(m.isSwords(is))
+	        				dif = (short) (dif / 2);
+	        			if(m.isHoe(is))
+	        				dif = (short) (dif / 2);
+            			PP.addXP(SkillType.REPAIR, dif*10, player);
+            			
+            			//CLANG CLANG
+	        			if(LoadProperties.spoutEnabled)
+	        				SpoutStuff.playRepairNoise(player);
+            		} else if(isGoldTools(is) && hasItem(player, rGold)){
+            			removeItem(player, rGold);
+            			repairItem(player, enchants, enchantsLevel);
+            			
+            			durabilityAfter = player.getItemInHand().getDurability();
+	            		dif = (short) (durabilityBefore - durabilityAfter);
+	            		dif = (short) (dif * 7.6); //Boost XP for Gold to that of around Iron
+	            		if(m.isShovel(is))
+	        				dif = (short) (dif / 3);
+	        			if(m.isSwords(is))
+	        				dif = (short) (dif / 2);
+	        			if(m.isHoe(is))
+	        				dif = (short) (dif / 2);
+            			PP.addXP(SkillType.REPAIR, dif*10, player);
+            			
+            			//CLANG CLANG
+	        			if(LoadProperties.spoutEnabled)
+	        				SpoutStuff.playRepairNoise(player);
+            		} else {
+            			needMoreVespeneGas(is, player);
+            		}
+        		}
+        		
+        	} else {
+        		player.sendMessage(mcLocale.getString("Skills.FullDurability"));
+        	}
+        	//player.updateInventory();
+        	/*
+        	 * GIVE SKILL IF THERE IS ENOUGH XP
+        	 */
+        	Skills.XpCheckSkill(SkillType.REPAIR, player);
+        	}
+    }
+	public static int getArcaneForgingRank(PlayerProfile PP)
+	{
+		int rank = 0;
+		
+		if(PP.getSkillLevel(SkillType.REPAIR) >= 750)
+		{
+			rank = 4;
+		} else if (PP.getSkillLevel(SkillType.REPAIR) >= 500)
+		{
+			rank = 3;
+		} else if(PP.getSkillLevel(SkillType.REPAIR) >= 250)
+		{
+			rank = 2;
+		} else if (PP.getSkillLevel(SkillType.REPAIR) >= 100)
+		{
+			rank = 1;
+		}
+		return rank;
+	}
+	public static void addEnchants(ItemStack is, Enchantment[] enchants, int[] enchantsLvl, PlayerProfile PP, Player player)
+	{
+		if(is.getEnchantments().keySet().size() == 0)
+			return;
+		
+		int pos = 0;
+		int rank = getArcaneForgingRank(PP);
+		
+		if(rank == 0)
+		{
+			player.sendMessage(mcLocale.getString("Repair.LostEnchants"));
+			for(Enchantment x : enchants)
+			{
+				is.removeEnchantment(x);
+			}
+			return;
+		}
+		
+		boolean failure = false, downgrade = false;
+
+		for(Enchantment x : enchants)
+		{
+			//Remove enchant
+			is.removeEnchantment(x);
+			
+			if(x.canEnchantItem(is))
+			{
+				if(Math.random() * 100 <= getEnchantChance(rank))
+				{
+					if(enchantsLvl[pos] > 1)
+					{
+						if(Math.random() * 100 <= getDowngradeChance(rank))
+						{
+							is.addEnchantment(x, enchantsLvl[pos]-1);
+							downgrade = true;
+						} else
+						{
+							is.addEnchantment(x, enchantsLvl[pos]);
+						}
+					}
+					else {
+						is.addEnchantment(x, enchantsLvl[pos]);
+					}
+				} else {
+					failure = true;	
+				}
+			}
+			pos++;
+		}
+		
+		if(failure == false && downgrade == false)
+		{
+			player.sendMessage(mcLocale.getString("Repair.ArcanePerfect"));
+		} else {
+			if(failure == true)
+				player.sendMessage(mcLocale.getString("Repair.ArcaneFailed"));
+			if(downgrade == true)
+				player.sendMessage(mcLocale.getString("Repair.Downgraded"));
+		}
+	}
+	public static int getEnchantChance(int rank)
+	{
+		switch(rank)
+		{
+		case 4:
+			return 40;
+		case 3:
+			return 30;
+		case 2:
+			return 20;
+		case 1:
+			return 10;
+		default:
+			return 0;
+		}
+	}
+	public static int getDowngradeChance(int rank)
+	{
+		switch(rank)
+		{
+		case 4:
+			return 15;
+		case 3:
+			return 25;
+		case 2:
+			return 50;
+		case 1:
+			return 75;
+		default:
+			return 100;
+		}
+	}
+	public static boolean isArmor(ItemStack is){
+    	return is.getTypeId() == 306 || is.getTypeId() == 307 ||is.getTypeId() == 308 ||is.getTypeId() == 309 ||
+    			is.getTypeId() == 310 ||is.getTypeId() == 311 ||is.getTypeId() == 312 ||is.getTypeId() == 313 ||
+    			is.getTypeId() == 314 || is.getTypeId() == 315 || is.getTypeId() == 316 || is.getTypeId() == 317;
+    }
+	public static boolean isGoldArmor(ItemStack is){
+		return is.getTypeId() == 314 || is.getTypeId() == 315 || is.getTypeId() == 316 || is.getTypeId() == 317;
+	}
+    public static boolean isIronArmor(ItemStack is){
+    	return is.getTypeId() == 306 || is.getTypeId() == 307 || is.getTypeId() == 308 || is.getTypeId() == 309;
+    }
+    public static boolean isDiamondArmor(ItemStack is){
+    	return is.getTypeId() == 310 || is.getTypeId() == 311 || is.getTypeId() == 312 || is.getTypeId() == 313;
+    }
+    public static boolean isTools(ItemStack is)
+    {
+    	return is.getTypeId() == 359 || is.getTypeId() == 256 || is.getTypeId() == 257 || is.getTypeId() == 258 || is.getTypeId() == 267 || is.getTypeId() == 292 || //IRON
+    			is.getTypeId() == 276 || is.getTypeId() == 277 || is.getTypeId() == 278 || is.getTypeId() == 279 || is.getTypeId() == 293 || //DIAMOND
+    			is.getTypeId() == 283 || is.getTypeId() == 285 || is.getTypeId() == 286 || is.getTypeId() == 284 || //GOLD
+    			is.getTypeId() == 268 || is.getTypeId() == 269 || is.getTypeId() == 270 || is.getTypeId() == 271 || is.getTypeId() == 290 ||//WOOD
+    			is.getTypeId() == 272 || is.getTypeId() == 273 || is.getTypeId() == 274 || is.getTypeId() == 275|| is.getTypeId() == 291;  //STONE
+    }
+    public static boolean isStoneTools(ItemStack is){
+    	return is.getTypeId() == 272 || is.getTypeId() == 273 || is.getTypeId() == 274 || is.getTypeId() == 275 || is.getTypeId() == 291;
+    }
+    public static boolean isWoodTools(ItemStack is){
+    	return is.getTypeId() == 268 || is.getTypeId() == 269 || is.getTypeId() == 270 || is.getTypeId() == 271 || is.getTypeId() == 290;
+    }
+    public static boolean isGoldTools(ItemStack is){
+    	return is.getTypeId() == 283 || is.getTypeId() == 285 || is.getTypeId() == 286 || is.getTypeId() == 284 || is.getTypeId() == 294;
+    }
+    public static boolean isIronTools(ItemStack is){
+    	return is.getTypeId() == 359 || is.getTypeId() == 256 || is.getTypeId() == 257 || is.getTypeId() == 258 || is.getTypeId() == 267 || is.getTypeId() == 292;
+    }
+    
+    public static boolean isDiamondTools(ItemStack is){
+    	if(is.getTypeId() == 276 || is.getTypeId() == 277 || is.getTypeId() == 278 || is.getTypeId() == 279 || is.getTypeId() == 293)
+    	{
+    		return true;
+    	} else {
+    		return false;
+    	}
+    }
+    public static void removeItem(Player player, int typeid)
+    {
+    	ItemStack[] inventory = player.getInventory().getContents();
+    	for(ItemStack x : inventory){
+    		if(x != null && x.getTypeId() == typeid){
+    			if(x.getAmount() == 1){
+    				x.setTypeId(0);
+    				x.setAmount(0);
+    				player.getInventory().setContents(inventory);
+    			} else{
+    			x.setAmount(x.getAmount() - 1);
+    			player.getInventory().setContents(inventory);
+    			}
+    			return;
+    		}
+    	}
+    }
+    public static boolean hasItem(Player player, int typeid){
+    	ItemStack[] inventory = player.getInventory().getContents();
+    	for(ItemStack x : inventory){
+    		if(x != null && x.getTypeId() == typeid){
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    public static short repairCalculate(Player player, short durability, short ramt){
+    	PlayerProfile PP = Users.getProfile(player);
+    	float bonus = (PP.getSkillLevel(SkillType.REPAIR) / 500);
+    	bonus = (ramt * bonus);
+    	ramt = ramt+=bonus;
+    	if(checkPlayerProcRepair(player)){
+    		ramt = (short) (ramt * 2);
+    	}
+        //player.sendMessage(ChatColor.DARK_RED + "test " +ChatColor.BLUE+ );
+    	durability-=ramt;
+       // player.sendMessage(ChatColor.DARK_RED + "durability " +ChatColor.BLUE+ durability);
+    	if(durability < 0){
+    		durability = 0;
+    	}
+    	return durability;
+    }
+    public static short getRepairAmount(ItemStack is, Player player){
+    	short durability = is.getDurability();
+    	short ramt = 0;
+    	switch(is.getTypeId())
+		{
+    	/*
+    	 * TOOLS
+    	 */
+    	//SHEARS
+    	case 359:
+    		ramt = 119;
+    		break;
+    	//WOOD SWORD
+		case 268:
+    		ramt = 30;
+    		break;
+    	//WOOD SHOVEL
+		case 269:
+    		ramt = 60;
+    		break;
+    	//WOOD PICKAXE
+		case 270:
+    		ramt = 20;
+    		break;
+    	//WOOD AXE
+		case 271:
+    		ramt = 20;
+    		break;
+    	//WOOD HOE
+		case 290:
+			ramt = 30;
+			break;
+    	//STONE SWORD
+		case 272:
+    		ramt = 66;
+    		break;
+    	//STONE SHOVEL
+		case 273:
+    		ramt = 132;
+    		break;
+    	//STONE PICKAXE
+		case 274:
+    		ramt = 44;
+    		break;
+    	//STONE AXE
+		case 275:
+    		ramt = 44;
+    		break;
+		//STONE HOE
+		case 291:
+			ramt = 66;
+			break;
+    	//GOLD SHOVEL
+    	case 284:
+    		ramt = 33;
+    		break;
+    	//IRON SHOVEL
+    	case 256:
+    		ramt = 251;
+    		break;
+    	//DIAMOND SHOVEL
+    	case 277:
+    		ramt = 1562;
+    		break;
+    	//IRON PICK
+    	case 257:
+    		ramt = 84;
+    		break;
+    	//IRON AXE
+    	case 258:
+    		ramt = 84;
+    		break;
+    	//IRON SWORD
+    	case 267:
+    		ramt = 126;
+    		break;
+    	//IRON HOE
+    	case 292:
+    		ramt = 126;
+    		break;
+    	//DIAMOND SWORD
+    	case 276:
+    		ramt = 781;
+    		break;
+    	//DIAMOND PICK
+    	case 278:
+    		ramt = 521;
+    		break;
+    	//DIAMOND AXE
+    	case 279:
+    		ramt = 521;
+    		break;
+    	//DIAMOND HOE
+    	case 293:
+    		ramt = 781;
+    		break;
+    	//GOLD SWORD
+    	case 283:
+    		ramt = 17;
+    		break;
+    	//GOLD PICK
+    	case 285:
+    		ramt = 11;
+    		break;
+    	//GOLD AXE
+    	case 286:
+    		ramt = 11;
+    		break;
+    	//GOLD HOE
+    	case 294:
+    		ramt = 17;
+    		break;
+    	/*
+    	 * ARMOR
+    	 */
+    	case 306:
+			ramt = 27;
+			break;
+		case 310:
+			ramt = 55;
+    		break;
+		case 307:
+			ramt = 24;
+    		break;
+		case 311:
+			ramt = 48;
+    		break;
+		case 308:
+			ramt = 27;
+    		break;
+		case 312:
+			ramt = 53;
+    		break;
+		case 309:
+			ramt = 40;
+    		break;
+		case 313:
+			ramt = 80;
+    		break;
+		case 314:
+    		ramt = 13;
+    		break;
+		case 315:
+    		ramt = 12;
+    		break;
+		case 316:
+    		ramt = 14;
+    		break;
+		case 317:
+    		ramt = 20;
+    		break;
+		}
+		return repairCalculate(player, durability, ramt);
+    }
+    public static void needMoreVespeneGas(ItemStack is, Player player)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+    	if ((isDiamondTools(is) || isDiamondArmor(is)) && PP.getSkillLevel(SkillType.REPAIR) < LoadProperties.repairdiamondlevel)
+    	{
+			player.sendMessage(mcLocale.getString("Skills.AdeptDiamond"));
+		} else if (isDiamondTools(is) && !hasItem(player, rDiamond) || isIronTools(is) && !hasItem(player, rIron) || isGoldTools(is) && !hasItem(player, rGold)){
+			if(isDiamondTools(is) && !hasItem(player, rDiamond))
+				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
+			if(isIronTools(is) && !hasItem(player, rIron))
+				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
+			if(isGoldTools(is) && !hasItem(player, rGold))
+				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+nGold);
+			if(isWoodTools(is) && !hasItem(player,rWood))
+				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.DARK_GREEN+ nWood);
+			if(isStoneTools(is) && !hasItem(player, rStone))
+				player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+nStone);
+		} else if (isDiamondArmor(is) && !hasItem(player, rDiamond)){
+			player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.BLUE+ nDiamond);
+		} else if (isIronArmor(is) && !hasItem(player, rIron)){
+			player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GRAY+ nIron);
+		} else if (isGoldArmor(is) && !hasItem(player, rGold)){
+			player.sendMessage(mcLocale.getString("Skills.NeedMore")+" "+ChatColor.GOLD+ nGold);
+		} else if (is.getAmount() > 1)
+			player.sendMessage(mcLocale.getString("Skills.StackedItems"));
+    }
+    public static boolean checkPlayerProcRepair(Player player)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+		if(player != null)
+		{
+			if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.REPAIR))
+			{
+				player.sendMessage(mcLocale.getString("Skills.FeltEasy"));
+				return true;
+			}
+		}
+		return false;
+    }
+    public static void repairItem(Player player, Enchantment[] enchants, int[] enchantsLevel)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+    	ItemStack is = player.getItemInHand();
+    	//Handle the enchantments
+    	addEnchants(player.getItemInHand(), enchants, enchantsLevel, PP, player);
+    	player.getItemInHand().setDurability(getRepairAmount(is, player));
+    }
 }

+ 437 - 437
src/com/gmail/nossr50/skills/Skills.java → src/main/java/com/gmail/nossr50/skills/Skills.java

@@ -1,437 +1,437 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import java.util.logging.Logger;
-
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.getspout.spoutapi.SpoutManager;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Leaderboard;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.PlayerStat;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-
-public class Skills 
-{
-	protected static final Logger log = Logger.getLogger("Minecraft");
-	
-	public void updateSQLfromFile(Player player){
-		
-	}
-	public static boolean cooldownOver(Player player, long oldTime, int cooldown){
-		long currentTime = System.currentTimeMillis();
-		if(currentTime - oldTime >= (cooldown * 1000)){
-			return true;
-		} else {
-			return false;
-		}
-	}
-    public boolean hasArrows(Player player){
-    	for(ItemStack x : player.getInventory().getContents()){
-    		if (x.getTypeId() == 262){
-    			return true;
-    		}
-    	}
-    	return false;
-    }
-    public void addArrows(Player player){
-    	for(ItemStack x : player.getInventory().getContents()){
-    		if (x.getTypeId() == 262){
-    			x.setAmount(x.getAmount() + 1);
-    			return;
-    		}
-    	}
-    }
-    
-    public static int calculateTimeLeft(Player player, long deactivatedTimeStamp, int cooldown)
-    {	
-    	return (int) (((deactivatedTimeStamp + (cooldown * 1000)) - System.currentTimeMillis())/1000);
-    }
-    
-    public static void watchCooldowns(Player player){
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(!PP.getGreenTerraInformed() && System.currentTimeMillis() - (PP.getGreenTerraDeactivatedTimeStamp()*1000) >= (LoadProperties.greenTerraCooldown * 1000)){
-			PP.setGreenTerraInformed(true);
-    		player.sendMessage(mcLocale.getString("Skills.YourGreenTerra"));
-    	}
-    	if(!PP.getTreeFellerInformed() && System.currentTimeMillis() - (PP.getTreeFellerDeactivatedTimeStamp()*1000) >= (LoadProperties.greenTerraCooldown * 1000)){
-			PP.setTreeFellerInformed(true);
-			player.sendMessage(mcLocale.getString("Skills.YourTreeFeller"));
-    	}
-    	if(!PP.getSuperBreakerInformed() && System.currentTimeMillis() - (PP.getSuperBreakerDeactivatedTimeStamp()*1000) >= (LoadProperties.superBreakerCooldown * 1000)){
-			PP.setSuperBreakerInformed(true);
-			player.sendMessage(mcLocale.getString("Skills.YourSuperBreaker"));
-    	}
-    	if(!PP.getSerratedStrikesInformed() && System.currentTimeMillis() - (PP.getSerratedStrikesDeactivatedTimeStamp()*1000) >= (LoadProperties.serratedStrikeCooldown * 1000)){
-			PP.setSerratedStrikesInformed(true);
-			player.sendMessage(mcLocale.getString("Skills.YourSerratedStrikes"));
-    	}
-    	if(!PP.getBerserkInformed() && System.currentTimeMillis() - (PP.getBerserkDeactivatedTimeStamp()*1000) >= (LoadProperties.berserkCooldown * 1000)){
-			PP.setBerserkInformed(true);
-			player.sendMessage(mcLocale.getString("Skills.YourBerserk"));
-    	}
-    	if(!PP.getSkullSplitterInformed() && System.currentTimeMillis() - (PP.getSkullSplitterDeactivatedTimeStamp()*1000) >= (LoadProperties.skullSplitterCooldown * 1000)){
-			PP.setSkullSplitterInformed(true);
-			player.sendMessage(mcLocale.getString("Skills.YourSkullSplitter"));
-    	}
-    	if(!PP.getGigaDrillBreakerInformed() && System.currentTimeMillis() - (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000) >= (LoadProperties.gigaDrillBreakerCooldown * 1000)){
-			PP.setGigaDrillBreakerInformed(true);
-			player.sendMessage(mcLocale.getString("Skills.YourGigaDrillBreaker"));
-    	}
-    }
-    public static void hoeReadinessCheck(Player player)
-    {
-    	if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking())
-			return;
-    	
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(mcPermissions.getInstance().herbalismAbility(player) && m.isHoe(player.getItemInHand()) && !PP.getHoePreparationMode()){
-    		if(!PP.getGreenTerraMode() && !cooldownOver(player, (PP.getGreenTerraDeactivatedTimeStamp()*1000), LoadProperties.greenTerraCooldown)){
-	    		player.sendMessage(mcLocale.getString("Skills.TooTired")
-	    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getGreenTerraDeactivatedTimeStamp()*1000), LoadProperties.greenTerraCooldown)+"s)");
-	    		return;
-	    	}
-    		if(LoadProperties.enableAbilityMessages)
-    			player.sendMessage(mcLocale.getString("Skills.ReadyHoe"));
-			PP.setHoePreparationATS(System.currentTimeMillis());
-			PP.setHoePreparationMode(true);
-    	}
-    }
-    public static void monitorSkills(Player player){
-		PlayerProfile PP = Users.getProfile(player);
-		if(PP != null) 
-		{
-			if(PP.getHoePreparationMode() && System.currentTimeMillis() - (PP.getHoePreparationATS()*1000) >= 4000){
-				PP.setHoePreparationMode(false);
-				player.sendMessage(mcLocale.getString("Skills.LowerHoe"));
-			}
-			if(PP.getAxePreparationMode() && System.currentTimeMillis() - (PP.getAxePreparationATS()*1000) >= 4000){
-				PP.setAxePreparationMode(false);
-				player.sendMessage(mcLocale.getString("Skills.LowerAxe"));
-			}
-			if(PP.getPickaxePreparationMode() && System.currentTimeMillis() - (PP.getPickaxePreparationATS()*1000) >= 4000){
-				PP.setPickaxePreparationMode(false);
-				player.sendMessage(mcLocale.getString("Skills.LowerPickAxe"));
-			}
-			if(PP.getSwordsPreparationMode() && System.currentTimeMillis() - (PP.getSwordsPreparationATS()*1000) >= 4000){
-				PP.setSwordsPreparationMode(false);
-				player.sendMessage(mcLocale.getString("Skills.LowerSword"));
-			}
-			if(PP.getFistsPreparationMode() && System.currentTimeMillis() - (PP.getFistsPreparationATS()*1000) >= 4000){
-				PP.setFistsPreparationMode(false);
-				player.sendMessage(mcLocale.getString("Skills.LowerFists"));
-			}
-			if(PP.getShovelPreparationMode() && System.currentTimeMillis() - (PP.getShovelPreparationATS()*1000) >= 4000){
-				PP.setShovelPreparationMode(false);
-				player.sendMessage(mcLocale.getString("Skills.LowerShovel"));
-			}
-			
-			/*
-			 * HERBALISM ABILITY
-			 */
-			if(mcPermissions.getInstance().herbalismAbility(player)){
-				if(PP.getGreenTerraMode() && (PP.getGreenTerraDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-					PP.setGreenTerraMode(false);
-					PP.setGreenTerraInformed(false);
-					player.sendMessage(mcLocale.getString("Skills.GreenTerraOff"));
-				}
-			}
-			/*
-			 * AXES ABILITY
-			 */
-			if(mcPermissions.getInstance().axesAbility(player)){
-				if(PP.getSkullSplitterMode() && (PP.getSkullSplitterDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-						PP.setSkullSplitterMode(false);
-						PP.setSkullSplitterInformed(false);
-						player.sendMessage(mcLocale.getString("Skills.SkullSplitterOff"));
-				}
-			}
-			/*
-			 * WOODCUTTING ABILITY
-			 */
-			if(mcPermissions.getInstance().woodCuttingAbility(player)){
-				if(PP.getTreeFellerMode() && (PP.getTreeFellerDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-						PP.setTreeFellerMode(false);
-						PP.setTreeFellerInformed(false);
-						player.sendMessage(mcLocale.getString("Skills.TreeFellerOff"));
-				}
-			}
-			/*
-			 * MINING ABILITY
-			 */
-			if(mcPermissions.getInstance().miningAbility(player)){
-				if(PP.getSuperBreakerMode() && (PP.getSuperBreakerDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-						PP.setSuperBreakerMode(false);
-						PP.setSuperBreakerInformed(false);
-						player.sendMessage(mcLocale.getString("Skills.SuperBreakerOff"));
-				}
-			}
-			/*
-			 * EXCAVATION ABILITY
-			 */
-			if(mcPermissions.getInstance().excavationAbility(player)){
-				if(PP.getGigaDrillBreakerMode() && (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-						PP.setGigaDrillBreakerMode(false);
-						PP.setGigaDrillBreakerInformed(false);
-						player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOff"));
-				}
-			}
-			/*
-			 * SWORDS ABILITY
-			 */
-			if(mcPermissions.getInstance().swordsAbility(player)){
-				if(PP.getSerratedStrikesMode() && (PP.getSerratedStrikesDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-						PP.setSerratedStrikesMode(false);
-						PP.setSerratedStrikesInformed(false);
-						player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOff"));
-				}
-			}
-			/*
-			 * UNARMED ABILITY
-			 */
-			if(mcPermissions.getInstance().unarmedAbility(player)){
-				if(PP.getBerserkMode() && (PP.getBerserkDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
-						PP.setBerserkMode(false);
-						PP.setBerserkInformed(false);
-						player.sendMessage(mcLocale.getString("Skills.BerserkOff"));
-				}
-			}
-		}
-	}
-	public static void abilityActivationCheck(Player player)
-	{
-		if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking())
-			return;
-		
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(PP != null)
-    	{
-	    	if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode())
-	    		return;
-	    	if(mcPermissions.getInstance().miningAbility(player) && m.isMiningPick(player.getItemInHand()) && !PP.getPickaxePreparationMode())
-	    	{
-	    		if(!PP.getSuperBreakerMode() && !cooldownOver(player, (PP.getSuperBreakerDeactivatedTimeStamp()*1000), LoadProperties.superBreakerCooldown))
-	    		{
-		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
-		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSuperBreakerDeactivatedTimeStamp()*1000), LoadProperties.superBreakerCooldown)+"s)");
-		    		return;
-		    	}
-	    		if(LoadProperties.enableAbilityMessages)
-	    			player.sendMessage(mcLocale.getString("Skills.ReadyPickAxe"));
-				PP.setPickaxePreparationATS(System.currentTimeMillis());
-				PP.setPickaxePreparationMode(true);
-	    	}
-	    	if(mcPermissions.getInstance().excavationAbility(player) && m.isShovel(player.getItemInHand()) && !PP.getShovelPreparationMode())
-	    	{
-	    		if(!PP.getGigaDrillBreakerMode() && !cooldownOver(player, (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000), LoadProperties.gigaDrillBreakerCooldown))
-	    		{
-		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
-		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000), LoadProperties.gigaDrillBreakerCooldown)+"s)");
-		    		return;
-		    	}
-	    		if(LoadProperties.enableAbilityMessages)
-	    			player.sendMessage(mcLocale.getString("Skills.ReadyShovel"));
-				PP.setShovelPreparationATS(System.currentTimeMillis());
-				PP.setShovelPreparationMode(true);
-	    	}
-	    	if(mcPermissions.getInstance().swordsAbility(player) && m.isSwords(player.getItemInHand()) && !PP.getSwordsPreparationMode())
-	    	{
-	    		if(!PP.getSerratedStrikesMode() && !cooldownOver(player, (PP.getSerratedStrikesDeactivatedTimeStamp()*1000), LoadProperties.serratedStrikeCooldown))
-	    		{
-		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
-		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSerratedStrikesDeactivatedTimeStamp()*1000), LoadProperties.serratedStrikeCooldown)+"s)");
-		    		return;
-		    	}
-	    		if(LoadProperties.enableAbilityMessages)
-	    			player.sendMessage(mcLocale.getString("Skills.ReadySword"));
-				PP.setSwordsPreparationATS(System.currentTimeMillis());
-				PP.setSwordsPreparationMode(true);
-	    	}
-	    	if(mcPermissions.getInstance().unarmedAbility(player) && player.getItemInHand().getTypeId() == 0 && !PP.getFistsPreparationMode())
-	    	{
-		    	if(!PP.getBerserkMode() && !cooldownOver(player, (PP.getBerserkDeactivatedTimeStamp()*1000), LoadProperties.berserkCooldown))
-		    	{
-		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
-		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getBerserkDeactivatedTimeStamp()*1000), LoadProperties.berserkCooldown)+"s)");
-		    		return;
-		    	}
-		    	if(LoadProperties.enableAbilityMessages)
-		    		player.sendMessage(mcLocale.getString("Skills.ReadyFists"));
-				PP.setFistsPreparationATS(System.currentTimeMillis());
-				PP.setFistsPreparationMode(true);
-	    	}
-	    	if((mcPermissions.getInstance().axesAbility(player) || mcPermissions.getInstance().woodCuttingAbility(player)) && !PP.getAxePreparationMode())
-	    	{
-	    		if(m.isAxes(player.getItemInHand()))
-	    		{
-	    			if(LoadProperties.enableAbilityMessages)
-	    				player.sendMessage(mcLocale.getString("Skills.ReadyAxe"));
-	    			PP.setAxePreparationATS(System.currentTimeMillis());
-	    			PP.setAxePreparationMode(true);
-	    		}
-	    	}
-    	}
-    }
-	
-	public static void ProcessLeaderboardUpdate(SkillType skillType, Player player)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-		
-		PlayerStat ps = new PlayerStat();
-		if(skillType != SkillType.ALL)
-			ps.statVal = PP.getSkillLevel(skillType);
-		else
-			ps.statVal = m.getPowerLevel(player);
-		ps.name = player.getName();
-		Leaderboard.updateLeaderboard(ps, skillType);
-	}
-	
-	public static void XpCheckSkill(SkillType skillType, Player player)
-	{
-		PlayerProfile PP = Users.getProfile(player);
-		
-		if(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
-    	{
-			int skillups = 0;
-			
-			while(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
-			{
-				skillups++;
-				PP.removeXP(skillType, PP.getXpToLevel(skillType));
-				PP.skillUp(skillType, 1);
-			}
-			
-			if(!LoadProperties.useMySQL)
-			{
-				ProcessLeaderboardUpdate(skillType, player);
-				ProcessLeaderboardUpdate(SkillType.ALL, player);
-			}
-			
-			String capitalized = m.getCapitalized(skillType.toString());
-						
-			//Contrib stuff
-			
-			if(LoadProperties.spoutEnabled && player instanceof SpoutPlayer)
-			{
-				SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
-				if(sPlayer.isSpoutCraftEnabled())
-				{
-					SpoutStuff.levelUpNotification(skillType, sPlayer);
-				} else 
-				{
-					player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
-				}
-			}
-				else
-					player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
-		}
-		if(LoadProperties.xpbar && LoadProperties.spoutEnabled)
-		{
-			SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
-			if(sPlayer.isSpoutCraftEnabled())
-			{
-				SpoutStuff.updateXpBar(sPlayer);
-			}
-		}
-	}
-	
-	public static void XpCheckAll(Player player)
-	{
-		for(SkillType x : SkillType.values())
-		{
-			//Don't want to do anything with this one
-			if(x == SkillType.ALL)
-				continue;
-			
-			XpCheckSkill(x, player);
-		}
-	}
-    public static SkillType getSkillType(String skillName)
-    {
-    	for(SkillType x : SkillType.values())
-    	{
-    		if(x.toString().equals(skillName.toUpperCase()))
-    			return x;
-    	}
-    	return null;
-    }
-    public static boolean isSkill(String skillname){
-    	skillname = skillname.toUpperCase();
-    	for(SkillType x : SkillType.values())
-    	{
-    		if(x.toString().equals(skillname))
-    			return true;
-    	}
-    	return false;
-    }
-    public static void arrowRetrievalCheck(Entity entity, mcMMO plugin)
-    {
-    	if(plugin.misc.arrowTracker.containsKey(entity))
-    	{
-    		Integer x = 0;
-    		while(x < plugin.misc.arrowTracker.get(entity))
-    		{
-	    		m.mcDropItem(entity.getLocation(), 262);
-	    		x++;
-    		}
-    	}
-    	plugin.misc.arrowTracker.remove(entity);
-    }
-    public static String getSkillStats(String skillname, Integer level, Integer XP, Integer XPToLevel)
-    {
-    	ChatColor parColor = ChatColor.DARK_AQUA;
-    	ChatColor xpColor = ChatColor.GRAY;
-    	ChatColor LvlColor = ChatColor.GREEN;
-    	ChatColor skillColor = ChatColor.YELLOW;
-    	
-		return skillColor+skillname+LvlColor+level+parColor+" XP"+"("+xpColor+XP+parColor+"/"+xpColor+XPToLevel+parColor+")";
-    }
-    public static boolean hasCombatSkills(Player player)
-    {
-    	if(mcPermissions.getInstance().axes(player) || mcPermissions.getInstance().archery(player) || mcPermissions.getInstance().swords(player) || mcPermissions.getInstance().taming(player) || mcPermissions.getInstance().unarmed(player))
-    		return true;
-    	else
-    		return false;
-    }
-    public static boolean hasGatheringSkills(Player player)
-    {
-    	if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player))
-    		return true;
-    	else
-    		return false;
-    }
-    public static boolean hasMiscSkills(Player player)
-    {
-    	if(mcPermissions.getInstance().acrobatics(player) || mcPermissions.getInstance().repair(player))
-    		return true;
-    	else
-    		return false;
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import java.util.logging.Logger;
+
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.getspout.spoutapi.SpoutManager;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Leaderboard;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.PlayerStat;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+
+public class Skills 
+{
+	protected static final Logger log = Logger.getLogger("Minecraft");
+	
+	public void updateSQLfromFile(Player player){
+		
+	}
+	public static boolean cooldownOver(Player player, long oldTime, int cooldown){
+		long currentTime = System.currentTimeMillis();
+		if(currentTime - oldTime >= (cooldown * 1000)){
+			return true;
+		} else {
+			return false;
+		}
+	}
+    public boolean hasArrows(Player player){
+    	for(ItemStack x : player.getInventory().getContents()){
+    		if (x.getTypeId() == 262){
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    public void addArrows(Player player){
+    	for(ItemStack x : player.getInventory().getContents()){
+    		if (x.getTypeId() == 262){
+    			x.setAmount(x.getAmount() + 1);
+    			return;
+    		}
+    	}
+    }
+    
+    public static int calculateTimeLeft(Player player, long deactivatedTimeStamp, int cooldown)
+    {	
+    	return (int) (((deactivatedTimeStamp + (cooldown * 1000)) - System.currentTimeMillis())/1000);
+    }
+    
+    public static void watchCooldowns(Player player){
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(!PP.getGreenTerraInformed() && System.currentTimeMillis() - (PP.getGreenTerraDeactivatedTimeStamp()*1000) >= (LoadProperties.greenTerraCooldown * 1000)){
+			PP.setGreenTerraInformed(true);
+    		player.sendMessage(mcLocale.getString("Skills.YourGreenTerra"));
+    	}
+    	if(!PP.getTreeFellerInformed() && System.currentTimeMillis() - (PP.getTreeFellerDeactivatedTimeStamp()*1000) >= (LoadProperties.greenTerraCooldown * 1000)){
+			PP.setTreeFellerInformed(true);
+			player.sendMessage(mcLocale.getString("Skills.YourTreeFeller"));
+    	}
+    	if(!PP.getSuperBreakerInformed() && System.currentTimeMillis() - (PP.getSuperBreakerDeactivatedTimeStamp()*1000) >= (LoadProperties.superBreakerCooldown * 1000)){
+			PP.setSuperBreakerInformed(true);
+			player.sendMessage(mcLocale.getString("Skills.YourSuperBreaker"));
+    	}
+    	if(!PP.getSerratedStrikesInformed() && System.currentTimeMillis() - (PP.getSerratedStrikesDeactivatedTimeStamp()*1000) >= (LoadProperties.serratedStrikeCooldown * 1000)){
+			PP.setSerratedStrikesInformed(true);
+			player.sendMessage(mcLocale.getString("Skills.YourSerratedStrikes"));
+    	}
+    	if(!PP.getBerserkInformed() && System.currentTimeMillis() - (PP.getBerserkDeactivatedTimeStamp()*1000) >= (LoadProperties.berserkCooldown * 1000)){
+			PP.setBerserkInformed(true);
+			player.sendMessage(mcLocale.getString("Skills.YourBerserk"));
+    	}
+    	if(!PP.getSkullSplitterInformed() && System.currentTimeMillis() - (PP.getSkullSplitterDeactivatedTimeStamp()*1000) >= (LoadProperties.skullSplitterCooldown * 1000)){
+			PP.setSkullSplitterInformed(true);
+			player.sendMessage(mcLocale.getString("Skills.YourSkullSplitter"));
+    	}
+    	if(!PP.getGigaDrillBreakerInformed() && System.currentTimeMillis() - (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000) >= (LoadProperties.gigaDrillBreakerCooldown * 1000)){
+			PP.setGigaDrillBreakerInformed(true);
+			player.sendMessage(mcLocale.getString("Skills.YourGigaDrillBreaker"));
+    	}
+    }
+    public static void hoeReadinessCheck(Player player)
+    {
+    	if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking())
+			return;
+    	
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(mcPermissions.getInstance().herbalismAbility(player) && m.isHoe(player.getItemInHand()) && !PP.getHoePreparationMode()){
+    		if(!PP.getGreenTerraMode() && !cooldownOver(player, (PP.getGreenTerraDeactivatedTimeStamp()*1000), LoadProperties.greenTerraCooldown)){
+	    		player.sendMessage(mcLocale.getString("Skills.TooTired")
+	    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getGreenTerraDeactivatedTimeStamp()*1000), LoadProperties.greenTerraCooldown)+"s)");
+	    		return;
+	    	}
+    		if(LoadProperties.enableAbilityMessages)
+    			player.sendMessage(mcLocale.getString("Skills.ReadyHoe"));
+			PP.setHoePreparationATS(System.currentTimeMillis());
+			PP.setHoePreparationMode(true);
+    	}
+    }
+    public static void monitorSkills(Player player){
+		PlayerProfile PP = Users.getProfile(player);
+		if(PP != null) 
+		{
+			if(PP.getHoePreparationMode() && System.currentTimeMillis() - (PP.getHoePreparationATS()*1000) >= 4000){
+				PP.setHoePreparationMode(false);
+				player.sendMessage(mcLocale.getString("Skills.LowerHoe"));
+			}
+			if(PP.getAxePreparationMode() && System.currentTimeMillis() - (PP.getAxePreparationATS()*1000) >= 4000){
+				PP.setAxePreparationMode(false);
+				player.sendMessage(mcLocale.getString("Skills.LowerAxe"));
+			}
+			if(PP.getPickaxePreparationMode() && System.currentTimeMillis() - (PP.getPickaxePreparationATS()*1000) >= 4000){
+				PP.setPickaxePreparationMode(false);
+				player.sendMessage(mcLocale.getString("Skills.LowerPickAxe"));
+			}
+			if(PP.getSwordsPreparationMode() && System.currentTimeMillis() - (PP.getSwordsPreparationATS()*1000) >= 4000){
+				PP.setSwordsPreparationMode(false);
+				player.sendMessage(mcLocale.getString("Skills.LowerSword"));
+			}
+			if(PP.getFistsPreparationMode() && System.currentTimeMillis() - (PP.getFistsPreparationATS()*1000) >= 4000){
+				PP.setFistsPreparationMode(false);
+				player.sendMessage(mcLocale.getString("Skills.LowerFists"));
+			}
+			if(PP.getShovelPreparationMode() && System.currentTimeMillis() - (PP.getShovelPreparationATS()*1000) >= 4000){
+				PP.setShovelPreparationMode(false);
+				player.sendMessage(mcLocale.getString("Skills.LowerShovel"));
+			}
+			
+			/*
+			 * HERBALISM ABILITY
+			 */
+			if(mcPermissions.getInstance().herbalismAbility(player)){
+				if(PP.getGreenTerraMode() && (PP.getGreenTerraDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+					PP.setGreenTerraMode(false);
+					PP.setGreenTerraInformed(false);
+					player.sendMessage(mcLocale.getString("Skills.GreenTerraOff"));
+				}
+			}
+			/*
+			 * AXES ABILITY
+			 */
+			if(mcPermissions.getInstance().axesAbility(player)){
+				if(PP.getSkullSplitterMode() && (PP.getSkullSplitterDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+						PP.setSkullSplitterMode(false);
+						PP.setSkullSplitterInformed(false);
+						player.sendMessage(mcLocale.getString("Skills.SkullSplitterOff"));
+				}
+			}
+			/*
+			 * WOODCUTTING ABILITY
+			 */
+			if(mcPermissions.getInstance().woodCuttingAbility(player)){
+				if(PP.getTreeFellerMode() && (PP.getTreeFellerDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+						PP.setTreeFellerMode(false);
+						PP.setTreeFellerInformed(false);
+						player.sendMessage(mcLocale.getString("Skills.TreeFellerOff"));
+				}
+			}
+			/*
+			 * MINING ABILITY
+			 */
+			if(mcPermissions.getInstance().miningAbility(player)){
+				if(PP.getSuperBreakerMode() && (PP.getSuperBreakerDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+						PP.setSuperBreakerMode(false);
+						PP.setSuperBreakerInformed(false);
+						player.sendMessage(mcLocale.getString("Skills.SuperBreakerOff"));
+				}
+			}
+			/*
+			 * EXCAVATION ABILITY
+			 */
+			if(mcPermissions.getInstance().excavationAbility(player)){
+				if(PP.getGigaDrillBreakerMode() && (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+						PP.setGigaDrillBreakerMode(false);
+						PP.setGigaDrillBreakerInformed(false);
+						player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOff"));
+				}
+			}
+			/*
+			 * SWORDS ABILITY
+			 */
+			if(mcPermissions.getInstance().swordsAbility(player)){
+				if(PP.getSerratedStrikesMode() && (PP.getSerratedStrikesDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+						PP.setSerratedStrikesMode(false);
+						PP.setSerratedStrikesInformed(false);
+						player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOff"));
+				}
+			}
+			/*
+			 * UNARMED ABILITY
+			 */
+			if(mcPermissions.getInstance().unarmedAbility(player)){
+				if(PP.getBerserkMode() && (PP.getBerserkDeactivatedTimeStamp()*1000) <= System.currentTimeMillis()){
+						PP.setBerserkMode(false);
+						PP.setBerserkInformed(false);
+						player.sendMessage(mcLocale.getString("Skills.BerserkOff"));
+				}
+			}
+		}
+	}
+	public static void abilityActivationCheck(Player player)
+	{
+		if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking())
+			return;
+		
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(PP != null)
+    	{
+	    	if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode())
+	    		return;
+	    	if(mcPermissions.getInstance().miningAbility(player) && m.isMiningPick(player.getItemInHand()) && !PP.getPickaxePreparationMode())
+	    	{
+	    		if(!PP.getSuperBreakerMode() && !cooldownOver(player, (PP.getSuperBreakerDeactivatedTimeStamp()*1000), LoadProperties.superBreakerCooldown))
+	    		{
+		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
+		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSuperBreakerDeactivatedTimeStamp()*1000), LoadProperties.superBreakerCooldown)+"s)");
+		    		return;
+		    	}
+	    		if(LoadProperties.enableAbilityMessages)
+	    			player.sendMessage(mcLocale.getString("Skills.ReadyPickAxe"));
+				PP.setPickaxePreparationATS(System.currentTimeMillis());
+				PP.setPickaxePreparationMode(true);
+	    	}
+	    	if(mcPermissions.getInstance().excavationAbility(player) && m.isShovel(player.getItemInHand()) && !PP.getShovelPreparationMode())
+	    	{
+	    		if(!PP.getGigaDrillBreakerMode() && !cooldownOver(player, (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000), LoadProperties.gigaDrillBreakerCooldown))
+	    		{
+		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
+		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getGigaDrillBreakerDeactivatedTimeStamp()*1000), LoadProperties.gigaDrillBreakerCooldown)+"s)");
+		    		return;
+		    	}
+	    		if(LoadProperties.enableAbilityMessages)
+	    			player.sendMessage(mcLocale.getString("Skills.ReadyShovel"));
+				PP.setShovelPreparationATS(System.currentTimeMillis());
+				PP.setShovelPreparationMode(true);
+	    	}
+	    	if(mcPermissions.getInstance().swordsAbility(player) && m.isSwords(player.getItemInHand()) && !PP.getSwordsPreparationMode())
+	    	{
+	    		if(!PP.getSerratedStrikesMode() && !cooldownOver(player, (PP.getSerratedStrikesDeactivatedTimeStamp()*1000), LoadProperties.serratedStrikeCooldown))
+	    		{
+		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
+		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSerratedStrikesDeactivatedTimeStamp()*1000), LoadProperties.serratedStrikeCooldown)+"s)");
+		    		return;
+		    	}
+	    		if(LoadProperties.enableAbilityMessages)
+	    			player.sendMessage(mcLocale.getString("Skills.ReadySword"));
+				PP.setSwordsPreparationATS(System.currentTimeMillis());
+				PP.setSwordsPreparationMode(true);
+	    	}
+	    	if(mcPermissions.getInstance().unarmedAbility(player) && player.getItemInHand().getTypeId() == 0 && !PP.getFistsPreparationMode())
+	    	{
+		    	if(!PP.getBerserkMode() && !cooldownOver(player, (PP.getBerserkDeactivatedTimeStamp()*1000), LoadProperties.berserkCooldown))
+		    	{
+		    		player.sendMessage(mcLocale.getString("Skills.TooTired")
+		    				+ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getBerserkDeactivatedTimeStamp()*1000), LoadProperties.berserkCooldown)+"s)");
+		    		return;
+		    	}
+		    	if(LoadProperties.enableAbilityMessages)
+		    		player.sendMessage(mcLocale.getString("Skills.ReadyFists"));
+				PP.setFistsPreparationATS(System.currentTimeMillis());
+				PP.setFistsPreparationMode(true);
+	    	}
+	    	if((mcPermissions.getInstance().axesAbility(player) || mcPermissions.getInstance().woodCuttingAbility(player)) && !PP.getAxePreparationMode())
+	    	{
+	    		if(m.isAxes(player.getItemInHand()))
+	    		{
+	    			if(LoadProperties.enableAbilityMessages)
+	    				player.sendMessage(mcLocale.getString("Skills.ReadyAxe"));
+	    			PP.setAxePreparationATS(System.currentTimeMillis());
+	    			PP.setAxePreparationMode(true);
+	    		}
+	    	}
+    	}
+    }
+	
+	public static void ProcessLeaderboardUpdate(SkillType skillType, Player player)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+		
+		PlayerStat ps = new PlayerStat();
+		if(skillType != SkillType.ALL)
+			ps.statVal = PP.getSkillLevel(skillType);
+		else
+			ps.statVal = m.getPowerLevel(player);
+		ps.name = player.getName();
+		Leaderboard.updateLeaderboard(ps, skillType);
+	}
+	
+	public static void XpCheckSkill(SkillType skillType, Player player)
+	{
+		PlayerProfile PP = Users.getProfile(player);
+		
+		if(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
+    	{
+			int skillups = 0;
+			
+			while(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType))
+			{
+				skillups++;
+				PP.removeXP(skillType, PP.getXpToLevel(skillType));
+				PP.skillUp(skillType, 1);
+			}
+			
+			if(!LoadProperties.useMySQL)
+			{
+				ProcessLeaderboardUpdate(skillType, player);
+				ProcessLeaderboardUpdate(SkillType.ALL, player);
+			}
+			
+			String capitalized = m.getCapitalized(skillType.toString());
+						
+			//Contrib stuff
+			
+			if(LoadProperties.spoutEnabled && player instanceof SpoutPlayer)
+			{
+				SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+				if(sPlayer.isSpoutCraftEnabled())
+				{
+					SpoutStuff.levelUpNotification(skillType, sPlayer);
+				} else 
+				{
+					player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
+				}
+			}
+				else
+					player.sendMessage(mcLocale.getString("Skills."+capitalized+"Up", new Object[] {String.valueOf(skillups), PP.getSkillLevel(skillType)}));
+		}
+		if(LoadProperties.xpbar && LoadProperties.spoutEnabled)
+		{
+			SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+			if(sPlayer.isSpoutCraftEnabled())
+			{
+				SpoutStuff.updateXpBar(sPlayer);
+			}
+		}
+	}
+	
+	public static void XpCheckAll(Player player)
+	{
+		for(SkillType x : SkillType.values())
+		{
+			//Don't want to do anything with this one
+			if(x == SkillType.ALL)
+				continue;
+			
+			XpCheckSkill(x, player);
+		}
+	}
+    public static SkillType getSkillType(String skillName)
+    {
+    	for(SkillType x : SkillType.values())
+    	{
+    		if(x.toString().equals(skillName.toUpperCase()))
+    			return x;
+    	}
+    	return null;
+    }
+    public static boolean isSkill(String skillname){
+    	skillname = skillname.toUpperCase();
+    	for(SkillType x : SkillType.values())
+    	{
+    		if(x.toString().equals(skillname))
+    			return true;
+    	}
+    	return false;
+    }
+    public static void arrowRetrievalCheck(Entity entity, mcMMO plugin)
+    {
+    	if(plugin.misc.arrowTracker.containsKey(entity))
+    	{
+    		Integer x = 0;
+    		while(x < plugin.misc.arrowTracker.get(entity))
+    		{
+	    		m.mcDropItem(entity.getLocation(), 262);
+	    		x++;
+    		}
+    	}
+    	plugin.misc.arrowTracker.remove(entity);
+    }
+    public static String getSkillStats(String skillname, Integer level, Integer XP, Integer XPToLevel)
+    {
+    	ChatColor parColor = ChatColor.DARK_AQUA;
+    	ChatColor xpColor = ChatColor.GRAY;
+    	ChatColor LvlColor = ChatColor.GREEN;
+    	ChatColor skillColor = ChatColor.YELLOW;
+    	
+		return skillColor+skillname+LvlColor+level+parColor+" XP"+"("+xpColor+XP+parColor+"/"+xpColor+XPToLevel+parColor+")";
+    }
+    public static boolean hasCombatSkills(Player player)
+    {
+    	if(mcPermissions.getInstance().axes(player) || mcPermissions.getInstance().archery(player) || mcPermissions.getInstance().swords(player) || mcPermissions.getInstance().taming(player) || mcPermissions.getInstance().unarmed(player))
+    		return true;
+    	else
+    		return false;
+    }
+    public static boolean hasGatheringSkills(Player player)
+    {
+    	if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player))
+    		return true;
+    	else
+    		return false;
+    }
+    public static boolean hasMiscSkills(Player player)
+    {
+    	if(mcPermissions.getInstance().acrobatics(player) || mcPermissions.getInstance().repair(player))
+    		return true;
+    	else
+    		return false;
+    }
+}

+ 252 - 252
src/com/gmail/nossr50/skills/Swords.java → src/main/java/com/gmail/nossr50/skills/Swords.java

@@ -1,252 +1,252 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Arrow;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Wolf;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import com.gmail.nossr50.Combat;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-
-public class Swords 
-{
-	public static void serratedStrikesActivationCheck(Player player){
-    	PlayerProfile PP = Users.getProfile(player);
-		if(m.isSwords(player.getItemInHand()))
-		{
-			if(PP.getSwordsPreparationMode())
-			{
-    			PP.setSwordsPreparationMode(false);
-    		}
-	    	int ticks = 2;
-	    	int x = PP.getSkillLevel(SkillType.SWORDS);
-    		while(x >= 50)
-    		{
-    			x-=50;
-    			ticks++;
-    		}
-    		
-	    	if(!PP.getSerratedStrikesMode() && PP.getSerratedStrikesDeactivatedTimeStamp() < System.currentTimeMillis())
-	    	{
-	    		player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn"));
-	    		for(Player y : player.getWorld().getPlayers())
-	    		{
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()}));
-	    		}
-	    		PP.setSerratedStrikesActivatedTimeStamp(System.currentTimeMillis());
-	    		PP.setSerratedStrikesDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-	    		PP.setSerratedStrikesMode(true);
-	    	}
-	    	
-	    }
-	}
-
-	public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
-	{
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	
-    	if(x instanceof Wolf)
-    	{
-    		Wolf wolf = (Wolf)x;
-    		if(Taming.getOwner(wolf, pluginx) != null)
-    		{
-	    		if(Taming.getOwner(wolf, pluginx) == attacker)
-	    			return;
-	    		if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
-	    			return;
-    		}
-    	}
-    	if(mcPermissions.getInstance().swords(attacker) && m.isSwords(attacker.getItemInHand())){
-			if(PPa.getSkillLevel(SkillType.SWORDS) >= 750)
-			{
-				if(Math.random() * 1000 >= 750)
-				{
-					if(!(x instanceof Player))
-						pluginx.misc.addToBleedQue(x);
-					if(x instanceof Player)
-					{
-						Player target = (Player)x;
-						Users.getProfile(target).addBleedTicks(3);
-					}
-					attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
-				}
-			} 
-			else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
-			{
-				if(!(x instanceof Player))
-					pluginx.misc.addToBleedQue(x);
-				if(x instanceof Player)
-				{
-					Player target = (Player)x;
-					Users.getProfile(target).addBleedTicks(2);
-				}
-				attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
-			}
-		}
-    }
-    public static void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, mcMMO pluginx)
-    {
-    	int targets = 0;
-    	
-    	if(event.getEntity() instanceof LivingEntity)
-    	{
-    		LivingEntity x = (LivingEntity) event.getEntity();
-	    	targets = m.getTier(attacker);
-	    	
-	    	for(Entity derp : x.getWorld().getEntities())
-	    	{
-	    		if(m.getDistance(x.getLocation(), derp.getLocation()) < 5)
-	    		{
-	    			
-	    			
-	    			//Make sure the Wolf is not friendly
-	    			if(derp instanceof Wolf)
-	    			{
-						Wolf hurrDurr = (Wolf)derp;
-						if(Taming.getOwner(hurrDurr, pluginx) == attacker)
-							continue;
-						if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
-							continue;
-					}
-	    			//Damage nearby LivingEntities
-	    			if(derp instanceof LivingEntity && targets >= 1)
-	    			{
-	    				if(derp instanceof Player)
-		    			{
-		    				Player target = (Player)derp;
-		    				
-		    				if(target.getName().equals(attacker.getName()))
-		    					continue;
-		    				
-		    				if(Users.getProfile(target).getGodMode())
-		    					continue;
-		    				
-		    				if(Party.getInstance().inSameParty(attacker, target))
-		    					continue;
-		    				if(targets >= 1 && derp.getWorld().getPVP())
-		    				{
-		    					target.damage(event.getDamage() / 4);
-		    					target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
-		        				Users.getProfile(target).addBleedTicks(5);
-		    					targets--;
-		    					continue;
-		    				}
-		    			} 
-	    				else
-		    			{
-		    				if(!pluginx.misc.bleedTracker.contains(derp))
-		    					pluginx.misc.addToBleedQue((LivingEntity)derp);
-		    				
-		    				LivingEntity target = (LivingEntity)derp;
-		    				target.damage(event.getDamage() / 4);
-		    				targets--;
-		    			}
-	    			}
-	    		}
-	    	}
-    	}
-    }
-    
-    public static void counterAttackChecks(EntityDamageByEntityEvent event)
-    {
-    	//Don't want to counter attack arrows
-    	
-    	if(event.getDamager() instanceof Arrow)
-    		return;
-    	
-	    if(event instanceof EntityDamageByEntityEvent)
-	    {
-	    	Entity f = ((EntityDamageByEntityEvent) event).getDamager();
-		   	if(event.getEntity() instanceof Player)
-		   	{
-		   		Player defender = (Player)event.getEntity();
-		   		PlayerProfile PPd = Users.getProfile(defender);
-		   		if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
-		   		{
-		    		if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
-		    		{
-		    			if(Math.random() * 2000 <= 600)
-		    			{
-			    			Combat.dealDamage(f, event.getDamage() / 2);
-		    				defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
-			    			if(f instanceof Player)
-		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
-		    			}
-		    		}
-		    		else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
-		    		{
-			    		Combat.dealDamage(f, event.getDamage() / 2);
-			    		defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
-		    			if(f instanceof Player)
-		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
-		    		}
-		   		}
-		    }
-    	}
-    }
-    public static void bleedSimulate(mcMMO plugin)
-    {
-    	//Add items from Que list to BleedTrack list
-    	
-    	for(LivingEntity x : plugin.misc.bleedQue)
-    	{
-    		plugin.misc.bleedTracker.add(x);
-    	}
-    	
-    	//Clear list
-    	plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
-    	plugin.misc.bleedQuePos = 0;
-    	
-    	//Cleanup any dead entities from the list
-    	for(LivingEntity x : plugin.misc.bleedRemovalQue)
-    	{
-    		plugin.misc.bleedTracker.remove(x);
-    	}
-    	
-    	//Clear bleed removal list
-    	plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
-    	plugin.misc.bleedRemovalQuePos = 0;
-    	
-    	//Bleed monsters/animals
-        for(LivingEntity x : plugin.misc.bleedTracker)
-        {
-        	if(x == null){continue;}
-        	
-        	if(x.getHealth() <= 0)
-        	{
-        		plugin.misc.addToBleedRemovalQue(x);
-        		continue;
-        	}
-        	else
-        	{
-        		x.damage(2);
-        	}
-        }
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Arrow;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Wolf;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import com.gmail.nossr50.Combat;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+
+public class Swords 
+{
+	public static void serratedStrikesActivationCheck(Player player){
+    	PlayerProfile PP = Users.getProfile(player);
+		if(m.isSwords(player.getItemInHand()))
+		{
+			if(PP.getSwordsPreparationMode())
+			{
+    			PP.setSwordsPreparationMode(false);
+    		}
+	    	int ticks = 2;
+	    	int x = PP.getSkillLevel(SkillType.SWORDS);
+    		while(x >= 50)
+    		{
+    			x-=50;
+    			ticks++;
+    		}
+    		
+	    	if(!PP.getSerratedStrikesMode() && PP.getSerratedStrikesDeactivatedTimeStamp() < System.currentTimeMillis())
+	    	{
+	    		player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn"));
+	    		for(Player y : player.getWorld().getPlayers())
+	    		{
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()}));
+	    		}
+	    		PP.setSerratedStrikesActivatedTimeStamp(System.currentTimeMillis());
+	    		PP.setSerratedStrikesDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+	    		PP.setSerratedStrikesMode(true);
+	    	}
+	    	
+	    }
+	}
+
+	public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
+	{
+    	PlayerProfile PPa = Users.getProfile(attacker);
+    	
+    	if(x instanceof Wolf)
+    	{
+    		Wolf wolf = (Wolf)x;
+    		if(Taming.getOwner(wolf, pluginx) != null)
+    		{
+	    		if(Taming.getOwner(wolf, pluginx) == attacker)
+	    			return;
+	    		if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
+	    			return;
+    		}
+    	}
+    	if(mcPermissions.getInstance().swords(attacker) && m.isSwords(attacker.getItemInHand())){
+			if(PPa.getSkillLevel(SkillType.SWORDS) >= 750)
+			{
+				if(Math.random() * 1000 >= 750)
+				{
+					if(!(x instanceof Player))
+						pluginx.misc.addToBleedQue(x);
+					if(x instanceof Player)
+					{
+						Player target = (Player)x;
+						Users.getProfile(target).addBleedTicks(3);
+					}
+					attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
+				}
+			} 
+			else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
+			{
+				if(!(x instanceof Player))
+					pluginx.misc.addToBleedQue(x);
+				if(x instanceof Player)
+				{
+					Player target = (Player)x;
+					Users.getProfile(target).addBleedTicks(2);
+				}
+				attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
+			}
+		}
+    }
+    public static void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, mcMMO pluginx)
+    {
+    	int targets = 0;
+    	
+    	if(event.getEntity() instanceof LivingEntity)
+    	{
+    		LivingEntity x = (LivingEntity) event.getEntity();
+	    	targets = m.getTier(attacker);
+	    	
+	    	for(Entity derp : x.getWorld().getEntities())
+	    	{
+	    		if(m.getDistance(x.getLocation(), derp.getLocation()) < 5)
+	    		{
+	    			
+	    			
+	    			//Make sure the Wolf is not friendly
+	    			if(derp instanceof Wolf)
+	    			{
+						Wolf hurrDurr = (Wolf)derp;
+						if(Taming.getOwner(hurrDurr, pluginx) == attacker)
+							continue;
+						if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
+							continue;
+					}
+	    			//Damage nearby LivingEntities
+	    			if(derp instanceof LivingEntity && targets >= 1)
+	    			{
+	    				if(derp instanceof Player)
+		    			{
+		    				Player target = (Player)derp;
+		    				
+		    				if(target.getName().equals(attacker.getName()))
+		    					continue;
+		    				
+		    				if(Users.getProfile(target).getGodMode())
+		    					continue;
+		    				
+		    				if(Party.getInstance().inSameParty(attacker, target))
+		    					continue;
+		    				if(targets >= 1 && derp.getWorld().getPVP())
+		    				{
+		    					target.damage(event.getDamage() / 4);
+		    					target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
+		        				Users.getProfile(target).addBleedTicks(5);
+		    					targets--;
+		    					continue;
+		    				}
+		    			} 
+	    				else
+		    			{
+		    				if(!pluginx.misc.bleedTracker.contains(derp))
+		    					pluginx.misc.addToBleedQue((LivingEntity)derp);
+		    				
+		    				LivingEntity target = (LivingEntity)derp;
+		    				target.damage(event.getDamage() / 4);
+		    				targets--;
+		    			}
+	    			}
+	    		}
+	    	}
+    	}
+    }
+    
+    public static void counterAttackChecks(EntityDamageByEntityEvent event)
+    {
+    	//Don't want to counter attack arrows
+    	
+    	if(event.getDamager() instanceof Arrow)
+    		return;
+    	
+	    if(event instanceof EntityDamageByEntityEvent)
+	    {
+	    	Entity f = ((EntityDamageByEntityEvent) event).getDamager();
+		   	if(event.getEntity() instanceof Player)
+		   	{
+		   		Player defender = (Player)event.getEntity();
+		   		PlayerProfile PPd = Users.getProfile(defender);
+		   		if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
+		   		{
+		    		if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
+		    		{
+		    			if(Math.random() * 2000 <= 600)
+		    			{
+			    			Combat.dealDamage(f, event.getDamage() / 2);
+		    				defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
+			    			if(f instanceof Player)
+		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
+		    			}
+		    		}
+		    		else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
+		    		{
+			    		Combat.dealDamage(f, event.getDamage() / 2);
+			    		defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
+		    			if(f instanceof Player)
+		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
+		    		}
+		   		}
+		    }
+    	}
+    }
+    public static void bleedSimulate(mcMMO plugin)
+    {
+    	//Add items from Que list to BleedTrack list
+    	
+    	for(LivingEntity x : plugin.misc.bleedQue)
+    	{
+    		plugin.misc.bleedTracker.add(x);
+    	}
+    	
+    	//Clear list
+    	plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
+    	plugin.misc.bleedQuePos = 0;
+    	
+    	//Cleanup any dead entities from the list
+    	for(LivingEntity x : plugin.misc.bleedRemovalQue)
+    	{
+    		plugin.misc.bleedTracker.remove(x);
+    	}
+    	
+    	//Clear bleed removal list
+    	plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
+    	plugin.misc.bleedRemovalQuePos = 0;
+    	
+    	//Bleed monsters/animals
+        for(LivingEntity x : plugin.misc.bleedTracker)
+        {
+        	if(x == null){continue;}
+        	
+        	if(x.getHealth() <= 0)
+        	{
+        		plugin.misc.addToBleedRemovalQue(x);
+        		continue;
+        	}
+        	else
+        	{
+        		x.damage(2);
+        	}
+        }
+    }
+}

+ 70 - 70
src/com/gmail/nossr50/skills/Taming.java → src/main/java/com/gmail/nossr50/skills/Taming.java

@@ -1,70 +1,70 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.entity.AnimalTamer;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Wolf;
-import org.bukkit.plugin.Plugin;
-
-public class Taming 
-{
-	public static boolean ownerOnline(Wolf theWolf, Plugin pluginx)
-	{
-		for(Player x : pluginx.getServer().getOnlinePlayers())
-		{
-			if(x instanceof AnimalTamer)
-			{
-				AnimalTamer tamer = (AnimalTamer)x;
-				if(theWolf.getOwner() == tamer)
-					return true;
-			}
-		}
-		return false;
-	}
-	
-	public static Player getOwner(Entity wolf, Plugin pluginx)
-	{
-		if(wolf instanceof Wolf)
-		{
-			Wolf theWolf = (Wolf)wolf;
-			for(Player x : pluginx.getServer().getOnlinePlayers())
-			{
-				if(x instanceof AnimalTamer && x.isOnline())
-				{
-					AnimalTamer tamer = (AnimalTamer)x;
-					if(theWolf.getOwner() == tamer)
-						return x;
-				}
-			}
-			return null;
-		}
-		return null;
-	}
-	
-	public static String getOwnerName(Wolf theWolf)
-	{
-		Player owner = (Player)theWolf.getOwner();
-		if(owner != null)
-		{
-			return owner.getName();
-		}
-		else
-			return "Offline Master";
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.entity.AnimalTamer;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Wolf;
+import org.bukkit.plugin.Plugin;
+
+public class Taming 
+{
+	public static boolean ownerOnline(Wolf theWolf, Plugin pluginx)
+	{
+		for(Player x : pluginx.getServer().getOnlinePlayers())
+		{
+			if(x instanceof AnimalTamer)
+			{
+				AnimalTamer tamer = (AnimalTamer)x;
+				if(theWolf.getOwner() == tamer)
+					return true;
+			}
+		}
+		return false;
+	}
+	
+	public static Player getOwner(Entity wolf, Plugin pluginx)
+	{
+		if(wolf instanceof Wolf)
+		{
+			Wolf theWolf = (Wolf)wolf;
+			for(Player x : pluginx.getServer().getOnlinePlayers())
+			{
+				if(x instanceof AnimalTamer && x.isOnline())
+				{
+					AnimalTamer tamer = (AnimalTamer)x;
+					if(theWolf.getOwner() == tamer)
+						return x;
+				}
+			}
+			return null;
+		}
+		return null;
+	}
+	
+	public static String getOwnerName(Wolf theWolf)
+	{
+		Player owner = (Player)theWolf.getOwner();
+		if(owner != null)
+		{
+			return owner.getName();
+		}
+		else
+			return "Offline Master";
+	}
+}

+ 111 - 111
src/com/gmail/nossr50/skills/Unarmed.java → src/main/java/com/gmail/nossr50/skills/Unarmed.java

@@ -1,111 +1,111 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-
-public class Unarmed {
-	public static void berserkActivationCheck(Player player)
-	{
-    	PlayerProfile PP = Users.getProfile(player);
-		if(player.getItemInHand().getTypeId() == 0)
-		{
-			if(PP.getFistsPreparationMode())
-			{
-    			PP.setFistsPreparationMode(false);
-    		}
-	    	int ticks = 2;
-	    	int x = PP.getSkillLevel(SkillType.UNARMED);
-    		while(x >= 50){
-    			x-=50;
-    			ticks++;
-    		}
-    		
-	    	if(!PP.getBerserkMode() && Skills.cooldownOver(player, PP.getBerserkDeactivatedTimeStamp(), LoadProperties.berserkCooldown))
-	    	{
-	    		player.sendMessage(mcLocale.getString("Skills.BerserkOn"));
-	    		for(Player y : player.getWorld().getPlayers())
-	    		{
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.BerserkPlayer", new Object[] {player.getName()}));
-	    		}
-	    		PP.setBerserkActivatedTimeStamp(System.currentTimeMillis());
-	    		PP.setBerserkDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-	    		PP.setBerserkMode(true);
-	    	}
-	    }
-	}
-	public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
-	{
-		PlayerProfile PPa = Users.getProfile(attacker);
-		int bonus = 0;
-		if (PPa.getSkillLevel(SkillType.UNARMED) >= 250)
-			bonus+=2;
-		if (PPa.getSkillLevel(SkillType.UNARMED) >= 500)
-			bonus+=4;
-		event.setDamage(event.getDamage()+bonus);
-	}
-	public static void disarmProcCheck(Player attacker, Player defender)
-	{
-		PlayerProfile PP = Users.getProfile(attacker);
-		if(attacker.getItemInHand().getTypeId() == 0)
-		{
-			if(PP.getSkillLevel(SkillType.UNARMED) >= 1000)
-			{
-	    		if(Math.random() * 4000 <= 1000)
-	    		{
-	    			Location loc = defender.getLocation();
-	    			if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
-	    			{
-	    				defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
-	    				ItemStack item = defender.getItemInHand();
-		    			if(item != null)
-		    			{
-		    				loc.getWorld().dropItemNaturally(loc, item);
-		    				ItemStack itemx = null;
-		    				defender.setItemInHand(itemx);
-		    			}
-	    			}
-	    		}
-	    	} else {
-	    		if(Math.random() * 4000 <= PP.getSkillLevel(SkillType.UNARMED)){
-	    			Location loc = defender.getLocation();
-	    			if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
-	    			{
-	    				defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
-	    				ItemStack item = defender.getItemInHand();
-		    			if(item != null)
-		    			{
-		    				loc.getWorld().dropItemNaturally(loc, item);
-		    				ItemStack itemx = null;
-		    				defender.setItemInHand(itemx);
-	    				}
-	    			}
-	    		}
-	    	}
-		}
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+
+public class Unarmed {
+	public static void berserkActivationCheck(Player player)
+	{
+    	PlayerProfile PP = Users.getProfile(player);
+		if(player.getItemInHand().getTypeId() == 0)
+		{
+			if(PP.getFistsPreparationMode())
+			{
+    			PP.setFistsPreparationMode(false);
+    		}
+	    	int ticks = 2;
+	    	int x = PP.getSkillLevel(SkillType.UNARMED);
+    		while(x >= 50){
+    			x-=50;
+    			ticks++;
+    		}
+    		
+	    	if(!PP.getBerserkMode() && Skills.cooldownOver(player, PP.getBerserkDeactivatedTimeStamp(), LoadProperties.berserkCooldown))
+	    	{
+	    		player.sendMessage(mcLocale.getString("Skills.BerserkOn"));
+	    		for(Player y : player.getWorld().getPlayers())
+	    		{
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.BerserkPlayer", new Object[] {player.getName()}));
+	    		}
+	    		PP.setBerserkActivatedTimeStamp(System.currentTimeMillis());
+	    		PP.setBerserkDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+	    		PP.setBerserkMode(true);
+	    	}
+	    }
+	}
+	public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
+	{
+		PlayerProfile PPa = Users.getProfile(attacker);
+		int bonus = 0;
+		if (PPa.getSkillLevel(SkillType.UNARMED) >= 250)
+			bonus+=2;
+		if (PPa.getSkillLevel(SkillType.UNARMED) >= 500)
+			bonus+=4;
+		event.setDamage(event.getDamage()+bonus);
+	}
+	public static void disarmProcCheck(Player attacker, Player defender)
+	{
+		PlayerProfile PP = Users.getProfile(attacker);
+		if(attacker.getItemInHand().getTypeId() == 0)
+		{
+			if(PP.getSkillLevel(SkillType.UNARMED) >= 1000)
+			{
+	    		if(Math.random() * 4000 <= 1000)
+	    		{
+	    			Location loc = defender.getLocation();
+	    			if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
+	    			{
+	    				defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
+	    				ItemStack item = defender.getItemInHand();
+		    			if(item != null)
+		    			{
+		    				loc.getWorld().dropItemNaturally(loc, item);
+		    				ItemStack itemx = null;
+		    				defender.setItemInHand(itemx);
+		    			}
+	    			}
+	    		}
+	    	} else {
+	    		if(Math.random() * 4000 <= PP.getSkillLevel(SkillType.UNARMED)){
+	    			Location loc = defender.getLocation();
+	    			if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
+	    			{
+	    				defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
+	    				ItemStack item = defender.getItemInHand();
+		    			if(item != null)
+		    			{
+		    				loc.getWorld().dropItemNaturally(loc, item);
+		    				ItemStack itemx = null;
+		    				defender.setItemInHand(itemx);
+	    				}
+	    			}
+	    		}
+	    	}
+		}
+	}
+}

+ 169 - 169
src/com/gmail/nossr50/skills/WoodCutting.java → src/main/java/com/gmail/nossr50/skills/WoodCutting.java

@@ -1,169 +1,169 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.skills;
-
-import java.util.ArrayList;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.config.*;
-
-
-public class WoodCutting 
-{
-	static int w = 0;
-	private static boolean isdone = false;
-	
-    public static void woodCuttingProcCheck(Player player, Block block)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-    	byte type = block.getData();
-    	Material mat = Material.getMaterial(block.getTypeId());
-    	if(player != null)
-    	{
-    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.WOODCUTTING))
-    		{
-    			ItemStack item = new ItemStack(mat, 1, (short) 0, type);
-    			block.getWorld().dropItemNaturally(block.getLocation(), item);
-    		}
-    	}
-    }
-    public static void treeFellerCheck(Player player, Block block)
-    {
-    	PlayerProfile PP = Users.getProfile(player);
-    	if(m.isAxes(player.getItemInHand()))
-    	{
-    		if(block != null)
-    		{
-        		if(!m.abilityBlockCheck(block))
-        			return;
-        	}
-    		/*
-    		 * CHECK FOR AXE PREP MODE
-    		 */
-    		if(PP.getAxePreparationMode())
-    		{
-    			PP.setAxePreparationMode(false);
-    		}
-    		int ticks = 2;
-    		int x = PP.getSkillLevel(SkillType.WOODCUTTING);
-    		while(x >= 50)
-    		{
-    			x-=50;
-    			ticks++;
-    		}
-
-    		if(!PP.getTreeFellerMode() && Skills.cooldownOver(player, (PP.getTreeFellerDeactivatedTimeStamp()*1000), LoadProperties.treeFellerCooldown))
-    		{
-    			player.sendMessage(mcLocale.getString("Skills.TreeFellerOn"));
-    			for(Player y : player.getWorld().getPlayers())
-    			{
-	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
-	    				y.sendMessage(mcLocale.getString("Skills.TreeFellerPlayer", new Object[] {player.getName()}));
-	    		}
-    			PP.setTreeFellerActivatedTimeStamp(System.currentTimeMillis());
-    			PP.setTreeFellerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
-    			PP.setTreeFellerMode(true);
-    		}
-    		if(!PP.getTreeFellerMode() && !Skills.cooldownOver(player, (PP.getTreeFellerDeactivatedTimeStamp()*1000), LoadProperties.treeFellerCooldown)){
-    			player.sendMessage(ChatColor.RED+"You are too tired to use that ability again."
-    					+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getTreeFellerDeactivatedTimeStamp()*1000), LoadProperties.treeFellerCooldown)+"s)");
-    		}
-    	}
-    }
-    public static void treeFeller(Block block, Player player, mcMMO plugin){
-    	PlayerProfile PP = Users.getProfile(player);
-    	int radius = 1;
-    	if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 500)
-    		radius++;
-    	if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 950)
-    		radius++;
-        ArrayList<Block> blocklist = new ArrayList<Block>();
-        ArrayList<Block> toAdd = new ArrayList<Block>();
-        if(block != null)
-        	blocklist.add(block);
-        while(isdone == false){
-        	addBlocksToTreeFelling(blocklist, toAdd, radius);
-        }
-        //This needs to be a hashmap too!
-        isdone = false;
-        /*
-         * Add blocks from the temporary 'toAdd' array list into the 'treeFeller' array list
-         * We use this temporary list to prevent concurrent modification exceptions
-         */
-        for(Block x : toAdd)
-        {
-        	if(!plugin.misc.treeFeller.contains(x))
-        		plugin.misc.treeFeller.add(x);
-        }
-        toAdd.clear();
-    }
-    public static void addBlocksToTreeFelling(ArrayList<Block> blocklist, ArrayList<Block> toAdd, Integer radius)
-    {
-    	int u = 0;
-    	for (Block x : blocklist)
-    	{
-    		u++;
-    		if(toAdd.contains(x))
-    			continue;
-    		w = 0;
-    		Location loc = x.getLocation();
-    		int vx = x.getX();
-            int vy = x.getY();
-            int vz = x.getZ();
-            
-            /*
-             * Run through the blocks around the broken block to see if they qualify to be 'felled'
-             */
-    		for (int cx = -radius; cx <= radius; cx++) {
-	            for (int cy = -radius; cy <= radius; cy++) {
-	                for (int cz = -radius; cz <= radius; cz++) {
-	                    Block blocktarget = loc.getWorld().getBlockAt(vx + cx, vy + cy, vz + cz);
-	                    if (!blocklist.contains(blocktarget) && !toAdd.contains(blocktarget) && (blocktarget.getTypeId() == 17 || blocktarget.getTypeId() == 18)) { 
-	                        toAdd.add(blocktarget);
-	                        w++;
-	                    }
-	                }
-	            }
-	        }
-    	}
-    	/*
-		 * Add more blocks to blocklist so they can be 'felled'
-		 */
-		for(Block xx : toAdd)
-		{
-    		if(!blocklist.contains(xx))
-        	blocklist.add(xx);
-        }
-    	if(u >= blocklist.size())
-    	{
-    		isdone = true;
-    	} else {
-    		isdone = false;
-    	}
-    }
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.skills;
+
+import java.util.ArrayList;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.config.*;
+
+
+public class WoodCutting 
+{
+	static int w = 0;
+	private static boolean isdone = false;
+	
+    public static void woodCuttingProcCheck(Player player, Block block)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+    	byte type = block.getData();
+    	Material mat = Material.getMaterial(block.getTypeId());
+    	if(player != null)
+    	{
+    		if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.WOODCUTTING))
+    		{
+    			ItemStack item = new ItemStack(mat, 1, (short) 0, type);
+    			block.getWorld().dropItemNaturally(block.getLocation(), item);
+    		}
+    	}
+    }
+    public static void treeFellerCheck(Player player, Block block)
+    {
+    	PlayerProfile PP = Users.getProfile(player);
+    	if(m.isAxes(player.getItemInHand()))
+    	{
+    		if(block != null)
+    		{
+        		if(!m.abilityBlockCheck(block))
+        			return;
+        	}
+    		/*
+    		 * CHECK FOR AXE PREP MODE
+    		 */
+    		if(PP.getAxePreparationMode())
+    		{
+    			PP.setAxePreparationMode(false);
+    		}
+    		int ticks = 2;
+    		int x = PP.getSkillLevel(SkillType.WOODCUTTING);
+    		while(x >= 50)
+    		{
+    			x-=50;
+    			ticks++;
+    		}
+
+    		if(!PP.getTreeFellerMode() && Skills.cooldownOver(player, (PP.getTreeFellerDeactivatedTimeStamp()*1000), LoadProperties.treeFellerCooldown))
+    		{
+    			player.sendMessage(mcLocale.getString("Skills.TreeFellerOn"));
+    			for(Player y : player.getWorld().getPlayers())
+    			{
+	    			if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
+	    				y.sendMessage(mcLocale.getString("Skills.TreeFellerPlayer", new Object[] {player.getName()}));
+	    		}
+    			PP.setTreeFellerActivatedTimeStamp(System.currentTimeMillis());
+    			PP.setTreeFellerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
+    			PP.setTreeFellerMode(true);
+    		}
+    		if(!PP.getTreeFellerMode() && !Skills.cooldownOver(player, (PP.getTreeFellerDeactivatedTimeStamp()*1000), LoadProperties.treeFellerCooldown)){
+    			player.sendMessage(ChatColor.RED+"You are too tired to use that ability again."
+    					+ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getTreeFellerDeactivatedTimeStamp()*1000), LoadProperties.treeFellerCooldown)+"s)");
+    		}
+    	}
+    }
+    public static void treeFeller(Block block, Player player, mcMMO plugin){
+    	PlayerProfile PP = Users.getProfile(player);
+    	int radius = 1;
+    	if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 500)
+    		radius++;
+    	if(PP.getSkillLevel(SkillType.WOODCUTTING) >= 950)
+    		radius++;
+        ArrayList<Block> blocklist = new ArrayList<Block>();
+        ArrayList<Block> toAdd = new ArrayList<Block>();
+        if(block != null)
+        	blocklist.add(block);
+        while(isdone == false){
+        	addBlocksToTreeFelling(blocklist, toAdd, radius);
+        }
+        //This needs to be a hashmap too!
+        isdone = false;
+        /*
+         * Add blocks from the temporary 'toAdd' array list into the 'treeFeller' array list
+         * We use this temporary list to prevent concurrent modification exceptions
+         */
+        for(Block x : toAdd)
+        {
+        	if(!plugin.misc.treeFeller.contains(x))
+        		plugin.misc.treeFeller.add(x);
+        }
+        toAdd.clear();
+    }
+    public static void addBlocksToTreeFelling(ArrayList<Block> blocklist, ArrayList<Block> toAdd, Integer radius)
+    {
+    	int u = 0;
+    	for (Block x : blocklist)
+    	{
+    		u++;
+    		if(toAdd.contains(x))
+    			continue;
+    		w = 0;
+    		Location loc = x.getLocation();
+    		int vx = x.getX();
+            int vy = x.getY();
+            int vz = x.getZ();
+            
+            /*
+             * Run through the blocks around the broken block to see if they qualify to be 'felled'
+             */
+    		for (int cx = -radius; cx <= radius; cx++) {
+	            for (int cy = -radius; cy <= radius; cy++) {
+	                for (int cz = -radius; cz <= radius; cz++) {
+	                    Block blocktarget = loc.getWorld().getBlockAt(vx + cx, vy + cy, vz + cz);
+	                    if (!blocklist.contains(blocktarget) && !toAdd.contains(blocktarget) && (blocktarget.getTypeId() == 17 || blocktarget.getTypeId() == 18)) { 
+	                        toAdd.add(blocktarget);
+	                        w++;
+	                    }
+	                }
+	            }
+	        }
+    	}
+    	/*
+		 * Add more blocks to blocklist so they can be 'felled'
+		 */
+		for(Block xx : toAdd)
+		{
+    		if(!blocklist.contains(xx))
+        	blocklist.add(xx);
+        }
+    	if(u >= blocklist.size())
+    	{
+    		isdone = true;
+    	} else {
+    		isdone = false;
+    	}
+    }
+}

+ 577 - 577
src/com/gmail/nossr50/spout/SpoutStuff.java → src/main/java/com/gmail/nossr50/spout/SpoutStuff.java

@@ -1,577 +1,577 @@
-/*
-	This file is part of mcMMO.
-
-    mcMMO is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    mcMMO is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
-*/
-package com.gmail.nossr50.spout;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
-import org.bukkit.event.Event.Priority;
-import org.getspout.spoutapi.SpoutManager;
-import org.getspout.spoutapi.gui.Color;
-import org.getspout.spoutapi.keyboard.Keyboard;
-import org.getspout.spoutapi.player.SpoutPlayer;
-import org.getspout.spoutapi.sound.SoundEffect;
-import org.getspout.spoutapi.sound.SoundManager;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.datatypes.HUDType;
-import com.gmail.nossr50.datatypes.HUDmmo;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.popups.PopupMMO;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.listeners.mcSpoutInputListener;
-import com.gmail.nossr50.listeners.mcSpoutListener;
-import com.gmail.nossr50.listeners.mcSpoutScreenListener;
-
-public class SpoutStuff 
-{
-	static mcMMO plugin = (mcMMO) Bukkit.getServer().getPluginManager().getPlugin("mcMMO");
-	
-	private final static mcSpoutListener spoutListener = new mcSpoutListener(plugin);
-	private final static mcSpoutInputListener spoutInputListener = new mcSpoutInputListener(plugin);
-	private final static mcSpoutScreenListener spoutScreenListener = new mcSpoutScreenListener(plugin);
-	
-	public static HashMap<Player, HUDmmo> playerHUDs = new HashMap<Player, HUDmmo>();
-	public static HashMap<SpoutPlayer, PopupMMO> playerScreens = new HashMap<SpoutPlayer, PopupMMO>();
-	
-	public static Keyboard keypress;
-	
-	public static void writeFile(String theFileName, String theFilePath)
-	{
-	    try {
-	        File currentFile = new File("plugins/mcMMO/Resources/"+theFilePath+theFileName);
-	        @SuppressWarnings("static-access")
-	        JarFile jar = new JarFile(plugin.mcmmo);
-	        JarEntry entry = jar.getJarEntry("resources/"+theFileName);
-	        InputStream is = jar.getInputStream(entry);
-	        byte[] buf = new byte[2048];
-	        int nbRead;
-	        OutputStream os = new BufferedOutputStream(new FileOutputStream(currentFile));
-	        while((nbRead = is.read(buf)) != -1) {
-	            os.write(buf, 0, nbRead);
-	        }
-	        os.flush();
-	        os.close();
-	    } catch (FileNotFoundException e) {
-	        e.printStackTrace();
-	    } catch (IOException e) {
-	        e.printStackTrace();
-	    }
-	}
-	
-	public static void extractFiles()
-	{
-		//Setup directories
-		new File("plugins/mcMMO/Resources/").mkdir();
-		new File("plugins/mcMMO/Resources/HUD/").mkdir();
-		new File("plugins/mcMMO/Resources/HUD/Standard/").mkdir();
-		new File("plugins/mcMMO/Resources/HUD/Retro/").mkdir();
-		new File("plugins/mcMMO/Resources/Sound/").mkdir();
-		
-		//Xp Bar images
-		for(int x =0; x < 255; x++)
-		{
-			//String s = File.separator;
-			String theFilePath = "HUD/Standard/";
-			if(x < 10)
-			{
-				String theFileName = "xpbar_inc00"+x+".png";
-				writeFile(theFileName, theFilePath);
-			} else if (x < 100)
-			{
-				String theFileName = "xpbar_inc0"+x+".png";
-				writeFile(theFileName, theFilePath);
-			} else 
-			{
-				String theFileName = "xpbar_inc"+x+".png";
-				writeFile(theFileName, theFilePath);
-			}
-		}
-		
-		//Standard XP Icons
-		
-		String theFilePathA = "HUD/Standard/";
-		String theFilePathB = "HUD/Retro/";
-		
-		for(SkillType y : SkillType.values())
-		{
-			if(y == SkillType.ALL || y == SkillType.ENCHANTING || y == SkillType.ALCHEMY)
-				continue;
-			
-			String theFileNameA = m.getCapitalized(y.toString())+".png";
-			String theFileNameB = m.getCapitalized(y.toString())+"_r.png";
-			
-			writeFile(theFileNameA, theFilePathA);
-			writeFile(theFileNameB, theFilePathB);
-		}
-		
-		//Blank icons
-		
-		writeFile("Icon.png", theFilePathA);
-		writeFile("Icon_r.png", theFilePathB);
-		
-		String theSoundFilePath = "Sound/";
-		//Repair SFX
-		writeFile("repair.wav", theSoundFilePath);
-		writeFile("level.wav", theSoundFilePath);
-	}
-	
-	public static void setupSpoutConfigs()
-	{
-		 String temp = LoadProperties.readString("Spout.Menu.Key", "KEY_M");
-	        
-	        for(Keyboard x : Keyboard.values())
-	        {
-	        	if(x.toString().equalsIgnoreCase(temp))
-	        	{
-	        		keypress = x;
-	        	}
-	        }
-	        
-     	if(keypress == null)
-     	{
-     		System.out.println("Invalid KEY for Spout.Menu.Key, using KEY_M");
-     		keypress = Keyboard.KEY_M;
-     	}
-	}
-	public static ArrayList<File> getFiles()
-	{
-		ArrayList<File> files = new ArrayList<File>();
-		String dir = "plugins/mcMMO/Resources/";
-		int x = 0;
-		
-		//XP BAR
-		while(x < 255)
-		{
-			if(x < 10)
-			{
-				files.add(new File(dir+"HUD/Standard/xpbar_inc00"+x+".png"));
-			} else if (x < 100)
-			{
-				files.add(new File(dir+"HUD/Standard/xpbar_inc0"+x+".png"));
-			} else 
-			{
-				files.add(new File(dir+"HUD/Standard/xpbar_inc"+x+".png"));
-			}
-			x++;
-		}
-		
-		//Standard XP Icons
-		for(SkillType y : SkillType.values())
-		{
-			if(y == SkillType.ALL || y == SkillType.ENCHANTING || y == SkillType.ALCHEMY)
-				continue;
-			files.add(new File(dir+"HUD/Standard/"+m.getCapitalized(y.toString())+".png"));
-			files.add(new File(dir+"HUD/Retro/"+m.getCapitalized(y.toString())+"_r.png"));
-		}
-		
-		//Blank icons
-		files.add(new File(dir+"HUD/Standard/Icon.png"));
-		files.add(new File(dir+"HUD/Retro/Icon_r.png"));
-		//Repair SFX
-		files.add(new File(dir+"Sound/repair.wav"));
-		//Level SFX
-		files.add(new File(dir+"Sound/level.wav"));
-		
-		return files;
-	}
-	public static void registerCustomEvent()
-	{
-		Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutListener, Priority.Normal, plugin);
-		Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutInputListener, Priority.Normal, plugin);
-		Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutScreenListener, Priority.Normal, plugin);
-	}
-	
-	public static Color getRetroColor(SkillType type)
-	{
-		switch(type)
-		{
-			case ACROBATICS:
-				return new Color((float) LoadProperties.acrobatics_r, (float) LoadProperties.acrobatics_g, (float) LoadProperties.acrobatics_b, 1);
-			case ARCHERY:
-				return new Color((float) LoadProperties.archery_r, (float)LoadProperties.archery_g, (float)LoadProperties.archery_b, 1f);
-			case AXES:
-				return new Color((float) LoadProperties.axes_r, (float)LoadProperties.axes_g, (float)LoadProperties.axes_b, 1f);
-			case EXCAVATION:
-				return new Color((float)LoadProperties.excavation_r, (float)LoadProperties.excavation_g, (float)LoadProperties.excavation_b, 1f);
-			case HERBALISM:
-				return new Color((float)LoadProperties.herbalism_r, (float)LoadProperties.herbalism_g, (float)LoadProperties.herbalism_b, 1f);
-			case MINING:
-				return new Color((float)LoadProperties.mining_r, (float)LoadProperties.mining_g, (float)LoadProperties.mining_b, 1f);
-			case REPAIR:
-				return new Color((float)LoadProperties.repair_r, (float)LoadProperties.repair_g, (float)LoadProperties.repair_b, 1f);
-			case SWORDS:
-				return new Color((float)LoadProperties.swords_r, (float)LoadProperties.swords_g, (float)LoadProperties.swords_b, 1f);
-			case TAMING:
-				return new Color((float)LoadProperties.taming_r, (float)LoadProperties.taming_g, (float)LoadProperties.taming_b, 1f);
-			case UNARMED:
-				return new Color((float)LoadProperties.unarmed_r, (float)LoadProperties.unarmed_g, (float)LoadProperties.unarmed_b, 1f);
-			case WOODCUTTING:
-				return new Color((float)LoadProperties.woodcutting_r, (float)LoadProperties.woodcutting_g, (float)LoadProperties.woodcutting_b, 1f);
-			case FISHING:
-				return new Color((float)LoadProperties.fishing_r, (float)LoadProperties.fishing_g, (float)LoadProperties.fishing_b, 1f);
-			default:
-				return new Color(0.3f, 0.3f, 0.75f, 1f);
-		}
-	}
-	public static SpoutPlayer getSpoutPlayer(String playerName)
-	{
-		for(Player x : Bukkit.getServer().getOnlinePlayers())
-		{
-			if(x.getName().equalsIgnoreCase(playerName))
-			{
-				return SpoutManager.getPlayer(x);
-			}
-		}
-		return null;
-	}
-	
-	public static void playSoundForPlayer(SoundEffect effect, Player player, Location location)
-	{
-		//Contrib stuff
-		SoundManager SM = SpoutManager.getSoundManager();
-		SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
-		SM.playSoundEffect(sPlayer, effect, location);
-	}
-	
-	public static void playRepairNoise(Player player)
-	{
-		SoundManager SM = SpoutManager.getSoundManager();
-		SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
-		SM.playCustomSoundEffect(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), sPlayer, "http://mcmmo.rycochet.net/mcmmo/Sound/repair.wav", false);
-	}
-	
-	public static void playLevelUpNoise(Player player)
-	{
-		SoundManager SM = SpoutManager.getSoundManager();
-		SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
-		SM.playCustomSoundEffect(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), sPlayer, "http://mcmmo.rycochet.net/mcmmo/Sound/level.wav", false);
-	}
-	
-	public static void levelUpNotification(SkillType skillType, SpoutPlayer sPlayer)
-	{
-		PlayerProfile PP = Users.getProfile(sPlayer);
-		
-		Material mat = null;
-		switch(skillType)
-		{
-		case TAMING:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.PORK;
-				break;
-			case 2:
-				mat = Material.PORK;
-				break;
-			case 3:
-				mat = Material.GRILLED_PORK;
-				break;
-			case 4:
-				mat = Material.GRILLED_PORK;
-				break;
-			case 5:
-				mat = Material.BONE;
-				break;
-			}
-			break;
-		case MINING:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.COAL_ORE;
-				break;
-			case 2:
-				mat = Material.IRON_ORE;
-				break;
-			case 3:
-				mat = Material.GOLD_ORE;
-				break;
-			case 4:
-				mat = Material.LAPIS_ORE;
-				break;
-			case 5:
-				mat = Material.DIAMOND_ORE;
-				break;
-			}
-			break;
-		case WOODCUTTING:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.WOOD;
-				break;
-			case 2:
-				mat = Material.WOOD;
-				break;
-			case 3:
-				mat = Material.WOOD;
-				break;
-			case 4:
-				mat = Material.LOG;
-				break;
-			case 5:
-				mat = Material.LOG;
-				break;
-			}
-			break;
-		case REPAIR:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.COBBLESTONE;
-				break;
-			case 2:
-				mat = Material.IRON_BLOCK;
-				break;
-			case 3:
-				mat = Material.GOLD_BLOCK;
-				break;
-			case 4:
-				mat = Material.LAPIS_BLOCK;
-				break;
-			case 5:
-				mat = Material.DIAMOND_BLOCK;
-				break;
-			}
-			break;
-		case HERBALISM:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.YELLOW_FLOWER;
-				break;
-			case 2:
-				mat = Material.RED_ROSE;
-				break;
-			case 3:
-				mat = Material.BROWN_MUSHROOM;
-				break;
-			case 4:
-				mat = Material.RED_MUSHROOM;
-				break;
-			case 5:
-				mat = Material.PUMPKIN;
-				break;
-			}
-			break;
-		case ACROBATICS:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.LEATHER_BOOTS;
-				break;
-			case 2:
-				mat = Material.CHAINMAIL_BOOTS;
-				break;
-			case 3:
-				mat = Material.IRON_BOOTS;
-				break;
-			case 4:
-				mat = Material.GOLD_BOOTS;
-				break;
-			case 5:
-				mat = Material.DIAMOND_BOOTS;
-				break;
-			}
-			break;
-		case SWORDS:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.WOOD_SWORD;
-				break;
-			case 2:
-				mat = Material.STONE_SWORD;
-				break;
-			case 3:
-				mat = Material.IRON_SWORD;
-				break;
-			case 4:
-				mat = Material.GOLD_SWORD;
-				break;
-			case 5:
-				mat = Material.DIAMOND_SWORD;
-				break;
-			}
-			break;
-		case ARCHERY:
-			mat = Material.ARROW;
-			break;
-		case UNARMED:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.LEATHER_HELMET;
-				break;
-			case 2:
-				mat = Material.CHAINMAIL_HELMET;
-				break;
-			case 3:
-				mat = Material.IRON_HELMET;
-				break;
-			case 4:
-				mat = Material.GOLD_HELMET;
-				break;
-			case 5:
-				mat = Material.DIAMOND_HELMET;
-				break;
-			}
-			break;
-		case EXCAVATION:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.WOOD_SPADE;
-				break;
-			case 2:
-				mat = Material.STONE_SPADE;
-				break;
-			case 3:
-				mat = Material.IRON_SPADE;
-				break;
-			case 4:
-				mat = Material.GOLD_SPADE;
-				break;
-			case 5:
-				mat = Material.DIAMOND_SPADE;
-				break;
-			}
-			break;
-		case AXES:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.WOOD_AXE;
-				break;
-			case 2:
-				mat = Material.STONE_AXE;
-				break;
-			case 3:
-				mat = Material.IRON_AXE;
-				break;
-			case 4:
-				mat = Material.GOLD_AXE;
-				break;
-			case 5:
-				mat = Material.DIAMOND_AXE;
-				break;
-			}
-			break;
-		case FISHING:
-			switch(getNotificationTier(PP.getSkillLevel(skillType)))
-			{
-			case 1:
-				mat = Material.RAW_FISH;
-				break;
-			case 2:
-				mat = Material.RAW_FISH;
-				break;
-			case 3:
-				mat = Material.COOKED_FISH;
-				break;
-			case 4:
-				mat = Material.COOKED_FISH;
-				break;
-			case 5:
-				mat = Material.FISHING_ROD;
-				break;
-			}
-		default:
-			mat = Material.WATCH;
-			break;
-		}
-			sPlayer.sendNotification(ChatColor.GREEN+"Level Up!", ChatColor.YELLOW+m.getCapitalized(skillType.toString())+ChatColor.DARK_AQUA+" ("+ChatColor.GREEN+PP.getSkillLevel(skillType)+ChatColor.DARK_AQUA+")", mat);
-			playLevelUpNoise(sPlayer);
-	}
-	
-	public static Integer getNotificationTier(Integer level)
-	{
-		if(level < 200)
-			return 1;
-		else if (level >= 200 && level < 400)
-			return 2;
-		else if (level >= 400 && level < 600)
-			return 3;
-		else if (level >= 600 && level < 800)
-			return 4;
-		else
-			return 5;
-	}
-	
-	public static Integer getXpInc(int skillxp, int xptolevel, HUDType hud)
-	{
-		if(hud == HUDType.STANDARD)
-		{
-			double percentage = (double) skillxp/xptolevel;
-			double inc = 0.0039370078740157;
-			return (int) (percentage/inc);
-		} else if (hud == HUDType.RETRO)
-		{
-			double percentage = (double) skillxp/xptolevel;
-			double inc = 0.0079365079365079;
-			return (int) (percentage/inc);
-		} else {
-			return 1;
-		}
-	}
-	
-	public static void updateXpBar(Player player)
-	{
-		playerHUDs.get(player).updateXpBarDisplay(Users.getProfile(player).getHUDType(), player);
-	}
-	
-	public static String getUrlBar(Integer number)
-	{
-		if(number.toString().toCharArray().length == 1)
-		{
-			return "xpbar_inc00"+number+".png";
-		} else if (number.toString().toCharArray().length == 2)
-		{
-			return "xpbar_inc0"+number+".png";
-		} else {
-			return "xpbar_inc"+number+".png";
-		}
-	}
-	
-	public static String getUrlIcon(SkillType skillType)
-	{
-		return m.getCapitalized(skillType.toString())+".png";
-	}
-	public static boolean shouldBeFilled(PlayerProfile PP)
-	{
-		return PP.getXpBarInc() < getXpInc(PP.getSkillXpLevel(PP.getLastGained()), PP.getXpToLevel(PP.getLastGained()), HUDType.STANDARD);
-	}
-}
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.spout;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Event;
+import org.bukkit.event.Event.Priority;
+import org.getspout.spoutapi.SpoutManager;
+import org.getspout.spoutapi.gui.Color;
+import org.getspout.spoutapi.keyboard.Keyboard;
+import org.getspout.spoutapi.player.SpoutPlayer;
+import org.getspout.spoutapi.sound.SoundEffect;
+import org.getspout.spoutapi.sound.SoundManager;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.datatypes.HUDType;
+import com.gmail.nossr50.datatypes.HUDmmo;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.popups.PopupMMO;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.listeners.mcSpoutInputListener;
+import com.gmail.nossr50.listeners.mcSpoutListener;
+import com.gmail.nossr50.listeners.mcSpoutScreenListener;
+
+public class SpoutStuff 
+{
+	static mcMMO plugin = (mcMMO) Bukkit.getServer().getPluginManager().getPlugin("mcMMO");
+	
+	private final static mcSpoutListener spoutListener = new mcSpoutListener(plugin);
+	private final static mcSpoutInputListener spoutInputListener = new mcSpoutInputListener(plugin);
+	private final static mcSpoutScreenListener spoutScreenListener = new mcSpoutScreenListener(plugin);
+	
+	public static HashMap<Player, HUDmmo> playerHUDs = new HashMap<Player, HUDmmo>();
+	public static HashMap<SpoutPlayer, PopupMMO> playerScreens = new HashMap<SpoutPlayer, PopupMMO>();
+	
+	public static Keyboard keypress;
+	
+	public static void writeFile(String theFileName, String theFilePath)
+	{
+	    try {
+	        File currentFile = new File("plugins/mcMMO/Resources/"+theFilePath+theFileName);
+	        @SuppressWarnings("static-access")
+	        JarFile jar = new JarFile(plugin.mcmmo);
+	        JarEntry entry = jar.getJarEntry("resources/"+theFileName);
+	        InputStream is = jar.getInputStream(entry);
+	        byte[] buf = new byte[2048];
+	        int nbRead;
+	        OutputStream os = new BufferedOutputStream(new FileOutputStream(currentFile));
+	        while((nbRead = is.read(buf)) != -1) {
+	            os.write(buf, 0, nbRead);
+	        }
+	        os.flush();
+	        os.close();
+	    } catch (FileNotFoundException e) {
+	        e.printStackTrace();
+	    } catch (IOException e) {
+	        e.printStackTrace();
+	    }
+	}
+	
+	public static void extractFiles()
+	{
+		//Setup directories
+		new File("plugins/mcMMO/Resources/").mkdir();
+		new File("plugins/mcMMO/Resources/HUD/").mkdir();
+		new File("plugins/mcMMO/Resources/HUD/Standard/").mkdir();
+		new File("plugins/mcMMO/Resources/HUD/Retro/").mkdir();
+		new File("plugins/mcMMO/Resources/Sound/").mkdir();
+		
+		//Xp Bar images
+		for(int x =0; x < 255; x++)
+		{
+			//String s = File.separator;
+			String theFilePath = "HUD/Standard/";
+			if(x < 10)
+			{
+				String theFileName = "xpbar_inc00"+x+".png";
+				writeFile(theFileName, theFilePath);
+			} else if (x < 100)
+			{
+				String theFileName = "xpbar_inc0"+x+".png";
+				writeFile(theFileName, theFilePath);
+			} else 
+			{
+				String theFileName = "xpbar_inc"+x+".png";
+				writeFile(theFileName, theFilePath);
+			}
+		}
+		
+		//Standard XP Icons
+		
+		String theFilePathA = "HUD/Standard/";
+		String theFilePathB = "HUD/Retro/";
+		
+		for(SkillType y : SkillType.values())
+		{
+			if(y == SkillType.ALL || y == SkillType.ENCHANTING || y == SkillType.ALCHEMY)
+				continue;
+			
+			String theFileNameA = m.getCapitalized(y.toString())+".png";
+			String theFileNameB = m.getCapitalized(y.toString())+"_r.png";
+			
+			writeFile(theFileNameA, theFilePathA);
+			writeFile(theFileNameB, theFilePathB);
+		}
+		
+		//Blank icons
+		
+		writeFile("Icon.png", theFilePathA);
+		writeFile("Icon_r.png", theFilePathB);
+		
+		String theSoundFilePath = "Sound/";
+		//Repair SFX
+		writeFile("repair.wav", theSoundFilePath);
+		writeFile("level.wav", theSoundFilePath);
+	}
+	
+	public static void setupSpoutConfigs()
+	{
+		 String temp = LoadProperties.readString("Spout.Menu.Key", "KEY_M");
+	        
+	        for(Keyboard x : Keyboard.values())
+	        {
+	        	if(x.toString().equalsIgnoreCase(temp))
+	        	{
+	        		keypress = x;
+	        	}
+	        }
+	        
+     	if(keypress == null)
+     	{
+     		System.out.println("Invalid KEY for Spout.Menu.Key, using KEY_M");
+     		keypress = Keyboard.KEY_M;
+     	}
+	}
+	public static ArrayList<File> getFiles()
+	{
+		ArrayList<File> files = new ArrayList<File>();
+		String dir = "plugins/mcMMO/Resources/";
+		int x = 0;
+		
+		//XP BAR
+		while(x < 255)
+		{
+			if(x < 10)
+			{
+				files.add(new File(dir+"HUD/Standard/xpbar_inc00"+x+".png"));
+			} else if (x < 100)
+			{
+				files.add(new File(dir+"HUD/Standard/xpbar_inc0"+x+".png"));
+			} else 
+			{
+				files.add(new File(dir+"HUD/Standard/xpbar_inc"+x+".png"));
+			}
+			x++;
+		}
+		
+		//Standard XP Icons
+		for(SkillType y : SkillType.values())
+		{
+			if(y == SkillType.ALL || y == SkillType.ENCHANTING || y == SkillType.ALCHEMY)
+				continue;
+			files.add(new File(dir+"HUD/Standard/"+m.getCapitalized(y.toString())+".png"));
+			files.add(new File(dir+"HUD/Retro/"+m.getCapitalized(y.toString())+"_r.png"));
+		}
+		
+		//Blank icons
+		files.add(new File(dir+"HUD/Standard/Icon.png"));
+		files.add(new File(dir+"HUD/Retro/Icon_r.png"));
+		//Repair SFX
+		files.add(new File(dir+"Sound/repair.wav"));
+		//Level SFX
+		files.add(new File(dir+"Sound/level.wav"));
+		
+		return files;
+	}
+	public static void registerCustomEvent()
+	{
+		Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutListener, Priority.Normal, plugin);
+		Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutInputListener, Priority.Normal, plugin);
+		Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutScreenListener, Priority.Normal, plugin);
+	}
+	
+	public static Color getRetroColor(SkillType type)
+	{
+		switch(type)
+		{
+			case ACROBATICS:
+				return new Color((float) LoadProperties.acrobatics_r, (float) LoadProperties.acrobatics_g, (float) LoadProperties.acrobatics_b, 1);
+			case ARCHERY:
+				return new Color((float) LoadProperties.archery_r, (float)LoadProperties.archery_g, (float)LoadProperties.archery_b, 1f);
+			case AXES:
+				return new Color((float) LoadProperties.axes_r, (float)LoadProperties.axes_g, (float)LoadProperties.axes_b, 1f);
+			case EXCAVATION:
+				return new Color((float)LoadProperties.excavation_r, (float)LoadProperties.excavation_g, (float)LoadProperties.excavation_b, 1f);
+			case HERBALISM:
+				return new Color((float)LoadProperties.herbalism_r, (float)LoadProperties.herbalism_g, (float)LoadProperties.herbalism_b, 1f);
+			case MINING:
+				return new Color((float)LoadProperties.mining_r, (float)LoadProperties.mining_g, (float)LoadProperties.mining_b, 1f);
+			case REPAIR:
+				return new Color((float)LoadProperties.repair_r, (float)LoadProperties.repair_g, (float)LoadProperties.repair_b, 1f);
+			case SWORDS:
+				return new Color((float)LoadProperties.swords_r, (float)LoadProperties.swords_g, (float)LoadProperties.swords_b, 1f);
+			case TAMING:
+				return new Color((float)LoadProperties.taming_r, (float)LoadProperties.taming_g, (float)LoadProperties.taming_b, 1f);
+			case UNARMED:
+				return new Color((float)LoadProperties.unarmed_r, (float)LoadProperties.unarmed_g, (float)LoadProperties.unarmed_b, 1f);
+			case WOODCUTTING:
+				return new Color((float)LoadProperties.woodcutting_r, (float)LoadProperties.woodcutting_g, (float)LoadProperties.woodcutting_b, 1f);
+			case FISHING:
+				return new Color((float)LoadProperties.fishing_r, (float)LoadProperties.fishing_g, (float)LoadProperties.fishing_b, 1f);
+			default:
+				return new Color(0.3f, 0.3f, 0.75f, 1f);
+		}
+	}
+	public static SpoutPlayer getSpoutPlayer(String playerName)
+	{
+		for(Player x : Bukkit.getServer().getOnlinePlayers())
+		{
+			if(x.getName().equalsIgnoreCase(playerName))
+			{
+				return SpoutManager.getPlayer(x);
+			}
+		}
+		return null;
+	}
+	
+	public static void playSoundForPlayer(SoundEffect effect, Player player, Location location)
+	{
+		//Contrib stuff
+		SoundManager SM = SpoutManager.getSoundManager();
+		SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+		SM.playSoundEffect(sPlayer, effect, location);
+	}
+	
+	public static void playRepairNoise(Player player)
+	{
+		SoundManager SM = SpoutManager.getSoundManager();
+		SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+		SM.playCustomSoundEffect(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), sPlayer, "http://mcmmo.rycochet.net/mcmmo/Sound/repair.wav", false);
+	}
+	
+	public static void playLevelUpNoise(Player player)
+	{
+		SoundManager SM = SpoutManager.getSoundManager();
+		SpoutPlayer sPlayer = SpoutManager.getPlayer(player);
+		SM.playCustomSoundEffect(Bukkit.getServer().getPluginManager().getPlugin("mcMMO"), sPlayer, "http://mcmmo.rycochet.net/mcmmo/Sound/level.wav", false);
+	}
+	
+	public static void levelUpNotification(SkillType skillType, SpoutPlayer sPlayer)
+	{
+		PlayerProfile PP = Users.getProfile(sPlayer);
+		
+		Material mat = null;
+		switch(skillType)
+		{
+		case TAMING:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.PORK;
+				break;
+			case 2:
+				mat = Material.PORK;
+				break;
+			case 3:
+				mat = Material.GRILLED_PORK;
+				break;
+			case 4:
+				mat = Material.GRILLED_PORK;
+				break;
+			case 5:
+				mat = Material.BONE;
+				break;
+			}
+			break;
+		case MINING:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.COAL_ORE;
+				break;
+			case 2:
+				mat = Material.IRON_ORE;
+				break;
+			case 3:
+				mat = Material.GOLD_ORE;
+				break;
+			case 4:
+				mat = Material.LAPIS_ORE;
+				break;
+			case 5:
+				mat = Material.DIAMOND_ORE;
+				break;
+			}
+			break;
+		case WOODCUTTING:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.WOOD;
+				break;
+			case 2:
+				mat = Material.WOOD;
+				break;
+			case 3:
+				mat = Material.WOOD;
+				break;
+			case 4:
+				mat = Material.LOG;
+				break;
+			case 5:
+				mat = Material.LOG;
+				break;
+			}
+			break;
+		case REPAIR:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.COBBLESTONE;
+				break;
+			case 2:
+				mat = Material.IRON_BLOCK;
+				break;
+			case 3:
+				mat = Material.GOLD_BLOCK;
+				break;
+			case 4:
+				mat = Material.LAPIS_BLOCK;
+				break;
+			case 5:
+				mat = Material.DIAMOND_BLOCK;
+				break;
+			}
+			break;
+		case HERBALISM:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.YELLOW_FLOWER;
+				break;
+			case 2:
+				mat = Material.RED_ROSE;
+				break;
+			case 3:
+				mat = Material.BROWN_MUSHROOM;
+				break;
+			case 4:
+				mat = Material.RED_MUSHROOM;
+				break;
+			case 5:
+				mat = Material.PUMPKIN;
+				break;
+			}
+			break;
+		case ACROBATICS:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.LEATHER_BOOTS;
+				break;
+			case 2:
+				mat = Material.CHAINMAIL_BOOTS;
+				break;
+			case 3:
+				mat = Material.IRON_BOOTS;
+				break;
+			case 4:
+				mat = Material.GOLD_BOOTS;
+				break;
+			case 5:
+				mat = Material.DIAMOND_BOOTS;
+				break;
+			}
+			break;
+		case SWORDS:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.WOOD_SWORD;
+				break;
+			case 2:
+				mat = Material.STONE_SWORD;
+				break;
+			case 3:
+				mat = Material.IRON_SWORD;
+				break;
+			case 4:
+				mat = Material.GOLD_SWORD;
+				break;
+			case 5:
+				mat = Material.DIAMOND_SWORD;
+				break;
+			}
+			break;
+		case ARCHERY:
+			mat = Material.ARROW;
+			break;
+		case UNARMED:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.LEATHER_HELMET;
+				break;
+			case 2:
+				mat = Material.CHAINMAIL_HELMET;
+				break;
+			case 3:
+				mat = Material.IRON_HELMET;
+				break;
+			case 4:
+				mat = Material.GOLD_HELMET;
+				break;
+			case 5:
+				mat = Material.DIAMOND_HELMET;
+				break;
+			}
+			break;
+		case EXCAVATION:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.WOOD_SPADE;
+				break;
+			case 2:
+				mat = Material.STONE_SPADE;
+				break;
+			case 3:
+				mat = Material.IRON_SPADE;
+				break;
+			case 4:
+				mat = Material.GOLD_SPADE;
+				break;
+			case 5:
+				mat = Material.DIAMOND_SPADE;
+				break;
+			}
+			break;
+		case AXES:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.WOOD_AXE;
+				break;
+			case 2:
+				mat = Material.STONE_AXE;
+				break;
+			case 3:
+				mat = Material.IRON_AXE;
+				break;
+			case 4:
+				mat = Material.GOLD_AXE;
+				break;
+			case 5:
+				mat = Material.DIAMOND_AXE;
+				break;
+			}
+			break;
+		case FISHING:
+			switch(getNotificationTier(PP.getSkillLevel(skillType)))
+			{
+			case 1:
+				mat = Material.RAW_FISH;
+				break;
+			case 2:
+				mat = Material.RAW_FISH;
+				break;
+			case 3:
+				mat = Material.COOKED_FISH;
+				break;
+			case 4:
+				mat = Material.COOKED_FISH;
+				break;
+			case 5:
+				mat = Material.FISHING_ROD;
+				break;
+			}
+		default:
+			mat = Material.WATCH;
+			break;
+		}
+			sPlayer.sendNotification(ChatColor.GREEN+"Level Up!", ChatColor.YELLOW+m.getCapitalized(skillType.toString())+ChatColor.DARK_AQUA+" ("+ChatColor.GREEN+PP.getSkillLevel(skillType)+ChatColor.DARK_AQUA+")", mat);
+			playLevelUpNoise(sPlayer);
+	}
+	
+	public static Integer getNotificationTier(Integer level)
+	{
+		if(level < 200)
+			return 1;
+		else if (level >= 200 && level < 400)
+			return 2;
+		else if (level >= 400 && level < 600)
+			return 3;
+		else if (level >= 600 && level < 800)
+			return 4;
+		else
+			return 5;
+	}
+	
+	public static Integer getXpInc(int skillxp, int xptolevel, HUDType hud)
+	{
+		if(hud == HUDType.STANDARD)
+		{
+			double percentage = (double) skillxp/xptolevel;
+			double inc = 0.0039370078740157;
+			return (int) (percentage/inc);
+		} else if (hud == HUDType.RETRO)
+		{
+			double percentage = (double) skillxp/xptolevel;
+			double inc = 0.0079365079365079;
+			return (int) (percentage/inc);
+		} else {
+			return 1;
+		}
+	}
+	
+	public static void updateXpBar(Player player)
+	{
+		playerHUDs.get(player).updateXpBarDisplay(Users.getProfile(player).getHUDType(), player);
+	}
+	
+	public static String getUrlBar(Integer number)
+	{
+		if(number.toString().toCharArray().length == 1)
+		{
+			return "xpbar_inc00"+number+".png";
+		} else if (number.toString().toCharArray().length == 2)
+		{
+			return "xpbar_inc0"+number+".png";
+		} else {
+			return "xpbar_inc"+number+".png";
+		}
+	}
+	
+	public static String getUrlIcon(SkillType skillType)
+	{
+		return m.getCapitalized(skillType.toString())+".png";
+	}
+	public static boolean shouldBeFilled(PlayerProfile PP)
+	{
+		return PP.getXpBarInc() < getXpInc(PP.getSkillXpLevel(PP.getLastGained()), PP.getXpToLevel(PP.getLastGained()), HUDType.STANDARD);
+	}
+}

+ 269 - 269
src/com/gmail/nossr50/spout/mmoHelper.java → src/main/java/com/gmail/nossr50/spout/mmoHelper.java

@@ -1,269 +1,269 @@
-/*
- * This file is from mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
- * 
- * mmoMinecraft is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.gmail.nossr50.spout;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.World;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Tameable;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.entity.*;
-import org.getspout.spoutapi.gui.Container;
-import org.getspout.spoutapi.gui.GenericContainer;
-import org.getspout.spoutapi.gui.Widget;
-import org.getspout.spoutapi.gui.WidgetAnchor;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.config.LoadProperties;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.spout.util.GenericLivingEntity;
-
-public class mmoHelper 
-{
-	
-	/**
-	 * A map of player containers, each container is their party bar
-	 */
-	public static HashMap<Player, GenericContainer> containers = new HashMap<Player, GenericContainer>();
-	
-	/**
-	 * Get the percentage health of a Player.
-	 * @param player The Player we're interested in
-	 * @return The percentage of max health
-	 */
-	public static int getHealth(Entity player) {
-		if (player != null && player instanceof LivingEntity) {
-			try {
-				return Math.min(((LivingEntity) player).getHealth() * 5, 100);
-			} catch (Exception e) {
-			}
-		}
-		return 0;
-	}
-	
-	/**
-	 * Get the colour of a LivingEntity target from a player's point of view.
-	 * @param player The player viewing the target
-	 * @param target The target to name
-	 * @return The name to use
-	 */
-	public static String getColor(Player player, LivingEntity target) {
-		if (target instanceof Player) {
-			if (((Player) target).isOp()) {
-				return ChatColor.GOLD.toString();
-			}
-			return ChatColor.YELLOW.toString();
-		} else {
-			if (target instanceof Monster) {
-				if (player != null && player.equals(((Monster) target).getTarget())) {
-					return ChatColor.RED.toString();
-				} else {
-					return ChatColor.YELLOW.toString();
-				}
-			} else if (target instanceof WaterMob) {
-				return ChatColor.GREEN.toString();
-			} else if (target instanceof Flying) {
-				return ChatColor.YELLOW.toString();
-			} else if (target instanceof Animals) {
-				if (player != null && player.equals(((Animals) target).getTarget())) {
-					return ChatColor.RED.toString();
-				} else if (target instanceof Tameable) {
-					Tameable pet = (Tameable) target;
-					if (pet.isTamed()) {
-						return ChatColor.GREEN.toString();
-					} else {
-						return ChatColor.YELLOW.toString();
-					}
-				} else {
-					return ChatColor.GRAY.toString();
-				}
-			} else {
-				return ChatColor.GRAY.toString();
-			}
-		}
-	}
-
-	/**
-	 * Get the percentage armour of a Player.
-	 * @param player The Player we're interested in
-	 * @return The percentage of max armour
-	 */
-	public static int getArmor(Entity player) {
-		if (player != null && player instanceof Player) {
-			int armor = 0, max, multi[] = {15, 30, 40, 15};
-			ItemStack inv[] = ((Player) player).getInventory().getArmorContents();
-			for (int i = 0; i < inv.length; i++) {
-				max = inv[i].getType().getMaxDurability();
-				if (max >= 0) {
-					armor += multi[i] * (max - inv[i].getDurability()) / max;
-				}
-			}
-			return armor;
-		}
-		return 0;
-	}
-	
-	public static String getSimpleName(LivingEntity target, boolean showOwner) {
-		String name = "";
-		if (target instanceof Player) {
-			if (LoadProperties.showDisplayName) {
-				name += ((Player) target).getName();
-			} else {
-				name += ((Player) target).getDisplayName();
-			}
-		} else if (target instanceof HumanEntity) {
-			name += ((HumanEntity) target).getName();
-		} else {
-			if (target instanceof Tameable) {
-				if (((Tameable) target).isTamed()) {
-					if (showOwner && ((Tameable) target).getOwner() instanceof Player) {
-						if (LoadProperties.showDisplayName) {
-							name += ((Player) ((Tameable) target).getOwner()).getName() + "'s ";
-						} else {
-							name += ((Player) ((Tameable) target).getOwner()).getDisplayName() + "'s ";
-						}
-					} else {
-						name += "Pet ";
-					}
-				}
-			}
-			if (target instanceof Chicken) {
-				name += "Chicken";
-			} else if (target instanceof Cow) {
-				name += "Cow";
-			} else if (target instanceof Creeper) {
-				name += "Creeper";
-			} else if (target instanceof Ghast) {
-				name += "Ghast";
-			} else if (target instanceof Giant) {
-				name += "Giant";
-			} else if (target instanceof Pig) {
-				name += "Pig";
-			} else if (target instanceof PigZombie) {
-				name += "PigZombie";
-			} else if (target instanceof Sheep) {
-				name += "Sheep";
-			} else if (target instanceof Slime) {
-				name += "Slime";
-			} else if (target instanceof Skeleton) {
-				name += "Skeleton";
-			} else if (target instanceof Spider) {
-				name += "Spider";
-			} else if (target instanceof Squid) {
-				name += "Squid";
-			} else if (target instanceof Wolf) {
-				name += "Wolf";
-			} else if (target instanceof Zombie) {
-				name += "Zombie";
-			} else if (target instanceof Monster) {
-				name += "Monster";
-			} else if (target instanceof Creature) {
-				name += "Creature";
-			} else {
-				name += "Unknown";
-			}
-		}
-		return name;
-	}
-	
-	public static LivingEntity[] getPets(HumanEntity player) {
-		ArrayList<LivingEntity> pets = new ArrayList<LivingEntity>();
-		if (player != null && (!(player instanceof Player) || ((Player) player).isOnline())) {
-			String name = player.getName();
-			for (World world : Bukkit.getServer().getWorlds()) {
-				for (LivingEntity entity : world.getLivingEntities()) {
-					if (entity instanceof Tameable && ((Tameable) entity).isTamed() && ((Tameable) entity).getOwner() instanceof Player) {
-						if (name.equals(((Player) ((Tameable) entity).getOwner()).getName())) {
-							pets.add(entity);
-						}
-					}
-				}
-			}
-		}
-		LivingEntity[] list = new LivingEntity[pets.size()];
-		pets.toArray(list);
-		return list;
-	}
-	
-	public static void update(Player player) 
-	{
-		//boolean show_pets = true;
-		Container container = containers.get(player);
-		
-		if (container != null) 
-		{
-			int index = 0;
-			Widget[] bars = container.getChildren();
-			for (String name : Party.getInstance().getPartyMembersByName(player).meFirst(player.getName())) 
-			{
-				GenericLivingEntity bar;
-				if (index >= bars.length) 
-				{
-					container.addChild(bar = new GenericLivingEntity());
-				} else {
-					bar = (GenericLivingEntity)bars[index];
-				}
-				bar.setEntity(name, Party.getInstance().isPartyLeader(name, Users.getProfile(Bukkit.getServer().getPlayer(name)).getParty()) ? ChatColor.GREEN + "@" : "");
-				//bar.setTargets(show_pets ? getPets(Bukkit.getServer().getPlayer(name)) : null);
-				index++;
-			}
-			while (index < bars.length) {
-				container.removeChild(bars[index++]);
-			}
-			container.updateLayout();
-		}
-	}
-	
-	public static void initialize(SpoutPlayer sPlayer, Plugin plugin)
-	{
-		GenericContainer container = new GenericContainer();
-		
-		container.setAlign(WidgetAnchor.TOP_LEFT)
-			.setAnchor(WidgetAnchor.TOP_LEFT)
-			.setX(3)
-			.setY(3)
-			.setWidth(427)
-			.setHeight(240)
-			.setFixed(true);
-		
-		mmoHelper.containers.put(sPlayer, container);
-		
-		sPlayer.getMainScreen().attachWidget(plugin, container);
-	}
-	/**
-	 * Update all parties.
-	 */
-	public static void updateAll() {
-		for(Player x : Bukkit.getServer().getOnlinePlayers())
-		{
-			if(Users.getProfile(x).inParty())
-			{
-				update(x);
-			}
-		}
-	}
-	
-}
+/*
+ * This file is from mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
+ * 
+ * mmoMinecraft is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.gmail.nossr50.spout;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.World;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Tameable;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.entity.*;
+import org.getspout.spoutapi.gui.Container;
+import org.getspout.spoutapi.gui.GenericContainer;
+import org.getspout.spoutapi.gui.Widget;
+import org.getspout.spoutapi.gui.WidgetAnchor;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.config.LoadProperties;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.spout.util.GenericLivingEntity;
+
+public class mmoHelper 
+{
+	
+	/**
+	 * A map of player containers, each container is their party bar
+	 */
+	public static HashMap<Player, GenericContainer> containers = new HashMap<Player, GenericContainer>();
+	
+	/**
+	 * Get the percentage health of a Player.
+	 * @param player The Player we're interested in
+	 * @return The percentage of max health
+	 */
+	public static int getHealth(Entity player) {
+		if (player != null && player instanceof LivingEntity) {
+			try {
+				return Math.min(((LivingEntity) player).getHealth() * 5, 100);
+			} catch (Exception e) {
+			}
+		}
+		return 0;
+	}
+	
+	/**
+	 * Get the colour of a LivingEntity target from a player's point of view.
+	 * @param player The player viewing the target
+	 * @param target The target to name
+	 * @return The name to use
+	 */
+	public static String getColor(Player player, LivingEntity target) {
+		if (target instanceof Player) {
+			if (((Player) target).isOp()) {
+				return ChatColor.GOLD.toString();
+			}
+			return ChatColor.YELLOW.toString();
+		} else {
+			if (target instanceof Monster) {
+				if (player != null && player.equals(((Monster) target).getTarget())) {
+					return ChatColor.RED.toString();
+				} else {
+					return ChatColor.YELLOW.toString();
+				}
+			} else if (target instanceof WaterMob) {
+				return ChatColor.GREEN.toString();
+			} else if (target instanceof Flying) {
+				return ChatColor.YELLOW.toString();
+			} else if (target instanceof Animals) {
+				if (player != null && player.equals(((Animals) target).getTarget())) {
+					return ChatColor.RED.toString();
+				} else if (target instanceof Tameable) {
+					Tameable pet = (Tameable) target;
+					if (pet.isTamed()) {
+						return ChatColor.GREEN.toString();
+					} else {
+						return ChatColor.YELLOW.toString();
+					}
+				} else {
+					return ChatColor.GRAY.toString();
+				}
+			} else {
+				return ChatColor.GRAY.toString();
+			}
+		}
+	}
+
+	/**
+	 * Get the percentage armour of a Player.
+	 * @param player The Player we're interested in
+	 * @return The percentage of max armour
+	 */
+	public static int getArmor(Entity player) {
+		if (player != null && player instanceof Player) {
+			int armor = 0, max, multi[] = {15, 30, 40, 15};
+			ItemStack inv[] = ((Player) player).getInventory().getArmorContents();
+			for (int i = 0; i < inv.length; i++) {
+				max = inv[i].getType().getMaxDurability();
+				if (max >= 0) {
+					armor += multi[i] * (max - inv[i].getDurability()) / max;
+				}
+			}
+			return armor;
+		}
+		return 0;
+	}
+	
+	public static String getSimpleName(LivingEntity target, boolean showOwner) {
+		String name = "";
+		if (target instanceof Player) {
+			if (LoadProperties.showDisplayName) {
+				name += ((Player) target).getName();
+			} else {
+				name += ((Player) target).getDisplayName();
+			}
+		} else if (target instanceof HumanEntity) {
+			name += ((HumanEntity) target).getName();
+		} else {
+			if (target instanceof Tameable) {
+				if (((Tameable) target).isTamed()) {
+					if (showOwner && ((Tameable) target).getOwner() instanceof Player) {
+						if (LoadProperties.showDisplayName) {
+							name += ((Player) ((Tameable) target).getOwner()).getName() + "'s ";
+						} else {
+							name += ((Player) ((Tameable) target).getOwner()).getDisplayName() + "'s ";
+						}
+					} else {
+						name += "Pet ";
+					}
+				}
+			}
+			if (target instanceof Chicken) {
+				name += "Chicken";
+			} else if (target instanceof Cow) {
+				name += "Cow";
+			} else if (target instanceof Creeper) {
+				name += "Creeper";
+			} else if (target instanceof Ghast) {
+				name += "Ghast";
+			} else if (target instanceof Giant) {
+				name += "Giant";
+			} else if (target instanceof Pig) {
+				name += "Pig";
+			} else if (target instanceof PigZombie) {
+				name += "PigZombie";
+			} else if (target instanceof Sheep) {
+				name += "Sheep";
+			} else if (target instanceof Slime) {
+				name += "Slime";
+			} else if (target instanceof Skeleton) {
+				name += "Skeleton";
+			} else if (target instanceof Spider) {
+				name += "Spider";
+			} else if (target instanceof Squid) {
+				name += "Squid";
+			} else if (target instanceof Wolf) {
+				name += "Wolf";
+			} else if (target instanceof Zombie) {
+				name += "Zombie";
+			} else if (target instanceof Monster) {
+				name += "Monster";
+			} else if (target instanceof Creature) {
+				name += "Creature";
+			} else {
+				name += "Unknown";
+			}
+		}
+		return name;
+	}
+	
+	public static LivingEntity[] getPets(HumanEntity player) {
+		ArrayList<LivingEntity> pets = new ArrayList<LivingEntity>();
+		if (player != null && (!(player instanceof Player) || ((Player) player).isOnline())) {
+			String name = player.getName();
+			for (World world : Bukkit.getServer().getWorlds()) {
+				for (LivingEntity entity : world.getLivingEntities()) {
+					if (entity instanceof Tameable && ((Tameable) entity).isTamed() && ((Tameable) entity).getOwner() instanceof Player) {
+						if (name.equals(((Player) ((Tameable) entity).getOwner()).getName())) {
+							pets.add(entity);
+						}
+					}
+				}
+			}
+		}
+		LivingEntity[] list = new LivingEntity[pets.size()];
+		pets.toArray(list);
+		return list;
+	}
+	
+	public static void update(Player player) 
+	{
+		//boolean show_pets = true;
+		Container container = containers.get(player);
+		
+		if (container != null) 
+		{
+			int index = 0;
+			Widget[] bars = container.getChildren();
+			for (String name : Party.getInstance().getPartyMembersByName(player).meFirst(player.getName())) 
+			{
+				GenericLivingEntity bar;
+				if (index >= bars.length) 
+				{
+					container.addChild(bar = new GenericLivingEntity());
+				} else {
+					bar = (GenericLivingEntity)bars[index];
+				}
+				bar.setEntity(name, Party.getInstance().isPartyLeader(name, Users.getProfile(Bukkit.getServer().getPlayer(name)).getParty()) ? ChatColor.GREEN + "@" : "");
+				//bar.setTargets(show_pets ? getPets(Bukkit.getServer().getPlayer(name)) : null);
+				index++;
+			}
+			while (index < bars.length) {
+				container.removeChild(bars[index++]);
+			}
+			container.updateLayout();
+		}
+	}
+	
+	public static void initialize(SpoutPlayer sPlayer, Plugin plugin)
+	{
+		GenericContainer container = new GenericContainer();
+		
+		container.setAlign(WidgetAnchor.TOP_LEFT)
+			.setAnchor(WidgetAnchor.TOP_LEFT)
+			.setX(3)
+			.setY(3)
+			.setWidth(427)
+			.setHeight(240)
+			.setFixed(true);
+		
+		mmoHelper.containers.put(sPlayer, container);
+		
+		sPlayer.getMainScreen().attachWidget(plugin, container);
+	}
+	/**
+	 * Update all parties.
+	 */
+	public static void updateAll() {
+		for(Player x : Bukkit.getServer().getOnlinePlayers())
+		{
+			if(Users.getProfile(x).inParty())
+			{
+				update(x);
+			}
+		}
+	}
+	
+}

+ 111 - 111
src/com/gmail/nossr50/spout/util/ArrayListString.java → src/main/java/com/gmail/nossr50/spout/util/ArrayListString.java

@@ -1,112 +1,112 @@
-/*
- * This file is part of mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
- * 
- * mmoMinecraft is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.gmail.nossr50.spout.util;
-
-import java.util.ArrayList;
-
-/**
- * Case insensitive ArrayList<String>.
- * Overrides the .contains(), .indexOf(), .lastIndexOf() and .remove() methods.
- */
-public class ArrayListString extends ArrayList<String> {
-	
-	private static final long serialVersionUID = -8111006526598412404L;
-
-	/**
-	 * Returns true if this list contains the specified string.
-	 * @param o String whose presence in this list is to be tested
-	 * @return true if this list contains the specified string
-	 */
-	public boolean contains(String o) {
-		for (String e : this) {
-			if (o == null ? e == null : o.equalsIgnoreCase(e)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Returns the index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string.
-	 * @param o String to search for
-	 * @return The index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string
-	 */
-	public int indexOf(String o) {
-		for (int i = 0; i < this.size(); i++) {
-			if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Returns the index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string.
-	 * @param o String to search for
-	 * @return The index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string
-	 */
-	public int lastIndexOf(String o) {
-		for (int i = size() - 1; i >= 0; i--) {
-			if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
-				return i;
-			}
-		}
-		return -1;
-	}
-
-	/**
-	 * Removes the first occurrence of the specified string from this list, if it is present. If the list does not contain the string, it is unchanged.
-	 * @param o String to be removed from this list, if present
-	 * @return true if this list contained the specified string
-	 */
-	public boolean remove(String o) {
-		int i = indexOf(o);
-		if (i != -1) {
-			remove(i);
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Returns the element at the specified position in this list.
-	 * This is for finding the correct capitalisation of an element.
-	 * @param index String to search for
-	 * @return the correctly capitalised element
-	 */
-	public String get(String index) {
-		int i = this.indexOf(index);
-		if (i != -1) {
-			return this.get(i);
-		}
-		return null;
-	}
-
-	public ArrayListString meFirst(String name) {
-		ArrayListString copy = new ArrayListString();
-		if (this.contains(name)) {
-			copy.add(name);
-		}
-		for (String next : this) {
-			if (!next.equalsIgnoreCase(name)) {
-				copy.add(next);
-			}
-		}
-		return copy;
-	}
+/*
+ * This file is part of mmoMinecraft (http://code.google.com/p/mmo-minecraft/).
+ * 
+ * mmoMinecraft is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.gmail.nossr50.spout.util;
+
+import java.util.ArrayList;
+
+/**
+ * Case insensitive ArrayList<String>.
+ * Overrides the .contains(), .indexOf(), .lastIndexOf() and .remove() methods.
+ */
+public class ArrayListString extends ArrayList<String> {
+	
+	private static final long serialVersionUID = -8111006526598412404L;
+
+	/**
+	 * Returns true if this list contains the specified string.
+	 * @param o String whose presence in this list is to be tested
+	 * @return true if this list contains the specified string
+	 */
+	public boolean contains(String o) {
+		for (String e : this) {
+			if (o == null ? e == null : o.equalsIgnoreCase(e)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string.
+	 * @param o String to search for
+	 * @return The index of the first occurrence of the specified string in this list, or -1 if this list does not contain the string
+	 */
+	public int indexOf(String o) {
+		for (int i = 0; i < this.size(); i++) {
+			if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Returns the index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string.
+	 * @param o String to search for
+	 * @return The index of the last occurrence of the specified string in this list, or -1 if this list does not contain the string
+	 */
+	public int lastIndexOf(String o) {
+		for (int i = size() - 1; i >= 0; i--) {
+			if (o == null ? get(i) == null : o.equalsIgnoreCase(get(i))) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Removes the first occurrence of the specified string from this list, if it is present. If the list does not contain the string, it is unchanged.
+	 * @param o String to be removed from this list, if present
+	 * @return true if this list contained the specified string
+	 */
+	public boolean remove(String o) {
+		int i = indexOf(o);
+		if (i != -1) {
+			remove(i);
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the element at the specified position in this list.
+	 * This is for finding the correct capitalisation of an element.
+	 * @param index String to search for
+	 * @return the correctly capitalised element
+	 */
+	public String get(String index) {
+		int i = this.indexOf(index);
+		if (i != -1) {
+			return this.get(i);
+		}
+		return null;
+	}
+
+	public ArrayListString meFirst(String name) {
+		ArrayListString copy = new ArrayListString();
+		if (this.contains(name)) {
+			copy.add(name);
+		}
+		for (String next : this) {
+			if (!next.equalsIgnoreCase(name)) {
+				copy.add(next);
+			}
+		}
+		return copy;
+	}
 }

+ 64 - 64
src/com/gmail/nossr50/spout/util/GenericFace.java → src/main/java/com/gmail/nossr50/spout/util/GenericFace.java

@@ -1,65 +1,65 @@
-/*
- * This file is part of mmoMinecraft (https://github.com/mmoMinecraftDev).
- *
- * mmoMinecraft is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package com.gmail.nossr50.spout.util;
-
-import org.getspout.spoutapi.gui.GenericTexture;
-
-import com.gmail.nossr50.config.LoadProperties;
-
-public final class GenericFace extends GenericTexture {
-
-	private static String facePath = "http://face.rycochet.net/";
-	private static int defaultSize = 8;
-	private String name;
-
-	public GenericFace() {
-		this("", defaultSize);
-	}
-
-	public GenericFace(String name) {
-		this(name, defaultSize);
-	}
-
-	public GenericFace(String name, int size) {
-		if (LoadProperties.showFaces) {
-			this.setWidth(size).setHeight(size).setFixed(true);
-			setName(name);
-		} else {
-			this.setVisible(false);
-		}
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public GenericFace setName(String name) {
-		if (LoadProperties.showFaces) {
-			this.name = name == null ? "" : name;
-			super.setUrl(facePath + this.name + ".png");
-			super.setDirty(true);
-		}
-		return this;
-	}
-
-	public GenericFace setSize(int size) {
-		if (LoadProperties.showFaces) {
-			super.setWidth(size).setHeight(size);
-		}
-		return this;
-	}
+/*
+ * This file is part of mmoMinecraft (https://github.com/mmoMinecraftDev).
+ *
+ * mmoMinecraft is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.gmail.nossr50.spout.util;
+
+import org.getspout.spoutapi.gui.GenericTexture;
+
+import com.gmail.nossr50.config.LoadProperties;
+
+public final class GenericFace extends GenericTexture {
+
+	private static String facePath = "http://face.rycochet.net/";
+	private static int defaultSize = 8;
+	private String name;
+
+	public GenericFace() {
+		this("", defaultSize);
+	}
+
+	public GenericFace(String name) {
+		this(name, defaultSize);
+	}
+
+	public GenericFace(String name, int size) {
+		if (LoadProperties.showFaces) {
+			this.setWidth(size).setHeight(size).setFixed(true);
+			setName(name);
+		} else {
+			this.setVisible(false);
+		}
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public GenericFace setName(String name) {
+		if (LoadProperties.showFaces) {
+			this.name = name == null ? "" : name;
+			super.setUrl(facePath + this.name + ".png");
+			super.setDirty(true);
+		}
+		return this;
+	}
+
+	public GenericFace setSize(int size) {
+		if (LoadProperties.showFaces) {
+			super.setWidth(size).setHeight(size);
+		}
+		return this;
+	}
 }

+ 226 - 226
src/com/gmail/nossr50/spout/util/GenericLivingEntity.java → src/main/java/com/gmail/nossr50/spout/util/GenericLivingEntity.java

@@ -1,227 +1,227 @@
-/*
- * This file is part of mmoHelperMinecraft (https://github.com/mmoHelperMinecraftDev).
- *
- * mmoHelperMinecraft is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package com.gmail.nossr50.spout.util;
-
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.getspout.spoutapi.gui.*;
-
-import com.gmail.nossr50.spout.mmoHelper;
-
-public class GenericLivingEntity extends GenericContainer {
-
-	private Container _space;
-	private Label _label;
-	private Gradient _health;
-	private Gradient _armor;
-	private GenericFace _face;
-	private int health = 100;
-	private int armor = 100;
-	private int def_width = 80;
-	private int def_height = 14;
-	private boolean target = false;
-	String face = "~";
-	String label = "";
-
-	public GenericLivingEntity() {
-		super();
-		Color black = new Color(0, 0, 0, 0.75f);
-
-		this.addChildren( 
-			new GenericContainer(	// Used for the bar, this.children with an index 1+ are targets
-				_space = (Container) new GenericContainer()
-					  .setMinWidth(def_width / 4)
-					  .setMaxWidth(def_width / 4)
-					  .setVisible(target),
-				new GenericContainer(
-					new GenericGradient()
-							.setTopColor(black)
-							.setBottomColor(black)
-							.setPriority(RenderPriority.Highest),
-					new GenericContainer(
-						_health = (Gradient) new GenericGradient(),
-						_armor = (Gradient) new GenericGradient()
-					)		.setMargin(1)
-							.setPriority(RenderPriority.High),
-					new GenericContainer(
-						_face = (GenericFace) new GenericFace()
-								.setMargin(3, 0, 3, 3),
-						_label = (Label) new GenericLabel()
-								.setMargin(3)
-					)		.setLayout(ContainerType.HORIZONTAL)
-				)		.setLayout(ContainerType.OVERLAY)
-			)		.setLayout(ContainerType.HORIZONTAL)
-					.setMargin(0, 0, 1, 0)
-					.setFixed(true)
-					.setWidth(def_width)
-					.setHeight(def_height)
-		)		.setAlign(WidgetAnchor.TOP_LEFT)
-				.setFixed(true)
-				.setWidth(def_width)
-				.setHeight(def_height + 1);
-
-		this.setHealthColor(new Color(1f, 0, 0, 0.75f));
-		this.setArmorColor(new Color(0.75f, 0.75f, 0.75f, 0.75f));
-	}
-
-	/**
-	 * Set the display from a possibly offline player
-	 * @param name
-	 * @return 
-	 */
-	public GenericLivingEntity setEntity(String name) {
-		return setEntity(name, "");
-	}
-
-	/**
-	 * Set the display from a possibly offline player
-	 * @param name
-	 * @param prefix Place before the name
-	 * @return 
-	 */
-	public GenericLivingEntity setEntity(String name, String prefix) {
-		Player player = this.getPlugin().getServer().getPlayer(name);
-		if (player != null && player.isOnline()) {
-			return setEntity(player, prefix);
-		}
-		setHealth(0);
-		setArmor(0);
-		setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, null) + name);
-		setFace("~" + name);
-		return this;
-	}
-
-	/**
-	 * Set the display from a player or living entity
-	 * @param entity
-	 * @return 
-	 */
-	public GenericLivingEntity setEntity(LivingEntity entity) {
-		return setEntity(entity, "");
-	}
-
-	/**
-	 * Set the display from a player or living entity
-	 * @param entity
-	 * @param prefix Place before the name
-	 * @return 
-	 */
-	public GenericLivingEntity setEntity(LivingEntity entity, String prefix) {
-		if (entity != null && entity instanceof LivingEntity) {
-			setHealth(mmoHelper.getHealth(entity)); // Needs a maxHealth() check
-			setArmor(mmoHelper.getArmor(entity));
-			setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, entity) + mmoHelper.getSimpleName(entity, !target));
-			setFace(entity instanceof Player ? ((Player)entity).getName() : "+" + mmoHelper.getSimpleName(entity,false).replaceAll(" ", ""));
-		} else {
-			setHealth(0);
-			setArmor(0);
-			setLabel("");
-			setFace("");
-		}
-		return this;
-	}
-
-	/**
-	 * Set the targets of this entity - either actual targets, or pets etc
-	 * @param targets
-	 * @return 
-	 */
-	public GenericLivingEntity setTargets(LivingEntity... targets) {
-		Widget[] widgets = this.getChildren();
-		if (targets == null) {
-			targets = new LivingEntity[0]; // zero-length array is easier to handle
-		}
-		for (int i=targets.length + 1; i<widgets.length; i++) {
-			this.removeChild(widgets[i]);
-		}
-		for (int i=0; i<targets.length; i++) {
-			GenericLivingEntity child;
-			if (widgets.length > i + 1) {
-				child = (GenericLivingEntity) widgets[i+1];
-			} else {
-				this.addChild(child = new GenericLivingEntity());
-			}
-			child.setTarget(true);
-			child.setEntity(targets[i]);
-		}
-		setHeight((targets.length + 1) * (def_height + 1));
-		updateLayout();
-		return this;
-	}
-
-	public GenericLivingEntity setTarget(boolean target) {
-		if (this.target != target) {
-			this.target = target;
-			_space.setVisible(target);
-			updateLayout();
-		}
-		return this;
-	}
-
-	public GenericLivingEntity setHealth(int health) {
-		if (this.health != health) {
-			this.health = health;
-			updateLayout();
-		}
-		return this;
-	}
-
-	public GenericLivingEntity setHealthColor(Color color) {
-		_health.setTopColor(color).setBottomColor(color);
-		return this;
-	}
-
-	public GenericLivingEntity setArmor(int armor) {
-		if (this.armor != armor) {
-			this.armor = armor;
-			updateLayout();
-		}
-		return this;
-	}
-
-	public GenericLivingEntity setArmorColor(Color color) {
-		_armor.setTopColor(color).setBottomColor(color);
-		return this;
-	}
-
-	public GenericLivingEntity setLabel(String label) {
-		if (!this.label.equals(label)) {
-			this.label = label;
-			_label.setText(label).setDirty(true);
-			updateLayout();
-		}
-		return this;
-	}
-
-	public GenericLivingEntity setFace(String name) {
-		if (!this.face.equals(name)) {
-			this.face = name;
-			_face.setVisible(!name.isEmpty());
-			_face.setName(name);
-			updateLayout();
-		}
-		return this;
-	}
-
-	@Override
-	public Container updateLayout() {
-		super.updateLayout();
-		_armor.setWidth((_armor.getContainer().getWidth() * armor) / 100).setDirty(true);
-		_health.setWidth((_health.getContainer().getWidth() * health) / 100).setDirty(true);
-		return this;
-	}
+/*
+ * This file is part of mmoHelperMinecraft (https://github.com/mmoHelperMinecraftDev).
+ *
+ * mmoHelperMinecraft is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.gmail.nossr50.spout.util;
+
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.getspout.spoutapi.gui.*;
+
+import com.gmail.nossr50.spout.mmoHelper;
+
+public class GenericLivingEntity extends GenericContainer {
+
+	private Container _space;
+	private Label _label;
+	private Gradient _health;
+	private Gradient _armor;
+	private GenericFace _face;
+	private int health = 100;
+	private int armor = 100;
+	private int def_width = 80;
+	private int def_height = 14;
+	private boolean target = false;
+	String face = "~";
+	String label = "";
+
+	public GenericLivingEntity() {
+		super();
+		Color black = new Color(0, 0, 0, 0.75f);
+
+		this.addChildren( 
+			new GenericContainer(	// Used for the bar, this.children with an index 1+ are targets
+				_space = (Container) new GenericContainer()
+					  .setMinWidth(def_width / 4)
+					  .setMaxWidth(def_width / 4)
+					  .setVisible(target),
+				new GenericContainer(
+					new GenericGradient()
+							.setTopColor(black)
+							.setBottomColor(black)
+							.setPriority(RenderPriority.Highest),
+					new GenericContainer(
+						_health = (Gradient) new GenericGradient(),
+						_armor = (Gradient) new GenericGradient()
+					)		.setMargin(1)
+							.setPriority(RenderPriority.High),
+					new GenericContainer(
+						_face = (GenericFace) new GenericFace()
+								.setMargin(3, 0, 3, 3),
+						_label = (Label) new GenericLabel()
+								.setMargin(3)
+					)		.setLayout(ContainerType.HORIZONTAL)
+				)		.setLayout(ContainerType.OVERLAY)
+			)		.setLayout(ContainerType.HORIZONTAL)
+					.setMargin(0, 0, 1, 0)
+					.setFixed(true)
+					.setWidth(def_width)
+					.setHeight(def_height)
+		)		.setAlign(WidgetAnchor.TOP_LEFT)
+				.setFixed(true)
+				.setWidth(def_width)
+				.setHeight(def_height + 1);
+
+		this.setHealthColor(new Color(1f, 0, 0, 0.75f));
+		this.setArmorColor(new Color(0.75f, 0.75f, 0.75f, 0.75f));
+	}
+
+	/**
+	 * Set the display from a possibly offline player
+	 * @param name
+	 * @return 
+	 */
+	public GenericLivingEntity setEntity(String name) {
+		return setEntity(name, "");
+	}
+
+	/**
+	 * Set the display from a possibly offline player
+	 * @param name
+	 * @param prefix Place before the name
+	 * @return 
+	 */
+	public GenericLivingEntity setEntity(String name, String prefix) {
+		Player player = this.getPlugin().getServer().getPlayer(name);
+		if (player != null && player.isOnline()) {
+			return setEntity(player, prefix);
+		}
+		setHealth(0);
+		setArmor(0);
+		setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, null) + name);
+		setFace("~" + name);
+		return this;
+	}
+
+	/**
+	 * Set the display from a player or living entity
+	 * @param entity
+	 * @return 
+	 */
+	public GenericLivingEntity setEntity(LivingEntity entity) {
+		return setEntity(entity, "");
+	}
+
+	/**
+	 * Set the display from a player or living entity
+	 * @param entity
+	 * @param prefix Place before the name
+	 * @return 
+	 */
+	public GenericLivingEntity setEntity(LivingEntity entity, String prefix) {
+		if (entity != null && entity instanceof LivingEntity) {
+			setHealth(mmoHelper.getHealth(entity)); // Needs a maxHealth() check
+			setArmor(mmoHelper.getArmor(entity));
+			setLabel((!"".equals(prefix) ? prefix : "") + mmoHelper.getColor(screen != null ? screen.getPlayer() : null, entity) + mmoHelper.getSimpleName(entity, !target));
+			setFace(entity instanceof Player ? ((Player)entity).getName() : "+" + mmoHelper.getSimpleName(entity,false).replaceAll(" ", ""));
+		} else {
+			setHealth(0);
+			setArmor(0);
+			setLabel("");
+			setFace("");
+		}
+		return this;
+	}
+
+	/**
+	 * Set the targets of this entity - either actual targets, or pets etc
+	 * @param targets
+	 * @return 
+	 */
+	public GenericLivingEntity setTargets(LivingEntity... targets) {
+		Widget[] widgets = this.getChildren();
+		if (targets == null) {
+			targets = new LivingEntity[0]; // zero-length array is easier to handle
+		}
+		for (int i=targets.length + 1; i<widgets.length; i++) {
+			this.removeChild(widgets[i]);
+		}
+		for (int i=0; i<targets.length; i++) {
+			GenericLivingEntity child;
+			if (widgets.length > i + 1) {
+				child = (GenericLivingEntity) widgets[i+1];
+			} else {
+				this.addChild(child = new GenericLivingEntity());
+			}
+			child.setTarget(true);
+			child.setEntity(targets[i]);
+		}
+		setHeight((targets.length + 1) * (def_height + 1));
+		updateLayout();
+		return this;
+	}
+
+	public GenericLivingEntity setTarget(boolean target) {
+		if (this.target != target) {
+			this.target = target;
+			_space.setVisible(target);
+			updateLayout();
+		}
+		return this;
+	}
+
+	public GenericLivingEntity setHealth(int health) {
+		if (this.health != health) {
+			this.health = health;
+			updateLayout();
+		}
+		return this;
+	}
+
+	public GenericLivingEntity setHealthColor(Color color) {
+		_health.setTopColor(color).setBottomColor(color);
+		return this;
+	}
+
+	public GenericLivingEntity setArmor(int armor) {
+		if (this.armor != armor) {
+			this.armor = armor;
+			updateLayout();
+		}
+		return this;
+	}
+
+	public GenericLivingEntity setArmorColor(Color color) {
+		_armor.setTopColor(color).setBottomColor(color);
+		return this;
+	}
+
+	public GenericLivingEntity setLabel(String label) {
+		if (!this.label.equals(label)) {
+			this.label = label;
+			_label.setText(label).setDirty(true);
+			updateLayout();
+		}
+		return this;
+	}
+
+	public GenericLivingEntity setFace(String name) {
+		if (!this.face.equals(name)) {
+			this.face = name;
+			_face.setVisible(!name.isEmpty());
+			_face.setName(name);
+			updateLayout();
+		}
+		return this;
+	}
+
+	@Override
+	public Container updateLayout() {
+		super.updateLayout();
+		_armor.setWidth((_armor.getContainer().getWidth() * armor) / 100).setDirty(true);
+		_health.setWidth((_health.getContainer().getWidth() * health) / 100).setDirty(true);
+		return this;
+	}
 }

+ 236 - 236
src/plugin.yml → src/main/java/plugin.yml

@@ -1,236 +1,236 @@
-name: mcMMO
-main: com.gmail.nossr50.mcMMO
-version: 1.2.07
-softdepend: [Spout]
-author: nossr50
-description: mcMMO takes core Minecraft game mechanics and expands them to add an extensive RPG experience, the goal of the project has always been a quality RPG experience. Everything in mcMMO is carefully thought out and is constantly improving. mcMMO adds eleven skills to train in and level in, while also offering a high level of customization for server admins. There are countless features, including custom sounds, graphical elements, and more added when running mcMMO in conjunction with Spout. I carefully read feedback and evaluate the mechanics of mcMMO in every update to provide an ever-evolving experience.
-commands:
-    mchud:
-        description: Change your HUD
-    xplock:
-        description: Lock your xp bar
-    xprate:
-        description: Modify the xp rate or start an event
-    mcc:
-        description: Lists mcMMO commands
-    mcmmo:
-        description: Shows a brief mod description
-    mctop:
-        description: Shows leader boards for mcMMO
-    addxp:
-        description: Add XP to a user
-        permission: mcmmo.tools.mmoedit
-    mcability:
-        description: Toggle whether or not abilities get readied on right click
-        permission: mcmmo.commands.ability
-    mcrefresh:
-        description: Refresh all cooldowns for mcMMO
-        permission: mcmmo.tools.mcrefresh
-    mcgod:
-        description: Make yourself invulnerable
-        permission: mcmmo.tools.mcgod        
-    stats:
-        description: Shows your mcMMO stats and xp
-    mmoedit:
-        description: Edit the skill values for a user
-        permission: mcmmo.tools.mmoedit
-    ptp:
-        description: Teleport to a party member
-        permission: mcmmo.commands.ptp
-    party:
-        description: Create/join a party
-        permission: mcmmo.commands.party
-    myspawn:
-        description: Teleport to your MySpawn
-        permission: mcmmo.commands.myspawn
-    whois:
-        description: View mcMMO stats of another player
-    invite:
-        description: Invite a player into your party
-        permission: mcmmo.chat.partychat
-    accept:
-        description: Accept a party invite
-        permission: mcmmo.chat.partychat
-    clearmyspawn:
-        description: Clear your MySpawn location
-        permission: mcmmo.commands.myspawn
-    mmoupdate:
-        description: Convert from Flat File to MySQL
-        permission: mcmmo.admin
-    p:
-        description: Toggle Party chat or send party chat messages
-        permission: mcmmo.chat.partychat
-    excavation:
-        description: Detailed skill info
-    herbalism:
-        description: Detailed skill info
-    mining:
-        description: Detailed skill info
-    woodcutting:
-        description: Detailed skill info
-    axes:
-        description: Detailed skill info
-    archery:
-        description: Detailed skill info
-    swords:
-        description: Detailed skill info
-    taming:
-        description: Detailed skill info
-    unarmed:
-        description: Detailed skill info
-    acrobatics:
-        description: Detailed skill info
-    repair:
-        description: Detailed skill info
-    fishing:
-        description: Detailed skill info
-    a:
-        description: Toggle Admin chat or send admin chat messages
-        permission: mcmmo.chat.adminchat
-permissions:
-    mcmmo.*:
-        description: Implies all mcmmo permissions.
-        children:
-            mcmmo.defaults: true
-            #Instead of containing mcmmo.defaultsop on its own, it should specify each of mcmmo.defaultsop
-            mcmmo.admin: true
-            mcmmo.tools.*: true
-            mcmmo.chat.adminchat: true 
-            
-    mcmmo.defaults:
-        default: true
-        description: mcmmo permisions that default to true
-        children:
-            mcmmo.ability.*: true 
-            mcmmo.item.*: true 
-            mcmmo.tools.*: true 
-            mcmmo.regeneration: true 
-            mcmmo.motd: true 
-            mcmmo.commands.*: true 
-            mcmmo.chat.partychat: true 
-            mcmmo.skills.*: true
-            mcmmo.tools.*: false
-        
-    mcmmo.defaultsop:
-        default: op
-        description: mcmmo permissions that default to op
-        children:
-            mcmmo.chat.adminchat: true 
-    
-    mcmmo.admin:
-        description:        
-    mcmmo.tools.*:
-        description: Implies all mcmmo.tools permissions.
-        children:
-            mcmmo.tools.mcrefresh: true 
-            mcmmo.tools.mmoedit: true 
-            mcmmo.tools.mcgod: true 
-    mcmmo.tools.mcrefresh:
-        description:
-    mcmmo.tools.mmoedit:
-        description:
-    mcmmo.tools.mcgod:
-        description:        
-    mcmmo.ability.*:
-        description: Implies all mcmmo.ability permissions.
-        children:
-            mcmmo.ability.herbalism: true 
-            mcmmo.ability.excavation: true 
-            mcmmo.ability.unarmed: true 
-            mcmmo.ability.mining: true 
-            mcmmo.ability.axes: true 
-            mcmmo.ability.swords: true 
-            mcmmo.ability.woodcutting: true 
-    mcmmo.ability.herbalism:
-        description:
-    mcmmo.ability.excavation:
-        description:
-    mcmmo.ability.unarmed:
-        description:
-    mcmmo.ability.mining:
-        description:
-    mcmmo.ability.axes:
-        description:
-    mcmmo.ability.swords:
-        description:
-    mcmmo.ability.woodcutting:
-        description:        
-    mcmmo.item.*:
-        description: Implies all mcmmo.item permissions.
-        children:
-            mcmmo.item.chimaerawing: true 
-    mcmmo.item.chimaerawing:
-        description:        
-    mcmmo.regeneration:
-        description:        
-    mcmmo.motd:
-        description:        
-    mcmmo.commands.*:
-        description: Implies all mcmmo.commands permissions.
-        children:
-            mcmmo.commands.ability: true 
-            mcmmo.commands.myspawn: true 
-            mcmmo.commands.setmyspawn: true 
-            mcmmo.commands.ptp: true 
-            mcmmo.commands.whois: true 
-            mcmmo.commands.party: true 
-    mcmmo.commands.ability:
-        description:
-    mcmmo.commands.myspawn:
-        description:
-    mcmmo.commands.setmyspawn:
-        description:
-    mcmmo.commands.ptp:
-        description:
-    mcmmo.commands.whois:
-        description:
-    mcmmo.commands.party:
-        description:        
-    mcmmo.chat.*:
-        description: Implies all mcmmo.chat permissions. (Warning, contains adminchat)
-        children:
-            mcmmo.chat.adminchat: true 
-            mcmmo.chat.partychat: true 
-    mcmmo.chat.adminchat:
-        description: Allows participation in admin chat
-    mcmmo.chat.partychat:
-        description: Allows participation in party chat
-    mcmmo.skills.*:
-        description: Implies all mcmmo.skills permissions.
-        children:
-            mcmmo.skills.alchemy: true
-            mcmmo.skills.enchanting: true
-            mcmmo.skills.fishing: true
-            mcmmo.skills.taming: true 
-            mcmmo.skills.mining: true 
-            mcmmo.skills.woodcutting: true 
-            mcmmo.skills.repair: true 
-            mcmmo.skills.unarmed: true 
-            mcmmo.skills.archery: true 
-            mcmmo.skills.herbalism: true 
-            mcmmo.skills.excavation: true 
-            mcmmo.skills.swords: true 
-            mcmmo.skills.axes: true 
-            mcmmo.skills.acrobatics: true
-    mcmmo.skills.taming:
-        description:
-    mcmmo.skills.mining:
-        description:
-    mcmmo.skills.woodcutting:
-        description:
-    mcmmo.skills.repair:
-        description:
-    mcmmo.skills.unarmed:
-        description:
-    mcmmo.skills.archery:
-        description:
-    mcmmo.skills.herbalism:
-        description:
-    mcmmo.skills.excavation:
-        description:
-    mcmmo.skills.swords:
-        description:
-    mcmmo.skills.axes:
-        description:
-    mcmmo.skills.acrobatics:
-        description:
+name: mcMMO
+main: com.gmail.nossr50.mcMMO
+version: 1.2.07
+softdepend: [Spout]
+author: nossr50
+description: mcMMO takes core Minecraft game mechanics and expands them to add an extensive RPG experience, the goal of the project has always been a quality RPG experience. Everything in mcMMO is carefully thought out and is constantly improving. mcMMO adds eleven skills to train in and level in, while also offering a high level of customization for server admins. There are countless features, including custom sounds, graphical elements, and more added when running mcMMO in conjunction with Spout. I carefully read feedback and evaluate the mechanics of mcMMO in every update to provide an ever-evolving experience.
+commands:
+    mchud:
+        description: Change your HUD
+    xplock:
+        description: Lock your xp bar
+    xprate:
+        description: Modify the xp rate or start an event
+    mcc:
+        description: Lists mcMMO commands
+    mcmmo:
+        description: Shows a brief mod description
+    mctop:
+        description: Shows leader boards for mcMMO
+    addxp:
+        description: Add XP to a user
+        permission: mcmmo.tools.mmoedit
+    mcability:
+        description: Toggle whether or not abilities get readied on right click
+        permission: mcmmo.commands.ability
+    mcrefresh:
+        description: Refresh all cooldowns for mcMMO
+        permission: mcmmo.tools.mcrefresh
+    mcgod:
+        description: Make yourself invulnerable
+        permission: mcmmo.tools.mcgod        
+    stats:
+        description: Shows your mcMMO stats and xp
+    mmoedit:
+        description: Edit the skill values for a user
+        permission: mcmmo.tools.mmoedit
+    ptp:
+        description: Teleport to a party member
+        permission: mcmmo.commands.ptp
+    party:
+        description: Create/join a party
+        permission: mcmmo.commands.party
+    myspawn:
+        description: Teleport to your MySpawn
+        permission: mcmmo.commands.myspawn
+    whois:
+        description: View mcMMO stats of another player
+    invite:
+        description: Invite a player into your party
+        permission: mcmmo.chat.partychat
+    accept:
+        description: Accept a party invite
+        permission: mcmmo.chat.partychat
+    clearmyspawn:
+        description: Clear your MySpawn location
+        permission: mcmmo.commands.myspawn
+    mmoupdate:
+        description: Convert from Flat File to MySQL
+        permission: mcmmo.admin
+    p:
+        description: Toggle Party chat or send party chat messages
+        permission: mcmmo.chat.partychat
+    excavation:
+        description: Detailed skill info
+    herbalism:
+        description: Detailed skill info
+    mining:
+        description: Detailed skill info
+    woodcutting:
+        description: Detailed skill info
+    axes:
+        description: Detailed skill info
+    archery:
+        description: Detailed skill info
+    swords:
+        description: Detailed skill info
+    taming:
+        description: Detailed skill info
+    unarmed:
+        description: Detailed skill info
+    acrobatics:
+        description: Detailed skill info
+    repair:
+        description: Detailed skill info
+    fishing:
+        description: Detailed skill info
+    a:
+        description: Toggle Admin chat or send admin chat messages
+        permission: mcmmo.chat.adminchat
+permissions:
+    mcmmo.*:
+        description: Implies all mcmmo permissions.
+        children:
+            mcmmo.defaults: true
+            #Instead of containing mcmmo.defaultsop on its own, it should specify each of mcmmo.defaultsop
+            mcmmo.admin: true
+            mcmmo.tools.*: true
+            mcmmo.chat.adminchat: true 
+            
+    mcmmo.defaults:
+        default: true
+        description: mcmmo permisions that default to true
+        children:
+            mcmmo.ability.*: true 
+            mcmmo.item.*: true 
+            mcmmo.tools.*: true 
+            mcmmo.regeneration: true 
+            mcmmo.motd: true 
+            mcmmo.commands.*: true 
+            mcmmo.chat.partychat: true 
+            mcmmo.skills.*: true
+            mcmmo.tools.*: false
+        
+    mcmmo.defaultsop:
+        default: op
+        description: mcmmo permissions that default to op
+        children:
+            mcmmo.chat.adminchat: true 
+    
+    mcmmo.admin:
+        description:        
+    mcmmo.tools.*:
+        description: Implies all mcmmo.tools permissions.
+        children:
+            mcmmo.tools.mcrefresh: true 
+            mcmmo.tools.mmoedit: true 
+            mcmmo.tools.mcgod: true 
+    mcmmo.tools.mcrefresh:
+        description:
+    mcmmo.tools.mmoedit:
+        description:
+    mcmmo.tools.mcgod:
+        description:        
+    mcmmo.ability.*:
+        description: Implies all mcmmo.ability permissions.
+        children:
+            mcmmo.ability.herbalism: true 
+            mcmmo.ability.excavation: true 
+            mcmmo.ability.unarmed: true 
+            mcmmo.ability.mining: true 
+            mcmmo.ability.axes: true 
+            mcmmo.ability.swords: true 
+            mcmmo.ability.woodcutting: true 
+    mcmmo.ability.herbalism:
+        description:
+    mcmmo.ability.excavation:
+        description:
+    mcmmo.ability.unarmed:
+        description:
+    mcmmo.ability.mining:
+        description:
+    mcmmo.ability.axes:
+        description:
+    mcmmo.ability.swords:
+        description:
+    mcmmo.ability.woodcutting:
+        description:        
+    mcmmo.item.*:
+        description: Implies all mcmmo.item permissions.
+        children:
+            mcmmo.item.chimaerawing: true 
+    mcmmo.item.chimaerawing:
+        description:        
+    mcmmo.regeneration:
+        description:        
+    mcmmo.motd:
+        description:        
+    mcmmo.commands.*:
+        description: Implies all mcmmo.commands permissions.
+        children:
+            mcmmo.commands.ability: true 
+            mcmmo.commands.myspawn: true 
+            mcmmo.commands.setmyspawn: true 
+            mcmmo.commands.ptp: true 
+            mcmmo.commands.whois: true 
+            mcmmo.commands.party: true 
+    mcmmo.commands.ability:
+        description:
+    mcmmo.commands.myspawn:
+        description:
+    mcmmo.commands.setmyspawn:
+        description:
+    mcmmo.commands.ptp:
+        description:
+    mcmmo.commands.whois:
+        description:
+    mcmmo.commands.party:
+        description:        
+    mcmmo.chat.*:
+        description: Implies all mcmmo.chat permissions. (Warning, contains adminchat)
+        children:
+            mcmmo.chat.adminchat: true 
+            mcmmo.chat.partychat: true 
+    mcmmo.chat.adminchat:
+        description: Allows participation in admin chat
+    mcmmo.chat.partychat:
+        description: Allows participation in party chat
+    mcmmo.skills.*:
+        description: Implies all mcmmo.skills permissions.
+        children:
+            mcmmo.skills.alchemy: true
+            mcmmo.skills.enchanting: true
+            mcmmo.skills.fishing: true
+            mcmmo.skills.taming: true 
+            mcmmo.skills.mining: true 
+            mcmmo.skills.woodcutting: true 
+            mcmmo.skills.repair: true 
+            mcmmo.skills.unarmed: true 
+            mcmmo.skills.archery: true 
+            mcmmo.skills.herbalism: true 
+            mcmmo.skills.excavation: true 
+            mcmmo.skills.swords: true 
+            mcmmo.skills.axes: true 
+            mcmmo.skills.acrobatics: true
+    mcmmo.skills.taming:
+        description:
+    mcmmo.skills.mining:
+        description:
+    mcmmo.skills.woodcutting:
+        description:
+    mcmmo.skills.repair:
+        description:
+    mcmmo.skills.unarmed:
+        description:
+    mcmmo.skills.archery:
+        description:
+    mcmmo.skills.herbalism:
+        description:
+    mcmmo.skills.excavation:
+        description:
+    mcmmo.skills.swords:
+        description:
+    mcmmo.skills.axes:
+        description:
+    mcmmo.skills.acrobatics:
+        description:

+ 0 - 0
src/resources/Acrobatics.png → src/main/resources/Acrobatics.png


+ 0 - 0
src/resources/Acrobatics_r.png → src/main/resources/Acrobatics_r.png


+ 0 - 0
src/resources/Archery.png → src/main/resources/Archery.png


+ 0 - 0
src/resources/Archery_r.png → src/main/resources/Archery_r.png


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor