Browse Source

All changes up to 0.9.10

nossr50 14 years ago
parent
commit
318f5876d2

+ 22 - 0
mcMMO/Changelog.txt

@@ -1,5 +1,27 @@
 Changelog:
 #Versions without changelogs probably had very small misc fixes, like tweaks to the source code#
+
+Version 0.9.10
+Party invites now show who they are from
+Mushrooms added to Dirt/Grass excavation loot tables, drops with 500+ skill
+mcMMO configuration files property setting names have been changed for readability
+Fixed bug where Gold and Iron wouldn't drop anything during Super Breaker
+Added /mcability info to /mcc
+Potentially fixed NPE error when checking players for being in same party for PVP XP
+Removed sand specific diamond drop from sand excavation loot table, Diamonds can still drop globally for sand
+Added a global XP gain multiplier, increase it to increase XP gained
+Reduced PVE XP for Unarmed, now identical to Axes/Swords
+Changed Chat priority in mcMMO to be higher, this should help plugin conflicts
+Mushroom XP raised to 40 from 10
+Flower XP raised to 10 from 3
+
+Version 0.9.9
+Fixed problem where entities never got removed from the arrow retrieval list of entities
+
+Version 0.9.8
+EntityLiving shouldn't be cast to entities that are not an instance of EntityLiving
+Added a null check in the timer for players being null before proceeding
+
 Version 0.9.7
 Procs/XP Gain will no longer happen when the Entity is immune to damage (Thanks EdwardHand!)
 Axes critical damage versus players reduced to 150% damage from 200% damage

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

@@ -19,7 +19,7 @@ public class mcAcrobatics {
 				if(!mcConfig.getInstance().isBlockWatched(loc.getWorld().getBlockAt(xx, y, z)) 
 						&& mcPermissions.getInstance().acrobatics(player)){
 					if(!event.isCancelled())
-						mcUsers.getProfile(player).addAcrobaticsGather(event.getDamage() * 8);
+						mcUsers.getProfile(player).addAcrobaticsGather((event.getDamage() * 8) * mcLoadProperties.xpGainMultiplier);
 					mcSkills.getInstance().XpCheck(player);
 					event.setCancelled(true);
 				}
@@ -32,7 +32,7 @@ public class mcAcrobatics {
 				&& mcPermissions.getInstance().acrobatics(player)){
 			if(!event.isCancelled())
 				mcUsers.getProfile(player).addAcrobaticsGather(event.getDamage() * 8);
-			mcUsers.getProfile(player).addAcrobaticsGather(event.getDamage() * 12);
+			mcUsers.getProfile(player).addAcrobaticsGather((event.getDamage() * 12) * mcLoadProperties.xpGainMultiplier);
 			mcSkills.getInstance().XpCheck(player);
 			mcConfig.getInstance().addBlockWatch(loc.getWorld().getBlockAt(xx, y, z));
 			if(player.getHealth() - event.getDamage() <= 0){

+ 2 - 4
mcMMO/com/gmail/nossr50/mcBlockListener.java

@@ -15,8 +15,6 @@ import org.bukkit.event.block.BlockRightClickEvent;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.plugin.Plugin;
 
-import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
-
 public class mcBlockListener extends BlockListener {
     private final mcMMO plugin;
 
@@ -143,11 +141,11 @@ public class mcBlockListener extends BlockListener {
 	   				if(mcLoadProperties.woodcuttingrequiresaxe){
     					if(mcm.getInstance().isAxes(inhand)){
 	    					mcWoodCutting.getInstance().woodCuttingProcCheck(player, block, loc);
-	    					mcUsers.getProfile(player).addWoodcuttingGather(7);
+	    					mcUsers.getProfile(player).addWoodcuttingGather(7 * mcLoadProperties.xpGainMultiplier);
 	    				}
 	    			} else {
 	    				mcWoodCutting.getInstance().woodCuttingProcCheck(player, block, loc);
-    					mcUsers.getProfile(player).addWoodcuttingGather(7);	
+    					mcUsers.getProfile(player).addWoodcuttingGather(7 * mcLoadProperties.xpGainMultiplier);	
 	   				}
 	    			mcSkills.getInstance().XpCheck(player);
 	    			/*

+ 26 - 26
mcMMO/com/gmail/nossr50/mcCombat.java

@@ -92,7 +92,9 @@ public class mcCombat {
 			/*
     		 * PVP XP
     		 */
-    		if(attacker != null && defender != null && mcLoadProperties.pvpxp && !mcParty.getInstance().inSameParty(attacker, defender)){
+    		if(attacker != null && defender != null && mcLoadProperties.pvpxp){
+    			if(mcUsers.getProfile(defender).inParty() && mcUsers.getProfile(attacker).inParty() && mcParty.getInstance().inSameParty(attacker, defender))
+    				return;
     			if(mcm.getInstance().isAxes(attacker.getItemInHand()))
     				mcUsers.getProfile(attacker).addAxesGather((event.getDamage() * 3) * mcLoadProperties.pvpxprewardmodifier);
     			if(mcm.getInstance().isSwords(attacker.getItemInHand()))
@@ -113,13 +115,13 @@ public class mcCombat {
     		}
 			Squid defender = (Squid)event.getEntity();
 			if(mcm.getInstance().isSwords(attacker.getItemInHand()) && defender.getHealth() > 0 && mcPermissions.getInstance().swords(attacker)){
-					mcUsers.getProfile(attacker).addSwordsGather(10);
+					mcUsers.getProfile(attacker).addSwordsGather(10 * mcLoadProperties.xpGainMultiplier);
 			}
 			mcSkills.getInstance().XpCheck(attacker);
 			if(mcm.getInstance().isAxes(attacker.getItemInHand()) 
 					&& defender.getHealth() > 0 
 					&& mcPermissions.getInstance().axes(attacker)){
-					mcUsers.getProfile(attacker).addAxesGather(10);
+					mcUsers.getProfile(attacker).addAxesGather(10 * mcLoadProperties.xpGainMultiplier);
 					mcSkills.getInstance().XpCheck(attacker);
 			}
 			if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
@@ -152,7 +154,7 @@ public class mcCombat {
 				}
     			//XP
 					if(defender.getHealth() != 0){
-					mcUsers.getProfile(attacker).addUnarmedGather(10);
+					mcUsers.getProfile(attacker).addUnarmedGather(10 * mcLoadProperties.xpGainMultiplier);
 					mcSkills.getInstance().XpCheck(attacker);
 					}
     			}
@@ -207,15 +209,15 @@ public class mcCombat {
 					&& mcPermissions.getInstance().swords(attacker)){
 					if(!mcConfig.getInstance().isMobSpawnTracked(x)){
 					if(x instanceof Creeper)
-					mcUsers.getProfile(attacker).addSwordsGather(10);
+					mcUsers.getProfile(attacker).addSwordsGather(10 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Spider)
-					mcUsers.getProfile(attacker).addSwordsGather(7);
+					mcUsers.getProfile(attacker).addSwordsGather(7 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Skeleton)
-					mcUsers.getProfile(attacker).addSwordsGather(5);
+					mcUsers.getProfile(attacker).addSwordsGather(5 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Zombie)
-					mcUsers.getProfile(attacker).addSwordsGather(3);
+					mcUsers.getProfile(attacker).addSwordsGather(3 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof PigZombie)
-					mcUsers.getProfile(attacker).addSwordsGather(7);
+					mcUsers.getProfile(attacker).addSwordsGather(7 * mcLoadProperties.xpGainMultiplier);
 					}
 					mcSkills.getInstance().XpCheck(attacker);
 				}
@@ -223,17 +225,16 @@ public class mcCombat {
 					&& defender.getHealth() > 0 
 					&& mcPermissions.getInstance().axes(attacker)){
 					if(!mcConfig.getInstance().isMobSpawnTracked(x)){
-				    mcUsers.getProfile(attacker).addAxesGather(1);
 					if(x instanceof Creeper)
-					mcUsers.getProfile(attacker).addAxesGather(10);
+					mcUsers.getProfile(attacker).addAxesGather(10 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Spider)
-						mcUsers.getProfile(attacker).addAxesGather(7);
+						mcUsers.getProfile(attacker).addAxesGather(7 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Skeleton)
-						mcUsers.getProfile(attacker).addAxesGather(5);
+						mcUsers.getProfile(attacker).addAxesGather(5 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Zombie)
-						mcUsers.getProfile(attacker).addAxesGather(3);
+						mcUsers.getProfile(attacker).addAxesGather(3 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof PigZombie)
-						mcUsers.getProfile(attacker).addAxesGather(7);
+						mcUsers.getProfile(attacker).addAxesGather(7 * mcLoadProperties.xpGainMultiplier);
 					}
 					mcSkills.getInstance().XpCheck(attacker);
 			}
@@ -268,15 +269,15 @@ public class mcCombat {
 			//XP
 			if(!mcConfig.getInstance().isMobSpawnTracked(x)){
 			if(x instanceof Creeper)
-				mcUsers.getProfile(attacker).addUnarmedGather(20);
+				mcUsers.getProfile(attacker).addUnarmedGather(10 * mcLoadProperties.xpGainMultiplier);
 			if(x instanceof Spider)
-				mcUsers.getProfile(attacker).addUnarmedGather(15);
+				mcUsers.getProfile(attacker).addUnarmedGather(7 * mcLoadProperties.xpGainMultiplier);
 			if(x instanceof Skeleton)
-				mcUsers.getProfile(attacker).addUnarmedGather(10);
+				mcUsers.getProfile(attacker).addUnarmedGather(5 * mcLoadProperties.xpGainMultiplier);
 			if(x instanceof Zombie)
-				mcUsers.getProfile(attacker).addUnarmedGather(5);
+				mcUsers.getProfile(attacker).addUnarmedGather(3 * mcLoadProperties.xpGainMultiplier);
 			if(x instanceof PigZombie)
-				mcUsers.getProfile(attacker).addUnarmedGather(15);
+				mcUsers.getProfile(attacker).addUnarmedGather(7 * mcLoadProperties.xpGainMultiplier);
 			}
 			mcSkills.getInstance().XpCheck(attacker);
 			}
@@ -358,22 +359,21 @@ public class mcCombat {
     			//XP
     			if(!mcConfig.getInstance().isMobSpawnTracked(x)){
     				if(x instanceof Creeper)
-					mcUsers.getProfile(attacker).addArcheryGather(10);
+					mcUsers.getProfile(attacker).addArcheryGather(10 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Spider)
-						mcUsers.getProfile(attacker).addArcheryGather(7);
+						mcUsers.getProfile(attacker).addArcheryGather(7 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Skeleton)
-						mcUsers.getProfile(attacker).addArcheryGather(5);
+						mcUsers.getProfile(attacker).addArcheryGather(5 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof Zombie)
-						mcUsers.getProfile(attacker).addArcheryGather(3);
+						mcUsers.getProfile(attacker).addArcheryGather(3 * mcLoadProperties.xpGainMultiplier);
 					if(x instanceof PigZombie)
-						mcUsers.getProfile(attacker).addArcheryGather(7);
+						mcUsers.getProfile(attacker).addArcheryGather(7 * mcLoadProperties.xpGainMultiplier);
     			}
     			}
     		/*
     		 * Defender is Animals	
     		 */
     		if(x instanceof Animals){
-    			Animals defender = (Animals)x;
     			if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250)
     				event.setDamage(calculateDamage(event, 1));
     			if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575)

+ 5 - 0
mcMMO/com/gmail/nossr50/mcConfig.java

@@ -31,6 +31,11 @@ public class mcConfig {
     public ArrayList<Entity> getBleedTracked() {return bleedTracker;}
     public void addArrowTrack(Entity entity, Integer arrowcount) {arrowTracker.put(entity, arrowcount);}
     public Integer getArrowCount(Entity entity) {return arrowTracker.get(entity);}
+    public void removeArrowTracked(Entity entity){
+    	if(arrowTracker.containsKey(entity)){
+    		arrowTracker.remove(entity);
+    	}
+    }
     public void removeBleedTrack(Entity entity){
     	bleedTracker.remove(entity);
     }

+ 9 - 2
mcMMO/com/gmail/nossr50/mcEntityListener.java

@@ -39,9 +39,14 @@ public class mcEntityListener extends EntityListener {
     	}
     }
     public void onEntityDamage(EntityDamageEvent event) {
+    	/*
+    	 * CHECK FOR INVULNERABILITY
+    	 */
+    	if(event.getEntity() instanceof CraftEntity){
     	CraftEntity cEntity = (CraftEntity)event.getEntity();
-    	EntityLiving entity = (EntityLiving)cEntity.getHandle();
-    	if(entity.noDamageTicks < entity.maxNoDamageTicks/2.0F){	
+    	if(cEntity.getHandle() instanceof EntityLiving){
+    	EntityLiving entityliving = (EntityLiving)cEntity.getHandle();
+    	if(entityliving.noDamageTicks < entityliving.maxNoDamageTicks/2.0F){
     	Entity x = event.getEntity();
     	DamageCause type = event.getCause();
     	/*
@@ -161,6 +166,8 @@ public class mcEntityListener extends EntityListener {
     		mcUsers.getProfile(herpderp).setRecentlyHurt(30);
     	}
     	}
+    	}
+    	}
     }
     public void onEntityDeath(EntityDeathEvent event) {
     	Entity x = event.getEntity();

+ 38 - 32
mcMMO/com/gmail/nossr50/mcExcavation.java

@@ -68,20 +68,22 @@ public class mcExcavation {
     	Location loc = block.getLocation();
     	ItemStack is = null;
     	Material mat = null;
-    	if(type == 2 && mcUsers.getProfile(player).getExcavationInt() > 250){
-    		//CHANCE TO GET EGGS
-    		if(mcLoadProperties.eggs == true && Math.random() * 100 > 99){
-    			mcUsers.getProfile(player).addExcavationGather(10);
-				mat = Material.getMaterial(344);
-				is = new ItemStack(mat, 1, (byte)0, (byte)0);
-				loc.getWorld().dropItemNaturally(loc, is);
-    		}
-    		//CHANCE TO GET APPLES
-    		if(mcLoadProperties.apples == true && Math.random() * 100 > 99){
-    			mcUsers.getProfile(player).addExcavationGather(10);
-    			mat = Material.getMaterial(260);
-				is = new ItemStack(mat, 1, (byte)0, (byte)0);
-				loc.getWorld().dropItemNaturally(loc, is);
+    	if(type == 2){
+    		if(mcUsers.getProfile(player).getExcavationInt() > 250){
+	    		//CHANCE TO GET EGGS
+	    		if(mcLoadProperties.eggs == true && Math.random() * 100 > 99){
+	    			mcUsers.getProfile(player).addExcavationGather(10 * mcLoadProperties.xpGainMultiplier);
+					mat = Material.getMaterial(344);
+					is = new ItemStack(mat, 1, (byte)0, (byte)0);
+					loc.getWorld().dropItemNaturally(loc, is);
+	    		}
+	    		//CHANCE TO GET APPLES
+	    		if(mcLoadProperties.apples == true && Math.random() * 100 > 99){
+	    			mcUsers.getProfile(player).addExcavationGather(10 * mcLoadProperties.xpGainMultiplier);
+	    			mat = Material.getMaterial(260);
+					is = new ItemStack(mat, 1, (byte)0, (byte)0);
+					loc.getWorld().dropItemNaturally(loc, is);
+	    		}
     		}
     	}
     	//DIRT SAND OR GRAVEL
@@ -90,7 +92,7 @@ public class mcExcavation {
     		if(mcUsers.getProfile(player).getExcavationInt() > 750){
     			//CHANCE TO GET CAKE
     			if(mcLoadProperties.cake == true && Math.random() * 2000 > 1999){
-    				mcUsers.getProfile(player).addExcavationGather(300);
+    				mcUsers.getProfile(player).addExcavationGather(300 * mcLoadProperties.xpGainMultiplier);
     				mat = Material.getMaterial(354);
     				is = new ItemStack(mat, 1, (byte)0, (byte)0);
     				loc.getWorld().dropItemNaturally(loc, is);
@@ -99,7 +101,7 @@ public class mcExcavation {
     		if(mcUsers.getProfile(player).getExcavationInt() > 350){
     			//CHANCE TO GET DIAMOND
     			if(mcLoadProperties.diamond == true && Math.random() * 750 > 749){
-    				mcUsers.getProfile(player).addExcavationGather(100);
+    				mcUsers.getProfile(player).addExcavationGather(100 * mcLoadProperties.xpGainMultiplier);
         				mat = Material.getMaterial(264);
         				is = new ItemStack(mat, 1, (byte)0, (byte)0);
         				loc.getWorld().dropItemNaturally(loc, is);
@@ -108,7 +110,7 @@ public class mcExcavation {
     		if(mcUsers.getProfile(player).getExcavationInt() > 250){
     			//CHANCE TO GET YELLOW MUSIC
     			if(mcLoadProperties.music == true && Math.random() * 2000 > 1999){
-    				mcUsers.getProfile(player).addExcavationGather(300);
+    				mcUsers.getProfile(player).addExcavationGather(300 * mcLoadProperties.xpGainMultiplier);
     				mat = Material.getMaterial(2256);
     				is = new ItemStack(mat, 1, (byte)0, (byte)0);
     				loc.getWorld().dropItemNaturally(loc, is);
@@ -118,7 +120,7 @@ public class mcExcavation {
     		if(mcUsers.getProfile(player).getExcavationInt() > 350){
     			//CHANCE TO GET GREEN MUSIC
     			if(mcLoadProperties.music == true && Math.random() * 2000 > 1999){
-    				mcUsers.getProfile(player).addExcavationGather(300);
+    				mcUsers.getProfile(player).addExcavationGather(300 * mcLoadProperties.xpGainMultiplier);
     				mat = Material.getMaterial(2257);
     				is = new ItemStack(mat, 1, (byte)0, (byte)0);
     				loc.getWorld().dropItemNaturally(loc, is);
@@ -129,31 +131,35 @@ public class mcExcavation {
     	if(type == 12){
     		//CHANCE TO GET GLOWSTONE
     		if(mcLoadProperties.glowstone == true && mcUsers.getProfile(player).getExcavationInt() > 50 && Math.random() * 100 > 95){
-    			mcUsers.getProfile(player).addExcavationGather(8);
+    			mcUsers.getProfile(player).addExcavationGather(8 * mcLoadProperties.xpGainMultiplier);
 				mat = Material.getMaterial(348);
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
 				loc.getWorld().dropItemNaturally(loc, is);
     		}
     		//CHANCE TO GET SLOWSAND
     		if(mcLoadProperties.slowsand == true && mcUsers.getProfile(player).getExcavationInt() > 650 && Math.random() * 200 > 199){
-    			mcUsers.getProfile(player).addExcavationGather(8);
+    			mcUsers.getProfile(player).addExcavationGather(8 * mcLoadProperties.xpGainMultiplier);
 				mat = Material.getMaterial(88);
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
 				loc.getWorld().dropItemNaturally(loc, is);
     		}
-    		//CHANCE TO GET DIAMOND
-    		if(mcLoadProperties.diamond == true && mcUsers.getProfile(player).getExcavationInt() > 500 && Math.random() * 500 > 499){
-    			mcUsers.getProfile(player).addExcavationGather(100);
-				mat = Material.getMaterial(264);
+    	}
+    	//GRASS OR DIRT
+    	if(type == 2 || type == 3){
+    		//CHANCE FOR SHROOMS
+    		if(mcLoadProperties.mushrooms == true && mcUsers.getProfile(player).getExcavationInt() > 500 && Math.random() * 200 > 199){
+    			mcUsers.getProfile(player).addExcavationGather(8 * mcLoadProperties.xpGainMultiplier);
+    			if(Math.random() * 10 > 5){
+    				mat = Material.getMaterial(39);
+    			} else {
+    				mat = Material.getMaterial(40);
+    			}
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
 				loc.getWorld().dropItemNaturally(loc, is);
     		}
-    	}
-    	//GRASS OR DIRT
-    	if((type == 2 || type == 3) && mcUsers.getProfile(player).getExcavationInt() > 25){
     		//CHANCE TO GET GLOWSTONE
-    		if(mcLoadProperties.glowstone == true && Math.random() * 100 > 95){
-    			mcUsers.getProfile(player).addExcavationGather(8);
+    		if(mcLoadProperties.glowstone == true && mcUsers.getProfile(player).getExcavationInt() > 25 && Math.random() * 100 > 95){
+    			mcUsers.getProfile(player).addExcavationGather(8 * mcLoadProperties.xpGainMultiplier);
     			mat = Material.getMaterial(348);
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
 				loc.getWorld().dropItemNaturally(loc, is);
@@ -163,7 +169,7 @@ public class mcExcavation {
     	if(type == 13){
     		//CHANCE TO GET NETHERRACK
     		if(mcLoadProperties.netherrack == true && mcUsers.getProfile(player).getExcavationInt() > 850 && Math.random() * 200 > 199){
-    			mcUsers.getProfile(player).addExcavationGather(3);
+    			mcUsers.getProfile(player).addExcavationGather(3 * mcLoadProperties.xpGainMultiplier);
 				mat = Material.getMaterial(87);
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
 				loc.getWorld().dropItemNaturally(loc, is);
@@ -171,7 +177,7 @@ public class mcExcavation {
     		//CHANCE TO GET SULPHUR
     		if(mcLoadProperties.sulphur == true && mcUsers.getProfile(player).getExcavationInt() > 75){
 	    		if(Math.random() * 10 > 9){
-	    			mcUsers.getProfile(player).addExcavationGather(3);
+	    			mcUsers.getProfile(player).addExcavationGather(3 * mcLoadProperties.xpGainMultiplier);
 	    			mat = Material.getMaterial(289);
 					is = new ItemStack(mat, 1, (byte)0, (byte)0);
 					loc.getWorld().dropItemNaturally(loc, is);
@@ -180,7 +186,7 @@ public class mcExcavation {
     		//CHANCE TO GET BONES
     		if(mcLoadProperties.bones == true && mcUsers.getProfile(player).getExcavationInt() > 175){
         		if(Math.random() * 10 > 9){
-        			mcUsers.getProfile(player).addExcavationGather(3);
+        			mcUsers.getProfile(player).addExcavationGather(3 * mcLoadProperties.xpGainMultiplier);
         			mat = Material.getMaterial(352);
     				is = new ItemStack(mat, 1, (byte)0, (byte)0);
     				loc.getWorld().dropItemNaturally(loc, is);

+ 5 - 3
mcMMO/com/gmail/nossr50/mcHerbalism.java

@@ -27,7 +27,7 @@ public class mcHerbalism {
     	if(type == 59 && block.getData() == (byte) 0x7){
     		mat = Material.getMaterial(296);
 			is = new ItemStack(mat, 1, (byte)0, (byte)0);
-    		mcUsers.getProfile(player).addHerbalismGather(5);
+    		mcUsers.getProfile(player).addHerbalismGather(5 * mcLoadProperties.xpGainMultiplier);
     		if(player != null){
 	    		if(Math.random() * 1000 <= mcUsers.getProfile(player).getHerbalismInt()){
 	    			loc.getWorld().dropItemNaturally(loc, is);
@@ -38,6 +38,7 @@ public class mcHerbalism {
     	 * We need to check not-wheat stuff for if it was placed by the player or not
     	 */
     	if(!mcConfig.getInstance().isBlockWatched(block)){
+    		//Mushroom
 	    	if(type == 39 || type == 40){
 	    		mat = Material.getMaterial(block.getTypeId());
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
@@ -46,8 +47,9 @@ public class mcHerbalism {
 		    			loc.getWorld().dropItemNaturally(loc, is);
 		    		}
 	    		}
-	    		mcUsers.getProfile(player).addHerbalismGather(10);
+	    		mcUsers.getProfile(player).addHerbalismGather(40 * mcLoadProperties.xpGainMultiplier);
 	    	}
+	    	//Flower
 	    	if(type == 37 || type == 38){
 	    		mat = Material.getMaterial(block.getTypeId());
 				is = new ItemStack(mat, 1, (byte)0, (byte)0);
@@ -56,7 +58,7 @@ public class mcHerbalism {
 		    			loc.getWorld().dropItemNaturally(loc, is);
 		    		}
 	    		}
-	    		mcUsers.getProfile(player).addHerbalismGather(3);
+	    		mcUsers.getProfile(player).addHerbalismGather(10 * mcLoadProperties.xpGainMultiplier);
 	    	}
     	}
     	mcSkills.getInstance().XpCheck(player);

+ 29 - 27
mcMMO/com/gmail/nossr50/mcLoadProperties.java

@@ -1,9 +1,9 @@
 package com.gmail.nossr50;
 
 public class mcLoadProperties {
-	public static Boolean toolsLoseDurabilityFromAbilities, pvpxp, miningrequirespickaxe, woodcuttingrequiresaxe, pvp, eggs, apples, myspawnclearsinventory, cake, music, diamond, glowstone, slowsand, sulphur, netherrack, bones, coal, clay, anvilmessages;
+	public static Boolean mushrooms, toolsLoseDurabilityFromAbilities, pvpxp, miningrequirespickaxe, woodcuttingrequiresaxe, pvp, eggs, apples, myspawnclearsinventory, cake, music, diamond, glowstone, slowsand, sulphur, netherrack, bones, coal, clay, anvilmessages;
 	public static String mcability, mcmmo, mcc, mcrefresh, mcitem, mcgod, stats, mmoedit, ptp, party, myspawn, setmyspawn, whois, invite, accept, clearmyspawn;
-	public static int superBreakerCooldown, gigaDrillBreakerCooldown, treeFellerCooldown, berserkCooldown, serratedStrikeCooldown, skullSplitterCooldown, abilityDurabilityLoss, feathersConsumedByChimaeraWing, pvpxprewardmodifier, repairdiamondlevel, globalxpmodifier, miningxpmodifier, repairxpmodifier, woodcuttingxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier, archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier;
+	public static int xpGainMultiplier, superBreakerCooldown, gigaDrillBreakerCooldown, treeFellerCooldown, berserkCooldown, serratedStrikeCooldown, skullSplitterCooldown, abilityDurabilityLoss, feathersConsumedByChimaeraWing, pvpxprewardmodifier, repairdiamondlevel, globalxpmodifier, miningxpmodifier, repairxpmodifier, woodcuttingxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier, archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier;
 	
 	public static void loadMain(){
     	String propertiesFile = mcMMO.maindirectory + "mcmmo.properties";
@@ -22,6 +22,8 @@ public class mcLoadProperties {
     	/*
     	 * OTHER
     	 */
+    	myspawnclearsinventory = properties.getBoolean("mySpawnClearsInventory", true);
+    	xpGainMultiplier = properties.getInteger("xpGainMultiplier", 1);
     	toolsLoseDurabilityFromAbilities = properties.getBoolean("toolsLoseDurabilityFromAbilities", true);
     	abilityDurabilityLoss = properties.getInteger("abilityDurabilityLoss", 2);
     	feathersConsumedByChimaeraWing = properties.getInteger("feathersConsumedByChimaeraWing", 10);
@@ -29,44 +31,44 @@ public class mcLoadProperties {
     	pvpxprewardmodifier = properties.getInteger("pvpXpRewardModifier", 1);
     	miningrequirespickaxe = properties.getBoolean("miningRequiresPickaxe", true);
     	woodcuttingrequiresaxe = properties.getBoolean("woodcuttingRequiresAxe", true);
-    	repairdiamondlevel = properties.getInteger("repairdiamondlevel", 50);
+    	repairdiamondlevel = properties.getInteger("repairDiamondLevel", 50);
     	/*
     	 * EXPERIENCE RATE MODIFIER
     	 */
-    	globalxpmodifier = properties.getInteger("globalxpmodifier", 1);
-    	miningxpmodifier = properties.getInteger("miningxpmodifier", 2);
-    	repairxpmodifier = properties.getInteger("repairxpmodifier", 2);
-    	woodcuttingxpmodifier = properties.getInteger("woodcuttingxpmodifier", 2);
-    	unarmedxpmodifier = properties.getInteger("unarmedxpmodifier", 2);
-    	herbalismxpmodifier = properties.getInteger("herbalismxpmodifier", 2);
-    	excavationxpmodifier = properties.getInteger("excavationxpmodifier", 2);
-    	archeryxpmodifier = properties.getInteger("archeryxpmodifier", 2);
-    	swordsxpmodifier = properties.getInteger("swordsxpmodifier", 2);
-    	axesxpmodifier = properties.getInteger("axesxpmodifier", 2);
-    	acrobaticsxpmodifier = properties.getInteger("acrobaticsxpmodifier", 2);
+    	globalxpmodifier = properties.getInteger("globalXpModifier", 1);
+    	miningxpmodifier = properties.getInteger("miningXpModifier", 2);
+    	repairxpmodifier = properties.getInteger("repairXpModifier", 2);
+    	woodcuttingxpmodifier = properties.getInteger("woodcuttingXpModifier", 2);
+    	unarmedxpmodifier = properties.getInteger("unarmedXpModifier", 2);
+    	herbalismxpmodifier = properties.getInteger("herbalismXpModifier", 2);
+    	excavationxpmodifier = properties.getInteger("excavationXpModifier", 2);
+    	archeryxpmodifier = properties.getInteger("archeryXpModifier", 2);
+    	swordsxpmodifier = properties.getInteger("swordsXpModifier", 2);
+    	axesxpmodifier = properties.getInteger("axesXpModifier", 2);
+    	acrobaticsxpmodifier = properties.getInteger("acrobaticsXpModifier", 2);
     	/*
     	 * TOGGLE CLAY
     	 */
-    	clay = properties.getBoolean("graveltoclay", true);
+    	clay = properties.getBoolean("gravelToClay", true);
     	/*
     	 * ANVIL MESSAGES
     	 */
-    	anvilmessages = properties.getBoolean("anvilmessages", true);
+    	anvilmessages = properties.getBoolean("anvilMessages", true);
     	/*
     	 * EXCAVATION LOOT TOGGLES
     	 */
-    	myspawnclearsinventory = properties.getBoolean("myspawnclearsinventory", true);
-    	glowstone = properties.getBoolean("canexcavateglowstone", true);
+    	mushrooms = properties.getBoolean("canExcavateMushrooms", true);
+    	glowstone = properties.getBoolean("canExcavateGlowstone", true);
     	pvp = properties.getBoolean("pvp", true);
-    	eggs = properties.getBoolean("canexcavateeggs", true);
-    	apples = properties.getBoolean("canexcavateapples", true);
-    	cake = properties.getBoolean("canexcavatecake", true);
-    	music = properties.getBoolean("canexcavatemusic", true);
-    	diamond = properties.getBoolean("canexcavatediamond", true);
-    	slowsand = properties.getBoolean("canexcavateslowsand", true);
-    	sulphur = properties.getBoolean("canexcavatesulphur", true);
-    	netherrack = properties.getBoolean("canexcavatenetherrack", true);
-    	bones = properties.getBoolean("canexcavatebones", true);
+    	eggs = properties.getBoolean("canExcavateEggs", true);
+    	apples = properties.getBoolean("canExcavateApples", true);
+    	cake = properties.getBoolean("canExcavateCake", true);
+    	music = properties.getBoolean("canExcavateMusic", true);
+    	diamond = properties.getBoolean("canExcavateDiamond", true);
+    	slowsand = properties.getBoolean("canExcavateSlowSand", true);
+    	sulphur = properties.getBoolean("canExcavateSulphur", true);
+    	netherrack = properties.getBoolean("canExcavateNetherrack", true);
+    	bones = properties.getBoolean("canExcavateBones", true);
     	
     	/*
     	 * CUSTOM COMMANDS

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

@@ -67,7 +67,7 @@ public class mcMMO extends JavaPlugin {
         pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Highest, this);
-        pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Low, this);
+        pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Highest, this);
         pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.BLOCK_FLOW, blockListener, Priority.Normal, this);

+ 26 - 18
mcMMO/com/gmail/nossr50/mcMining.java

@@ -110,50 +110,52 @@ public class mcMining {
     	}		
 	}
     public void miningBlockCheck(Player player, Block block){
+    	int xp = 0;
     	if(block.getTypeId() == 1 || block.getTypeId() == 24){
-    		mcUsers.getProfile(player).addMiningGather(3);
+    		xp += 3;
     		blockProcCheck(block, player);
     	}
     	//NETHERRACK
     	if(block.getTypeId() == 87){
-    		mcUsers.getProfile(player).addMiningGather(3);
+    		xp += 3;
     		blockProcCheck(block, player);
     	}
     	//GLOWSTONE
     	if(block.getTypeId() == 89){
-    		mcUsers.getProfile(player).addMiningGather(3);
+    		xp += 3;
     		blockProcCheck(block, player);
     	}
     	//COAL
     	if(block.getTypeId() == 16){
-    		mcUsers.getProfile(player).addMiningGather(10);
+    		xp += 10;
     		blockProcCheck(block, player);
     	}
     	//GOLD
     	if(block.getTypeId() == 14){
-    		mcUsers.getProfile(player).addMiningGather(35);
+    		xp += 35;
     		blockProcCheck(block, player);
     	}
     	//DIAMOND
     	if(block.getTypeId() == 56){
-    		mcUsers.getProfile(player).addMiningGather(75);
+    		xp += 75;
     		blockProcCheck(block, player);
     	}
     	//IRON
     	if(block.getTypeId() == 15){
-    		mcUsers.getProfile(player).addMiningGather(25);
+    		xp += 25;
     		blockProcCheck(block, player);
     	}
     	//REDSTONE
     	if(block.getTypeId() == 73 || block.getTypeId() == 74){
-    		mcUsers.getProfile(player).addMiningGather(15);
+    		xp += 15;
     		blockProcCheck(block, player);
     	}
     	//LAPUS
     	if(block.getTypeId() == 21){
-    		mcUsers.getProfile(player).addMiningGather(40);
+    		xp += 40;
     		blockProcCheck(block, player);
     	}
+    	mcUsers.getProfile(player).addMiningGather(xp * mcLoadProperties.xpGainMultiplier);
     	mcSkills.getInstance().XpCheck(player);
     }
     /*
@@ -172,11 +174,12 @@ public class mcMining {
     		mcm.getInstance().damageTool(player, (short) mcLoadProperties.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(!mcConfig.getInstance().isBlockWatched(block)){
-    			mcUsers.getProfile(player).addMiningGather(3);
+    			xp += 3;
     			blockProcCheck(block, player);
     			blockProcCheck(block, player);
     		}
@@ -192,7 +195,7 @@ public class mcMining {
     	//NETHERRACK
     	if(block.getTypeId() == 87){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-    			mcUsers.getProfile(player).addMiningGather(3);
+    			xp += 3;
     			blockProcCheck(block, player);
     			blockProcCheck(block, player);
     		}
@@ -204,7 +207,7 @@ public class mcMining {
     	//GLOWSTONE
     	if(block.getTypeId() == 89){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-    			mcUsers.getProfile(player).addMiningGather(3);
+    			xp += 3;
     			blockProcCheck(block, player);
     			blockProcCheck(block, player);
     		}
@@ -216,7 +219,7 @@ public class mcMining {
     	//COAL
     	if(block.getTypeId() == 16){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-        		mcUsers.getProfile(player).addMiningGather(10);
+    			xp += 10;
         		blockProcCheck(block, player);
         		blockProcCheck(block, player);
         		}
@@ -228,16 +231,18 @@ public class mcMining {
     	//GOLD
     	if(block.getTypeId() == 14 && mcm.getInstance().getTier(player) >= 3){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-        		mcUsers.getProfile(player).addMiningGather(35);
+    			xp += 35;
         		blockProcCheck(block, player);
         		blockProcCheck(block, player);
         		}
+    		item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
     		block.setType(Material.AIR);
     	}
     	//DIAMOND
     	if(block.getTypeId() == 56 && mcm.getInstance().getTier(player) >= 3){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-        		mcUsers.getProfile(player).addMiningGather(75);
+    			xp += 75;
         		blockProcCheck(block, player);
         		blockProcCheck(block, player);
         	}
@@ -249,16 +254,18 @@ public class mcMining {
     	//IRON
     	if(block.getTypeId() == 15 && mcm.getInstance().getTier(player) >= 2){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-        		mcUsers.getProfile(player).addMiningGather(25);
+    			xp += 25;
         		blockProcCheck(block, player);
         		blockProcCheck(block, player);
         	}
+    		item = new ItemStack(mat, 1, (byte)0, damage);
+			loc.getWorld().dropItemNaturally(loc, item);
     		block.setType(Material.AIR);
     	}
     	//REDSTONE
     	if((block.getTypeId() == 73 || block.getTypeId() == 74) && mcm.getInstance().getTier(player) >= 4){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-        		mcUsers.getProfile(player).addMiningGather(15);
+    			xp += 15;
         		blockProcCheck(block, player);
         		blockProcCheck(block, player);
         	}
@@ -275,7 +282,7 @@ public class mcMining {
     	//LAPUS
     	if(block.getTypeId() == 21 && mcm.getInstance().getTier(player) >= 3){
     		if(!mcConfig.getInstance().isBlockWatched(block)){
-        		mcUsers.getProfile(player).addMiningGather(40);
+    			xp += 40;
         		blockProcCheck(block, player);
         		blockProcCheck(block, player);
         	}
@@ -287,6 +294,7 @@ public class mcMining {
 			loc.getWorld().dropItemNaturally(loc, item);
     		block.setType(Material.AIR);
     	}
+    	mcUsers.getProfile(player).addMiningGather(xp * mcLoadProperties.xpGainMultiplier);
     	mcSkills.getInstance().XpCheck(player);
     }
 }

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

@@ -341,7 +341,7 @@ public class mcPlayerListener extends PlayerListener {
     		event.setCancelled(true);
     		player.sendMessage(ChatColor.GREEN + "Your mcMMO Stats");
     		if(mcPermissions.getInstance().permissionsEnabled)
-    		player.sendMessage(ChatColor.DARK_GRAY+"If you don't have access to a skill it will not be shown here.");
+    			player.sendMessage(ChatColor.DARK_GRAY+"If you don't have access to a skill it will not be shown here.");
     		if(mcPermissions.getInstance().mining(player))
     		player.sendMessage(ChatColor.YELLOW + "Mining Skill: " + ChatColor.GREEN + mcUsers.getProfile(player).getMining()+ChatColor.DARK_AQUA 
     				+ " XP("+mcUsers.getProfile(player).getMiningGather()
@@ -410,7 +410,7 @@ public class mcPlayerListener extends PlayerListener {
     			Player target = getPlayer(split[1]);
     			mcUsers.getProfile(target).modifyInvite(mcUsers.getProfile(player).getParty());
     			player.sendMessage(ChatColor.GREEN+"Invite sent successfully");
-    			target.sendMessage(ChatColor.RED+"ALERT: "+ChatColor.GREEN+"You have received a party invite for "+mcUsers.getProfile(target).getInvite());
+    			target.sendMessage(ChatColor.RED+"ALERT: "+ChatColor.GREEN+"You have received a party invite for "+mcUsers.getProfile(target).getInvite()+" from "+player.getName());
     			target.sendMessage(ChatColor.YELLOW+"Type "+ChatColor.GREEN+"/"+mcLoadProperties.accept+ChatColor.YELLOW+" to accept the invite");
     		}
     	}

+ 8 - 8
mcMMO/com/gmail/nossr50/mcRepair.java

@@ -31,19 +31,19 @@ public class mcRepair {
         			if(isDiamondArmor(is) && hasDiamond(player) && mcUsers.getProfile(player).getRepairInt() >= mcLoadProperties.repairdiamondlevel){
 	        			removeDiamond(player);
 	        			player.getItemInHand().setDurability(getArmorRepairAmount(is, player));
-	        			mcUsers.getProfile(player).addRepairGather(75);
+	        			mcUsers.getProfile(player).addRepairGather(75 * mcLoadProperties.xpGainMultiplier);
         			} else if (isIronArmor(is) && hasIron(player)){
         			/*
         			 * IRON ARMOR
         			 */
 	        			removeIron(player);
 	            		player.getItemInHand().setDurability(getArmorRepairAmount(is, player));
-	            		mcUsers.getProfile(player).addRepairGather(20);
+	            		mcUsers.getProfile(player).addRepairGather(20 * mcLoadProperties.xpGainMultiplier);
 	            	//GOLD ARMOR
         			} else if (isGoldArmor(is) && hasGold(player)){
         				removeGold(player);
         				player.getItemInHand().setDurability(getArmorRepairAmount(is, player));
-        				mcUsers.getProfile(player).addRepairGather(50);
+        				mcUsers.getProfile(player).addRepairGather(50 * mcLoadProperties.xpGainMultiplier);
         			} else {
         				needMoreVespeneGas(is, player);
         			}
@@ -58,18 +58,18 @@ public class mcRepair {
             		if(isIronTools(is) && hasIron(player)){
             			is.setDurability(getToolRepairAmount(is, player));
             			removeIron(player);
-            			mcUsers.getProfile(player).addRepairGather(20);
+            			mcUsers.getProfile(player).addRepairGather(20 * mcLoadProperties.xpGainMultiplier);
             		} else if (isDiamondTools(is) && hasDiamond(player) && mcUsers.getProfile(player).getRepairInt() >= mcLoadProperties.repairdiamondlevel){ //Check if its diamond and the player has diamonds
             			/*
             			 * DIAMOND TOOLS
             			 */
             			is.setDurability(getToolRepairAmount(is, player));
             			removeDiamond(player);
-            			mcUsers.getProfile(player).addRepairGather(75);
+            			mcUsers.getProfile(player).addRepairGather(75 * mcLoadProperties.xpGainMultiplier);
             		} else if(isGoldTools(is) && hasGold(player)){
             			is.setDurability(getToolRepairAmount(is, player));
             			removeGold(player);
-            			mcUsers.getProfile(player).addRepairGather(50);
+            			mcUsers.getProfile(player).addRepairGather(50 * mcLoadProperties.xpGainMultiplier);
             		} else {
             			needMoreVespeneGas(is, player);
             		}
@@ -325,9 +325,9 @@ public class mcRepair {
         		break;
     		}
 			if(durability < 0)
-			durability = 0;
+				durability = 0;
 			if(checkPlayerProcRepair(player))
-	    	durability = 0;
+				durability = 0;
 			return durability;
     }
     public void needMoreVespeneGas(ItemStack is, Player player){

+ 1 - 0
mcMMO/com/gmail/nossr50/mcSkills.java

@@ -511,5 +511,6 @@ public class mcSkills {
     		x++;
     		}
     	}
+    	mcConfig.getInstance().removeArrowTracked(entity);
     }
 }

+ 3 - 1
mcMMO/com/gmail/nossr50/mcTimer.java

@@ -16,7 +16,9 @@ public class mcTimer extends TimerTask{
 	public void run() {
 		Player[] playerlist = plugin.getServer().getOnlinePlayers();
 		for(Player player : playerlist){
-			if(player != null && mcUsers.getProfile(player) == null)
+			if(player == null)
+				continue;
+			if(mcUsers.getProfile(player) == null)
 	    		mcUsers.addUser(player);
 			/*
 			 * MONITOR SKILLS

+ 2 - 0
mcMMO/com/gmail/nossr50/mcm.java

@@ -603,6 +603,8 @@ public class mcm {
 	    			player.sendMessage("/"+mcLoadProperties.setmyspawn+" "+ChatColor.RED+"- Set your MySpawn");
     		}
     		player.sendMessage(ChatColor.GREEN+"--OTHER COMMANDS--");
+    		if(mcPermissions.getInstance().mcAbility(player))
+    			player.sendMessage("/"+mcLoadProperties.mcability+ChatColor.RED+" - Toggle ability activation with right click");
     		if(mcPermissions.getInstance().adminChat(player)){
     			player.sendMessage("/a "+ChatColor.RED+"- Toggle admin chat");
     		}

+ 1 - 1
mcMMO/plugin.yml

@@ -1,3 +1,3 @@
 name: mcMMO
 main: com.gmail.nossr50.mcMMO
-version: 0.9.7
+version: 0.9.10