2
0
nossr50 14 жил өмнө
parent
commit
d1a7e5b661

+ 137 - 349
mcMMO/com/gmail/nossr50/Combat.java

@@ -16,7 +16,9 @@ import org.bukkit.entity.Zombie;
 import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.event.entity.EntityDamageByProjectileEvent;
 import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
 import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.Plugin;
 
 import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.config.LoadProperties;
@@ -26,17 +28,19 @@ import com.gmail.nossr50.skills.Acrobatics;
 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 {
 	private static mcMMO plugin;
 	public Combat(mcMMO instance) {
     	plugin = instance;
     }
-	public static void combatChecks(EntityDamageEvent event){
+	public static void combatChecks(EntityDamageEvent event, Plugin pluginx){
 		if(event.isCancelled() || event.getDamage() == 0)
 			return;
 		/*
-		 * OFFENSIVE CHECKS
+		 * OFFENSIVE CHECKS FOR PLAYERS VERSUS ENTITIES
 		 */
 		if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
 		{
@@ -45,27 +49,114 @@ public class Combat {
 			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) && PPa.getAxesInt() >= 500)
+					event.setDamage(event.getDamage()+4);
+			
 			//If there are any abilities to activate
 	    	combatAbilityChecks(attacker, PPa);
 	    	
+	    	//Check for offensive procs
+	    	Axes.axeCriticalCheck(attacker, eventb); //Axe Criticals
+	    	if(!Config.getInstance().isBleedTracked(event.getEntity())) //Swords Bleed
+    			Swords.bleedCheck(attacker, event.getEntity());
+	    	
 	    	//Modify the event damage if Attacker is Berserk
 	    	if(PPa.getBerserkMode())
 	    		event.setDamage(event.getDamage() + (event.getDamage() / 2));
-	    	//Handle the combat interactions between the Player and the defending entity
-	    	if(event.getEntity() instanceof Player)
-	    		playerVersusPlayerChecks(eventb, attacker);
-	    	if(event.getEntity() instanceof Animals)
-	    		playerVersusAnimalsChecks(eventb, attacker);
-	    	if(event.getEntity() instanceof Monster)
-	    		playerVersusMonsterChecks(eventb, attacker);
-	   		if(event.getEntity() instanceof Squid)
-	   			playerVersusSquidChecks(eventb, attacker);
        	
 	   		//Handle Ability Interactions
 	   		if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand()))
        			Axes.applyAoeDamage(attacker, eventb);
       		if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand()))
        			Swords.applySerratedStrikes(attacker, eventb);
+      		
+      		//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() + 5000 && defender.getHealth() >= 1)
+	    			{
+		    			if(m.isAxes(attacker.getItemInHand()))
+		    				PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
+		    			if(m.isSwords(attacker.getItemInHand()))
+		    				PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
+		    			if(attacker.getItemInHand().getTypeId() == 0)
+		    				PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
+	    			}
+	    		}
+      		}
+      		
+      		if(event.getEntity() instanceof Monster)
+      		{
+      			int xp = 0;
+      			if(event.getEntity() instanceof Creeper)
+					xp = (event.getDamage() * 4) * LoadProperties.xpGainMultiplier;
+				if(event.getEntity() instanceof Spider)
+					xp = (event.getDamage() * 3) * LoadProperties.xpGainMultiplier;
+				if(event.getEntity() instanceof Skeleton)
+					xp = (event.getDamage() * 2) * LoadProperties.xpGainMultiplier;
+				if(event.getEntity() instanceof Zombie)
+					xp = (event.getDamage() * 2) * LoadProperties.xpGainMultiplier;
+				if(event.getEntity() instanceof PigZombie)
+					xp = (event.getDamage() * 3) * LoadProperties.xpGainMultiplier;
+				
+				if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
+					PPa.addSwordsXP(xp);
+				if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
+					PPa.addAxesXP(xp);
+				if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
+					PPa.addUnarmedXP(xp);
+      		}
+      		Skills.XpCheck(attacker);
+      		
+      		//Taming Debug Stuff
+      		if(event.getEntity() instanceof Wolf)
+      		{
+      			attacker.sendMessage("mcMMO Debug: Wolf Owner Name "+Taming.getOwnerName(event.getEntity()));
+      			event.setCancelled(true);
+      		}
+		}
+		/*
+		 * OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
+		 */
+		if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf){
+			EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
+			if(Taming.hasOwner(eventb.getDamager(), pluginx)){
+				Player master = Taming.getOwner(eventb.getDamager(), pluginx);
+				PlayerProfile PPo = Users.getProfile(master);
+				
+				//Sharpened Claws
+				if(PPo.getTamingInt() >= 750)
+				{
+					event.setDamage(event.getDamage() + 2);
+				}
+				
+				//Gore
+				if(Math.random() * 1000 <= PPo.getTamingInt())
+				{
+					event.setDamage(event.getDamage() * 2);
+					
+					if(event.getEntity() instanceof Player)
+					{
+						Player target = (Player)event.getEntity();
+						target.sendMessage(ChatColor.RED+"**STRUCK BY GORE**");
+						Users.getProfile(target).setBleedTicks(2);
+					}
+					else
+						Config.getInstance().addToBleedQue(event.getEntity());
+					
+					master.sendMessage(ChatColor.GREEN+"**GORE**");
+				}
+				PPo.addTamingXP(event.getDamage() * 4);
+				master.sendMessage("mcMMO Debug: Event Damage "+event.getDamage());
+				Skills.XpCheck(master);
+			}
 		}
 		//Another offensive check for Archery
 		if(event instanceof EntityDamageByProjectileEvent)
@@ -81,6 +172,27 @@ public class Combat {
 			Swords.counterAttackChecks(event);
 			Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event);
 		}
+		/*
+		 * DEFENSIVE CHECKS FOR WOLVES
+		 */
+		if(event.getEntity() instanceof Wolf){
+			if(Taming.hasOwner(event.getEntity(), pluginx))
+			{
+				Player master = Taming.getOwner(event.getEntity(), pluginx);
+				PlayerProfile PPo = Users.getProfile(master);
+				
+				//Shock-Proof
+				if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getTamingInt() >= 500)
+				{
+					event.setDamage(event.getDamage() / 6);
+				}
+				
+				//Thick Fur
+				if(PPo.getTamingInt() >= 250)
+					event.setDamage(event.getDamage() / 2);
+				master.sendMessage("mcMMO Debug: Wolf Damage Taken "+event.getDamage());
+			}
+		}
 	}
 	
 	public static void combatAbilityChecks(Player attacker, PlayerProfile PPa){
@@ -92,239 +204,6 @@ public class Combat {
 		if(PPa.getFistsPreparationMode())
 			Skills.berserkActivationCheck(attacker, plugin);
 	}
-	public static void playerVersusPlayerChecks(EntityDamageByEntityEvent event, Player attacker){
-		Entity x = event.getEntity();
-    	if(x instanceof Player){
-    		if(LoadProperties.pvp == false){
-    			event.setCancelled(true);
-    			return;
-    		}
-    		PlayerProfile PPa = Users.getProfile(attacker);
-    		Player defender = (Player)x;
-    		PlayerProfile PPd = Users.getProfile(defender);
-    		
-    		/*
-    		 * COMPATABILITY CHECKS (Stuff that wouldn't happen normally in  basically...)
-    		 */
-    		if(Users.getProfile(defender) == null)
-    			Users.addUser(defender);
-    		if(attacker != null && defender != null && Users.getProfile(attacker).inParty() && Users.getProfile(defender).inParty()){
-				if(Party.getInstance().inSameParty(defender, attacker)){
-					event.setCancelled(true);
-					return;
-				}
-    		}
-    		/*
-    		 * AXE CRITICAL CHECK
-    		 */
-    		axeCriticalCheck(attacker, event, x);
-    		if(!Config.getInstance().isBleedTracked(x)){
-    			Swords.bleedCheck(attacker, x);
-    		}
-			if(defender != null && mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0){
-				
-				//Bonus just for having unarmed
-				int bonus = 2;
-				if (PPa.getUnarmedInt() >= 250)
-					bonus++;
-				if (PPa.getUnarmedInt() >= 500)
-					bonus++;
-				event.setDamage(calculateDamage(event, bonus));
-				
-				//PROC
-				if(simulateUnarmedProc(attacker)){
-					Location loc = defender.getLocation();
-					if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0){
-						attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
-						defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
-						ItemStack item = defender.getItemInHand();
-					if(item != null){
-						loc.getWorld().dropItemNaturally(loc, item);
-						ItemStack itemx = null;
-						defender.setItemInHand(itemx);
-						}
-					}
-				}
-			}
-			/*
-    		 * PVP XP
-    		 */
-    		if(attacker != null && defender != null && LoadProperties.pvpxp){
-    			if(PPd.inParty() && PPa.inParty() && Party.getInstance().inSameParty(attacker, defender))
-    				return;
-    			if(System.currentTimeMillis() >= PPd.getRespawnATS() + 5000 && defender.getHealth() >= 1){
-	    			if(m.isAxes(attacker.getItemInHand()))
-	    				PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
-	    			if(m.isSwords(attacker.getItemInHand()))
-	    				PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
-	    			if(attacker.getItemInHand().getTypeId() == 0)
-	    				PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
-    			}
-    		}
-    		/*
-    		 * CHECK FOR LEVEL UPS
-    		 */
-    		Skills.XpCheck(attacker);
-		}
-    }
-    public static void playerVersusSquidChecks(EntityDamageByEntityEvent event, Player attacker){
-    	Entity x = event.getEntity();
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	int type = attacker.getItemInHand().getTypeId();
-    	if(x instanceof Squid){
-    		if(!Config.getInstance().isBleedTracked(x)){
-    			Swords.bleedCheck(attacker, x);
-    		}
-			Squid defender = (Squid)event.getEntity();
-			if(m.isSwords(attacker.getItemInHand()) && defender.getHealth() > 0 && mcPermissions.getInstance().swords(attacker)){
-					PPa.addSwordsXP(10 * LoadProperties.xpGainMultiplier);
-			}
-			Skills.XpCheck(attacker);
-			if(m.isAxes(attacker.getItemInHand()) 
-					&& defender.getHealth() > 0 
-					&& mcPermissions.getInstance().axes(attacker)){
-					PPa.addAxesXP(10 * LoadProperties.xpGainMultiplier);
-					Skills.XpCheck(attacker);
-			}
-			if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
-				if(PPa.getAxesInt() >= 500){
-					event.setDamage(calculateDamage(event, 4));
-				}
-			}
-			/*
-			 * UNARMED VS SQUID
-			 */
-			if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
-    			if(defender.getHealth() <= 0)
-    				return;
-    			
-    			//Bonus just for having unarmed
-    			int bonus = 2;
-    			if (PPa.getUnarmedInt() >= 250)
-    				bonus++;
-    			if (PPa.getUnarmedInt() >= 500)
-    				bonus++;
-    			event.setDamage(calculateDamage(event, bonus));
-    			
-    			//XP
-					if(defender.getHealth() != 0){
-					PPa.addUnarmedXP(10 * LoadProperties.xpGainMultiplier);
-					Skills.XpCheck(attacker);
-					}
-    			}
-		}
-    }
-    public static void playerVersusAnimalsChecks(EntityDamageByEntityEvent event, Player attacker){
-    	int type = attacker.getItemInHand().getTypeId();
-    	Entity x = event.getEntity();
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	if(x instanceof Animals){
-    		if(!Config.getInstance().isBleedTracked(x)){
-    			Swords.bleedCheck(attacker, x);
-    		}
-			Animals defender = (Animals)event.getEntity();
-    		if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
-				if(defender.getHealth() <= 0)
-					return;
-				if(PPa.getAxesInt() >= 500){
-					event.setDamage(calculateDamage(event, 4));
-				}
-			}
-			if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
-				//Bonus just for having unarmed
-				int bonus = 2;
-				if (PPa.getUnarmedInt() >= 250)
-					bonus++;
-				if (PPa.getUnarmedInt() >= 500)
-					bonus++;
-				event.setDamage(calculateDamage(event, bonus));
-			}
-		}
-    }
-    public static void playerVersusMonsterChecks(EntityDamageByEntityEvent event, Player attacker){
-    	Entity x = event.getEntity();
-    	int type = attacker.getItemInHand().getTypeId();
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	if(x instanceof Monster){
-    		/*
-    		 * AXE PROC CHECKS
-    		 */
-    		axeCriticalCheck(attacker, event, x);
-    		if(!Config.getInstance().isBleedTracked(x)){
-    			Swords.bleedCheck(attacker, x);
-    		}
-			Monster defender = (Monster)event.getEntity();
-			if(m.isSwords(attacker.getItemInHand()) 
-					&& defender.getHealth() > 0 
-					&& mcPermissions.getInstance().swords(attacker)){
-					if(!Config.getInstance().isMobSpawnTracked(x)){
-					if(x instanceof Creeper)
-						PPa.addSwordsXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
-					if(x instanceof Spider)
-						PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
-					if(x instanceof Skeleton)
-						PPa.addSwordsXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
-					if(x instanceof Zombie)
-						PPa.addSwordsXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
-					if(x instanceof PigZombie)
-						PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
-					}
-					Skills.XpCheck(attacker);
-				}
-			if(m.isAxes(attacker.getItemInHand()) 
-					&& defender.getHealth() > 0 
-					&& mcPermissions.getInstance().axes(attacker)){
-					if(!Config.getInstance().isMobSpawnTracked(x)){
-					if(x instanceof Creeper)
-					PPa.addAxesXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
-					if(x instanceof Spider)
-						PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
-					if(x instanceof Skeleton)
-						PPa.addAxesXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
-					if(x instanceof Zombie)
-						PPa.addAxesXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
-					if(x instanceof PigZombie)
-						PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
-					}
-					Skills.XpCheck(attacker);
-			}
-			/*
-			 * AXE DAMAGE SCALING && LOOT CHECKS
-			 */
-			if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
-				if(PPa.getAxesInt() >= 500){
-					event.setDamage(calculateDamage(event, 4));
-				}
-			}
-			if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
-			if(defender.getHealth() <= 0)
-				return;
-			
-			//Bonus just for having unarmed
-			int bonus = 2;
-			if (PPa.getUnarmedInt() >= 250)
-				bonus++;
-			if (PPa.getUnarmedInt() >= 500)
-				bonus++;
-			event.setDamage(calculateDamage(event, bonus));
-			
-			//XP
-			if(!Config.getInstance().isMobSpawnTracked(x)){
-			if(x instanceof Creeper)
-				PPa.addUnarmedXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
-			if(x instanceof Spider)
-				PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
-			if(x instanceof Skeleton)
-				PPa.addUnarmedXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
-			if(x instanceof Zombie)
-				PPa.addUnarmedXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
-			if(x instanceof PigZombie)
-				PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
-			}
-			Skills.XpCheck(attacker);
-			}
-		}
-    }
 	public static void archeryCheck(EntityDamageByProjectileEvent event){
     	Entity y = event.getDamager();
     	Entity x = event.getEntity();
@@ -370,6 +249,20 @@ public class Combat {
         				}
     				}
     			}
+    			/*
+    			 * DAMAGE MODIFIER
+    			 */
+    			if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
+    				event.setDamage(event.getDamage()+1);
+    			if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
+    				event.setDamage(event.getDamage()+2);
+    			if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
+    				event.setDamage(event.getDamage()+3);
+    			if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
+    				event.setDamage(event.getDamage()+4);
+    			if(PPa.getArcheryInt() >= 1000)
+    				event.setDamage(event.getDamage()+5);
+    			
     			/*
     			 * IGNITION
     			 */
@@ -403,19 +296,6 @@ public class Combat {
     		 * Defender is Monster
     		 */
     		if(x instanceof Monster){
-    			/*
-    			 * TRACK ARROWS USED AGAINST THE ENTITY
-    			 */
-    			if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
-    				event.setDamage(calculateDamage(event, 1));
-    			if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
-    				event.setDamage(calculateDamage(event, 2));
-    			if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
-    				event.setDamage(calculateDamage(event, 3));
-    			if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
-    				event.setDamage(calculateDamage(event, 4));
-    			if(PPa.getArcheryInt() >= 1000)
-    				event.setDamage(calculateDamage(event, 5));
     			//XP
     			if(!Config.getInstance().isMobSpawnTracked(x)){
     				if(x instanceof Creeper)
@@ -430,36 +310,6 @@ public class Combat {
 						PPa.addArcheryXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
     			}
     		}
-    		/*
-    		 * Defender is Animals	
-    		 */
-    		if(x instanceof Animals){
-    			if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
-    				event.setDamage(calculateDamage(event, 1));
-    			if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
-    				event.setDamage(calculateDamage(event, 2));
-    			if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
-    				event.setDamage(calculateDamage(event, 3));
-    			if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
-    				event.setDamage(calculateDamage(event, 4));
-    			if(PPa.getArcheryInt() >= 1000)
-    				event.setDamage(calculateDamage(event, 5));
-    		}
-    		/*
-    		 * Defender is Squid
-    		 */
-    		if(x instanceof Squid){
-    			if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
-    				event.setDamage(calculateDamage(event, 1));
-    			if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
-    				event.setDamage(calculateDamage(event, 2));
-    			if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
-    				event.setDamage(calculateDamage(event, 3));
-    			if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
-    				event.setDamage(calculateDamage(event, 4));
-    			if(PPa.getArcheryInt() >= 1000)
-    				event.setDamage(calculateDamage(event, 5));
-    		}
     		/*
     		 * Attacker is Player
     		 */
@@ -505,38 +355,10 @@ public class Combat {
 	    				defender.sendMessage(ChatColor.DARK_RED+"Touched Fuzzy. Felt Dizzy.");
 	    				attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed");
     	    		}
-    				
-					if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
-	    				event.setDamage(calculateDamage(event, 1));
-	    			if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
-	    				event.setDamage(calculateDamage(event, 2));
-	    			if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
-	    				event.setDamage(calculateDamage(event, 3));
-	    			if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
-	    				event.setDamage(calculateDamage(event, 4));
-	    			if(PPa.getArcheryInt() >= 1000)
-	    				event.setDamage(calculateDamage(event, 5));
     			}
     		}
     		Skills.XpCheck(attacker);
     	}
-    }
-	public static boolean simulateUnarmedProc(Player player){
-		PlayerProfile PP = Users.getProfile(player);
-    	if(PP.getUnarmedInt() >= 1000){
-    		if(Math.random() * 4000 <= 1000){
-    			return true;
-    		}
-    	} else {
-    		if(Math.random() * 4000 <= PP.getUnarmedInt()){
-    			return true;
-    		}
-    	}
-    		return false;
-    }
-    
-    public static int calculateDamage(EntityDamageEvent event, int dmg){
-    	return event.getDamage() + dmg;
     }
     public static void dealDamage(Entity target, int dmg){
     	if(target instanceof Player){
@@ -549,38 +371,4 @@ public class Combat {
     		((Monster) target).damage(dmg);
     	}
     }
-    public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
-    		if(PPa.getAxesInt() >= 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.getAxesInt()){
-    			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!");
-    		}
-    	}
-    }
-
-    
-	
-	
 }

+ 41 - 1
mcMMO/com/gmail/nossr50/Database.java

@@ -38,7 +38,47 @@ public class Database {
 		    System.out.println("VendorError: " + ex.getErrorCode());
 		}
 	}
-	
+	//Create the DB structure
+	public void createStructure(){
+		Write("CREATE TABLE IF NOT EXISTS `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT," +
+				"`user` varchar(30) NOT NULL," +
+				"`lastlogin` int(10) 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 `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 `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 `spawn` (`user_id` int(10) NOT NULL," +
+				"`x` int(11) NOT NULL DEFAULT '0'," +
+				"`y` int(11) NOT NULL DEFAULT '0'," +
+				"`z` int(11) NOT NULL DEFAULT '0'," +
+				"`world` varchar(50) NOT NULL DEFAULT ''," +
+				"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
+	}
 	// write query
 	public boolean Write(String sql) {
 		try {

+ 7 - 7
mcMMO/com/gmail/nossr50/datatypes/PlayerProfile.java

@@ -700,12 +700,12 @@ public class PlayerProfile
 	public void skillUpTaming(int newskill){
 		int x = 0;
 		if(taming != null){
-		if(isInt(taming)){
-		x = Integer.parseInt(taming);
-		}else {
-			taming = "0";
-			x = Integer.parseInt(taming);
-		}
+			if(isInt(taming)){
+				x = Integer.parseInt(taming);
+			}else {
+				taming = "0";
+				x = Integer.parseInt(taming);
+			}
 		}
 		x += newskill;
 		taming = Integer.toString(x);
@@ -1053,7 +1053,7 @@ public class PlayerProfile
 		x = Integer.parseInt(tamingXP);
 		}
 		x += newXP;
-		acrobaticsXP = String.valueOf(x);
+		tamingXP = String.valueOf(x);
 		save();
 	}
 	public void addAcrobaticsXP(int newXP)

+ 1 - 1
mcMMO/com/gmail/nossr50/datatypes/PlayerStat.java

@@ -3,4 +3,4 @@ package com.gmail.nossr50.datatypes;
 public class PlayerStat {
 	public String name;
 	public int statVal = 0;
-}
+}

+ 30 - 2
mcMMO/com/gmail/nossr50/m.java

@@ -26,7 +26,6 @@ public class m {
 	 * I'm storing my functions/methods in here in an unorganized manner. Spheal with it.
 	 */
 	private static mcMMO plugin;
-	private static mcMMO pluginx;
 	public m(mcMMO instance) {
     	plugin = instance;
     }
@@ -172,7 +171,6 @@ public class m {
             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 is block
                     if (block.getTypeId() == typeid) {
                         return true;
                     }
@@ -181,6 +179,7 @@ public class m {
         }
     	return false;
 	}
+	
 	public static boolean isPvpEnabled(){
 		String propertyName = "pvp";
 		FileReader fr = null;
@@ -304,6 +303,35 @@ public class m {
     }
     public static void mmoHelpCheck(String[] split, Player player, PlayerChatEvent event){
     	PlayerProfile PP = Users.getProfile(player);
+    	if(split[0].equalsIgnoreCase("/taming")){
+			event.setCancelled(true);
+			float skillvalue = (float)PP.getTamingInt();
+			
+    		String percentage = String.valueOf((skillvalue / 1000) * 100);
+			player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"TAMING"+ChatColor.RED+"[]-----");
+			player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Fighting with your wolves");
+			player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---");
+			//player.sendMessage(ChatColor.DARK_AQUA+"Tree Feller (ABILITY): "+ChatColor.GREEN+"Make trees explode");
+			player.sendMessage(ChatColor.DARK_AQUA+"Gore: "+ChatColor.YELLOW+ChatColor.GREEN+"Critical Strike that applies Bleed");
+			player.sendMessage(ChatColor.DARK_AQUA+"Sharpened Claws: "+ChatColor.YELLOW+ChatColor.GREEN+"Damage Bonus");
+			player.sendMessage(ChatColor.DARK_AQUA+"Thick Fur: "+ChatColor.YELLOW+ChatColor.GREEN+"Damage Reduction");
+			player.sendMessage(ChatColor.DARK_AQUA+"Shock Proof: "+ChatColor.YELLOW+ChatColor.GREEN+"Explosive Damage Reduction");
+			player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"YOUR STATS"+ChatColor.RED+"[]---");
+			if(PP.getTamingInt() < 250)
+				player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 250+ SKILL (THICK FUR)");
+			else
+				player.sendMessage(ChatColor.RED+"Thick Fur: "+ChatColor.YELLOW+"Halved Damage");
+			if(PP.getTamingInt() < 500)
+				player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 500+ SKILL (SHOCK PROOF)");
+			else
+				player.sendMessage(ChatColor.RED+"Shock Proof: "+ChatColor.YELLOW+"Explosives do 1/6 normal damage");
+			if(PP.getTamingInt() < 750)
+				player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 750+ SKILL (SHARPENED CLAWS)");
+			else
+				player.sendMessage(ChatColor.RED+"Sharpened Claws: "+ChatColor.YELLOW+"+2 Damage");
+			player.sendMessage(ChatColor.RED+"Gore Chance: "+ChatColor.YELLOW+percentage+"%");
+			//player.sendMessage(ChatColor.RED+"Tree Feller Length: "+ChatColor.YELLOW+ticks+"s");
+    	}
     	if(split[0].equalsIgnoreCase("/woodcutting")){
 			event.setCancelled(true);
 			float skillvalue = (float)PP.getWoodCuttingInt();

+ 1 - 1
mcMMO/com/gmail/nossr50/mcEntityListener.java

@@ -99,7 +99,7 @@ public class mcEntityListener extends EntityListener {
 			        		if(Party.getInstance().inSameParty(defender, attacker))
 			        			event.setCancelled(true);
 			    		}
-			    		Combat.combatChecks(event);	
+			    		Combat.combatChecks(event, plugin);	
 			        }
 			    	/*
 			    	 * Check to see if the defender took damage so we can apply recently hurt

+ 2 - 1
mcMMO/com/gmail/nossr50/mcMMO.java

@@ -100,7 +100,8 @@ public class mcMMO extends JavaPlugin {
         
         PluginDescriptionFile pdfFile = this.getDescription();
         mcPermissions.initialize(getServer());
-        mcLoadMySQL();        	
+        mcLoadMySQL(); 
+        database.createStructure(); //Make Structure
         
         Leaderboard.makeLeaderboards(); //Make the leaderboards
         System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );

+ 11 - 1
mcMMO/com/gmail/nossr50/mcPlayerListener.java

@@ -7,7 +7,9 @@ import org.bukkit.ChatColor;
 import org.bukkit.Location;
 import org.bukkit.Material;
 import org.bukkit.block.Block;
+import org.bukkit.entity.Entity;
 import org.bukkit.entity.Player;
+import org.bukkit.entity.Wolf;
 import org.bukkit.event.block.Action;
 import org.bukkit.event.player.PlayerChatEvent;
 import org.bukkit.event.player.PlayerCommandPreprocessEvent;
@@ -26,6 +28,7 @@ import com.gmail.nossr50.party.Party;
 import com.gmail.nossr50.skills.Herbalism;
 import com.gmail.nossr50.skills.Repair;
 import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.Taming;
 
 
 public class mcPlayerListener extends PlayerListener {
@@ -82,7 +85,6 @@ public class mcPlayerListener extends PlayerListener {
     	if(mcPermissions.getInstance().motd(player)){
     		player.sendMessage(ChatColor.BLUE +"This server is running MMO "+plugin.getDescription().getVersion()+" type /"+ChatColor.YELLOW+LoadProperties.mcmmo+ChatColor.BLUE+ " for help.");
     		player.sendMessage(ChatColor.GREEN+"http://mmo.wikia.com"+ChatColor.BLUE+" - MMO Wiki");
-    		player.sendMessage(ChatColor.DARK_RED+"ATTN: YOUR STATS WILL BE BACK TO NORMAL SHORTLY, WE ARE USING MySQL NOW AND I HAVE TO WRITE A MYSQL QUERY TO UPDATE YOUR STATS!");
     	}
     }
     public void onPlayerInteract(PlayerInteractEvent event) {
@@ -91,6 +93,14 @@ public class mcPlayerListener extends PlayerListener {
     	Action action = event.getAction();
     	Block block = event.getClickedBlock();
     	//Archery Nerf
+    	if(action == Action.LEFT_CLICK_AIR)
+    	{
+    		if(player.getItemInHand().getTypeId() == 352)
+    		{
+    			Block targetBlock = player.getTargetBlock(null, 20);
+    			player.sendMessage("Target Block TypeID = "+targetBlock.getTypeId());
+    		}
+    	}
     	if(player.getItemInHand().getTypeId() == 261 && LoadProperties.archeryFireRateLimit){
     		if(System.currentTimeMillis() < PP.getArcheryShotATS() + 1000){
     			/*

+ 36 - 0
mcMMO/com/gmail/nossr50/skills/Axes.java

@@ -8,10 +8,46 @@ import org.bukkit.entity.Player;
 import org.bukkit.entity.Wolf;
 import org.bukkit.event.entity.EntityDamageByEntityEvent;
 
+import com.gmail.nossr50.Users;
 import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.party.Party;
 
 public class Axes {
+	
+	public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event){
+    	Entity x = event.getEntity();
+    	PlayerProfile PPa = Users.getProfile(attacker);
+    	if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
+    		if(PPa.getAxesInt() >= 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.getAxesInt()){
+    			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){
     	int targets = 0;
     	Entity x = event.getEntity();

+ 3 - 0
mcMMO/com/gmail/nossr50/skills/Swords.java

@@ -121,6 +121,8 @@ public class Swords {
 		   	{
 		   		Player defender = (Player)event.getEntity();
 		   		PlayerProfile PPd = Users.getProfile(defender);
+		   		if(m.isSwords(defender.getItemInHand())&& mcPermissions.getInstance().swords(defender))
+		   		{
 		    		if(PPd.getSwordsInt() >= 600)
 		    		{
 		    			if(Math.random() * 2000 <= 600)
@@ -138,6 +140,7 @@ public class Swords {
 		    			if(f instanceof Player)
 		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
 		    		}
+		   		}
 		    }
     	}
     }

+ 3 - 7
mcMMO/com/gmail/nossr50/skills/Taming.java

@@ -11,8 +11,8 @@ public class Taming {
 	public static String getOwnerName(Entity theWolf){
 		CraftWolf cWolf = (CraftWolf)theWolf;
 		EntityWolf eWolf = (EntityWolf)cWolf.getHandle();
-
-		String playerName = eWolf.v();
+		
+		String playerName = eWolf.x();
 		return playerName;
 	}
 	public static boolean hasOwner(Entity theWolf, Plugin pluginx){
@@ -23,7 +23,7 @@ public class Taming {
 		}
 		return false;
 	}
-	public Player getOwner(Entity theWolf, Plugin pluginx){
+	public static Player getOwner(Entity theWolf, Plugin pluginx){
 		for(Player x : pluginx.getServer().getOnlinePlayers()){
 			if(x != null && x.getName().equals(getOwnerName(theWolf))){
 				return x;
@@ -31,8 +31,4 @@ public class Taming {
 		}
 		return null;
 	}
-	public static Taming getInstance() {
-		// TODO Auto-generated method stub
-		return null;
-	}
 }

+ 56 - 1
mcMMO/com/gmail/nossr50/skills/Unarmed.java

@@ -1,5 +1,60 @@
 package com.gmail.nossr50.skills;
 
-public class Unarmed {
+import org.bukkit.ChatColor;
+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.datatypes.PlayerProfile;
 
+public class Unarmed {
+	public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
+	{
+		PlayerProfile PPa = Users.getProfile(attacker);
+		int bonus = 2;
+		if (PPa.getUnarmedInt() >= 250)
+			bonus++;
+		if (PPa.getUnarmedInt() >= 500)
+			bonus++;
+		event.setDamage(event.getDamage()+bonus);
+	}
+	public static void disarmProcCheck(Player attacker, Player defender)
+	{
+		PlayerProfile PP = Users.getProfile(attacker);
+		if(PP.getUnarmedInt() >= 1000){
+    		if(Math.random() * 4000 <= 1000){
+    			Location loc = defender.getLocation();
+    			if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
+    			{
+    				attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
+    				defender.sendMessage(ChatColor.DARK_RED+"You have been 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.getUnarmedInt()){
+    			Location loc = defender.getLocation();
+    			if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
+    			{
+    				attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
+    				defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
+    				ItemStack item = defender.getItemInHand();
+	    			if(item != null)
+	    			{
+	    				loc.getWorld().dropItemNaturally(loc, item);
+	    				ItemStack itemx = null;
+	    				defender.setItemInHand(itemx);
+    				}
+    			}
+    		}
+    	}
+	}
 }