Browse Source

Another WIP of 0.9

nossr50 14 years ago
parent
commit
a8a35ae7a9

+ 7 - 2
mcMMO/Changelog.txt

@@ -4,18 +4,23 @@ Version 0.9
 --NEW CONTENT--
 --NEW CONTENT--
 Woodcutting now has the "Tree Feller" Ability
 Woodcutting now has the "Tree Feller" Ability
 Mining now has the "Super Breaker" Ability
 Mining now has the "Super Breaker" Ability
+Axes now has the "Skull Splitter" Ability
+Excavation now has the "Giga Drill Breaker" Ability
+Added /mcrefresh tool for refreshing cooldowns
 Unarmed now has the "Deflect Arrows" passive skill
 Unarmed now has the "Deflect Arrows" passive skill
 Chimaera Wing Item Added
 Chimaera Wing Item Added
 
 
 --CHANGES--
 --CHANGES--
+Woodcutting will drop the appropriate log on double drop procs
 Herbalism now applies double drops to herbs
 Herbalism now applies double drops to herbs
 /<skillname> now shows much more information to the player regarding their stats
 /<skillname> now shows much more information to the player regarding their stats
 Axes skill Critical Strikes are now based directly on your skill level
 Axes skill Critical Strikes are now based directly on your skill level
-Swords skill Bleed is now based directly on your skill level
-Unarmed disarm is now based directly on your skill level
+Swords skill Bleed chance is now based directly on your skill level
+Unarmed disarm chance is now based directly on your skill level
 Acrobatics now gives XP when you roll
 Acrobatics now gives XP when you roll
 
 
 --BUGFIXES--
 --BUGFIXES--
+Capped skills now have the correct proc chance
 /mmoedit is no longer case sensitive
 /mmoedit is no longer case sensitive
 More NPE errors fixed
 More NPE errors fixed
 
 

+ 20 - 5
mcMMO/com/gmail/nossr50/mcBlockListener.java

@@ -1,7 +1,5 @@
 package com.gmail.nossr50;
 package com.gmail.nossr50;
 
 
-import java.util.ArrayList;
-
 import org.bukkit.ChatColor;
 import org.bukkit.ChatColor;
 import org.bukkit.Location;
 import org.bukkit.Location;
 import org.bukkit.Material;
 import org.bukkit.Material;
@@ -55,6 +53,21 @@ public class mcBlockListener extends BlockListener {
     	Location loc = block.getLocation();
     	Location loc = block.getLocation();
     	int dmg = event.getDamageLevel().getLevel();
     	int dmg = event.getDamageLevel().getLevel();
     	
     	
+    	/*
+    	 * GIGA DRILL BREAKER CHECKS
+    	 */
+    	if(mcUsers.getProfile(player).getGigaDrillBreakerMode() && dmg == 0 && mcExcavation.getInstance().canBeGigaDrillBroken(block) && mcm.getInstance().isShovel(inhand)){
+    		mcExcavation.getInstance().excavationProcCheck(block, player);
+    		mcExcavation.getInstance().excavationProcCheck(block, player);
+    		mcExcavation.getInstance().excavationProcCheck(block, player);
+    		Material mat = Material.getMaterial(block.getTypeId());
+    		if(block.getTypeId() == 2)
+    			mat = Material.DIRT;
+			byte type = block.getData();
+			ItemStack item = new ItemStack(mat, 1, (byte)0, type);
+			block.setType(Material.AIR);
+			block.getLocation().getWorld().dropItemNaturally(block.getLocation(), item);
+    	}
     	/*
     	/*
     	 * SUPER BREAKER CHECKS
     	 * SUPER BREAKER CHECKS
     	 */
     	 */
@@ -112,8 +125,10 @@ public class mcBlockListener extends BlockListener {
 	    				for(Block blockx : mcConfig.getInstance().getTreeFeller()){
 	    				for(Block blockx : mcConfig.getInstance().getTreeFeller()){
 	    					if(blockx != null){
 	    					if(blockx != null){
 	    						Material mat = Material.getMaterial(block.getTypeId());
 	    						Material mat = Material.getMaterial(block.getTypeId());
-	    						byte damage = 0;
-	    						ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
+	    						byte type = 0;
+	    						if(block.getTypeId() == 17)
+	    							type = block.getData();
+	    						ItemStack item = new ItemStack(mat, 1, (byte)0, type);
 	    						if(blockx.getTypeId() == 17){
 	    						if(blockx.getTypeId() == 17){
 	    							blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
 	    							blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
 	    							mcWoodCutting.getInstance().woodCuttingProcCheck(player, blockx, blockx.getLocation());
 	    							mcWoodCutting.getInstance().woodCuttingProcCheck(player, blockx, blockx.getLocation());
@@ -121,7 +136,7 @@ public class mcBlockListener extends BlockListener {
 	    						}
 	    						}
 	    						if(blockx.getTypeId() == 18){
 	    						if(blockx.getTypeId() == 18){
 	    							mat = Material.getMaterial(6);
 	    							mat = Material.getMaterial(6);
-	    							item = new ItemStack(mat, 1, (byte)0, damage);
+	    							item = new ItemStack(mat, 1, (byte)0, type);
 	    							if(Math.random() * 10 > 8)
 	    							if(Math.random() * 10 > 8)
 	    								blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
 	    								blockx.getLocation().getWorld().dropItemNaturally(blockx.getLocation(), item);
 	    						}
 	    						}

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

@@ -289,7 +289,7 @@ public class mcCombat {
     		Player defender = (Player)x;
     		Player defender = (Player)x;
     		if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0){
     		if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0){
 	    		if(mcUsers.getProfile(defender).getUnarmedInt() >= 1000){
 	    		if(mcUsers.getProfile(defender).getUnarmedInt() >= 1000){
-	    			if(Math.random() * 1000 >= 500){
+	    			if(Math.random() * 1000 <= 500){
 	    				event.setCancelled(true);
 	    				event.setCancelled(true);
 	    				defender.sendMessage(ChatColor.WHITE+"**ARROW DEFLECT**");
 	    				defender.sendMessage(ChatColor.WHITE+"**ARROW DEFLECT**");
 	    				return;
 	    				return;
@@ -462,7 +462,7 @@ public class mcCombat {
     }
     }
 	public boolean simulateUnarmedProc(Player player){
 	public boolean simulateUnarmedProc(Player player){
     	if(mcUsers.getProfile(player).getUnarmedInt() >= 750){
     	if(mcUsers.getProfile(player).getUnarmedInt() >= 750){
-    		if(Math.random() * 1000 >= 750){
+    		if(Math.random() * 1000 <= 750){
     			return true;
     			return true;
     		}
     		}
     	} else {
     	} else {
@@ -522,7 +522,7 @@ public class mcCombat {
     public void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){
     public void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){
     	if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
     	if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
     		if(mcUsers.getProfile(attacker).getAxesInt() >= 750){
     		if(mcUsers.getProfile(attacker).getAxesInt() >= 750){
-    			if(Math.random() * 1000 >= 750){
+    			if(Math.random() * 1000 <= 750){
     				event.setDamage(event.getDamage() * 2);
     				event.setDamage(event.getDamage() * 2);
     				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
     				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
     				if(x instanceof Player){
     				if(x instanceof Player){

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

@@ -13,6 +13,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
 import org.bukkit.event.entity.EntityDeathEvent;
 import org.bukkit.event.entity.EntityDeathEvent;
 import org.bukkit.event.entity.EntityListener;
 import org.bukkit.event.entity.EntityListener;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.inventory.ItemStack;
+import org.bukkit.util.Vector;
 
 
 public class mcEntityListener extends EntityListener {
 public class mcEntityListener extends EntityListener {
 	private final mcMMO plugin;
 	private final mcMMO plugin;

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

@@ -19,7 +19,50 @@ public class mcExcavation {
     	}
     	}
     	return instance;
     	return instance;
     	}
     	}
-	
+	public void gigaDrillBreakerActivationCheck(Player player, Block block){
+		if(mcm.getInstance().isShovel(player.getItemInHand())){
+	    	if(block != null){
+		    	if(!mcm.getInstance().abilityBlockCheck(block))
+		    		return;
+	    	}
+	    	
+	    	int ticks = 2;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 50)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 150)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 250)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 350)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 450)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 550)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 650)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 750)
+    			ticks++;
+    		
+	    	if(!mcUsers.getProfile(player).getGigaDrillBreakerMode() && mcUsers.getProfile(player).getGigaDrillBreakerCooldown() == 0){
+	    		player.sendMessage(ChatColor.GREEN+"**GIGA DRILL BREAKER ACTIVATED**");
+	    		mcUsers.getProfile(player).setGigaDrillBreakerTicks(ticks);
+	    		mcUsers.getProfile(player).setGigaDrillBreakerMode(true);
+	    	}
+	    	
+	    	if(!mcUsers.getProfile(player).getGigaDrillBreakerMode() && mcUsers.getProfile(player).getGigaDrillBreakerCooldown() >= 1){
+	    		player.sendMessage(ChatColor.RED+"You are too tired to use that ability again.");
+	    	}
+	    }
+	}
+	public boolean canBeGigaDrillBroken(Block block){
+		int i = block.getTypeId();
+		if(i == 2||i == 3||i == 12||i == 13){
+			return true;
+		} else {
+			return false;
+		}
+	}
 	public void excavationProcCheck(Block block, Player player){
 	public void excavationProcCheck(Block block, Player player){
     	int type = block.getTypeId();
     	int type = block.getTypeId();
     	Location loc = block.getLocation();
     	Location loc = block.getLocation();

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

@@ -2,7 +2,7 @@ package com.gmail.nossr50;
 
 
 public class mcLoadProperties {
 public class mcLoadProperties {
 	public static Boolean pvpxp, miningrequirespickaxe, woodcuttingrequiresaxe, pvp, eggs, apples, myspawnclearsinventory, cake, music, diamond, glowstone, slowsand, sulphur, netherrack, bones, coal, clay, anvilmessages;
 	public static Boolean pvpxp, miningrequirespickaxe, woodcuttingrequiresaxe, pvp, eggs, apples, myspawnclearsinventory, cake, music, diamond, glowstone, slowsand, sulphur, netherrack, bones, coal, clay, anvilmessages;
-	public static String mcmmo, mcc, mcitem, mcgod, stats, mmoedit, ptp, party, myspawn, setmyspawn, whois, invite, accept, clearmyspawn;
+	public static String mcmmo, mcc, mcrefresh, mcitem, mcgod, stats, mmoedit, ptp, party, myspawn, setmyspawn, whois, invite, accept, clearmyspawn;
 	public static int feathersConsumedByChimaeraWing, pvpxprewardmodifier, repairdiamondlevel, globalxpmodifier, miningxpmodifier, repairxpmodifier, woodcuttingxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier, archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier;
 	public static int feathersConsumedByChimaeraWing, pvpxprewardmodifier, repairdiamondlevel, globalxpmodifier, miningxpmodifier, repairxpmodifier, woodcuttingxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier, archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier;
 	
 	
 	public static void loadMain(){
 	public static void loadMain(){
@@ -53,9 +53,11 @@ public class mcLoadProperties {
     	sulphur = properties.getBoolean("canexcavatesulphur", true);
     	sulphur = properties.getBoolean("canexcavatesulphur", true);
     	netherrack = properties.getBoolean("canexcavatenetherrack", true);
     	netherrack = properties.getBoolean("canexcavatenetherrack", true);
     	bones = properties.getBoolean("canexcavatebones", true);
     	bones = properties.getBoolean("canexcavatebones", true);
+    	
     	/*
     	/*
     	 * CUSTOM COMMANDS
     	 * CUSTOM COMMANDS
     	 */
     	 */
+    	mcrefresh = properties.getString("/mcrefresh", "mcrefresh");
     	mcitem = properties.getString("/mcitem", "mcitem");
     	mcitem = properties.getString("/mcitem", "mcitem");
     	mcmmo = properties.getString("/mcmmo", "mcmmo");
     	mcmmo = properties.getString("/mcmmo", "mcmmo");
     	mcc = properties.getString("/mcc", "mcc");
     	mcc = properties.getString("/mcc", "mcc");

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

@@ -67,7 +67,7 @@ public class mcMMO extends JavaPlugin {
         PluginManager pm = getServer().getPluginManager();
         PluginManager pm = getServer().getPluginManager();
         pm.registerEvent(Event.Type.PLAYER_JOIN, 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_LOGIN, playerListener, Priority.Normal, this);
-        pm.registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Normal, this);
+        pm.registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Low, this);
         pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this);
         pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this);
         pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.High, this);
         pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.High, this);
         pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
@@ -76,7 +76,7 @@ public class mcMMO extends JavaPlugin {
         pm.registerEvent(Event.Type.PLAYER_ITEM, playerListener, Priority.Monitor, this);
         pm.registerEvent(Event.Type.PLAYER_ITEM, playerListener, Priority.Monitor, this);
         pm.registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.PLAYER_ITEM_HELD, playerListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.PLAYER_ITEM_HELD, playerListener, Priority.Normal, this);
-        pm.registerEvent(Event.Type.ENTITY_DAMAGED, entityListener, Priority.Normal, this);
+        pm.registerEvent(Event.Type.ENTITY_DAMAGED, entityListener, Priority.Low, this);
         pm.registerEvent(Event.Type.BLOCK_RIGHTCLICKED, blockListener, Priority.Normal, this);
         pm.registerEvent(Event.Type.BLOCK_RIGHTCLICKED, blockListener, Priority.Normal, this);
         //pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
         //pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
         //Displays a message when plugin is loaded
         //Displays a message when plugin is loaded

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

@@ -26,7 +26,7 @@ public class mcMining {
 		    		return;
 		    		return;
 	    	}
 	    	}
 	    	
 	    	
-	    	int miningticks = 3;
+	    	int miningticks = 2;
     		if(mcUsers.getProfile(player).getMiningInt() >= 50)
     		if(mcUsers.getProfile(player).getMiningInt() >= 50)
     			miningticks++;
     			miningticks++;
     		if(mcUsers.getProfile(player).getMiningInt() >= 150)
     		if(mcUsers.getProfile(player).getMiningInt() >= 150)

+ 14 - 0
mcMMO/com/gmail/nossr50/mcPermissions.java

@@ -30,6 +30,13 @@ public class mcPermissions {
     private boolean permission(Player player, String string) {
     private boolean permission(Player player, String string) {
         return permissionsPlugin.Security.permission(player, string);  
         return permissionsPlugin.Security.permission(player, string);  
     }
     }
+    public boolean mcrefresh(Player player) {
+        if (permissionsEnabled) {
+            return permission(player, "mcmmo.tools.mcrefresh");
+        } else {
+            return true;
+        }
+    }
     public boolean mmoedit(Player player) {
     public boolean mmoedit(Player player) {
         if (permissionsEnabled) {
         if (permissionsEnabled) {
             return permission(player, "mcmmo.tools.mmoedit");
             return permission(player, "mcmmo.tools.mmoedit");
@@ -37,6 +44,13 @@ public class mcPermissions {
             return true;
             return true;
         }
         }
     }
     }
+    public boolean excavationAbility(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.ability.excavation");
+        } else {
+            return true;
+        }
+    }
     public boolean unarmedAbility(Player player){
     public boolean unarmedAbility(Player player){
     	if (permissionsEnabled) {
     	if (permissionsEnabled) {
             return permission(player, "mcmmo.ability.unarmed");
             return permission(player, "mcmmo.ability.unarmed");

+ 42 - 0
mcMMO/com/gmail/nossr50/mcPlayerListener.java

@@ -92,6 +92,48 @@ public class mcPlayerListener extends PlayerListener {
     	String playerName = player.getName();
     	String playerName = player.getName();
     	//Check if the command is an mcMMO related help command
     	//Check if the command is an mcMMO related help command
     	mcm.getInstance().mcmmoHelpCheck(split, player, event);
     	mcm.getInstance().mcmmoHelpCheck(split, player, event);
+		if(mcPermissions.permissionsEnabled && split[0].equalsIgnoreCase("/"+mcLoadProperties.mcrefresh)){
+			event.setCancelled(true);
+    		if(!mcPermissions.getInstance().mcrefresh(player)){
+    			player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +" Insufficient permissions.");
+    			return;
+    		}
+    		if(split.length >= 2 && isPlayer(split[1])){
+    			player.sendMessage("You have refreshed "+split[1]+"'s cooldowns!");
+    			player = getPlayer(split[1]);
+    		}
+			/*
+			 * AXE PREPARATION MODE
+			 */
+    		mcUsers.getProfile(player).setAxePreparationMode(false);
+    		mcUsers.getProfile(player).setAxePreparationTicks(0);
+    		/*
+    		 * GIGA DRILL BREAKER
+    		 */
+    		mcUsers.getProfile(player).setGigaDrillBreakerCooldown(0);
+    		mcUsers.getProfile(player).setGigaDrillBreakerMode(false);
+    		mcUsers.getProfile(player).setGigaDrillBreakerTicks(0);
+    		/*
+    		 * SERRATED STRIKE
+    		 */
+    		mcUsers.getProfile(player).setSerratedStrikesCooldown(0);
+    		mcUsers.getProfile(player).setSerratedStrikesMode(false);
+    		mcUsers.getProfile(player).setSerratedStrikesTicks(0);
+    		/*
+    		 * SUPER BREAKER
+    		 */
+    		mcUsers.getProfile(player).setSuperBreakerCooldown(0);
+    		mcUsers.getProfile(player).setSuperBreakerMode(false);
+    		mcUsers.getProfile(player).setSuperBreakerTicks(0);
+    		/*
+    		 * TREE FELLER
+    		 */
+    		mcUsers.getProfile(player).setTreeFellerCooldown(0);
+    		mcUsers.getProfile(player).setTreeFellerMode(false);
+    		mcUsers.getProfile(player).setTreeFellerTicks(0);
+    		
+    		player.sendMessage(ChatColor.GREEN+"**ABILITIES REFRESHED!**");
+    	}
     	if(split[0].equalsIgnoreCase("/"+mcLoadProperties.mcitem)){
     	if(split[0].equalsIgnoreCase("/"+mcLoadProperties.mcitem)){
     		
     		
     	}
     	}

+ 29 - 6
mcMMO/com/gmail/nossr50/mcSkills.java

@@ -38,25 +38,31 @@ public class mcSkills {
     	if(mcUsers.getProfile(player).getTreeFellerCooldown() >= 1){
     	if(mcUsers.getProfile(player).getTreeFellerCooldown() >= 1){
     		mcUsers.getProfile(player).decreaseTreeFellerCooldown();
     		mcUsers.getProfile(player).decreaseTreeFellerCooldown();
     		if(mcUsers.getProfile(player).getTreeFellerCooldown() == 0){
     		if(mcUsers.getProfile(player).getTreeFellerCooldown() == 0){
-    			player.sendMessage(ChatColor.GREEN+"Your Tree Felling ability is refreshed!");
+    			player.sendMessage(ChatColor.GREEN+"Your "+ChatColor.YELLOW+"Tree Feller "+ChatColor.GREEN+"ability is refreshed!");
     		}
     		}
     	}
     	}
     	if(mcUsers.getProfile(player).getSuperBreakerCooldown() >= 1){
     	if(mcUsers.getProfile(player).getSuperBreakerCooldown() >= 1){
     		mcUsers.getProfile(player).decreaseSuperBreakerCooldown();
     		mcUsers.getProfile(player).decreaseSuperBreakerCooldown();
 			if(mcUsers.getProfile(player).getSuperBreakerCooldown() == 0){
 			if(mcUsers.getProfile(player).getSuperBreakerCooldown() == 0){
-				player.sendMessage(ChatColor.GREEN+"Your Super Breaker ability is refreshed!");
+				player.sendMessage(ChatColor.GREEN+"Your "+ChatColor.YELLOW+"Super Breaker "+ChatColor.GREEN+"ability is refreshed!");
 			}
 			}
     	}
     	}
     	if(mcUsers.getProfile(player).getSerratedStrikesCooldown() >= 1){
     	if(mcUsers.getProfile(player).getSerratedStrikesCooldown() >= 1){
     		mcUsers.getProfile(player).decreaseSerratedStrikesCooldown();
     		mcUsers.getProfile(player).decreaseSerratedStrikesCooldown();
 			if(mcUsers.getProfile(player).getSuperBreakerCooldown() == 0){
 			if(mcUsers.getProfile(player).getSuperBreakerCooldown() == 0){
-				player.sendMessage(ChatColor.GREEN+"Your Serrated Strikes ability is refreshed!");
+				player.sendMessage(ChatColor.GREEN+"Your "+ChatColor.YELLOW+"Serrated Strikes "+ChatColor.GREEN+"ability is refreshed!");
 			}
 			}
     	}
     	}
     	if(mcUsers.getProfile(player).getSkullSplitterCooldown() >= 1){
     	if(mcUsers.getProfile(player).getSkullSplitterCooldown() >= 1){
     		mcUsers.getProfile(player).decreaseSkullSplitterCooldown();
     		mcUsers.getProfile(player).decreaseSkullSplitterCooldown();
 			if(mcUsers.getProfile(player).getSkullSplitterCooldown() == 0){
 			if(mcUsers.getProfile(player).getSkullSplitterCooldown() == 0){
-				player.sendMessage(ChatColor.GREEN+"Your Skull Splitter ability is refreshed!");
+				player.sendMessage(ChatColor.GREEN+"Your "+ChatColor.YELLOW+"Skull Splitter "+ChatColor.GREEN+"ability is refreshed!");
+			}
+    	}
+    	if(mcUsers.getProfile(player).getGigaDrillBreakerCooldown() >= 1){
+    		mcUsers.getProfile(player).decreaseGigaDrillBreakerCooldown();
+			if(mcUsers.getProfile(player).getGigaDrillBreakerCooldown() == 0){
+				player.sendMessage(ChatColor.GREEN+"Your "+ChatColor.YELLOW+"Giga Drill Breaker "+ChatColor.GREEN+"ability is refreshed!");
 			}
 			}
     	}
     	}
     }
     }
@@ -79,6 +85,9 @@ public class mcSkills {
     	if(mcPermissions.getInstance().miningability(player)){
     	if(mcPermissions.getInstance().miningability(player)){
     		mcMining.getInstance().superBreakerCheck(player, block);
     		mcMining.getInstance().superBreakerCheck(player, block);
     	}
     	}
+    	if(mcPermissions.getInstance().excavationAbility(player)){
+    		mcExcavation.getInstance().gigaDrillBreakerActivationCheck(player, block);
+    	}
     	axeActivationCheck(player, block);
     	axeActivationCheck(player, block);
     }
     }
     public void skullSplitterCheck(Player player){
     public void skullSplitterCheck(Player player){
@@ -90,7 +99,7 @@ public class mcSkills {
     			mcUsers.getProfile(player).setAxePreparationMode(false);
     			mcUsers.getProfile(player).setAxePreparationMode(false);
     			mcUsers.getProfile(player).setAxePreparationTicks(0);
     			mcUsers.getProfile(player).setAxePreparationTicks(0);
     		}
     		}
-    		int ticks = 3;
+    		int ticks = 2;
     		if(mcUsers.getProfile(player).getAxesInt() >= 50)
     		if(mcUsers.getProfile(player).getAxesInt() >= 50)
     			ticks++;
     			ticks++;
     		if(mcUsers.getProfile(player).getAxesInt() >= 150)
     		if(mcUsers.getProfile(player).getAxesInt() >= 150)
@@ -136,7 +145,7 @@ public class mcSkills {
     	 * AXES ABILITY
     	 * AXES ABILITY
     	 */
     	 */
     	if(mcPermissions.getInstance().axesAbility(player)){
     	if(mcPermissions.getInstance().axesAbility(player)){
-			//Monitor the length of TreeFeller mode
+			//Monitor the length of Skull Splitter mode
 			if(mcUsers.getProfile(player).getSkullSplitterMode()){
 			if(mcUsers.getProfile(player).getSkullSplitterMode()){
 				mcUsers.getProfile(player).decreaseSkullSplitterTicks();
 				mcUsers.getProfile(player).decreaseSkullSplitterTicks();
 				if(mcUsers.getProfile(player).getSkullSplitterTicks() <= 0){
 				if(mcUsers.getProfile(player).getSkullSplitterTicks() <= 0){
@@ -174,6 +183,20 @@ public class mcSkills {
 				}
 				}
 			}
 			}
 		}
 		}
+		/*
+		 * EXCAVATION ABILITY
+		 */
+		if(mcPermissions.getInstance().excavationAbility(player)){
+			//Monitor the length of Giga Drill Breaker mode
+			if(mcUsers.getProfile(player).getGigaDrillBreakerMode()){
+				mcUsers.getProfile(player).decreaseGigaDrillBreakerTicks();
+				if(mcUsers.getProfile(player).getGigaDrillBreakerTicks() <= 0){
+					mcUsers.getProfile(player).setGigaDrillBreakerMode(false);
+					mcUsers.getProfile(player).setGigaDrillBreakerCooldown(120);
+					player.sendMessage(ChatColor.GRAY+"**You feel spiral energy leaving you**");
+				}
+			}
+		}
     }
     }
     public void XpCheck(Player player){
     public void XpCheck(Player player){
     	/*
     	/*

+ 44 - 13
mcMMO/com/gmail/nossr50/mcUsers.java

@@ -156,8 +156,8 @@ class PlayerList
 	    protected final Logger log = Logger.getLogger("Minecraft");
 	    protected final Logger log = Logger.getLogger("Minecraft");
 		private String playerName, gather, wgather, woodcutting, repair, mining, party, myspawn, myspawnworld, unarmed, herbalism, excavation,
 		private String playerName, gather, wgather, woodcutting, repair, mining, party, myspawn, myspawnworld, unarmed, herbalism, excavation,
 		archery, swords, axes, invite, acrobatics, repairgather, unarmedgather, herbalismgather, excavationgather, archerygather, swordsgather, axesgather, acrobaticsgather;
 		archery, swords, axes, invite, acrobatics, repairgather, unarmedgather, herbalismgather, excavationgather, archerygather, swordsgather, axesgather, acrobaticsgather;
-		private boolean dead, treeFellerMode, superbreakermode, serratedStrikesMode, axePreparationMode, skullSplitterMode;
-		private int recentlyhurt = 0, bleedticks = 0, superbreakerticks = 0, superbreakercooldown = 0, 
+		private boolean dead, treeFellerMode, superBreakerMode, gigaDrillBreakerMode, serratedStrikesMode, axePreparationMode, skullSplitterMode;
+		private int recentlyhurt = 0, bleedticks = 0, gigaDrillBreaker = 0, gigaDrillBreakerCooldown = 0, gigaDrillBreakerTicks = 0, superBreakerTicks = 0, superBreakerCooldown = 0, 
 		serratedStrikesTicks = 0, skullSplitterTicks = 0, skullSplitterCooldown = 0, serratedStrikesCooldown = 0, treeFellerTicks = 0, treeFellerCooldown = 0,
 		serratedStrikesTicks = 0, skullSplitterTicks = 0, skullSplitterCooldown = 0, serratedStrikesCooldown = 0, treeFellerTicks = 0, treeFellerCooldown = 0,
 		axePreparationTicks = 0;
 		axePreparationTicks = 0;
 		Player thisplayer;
 		Player thisplayer;
@@ -436,7 +436,7 @@ class PlayerList
 			bleedticks = newvalue;
 			bleedticks = newvalue;
 		}
 		}
 		public Boolean hasCooldowns(){
 		public Boolean hasCooldowns(){
-			if((treeFellerCooldown + superbreakercooldown) >= 1){
+			if((treeFellerCooldown + superBreakerCooldown) >= 1){
 				return true;
 				return true;
 			} else {
 			} else {
 				return false;
 				return false;
@@ -524,6 +524,37 @@ class PlayerList
 				serratedStrikesCooldown--;
 				serratedStrikesCooldown--;
 			}
 			}
 		}
 		}
+		/*
+		 * GIGA DRILL BREAKER
+		 */
+		public boolean getGigaDrillBreakerMode(){
+			return gigaDrillBreakerMode;
+		}
+		public void setGigaDrillBreakerMode(Boolean bool){
+			gigaDrillBreakerMode = bool;
+		}
+		public Integer getGigaDrillBreakerTicks(){
+			return gigaDrillBreakerTicks;
+		}
+		public void setGigaDrillBreakerTicks(Integer newvalue){
+			gigaDrillBreakerTicks = newvalue;
+		}
+		public void decreaseGigaDrillBreakerTicks(){
+			if(gigaDrillBreakerTicks >= 1){
+				gigaDrillBreakerTicks--;
+			}
+		}
+		public void setGigaDrillBreakerCooldown(Integer newvalue){
+			gigaDrillBreakerCooldown = newvalue;
+		}
+		public int getGigaDrillBreakerCooldown(){
+			return gigaDrillBreakerCooldown;
+		}
+		public void decreaseGigaDrillBreakerCooldown(){
+			if(gigaDrillBreakerCooldown >= 1){
+				gigaDrillBreakerCooldown--;
+			}
+		}
 		/*
 		/*
 		 * TREE FELLER STUFF
 		 * TREE FELLER STUFF
 		 */
 		 */
@@ -559,31 +590,31 @@ class PlayerList
 		 * MINING
 		 * MINING
 		 */
 		 */
 		public boolean getSuperBreakerMode(){
 		public boolean getSuperBreakerMode(){
-			return superbreakermode;
+			return superBreakerMode;
 		}
 		}
 		public void setSuperBreakerMode(Boolean bool){
 		public void setSuperBreakerMode(Boolean bool){
-			superbreakermode = bool;
+			superBreakerMode = bool;
 		}
 		}
 		public Integer getSuperBreakerTicks(){
 		public Integer getSuperBreakerTicks(){
-			return superbreakerticks;
+			return superBreakerTicks;
 		}
 		}
 		public void setSuperBreakerTicks(Integer newvalue){
 		public void setSuperBreakerTicks(Integer newvalue){
-			superbreakerticks = newvalue;
+			superBreakerTicks = newvalue;
 		}
 		}
 		public void decreaseSuperBreakerTicks(){
 		public void decreaseSuperBreakerTicks(){
-			if(superbreakerticks >= 1){
-				superbreakerticks--;
+			if(superBreakerTicks >= 1){
+				superBreakerTicks--;
 			}
 			}
 		}
 		}
 		public void setSuperBreakerCooldown(Integer newvalue){
 		public void setSuperBreakerCooldown(Integer newvalue){
-			superbreakercooldown = newvalue;
+			superBreakerCooldown = newvalue;
 		}
 		}
 		public int getSuperBreakerCooldown(){
 		public int getSuperBreakerCooldown(){
-			return superbreakercooldown;
+			return superBreakerCooldown;
 		}
 		}
 		public void decreaseSuperBreakerCooldown(){
 		public void decreaseSuperBreakerCooldown(){
-			if(superbreakercooldown >= 1){
-				superbreakercooldown--;
+			if(superBreakerCooldown >= 1){
+				superBreakerCooldown--;
 			}
 			}
 		}
 		}
 		
 		

+ 2 - 3
mcMMO/com/gmail/nossr50/mcWoodCutting.java

@@ -26,10 +26,9 @@ public class mcWoodCutting {
     public void woodCuttingProcCheck(Player player, Block block, Location loc){
     public void woodCuttingProcCheck(Player player, Block block, Location loc){
     	byte type = block.getData();
     	byte type = block.getData();
     	Material mat = Material.getMaterial(block.getTypeId());
     	Material mat = Material.getMaterial(block.getTypeId());
-    	byte damage = 0;
     	if(player != null){
     	if(player != null){
     		if(Math.random() * 1000 <= mcUsers.getProfile(player).getWoodCuttingInt()){
     		if(Math.random() * 1000 <= mcUsers.getProfile(player).getWoodCuttingInt()){
-			ItemStack item = new ItemStack(mat, 1, type, damage);
+			ItemStack item = new ItemStack(mat, 1, (short) 0, type);
 			loc.getWorld().dropItemNaturally(loc, item);
 			loc.getWorld().dropItemNaturally(loc, item);
 			return;
 			return;
     		}
     		}
@@ -48,7 +47,7 @@ public class mcWoodCutting {
     			mcUsers.getProfile(player).setAxePreparationMode(false);
     			mcUsers.getProfile(player).setAxePreparationMode(false);
     			mcUsers.getProfile(player).setAxePreparationTicks(0);
     			mcUsers.getProfile(player).setAxePreparationTicks(0);
     		}
     		}
-    		int treefellticks = 3;
+    		int treefellticks = 2;
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 50)
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 50)
     			treefellticks++;
     			treefellticks++;
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 150)
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 150)

+ 29 - 3
mcMMO/com/gmail/nossr50/mcm.java

@@ -153,6 +153,13 @@ public class mcm {
     		return false;
     		return false;
     	}
     	}
     }
     }
+    public 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 boolean isAxes(ItemStack is){
     public boolean isAxes(ItemStack is){
     	if(is.getTypeId() == 271 || is.getTypeId() == 258 || is.getTypeId() == 286 || is.getTypeId() == 279 || is.getTypeId() == 275){
     	if(is.getTypeId() == 271 || is.getTypeId() == 258 || is.getTypeId() == 286 || is.getTypeId() == 279 || is.getTypeId() == 275){
     		return true;
     		return true;
@@ -171,7 +178,7 @@ public class mcm {
     	if(split[0].equalsIgnoreCase("/woodcutting")){
     	if(split[0].equalsIgnoreCase("/woodcutting")){
 			event.setCancelled(true);
 			event.setCancelled(true);
 			float skillvalue = (float)mcUsers.getProfile(player).getWoodCuttingInt();
 			float skillvalue = (float)mcUsers.getProfile(player).getWoodCuttingInt();
-			int treefellticks = 3;
+			int treefellticks = 2;
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 50)
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 50)
     			treefellticks++;
     			treefellticks++;
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 150)
     		if(mcUsers.getProfile(player).getWoodCuttingInt() >= 150)
@@ -235,7 +242,7 @@ public class mcm {
 			} else {
 			} else {
 				percentage = "75";
 				percentage = "75";
 			}
 			}
-			int ticks = 3;
+			int ticks = 2;
     		if(mcUsers.getProfile(player).getAxesInt() >= 50)
     		if(mcUsers.getProfile(player).getAxesInt() >= 50)
     			ticks++;
     			ticks++;
     		if(mcUsers.getProfile(player).getAxesInt() >= 150)
     		if(mcUsers.getProfile(player).getAxesInt() >= 150)
@@ -310,7 +317,7 @@ public class mcm {
     	if(split[0].equalsIgnoreCase("/mining")){
     	if(split[0].equalsIgnoreCase("/mining")){
     		float skillvalue = (float)mcUsers.getProfile(player).getMiningInt();
     		float skillvalue = (float)mcUsers.getProfile(player).getMiningInt();
     		String percentage = String.valueOf((skillvalue / 1000) * 100);
     		String percentage = String.valueOf((skillvalue / 1000) * 100);
-    		int miningticks = 3;
+    		int miningticks = 2;
     		if(mcUsers.getProfile(player).getMiningInt() >= 50)
     		if(mcUsers.getProfile(player).getMiningInt() >= 50)
     			miningticks++;
     			miningticks++;
     		if(mcUsers.getProfile(player).getMiningInt() >= 150)
     		if(mcUsers.getProfile(player).getMiningInt() >= 150)
@@ -428,10 +435,29 @@ public class mcm {
     	}
     	}
     	if(split[0].equalsIgnoreCase("/excavation")){
     	if(split[0].equalsIgnoreCase("/excavation")){
 			event.setCancelled(true);
 			event.setCancelled(true);
+			int ticks = 2;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 50)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 150)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 250)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 350)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 450)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 550)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 650)
+    			ticks++;
+    		if(mcUsers.getProfile(player).getExcavationInt() >= 750)
+    			ticks++;
 			player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"EXCAVATION"+ChatColor.RED+"[]-----");
 			player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"EXCAVATION"+ChatColor.RED+"[]-----");
 			player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Digging and finding treasures");
 			player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Digging and finding treasures");
 			player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---");
 			player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---");
+			player.sendMessage(ChatColor.DARK_AQUA+"Giga Drill Breaker (ABILITY): "+ChatColor.GREEN+"3x Drop Rate, 3x EXP, +Speed");
 			player.sendMessage(ChatColor.DARK_AQUA+"Treasure Hunter: "+ChatColor.GREEN+"Ability to dig for treasure");
 			player.sendMessage(ChatColor.DARK_AQUA+"Treasure Hunter: "+ChatColor.GREEN+"Ability to dig for treasure");
+			player.sendMessage(ChatColor.RED+"Giga Drill Breaker Length: "+ChatColor.YELLOW+(ticks * 2)+"s");
     	}
     	}
 		if(split[0].equalsIgnoreCase("/"+mcLoadProperties.mcmmo)){
 		if(split[0].equalsIgnoreCase("/"+mcLoadProperties.mcmmo)){
 			event.setCancelled(true);
 			event.setCancelled(true);