mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 02:53:43 +01:00 
			
		
		
		
	Phase 1 of moving crap around in the interest of my sanity. Also currently does not build due to a
craftbukkit dep. (ColoredConsoleSender isn't in bukkit, if you are building this, switch to cb for now in your library deps.) UNTESTED.
This commit is contained in:
		
							
								
								
									
										407
									
								
								src/com/gmail/nossr50/Combat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										407
									
								
								src/com/gmail/nossr50/Combat.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,407 @@
 | 
			
		||||
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)
 | 
			
		||||
			    			{
 | 
			
		||||
			    				int xp = (int) (event.getDamage() * 2 * LoadProperties.pvpxprewardmodifier);
 | 
			
		||||
			    				
 | 
			
		||||
				    			if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
 | 
			
		||||
				    				PPa.addXP(SkillType.AXES, xp*10);
 | 
			
		||||
				    			if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
 | 
			
		||||
				    				PPa.addXP(SkillType.SWORDS, xp*10);
 | 
			
		||||
				    			if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
 | 
			
		||||
				    				PPa.addXP(SkillType.UNARMED, xp*10);
 | 
			
		||||
			    			}
 | 
			
		||||
			    		}
 | 
			
		||||
		      		}
 | 
			
		||||
		      		
 | 
			
		||||
		      		if(event.getEntity() instanceof Monster && !pluginx.misc.mobSpawnerList.contains(event.getEntity()))
 | 
			
		||||
		      		{
 | 
			
		||||
		      			int xp = 0;
 | 
			
		||||
		      			if(event.getEntity() instanceof Creeper)
 | 
			
		||||
							xp = (event.getDamage() * 4);
 | 
			
		||||
						if(event.getEntity() instanceof Spider)
 | 
			
		||||
							xp = (event.getDamage() * 3);
 | 
			
		||||
						if(event.getEntity() instanceof Skeleton)
 | 
			
		||||
							xp = (event.getDamage() * 2);
 | 
			
		||||
						if(event.getEntity() instanceof Zombie)
 | 
			
		||||
							xp = (event.getDamage() * 2);
 | 
			
		||||
						if(event.getEntity() instanceof PigZombie)
 | 
			
		||||
							xp = (event.getDamage() * 3);
 | 
			
		||||
						if(event.getEntity() instanceof Slime)
 | 
			
		||||
							xp = (event.getDamage() * 3);
 | 
			
		||||
						if(event.getEntity() instanceof Ghast)
 | 
			
		||||
							xp = (event.getDamage() * 3);
 | 
			
		||||
 | 
			
		||||
						if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
 | 
			
		||||
							PPa.addXP(SkillType.SWORDS, xp*10);
 | 
			
		||||
						else if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
 | 
			
		||||
							PPa.addXP(SkillType.AXES, xp*10);
 | 
			
		||||
						else if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
 | 
			
		||||
							PPa.addXP(SkillType.UNARMED, xp*10);
 | 
			
		||||
		      		}
 | 
			
		||||
		      		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 = 0;
 | 
			
		||||
						if(event.getEntity() instanceof Monster)
 | 
			
		||||
						{
 | 
			
		||||
			      			if(event.getEntity() instanceof Creeper)
 | 
			
		||||
								xp = (event.getDamage() * 6);
 | 
			
		||||
							if(event.getEntity() instanceof Spider)
 | 
			
		||||
								xp = (event.getDamage() * 5);
 | 
			
		||||
							if(event.getEntity() instanceof Skeleton)
 | 
			
		||||
								xp = (event.getDamage() * 3);
 | 
			
		||||
							if(event.getEntity() instanceof Zombie)
 | 
			
		||||
								xp = (event.getDamage() * 3);
 | 
			
		||||
							if(event.getEntity() instanceof PigZombie)
 | 
			
		||||
								xp = (event.getDamage() * 4);
 | 
			
		||||
							if(event.getEntity() instanceof Slime)
 | 
			
		||||
								xp = (event.getDamage() * 4);
 | 
			
		||||
							if(event.getEntity() instanceof Ghast)
 | 
			
		||||
								xp = (event.getDamage() * 4);
 | 
			
		||||
							Users.getProfile(master).addXP(SkillType.TAMING, xp*10);
 | 
			
		||||
						}
 | 
			
		||||
						if(event.getEntity() instanceof Player)
 | 
			
		||||
						{
 | 
			
		||||
							xp = (event.getDamage() * 2);
 | 
			
		||||
							Users.getProfile(master).addXP(SkillType.TAMING, xp*10);
 | 
			
		||||
						}
 | 
			
		||||
						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)
 | 
			
		||||
		{
 | 
			
		||||
			Player defender = (Player)event.getEntity();
 | 
			
		||||
			Swords.parryCheck((EntityDamageByEntityEvent) event, defender);
 | 
			
		||||
			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);
 | 
			
		||||
    			/*
 | 
			
		||||
    			 * DAMAGE MODIFIER
 | 
			
		||||
    			 */
 | 
			
		||||
    			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 50 && PPa.getSkillLevel(SkillType.ARCHERY) < 250)
 | 
			
		||||
    				event.setDamage(event.getDamage()+1);
 | 
			
		||||
    			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 250 && PPa.getSkillLevel(SkillType.ARCHERY) < 575)
 | 
			
		||||
    				event.setDamage(event.getDamage()+2);
 | 
			
		||||
    			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 575 && PPa.getSkillLevel(SkillType.ARCHERY) < 725)
 | 
			
		||||
    				event.setDamage(event.getDamage()+3);
 | 
			
		||||
    			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 725 && PPa.getSkillLevel(SkillType.ARCHERY) < 1000)
 | 
			
		||||
    				event.setDamage(event.getDamage()+4);
 | 
			
		||||
    			if(PPa.getSkillLevel(SkillType.ARCHERY) >= 1000)
 | 
			
		||||
    				event.setDamage(event.getDamage()+5);
 | 
			
		||||
    			
 | 
			
		||||
    			/*
 | 
			
		||||
    			 * IGNITION
 | 
			
		||||
    			 */
 | 
			
		||||
    			Archery.ignitionCheck(x, event, attacker);
 | 
			
		||||
    		/*
 | 
			
		||||
    		 * Defender is Monster
 | 
			
		||||
    		 */
 | 
			
		||||
    		if(!pluginx.misc.mobSpawnerList.contains(x) && x instanceof Monster)
 | 
			
		||||
    		{
 | 
			
		||||
    			//XP
 | 
			
		||||
    			if(x instanceof Creeper)
 | 
			
		||||
    				PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 4)*10);
 | 
			
		||||
				if(x instanceof Spider)
 | 
			
		||||
					PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 3)*10);
 | 
			
		||||
				if(x instanceof Skeleton)
 | 
			
		||||
					PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 2)*10);
 | 
			
		||||
				if(x instanceof Zombie)
 | 
			
		||||
					PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 2)*10);
 | 
			
		||||
				if(x instanceof PigZombie)
 | 
			
		||||
					PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 3)*10);
 | 
			
		||||
				if(x instanceof Slime)
 | 
			
		||||
					PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 3)*10);
 | 
			
		||||
				if(x instanceof Ghast)
 | 
			
		||||
					PPa.addXP(SkillType.ARCHERY, (event.getDamage() * 3)*10);
 | 
			
		||||
    		}
 | 
			
		||||
    		/*
 | 
			
		||||
    		 * 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);
 | 
			
		||||
    	    		}
 | 
			
		||||
    				/*
 | 
			
		||||
    				 * 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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										259
									
								
								src/com/gmail/nossr50/Database.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								src/com/gmail/nossr50/Database.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,259 @@
 | 
			
		||||
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 org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.avaje.ebeaninternal.server.lib.sql.DataSourceException;
 | 
			
		||||
import com.gmail.nossr50.config.LoadProperties;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class Database {
 | 
			
		||||
 | 
			
		||||
	private Connection conn;
 | 
			
		||||
	private mcMMO plugin;
 | 
			
		||||
	
 | 
			
		||||
	public Database(mcMMO instance) 
 | 
			
		||||
	{
 | 
			
		||||
		plugin = instance;
 | 
			
		||||
		// Load the driver instance
 | 
			
		||||
		try {
 | 
			
		||||
            Class.forName("com.mysql.jdbc.Driver").newInstance();
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
        	throw new DataSourceException("Failed to initialize JDBC driver");
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
		// make the connection
 | 
			
		||||
		try {
 | 
			
		||||
		    conn = DriverManager.getConnection("jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass);			
 | 
			
		||||
		} catch (SQLException ex) {
 | 
			
		||||
		    // handle any errors
 | 
			
		||||
		    System.out.println("SQLException: " + ex.getMessage());
 | 
			
		||||
		    System.out.println("SQLState: " + ex.getSQLState());
 | 
			
		||||
		    System.out.println("VendorError: " + ex.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;");
 | 
			
		||||
	}
 | 
			
		||||
	// check if its closed
 | 
			
		||||
	private void reconnect()
 | 
			
		||||
	{
 | 
			
		||||
		System.out.println("[mcMMO] Reconnecting to MySQL...");
 | 
			
		||||
		try 
 | 
			
		||||
		{
 | 
			
		||||
		    conn = DriverManager.getConnection("jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass);			
 | 
			
		||||
		    
 | 
			
		||||
		    System.out.println("[mcMMO] Connection success!");
 | 
			
		||||
		} catch (SQLException ex) 
 | 
			
		||||
		{
 | 
			
		||||
			System.out.println("[mcMMO] Connection to MySQL failed! Check status of MySQL server!");
 | 
			
		||||
		    System.out.println("SQLException: " + ex.getMessage());
 | 
			
		||||
		    System.out.println("SQLState: " + ex.getSQLState());
 | 
			
		||||
		    System.out.println("VendorError: " + ex.getErrorCode());
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		try {
 | 
			
		||||
			if(conn.isValid(5)){
 | 
			
		||||
				Users.clearUsers();
 | 
			
		||||
				
 | 
			
		||||
				for(Player x : plugin.getServer().getOnlinePlayers())
 | 
			
		||||
				{
 | 
			
		||||
					Users.addUser(x);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		} catch (SQLException e) {
 | 
			
		||||
			//Herp
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// write query
 | 
			
		||||
	public boolean Write(String sql) 
 | 
			
		||||
	{
 | 
			
		||||
		/*
 | 
			
		||||
		 * Double check connection to MySQL
 | 
			
		||||
		 */
 | 
			
		||||
		try 
 | 
			
		||||
		{
 | 
			
		||||
			if(!conn.isValid(5))
 | 
			
		||||
			{
 | 
			
		||||
			reconnect();
 | 
			
		||||
			}
 | 
			
		||||
		} catch (SQLException e) 
 | 
			
		||||
		{
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
		try 
 | 
			
		||||
			{
 | 
			
		||||
		  		PreparedStatement stmt = null;
 | 
			
		||||
		  		stmt = this.conn.prepareStatement(sql);
 | 
			
		||||
		  		stmt.executeUpdate();
 | 
			
		||||
		  		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) {
 | 
			
		||||
  		PreparedStatement stmt = null;
 | 
			
		||||
		ResultSet rs = null;
 | 
			
		||||
		Integer result = 0;
 | 
			
		||||
		
 | 
			
		||||
		/*
 | 
			
		||||
		 * Double check connection to MySQL
 | 
			
		||||
		 */
 | 
			
		||||
		try 
 | 
			
		||||
		{
 | 
			
		||||
			if(!conn.isValid(5))
 | 
			
		||||
			{
 | 
			
		||||
			reconnect();
 | 
			
		||||
			}
 | 
			
		||||
		} catch (SQLException e) 
 | 
			
		||||
		{
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		try {
 | 
			
		||||
			stmt = this.conn.prepareStatement(sql);
 | 
			
		||||
		    if (stmt.executeQuery() != null) {
 | 
			
		||||
		    	stmt.executeQuery();
 | 
			
		||||
		        rs = stmt.getResultSet();
 | 
			
		||||
		        if(rs.next()){
 | 
			
		||||
		        	result = rs.getInt(1);
 | 
			
		||||
		        }
 | 
			
		||||
		        else { result = 0; }
 | 
			
		||||
		    }
 | 
			
		||||
		} 
 | 
			
		||||
		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) {
 | 
			
		||||
		/*
 | 
			
		||||
		 * Double check connection to MySQL
 | 
			
		||||
		 */
 | 
			
		||||
		try 
 | 
			
		||||
		{
 | 
			
		||||
			if(!conn.isValid(5))
 | 
			
		||||
			{
 | 
			
		||||
			reconnect();
 | 
			
		||||
			}
 | 
			
		||||
		} catch (SQLException e) 
 | 
			
		||||
		{
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
  		PreparedStatement stmt = null;
 | 
			
		||||
		ResultSet rs = null;
 | 
			
		||||
		HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
 | 
			
		||||
		
 | 
			
		||||
		try {
 | 
			
		||||
			stmt = this.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);
 | 
			
		||||
				}
 | 
			
		||||
			}	    
 | 
			
		||||
		}
 | 
			
		||||
		catch (SQLException ex) {
 | 
			
		||||
		    System.out.println("SQLException: " + ex.getMessage());
 | 
			
		||||
		    System.out.println("SQLState: " + ex.getSQLState());
 | 
			
		||||
		    System.out.println("VendorError: " + ex.getErrorCode());
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// release dataset
 | 
			
		||||
	    if (rs != null) {
 | 
			
		||||
	        try {
 | 
			
		||||
	            rs.close();
 | 
			
		||||
	        } catch (SQLException sqlEx) { } // ignore
 | 
			
		||||
	        rs = null;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (stmt != null) {
 | 
			
		||||
	        try {
 | 
			
		||||
	            stmt.close();
 | 
			
		||||
	        } catch (SQLException sqlEx) { } // ignore
 | 
			
		||||
	        stmt = null;
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
		return Rows;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										89
									
								
								src/com/gmail/nossr50/Item.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/com/gmail/nossr50/Item.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
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$
 | 
			
		||||
    		}
 | 
			
		||||
    	}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										245
									
								
								src/com/gmail/nossr50/Leaderboard.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								src/com/gmail/nossr50/Leaderboard.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,245 @@
 | 
			
		||||
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.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 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$
 | 
			
		||||
        	while((line = in.readLine()) != null)
 | 
			
		||||
        	{
 | 
			
		||||
        		String[] character = line.split(":"); //$NON-NLS-1$
 | 
			
		||||
        		String p = character[0];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    			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]);
 | 
			
		||||
    			}
 | 
			
		||||
    			
 | 
			
		||||
    			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(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$
 | 
			
		||||
        }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										96
									
								
								src/com/gmail/nossr50/Users.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/com/gmail/nossr50/Users.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1587
									
								
								src/com/gmail/nossr50/command/Commands.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1587
									
								
								src/com/gmail/nossr50/command/Commands.java
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										582
									
								
								src/com/gmail/nossr50/config/LoadProperties.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										582
									
								
								src/com/gmail/nossr50/config/LoadProperties.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,582 @@
 | 
			
		||||
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 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, archeryFireRateLimit, mushrooms, 
 | 
			
		||||
	toolsLoseDurabilityFromAbilities, pvpxp, miningrequirespickaxe, 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 mwatch, xpbar_x, xpbar_y, xpicon_x, xpicon_y, partybar_x, partybar_y, partybar_spacing, mstring, mbucket, mweb,
 | 
			
		||||
	archeryLimit, chimaeraId, msandstone, mcocoa, water_thunder, cure_self, cure_other, mslimeballs, mbones, msulphur, mslowsand,
 | 
			
		||||
	mmushroom2, mglowstone2, 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, repairdiamondlevel, rWood, rStone, rIron, rGold, rDiamond;
 | 
			
		||||
	
 | 
			
		||||
	public static double xpbackground_r, xpbackground_g, xpbackground_b, xpborder_r, xpborder_g, xpborder_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.HP.Enabled", true);
 | 
			
		||||
	        write("Spout.Party.HP.X_POS", -11);
 | 
			
		||||
	        write("Spout.Party.HP.Y_POS", 0);
 | 
			
		||||
	        write("Spout.Party.HP.SPACING", 16);
 | 
			
		||||
	        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.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.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("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.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("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.Archery.Fire_Rate_Limiter.Enabled", true);
 | 
			
		||||
	    	write("Skills.Archery.Fire_Rate_Limiter.Interval", 1000);
 | 
			
		||||
	    	write("Skills.Mining.Requires_Pickaxe", true);
 | 
			
		||||
	    	write("Skills.Woodcutting.Requires_Axe", true);
 | 
			
		||||
	    	
 | 
			
		||||
	    	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;
 | 
			
		||||
	        	}
 | 
			
		||||
	        }
 | 
			
		||||
	        
 | 
			
		||||
	        donateMessage = readBoolean("Commands.mcmmo.Donate_Message", true);
 | 
			
		||||
	        xpGainsMobSpawners = readBoolean("XP.Gains.Mobspawners.Enabled", false);
 | 
			
		||||
	        
 | 
			
		||||
	        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);
 | 
			
		||||
	        partybar = readBoolean("Spout.Party.HP.Enabled", true);
 | 
			
		||||
	        partybar_x = readInteger("Spout.Party.HP.X_POS", -11);
 | 
			
		||||
	        partybar_y = readInteger("Spout.Party.HP.Y_POS", 0);
 | 
			
		||||
	        partybar_spacing = readInteger("Spout.Party.HP.SPACING", 16);
 | 
			
		||||
	        
 | 
			
		||||
	        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);
 | 
			
		||||
	        
 | 
			
		||||
	        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);
 | 
			
		||||
	    	
 | 
			
		||||
	    	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);
 | 
			
		||||
	        
 | 
			
		||||
	        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);
 | 
			
		||||
	    	archeryFireRateLimit = readBoolean("Skills.Archery.Fire_Rate_Limiter.Enabled", true);
 | 
			
		||||
	    	archeryLimit = readInteger("Skills.Archery.Fire_Rate_Limiter.Interval", 1000);
 | 
			
		||||
	    	
 | 
			
		||||
	    	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);
 | 
			
		||||
	    	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");
 | 
			
		||||
	        }
 | 
			
		||||
	}
 | 
			
		||||
							
								
								
									
										74
									
								
								src/com/gmail/nossr50/config/Misc.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/com/gmail/nossr50/config/Misc.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
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;
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								src/com/gmail/nossr50/datatypes/FakeBlockBreakEvent.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/com/gmail/nossr50/datatypes/FakeBlockBreakEvent.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								src/com/gmail/nossr50/datatypes/HUDType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/com/gmail/nossr50/datatypes/HUDType.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes;
 | 
			
		||||
 | 
			
		||||
public enum HUDType 
 | 
			
		||||
{
 | 
			
		||||
	STANDARD,
 | 
			
		||||
	SMALL,
 | 
			
		||||
	RETRO;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										256
									
								
								src/com/gmail/nossr50/datatypes/HUDmmo.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								src/com/gmail/nossr50/datatypes/HUDmmo.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,256 @@
 | 
			
		||||
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;
 | 
			
		||||
import com.gmail.nossr50.spout.mmoHelper;
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
	{
 | 
			
		||||
		HUDType type = Users.getProfile(player).getHUDType();
 | 
			
		||||
		switch(type)
 | 
			
		||||
		{
 | 
			
		||||
			case RETRO:
 | 
			
		||||
			{
 | 
			
		||||
				initializeXpBarDisplayRetro(SpoutManager.getPlayer(player));
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case STANDARD:
 | 
			
		||||
			{
 | 
			
		||||
				initializeXpBarDisplayStandard(SpoutManager.getPlayer(player));
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case SMALL:
 | 
			
		||||
			{
 | 
			
		||||
				initializeXpBarDisplaySmall(SpoutManager.getPlayer(player));
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	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;
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void resetHUD()
 | 
			
		||||
	{
 | 
			
		||||
		SpoutPlayer sPlayer = SpoutStuff.getSpoutPlayer(playerName);
 | 
			
		||||
		if(sPlayer != null)
 | 
			
		||||
		{
 | 
			
		||||
			sPlayer.getMainScreen().removeWidgets(plugin);
 | 
			
		||||
			
 | 
			
		||||
			//Reset the objects
 | 
			
		||||
			xpbar = null;
 | 
			
		||||
			xpfill = null;
 | 
			
		||||
			xpbg = null;
 | 
			
		||||
			xpicon = null;
 | 
			
		||||
			
 | 
			
		||||
			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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								src/com/gmail/nossr50/datatypes/HealthBarMMO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/com/gmail/nossr50/datatypes/HealthBarMMO.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.getspout.spoutapi.gui.GenericLabel;
 | 
			
		||||
import org.getspout.spoutapi.gui.GenericTexture;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.spout.SpoutStuff;
 | 
			
		||||
 | 
			
		||||
public class HealthBarMMO
 | 
			
		||||
{
 | 
			
		||||
	public GenericTexture health_bar = null;
 | 
			
		||||
	public GenericLabel health_name = null;
 | 
			
		||||
	public String playerName = null;
 | 
			
		||||
	
 | 
			
		||||
	public HealthBarMMO(LivingEntity entity, String name)
 | 
			
		||||
	{
 | 
			
		||||
		health_name = new GenericLabel();
 | 
			
		||||
		health_name.setText(ChatColor.GREEN+name).setDirty(true);
 | 
			
		||||
		
 | 
			
		||||
		health_bar = new GenericTexture();
 | 
			
		||||
		health_bar.setUrl(SpoutStuff.getHealthBarURL(entity.getHealth())).setHeight(8).setWidth(64).setDirty(true);
 | 
			
		||||
		
 | 
			
		||||
		playerName = name;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								src/com/gmail/nossr50/datatypes/Mob.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/com/gmail/nossr50/datatypes/Mob.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.*;
 | 
			
		||||
 | 
			
		||||
public class Mob
 | 
			
		||||
{
 | 
			
		||||
	public HashMap<Integer, Short> mobDiff = new HashMap<Integer, Short>();
 | 
			
		||||
	public HashMap<Integer, Boolean> isAggressive = new HashMap<Integer, Boolean>();
 | 
			
		||||
	
 | 
			
		||||
	public void assignDifficulty(Entity entity)
 | 
			
		||||
	{
 | 
			
		||||
		short x = 0;
 | 
			
		||||
		
 | 
			
		||||
		if(entity.getLocation().getY() >= 45)
 | 
			
		||||
		{
 | 
			
		||||
			//LEVEL 2
 | 
			
		||||
			if(Math.random() * 100 > 50)
 | 
			
		||||
			{
 | 
			
		||||
				x = 0;
 | 
			
		||||
			}
 | 
			
		||||
			//LEVEL 3
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				x = 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			double y = Math.random() * 100;
 | 
			
		||||
			//HIGH CHANCE FOR 5's
 | 
			
		||||
			if(entity.getLocation().getY() < 20)
 | 
			
		||||
			{
 | 
			
		||||
				//ASSIGN INTO THE 5 RANKS
 | 
			
		||||
				if(y >= 0 && y < 50)
 | 
			
		||||
					x = 0;
 | 
			
		||||
				if(y >= 50 && y < 80)
 | 
			
		||||
					x = 1;
 | 
			
		||||
				if(y >= 80 && y < 95)
 | 
			
		||||
					x = 2;
 | 
			
		||||
				if(y >= 95 && y < 98)
 | 
			
		||||
					x = 3;
 | 
			
		||||
				if(y >= 98 && y <= 100)
 | 
			
		||||
					x = 4;
 | 
			
		||||
			}
 | 
			
		||||
			//HIGH CHANCE FOR 4's
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				//ASSIGN INTO THE 5 RANKS
 | 
			
		||||
				if(y >= 0 && y < 50)
 | 
			
		||||
					x = 0;
 | 
			
		||||
				if(y >= 50 && y < 74)
 | 
			
		||||
					x = 1;
 | 
			
		||||
				if(y >= 74 && y < 89)
 | 
			
		||||
					x = 2;
 | 
			
		||||
				if(y >= 89 && y < 99)
 | 
			
		||||
					x = 3;
 | 
			
		||||
				if(y >= 99 && y <= 100)
 | 
			
		||||
					x = 4;
 | 
			
		||||
			}
 | 
			
		||||
				if(x > 1)
 | 
			
		||||
				{
 | 
			
		||||
					isAggressive.put(entity.getEntityId(), false);
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if(!mobDiff.containsKey(entity.getEntityId()))
 | 
			
		||||
		{
 | 
			
		||||
			mobDiff.put(entity.getEntityId(), x);
 | 
			
		||||
			//System.out.println("Mob "+entity.getEntityId()+" (DIFFICULTY) "+
 | 
			
		||||
					//(x +1)+"(DEPTH) "+entity.getLocation().getY());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1129
									
								
								src/com/gmail/nossr50/datatypes/PlayerProfile.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1129
									
								
								src/com/gmail/nossr50/datatypes/PlayerProfile.java
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								src/com/gmail/nossr50/datatypes/PlayerStat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/com/gmail/nossr50/datatypes/PlayerStat.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes;
 | 
			
		||||
 | 
			
		||||
public class PlayerStat 
 | 
			
		||||
{
 | 
			
		||||
	public String name;
 | 
			
		||||
	public int statVal = 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								src/com/gmail/nossr50/datatypes/SkillType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/com/gmail/nossr50/datatypes/SkillType.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes;
 | 
			
		||||
 | 
			
		||||
public enum SkillType 
 | 
			
		||||
{
 | 
			
		||||
	ACROBATICS,
 | 
			
		||||
	ALL, //This one is just for convenience
 | 
			
		||||
	ARCHERY,
 | 
			
		||||
	AXES,
 | 
			
		||||
	EXCAVATION,
 | 
			
		||||
	HERBALISM,
 | 
			
		||||
	MINING,
 | 
			
		||||
	REPAIR,
 | 
			
		||||
	SWORDS,
 | 
			
		||||
	TAMING,
 | 
			
		||||
	UNARMED,
 | 
			
		||||
	WOODCUTTING;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								src/com/gmail/nossr50/datatypes/Tree.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/com/gmail/nossr50/datatypes/Tree.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
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()]);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								src/com/gmail/nossr50/datatypes/TreeNode.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/com/gmail/nossr50/datatypes/TreeNode.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								src/com/gmail/nossr50/datatypes/buttons/ButtonEscape.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/com/gmail/nossr50/datatypes/buttons/ButtonEscape.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								src/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								src/com/gmail/nossr50/datatypes/popups/PopupMMO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/com/gmail/nossr50/datatypes/popups/PopupMMO.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
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.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
 | 
			
		||||
import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
 | 
			
		||||
 | 
			
		||||
public class PopupMMO extends GenericPopup
 | 
			
		||||
{
 | 
			
		||||
	ButtonHUDStyle HUDButton = 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);
 | 
			
		||||
		
 | 
			
		||||
		EscapeButton = new ButtonEscape();
 | 
			
		||||
		EscapeButton.setX(center_x-(EscapeButton.getWidth()/2)).setY((center_y/2)+HUDButton.getHeight()+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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										436
									
								
								src/com/gmail/nossr50/listeners/mcBlockListener.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										436
									
								
								src/com/gmail/nossr50/listeners/mcBlockListener.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,436 @@
 | 
			
		||||
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);
 | 
			
		||||
	    				//Spruce
 | 
			
		||||
	    				if(block.getData() == (byte)1)
 | 
			
		||||
	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mspruce);
 | 
			
		||||
	    				//Birch
 | 
			
		||||
	    				if(block.getData() == (byte)2)
 | 
			
		||||
	    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mbirch);
 | 
			
		||||
					}
 | 
			
		||||
    			}
 | 
			
		||||
    		} else 
 | 
			
		||||
    		{
 | 
			
		||||
    			if(!plugin.misc.blockWatchList.contains(block))
 | 
			
		||||
    			{
 | 
			
		||||
	    			WoodCutting.woodCuttingProcCheck(player, block);
 | 
			
		||||
	    			//Default
 | 
			
		||||
    				if(block.getData() == (byte)0)
 | 
			
		||||
    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mpine);
 | 
			
		||||
    				//Spruce
 | 
			
		||||
    				if(block.getData() == (byte)1)
 | 
			
		||||
    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mspruce);
 | 
			
		||||
    				//Birch
 | 
			
		||||
    				if(block.getData() == (byte)2)
 | 
			
		||||
    					PP.addXP(SkillType.WOODCUTTING, LoadProperties.mbirch);
 | 
			
		||||
    			}
 | 
			
		||||
   			}
 | 
			
		||||
    		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);
 | 
			
		||||
    						}
 | 
			
		||||
    					}
 | 
			
		||||
    					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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										223
									
								
								src/com/gmail/nossr50/listeners/mcEntityListener.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								src/com/gmail/nossr50/listeners/mcEntityListener.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,223 @@
 | 
			
		||||
package com.gmail.nossr50.listeners;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Monster;
 | 
			
		||||
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.event.entity.EntityTargetEvent;
 | 
			
		||||
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);
 | 
			
		||||
    	
 | 
			
		||||
    	//cleanup mob diff
 | 
			
		||||
    	if(plugin.mob.mobDiff.containsKey(event.getEntity().getEntityId()))
 | 
			
		||||
    			plugin.mob.mobDiff.remove(event.getEntity().getEntityId());
 | 
			
		||||
    	
 | 
			
		||||
    	
 | 
			
		||||
    	//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());
 | 
			
		||||
    	} else 
 | 
			
		||||
    	{
 | 
			
		||||
    		if(event.getEntity() instanceof Monster && !plugin.mob.mobDiff.containsKey(event.getEntity().getEntityId()))
 | 
			
		||||
        		plugin.mob.assignDifficulty(event.getEntity());
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void onEntityTarget(EntityTargetEvent event) 
 | 
			
		||||
	{
 | 
			
		||||
    	
 | 
			
		||||
		int type = event.getEntity().getEntityId();
 | 
			
		||||
		//Make 3+ non-aggressive
 | 
			
		||||
		if(event.getEntity() instanceof Monster 
 | 
			
		||||
				&& plugin.mob.mobDiff.containsKey(type)
 | 
			
		||||
				&& plugin.mob.isAggressive.containsKey(type))
 | 
			
		||||
		{
 | 
			
		||||
			if(plugin.mob.mobDiff.get(type) >= 2 && plugin.mob.isAggressive.get(type) == false)
 | 
			
		||||
			{
 | 
			
		||||
				event.setCancelled(true);
 | 
			
		||||
				event.setTarget(null);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	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;
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										266
									
								
								src/com/gmail/nossr50/listeners/mcPlayerListener.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								src/com/gmail/nossr50/listeners/mcPlayerListener.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,266 @@
 | 
			
		||||
package com.gmail.nossr50.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.craftbukkit.command.ColouredConsoleSender;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.block.Action;
 | 
			
		||||
import org.bukkit.event.player.PlayerChatEvent;
 | 
			
		||||
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.command.Commands;
 | 
			
		||||
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.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 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"));
 | 
			
		||||
		}
 | 
			
		||||
		if(Commands.xpevent)
 | 
			
		||||
			player.sendMessage(ChatColor.GOLD+"mcMMO is currently in an XP rate event! XP rate is "+LoadProperties.xpGainMultiplier+"x!");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings("deprecation")
 | 
			
		||||
	public void onPlayerInteract(PlayerInteractEvent event) 
 | 
			
		||||
	{
 | 
			
		||||
		Player player = event.getPlayer();
 | 
			
		||||
		PlayerProfile PP = Users.getProfile(player);
 | 
			
		||||
		Action action = event.getAction();
 | 
			
		||||
		Block block = event.getClickedBlock();
 | 
			
		||||
		
 | 
			
		||||
		//Archery Nerf
 | 
			
		||||
		if(player.getItemInHand().getTypeId() == 261 && LoadProperties.archeryFireRateLimit)
 | 
			
		||||
		{
 | 
			
		||||
			if(System.currentTimeMillis() < (PP.getArcheryShotATS()*1000) + LoadProperties.archeryLimit)
 | 
			
		||||
			{
 | 
			
		||||
				/*
 | 
			
		||||
    			if(m.hasArrows(player))
 | 
			
		||||
    				m.addArrows(player);
 | 
			
		||||
				 */
 | 
			
		||||
				player.updateInventory();
 | 
			
		||||
				event.setCancelled(true);
 | 
			
		||||
			} else {
 | 
			
		||||
				PP.setArcheryShotATS(System.currentTimeMillis());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * 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.repairCheck(player, is, event.getClickedBlock());
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(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 && (block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT) && player.getItemInHand().getType() == Material.SEEDS)
 | 
			
		||||
			{
 | 
			
		||||
				boolean pass = false;
 | 
			
		||||
				if(Herbalism.hasSeeds(player) && mcPermissions.getInstance().herbalism(player)){
 | 
			
		||||
					Herbalism.removeSeeds(player);
 | 
			
		||||
					if(LoadProperties.enableCobbleToMossy && m.blockBreakSimulate(block, player) && block.getType() == Material.COBBLESTONE && Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM)){
 | 
			
		||||
						player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumb"));
 | 
			
		||||
						block.setType(Material.MOSSY_COBBLESTONE);
 | 
			
		||||
						pass = true;
 | 
			
		||||
					}
 | 
			
		||||
					if(block.getType() == Material.DIRT && m.blockBreakSimulate(block, player) && Math.random() * 1500 <= PP.getSkillLevel(SkillType.HERBALISM)){
 | 
			
		||||
						player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumb"));
 | 
			
		||||
						block.setType(Material.GRASS);
 | 
			
		||||
						pass = true;
 | 
			
		||||
					}
 | 
			
		||||
					if(pass == false)
 | 
			
		||||
						player.sendMessage(mcLocale.getString("mcPlayerListener.GreenThumbFail"));
 | 
			
		||||
				}
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if(action == Action.RIGHT_CLICK_AIR)
 | 
			
		||||
		{
 | 
			
		||||
			Skills.hoeReadinessCheck(player);
 | 
			
		||||
			Skills.abilityActivationCheck(player);
 | 
			
		||||
		}
 | 
			
		||||
		if(action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK)
 | 
			
		||||
		{
 | 
			
		||||
			/*
 | 
			
		||||
			 * HERBALISM MODIFIERS
 | 
			
		||||
			 */
 | 
			
		||||
			if(action == Action.RIGHT_CLICK_BLOCK && !m.abilityBlockCheck(event.getClickedBlock()))
 | 
			
		||||
			{
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			if(mcPermissions.getInstance().herbalism(player))
 | 
			
		||||
			{
 | 
			
		||||
				Herbalism.breadCheck(player, player.getItemInHand());
 | 
			
		||||
				Herbalism.stewCheck(player, player.getItemInHand());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/*
 | 
			
		||||
		 * 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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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!
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								src/com/gmail/nossr50/listeners/mcSpoutInputListener.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/com/gmail/nossr50/listeners/mcSpoutInputListener.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
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);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								src/com/gmail/nossr50/listeners/mcSpoutListener.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/com/gmail/nossr50/listeners/mcSpoutListener.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
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;
 | 
			
		||||
import com.gmail.nossr50.spout.mmoHelper;
 | 
			
		||||
 | 
			
		||||
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));
 | 
			
		||||
			
 | 
			
		||||
			//if(LoadProperties.partybar && Users.getProfile(sPlayer).inParty())
 | 
			
		||||
				//SpoutStuff.initializePartyTracking(sPlayer);
 | 
			
		||||
			
 | 
			
		||||
			mmoHelper.initialize(sPlayer, plugin);
 | 
			
		||||
			
 | 
			
		||||
			//Party.update(sPlayer);
 | 
			
		||||
			Users.getProfile(sPlayer).toggleSpoutEnabled();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										67
									
								
								src/com/gmail/nossr50/listeners/mcSpoutScreenListener.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/com/gmail/nossr50/listeners/mcSpoutScreenListener.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
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.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.RETRO);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer));
 | 
			
		||||
				
 | 
			
		||||
				SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP);
 | 
			
		||||
			}
 | 
			
		||||
		} else if (event.getButton() instanceof ButtonEscape)
 | 
			
		||||
		{
 | 
			
		||||
			sPlayer.getMainScreen().closePopup();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void onScreenClose(ScreenCloseEvent event) 
 | 
			
		||||
	{
 | 
			
		||||
		if(event.getScreen() instanceof PopupMMO)
 | 
			
		||||
		{
 | 
			
		||||
			SpoutStuff.playerScreens.remove(event.getPlayer());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										357
									
								
								src/com/gmail/nossr50/locale/locale_de.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								src/com/gmail/nossr50/locale/locale_de.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,357 @@
 | 
			
		||||
Combat.WolfExamine=[[GREEN]]**du musterst den Wolf mit Bestienkunde**
 | 
			
		||||
Combat.WolfShowMaster=[[DARK_GREEN]]Besitzer \: {0}
 | 
			
		||||
Combat.Ignition=[[RED]]**ENTZUENDET**
 | 
			
		||||
Combat.BurningArrowHit=[[DARK_RED]]von brennendem Pfeil getroffen\!
 | 
			
		||||
Combat.TouchedFuzzy=[[DARK_RED]]Benommen. fuehlt sich schwindelig.
 | 
			
		||||
Combat.TargetDazed=Ziel ist [[DARK_RED]]benommen
 | 
			
		||||
Combat.WolfNoMaster=[[GRAY]]Dieser Wolf hat keinen Besitzer...
 | 
			
		||||
Combat.WolfHealth=[[GREEN]]Der Wolf hat {0} Lebensenergie 
 | 
			
		||||
Combat.StruckByGore=[[RED]]**von Biss getroffen**
 | 
			
		||||
Combat.Gore=[[GREEN]]**BISS**
 | 
			
		||||
Combat.ArrowDeflect=[[WHITE]]**PFEIL ABGEWEHRT**
 | 
			
		||||
Item.ChimaeraWingFail=**CHIMAEREN FLUEGEL fehlgeschlagen\!**
 | 
			
		||||
Item.ChimaeraWingPass=**CHIMAEREN FLUEGEL**
 | 
			
		||||
Item.InjuredWait=du musst mit der Benutzung warten [[YELLOW]]({0}s)
 | 
			
		||||
Item.NeedFeathers=[[GRAY]]mehr Federn n<>tig...
 | 
			
		||||
m.mccPartyCommands=[[GREEN]]--GRUPPEN BEFEHLE--
 | 
			
		||||
m.mccParty=[party name] [[RED]]- Erstellt/tritt einer Gruppe bei
 | 
			
		||||
m.mccPartyQ=[[RED]]- aktuelle Gruppe verlassen
 | 
			
		||||
m.mccPartyToggle=[[RED]] - aktiviert Gruppenchat
 | 
			
		||||
m.mccPartyInvite=[player name] [[RED]]- Gruppeneinladung senden
 | 
			
		||||
m.mccPartyAccept=[[RED]]- Gruppeneinladung akzeptieren
 | 
			
		||||
m.mccPartyTeleport=[party member name] [[RED]]- Teleport zu Gruppenmitglied
 | 
			
		||||
m.mccOtherCommands=[[GREEN]]--ANDERE BEFEHLE--
 | 
			
		||||
m.mccStats=- zeigt deinen Status
 | 
			
		||||
m.mccLeaderboards=- Ranglisten
 | 
			
		||||
m.mccMySpawn=- Teleport zum Spawnpunkt
 | 
			
		||||
m.mccClearMySpawn=- Spawnpunkt loeschen
 | 
			
		||||
m.mccToggleAbility=- Faehigkeitsaktivierung an/aus schalten
 | 
			
		||||
m.mccAdminToggle=- Adminchat aktivieren
 | 
			
		||||
m.mccWhois=[playername] [[RED]]- Detailierte Spielerinfos zeigen
 | 
			
		||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Ziel modifizieren
 | 
			
		||||
m.mccMcGod=- Gott Modus
 | 
			
		||||
m.mccSkillInfo=[skillname] [[RED]]- Detailierte Skillinfos zeigen
 | 
			
		||||
m.mccModDescription=[[RED]]- MOD-Beschreibung
 | 
			
		||||
m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
 | 
			
		||||
m.XPGain=[[DARK_GRAY]]XP Erhalten: [[WHITE]]{0}
 | 
			
		||||
m.EffectsTemplate=[[DARK_AQUA]]{0}: [[GREEN]]{1}
 | 
			
		||||
m.AbilityLockTemplate=[[GRAY]]{0}
 | 
			
		||||
m.AbilityBonusTemplate=[[RED]]{0}: [[YELLOW]]{1}
 | 
			
		||||
m.Effects=EFFEKTE
 | 
			
		||||
m.YourStats=DEINE WERTE
 | 
			
		||||
m.SkillTaming=Bestienkunde (Taming)
 | 
			
		||||
m.XPGainTaming=wenn Woelfe Schaden bekommen/verursachen
 | 
			
		||||
m.EffectsTaming1_0=Bestienkunde
 | 
			
		||||
m.EffectsTaming1_1=Wolf mit Knochen schlagen fuer Informationen
 | 
			
		||||
m.EffectsTaming2_0=Biss
 | 
			
		||||
m.EffectsTaming2_1=Kritischer Schlag mit Blutungseffekt
 | 
			
		||||
m.EffectsTaming3_0=Geschaerfte Krallen
 | 
			
		||||
m.EffectsTaming3_1=Schadens-Bonus
 | 
			
		||||
m.EffectsTaming4_0=Umweltbewusstsein
 | 
			
		||||
m.EffectsTaming4_1=Kaktus/Lava Phobie, Fall Schaden Immun
 | 
			
		||||
m.EffectsTaming5_0=Dichtes Fell
 | 
			
		||||
m.EffectsTaming5_1=Schadens-Reduzierung, Feuer-Resistenz
 | 
			
		||||
m.EffectsTaming6_0=schockfest
 | 
			
		||||
m.EffectsTaming6_1=Explosions-Schaden-Reduzierung
 | 
			
		||||
m.AbilLockTaming1=gesperrt bis 100+ Skilllevel (Umweltbewusstsein)
 | 
			
		||||
m.AbilLockTaming2=gesperrt bis 250+ Skillevel (Dichtes Fell)
 | 
			
		||||
m.AbilLockTaming3=gesperrt bis 500+ Skillevel (Schockfest)
 | 
			
		||||
m.AbilLockTaming4=gesperrt bis 750+ Skillevel (Geschaerfte Krallen)
 | 
			
		||||
m.AbilBonusTaming1_0=Umweltbewusstsein
 | 
			
		||||
m.AbilBonusTaming1_1=Woelfe meiden Gefahr
 | 
			
		||||
m.AbilBonusTaming2_0=Dichtes Fell
 | 
			
		||||
m.AbilBonusTaming2_1=Halber Schaden, Feuer-Resistenz
 | 
			
		||||
m.AbilBonusTaming3_0=Schockfest
 | 
			
		||||
m.AbilBonusTaming3_1=Explosionen verursachen nur 1/6 Schaden
 | 
			
		||||
m.AbilBonusTaming4_0=Geschaerfte Krallen
 | 
			
		||||
m.AbilBonusTaming4_1=+2 Schaden
 | 
			
		||||
m.TamingGoreChance=[[RED]]Biss Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillWoodCutting=Holzfaellen (WoodCutting)
 | 
			
		||||
m.XPGainWoodCutting=Baeume faellen
 | 
			
		||||
m.EffectsWoodCutting1_0=Baumfaeller (Faehigkeit)
 | 
			
		||||
m.EffectsWoodCutting1_1=Bringt Baeume zum explodieren
 | 
			
		||||
m.EffectsWoodCutting2_0=Blaetter-Sturm
 | 
			
		||||
m.EffectsWoodCutting2_1=blaest Blaetter weg
 | 
			
		||||
m.EffectsWoodCutting3_0=Doppelte Drops
 | 
			
		||||
m.EffectsWoodCutting3_1=doppelte Anzahl Items
 | 
			
		||||
m.AbilLockWoodCutting1=gesperrt bis 100+ Skilllevel (Blaetter-Sturm)
 | 
			
		||||
m.AbilBonusWoodCutting1_0=Blaetter-Sturm
 | 
			
		||||
m.AbilBonusWoodCutting1_1=blaest Blaetter weg
 | 
			
		||||
m.WoodCuttingDoubleDropChance=[[RED]]Doppelte Drop Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.WoodCuttingTreeFellerLength=[[RED]]Baumfaeller Dauer: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillArchery=Bogenschiessen (Archery)
 | 
			
		||||
m.XPGainArchery=Monster/Spieler angreifen
 | 
			
		||||
m.EffectsArchery1_0=Entzuenden
 | 
			
		||||
m.EffectsArchery1_1=25% Chance das Feind Feuer faengt
 | 
			
		||||
m.EffectsArchery2_0=Blenden (Spieler)
 | 
			
		||||
m.EffectsArchery2_1=Disorientiert Feinde
 | 
			
		||||
m.EffectsArchery3_0=Schaden+
 | 
			
		||||
m.EffectsArchery3_1=Modifiziert Schaden
 | 
			
		||||
m.EffectsArchery4_0=Pfeile wiederverwenden
 | 
			
		||||
m.EffectsArchery4_1=Chance Pfeile von Leichen zurueckzugewinnen
 | 
			
		||||
m.ArcheryDazeChance=[[RED]]Chance zu blenden: [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryRetrieveChance=[[RED]]Chance Pfeile zurueckzugewinnen: [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryIgnitionLength=[[RED]]Dauer von Entzuenden: [[YELLOW]]{0} seconds
 | 
			
		||||
m.ArcheryDamagePlus=[[RED]]Schaden+ (Rank{0}): [[YELLOW]]Bonus {0} damage
 | 
			
		||||
m.SkillAxes=Axt (Axes)
 | 
			
		||||
m.XPGainAxes=Monster/Spieler angreifen
 | 
			
		||||
m.EffectsAxes1_0=Schaedelspalter (Faehigkeit)
 | 
			
		||||
m.EffectsAxes1_1=Verursacht Flaechenschaden
 | 
			
		||||
m.EffectsAxes2_0=Kritischer Schlag
 | 
			
		||||
m.EffectsAxes2_1=doppelter Schaden
 | 
			
		||||
m.EffectsAxes3_0=Axtmeister (500 Skilllevel)
 | 
			
		||||
m.EffectsAxes3_1=Modifiziert Schaden
 | 
			
		||||
m.AbilLockAxes1=gesperrt bis 500+ Skilllevel(Axtmeister)
 | 
			
		||||
m.AbilBonusAxes1_0=Axtmeister
 | 
			
		||||
m.AbilBonusAxes1_1=+4 Schaden
 | 
			
		||||
m.AxesCritChance=[[RED]]Chance fuer kritische Treffer: [[YELLOW]]{0}%
 | 
			
		||||
m.AxesSkullLength=[[RED]]Schaedelspalter Dauer: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillSwords=Schwert (Swords)
 | 
			
		||||
m.XPGainSwords=Monster/Spieler angreifen
 | 
			
		||||
m.EffectsSwords1_0=Konter
 | 
			
		||||
m.EffectsSwords1_1=Reflektiert 50% des erhaltenen Schadens
 | 
			
		||||
m.EffectsSwords2_0=gezackter Schlag (Faehigkeit)
 | 
			
		||||
m.EffectsSwords2_1=25% Flaechenschaden, Blutung+ Flaecheneffekt
 | 
			
		||||
m.EffectsSwords3_0=gezackter Schlag Blutung+
 | 
			
		||||
m.EffectsSwords3_1=Blutung <20>ber 5 Ticks
 | 
			
		||||
m.EffectsSwords4_0=parrieren
 | 
			
		||||
m.EffectsSwords4_1=negiert Schaden
 | 
			
		||||
m.EffectsSwords5_0=Blutung
 | 
			
		||||
m.EffectsSwords5_1=hinterlaesst Blutungs-DOT
 | 
			
		||||
m.SwordsCounterAttChance=[[RED]]Konter Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.SwordsBleedLength=[[RED]]Blutung Dauer: [[YELLOW]]{0} ticks
 | 
			
		||||
m.SwordsBleedChance=[[RED]]Blutung Chance: [[YELLOW]]{0} %
 | 
			
		||||
m.SwordsParryChance=[[RED]]Parieren Chance: [[YELLOW]]{0} %
 | 
			
		||||
m.SwordsSSLength=[[RED]]gezackter Schlag Dauer: [[YELLOW]]{0}s
 | 
			
		||||
m.SwordsTickNote=[[GRAY]]NOTIZ: [[YELLOW]]1 Tick erfolgt aller 2 Sekunden
 | 
			
		||||
m.SkillAcrobatics=Akrobatik (Acrobatics)
 | 
			
		||||
m.XPGainAcrobatics=stuerzen
 | 
			
		||||
m.EffectsAcrobatics1_0=Rolle
 | 
			
		||||
m.EffectsAcrobatics1_1=Reduziert oder negiert Schaden
 | 
			
		||||
m.EffectsAcrobatics2_0=elegante Rolle
 | 
			
		||||
m.EffectsAcrobatics2_1=Doppelt so effektiv wie Rolle
 | 
			
		||||
m.EffectsAcrobatics3_0=Ausweichen
 | 
			
		||||
m.EffectsAcrobatics3_1=halbiert Schaden
 | 
			
		||||
m.AcrobaticsRollChance=[[RED]]Rolle Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.AcrobaticsGracefulRollChance=[[RED]]elegante Rolle Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.AcrobaticsDodgeChance=[[RED]]Ausweichen Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillMining=Bergbau (Mining)
 | 
			
		||||
m.XPGainMining=Abbauen von Stein und Erz
 | 
			
		||||
m.EffectsMining1_0=Brecher (Faehigkeit)
 | 
			
		||||
m.EffectsMining1_1=Tempo+, dreifache Drop Chance
 | 
			
		||||
m.EffectsMining2_0=doppelte Drops
 | 
			
		||||
m.EffectsMining2_1=doppelte Anzahl Items
 | 
			
		||||
m.MiningDoubleDropChance=[[RED]]doppelte Drops Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.MiningSuperBreakerLength=[[RED]]Brecher Dauer: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillRepair=Reparieren (Repair)
 | 
			
		||||
m.XPGainRepair=reparieren
 | 
			
		||||
m.EffectsRepair1_0=reparieren
 | 
			
		||||
m.EffectsRepair1_1=reparieren von Werkzeugen und Ruestung
 | 
			
		||||
m.EffectsRepair2_0=reparieren - Meister
 | 
			
		||||
m.EffectsRepair2_1=erhoeht Reparaturwert
 | 
			
		||||
m.EffectsRepair3_0=Super Reparatur
 | 
			
		||||
m.EffectsRepair3_1=doppelte Effektivitaet
 | 
			
		||||
m.EffectsRepair4_0=Diamanten Reparatur ({0}+ SKILL)
 | 
			
		||||
m.EffectsRepair4_1=Reparieren von Diamantwerkzeugen und Ruestung
 | 
			
		||||
m.RepairRepairMastery=[[RED]]reparieren - Meister: [[YELLOW]]Extra {0}% Haltbarkeit
 | 
			
		||||
m.RepairSuperRepairChance=[[RED]]Super Reparatur Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillUnarmed=Faustkampf (Unarmed)
 | 
			
		||||
m.XPGainUnarmed=Monster/Spieler angreifen
 | 
			
		||||
m.EffectsUnarmed1_0=Berserker (Faehigkeit)
 | 
			
		||||
m.EffectsUnarmed1_1=+50% Schaden, bricht weiches Material (Bsp. Erde)
 | 
			
		||||
m.EffectsUnarmed2_0=Entwaffnen (Spieler)
 | 
			
		||||
m.EffectsUnarmed2_1=Entreisst dem Feind das ausgeruestete Item
 | 
			
		||||
m.EffectsUnarmed3_0=Faustkampfmeister
 | 
			
		||||
m.EffectsUnarmed3_1=grosse Schadenssteigerung
 | 
			
		||||
m.EffectsUnarmed4_0=Faustkampflehrling
 | 
			
		||||
m.EffectsUnarmed4_1=Schadens-Bonus
 | 
			
		||||
m.EffectsUnarmed5_0=Pfeil abwehren
 | 
			
		||||
m.EffectsUnarmed5_1=wehrt Pfeile ab
 | 
			
		||||
m.AbilLockUnarmed1=gesperrt bis 250+ Skilllevel (Faustkampflehrling)
 | 
			
		||||
m.AbilLockUnarmed2=gesperrt bis 500+ Skilllevel (Faustkampfmeister)
 | 
			
		||||
m.AbilBonusUnarmed1_0=Faustkampflehrling
 | 
			
		||||
m.AbilBonusUnarmed1_1=+2 Schadens-Bonus
 | 
			
		||||
m.AbilBonusUnarmed2_0=Faustkampfmeister
 | 
			
		||||
m.AbilBonusUnarmed2_1=+4 Schadens-Bonus
 | 
			
		||||
m.UnarmedArrowDeflectChance=[[RED]]Pfeil abwehren Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedDisarmChance=[[RED]]Entwaffnen Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedBerserkLength=[[RED]]Berserker Dauer: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillHerbalism=Kraeutersammler (Herbalism)
 | 
			
		||||
m.XPGainHerbalism=Kraeuter sammeln
 | 
			
		||||
m.EffectsHerbalism1_0=Gruene Welt (Faehigkeit)
 | 
			
		||||
m.EffectsHerbalism1_1=Pflegt die Natur, dreifache Drops
 | 
			
		||||
m.EffectsHerbalism2_0=Gruener Daumen (Weizen)
 | 
			
		||||
m.EffectsHerbalism2_1=automatisches neupflanzen nach ernten von Weizen
 | 
			
		||||
m.EffectsHerbalism3_0=Gruener Daumen (Pflasterstein)
 | 
			
		||||
m.EffectsHerbalism3_1=verwandelt Pflasterstein mithilfe von Samen zu moosigen Pflasterstein 
 | 
			
		||||
m.EffectsHerbalism4_0=Nahrung+
 | 
			
		||||
m.EffectsHerbalism4_1=Steigert Heilung von Brot/Suppe
 | 
			
		||||
m.EffectsHerbalism5_0=Doppelte Drops (Alle Kraeuter)
 | 
			
		||||
m.EffectsHerbalism5_1=doppelte Anzahl Items
 | 
			
		||||
m.HerbalismGreenTerraLength=[[RED]]Gruene Welt Dauer: [[YELLOW]]{0}s
 | 
			
		||||
m.HerbalismGreenThumbChance=[[RED]]Gruener Daumen Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.HerbalismGreenThumbStage=[[RED]]Gruener Daumen Stufe: [[YELLOW]] Getreide waechst auf Stufe {0}
 | 
			
		||||
m.HerbalismDoubleDropChance=[[RED]]Doppelte Drop Chance: [[YELLOW]]{0}%
 | 
			
		||||
m.HerbalismFoodPlus=[[RED]]Nahrung+ (Rank{0}): [[YELLOW]]Bonus-Heilung {0} 
 | 
			
		||||
m.SkillExcavation=Graben (Excavation)
 | 
			
		||||
m.XPGainExcavation=Graben und finden von Schaetzen
 | 
			
		||||
m.EffectsExcavation1_0=Buddler (Faehigkeit)
 | 
			
		||||
m.EffectsExcavation1_1=3x Drop Rate, 3x EXP, +Abbautempo
 | 
			
		||||
m.EffectsExcavation2_0=Schatzjaeger
 | 
			
		||||
m.EffectsExcavation2_1=Faehigkeit nach Schaetzen zu graben
 | 
			
		||||
m.ExcavationGreenTerraLength=[[RED]]Buddler Dauer: [[YELLOW]]{0}s
 | 
			
		||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Amboss platziert, hier kannst du Werkzeuge und Ruestungen reparieren.
 | 
			
		||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Dein Wolf hastet zurueck zu dir...
 | 
			
		||||
mcPlayerListener.AbilitiesOff=Faehigkeiten nutzen (rechtsklick) aus
 | 
			
		||||
mcPlayerListener.AbilitiesOn=Faehigkeiten nutzen (rechtsklick) an
 | 
			
		||||
mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**Faehigkeiten aufgefrischt\!**
 | 
			
		||||
mcPlayerListener.AcrobaticsSkill=[[YELLOW]]Akrobatik Skill (Acrobatics): 
 | 
			
		||||
mcPlayerListener.ArcherySkill=[[YELLOW]]Bogenschiessen Skill (Archery): 
 | 
			
		||||
mcPlayerListener.AxesSkill=[[YELLOW]]Axt Skill (Axes): 
 | 
			
		||||
mcPlayerListener.ExcavationSkill=[[YELLOW]]Graben Skill (Excavation): 
 | 
			
		||||
mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO Gottmodus deaktiviert
 | 
			
		||||
mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Gottmodus aktiviert
 | 
			
		||||
mcPlayerListener.GreenThumb=[[GREEN]]**GRUENER DAUMEN**
 | 
			
		||||
mcPlayerListener.GreenThumbFail=[[RED]]**GRUENER DAUMEN FEHLGESCHLAGEN**
 | 
			
		||||
mcPlayerListener.HerbalismSkill=[[YELLOW]]Kraeuterkunde Skill (Herbalism): 
 | 
			
		||||
mcPlayerListener.MiningSkill=[[YELLOW]]Bergbau Skill (Mining): 
 | 
			
		||||
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Spawnpunkt ist freigegeben
 | 
			
		||||
mcPlayerListener.MyspawnNotExist=[[RED]]Lege deinen Spawnpunkt erst mit einem Bett fest
 | 
			
		||||
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Spawnpunkt wurde an deine aktuelle Position gesetzt
 | 
			
		||||
mcPlayerListener.MyspawnTimeNotice=Du musst {0}m {1}s warten um myspawn zu nutzen
 | 
			
		||||
mcPlayerListener.NoPermission=unzureichende Berechtigungen (Permissions).
 | 
			
		||||
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]wenn du keinen Zugriff auf einen Skill hast wird er nicht hier gezeigt 
 | 
			
		||||
mcPlayerListener.NotInParty=[[RED]]Du bist in keiner Gruppe.
 | 
			
		||||
mcPlayerListener.InviteSuccess=[[GREEN]]Einladung erfolgreich versendet.
 | 
			
		||||
mcPlayerListener.ReceivedInvite1=[[RED]]ALERT: [[GREEN]]Eine Gruppeneinladung f<>r {0} von {1} erhalten
 | 
			
		||||
mcPlayerListener.ReceivedInvite2=[[YELLOW]]Schreibe[[GREEN]]/{0}[[YELLOW]] um die Einladung zu akzeptieren 
 | 
			
		||||
mcPlayerListener.InviteAccepted=[[GREEN]]Einladung akzeptiert. du bist {0} beigetreten
 | 
			
		||||
mcPlayerListener.NoInvites=[[RED]]Du hast derzeit keine Einladungen
 | 
			
		||||
mcPlayerListener.YouAreInParty=[[GREEN]]Du bist in Gruppe {0}
 | 
			
		||||
mcPlayerListener.PartyMembers=[[GREEN]]Gruppen Mitglieder
 | 
			
		||||
mcPlayerListener.LeftParty=[[RED]]Du hast die Gruppe verlassen
 | 
			
		||||
mcPlayerListener.JoinedParty=beigetrettene Gruppe: {0}
 | 
			
		||||
mcPlayerListener.PartyChatOn=nur Gruppenchat [[RED]]an
 | 
			
		||||
mcPlayerListener.PartyChatOff=nur Gruppenchat [[RED]]aus
 | 
			
		||||
mcPlayerListener.AdminChatOn=nur Adminchat [[GREEN]]an
 | 
			
		||||
mcPlayerListener.AdminChatOff=nur Adminchat [[RED]]aus
 | 
			
		||||
mcPlayerListener.MOTD=[[BLUE]]Auf diesem Server laeuft {0} schreibe[[YELLOW]]/{1}[[BLUE]] fuer Hilfe. <frei Uebersetzt von g3oliver>
 | 
			
		||||
mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO Wiki
 | 
			
		||||
mcPlayerListener.PowerLevel=[[DARK_RED]]Macht: 
 | 
			
		||||
mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] Macht [[YELLOW]]Rangliste--
 | 
			
		||||
mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Rangliste--
 | 
			
		||||
mcPlayerListener.RepairSkill=[[YELLOW]]Reparieren Skill (Repair): 
 | 
			
		||||
mcPlayerListener.SwordsSkill=[[YELLOW]]Schwert Skill (Swords): 
 | 
			
		||||
mcPlayerListener.TamingSkill=[[YELLOW]]Bestienkunde Skill (Taming): 
 | 
			
		||||
mcPlayerListener.UnarmedSkill=[[YELLOW]]Faustkampf Skill (Unarmed): 
 | 
			
		||||
mcPlayerListener.WoodcuttingSkill=[[YELLOW]]Holzfaeller Skill (Woodcutting): 
 | 
			
		||||
mcPlayerListener.YourStats=[[GREEN]]Deine MMO Werte
 | 
			
		||||
Party.InformedOnJoin={0} [[GREEN]] ist deiner Gruppe beigetreten
 | 
			
		||||
Party.InformedOnQuit={0} [[GREEN]] hat deine Gruppe verlassen
 | 
			
		||||
Skills.YourGreenTerra=[[GREEN]]Deine [[YELLOW]]Gruene Welt [[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.YourTreeFeller=[[GREEN]]Deine [[YELLOW]]Baumfaeller [[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.YourSuperBreaker=[[GREEN]]Deine [[YELLOW]]Brecher [[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.YourSerratedStrikes=[[GREEN]]Deine [[YELLOW]]gezackter Schlag [[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.YourBerserk=[[GREEN]]Deine [[YELLOW]]Berserker [[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.YourSkullSplitter=[[GREEN]]Deine [[YELLOW]]Schaedelspalter[[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.YourGigaDrillBreaker=[[GREEN]]Deine [[YELLOW]]Buddler[[GREEN]]Faehigkeit ist bereit!
 | 
			
		||||
Skills.TooTired=[[RED]]Du bist zu muede um diese Faehigkeit erneut zu nutzen.
 | 
			
		||||
Skills.ReadyHoe=[[GREEN]]**DU BEREITEST DEINE HARKE VOR**
 | 
			
		||||
Skills.LowerHoe=[[GRAY]]**DU SENKST DEINE HARKE**
 | 
			
		||||
Skills.ReadyAxe=[[GREEN]]**DU BEREITEST DEINE AXT VOR**
 | 
			
		||||
Skills.LowerAxe=[[GRAY]]**DU SENKST DEINE AXT**
 | 
			
		||||
Skills.ReadyFists=[[GREEN]]**DU BEREITEST DEINE FAEUSTE VOR**
 | 
			
		||||
Skills.LowerFists=[[GRAY]]**DU SENKST DEINE FAUSTE**
 | 
			
		||||
Skills.ReadyPickAxe=[[GREEN]]**DU BEREITEST DEINE SPITZHACKE VOR**
 | 
			
		||||
Skills.LowerPickAxe=[[GRAY]]**DU SENKST DEINE SPITZHACKE**
 | 
			
		||||
Skills.ReadyShovel=[[GREEN]]**DU BEREITEST DEINE SCHAUFEL VOR**
 | 
			
		||||
Skills.LowerShovel=[[GRAY]]**DU SENKST DEINE SCHAUFEL**
 | 
			
		||||
Skills.ReadySword=[[GREEN]]**DU ERHEBST DEIN SCHWERT**
 | 
			
		||||
Skills.LowerSword=[[GRAY]]**DU SENKST DEIN SCHWERT**
 | 
			
		||||
Skills.GreenTerraOn=[[GREEN]]**GRUENE WELT AKTIV**
 | 
			
		||||
Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] hat [[RED]]Gruene Welt[[DARK_GREEN]] benutzt!
 | 
			
		||||
Skills.TreeFellerOn=[[GREEN]]**BAUMFAELLER AKTIV**
 | 
			
		||||
Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] hat [[RED]]Baumfaeller[[DARK_GREEN]] benutzt!
 | 
			
		||||
Skills.SuperBreakerOn=[[GREEN]]**BRECHER AKTIV**
 | 
			
		||||
Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] hat [[RED]]Super Brecher[[DARK_GREEN]] benutzt!
 | 
			
		||||
Skills.SerratedStrikesOn=[[GREEN]]**GEZACKTER SCHLAG AKTIV**
 | 
			
		||||
Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] hat [[RED]]gezackter Schlag[[DARK_GREEN]] benutzt!
 | 
			
		||||
Skills.SkullSplitterOn=[[GREEN]]**SCHAEDELSPALTER AKTIV**
 | 
			
		||||
Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] hat [[RED]]Schaedelspalter[[DARK_GREEN]] benutzt!
 | 
			
		||||
Skills.GigaDrillBreakerOn=[[GREEN]]**BUDDLER AKTIV**
 | 
			
		||||
Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] hat [[RED]]Buddler[[DARK_GREEN]] benutzt!
 | 
			
		||||
Skills.GreenTerraOff=[[RED]]**Gruene Welt ausgelaufen**
 | 
			
		||||
Skills.TreeFellerOff=[[RED]]**Baumfaeller ausgelaufen**
 | 
			
		||||
Skills.SuperBreakerOff=[[RED]]**Brecher ausgelaufen**
 | 
			
		||||
Skills.SerratedStrikesOff=[[RED]]**gezackter Schlag ausgelaufen**
 | 
			
		||||
Skills.BerserkOff=[[RED]]**Berserker ausgelaufen**
 | 
			
		||||
Skills.SkullSplitterOff=[[RED]]**Schaedelspalter ausgelaufen**
 | 
			
		||||
Skills.GigaDrillBreakerOff=[[RED]]**Buddler ausgelaufen**
 | 
			
		||||
Skills.TamingUp=[[YELLOW]]Bestienkunde um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.AcrobaticsUp=[[YELLOW]]Akrobatik um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.ArcheryUp=[[YELLOW]]Bogenschiessen um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.SwordsUp=[[YELLOW]]Schwert um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.AxesUp=[[YELLOW]]Axt um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.UnarmedUp=[[YELLOW]]Faustkampf um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.HerbalismUp=[[YELLOW]]Krauterkunde um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.MiningUp=[[YELLOW]]Bergbau um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.WoodcuttingUp=[[YELLOW]]Holzfaeller um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.RepairUp=[[YELLOW]]Reparieren um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.ExcavationUp=[[YELLOW]]Graben um {0} erhoeht. Gesamt ({1})
 | 
			
		||||
Skills.FeltEasy=[[GRAY]]Das fuehlt sich einfach an.
 | 
			
		||||
Skills.StackedItems=[[DARK_RED]]Du kannst keine gestapelten Items reparieren
 | 
			
		||||
Skills.NeedMore=[[DARK_RED]]Du brauchst mehr
 | 
			
		||||
Skills.AdeptDiamond=[[DARK_RED]]nicht talentiert genug um Diamantwerkzeuge zu reparieren
 | 
			
		||||
Skills.FullDurability=[[GRAY]]Dieses Item hat volle Haltbarkeit
 | 
			
		||||
Skills.Disarmed=[[DARK_RED]]Du wurdest entwaffnet!
 | 
			
		||||
mcPlayerListener.SorcerySkill=Zauberkunst Skill (Sorcery): 
 | 
			
		||||
m.SkillSorcery=Zauberkunst (Sorcery)
 | 
			
		||||
Sorcery.HasCast=[[GREEN]]**ZAUBERN**[[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]] Kein Mana [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
 | 
			
		||||
Sorcery.Water.Thunder=GEWITTER
 | 
			
		||||
Sorcery.Curative.Self=HEILEN (SELBST)
 | 
			
		||||
Sorcery.Curative.Other=HEILEN (ANDERE)
 | 
			
		||||
m.LVL=[[DARK_GRAY]]LVL: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
 | 
			
		||||
Combat.BeastLore=[[GREEN]]**BESTIENKUNDE**
 | 
			
		||||
Combat.BeastLoreOwner=[[DARK_AQUA]]Besitzer ([[RED]]{0}[[DARK_AQUA]])
 | 
			
		||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]Gesundheit ([[GREEN]]{0}[[DARK_AQUA]]/20)
 | 
			
		||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]Gesundheit ([[GREEN]]{0}[[DARK_AQUA]]/8)
 | 
			
		||||
mcMMO.Description=[[DARK_AQUA]]Q: Was ist das?,[[GOLD]]mcMMO ist eine [[RED]]OPEN SOURCE[[GOLD]] RPG Modifikation fuer Bukkit von [[BLUE]]nossr50,[[GOLD]]Durch mcMMO werden viele Skills bei Minecraft hinzugefuegt,[[GOLD]]Tippe [[GREEN]]/SKILLNAME[[GOLD]] um mehr ueber die Skills herauszufinden.,[[DARK_AQUA]]Q: Was tut es?,[[GOLD]]Ein Beispiel... in [[DARK_AQUA]]Mining[[GOLD]] wirst du Belohnungen bekommen wie,[[RED]]Doppelte Drops[[GOLD]] oder die Faehigkeit [[RED]]Brecher[[GOLD]] welche wenn,[[GOLD]]per rechtsklick aktiviert schnellers abbauen ermoeglicht. Leveln von [[BLUE]]Mining,[[GOLD]]erfolgt einfach durch abbauen von verschiedenen Materialien,[[DARK_AQUA]]Q: Was ist damit gemeint?,[[GOLD]]Alle Skills ind[[GREEN]]mcMMO[[GOLD]] fuegen coole neue Dinge hinzu!.,[[GOLD]]Du kannst auch[[GREEN]]/{0}[[GOLD]] tippen um die BEfehle zu sehen,[[GOLD]]Das Ziel von mcMMO ist es ein RPG Erlebnis einzufuehren,[[DARK_AQUA]]Q: Wo finde ich Neuigkeiten!?,[[GOLD]]Im mcMMO thread in dem bukkit forum!,[[DARK_AQUA]]Q: Wie tu ich dies und das?,[[RED]]Bitte [[GOLD]]schau in die Wiki!
 | 
			
		||||
[[DARK_AQUA]]mcmmo.wikia.com
 | 
			
		||||
Party.IsLocked=[[RED]]Gruppe ist gesperrt.
 | 
			
		||||
Party.Locked=[[RED]]Gruppe ist gesperrt, nur Leiter kann einladen.
 | 
			
		||||
Party.IsntLocked=[[GRAY]]Gruppe ist nicht gesperrt
 | 
			
		||||
Party.Unlocked=[[GRAY]]Gruppe entsperrt
 | 
			
		||||
Party.Help1=[[RED]]Korrekte Benutzung ist [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] oder [[WHITE]]'q' [[YELLOW]]zum beenden
 | 
			
		||||
Party.Help2=[[RED]]Um einer gesicherten Gruppe beizutreten nutze [[YELLOW]]/{0} [[WHITE]]<name> <password>
 | 
			
		||||
Party.Help3=[[RED]]Siehe /{0} ? f<>r mehr Informationen
 | 
			
		||||
Party.Help4=[[RED]]Nutze [[YELLOW]]/{0} [[WHITE]]<name> [[YELLOW]]um einer Gruppe beizutreten oder [[WHITE]]'q' [[YELLOW]]zum beenden
 | 
			
		||||
Party.Help5=[[RED]]Um deine Gruppe zu sperren nutze [[YELLOW]]/{0} [[WHITE]]lock
 | 
			
		||||
Party.Help6=[[RED]]Um deine Gruppe zu entsperren nutze [[YELLOW]]/{0} [[WHITE]]unlock
 | 
			
		||||
Party.Help7=[[RED]]Um deine Gruppe mit einem Passwort zu sichern nutze [[YELLOW]]/{0} [[WHITE]]password <password>
 | 
			
		||||
Party.Help8=[[RED]]Um einen SPieler von deiner Gruppe auszuschliessen nutze [[YELLOW]]/{0} [[WHITE]]kick <player>
 | 
			
		||||
Party.Help9=[[RED]]Um Gruppenleiter weiter zu reichen nutze [[YELLOW]]/{0} [[WHITE]]owner <player>
 | 
			
		||||
Party.NotOwner=[[DARK_RED]]Du bist nicht der Gruppenleiter
 | 
			
		||||
Party.InvalidName=[[DARK_RED]]Das ist kein erlaubter Gruppenname
 | 
			
		||||
Party.PasswordSet=[[GREEN]]Gruppenpasswort {0} gesetzt
 | 
			
		||||
Party.CouldNotKick=[[DARK_RED]]Kann Spieler nicht ausschliessen{0}
 | 
			
		||||
Party.NotInYourParty=[[DARK_RED]]{0} ist nicht in deiner Gruppe
 | 
			
		||||
Party.CouldNotSetOwner=[[DARK_RED]]Kann kein Leiter werden {0}
 | 
			
		||||
Party.NewOwner={0} ist der neue Gruppenleiter.
 | 
			
		||||
Party.PasswordWrong=[[DARK_RED]]Gruppenpasswort falsch.
 | 
			
		||||
Party.NowOwner=[[RED]]Du bist nun der Gruppenleiter.
 | 
			
		||||
Party.NowNotOwner=[[RED]]Du bist nicht laenger der Gruppenleiter.
 | 
			
		||||
Party.RequiresPass=[[RED]]Diese Gruppe benoetigt ein Passwort. Nutze [[YELLOW]]/{0}[[WHITE]] <party> <password>[[RED]] zum beitreten.
 | 
			
		||||
Party.PtpDelay=[[RED]]Du kannst dies nicht so zeitig erneut benutzen [[WHITE]]([[YELLOW]]{0}s[[WHITE]])
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										351
									
								
								src/com/gmail/nossr50/locale/locale_en_us.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										351
									
								
								src/com/gmail/nossr50/locale/locale_en_us.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,351 @@
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										330
									
								
								src/com/gmail/nossr50/locale/locale_fi.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								src/com/gmail/nossr50/locale/locale_fi.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,330 @@
 | 
			
		||||
Combat.WolfExamine=[[GREEN]]**Tutkit sutta k<>ytt<74>m<EFBFBD>ll<6C> Pedon Tarinaa**
 | 
			
		||||
Combat.WolfShowMaster=[[DARK_GREEN]]Pedon is<69>nt<6E> : {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<72>tty
 | 
			
		||||
Combat.WolfNoMaster=[[GRAY]]T<>ll<6C> pedolla ei ole is<69>nt<6E><74>...
 | 
			
		||||
Combat.WolfHealth=[[GREEN]]T<>m<EFBFBD>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<54> EP<45>ONNISTUI\!**
 | 
			
		||||
Item.ChimaeraWingPass=**KHIMAIRAN SIIPI**
 | 
			
		||||
Item.InjuredWait=Sinua on haavoitettu <20>skett<74>in joten joudut odottaa t<>m<EFBFBD>n k<>ytt<74><74>. [[YELLOW]]({0}s)
 | 
			
		||||
Item.NeedFeathers=[[GRAY]]Tarvitset lis<69><73> sulkia..
 | 
			
		||||
m.mccPartyCommands=[[GREEN]]--RYHM<48>KOMENNOT--
 | 
			
		||||
m.mccParty=[party name] [[RED]]- Luo/liity nimettyyn ryhm<68><6D>n
 | 
			
		||||
m.mccPartyQ=[[RED]]- L<>hde ryhm<68>st<73>
 | 
			
		||||
m.mccPartyToggle=[[RED]] - Laita ryhm<68>juttelu p<><70>lle/pois
 | 
			
		||||
m.mccPartyInvite=[player name] [[RED]]- L<>het<65> ryhm<68>kutsu
 | 
			
		||||
m.mccPartyAccept=[[RED]]- Hyv<79>ksy ryhm<68>kutsu
 | 
			
		||||
m.mccPartyTeleport=[party member name] [[RED]]- Siirry ryhm<68>n j<>senen luo
 | 
			
		||||
m.mccOtherCommands=[[GREEN]]--MUUT KOMENNOT--
 | 
			
		||||
m.mccStats=- N<>yt<79> mcMMO tilastosi
 | 
			
		||||
m.mccLeaderboards=- Tulostaulukko
 | 
			
		||||
m.mccMySpawn=- Siirt<72><74> sinut myspawniin
 | 
			
		||||
m.mccClearMySpawn=- Tyhj<68><6A> myspawnisi
 | 
			
		||||
m.mccToggleAbility=- Laita taitojen aktivointi oikealla n<>pp<70>imell<6C> p<><70>lle/pois
 | 
			
		||||
m.mccAdminToggle=- Laita admin juttelu p<><70>lle/pois
 | 
			
		||||
m.mccWhois=[playername] [[RED]]- N<>yt<79> yksityiskohtaiset tiedot pelaajasta
 | 
			
		||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Muokkaa kohdetta
 | 
			
		||||
m.mccMcGod=- "God Mode"
 | 
			
		||||
m.mccSkillInfo=[skillname] [[RED]]- N<>yt<79> ykistyiskohtaiset tiedot taidosta
 | 
			
		||||
m.mccModDescription=[[RED]]- Lue lyhyt kuvaus modista
 | 
			
		||||
m.SkillHeader=[[RED]]-----[][[GREEN]]{0}[[RED]][]-----
 | 
			
		||||
m.XPGain=[[DARK_GRAY]]KOKEMUSPISTEIDEN M<><4D>R<EFBFBD>: [[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<EFBFBD>MINEN
 | 
			
		||||
m.XPGainTaming=Susien satuttaminen
 | 
			
		||||
m.EffectsTaming1_0=Pedon Tarina
 | 
			
		||||
m.EffectsTaming1_1=Luulla ly<6C>minen tutkii susia
 | 
			
		||||
m.EffectsTaming2_0=Pisto
 | 
			
		||||
m.EffectsTaming2_1=Kriittinen Isku joka lis<69><73> Verenvuodon
 | 
			
		||||
m.EffectsTaming3_0=Teroitetut Kynnet
 | 
			
		||||
m.EffectsTaming3_1=Tuhoamis Bonus
 | 
			
		||||
m.EffectsTaming4_0=Ymp<EFBFBD>rist<EFBFBD>tietoinen
 | 
			
		||||
m.EffectsTaming4_1=Kaktus/Laavapelko, immuuni Putousvahingolle
 | 
			
		||||
m.EffectsTaming5_0=Paksu Turkki
 | 
			
		||||
m.EffectsTaming5_1=Vahingon v<>hennys, Tulenkest<73>v<EFBFBD>
 | 
			
		||||
m.EffectsTaming6_0=R<EFBFBD>j<EFBFBD>hdyskest<EFBFBD>v<EFBFBD>
 | 
			
		||||
m.EffectsTaming6_1=R<EFBFBD>j<EFBFBD>hdysvahingon v<>hennys
 | 
			
		||||
m.AbilLockTaming1=LUKITTU KUNNES 100+ TAITO (YMP<4D>RIST<53>TIETOINEN)
 | 
			
		||||
m.AbilLockTaming2=LUKITTU KUNNES 250+ TAITO (PAKSU TURKKI)
 | 
			
		||||
m.AbilLockTaming3=LUKITTU KUNNES 500+ TAITO (R<>J<EFBFBD>HDYSKEST<53>V<EFBFBD>)
 | 
			
		||||
m.AbilLockTaming4=LUKITTU KUNNES 750+ TAITO (TEROITETUT KYNNET)
 | 
			
		||||
m.AbilBonusTaming1_0=Ymp<EFBFBD>rist<EFBFBD>tietoinen
 | 
			
		||||
m.AbilBonusTaming1_1=Sudet karttavat vaaraa
 | 
			
		||||
m.AbilBonusTaming2_0=Paksu Turkki
 | 
			
		||||
m.AbilBonusTaming2_1=Puolitettu vahinko, Tulenkest<73>v<EFBFBD>
 | 
			
		||||
m.AbilBonusTaming3_0=R<EFBFBD>j<EFBFBD>hdyskest<EFBFBD>v<EFBFBD>
 | 
			
		||||
m.AbilBonusTaming3_1=R<EFBFBD>j<EFBFBD>hteet vahingoittavat 1/6 v<>hemm<6D>n
 | 
			
		||||
m.AbilBonusTaming4_0=Teroitetut Kynnet
 | 
			
		||||
m.AbilBonusTaming4_1=+2 Vahinko
 | 
			
		||||
m.TamingGoreChance=[[RED]]Piston todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillWoodCutting=PUUN KAATO
 | 
			
		||||
m.XPGainWoodCutting=Puiden pilkkominen
 | 
			
		||||
m.EffectsWoodCutting1_0=Puunkaataja (TAITO)
 | 
			
		||||
m.EffectsWoodCutting1_1=R<EFBFBD>j<EFBFBD>yt<EFBFBD> puita
 | 
			
		||||
m.EffectsWoodCutting2_0=Lehdenpuhallin
 | 
			
		||||
m.EffectsWoodCutting2_1=Puhalla lehti<74> 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<74> pois
 | 
			
		||||
m.WoodCuttingDoubleDropChance=[[RED]]Tuplasaaliin todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.WoodCuttingTreeFellerLength=[[RED]]Puunkaatajan kesto: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillArchery=JOUSIAMMUNTA
 | 
			
		||||
m.XPGainArchery=Hy<EFBFBD>kk<EFBFBD><EFBFBD>m<EFBFBD>ll<EFBFBD> hirvi<76>iden kimppuun
 | 
			
		||||
m.EffectsArchery1_0=Sytytys
 | 
			
		||||
m.EffectsArchery1_1=25% Todenn<6E>k<EFBFBD>isyys ett<74> vihollinen syttyy tuleen
 | 
			
		||||
m.EffectsArchery2_0=P<EFBFBD>kerrys (Pelaajat)
 | 
			
		||||
m.EffectsArchery2_1=Saa viholliset pois tolaltaan
 | 
			
		||||
m.EffectsArchery3_0=Vahinko+
 | 
			
		||||
m.EffectsArchery3_1=Muokkaa vahinkoa
 | 
			
		||||
m.EffectsArchery4_0=Nuolenker<EFBFBD>ys
 | 
			
		||||
m.EffectsArchery4_1=Todenn<EFBFBD>k<EFBFBD>isyys ker<65>t<EFBFBD> nuolia raadoista
 | 
			
		||||
m.ArcheryDazeChance=[[RED]]Todenn<6E>k<EFBFBD>isyys P<>kerrytt<74><74>: [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryRetrieveChance=[[RED]]Todenn<6E>k<EFBFBD>isyys ker<65>t<EFBFBD> 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<EFBFBD>kk<EFBFBD><EFBFBD>m<EFBFBD>ll<EFBFBD> hirvi<76>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<6E>k<EFBFBD>isyys iske<6B> kriittisesti: [[YELLOW]]{0}%
 | 
			
		||||
m.AxesSkullLength=[[RED]]Kallonhalkojan kesto: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillSwords=MIEKAT
 | 
			
		||||
m.XPGainSwords=Hy<EFBFBD>kk<EFBFBD><EFBFBD>m<EFBFBD>ll<EFBFBD> hirvi<76>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<EFBFBD><EFBFBD> saadun vahingon
 | 
			
		||||
m.EffectsSwords5_0=Verenvuoto
 | 
			
		||||
m.EffectsSwords5_1=Lis<EFBFBD><EFBFBD> Verenvuoto
 | 
			
		||||
m.SwordsCounterAttChance=[[RED]]Vastaiskun todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.SwordsBleedLength=[[RED]]Verenvuodon kesto: [[YELLOW]]{0} vuotoa
 | 
			
		||||
m.SwordsBleedChance=[[RED]]Verenvuodon todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0} %
 | 
			
		||||
m.SwordsParryChance=[[RED]]Torjumisen todenn<6E>k<EFBFBD>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<EFBFBD>hent<EFBFBD><EFBFBD> tai est<73><74> vahinkoa
 | 
			
		||||
m.EffectsAcrobatics2_0=Sulava Kieriminen
 | 
			
		||||
m.EffectsAcrobatics2_1=Tuplasti tehokkaampi kuin Kieriminen
 | 
			
		||||
m.EffectsAcrobatics3_0=V<EFBFBD>ist<EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics3_1=V<EFBFBD>hent<EFBFBD><EFBFBD> vahingon m<><6D>r<EFBFBD>n puoleen
 | 
			
		||||
m.AcrobaticsRollChance=[[RED]]Kierimisen todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.AcrobaticsGracefulRollChance=[[RED]]Sulavan Kierimisen todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.AcrobaticsDodgeChance=[[RED]]V<>ist<73>n todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillMining=LOUHINTA
 | 
			
		||||
m.XPGainMining=Louhimalla kive<76> ja malmia
 | 
			
		||||
m.EffectsMining1_0=Supermurskain (TAITO)
 | 
			
		||||
m.EffectsMining1_1=Nopeus+, Triplaa saaliin tippumistodenn<6E>k<EFBFBD>isyys
 | 
			
		||||
m.EffectsMining2_0=Tuplasaalis
 | 
			
		||||
m.EffectsMining2_1=Tuplaa normaali saaliin m<><6D>r<EFBFBD>
 | 
			
		||||
m.MiningDoubleDropChance=[[RED]]Tuplasaaliin todenn<6E>k<EFBFBD>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<74>kaluja ja haarniskoja
 | 
			
		||||
m.EffectsRepair2_0=Korjausten Herra
 | 
			
		||||
m.EffectsRepair2_1=Lis<EFBFBD>tty korjausten m<><6D>r<EFBFBD>
 | 
			
		||||
m.EffectsRepair3_0=Superkorjaus
 | 
			
		||||
m.EffectsRepair3_1=Tuplatehokkuus
 | 
			
		||||
m.EffectsRepair4_0=Timanttikorjaus ({0}+ TAITO)
 | 
			
		||||
m.EffectsRepair4_1=Korjaa timanttity<74>kaluja ja haarniskoja
 | 
			
		||||
m.RepairRepairMastery=[[RED]]Korjausten Herra: [[YELLOW]]Extra {0}% kest<73>vyytt<74> palautettu
 | 
			
		||||
m.RepairSuperRepairChance=[[RED]]Superkorjauksen todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillUnarmed=ASEISTAMATON
 | 
			
		||||
m.XPGainUnarmed=Hy<EFBFBD>kk<EFBFBD><EFBFBD>m<EFBFBD>ll<EFBFBD> hirvi<76>iden kimppuun
 | 
			
		||||
m.EffectsUnarmed1_0=Raivop<EFBFBD><EFBFBD> (TAITO)
 | 
			
		||||
m.EffectsUnarmed1_1=+50% vahinko, rikkoo heikkoja materiaaleja
 | 
			
		||||
m.EffectsUnarmed2_0=Aseista riisuminen (Pelaajat)
 | 
			
		||||
m.EffectsUnarmed2_1=Pudottaa vihollisen esineen k<>dest<73>
 | 
			
		||||
m.EffectsUnarmed3_0=Aseistamattomuuden Herra
 | 
			
		||||
m.EffectsUnarmed3_1=Suuri vahingonlis<69>ys
 | 
			
		||||
m.EffectsUnarmed4_0=Aseistamattomuuden Aloittelija
 | 
			
		||||
m.EffectsUnarmed4_1=Vahingonlis<EFBFBD>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<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedDisarmChance=[[RED]]Aseista riisumisen todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedBerserkLength=[[RED]]Raivop<6F><70>n kesto: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillHerbalism=YRTTIHOITO
 | 
			
		||||
m.XPGainHerbalism=Ker<EFBFBD><EFBFBD>m<EFBFBD>ll<EFBFBD> yrttej<65>
 | 
			
		||||
m.EffectsHerbalism1_0=Vihermaa (TAITO)
 | 
			
		||||
m.EffectsHerbalism1_1=Levit<EFBFBD> vihreytt<74>, 3x saalis
 | 
			
		||||
m.EffectsHerbalism2_0=Viherpeukalo (Vehn<68>)
 | 
			
		||||
m.EffectsHerbalism2_1=Istuttaa vehn<68><6E> automaattisesti kun ker<65><72>t vehn<68><6E>
 | 
			
		||||
m.EffectsHerbalism3_0=Viherpeukalo (Mukulakivi)
 | 
			
		||||
m.EffectsHerbalism3_1=Mukulakivi -> Sammaleinen mukulakivi ja siemeni<6E>
 | 
			
		||||
m.EffectsHerbalism4_0=Ruoka+
 | 
			
		||||
m.EffectsHerbalism4_1=Muokkaa terveytt<74> jota saat leiv<69>st<73>/muhennoksesta
 | 
			
		||||
m.EffectsHerbalism5_0=Tuplasaalis (Kaikki yrtit)
 | 
			
		||||
m.EffectsHerbalism5_1=Tuplaa normaali saaliin m<><6D>r<EFBFBD>
 | 
			
		||||
m.HerbalismGreenTerraLength=[[RED]]Vihermaan kesto: [[YELLOW]]{0}s
 | 
			
		||||
m.HerbalismGreenThumbChance=[[RED]]Viherpeukalon todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.HerbalismGreenThumbStage=[[RED]]Viherpeukalon vaihe: [[YELLOW]] Vehn<68> kasvaa {0}:ssa vaiheessa
 | 
			
		||||
m.HerbalismDoubleDropChance=[[RED]]Tuplasaaliin todenn<6E>k<EFBFBD>isyys: [[YELLOW]]{0}%
 | 
			
		||||
m.HerbalismFoodPlus=[[RED]]Ruoka+ (Rank{0}): [[YELLOW]]Bonus {0} terveyden m<><6D>r<EFBFBD>
 | 
			
		||||
m.SkillExcavation=KAIVANTO
 | 
			
		||||
m.XPGainExcavation=Kaivamalla ja l<>yt<79>m<EFBFBD>ll<6C> aarteita
 | 
			
		||||
m.EffectsExcavation1_0=Giga Drill Breaker (TAITO)
 | 
			
		||||
m.EffectsExcavation1_1=3x saaliin m<><6D>r<EFBFBD>, 3x kokemuspisteiden m<><6D>r<EFBFBD>, +Nopeus
 | 
			
		||||
m.EffectsExcavation2_0=Aarteenmets<EFBFBD>st<EFBFBD>j<EFBFBD>
 | 
			
		||||
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<6C> voit korjata ty<74>kaluja ja haarniskoja.
 | 
			
		||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Sutesi kipitt<74><74> takaisin luoksesi...
 | 
			
		||||
mcPlayerListener.AbilitiesOff=Taitojen k<>ytt<74> pois p<><70>lt<6C>
 | 
			
		||||
mcPlayerListener.AbilitiesOn=Taitojen k<>ytt<74> p<><70>ll<6C>
 | 
			
		||||
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<><70>lt<6C>
 | 
			
		||||
mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO Godmode p<><70>ll<6C>
 | 
			
		||||
mcPlayerListener.GreenThumb=[[GREEN]]**VIHERPEUKALO**
 | 
			
		||||
mcPlayerListener.GreenThumbFail=[[RED]]**VIHERPEUKALO EP<45>ONNISTUI**
 | 
			
		||||
mcPlayerListener.HerbalismSkill=[[YELLOW]]Yrttihoito: 
 | 
			
		||||
mcPlayerListener.MiningSkill=[[YELLOW]]Kaivanto: 
 | 
			
		||||
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Myspawn on tyhj<68>tty.
 | 
			
		||||
mcPlayerListener.MyspawnNotExist=[[RED]]M<><4D>r<EFBFBD><72> myspawnisi ensin laittamalla s<>nky maahan.
 | 
			
		||||
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Myspawn on asetettu t<>m<EFBFBD>nhetkiseen sijaintiisi.
 | 
			
		||||
mcPlayerListener.MyspawnTimeNotice=Sinun pit<69><74> odottaa {0}m {1}s k<>ytt<74><74>ksesi myspawnia
 | 
			
		||||
mcPlayerListener.NoPermission=Puutteelliset oikeudet (mcPermissions)
 | 
			
		||||
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]Jos sinulla ei ole k<>ytt<74>oikeutta johonkin taitoon, sit<69> ei n<>ytet<65> t<><74>ll<6C>.
 | 
			
		||||
mcPlayerListener.NotInParty=[[RED]]Et ole ryhm<68>ss<73>.
 | 
			
		||||
mcPlayerListener.InviteSuccess=[[GREEN]]Kutsu l<>hetetty.
 | 
			
		||||
mcPlayerListener.ReceivedInvite1=[[RED]]HUOMIO: [[GREEN]]Olet saanut ryhm<68>kutsun ryhm<68><6D>n {0} pelaajalta {1}
 | 
			
		||||
mcPlayerListener.ReceivedInvite2=[[YELLOW]]Kirjoita [[GREEN]]/{0}[[YELLOW]] hyv<79>ksy<73>ksesi kutsun 
 | 
			
		||||
mcPlayerListener.InviteAccepted=[[GREEN]]Kutsu hyv<79>ksytty. Olet liittynyt ryhm<68><6D>n {0}
 | 
			
		||||
mcPlayerListener.NoInvites=[[RED]]Sinulla ei ole kutsuja
 | 
			
		||||
mcPlayerListener.YouAreInParty=[[GREEN]]Olet ryhm<68>ss<73> {0}
 | 
			
		||||
mcPlayerListener.PartyMembers=[[GREEN]]Ryhm<68>n j<>senet
 | 
			
		||||
mcPlayerListener.LeftParty=[[RED]]Olet l<>htenyt ryhm<68>st<73>
 | 
			
		||||
mcPlayerListener.JoinedParty=Liityit ryhm<68><6D>n: {0}
 | 
			
		||||
mcPlayerListener.PartyChatOn=Vain ryhm<68>juttelu [[GREEN]]P<><50>ll<6C>
 | 
			
		||||
mcPlayerListener.PartyChatOff=Vain ryhm<68>juttelu [[RED]]Pois p<><70>lt<6C>
 | 
			
		||||
mcPlayerListener.AdminChatOn=Vain admin juttelu [[GREEN]]P<><50>ll<6C>
 | 
			
		||||
mcPlayerListener.AdminChatOff=Vain admin juttelu [[RED]]Pois p<><70>lt<6C>
 | 
			
		||||
mcPlayerListener.MOTD=[[BLUE]]T<>ll<6C> serverill<6C> 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<68><6D>n
 | 
			
		||||
Party.InformedOnQuit={0} [[GREEN]] on l<>htenyt ryhm<68>st<73>
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										351
									
								
								src/com/gmail/nossr50/locale/locale_fr.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										351
									
								
								src/com/gmail/nossr50/locale/locale_fr.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,351 @@
 | 
			
		||||
Combat.WolfExamine=[[GREEN]]**Vous examinez le loup avec le Beast Lore**
 | 
			
		||||
Combat.WolfShowMaster=[[DARK_GREEN]]Le Ma<4D>tre des b<>tes \: {0}
 | 
			
		||||
Combat.Ignition=[[RED]]**ALLUMAGE**
 | 
			
		||||
Combat.BurningArrowHit=[[DARK_RED]]Vous avez <20>t<EFBFBD> frapp<70> par une fl<66>che br<62>lante\!
 | 
			
		||||
Combat.TouchedFuzzy=[[DARK_RED]]Vous voyez flou. Vous vous sentez <20>tourdi.
 | 
			
		||||
Combat.TargetDazed=La cible a <20>t<EFBFBD> [[DARK_RED]]<5D>tourdi
 | 
			
		||||
Combat.WolfNoMaster=[[GRAY]]Cette b<>te n'a pas de ma<6D>tre...
 | 
			
		||||
Combat.WolfHealth=[[GREEN]]Cette b<>te a {0} points de vie 
 | 
			
		||||
Combat.StruckByGore=[[RED]]**FRAPP<50> JUSQU'AU SANG**
 | 
			
		||||
Combat.Gore=[[GREEN]]**SANG**
 | 
			
		||||
Combat.ArrowDeflect=[[WHITE]]**FL<46>CHE DEVI<56>E**
 | 
			
		||||
Item.ChimaeraWingFail=**CHIMAERA WING a <20>chou<6F> \!**
 | 
			
		||||
Item.ChimaeraWingPass=**CHIMAERA WING**
 | 
			
		||||
Item.InjuredWait=Vous avez <20>t<EFBFBD> bless<73> r<>cemment et vous devez attendre pour utiliser <20>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<43>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<EFBFBD>porte <20> un membre du groupe
 | 
			
		||||
m.mccOtherCommands=[[GREEN]]--AUTRES COMMANDES--
 | 
			
		||||
m.mccStats=- Voir vos statistiques
 | 
			
		||||
m.mccLeaderboards=- Classements
 | 
			
		||||
m.mccMySpawn=- Vous t<>l<EFBFBD>porte <20> votre spawn
 | 
			
		||||
m.mccClearMySpawn=- <20>fface votre point de spawn
 | 
			
		||||
m.mccToggleAbility=- Active les capacit<69>s sp<73>ciales avec clic droit
 | 
			
		||||
m.mccAdminToggle=- Active le chat admin
 | 
			
		||||
m.mccWhois=[playername] [[RED]]- Voir les infos d<>taill<6C>es du joueur
 | 
			
		||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modifier 
 | 
			
		||||
m.mccMcGod=- Mode dieu
 | 
			
		||||
m.mccSkillInfo=[skillname] [[RED]]- Afficher des informations d<>taill<6C>es d'une comp<6D>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<69>es
 | 
			
		||||
m.EffectsTaming3_1=Bonus de d<>g<EFBFBD>ts
 | 
			
		||||
m.EffectsTaming4_0=Conscient de l'environnement
 | 
			
		||||
m.EffectsTaming4_1=Resistance aux Cactus, <20> la lave et aux chutes.
 | 
			
		||||
m.EffectsTaming5_0=Epaisse fourrure
 | 
			
		||||
m.EffectsTaming5_1=R<EFBFBD>duction d<>g<EFBFBD>ts, R<>sistance au feu
 | 
			
		||||
m.EffectsTaming6_0=R<EFBFBD>sistance aux chocs
 | 
			
		||||
m.EffectsTaming6_1=R<EFBFBD>duction des dommages explosifs
 | 
			
		||||
m.AbilLockTaming1=D<EFBFBD>bloqu<EFBFBD> au niveau 100 (Conscient de l'environnement)
 | 
			
		||||
m.AbilLockTaming2=D<EFBFBD>bloqu<EFBFBD> au niveau 250 (<28>paisse fourrure)
 | 
			
		||||
m.AbilLockTaming3=D<EFBFBD>bloqu<EFBFBD> au niveau 500 (R<>sistance aux chocs)
 | 
			
		||||
m.AbilLockTaming4=D<EFBFBD>bloqu<EFBFBD> au niveau 750 (Griffes aiguis<69>es)
 | 
			
		||||
m.AbilBonusTaming1_0=Conscient de l'environnement
 | 
			
		||||
m.AbilBonusTaming1_1=Le loup <20>vite le danger
 | 
			
		||||
m.AbilBonusTaming2_0=Epaisse fourrure
 | 
			
		||||
m.AbilBonusTaming2_1=R<EFBFBD>duit de moiti<74> les dommages \+ r<>sistance au feu
 | 
			
		||||
m.AbilBonusTaming3_0=R<EFBFBD>sistance aux chocs
 | 
			
		||||
m.AbilBonusTaming3_1=divise par 6 les d<>gats d'explosions
 | 
			
		||||
m.AbilBonusTaming4_0=Griffes aiguis<69>es
 | 
			
		||||
m.AbilBonusTaming4_1=+2 Dommages
 | 
			
		||||
m.TamingGoreChance=[[RED]]Chances de Morsure: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillWoodCutting=B<EFBFBD>CHERONNAGE
 | 
			
		||||
m.XPGainWoodCutting=Abattre des arbres
 | 
			
		||||
m.EffectsWoodCutting1_0=L'abatteur d'arbres (capacit<69> sp<73>ciale)
 | 
			
		||||
m.EffectsWoodCutting1_1=Faire exploser les arbres
 | 
			
		||||
m.EffectsWoodCutting2_0=Souffleur de feuilles
 | 
			
		||||
m.EffectsWoodCutting2_1=D<EFBFBD>truire plus de feuilles
 | 
			
		||||
m.EffectsWoodCutting3_0=Double Butin
 | 
			
		||||
m.EffectsWoodCutting3_1=Double le butin normal
 | 
			
		||||
m.AbilLockWoodCutting1=D<EFBFBD>bloqu<EFBFBD> au niveau 100 (Souffleur de feuilles)
 | 
			
		||||
m.AbilBonusWoodCutting1_0=Soufler les feuilles
 | 
			
		||||
m.AbilBonusWoodCutting1_1=D<EFBFBD>truire plus de feuilles
 | 
			
		||||
m.WoodCuttingDoubleDropChance=[[RED]]Chance de double butin: [[YELLOW]]{0}%
 | 
			
		||||
m.WoodCuttingTreeFellerLength=[[RED]]Dur<75>e de votre capacit<69> sp<73>ciale : [[YELLOW]]{0}s
 | 
			
		||||
m.SkillArchery=TIR <20> 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=<EFBFBD>tourdir (les joueurs)
 | 
			
		||||
m.EffectsArchery2_1=<EFBFBD>tourdi les joueurs
 | 
			
		||||
m.EffectsArchery3_0=D<EFBFBD>g<EFBFBD>ts+
 | 
			
		||||
m.EffectsArchery3_1=Augmente les d<>g<EFBFBD>ts
 | 
			
		||||
m.EffectsArchery4_0=R<EFBFBD>cup<EFBFBD>ration de fl<66>ches
 | 
			
		||||
m.EffectsArchery4_1=Chances de r<>cup<75>rer vos fl<66>ches sur un cadavre
 | 
			
		||||
m.ArcheryDazeChance=[[RED]]Chances d'<27>tourdir : [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryRetrieveChance=[[RED]]Chances de r<>cup<75>ration des fl<66>ches : [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryIgnitionLength=[[RED]]Dur<75>e du feu : [[YELLOW]]{0} secondes
 | 
			
		||||
m.ArcheryDamagePlus=[[RED]]D<>g<EFBFBD>ts+ (Rang {0}): [[YELLOW]]Bonus de {0} dommages
 | 
			
		||||
m.SkillAxes=HACHE
 | 
			
		||||
m.XPGainAxes=Attaquer des monstres
 | 
			
		||||
m.EffectsAxes1_0=Fendeur de cr<63>nes (capacit<69> sp<73>ciale)
 | 
			
		||||
m.EffectsAxes1_1=provoque des d<>g<EFBFBD>ts de zone 
 | 
			
		||||
m.EffectsAxes2_0=Coup critiques
 | 
			
		||||
m.EffectsAxes2_1=double les d<>g<EFBFBD>ts
 | 
			
		||||
m.EffectsAxes3_0=Ma<EFBFBD>trise de la hache (niveau 500)
 | 
			
		||||
m.EffectsAxes3_1=Augmente les d<>g<EFBFBD>ts
 | 
			
		||||
m.AbilLockAxes1=D<EFBFBD>bloqu<EFBFBD> au niveau 500 (Ma<4D>trise de la hache)
 | 
			
		||||
m.AbilBonusAxes1_0=Ma<EFBFBD>trise de la hache
 | 
			
		||||
m.AbilBonusAxes1_1=4 Blessures en bonus
 | 
			
		||||
m.AxesCritChance=[[RED]]Chances de coup critique : [[YELLOW]]{0}%
 | 
			
		||||
m.AxesSkullLength=[[RED]]Dur<75>e de votre capacit<69> sp<73>ciale : [[YELLOW]]{0}s
 | 
			
		||||
m.SkillSwords=<EFBFBD>P<EFBFBD>E
 | 
			
		||||
m.XPGainSwords=Attaque des monstres
 | 
			
		||||
m.EffectsSwords1_0=Contre-Attaque
 | 
			
		||||
m.EffectsSwords1_1=Renvoie 50% des degats subis
 | 
			
		||||
m.EffectsSwords2_0=Lame crant<6E>e (capacit<69> sp<73>ciale)
 | 
			
		||||
m.EffectsSwords2_1=25% de d<>g<EFBFBD>ts et saignements succesifs.
 | 
			
		||||
m.EffectsSwords3_0=Lame crant<6E>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<EFBFBD>t<EFBFBD>
 | 
			
		||||
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<75>e de votre capacit<69> sp<73>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<EFBFBD>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<74>
 | 
			
		||||
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<69> sp<73>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<75>e de votre capacit<69> sp<73>ciale : [[YELLOW]]{0}s
 | 
			
		||||
m.SkillRepair=R<EFBFBD>PARATION
 | 
			
		||||
m.XPGainRepair=R<EFBFBD>parer des objets
 | 
			
		||||
m.EffectsRepair1_0=R<EFBFBD>parer
 | 
			
		||||
m.EffectsRepair1_1=R<EFBFBD>paration d'outils & Armures en Fer
 | 
			
		||||
m.EffectsRepair2_0=Ma<EFBFBD>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<69>
 | 
			
		||||
m.EffectsRepair4_0=R<EFBFBD>paration du Diamant (requiert niveau {0})
 | 
			
		||||
m.EffectsRepair4_1=R<EFBFBD>paration des outils & armures en diamant
 | 
			
		||||
m.RepairRepairMastery=[[RED]]Ma<4D>tre en r<>paration : [[YELLOW]]{0}% de durabilit<69> restaur<75>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<69> sp<73>ciale)
 | 
			
		||||
m.EffectsUnarmed1_1=+50% de d<>g<EFBFBD>ts, brise les mat<61>riaux faibles
 | 
			
		||||
m.EffectsUnarmed2_0=D<EFBFBD>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<EFBFBD>ts
 | 
			
		||||
m.EffectsUnarmed4_0=Ma<EFBFBD>trise du d<>sarmement
 | 
			
		||||
m.EffectsUnarmed4_1=Beaucoup plus de d<>g<EFBFBD>ts
 | 
			
		||||
m.EffectsUnarmed5_0=D<EFBFBD>viation des fl<66>ches
 | 
			
		||||
m.EffectsUnarmed5_1=D<EFBFBD>vie les fl<66>ches qui vous foncent dessus
 | 
			
		||||
m.AbilLockUnarmed1=D<EFBFBD>bloqu<EFBFBD> au niveau 250 (Apprenti du d<>sarmement)
 | 
			
		||||
m.AbilLockUnarmed2=D<EFBFBD>bloqu<EFBFBD> au niveau 500 (Ma<4D>trise du d<>sarmement)
 | 
			
		||||
m.AbilBonusUnarmed1_0=Apprenti du d<>sarmement
 | 
			
		||||
m.AbilBonusUnarmed1_1=+2 d<>g<EFBFBD>ts
 | 
			
		||||
m.AbilBonusUnarmed2_0=Ma<EFBFBD>trise du d<>sarmement
 | 
			
		||||
m.AbilBonusUnarmed2_1=+4 d<>g<EFBFBD>ts
 | 
			
		||||
m.UnarmedArrowDeflectChance=[[RED]]Chances d<>vier les fl<66>ches : [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedDisarmChance=[[RED]]Chances de D<>sarmer : [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedBerserkLength=[[RED]]Dur<75>e de votre capacit<69> sp<73>ciale : [[YELLOW]]{0}s
 | 
			
		||||
m.SkillHerbalism=Herboristerie
 | 
			
		||||
m.XPGainHerbalism=R<EFBFBD>coler des herbes
 | 
			
		||||
m.EffectsHerbalism1_0=Main verte (capacit<69> sp<73>ciale)
 | 
			
		||||
m.EffectsHerbalism1_1=r<EFBFBD>pand la main verte, 3x Butin
 | 
			
		||||
m.EffectsHerbalism2_0=Main verte (Bl<42>)
 | 
			
		||||
m.EffectsHerbalism2_1=Auto-plantes du bl<62> 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<6E> re<72>ue via le pain / rago<67>t
 | 
			
		||||
m.EffectsHerbalism5_0=Double butin (Toutes cultures)
 | 
			
		||||
m.EffectsHerbalism5_1=Double les r<>coltes
 | 
			
		||||
m.HerbalismGreenTerraLength=[[RED]]Dur<75>e de la capacit<69> sp<73>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<74>sors
 | 
			
		||||
m.EffectsExcavation1_0=Super broyeur (capacit<69> sp<73>ciale)
 | 
			
		||||
m.EffectsExcavation1_1=3x Butin, 3x XP, +Vitesse
 | 
			
		||||
m.EffectsExcavation2_0=Chercheur de tr<74>sors
 | 
			
		||||
m.EffectsExcavation2_1=Capacit<EFBFBD> de trouver un tr<74>sor
 | 
			
		||||
m.ExcavationGreenTerraLength=[[RED]]Dur<75>e de la capacit<69> sp<73>ciale : [[YELLOW]]{0}s
 | 
			
		||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]Vous avez plac<61> une enclume, Les enclumes peuvent r<>parer les outils et l'armure.
 | 
			
		||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Votre loup revient vers vous...
 | 
			
		||||
mcPlayerListener.AbilitiesOff=Capacit<EFBFBD> sp<73>ciale d<>sactiv<69>e
 | 
			
		||||
mcPlayerListener.AbilitiesOn=Capacit<EFBFBD> sp<73>ciale activ<69>e
 | 
			
		||||
mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**CAPACIT<49> RECHARG<52>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<69>
 | 
			
		||||
mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO godMode activ<69>
 | 
			
		||||
mcPlayerListener.GreenThumb=[[GREEN]]**MAIN VERTE**
 | 
			
		||||
mcPlayerListener.GreenThumbFail=[[RED]]**MAIN VERTE A ECHOU<4F>**
 | 
			
		||||
mcPlayerListener.HerbalismSkill=[[YELLOW]]Herboriste (/Herbalism) : 
 | 
			
		||||
mcPlayerListener.MiningSkill=[[YELLOW]]Minage (/Mining): 
 | 
			
		||||
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]Votre point de spawn a <20>t<EFBFBD> <20>ffac<61>.
 | 
			
		||||
mcPlayerListener.MyspawnNotExist=[[RED]]Dormez dans un lit pour d<>finir votre point de spawn.
 | 
			
		||||
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]Votre point de spawn a <20>t<EFBFBD> enregistr<74> 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<63>s <20> une comp<6D>, elle ne sera pas affich<63>e ici.
 | 
			
		||||
mcPlayerListener.NotInParty=[[RED]]Vous n'<27>tes pas dans un groupe.
 | 
			
		||||
mcPlayerListener.InviteSuccess=[[GREEN]]L'invitation a <20>t<EFBFBD> envoy<6F>e avec succ<63>s.
 | 
			
		||||
mcPlayerListener.ReceivedInvite1=[[RED]]ALERTE: [[GREEN]]Vous avez re<72>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<70>e. Vous avez rejoint le groupe {0}
 | 
			
		||||
mcPlayerListener.NoInvites=[[RED]]Vous n'avez pas d'invitation pour le moment 
 | 
			
		||||
mcPlayerListener.YouAreInParty=[[GREEN]]Vous <20>tes dans le groupe {0}
 | 
			
		||||
mcPlayerListener.PartyMembers=[[GREEN]]Membres du groupe
 | 
			
		||||
mcPlayerListener.LeftParty=[[RED]]Vous avez quitt<74> 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<74> votre groupe
 | 
			
		||||
Skills.YourGreenTerra=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]Main verte [[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.YourTreeFeller=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]L'abatteur d'arbres [[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.YourSuperBreaker=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]Super Breaker[[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.YourSerratedStrikes=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]Epee crant<6E> [[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.YourBerserk=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]Berserk [[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.YourSkullSplitter=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]Fendeur de cr<63>nes [[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.YourGigaDrillBreaker=[[GREEN]]Votre capacit<69>e sp<73>ciale [[YELLOW]]Super broyeur [[GREEN]]est recharg<72>e
 | 
			
		||||
Skills.TooTired=[[RED]]Vous <20>tes trop fatigu<67> pour utiliser cette capacit<69> pour l'instant.
 | 
			
		||||
Skills.ReadyHoe=[[GREEN]]**Votre b<>che est charg<72>e**
 | 
			
		||||
Skills.LowerHoe=[[GRAY]]Votre b<>che s'est d<>charg<72>e..
 | 
			
		||||
Skills.ReadyAxe=[[GREEN]]**Votre hache est charg<72>e**
 | 
			
		||||
Skills.LowerAxe=[[GRAY]]Votre hache s'est d<>charg<72>e..
 | 
			
		||||
Skills.ReadyFists=[[GREEN]]**Vos poings sont charg<72>s**
 | 
			
		||||
Skills.LowerFists=[[GRAY]]Vos poings se sont d<>charg<72>s..
 | 
			
		||||
Skills.ReadyPickAxe=[[GREEN]]**Votre pioche est charg<72>e**
 | 
			
		||||
Skills.LowerPickAxe=[[GRAY]]Votre pioche s'est d<>charg<72>e..
 | 
			
		||||
Skills.ReadyShovel=[[GREEN]]**Votre pelle est charg<72>e**
 | 
			
		||||
Skills.LowerShovel=[[GRAY]]Votre pelle s'est d<>charg<72>e..
 | 
			
		||||
Skills.ReadySword=[[GREEN]]**Votre <20>p<EFBFBD>e est charg<72>e**
 | 
			
		||||
Skills.LowerSword=[[GRAY]]Votre <20>p<EFBFBD>e s'est d<>charg<72>e..
 | 
			
		||||
Skills.BerserkOn=[[GREEN]]**BERSERK ACTIVATED**
 | 
			
		||||
Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Berserk!
 | 
			
		||||
Skills.GreenTerraOn=[[GREEN]]**Comp<6D>tence [[YELLOW]]Main Verte [[GREEN]]activ<69>e**
 | 
			
		||||
Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilis<69> la comp<6D>tence sp<73>ciale [[RED]]Main verte !
 | 
			
		||||
Skills.TreeFellerOn=[[GREEN]]**Comp<6D>tence [[YELLOW]]L'abatteur d'Arbres [[GREEN]]activ<69>e**
 | 
			
		||||
Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilis<69> la comp<6D>tence sp<73>ciale [[RED]]Abatteur d'Arbres !
 | 
			
		||||
Skills.SuperBreakerOn=[[GREEN]]**Comp<6D>tence [[YELLOW]]Super Breaker [[GREEN]]activ<69>e**
 | 
			
		||||
Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilis<69> la comp<6D>tence sp<73>ciale [[RED]]Super Breaker !
 | 
			
		||||
Skills.SerratedStrikesOn=[[GREEN]]**Comp<6D>tence [[YELLOW]]Lame Crant<6E>e [[GREEN]]activ<69>e**
 | 
			
		||||
Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilis<69> la comp<6D>tence sp<73>ciale [[RED]]Lame crant<6E>e !
 | 
			
		||||
Skills.SkullSplitterOn=[[GREEN]]**Comp<6D>tence [[YELLOW]]Fendeur de cr<63>nes [[GREEN]]activ<69>e**
 | 
			
		||||
Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilis<69> la comp<6D>tence sp<73>ciale [[RED]]Fendeur de cr<63>nes !
 | 
			
		||||
Skills.GigaDrillBreakerOn=[[GREEN]]**Comp<6D>tence [[YELLOW]]Super Broyeur [[GREEN]]activ<69>e**
 | 
			
		||||
Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] a utilis<69> la comp<6D>tence sp<73>ciale [[RED]]Super broyeur !
 | 
			
		||||
Skills.GreenTerraOff=[[RED]]**Comp<6D>tence [[YELLOW]]Main Verte [[GREEN]]termin<69>e**
 | 
			
		||||
Skills.TreeFellerOff=[[RED]]**Comp<6D>tence [[YELLOW]]L'abatteur d'Arbres [[GREEN]]termin<69>e**
 | 
			
		||||
Skills.SuperBreakerOff=[[RED]]**Comp<6D>tence [[YELLOW]]Super Breaker [[GREEN]]termin<69>e**
 | 
			
		||||
Skills.SerratedStrikesOff=[[RED]]**Comp<6D>tence [[YELLOW]]Lame Crant<6E>e [[GREEN]]termin<69>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<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.AcrobaticsUp=[[YELLOW]]La competence acrobatie a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.ArcheryUp=[[YELLOW]]La competence tir a l'arc a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.SwordsUp=[[YELLOW]]La competence <20>p<EFBFBD>e a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.AxesUp=[[YELLOW]]La competence hache a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.UnarmedUp=[[YELLOW]]La comp<6D>tence de combat <20> mains nues a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.HerbalismUp=[[YELLOW]]La competence herboriste a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.MiningUp=[[YELLOW]]La competence minage a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.WoodcuttingUp=[[YELLOW]]La competence bucher<65>nage a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.RepairUp=[[YELLOW]]La competence r<>paration a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.ExcavationUp=[[YELLOW]]La competence excavation a augment<6E> de {0}. Total ({1})
 | 
			
		||||
Skills.FeltEasy=[[GRAY]]That felt easy.
 | 
			
		||||
Skills.StackedItems=[[DARK_RED]]Vous ne pouvez pas r<>parer les objets empil<69>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<EFBFBD> en bonne <20>tat.
 | 
			
		||||
Skills.Disarmed=[[DARK_RED]]Vous avez <20>t<EFBFBD> d<>sarm<72> !
 | 
			
		||||
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<72>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<63><72> par [[BLUE]]nossr50,[[GOLD]]mcMMO ajoute beaucoup de comp<6D>tences dans Minecraft,[[GOLD]]Vous pouvez gagner de l'exp<78>rience de diff<66>rentes fa<66>ons,[[GOLD]]Vous devriez taper [[GREEN]]/NOM_COMPETENCE[[GOLD]] pour en savoir plus.,[[DARK_AQUA]]Q: QU'EST-CE QUE <20>A FAIT?,[[GOLD]]Par exemple... en [[DARK_AQUA]]Minant[[GOLD]] Vous allez recevoir des b<>n<EFBFBD>fices comme,[[RED]]le Double Butin[[GOLD]] ou la comp<6D>tence [[RED]]Super Breaker[[GOLD]] qui lorsqu'elle est,[[GOLD]]activ<69>e avec clique droit permet de miner vite, sa dur<75>e,[[GOLD]]d<>pend du niveau de votre comp<6D>tence. Am<41>liorer [[BLUE]]Le Minage,[[GOLD]]Est aussi simple que de mine des ressources pr<70>cieuses !,[[DARK_AQUA]]Q: QU'EST-CE QUE <20>A VEUT DIRE ?,[[GOLD]]Presque toutes les comp<6D>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<63>er une exp<78>rience RPG de qualit<69>.,[[DARK_AQUA]]Q: O<> JE PEUX SUGG<47>RER DES ID<49>ES !?,[[DARK_AQUA]]bit.ly/MCmmoIDEA,[[DARK_AQUA]]Q: COMMENT JE FAIS CI ET <20>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
 | 
			
		||||
							
								
								
									
										357
									
								
								src/com/gmail/nossr50/locale/locale_nl.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								src/com/gmail/nossr50/locale/locale_nl.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,357 @@
 | 
			
		||||
# 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
 | 
			
		||||
							
								
								
									
										351
									
								
								src/com/gmail/nossr50/locale/locale_pl.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										351
									
								
								src/com/gmail/nossr50/locale/locale_pl.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,351 @@
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										366
									
								
								src/com/gmail/nossr50/locale/locale_pt_br.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										366
									
								
								src/com/gmail/nossr50/locale/locale_pt_br.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,366 @@
 | 
			
		||||
Combat.WolfExamine=[[GREEN]]*Voc<6F> examinou um lobo usando Conhecimento de Feras*
 | 
			
		||||
Combat.WolfShowMaster=[[DARK_GREEN]]O Mestre das Feras \: {0}
 | 
			
		||||
Combat.Ignition=[[RED]]*IGNI<4E>AO*
 | 
			
		||||
Combat.BurningArrowHit=[[DARK_RED]]Voc<6F> 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<EFBFBD> foi ferido recentemente e tem que esperar para usar isto. [[YELLOW]]({0}s)
 | 
			
		||||
Item.NeedFeathers=[[GRAY]]Voc<6F> 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<63>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<6D>oes do jogador
 | 
			
		||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- Modificar atributos do jogador
 | 
			
		||||
m.mccMcGod=- Modo Deus
 | 
			
		||||
m.mccSkillInfo=[skillname] [[RED]]- Ver informa<6D>oes sobre a habilidade
 | 
			
		||||
m.mccModDescription=[[RED]]- Breve descri<72>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<63>tico que causa hemorragia
 | 
			
		||||
m.EffectsTaming3_0=Garras afiadas
 | 
			
		||||
m.EffectsTaming3_1=B<EFBFBD>nus de Dano
 | 
			
		||||
m.EffectsTaming4_0=Consci<EFBFBD>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<EFBFBD>ao nos Danos, Resist<73>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<63>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<EFBFBD>ncia do ambiente
 | 
			
		||||
m.AbilBonusTaming1_1=Lobos evitam perigo
 | 
			
		||||
m.AbilBonusTaming2_0=Pele grossa
 | 
			
		||||
m.AbilBonusTaming2_1=Danos pela metade, Resist<73>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 <20>rvores
 | 
			
		||||
m.EffectsWoodCutting1_0=Derrubador de <20>rvores (HABILIDADE ESPECIAL)
 | 
			
		||||
m.EffectsWoodCutting1_1=Explode <20>rvores 
 | 
			
		||||
m.EffectsWoodCutting2_0=Soprador de Folhas
 | 
			
		||||
m.EffectsWoodCutting2_1=Destr<EFBFBD>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<EFBFBD>i folhas rapidamente
 | 
			
		||||
m.WoodCuttingDoubleDropChance=[[RED]]Chance de Drop x2: [[YELLOW]]{0}%
 | 
			
		||||
m.WoodCuttingTreeFellerLength=[[RED]]Dura<72>ao do Derrubador de <20>rvores: [[YELLOW]]{0}s
 | 
			
		||||
 | 
			
		||||
m.SkillArchery=ARCO E FLECHA
 | 
			
		||||
m.XPGainArchery=Atacando monstros/
 | 
			
		||||
m.EffectsArchery1_0=Igni<EFBFBD>ao
 | 
			
		||||
m.EffectsArchery1_1=25% de chance dos inimigos pegarem fogo
 | 
			
		||||
m.EffectsArchery2_0=Atordoar (Jogadores)
 | 
			
		||||
m.EffectsArchery2_1=Desorienta os advers<72>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<72>ao da Igni<6E>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<43>nios (HABILIDADE ESPECIAL)
 | 
			
		||||
m.EffectsAxes1_1=Causa Danos em Area
 | 
			
		||||
m.EffectsAxes2_0=Ataques Cr<43>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<EFBFBD>nus de 4 de dano
 | 
			
		||||
m.AxesCritChance=[[RED]]Chance ataque cr<63>tico: [[YELLOW]]{0}%
 | 
			
		||||
m.AxesSkullLength=[[RED]]Dura<72>ao do Rachador de Cr<43>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<72>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<72>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<EFBFBD>AO
 | 
			
		||||
m.XPGainMining=Minerando Pedras e Min<69>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<72>ao da Super Britadeira: [[YELLOW]]{0}s
 | 
			
		||||
 | 
			
		||||
m.SkillRepair=REPARA<EFBFBD>AO
 | 
			
		||||
m.XPGainRepair=Reparando itens
 | 
			
		||||
m.EffectsRepair1_0=Reparar
 | 
			
		||||
m.EffectsRepair1_1=Reparando Ferramentas e Armaduras de Ferro
 | 
			
		||||
m.EffectsRepair2_0=Mestre em Rapara<72>ao
 | 
			
		||||
m.EffectsRepair2_1=Aumenta a quantia reparada
 | 
			
		||||
m.EffectsRepair3_0=Super Repara<72>ao
 | 
			
		||||
m.EffectsRepair3_1=Dobra a efetividade da Repara<72>ao
 | 
			
		||||
m.EffectsRepair4_0=Repara<EFBFBD>ao de diamantes (N<>vel {0})
 | 
			
		||||
m.EffectsRepair4_1=Rapara Ferramentas e Armaduras de Diamante
 | 
			
		||||
m.RepairRepairMastery=[[RED]]Mestre em Rapara<72>ao: [[YELLOW]]{0}% extra restaurado
 | 
			
		||||
m.RepairSuperRepairChance=[[RED]]Chance de Super Repara<72>ao: [[YELLOW]]{0}%
 | 
			
		||||
 | 
			
		||||
m.SkillUnarmed=DESARMADO
 | 
			
		||||
m.XPGainUnarmed=Atacando monstros
 | 
			
		||||
m.EffectsUnarmed1_0=F<EFBFBD>ria (HABILIDADE ESPECIAL)
 | 
			
		||||
m.EffectsUnarmed1_1=+50% de Dano, Quebra materiais fr<66>geis
 | 
			
		||||
m.EffectsUnarmed2_0=Desarmar (Jogadores)
 | 
			
		||||
m.EffectsUnarmed2_1=Derruba a arma que o advers<72>rio est<73> 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<6F>
 | 
			
		||||
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<72>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<72>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<EFBFBD>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<EFBFBD>ad/or de Tesouros
 | 
			
		||||
m.EffectsExcavation2_1=Encontra itens raros enquanto cava
 | 
			
		||||
m.ExcavationGreenTerraLength=[[RED]]Dura<72>ao da Super Broca: [[YELLOW]]{0}s
 | 
			
		||||
 | 
			
		||||
mcBlockListener.PlacedAnvil=[[DARK_RED]] Voc<6F> colocou uma bigorna, a bigorna pode reparar ferramentas e armaduras.
 | 
			
		||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]Seu lobo voltou para voc<6F>...
 | 
			
		||||
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<EFBFBD>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<EFBFBD>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<EFBFBD> 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<6F> nao tem acesso a uma habilidade, ela nao ser<65> exibida aqui.
 | 
			
		||||
mcPlayerListener.NotInParty=[[RED]]Voc<6F> nao est<73> em nenhuma equipe.
 | 
			
		||||
mcPlayerListener.InviteSuccess=[[GREEN]]Convite enviado.
 | 
			
		||||
mcPlayerListener.ReceivedInvite1=[[RED]]ALERTA: [[GREEN]]Voc<6F> 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<6F> se juntou a equipe {0}
 | 
			
		||||
mcPlayerListener.NoInvites=[[RED]]Voc<6F> nao tem convites pendentes.
 | 
			
		||||
mcPlayerListener.YouAreInParty=[[GREEN]]Voc<6F> est<73> na equipe {0}
 | 
			
		||||
mcPlayerListener.PartyMembers=[[GREEN]]Membros da Equipe
 | 
			
		||||
mcPlayerListener.LeftParty=[[RED]]Voc<6F> 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<73> rodando o mcMMO {0} digite [[YELLOW]]/{1}[[BLUE]] para obter ajuda.
 | 
			
		||||
mcPlayerListener.WIKI=[[BLUE]]Para mais informa<6D>oes - [[GREEN]]http://mcmmo.wikia.com
 | 
			
		||||
mcPlayerListener.PowerLevel=[[RED]]NIVEL TOTAL: 
 | 
			
		||||
mcPlayerListener.PowerLevelLeaderboard=[[BLUE]]-Classifica<63>ao - [[GREEN]]N<>vel - [[WHITE]]Jogador-
 | 
			
		||||
mcPlayerListener.SkillLeaderboard=[[BLUE]]-Classifica<63>ao em [[GREEN]]{0}
 | 
			
		||||
mcPlayerListener.RepairSkill=Repara<EFBFBD>ao (Repair): 
 | 
			
		||||
mcPlayerListener.SwordsSkill=Espadas (Swords): 
 | 
			
		||||
mcPlayerListener.TamingSkill=Domar (Taming): 
 | 
			
		||||
mcPlayerListener.UnarmedSkill=Desarmado (Unarmed): 
 | 
			
		||||
mcPlayerListener.WoodcuttingSkill=Lenhador (Woodcutting): 
 | 
			
		||||
mcPlayerListener.YourStats=[[GREEN]][mcMMO] Estat<61>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<73> dispon<6F>vel!
 | 
			
		||||
Skills.YourTreeFeller=[[GREEN]]Sua habilidade [[YELLOW]]Derrubador de Arvores [[GREEN]]est<73> dispon<6F>vel!
 | 
			
		||||
Skills.YourSuperBreaker=[[GREEN]]Sua habilidade [[YELLOW]]Super Britadeira [[GREEN]]est<73> dispon<6F>vel!
 | 
			
		||||
Skills.YourSerratedStrikes=[[GREEN]]Sua habilidade [[YELLOW]]Ataques Cortantes [[GREEN]]est<73> dispon<6F>vel!
 | 
			
		||||
Skills.YourBerserk=[[GREEN]]Sua habilidade [[YELLOW]]F<>ria [[GREEN]]est<73> dispon<6F>vel!
 | 
			
		||||
Skills.YourSkullSplitter=[[GREEN]]Sua habilidade [[YELLOW]]Rachador de Cr<43>nios [[GREEN]]est<73> dispon<6F>vel!
 | 
			
		||||
Skills.YourGigaDrillBreaker=[[GREEN]]Sua habilidade [[YELLOW]]Super Broca [[GREEN]]est<73> dispon<6F>vel!
 | 
			
		||||
Skills.TooTired=[[RED]]Voc<6F> est<73> 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<43>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<43>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<72>ao aumentada em {0}. Total ({1})
 | 
			
		||||
Skills.WoodcuttingUp=[[YELLOW]]Habilidade de Lenhador aumentada em {0}. Total ({1})
 | 
			
		||||
Skills.RepairUp=[[YELLOW]]Habilidade de Repara<72>ao aumentada em {0}. Total ({1})
 | 
			
		||||
Skills.ExcavationUp=[[YELLOW]]Habilidade de Escava<76>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<6F> precisa de mais
 | 
			
		||||
Skills.AdeptDiamond=[[DARK_RED]]Voc<6F> nao tem o n<>vel necess<73>rio para reparar Diamante
 | 
			
		||||
Skills.FullDurability=[[GRAY]]J<> est<73> com Durabilidade cheia.
 | 
			
		||||
Skills.Disarmed=[[DARK_RED]]Voc<6F> foi Desarmado!
 | 
			
		||||
mcPlayerListener.SorcerySkill=Feiti<EFBFBD>aria (Sorcery): 
 | 
			
		||||
 | 
			
		||||
m.SkillSorcery=FEITI<EFBFBD>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 <20> 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<6F> pode ganhar experi<72>ncia de muitas maneiras.,[[GOLD]]Digite [[GREEN]]/NOME_DA_HABILIDADE[[GOLD]] para obter informa<6D>oes sobre a habilidade.,[[DARK_AQUA]]Q: O QUE ELE FAZ? [[GOLD]]Por exemplo... em [[DARK_AQUA]]Minera<72>ao[[GOLD]] voc<6F> receber<65> benef<65>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<72>ao. [[GOLD]]que depende do n<>vel da sua habilidade. Aumentar o n<>vel de [[BLUE]]Minera<72>ao[[GOLD]] <20> simples. basta minerar pedras ou min<69>rios!,[[GOLD]]O objetivo do mcMMO <20> criar uma experi<72>ncia de RPG de qualidade.,[[GOLD]]Digite [[GREEN]]/{0}[[GOLD]] para uma lista de comandos poss<73>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<6D>oes. leia a wiki do McMMO: [[RED]]mcmmo.wikia.com
 | 
			
		||||
Party.Locked=[[RED]]Equipe est<73> trancada, s<> o l<>der pode convidar.
 | 
			
		||||
Party.IsntLocked=[[GRAY]]Equipe nao est<73> trancada
 | 
			
		||||
Party.Unlocked=[[GRAY]]Equipe foi Destrancada
 | 
			
		||||
Party.Help1=[[RED]]O uso certo <20> [[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<6D>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<61>a da equipe use [[YELLOW]]/{0} [[WHITE]]owner <player>
 | 
			
		||||
Party.NotOwner=[[DARK_RED]]Voc<6F> nao <20> o l<>der da equipe
 | 
			
		||||
Party.InvalidName=[[DARK_RED]]Este nome nao <20> valido
 | 
			
		||||
Party.PasswordSet=[[GREEN]]Senha da equipe: {0}
 | 
			
		||||
Party.CouldNotKick=[[DARK_RED]]Nao foi poss<73>vel excluir o jogador {0}
 | 
			
		||||
Party.NotInYourParty=[[DARK_RED]]{0} nao est<73> na sua equipe
 | 
			
		||||
Party.CouldNotSetOwner=[[DARK_RED]]Nao foi poss<73>vel passar a lideran<61>a para {0}
 | 
			
		||||
Commands.xprate.proper=[[DARK_AQUA]]Uso certo <20> /{0} [integer] [true:false]
 | 
			
		||||
Commands.xprate.proper2=[[DARK_AQUA]]Tamb<6D>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<4D>OU!
 | 
			
		||||
Commands.xprate.started2=[[GOLD]]XP RATE AGORA <20> {0}x!!
 | 
			
		||||
Commands.xplock.locked=[[GOLD]]Sua barra de XP BAR est<73> 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
 | 
			
		||||
							
								
								
									
										343
									
								
								src/com/gmail/nossr50/locale/locale_ru.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										343
									
								
								src/com/gmail/nossr50/locale/locale_ru.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,343 @@
 | 
			
		||||
Combat.WolfExamine=[[GREEN]]**<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"**
 | 
			
		||||
Combat.WolfExamine=[[GREEN]]**<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"**
 | 
			
		||||
Combat.WolfShowMaster=[[DARK_GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \: {0}
 | 
			
		||||
Combat.Ignition=[[RED]]**<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!**
 | 
			
		||||
Combat.BurningArrowHit=[[DARK_RED]]<5D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\!
 | 
			
		||||
Combat.TouchedFuzzy=[[DARK_RED]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
Combat.TargetDazed=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [[DARK_RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Combat.WolfNoMaster=[[GRAY]]<5D> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Combat.WolfHealth=[[GREEN]]<5D> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> {0} <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 
 | 
			
		||||
Combat.StruckByGore=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Combat.Gore=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Combat.ArrowDeflect=[[WHITE]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Item.ChimaeraWingFail=**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\!**
 | 
			
		||||
Item.ChimaeraWingPass=**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>...**
 | 
			
		||||
Item.InjuredWait=<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. [[YELLOW]]({0}s)
 | 
			
		||||
Item.NeedFeathers=[[GRAY]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
 | 
			
		||||
m.mccPartyCommands=[[GREEN]]--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--
 | 
			
		||||
m.mccParty=[party name] [[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccPartyQ=[[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccPartyToggle=[[RED]] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.mccPartyInvite=[player name] [[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccPartyAccept=[[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccPartyTeleport=[party member name] [[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccOtherCommands=[[GREEN]]--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--
 | 
			
		||||
m.mccStats=- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> McMMo <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccLeaderboards=- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccMySpawn=- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccClearMySpawn=- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccToggleAbility=- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccAdminToggle=- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.mccWhois=[playername] [[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccMmoedit=[playername] [skill] [newvalue] [[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccMcGod=- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccSkillInfo=[skillname] [[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.mccModDescription=[[RED]]- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> 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=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.YourStats=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.SkillTaming=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainTaming=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming4_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming5_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.EffectsTaming5_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming6_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsTaming6_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilLockTaming1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 100+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.AbilLockTaming2=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 250+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
 | 
			
		||||
m.AbilLockTaming3=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 500+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.AbilLockTaming4=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 700+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.AbilBonusTaming1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1/6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusTaming4_1=+2 <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.TamingGoreChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillWoodCutting=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainWoodCutting=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsWoodCutting1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsWoodCutting1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsWoodCutting2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsWoodCutting2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsWoodCutting3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsWoodCutting3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilLockWoodCutting1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 100+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.AbilBonusWoodCutting1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusWoodCutting1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.WoodCuttingDoubleDropChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.WoodCuttingTreeFellerLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillArchery=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainArchery=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsArchery1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsArchery1_1=25% <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsArchery2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsArchery2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsArchery3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+
 | 
			
		||||
m.EffectsArchery3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsArchery4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsArchery4_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.ArcheryDazeChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryRetrieveChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.ArcheryIgnitionLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0} <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.ArcheryDamagePlus=[[RED]]<5D><><EFBFBD><EFBFBD>+ (Rank{0}): [[YELLOW]]Bonus {0} damage
 | 
			
		||||
m.SkillAxes=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainAxes=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAxes1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsAxes1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAxes2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAxes2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAxes3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(500 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsAxes3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilLockAxes1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 500+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.AbilBonusAxes1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusAxes1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> 4 <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AxesCritChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.AxesSkullLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}s
 | 
			
		||||
m.SkillSwords=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainSwords=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 50% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsSwords2_1=25% <20><><EFBFBD><EFBFBD><EFBFBD>+ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
 | 
			
		||||
m.EffectsSwords3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 <20><><EFBFBD>
 | 
			
		||||
m.EffectsSwords4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords4_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords5_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsSwords5_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.SwordsCounterAttChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.SwordsBleedLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0} <20><><EFBFBD>
 | 
			
		||||
m.SwordsBleedChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0} %
 | 
			
		||||
m.SwordsParryChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0} %
 | 
			
		||||
m.SwordsSSLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x <20><><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]]{0}s
 | 
			
		||||
m.SwordsTickNote=[[GRAY]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]1 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.SkillAcrobatics=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainAcrobatics=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsAcrobatics3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AcrobaticsRollChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.AcrobaticsGracefulRollChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.AcrobaticsDodgeChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillMining=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainMining=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsMining1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsMining1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsMining2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsMining2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.MiningDoubleDropChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.MiningSuperBreakerLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]]{0}s
 | 
			
		||||
m.SkillRepair=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainRepair=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsRepair4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ({0}+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsRepair4_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.RepairRepairMastery=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.RepairSuperRepairChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.SkillUnarmed=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.XPGainUnarmed=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsUnarmed1_1=+50% <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsUnarmed2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>.
 | 
			
		||||
m.EffectsUnarmed3_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed4_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed5_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsUnarmed5_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilLockUnarmed1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 250+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
 | 
			
		||||
m.AbilLockUnarmed2=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 500+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
 | 
			
		||||
m.AbilBonusUnarmed1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.AbilBonusUnarmed1_1=+2 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.AbilBonusUnarmed2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.AbilBonusUnarmed2_1=+4 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.UnarmedArrowDeflectChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedDisarmChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.UnarmedBerserkLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]]{0}s
 | 
			
		||||
m.SkillHerbalism=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainHerbalism=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsHerbalism1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsHerbalism1_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3-<2D><> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsHerbalism2_0="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsHerbalism2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsHerbalism3_0="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"(<28><><EFBFBD>)
 | 
			
		||||
m.EffectsHerbalism3_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsHerbalism4_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
 | 
			
		||||
m.EffectsHerbalism4_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsHerbalism5_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsHerbalism5_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.HerbalismGreenTerraLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]]{0}s
 | 
			
		||||
m.HerbalismGreenThumbChance=[[RED]]<5D><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]]{0}%
 | 
			
		||||
m.HerbalismGreenThumbStage=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}
 | 
			
		||||
m.HerbalismDoubleDropChance=[[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: [[YELLOW]]{0}%
 | 
			
		||||
m.HerbalismFoodPlus=[[RED]]<5D><><EFBFBD>+ (Rank{0}): [[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD> {0} <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.SkillExcavation=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.XPGainExcavation=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsExcavation1_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
			
		||||
m.EffectsExcavation1_1=3-<2D><> <20><><EFBFBD><EFBFBD>, 3-<2D><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsExcavation2_0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.EffectsExcavation2_1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.ExcavationGreenTerraLength=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>": [[YELLOW]]{0}s
 | 
			
		||||
mcBlockListener.PlacedAnvil=[[DARK_RED]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
 | 
			
		||||
mcEntityListener.WolfComesBack=[[DARK_GRAY]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>
 | 
			
		||||
mcPlayerListener.AbilitiesOff=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.AbilitiesOn=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.AbilitiesRefreshed=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\!**
 | 
			
		||||
mcPlayerListener.AcrobaticsSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.ArcherySkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.AxesSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.ExcavationSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.GodModeDisabled=[[YELLOW]]mcMMO <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.GodModeEnabled=[[YELLOW]]mcMMO <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.GreenThumb=[[GREEN]]**"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"**
 | 
			
		||||
mcPlayerListener.GreenThumbFail=[[RED]]**"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
mcPlayerListener.HerbalismSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.MiningSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.MyspawnCleared=[[DARK_AQUA]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.MyspawnNotExist=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.MyspawnSet=[[DARK_AQUA]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.MyspawnTimeNotice=<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}m {1}s <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.NoPermission=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.NoSkillNote=[[DARK_GRAY]]<5D><><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.NotInParty=[[RED]]<5D><> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
mcPlayerListener.InviteSuccess=[[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.ReceivedInvite1=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[GREEN]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0} <20><> {1}
 | 
			
		||||
mcPlayerListener.ReceivedInvite2=[[YELLOW]]Type [[GREEN]]/{0}[[YELLOW]] <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.InviteAccepted=[[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}
 | 
			
		||||
mcPlayerListener.NoInvites=[[RED]]<5D> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.YouAreInParty=[[GREEN]]<5D><> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}
 | 
			
		||||
mcPlayerListener.PartyMembers=[[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.LeftParty=[[RED]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.JoinedParty=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: {0}
 | 
			
		||||
mcPlayerListener.PartyChatOn=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.PartyChatOff=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.AdminChatOn=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.AdminChatOff=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> [[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.MOTD=[[BLUE]]<5D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> McMMO {0} type [[YELLOW]]/{1}[[BLUE]] <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
mcPlayerListener.WIKI=[[GREEN]]http://mcmmo.wikia.com[[BLUE]] - mcMMO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
mcPlayerListener.PowerLevel=[[DARK_RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.PowerLevelLeaderboard=[[YELLOW]]--mcMMO[[BLUE]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--
 | 
			
		||||
mcPlayerListener.SkillLeaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--
 | 
			
		||||
mcPlayerListener.RepairSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.SwordsSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.TamingSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.UnarmedSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.WoodcuttingSkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
mcPlayerListener.YourStats=[[GREEN]][mcMMO] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.InformedOnJoin={0} [[GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.InformedOnQuit={0} [[GREEN]] <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Skills.YourGreenTerra=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[[YELLOW]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.YourTreeFeller=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.YourSuperBreaker=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]"<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.YourSerratedStrikes=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.YourBerserk=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.YourSkullSplitter=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.YourGigaDrillBreaker=[[GREEN]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>" [[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
Skills.TooTired=[[RED]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>.
 | 
			
		||||
Skills.ReadyHoe=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.LowerHoe=[[GRAY]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.ReadyAxe=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.LowerAxe=[[GRAY]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.ReadyFists=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.LowerFists=[[GRAY]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.ReadyPickAxe=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.LowerPickAxe=[[GRAY]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.ReadyShovel=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.LowerShovel=[[GRAY]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.ReadySword=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>**
 | 
			
		||||
Skills.LowerSword=[[GRAY]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>**
 | 
			
		||||
Skills.BerserkOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.BerserkPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.GreenTerraOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.GreenTerraPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.TreeFellerOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.TreeFellerPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.SuperBreakerOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.SuperBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.SerratedStrikesOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.SerratedStrikesPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.SkullSplitterOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.SkullSplitterPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.GigaDrillBreakerOn=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.GigaDrillBreakerPlayer=[[GREEN]]{0}[[DARK_GREEN]] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"!
 | 
			
		||||
Skills.GreenTerraOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.TreeFellerOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.SuperBreakerOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.SerratedStrikesOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.BerserkOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.SkullSplitterOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.GigaDrillBreakerOff=[[RED]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Skills.TamingUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.AcrobaticsUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.ArcheryUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.SwordsUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.AxesUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.UnarmedUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.HerbalismUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.MiningUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.WoodcuttingUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.RepairUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.ExcavationUp=[[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> {0}. <20><><EFBFBD><EFBFBD><EFBFBD> ({1})
 | 
			
		||||
Skills.FeltEasy=[[GRAY]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
Skills.StackedItems=[[DARK_RED]]<5D><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Skills.NeedMore=[[DARK_RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Skills.AdeptDiamond=[[DARK_RED]]<5D><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Skills.FullDurability=[[GRAY]]<5D><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
Skills.Disarmed=[[DARK_RED]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
mcPlayerListener.SorcerySkill=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 
 | 
			
		||||
m.SkillSorcery=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Sorcery.HasCast=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"**[[GOLD]]
 | 
			
		||||
Sorcery.Current_Mana=[[DARK_AQUA]] <20><><EFBFBD><EFBFBD>
 | 
			
		||||
Sorcery.SpellSelected=[[GREEN]]-=([[GOLD]]{0}[[GREEN]])=- [[RED]]([[GRAY]]{1}[[RED]])
 | 
			
		||||
Sorcery.Cost=[[RED]][COST] {0} <20><><EFBFBD><EFBFBD>
 | 
			
		||||
Sorcery.OOM=[[DARK_AQUA]][[[GOLD]]{2}[[DARK_AQUA]]][[DARK_GRAY]] <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [[YELLOW]]([[RED]]{0}[[YELLOW]]/[[GRAY]]{1}[[YELLOW]])
 | 
			
		||||
Sorcery.Water.Thunder=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Sorcery.Curative.Self=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
			
		||||
Sorcery.Curative.Other=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
m.LVL=[[DARK_GRAY]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [[GREEN]]{0} [[DARK_AQUA]]XP[[YELLOW]]([[GOLD]]{1}[[YELLOW]]/[[GOLD]]{2}[[YELLOW]])
 | 
			
		||||
Combat.BeastLore=[[GREEN]]**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
 | 
			
		||||
Combat.BeastLoreOwner=[[DARK_AQUA]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ([[RED]]{0}[[DARK_AQUA]])
 | 
			
		||||
Combat.BeastLoreHealthWolfTamed=[[DARK_AQUA]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ([[GREEN]]{0}[[DARK_AQUA]]/20)
 | 
			
		||||
Combat.BeastLoreHealthWolf=[[DARK_AQUA]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ([[GREEN]]{0}[[DARK_AQUA]]/8)
 | 
			
		||||
Party.Locked=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
 | 
			
		||||
Party.IsntLocked=[[GRAY]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.Unlocked=[[GRAY]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.Help1=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]<name>[[YELLOW]] <20><><EFBFBD> [[WHITE]]'q' [[YELLOW]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.Help2=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]<<3C><><EFBFBD>> <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
 | 
			
		||||
Party.Help3=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /{0} ? <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.Help4=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]<<3C><><EFBFBD>> [[YELLOW]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> [[WHITE]]'q' [[YELLOW]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.Help5=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]lock
 | 
			
		||||
Party.Help6=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]unlock
 | 
			
		||||
Party.Help7=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]password <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
 | 
			
		||||
Party.Help8=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]kick <<3C><><EFBFBD><EFBFBD><EFBFBD>>
 | 
			
		||||
Party.Help9=[[RED]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[YELLOW]]/{0} [[WHITE]]owner <<3C><><EFBFBD><EFBFBD><EFBFBD>>
 | 
			
		||||
Party.NotOwner=[[DARK_RED]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.InvalidName=[[DARK_RED]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.PasswordSet=[[GREEN]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}
 | 
			
		||||
Party.CouldNotKick=[[DARK_RED]]<5D><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}
 | 
			
		||||
Party.NotInYourParty=[[DARK_RED]]{0} <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
Party.CouldNotSetOwner=[[DARK_RED]]<5D><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {0}
 | 
			
		||||
mcMMO.Description=[[DARK_AQUA]]Q: <20><><EFBFBD> <20><><EFBFBD>?,[[GOLD]]mcMMO <20><><EFBFBD> [[RED]]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[[GOLD]] RPG <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Bukkit <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[BLUE]]nossr50,[[GOLD]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Minecraft <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.,[[GOLD]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,[[GOLD]]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[GREEN]]/SKILLNAME[[GOLD]] ?,[[DARK_AQUA]]Q: <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?,[[GOLD]]<5D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... in [[DARK_AQUA]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[[GOLD]] <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]2-<2D><> <20><><EFBFBD><EFBFBD>[[GOLD]] <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[RED]]"<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"[[GOLD]] ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[GOLD]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>,[[GOLD]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [[BLUE]]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,[[GOLD]]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>!
 | 
			
		||||
							
								
								
									
										75
									
								
								src/com/gmail/nossr50/locale/mcLocale.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/com/gmail/nossr50/locale/mcLocale.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										479
									
								
								src/com/gmail/nossr50/m.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										479
									
								
								src/com/gmail/nossr50/m.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,479 @@
 | 
			
		||||
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!
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	//The lazy way to default to 0
 | 
			
		||||
	
 | 
			
		||||
	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 == 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);
 | 
			
		||||
		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 == 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)
 | 
			
		||||
	{
 | 
			
		||||
		if(is.getTypeId() == 268 || is.getTypeId() == 267 || is.getTypeId() == 272 || is.getTypeId() == 283 || is.getTypeId() == 276)
 | 
			
		||||
		{
 | 
			
		||||
			return true;
 | 
			
		||||
		} else 
 | 
			
		||||
		{
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	public static boolean isHoe(ItemStack is)
 | 
			
		||||
	{
 | 
			
		||||
		int id = is.getTypeId();
 | 
			
		||||
		if(id == 290 || id == 291 || id == 292 || id == 293 || id == 294)
 | 
			
		||||
		{
 | 
			
		||||
			return true;
 | 
			
		||||
		} else 
 | 
			
		||||
		{
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	public static boolean isShovel(ItemStack is){
 | 
			
		||||
		if(is.getTypeId() == 269 || is.getTypeId() == 273 || is.getTypeId() == 277 || is.getTypeId() == 284 || is.getTypeId() == 256){
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	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;
 | 
			
		||||
		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;
 | 
			
		||||
			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];
 | 
			
		||||
				//Check to see if the user is in the DB
 | 
			
		||||
				id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'"); 
 | 
			
		||||
				//Prepare some variables
 | 
			
		||||
				/*
 | 
			
		||||
    			if(myspawn != null && myspawn.length() > 0)
 | 
			
		||||
    			{
 | 
			
		||||
    				String[] split = myspawn.split(",");
 | 
			
		||||
    				x = split[0];
 | 
			
		||||
    				y = split[1];
 | 
			
		||||
    				z = split[2];
 | 
			
		||||
    			}
 | 
			
		||||
				 */
 | 
			
		||||
				/*
 | 
			
		||||
    		    if(myspawnworld.equals("") || myspawnworld == null)
 | 
			
		||||
    		    	myspawnworld = pluginx.getServer().getWorlds().get(0).toString();
 | 
			
		||||
				 */
 | 
			
		||||
				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) 
 | 
			
		||||
							+" 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) 
 | 
			
		||||
							+" 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) 
 | 
			
		||||
							+" 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) 
 | 
			
		||||
							+" 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); 
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										303
									
								
								src/com/gmail/nossr50/mcMMO.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										303
									
								
								src/com/gmail/nossr50/mcMMO.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,303 @@
 | 
			
		||||
package com.gmail.nossr50;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.Mob;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.SkillType;
 | 
			
		||||
import com.gmail.nossr50.command.Commands;
 | 
			
		||||
import com.gmail.nossr50.config.*;
 | 
			
		||||
import com.gmail.nossr50.spout.SpoutStuff;
 | 
			
		||||
import com.gmail.nossr50.spout.mmoHelper;
 | 
			
		||||
import com.gmail.nossr50.listeners.mcBlockListener;
 | 
			
		||||
import com.gmail.nossr50.listeners.mcEntityListener;
 | 
			
		||||
import com.gmail.nossr50.listeners.mcPlayerListener;
 | 
			
		||||
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.logging.Level;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.command.Command;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
	public static Database database = null;
 | 
			
		||||
	public Mob mob = new Mob();
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
		//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_TARGET, entityListener, Priority.Normal, this);
 | 
			
		||||
		pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
 | 
			
		||||
		pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.High, this);
 | 
			
		||||
		pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
 | 
			
		||||
		
 | 
			
		||||
		//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);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		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().scheduleAsyncRepeatingTask(this, mcMMO_Timer, 0, 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."); 
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) 
 | 
			
		||||
	{
 | 
			
		||||
		return Commands.processCommands(sender, command, label, args);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * 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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										315
									
								
								src/com/gmail/nossr50/mcPermissions.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										315
									
								
								src/com/gmail/nossr50/mcPermissions.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,315 @@
 | 
			
		||||
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 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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										91
									
								
								src/com/gmail/nossr50/mcTimer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/com/gmail/nossr50/mcTimer.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
			
		||||
package com.gmail.nossr50;
 | 
			
		||||
import org.bukkit.entity.*;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.LoadProperties;
 | 
			
		||||
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();
 | 
			
		||||
        	}
 | 
			
		||||
			
 | 
			
		||||
			if(LoadProperties.enableRegen && mcPermissions.getInstance().regeneration(player) && System.currentTimeMillis() >= PP.getRecentlyHurt() + 60000)
 | 
			
		||||
			{
 | 
			
		||||
				if(thecount == 20 || thecount == 40 || thecount == 60 || thecount == 80){
 | 
			
		||||
				    if(player != null &&
 | 
			
		||||
				    	player.getHealth() > 0 && player.getHealth() < 20 
 | 
			
		||||
				    	&& m.getPowerLevel(player) >= 1000){
 | 
			
		||||
				    	player.setHealth(m.calculateHealth(player.getHealth(), 1));
 | 
			
		||||
				    }
 | 
			
		||||
				}
 | 
			
		||||
				if(thecount == 40 || thecount == 80){
 | 
			
		||||
			   		if(player != null &&
 | 
			
		||||
			   			player.getHealth() > 0 && player.getHealth() < 20 
 | 
			
		||||
			    		&& m.getPowerLevel(player) >= 500 
 | 
			
		||||
			    		&& m.getPowerLevel(player) < 1000){
 | 
			
		||||
			    		player.setHealth(m.calculateHealth(player.getHealth(), 1));
 | 
			
		||||
			    	}
 | 
			
		||||
				}
 | 
			
		||||
				if(thecount == 80)
 | 
			
		||||
				{
 | 
			
		||||
			    	if(player != null &&
 | 
			
		||||
			    		player.getHealth() > 0 && player.getHealth() < 20  
 | 
			
		||||
			    		&& m.getPowerLevel(player) < 500){
 | 
			
		||||
			    		player.setHealth(m.calculateHealth(player.getHealth(), 1));
 | 
			
		||||
			    	}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		/*
 | 
			
		||||
		 * NON-PLAYER BLEED MONITORING
 | 
			
		||||
		 */
 | 
			
		||||
		
 | 
			
		||||
		if(thecount % 2 == 0)
 | 
			
		||||
			Swords.bleedSimulate(plugin);
 | 
			
		||||
		
 | 
			
		||||
		//SETUP FOR HP REGEN/BLEED
 | 
			
		||||
		thecount++;
 | 
			
		||||
		if(thecount >= 81)
 | 
			
		||||
			thecount = 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										470
									
								
								src/com/gmail/nossr50/party/Party.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										470
									
								
								src/com/gmail/nossr50/party/Party.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,470 @@
 | 
			
		||||
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.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) == null || Users.getProfile(playerb) == null)
 | 
			
		||||
    	{
 | 
			
		||||
    		Users.addUser(playera);
 | 
			
		||||
    		Users.addUser(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, 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, 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(Player player, String partyName) {
 | 
			
		||||
    	if(this.partyPlayers.get(partyName) != null)
 | 
			
		||||
    	{
 | 
			
		||||
	    	if(this.partyPlayers.get(partyName).get(player.getName()) == null) return false;
 | 
			
		||||
	    	return this.partyPlayers.get(partyName).get(player.getName());
 | 
			
		||||
    	}
 | 
			
		||||
    	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(); }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										89
									
								
								src/com/gmail/nossr50/skills/Acrobatics.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/com/gmail/nossr50/skills/Acrobatics.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
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);
 | 
			
		||||
					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);
 | 
			
		||||
					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);
 | 
			
		||||
	    				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);
 | 
			
		||||
					Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
 | 
			
		||||
				}
 | 
			
		||||
				event.setDamage(event.getDamage() / 2);
 | 
			
		||||
				//Needs to deal minimal damage
 | 
			
		||||
				if(event.getDamage() <= 0)
 | 
			
		||||
					event.setDamage(1);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										99
									
								
								src/com/gmail/nossr50/skills/Archery.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								src/com/gmail/nossr50/skills/Archery.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
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)
 | 
			
		||||
	{
 | 
			
		||||
		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$
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										155
									
								
								src/com/gmail/nossr50/skills/Axes.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								src/com/gmail/nossr50/skills/Axes.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,155 @@
 | 
			
		||||
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--;
 | 
			
		||||
		    			}
 | 
			
		||||
	    			}
 | 
			
		||||
	    		}
 | 
			
		||||
	    	}
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										260
									
								
								src/com/gmail/nossr50/skills/Excavation.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								src/com/gmail/nossr50/skills/Excavation.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,260 @@
 | 
			
		||||
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)
 | 
			
		||||
	{
 | 
			
		||||
		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);
 | 
			
		||||
    	Skills.XpCheckSkill(SkillType.EXCAVATION, player);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										390
									
								
								src/com/gmail/nossr50/skills/Herbalism.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										390
									
								
								src/com/gmail/nossr50/skills/Herbalism.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,390 @@
 | 
			
		||||
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);
 | 
			
		||||
	    	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.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 == 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);
 | 
			
		||||
    		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);
 | 
			
		||||
	    				}
 | 
			
		||||
	    			}
 | 
			
		||||
	    			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);
 | 
			
		||||
	    				}
 | 
			
		||||
	    			}
 | 
			
		||||
	    			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);
 | 
			
		||||
	    	}
 | 
			
		||||
    		//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);
 | 
			
		||||
	    	}
 | 
			
		||||
	    	//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);
 | 
			
		||||
	    	}
 | 
			
		||||
    	}
 | 
			
		||||
    	Skills.XpCheckSkill(SkillType.HERBALISM, player);
 | 
			
		||||
    }
 | 
			
		||||
	public static void breadCheck(Player player, ItemStack is)
 | 
			
		||||
	{
 | 
			
		||||
		PlayerProfile PP = Users.getProfile(player);
 | 
			
		||||
		int herbalism = PP.getSkillLevel(SkillType.HERBALISM);
 | 
			
		||||
	    int heal = 0;
 | 
			
		||||
		if(is.getTypeId() == 297)
 | 
			
		||||
	    {
 | 
			
		||||
	    	if(herbalism >= 50 && herbalism < 150)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 1;
 | 
			
		||||
    		} else if (herbalism >= 150 && herbalism < 250)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 2;
 | 
			
		||||
    		} else if (herbalism >= 250 && herbalism < 350)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 3;
 | 
			
		||||
    		} else if (herbalism >= 350 && herbalism < 450)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 4;
 | 
			
		||||
    		} else if (herbalism >= 450 && herbalism < 550)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 5;
 | 
			
		||||
    		} else if (herbalism >= 550 && herbalism < 650)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 6;
 | 
			
		||||
    		} else if (herbalism >= 650 && herbalism < 750)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 7;
 | 
			
		||||
    		} else if (herbalism >= 750)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 8;
 | 
			
		||||
    		}
 | 
			
		||||
	    	
 | 
			
		||||
	    	if(player.getHealth()+heal > 20)
 | 
			
		||||
	    	{
 | 
			
		||||
	    		player.setHealth(20);
 | 
			
		||||
	    	}
 | 
			
		||||
	    	else
 | 
			
		||||
	    		player.setHealth(player.getHealth()+heal);
 | 
			
		||||
	   	}
 | 
			
		||||
    }
 | 
			
		||||
    public static void stewCheck(Player player, ItemStack is)
 | 
			
		||||
    {
 | 
			
		||||
    	PlayerProfile PP = Users.getProfile(player);
 | 
			
		||||
    	int herbalism = PP.getSkillLevel(SkillType.HERBALISM);
 | 
			
		||||
    	int heal = 0;
 | 
			
		||||
    	if(is.getTypeId() == 282)
 | 
			
		||||
    	{
 | 
			
		||||
    		if(herbalism >= 50 && herbalism < 150)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 1;
 | 
			
		||||
    		} else if (herbalism >= 150 && herbalism < 250)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 2;
 | 
			
		||||
    		} else if (herbalism >= 250 && herbalism < 350)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 3;
 | 
			
		||||
    		} else if (herbalism >= 350 && herbalism < 450)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 4;
 | 
			
		||||
    		} else if (herbalism >= 450 && herbalism < 550)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 5;
 | 
			
		||||
    		} else if (herbalism >= 550 && herbalism < 650)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 6;
 | 
			
		||||
    		} else if (herbalism >= 650 && herbalism < 750)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 7;
 | 
			
		||||
    		} else if (herbalism >= 750)
 | 
			
		||||
    		{
 | 
			
		||||
    			heal = 8;
 | 
			
		||||
    		}
 | 
			
		||||
    		
 | 
			
		||||
    		if(player.getHealth()+heal > 20)
 | 
			
		||||
	    	{
 | 
			
		||||
	    		player.setHealth(20);
 | 
			
		||||
	    	}
 | 
			
		||||
	    	else
 | 
			
		||||
	    		player.setHealth(player.getHealth()+heal);
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										415
									
								
								src/com/gmail/nossr50/skills/Mining.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										415
									
								
								src/com/gmail/nossr50/skills/Mining.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,415 @@
 | 
			
		||||
package com.gmail.nossr50.skills;
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
    	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)
 | 
			
		||||
    		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);
 | 
			
		||||
    	if(LoadProperties.spoutEnabled)
 | 
			
		||||
    		SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
 | 
			
		||||
    	
 | 
			
		||||
    	Skills.XpCheckSkill(SkillType.MINING, player);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										480
									
								
								src/com/gmail/nossr50/skills/Repair.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										480
									
								
								src/com/gmail/nossr50/skills/Repair.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,480 @@
 | 
			
		||||
package com.gmail.nossr50.skills;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
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.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;
 | 
			
		||||
        
 | 
			
		||||
	
 | 
			
		||||
	@SuppressWarnings("deprecation")
 | 
			
		||||
	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;
 | 
			
		||||
    	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);
 | 
			
		||||
	        			player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
	        			durabilityAfter = player.getItemInHand().getDurability();
 | 
			
		||||
	        			dif = (short) (durabilityBefore - durabilityAfter);
 | 
			
		||||
	        			dif = (short) (dif * 6); //Boost XP
 | 
			
		||||
	        			PP.addXP(SkillType.REPAIR, dif*10);
 | 
			
		||||
	        			
 | 
			
		||||
	        			//CLANG CLANG
 | 
			
		||||
	        			if(LoadProperties.spoutEnabled)
 | 
			
		||||
	        				SpoutStuff.playRepairNoise(player);
 | 
			
		||||
        			} 
 | 
			
		||||
        			else if (isIronArmor(is) && hasItem(player, rIron)){
 | 
			
		||||
        			/*
 | 
			
		||||
        			 * IRON ARMOR
 | 
			
		||||
        			 */
 | 
			
		||||
        				removeItem(player, rIron);
 | 
			
		||||
	            		player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
	            		durabilityAfter = player.getItemInHand().getDurability();
 | 
			
		||||
	            		dif = (short) (durabilityBefore - durabilityAfter);
 | 
			
		||||
	            		dif = (short) (dif * 2); //Boost XP
 | 
			
		||||
	            		PP.addXP(SkillType.REPAIR, dif*10);
 | 
			
		||||
	            		
 | 
			
		||||
	            		//CLANG CLANG
 | 
			
		||||
	        			if(LoadProperties.spoutEnabled)
 | 
			
		||||
	        				SpoutStuff.playRepairNoise(player);
 | 
			
		||||
	            	//GOLD ARMOR
 | 
			
		||||
        			} else if (isGoldArmor(is) && hasItem(player, rGold)){
 | 
			
		||||
        				removeItem(player, rGold);
 | 
			
		||||
        				player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
        				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);
 | 
			
		||||
        				
 | 
			
		||||
        				//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);
 | 
			
		||||
            			/*
 | 
			
		||||
            			 * Repair Durability and calculate dif
 | 
			
		||||
            			 */
 | 
			
		||||
            			player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
            			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);
 | 
			
		||||
        			} else if(isWoodTools(is) && hasItem(player,rWood)){
 | 
			
		||||
        				removeItem(player,rWood);
 | 
			
		||||
            			/*
 | 
			
		||||
            			 * Repair Durability and calculate dif
 | 
			
		||||
            			 */
 | 
			
		||||
            			player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
            			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);
 | 
			
		||||
        			} else if(isIronTools(is) && hasItem(player, rIron)){
 | 
			
		||||
            			removeItem(player, rIron);
 | 
			
		||||
            			/*
 | 
			
		||||
            			 * Repair Durability and calculate dif
 | 
			
		||||
            			 */
 | 
			
		||||
            			player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
            			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);
 | 
			
		||||
            			
 | 
			
		||||
            			//CLANG CLANG
 | 
			
		||||
	        			if(LoadProperties.spoutEnabled)
 | 
			
		||||
	        				SpoutStuff.playRepairNoise(player);
 | 
			
		||||
            		} else if (isDiamondTools(is) && hasItem(player, rDiamond) && PP.getSkillLevel(SkillType.REPAIR) >= LoadProperties.repairdiamondlevel){ //Check if its diamond and the player has diamonds
 | 
			
		||||
            			/*
 | 
			
		||||
            			 * DIAMOND TOOLS
 | 
			
		||||
            			 */
 | 
			
		||||
            			player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
            			removeItem(player, rDiamond);
 | 
			
		||||
            			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);
 | 
			
		||||
            			
 | 
			
		||||
            			//CLANG CLANG
 | 
			
		||||
	        			if(LoadProperties.spoutEnabled)
 | 
			
		||||
	        				SpoutStuff.playRepairNoise(player);
 | 
			
		||||
            		} else if(isGoldTools(is) && hasItem(player, rGold)){
 | 
			
		||||
            			player.getItemInHand().setDurability(getRepairAmount(is, player));
 | 
			
		||||
            			removeItem(player, rGold);
 | 
			
		||||
            			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);
 | 
			
		||||
            			
 | 
			
		||||
            			//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 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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										409
									
								
								src/com/gmail/nossr50/skills/Skills.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										409
									
								
								src/com/gmail/nossr50/skills/Skills.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,409 @@
 | 
			
		||||
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)
 | 
			
		||||
    {
 | 
			
		||||
    	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;
 | 
			
		||||
	    	}
 | 
			
		||||
    		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)
 | 
			
		||||
	{
 | 
			
		||||
    	PlayerProfile PP = Users.getProfile(player);
 | 
			
		||||
    	if(PP != null)
 | 
			
		||||
    	{
 | 
			
		||||
	    	if(!PP.getAbilityUse())
 | 
			
		||||
	    		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;
 | 
			
		||||
		    	}
 | 
			
		||||
	    		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;
 | 
			
		||||
		    	}
 | 
			
		||||
	    		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;
 | 
			
		||||
		    	}
 | 
			
		||||
	    		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;
 | 
			
		||||
		    	}
 | 
			
		||||
		    	player.sendMessage(mcLocale.getString("Skills.ReadyFists"));
 | 
			
		||||
				PP.setFistsPreparationATS(System.currentTimeMillis());
 | 
			
		||||
				PP.setFistsPreparationMode(true);
 | 
			
		||||
	    	}
 | 
			
		||||
	    	if((mcPermissions.getInstance().axes(player) || mcPermissions.getInstance().woodcutting(player)) && !PP.getAxePreparationMode())
 | 
			
		||||
	    	{
 | 
			
		||||
	    		if(m.isAxes(player.getItemInHand()))
 | 
			
		||||
	    		{
 | 
			
		||||
	    			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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										271
									
								
								src/com/gmail/nossr50/skills/Swords.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								src/com/gmail/nossr50/skills/Swords.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,271 @@
 | 
			
		||||
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 parryCheck(EntityDamageByEntityEvent event, Player defender)
 | 
			
		||||
    {
 | 
			
		||||
    	Entity y = event.getDamager();
 | 
			
		||||
    	PlayerProfile PPd = Users.getProfile(defender);
 | 
			
		||||
    	if(defender != null && m.isSwords(defender.getItemInHand()) 
 | 
			
		||||
    			&& mcPermissions.getInstance().swords(defender)){
 | 
			
		||||
			if(PPd.getSkillLevel(SkillType.SWORDS) >= 900)
 | 
			
		||||
			{
 | 
			
		||||
				if(Math.random() * 3000 <= 900)
 | 
			
		||||
				{
 | 
			
		||||
					event.setCancelled(true);
 | 
			
		||||
					defender.sendMessage(ChatColor.GREEN+"**PARRIED**");
 | 
			
		||||
					defender.getItemInHand().setDurability((short) (defender.getItemInHand().getDurability() + 1));
 | 
			
		||||
					if(y instanceof Player)
 | 
			
		||||
					{
 | 
			
		||||
						Player attacker = (Player)y;
 | 
			
		||||
						attacker.sendMessage(ChatColor.GREEN+"**PARRIED**");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else 
 | 
			
		||||
			{
 | 
			
		||||
				if(Math.random() * 3000 <= PPd.getSkillLevel(SkillType.SWORDS))
 | 
			
		||||
				{
 | 
			
		||||
					event.setCancelled(true);
 | 
			
		||||
					defender.sendMessage(ChatColor.YELLOW+"*CLANG* SUCCESSFUL PARRY *CLANG*");
 | 
			
		||||
					defender.getItemInHand().setDurability((short) (defender.getItemInHand().getDurability() + 1));
 | 
			
		||||
					if(y instanceof Player)
 | 
			
		||||
					{
 | 
			
		||||
						Player attacker = (Player)y;
 | 
			
		||||
						attacker.sendMessage(ChatColor.DARK_RED+"**TARGET HAS PARRIED THAT ATTACK**");
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
    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);
 | 
			
		||||
        	}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								src/com/gmail/nossr50/skills/Taming.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/com/gmail/nossr50/skills/Taming.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
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)
 | 
			
		||||
				{
 | 
			
		||||
					AnimalTamer tamer = (AnimalTamer)x;
 | 
			
		||||
					if(theWolf.getOwner() == tamer)
 | 
			
		||||
						return x;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static String getOwnerName(Wolf theWolf)
 | 
			
		||||
	{
 | 
			
		||||
		Player owner = (Player)theWolf.getOwner();
 | 
			
		||||
		if(owner != null)
 | 
			
		||||
		{
 | 
			
		||||
		return owner.getName();
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			return "Offline Master";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										95
									
								
								src/com/gmail/nossr50/skills/Unarmed.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/com/gmail/nossr50/skills/Unarmed.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,95 @@
 | 
			
		||||
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);
 | 
			
		||||
	    				}
 | 
			
		||||
	    			}
 | 
			
		||||
	    		}
 | 
			
		||||
	    	}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										153
									
								
								src/com/gmail/nossr50/skills/WoodCutting.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								src/com/gmail/nossr50/skills/WoodCutting.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,153 @@
 | 
			
		||||
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;
 | 
			
		||||
    	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										112
									
								
								src/com/gmail/nossr50/spout/ArrayListString.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								src/com/gmail/nossr50/spout/ArrayListString.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +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;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								src/com/gmail/nossr50/spout/GenericFace.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/com/gmail/nossr50/spout/GenericFace.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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;
 | 
			
		||||
 | 
			
		||||
import org.getspout.spoutapi.gui.GenericTexture;
 | 
			
		||||
 | 
			
		||||
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.setWidth(defaultSize).setHeight(defaultSize).setFixed(true);
 | 
			
		||||
		setName("");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public GenericFace(String name) {
 | 
			
		||||
		this.setWidth(defaultSize).setHeight(defaultSize).setFixed(true);
 | 
			
		||||
		setName(name);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public GenericFace(String name, int size) {
 | 
			
		||||
		this.setWidth(size).setHeight(size).setFixed(true);
 | 
			
		||||
		setName(name);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getName() {
 | 
			
		||||
		return name;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public GenericFace setName(String name) {
 | 
			
		||||
		this.name = name == null ? "" : name;
 | 
			
		||||
		super.setUrl(facePath + this.name + ".png");
 | 
			
		||||
		super.setDirty(true);
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public GenericFace setSize(int size) {
 | 
			
		||||
		super.setWidth(size).setHeight(size);
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										227
									
								
								src/com/gmail/nossr50/spout/GenericLivingEntity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								src/com/gmail/nossr50/spout/GenericLivingEntity.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,227 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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 org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.getspout.spoutapi.gui.*;
 | 
			
		||||
 | 
			
		||||
public class GenericLivingEntity extends GenericContainer {
 | 
			
		||||
 | 
			
		||||
	private Container _bars;
 | 
			
		||||
	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),
 | 
			
		||||
					_bars = (Container) 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 = Bukkit.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() : "");
 | 
			
		||||
		} 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((_bars.getWidth() * armor) / 100).setDirty(true);
 | 
			
		||||
		_health.setWidth((_bars.getWidth() * health) / 100).setDirty(true);
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										540
									
								
								src/com/gmail/nossr50/spout/SpoutStuff.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										540
									
								
								src/com/gmail/nossr50/spout/SpoutStuff.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,540 @@
 | 
			
		||||
package com.gmail.nossr50.spout;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.io.FileOutputStream;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
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<Player, ArrayList<HealthBarMMO>> partyHealthBars = new HashMap<Player, ArrayList<HealthBarMMO>>();
 | 
			
		||||
	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);
 | 
			
		||||
			//System.out.println(theFileName);
 | 
			
		||||
			@SuppressWarnings("static-access")
 | 
			
		||||
			JarFile jar = new JarFile(plugin.mcmmo);
 | 
			
		||||
			JarEntry entry = jar.getJarEntry(theFileName);
 | 
			
		||||
			InputStream is = jar.getInputStream(entry);
 | 
			
		||||
			FileOutputStream os = new FileOutputStream(currentFile);
 | 
			
		||||
			byte[] buf = new byte[(int)entry.getSize()];
 | 
			
		||||
			is.read(buf, 0, (int)entry.getSize());
 | 
			
		||||
			os.write(buf);
 | 
			
		||||
			os.close();
 | 
			
		||||
		} catch (FileNotFoundException e) {
 | 
			
		||||
			// TODO Auto-generated catch block
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			// TODO Auto-generated catch block
 | 
			
		||||
			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)
 | 
			
		||||
				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)
 | 
			
		||||
				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);
 | 
			
		||||
			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, "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, "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;
 | 
			
		||||
		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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										250
									
								
								src/com/gmail/nossr50/spout/mmoHelper.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								src/com/gmail/nossr50/spout/mmoHelper.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,250 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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.party.Party;
 | 
			
		||||
 | 
			
		||||
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) {
 | 
			
		||||
			return ChatColor.YELLOW.toString();
 | 
			
		||||
		} else {
 | 
			
		||||
			if (target instanceof Monster) {
 | 
			
		||||
				if (player != null && player.equals(((Creature) 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(((Creature) 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) {
 | 
			
		||||
			name += ((Player)target).getName();
 | 
			
		||||
		} else {
 | 
			
		||||
			if (target instanceof Tameable) {
 | 
			
		||||
				if (((Tameable)target).isTamed()) {
 | 
			
		||||
					if (showOwner && ((Tameable)target).getOwner() instanceof Player) {
 | 
			
		||||
						name += ((Player)((Tameable)target).getOwner()).getName() + "'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 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 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(Bukkit.getServer().getPlayer(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);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user