nossr50 14 年之前
父节点
当前提交
f9c941af6e

+ 1 - 0
mcMMO/Changelog.txt

@@ -1,6 +1,7 @@
 Changelog:
 #Versions without changelogs probably had very small misc fixes, like tweaks to the source code#
 Version 1.0
+Fixed duping bug with WG/Block Protection Plugins
 Added Leaf Blower to WoodCutting
 Different Trees give different WoodCutting XP
 Water changing Gravel to Clay removed

+ 19 - 7
mcMMO/com/gmail/nossr50/Combat.java

@@ -3,6 +3,7 @@ package com.gmail.nossr50;
 import org.bukkit.ChatColor;
 import org.bukkit.Location;
 import org.bukkit.entity.Animals;
+import org.bukkit.entity.Creature;
 import org.bukkit.entity.Creeper;
 import org.bukkit.entity.Entity;
 import org.bukkit.entity.Monster;
@@ -125,6 +126,7 @@ public class Combat {
 	      				attacker.sendMessage(ChatColor.DARK_GREEN+"The Beast's Master : "+Taming.getOwnerName(event.getEntity()));
 	      			else
 	      				attacker.sendMessage(ChatColor.GRAY+"This Beast has no Master...");
+	      			attacker.sendMessage(ChatColor.GREEN+"This beast has "+((Wolf)event.getEntity()).getHealth()+" Health");
 	      			event.setCancelled(true);
       			}
       		}
@@ -132,9 +134,16 @@ public class Combat {
 		/*
 		 * OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
 		 */
-		if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf){
+		if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf)
+		{
+			//DEBUG STUFF
+			for(Player x : pluginx.getServer().getOnlinePlayers())
+			{
+				x.sendMessage("Wolf Versus Entity Triggered");
+			}
 			EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
-			if(Taming.hasOwner(eventb.getDamager(), pluginx)){
+			if(Taming.hasOwner(eventb.getDamager(), pluginx))
+			{
 				Player master = Taming.getOwner(eventb.getDamager(), pluginx);
 				PlayerProfile PPo = Users.getProfile(master);
 				
@@ -160,9 +169,6 @@ public class Combat {
 					
 					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
@@ -188,16 +194,22 @@ public class Combat {
 				Player master = Taming.getOwner(event.getEntity(), pluginx);
 				PlayerProfile PPo = Users.getProfile(master);
 				
+				/*
+				 * TEMPORARY FIX AS WOLVES AREN'T TRIGGERING DAMAGE EVENTS WHEN ATTACKING NON PLAYERS AT THE TIME OF WRITING
+				 */
+				PPo.addTamingXP(event.getDamage() * 3);
+				Skills.XpCheck(master);
+				
 				//Shock-Proof
 				if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getTamingInt() >= 500)
 				{
-					event.setDamage(event.getDamage() / 6);
+					event.setDamage(2);
 				}
 				
 				//Thick Fur
 				if(PPo.getTamingInt() >= 250)
 					event.setDamage(event.getDamage() / 2);
-				master.sendMessage("mcMMO Debug: Wolf Damage Taken "+event.getDamage());
+					master.sendMessage("mcMMO Debug: Wolf Damage Taken "+event.getDamage());
 			}
 		}
 	}

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

@@ -41,7 +41,7 @@ public class Database {
 	//Create the DB structure
 	public void createStructure(){
 		Write("CREATE TABLE IF NOT EXISTS `"+LoadProperties.MySQLtablePrefix+"users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT," +
-				"`user` varchar(30) NOT NULL," +
+				"`user` varchar(40) NOT NULL," +
 				"`lastlogin` int(32) unsigned NOT NULL," +
 				"`party` varchar(100) NOT NULL DEFAULT ''," +
 				"PRIMARY KEY (`id`)," +
@@ -106,8 +106,10 @@ public class Database {
 		    if (stmt.executeQuery() != null) {
 		    	stmt.executeQuery();
 		        rs = stmt.getResultSet();
-		        rs.next();
-		        result = rs.getInt(1);
+		        if(rs.next()){
+		        	result = rs.getInt(1);
+		        }
+		        else { result = 0; }
 		    }
 		} 
 		catch (SQLException ex) {

+ 4 - 0
mcMMO/com/gmail/nossr50/Users.java

@@ -70,6 +70,10 @@ public class Users {
     public static void addUser(Player player){
     	players.put(player, new PlayerProfile(player));
     }
+    public static void clearUsers()
+    {
+    	players.clear();
+    }
 
 
     public static void removeUser(Player player){    	

+ 6 - 5
mcMMO/com/gmail/nossr50/datatypes/PlayerProfile.java

@@ -81,8 +81,8 @@ public class PlayerProfile
 				myspawn = spawn.get(1).get(1) + "," + spawn.get(1).get(2) + "," + spawn.get(1).get(3);				
 			HashMap<Integer, ArrayList<String>> skills = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics FROM "+LoadProperties.MySQLtablePrefix+"skills WHERE user_id = " + id);
 				taming = skills.get(1).get(0);
-				mining = skills.get(1).get(1);;
-				repair = skills.get(1).get(2);;
+				mining = skills.get(1).get(1);
+				repair = skills.get(1).get(2);
 				woodcutting = skills.get(1).get(3);
 				unarmed = skills.get(1).get(4);
 				herbalism = skills.get(1).get(5);
@@ -93,8 +93,8 @@ public class PlayerProfile
 				acrobatics = skills.get(1).get(10);
 			HashMap<Integer, ArrayList<String>> experience = mcMMO.database.Read("SELECT taming, mining, repair, woodcutting, unarmed, herbalism, excavation, archery, swords, axes, acrobatics FROM "+LoadProperties.MySQLtablePrefix+"experience WHERE user_id = " + id);
 				tamingXP = experience.get(1).get(0);
-				miningXP = experience.get(1).get(1);;
-				repairXP = experience.get(1).get(2);;
+				miningXP = experience.get(1).get(1);
+				repairXP = experience.get(1).get(2);
 				woodCuttingXP = experience.get(1).get(3);
 				unarmedXP = experience.get(1).get(4);
 				herbalismXP = experience.get(1).get(5);
@@ -204,6 +204,7 @@ public class PlayerProfile
     	// if we are using mysql save to database
     	if (LoadProperties.useMySQL) {
     		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET lastlogin = " + timestamp.intValue() + " WHERE id = " + this.userid);
+    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET party = '"+this.party+"' WHERE id = " +this.userid);
     		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + this.myspawnworld + "', x = " +getX()+", y = "+getY()+", z = "+getZ()+" WHERE user_id = "+this.userid);
     		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"skills SET "
     				+"  taming = "+taming
@@ -1263,7 +1264,7 @@ public class PlayerProfile
 	}
 	public boolean isDouble(String string){
 		try {
-		    //Double x = Double.valueOf(string);
+		    Double x = Double.valueOf(string);
 		}
 		catch(NumberFormatException nFE) {
 		    return false;

+ 219 - 6
mcMMO/com/gmail/nossr50/m.java

@@ -4,6 +4,9 @@ import java.io.BufferedReader;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 import org.bukkit.ChatColor;
 import org.bukkit.Location;
 import org.bukkit.Material;
@@ -20,16 +23,48 @@ import com.gmail.nossr50.skills.*;
 import com.gmail.nossr50.party.*;
 import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.datatypes.FakeBlockBreakEvent;
-
 public class m {
+	public static final Logger log = Logger.getLogger("Minecraft");
 	/*
-	 * I'm storing my functions/methods in here in an unorganized manner. Spheal with it.
+	 * I'm storing my misc functions/methods in here in an unorganized manner. Spheal with it.
 	 */
 	private static mcMMO plugin;
 	public m(mcMMO instance) {
     	plugin = instance;
     }
-	
+	//The lazy way to default to 0
+	public static int getInt(String string)
+	{
+		if(isInt(string))
+		{
+			return Integer.valueOf(string);
+		}
+		else
+		{
+			return 0;
+		}
+	}
+	public static Double getDouble(String string)
+	{
+		if(isDouble(string))
+		{
+			return Double.valueOf(string);
+		}
+		else
+		{
+			return (double) 0;
+		}
+	}
+	public static boolean isDouble(String string)
+	{
+		try {
+		    Double x = Double.valueOf(string);
+		}
+		catch(NumberFormatException nFE) {
+		    return false;
+		}
+		return true;
+	}
 	public static boolean shouldBeWatched(Block block){
 		int id = block.getTypeId();
 		if(id == 49 || id == 81 || id == 83 || id == 86 || id == 91 || id == 1 || id == 17 || id == 42 || id == 87 || id == 89 || id == 2 || id == 3 || id == 12 || id == 13 || id == 21 || id == 15 || id == 14 || id == 56 || id == 38 || id == 37 || id == 39 || id == 40 || id == 24){
@@ -300,6 +335,180 @@ public class m {
     		return false;
     	}
     }
+    public static void convertToMySQL(Plugin pluginx)
+    {
+    	if(!LoadProperties.useMySQL)
+    		return;
+    	String location = "plugins/mcMMO/mcmmo.users";
+    	try {
+        	//Open the user file
+        	FileReader file = new FileReader(location);
+        	BufferedReader in = new BufferedReader(file);
+        	String line = "";
+        	String x = null, y = null, z = null, playerName = null, mining = null, myspawn = null, party = null, miningXP = null, woodcutting = null, woodCuttingXP = null, repair = null, unarmed = null, herbalism = null,
+        	excavation = null, archery = null, swords = null, axes = null, acrobatics = null, repairXP = null, unarmedXP = null, herbalismXP = null, excavationXP = null, archeryXP = null, swordsXP = null, axesXP = null,
+        	acrobaticsXP = null, myspawnworld = null, taming = null, tamingXP = null;
+        	int id = 0;
+        	while((line = in.readLine()) != null)
+        	{
+        		//Find if the line contains the player we want.
+        		String[] character = line.split(":");
+        		playerName = character[0];
+        		if(playerName == null)
+        			continue;
+        		
+    			//Get Mining
+    			if(character.length > 1)
+    				mining = character[1];
+    			//Myspawn
+    			if(character.length > 2)
+    				myspawn = character[2];
+    			//Party
+    			if(character.length > 3)
+    				party = character[3];
+    			//Mining XP
+    			if(character.length > 4)
+    				miningXP = character[4];
+    			if(character.length > 5)
+    				woodcutting = character[5];
+    			if(character.length > 6)
+    				woodCuttingXP = character[6];
+    			if(character.length > 7)
+    				repair = character[7];
+    			if(character.length > 8)
+    				unarmed = character[8];
+    			if(character.length > 9)
+    				herbalism = character[9];
+    			if(character.length > 10)
+    				excavation = character[10];
+    			if(character.length > 11)
+    				archery = character[11];
+    			if(character.length > 12)
+    				swords = character[12];
+    			if(character.length > 13)
+    				axes = character[13];
+    			if(character.length > 14)
+    				acrobatics = character[14];
+    			if(character.length > 15)
+    				repairXP = character[15];
+    			if(character.length > 16)
+    				unarmedXP = character[16];
+    			if(character.length > 17)
+    				herbalismXP = character[17];
+    			if(character.length > 18)
+    				excavationXP = character[18];
+    			if(character.length > 19)
+    				archeryXP = character[19];
+    			if(character.length > 20)
+    				swordsXP = character[20];
+    			if(character.length > 21)
+    				axesXP = character[21];
+    			if(character.length > 22)
+    				acrobaticsXP = character[22];
+    			if(character.length > 23)
+    				myspawnworld = character[23];
+    			if(character.length > 24)
+    				taming = character[24];
+    			if(character.length > 25)
+    				tamingXP = character[25];
+            	//Check to see if the user is in the DB
+    			id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'");
+    			//Prepare some variables
+    			/*
+    			if(myspawn != null && myspawn.length() > 0)
+    			{
+    				String[] split = myspawn.split(",");
+    				x = split[0];
+    				y = split[1];
+    				z = split[2];
+    			}
+    			*/
+    			/*
+    		    if(myspawnworld.equals("") || myspawnworld == null)
+    		    	myspawnworld = pluginx.getServer().getWorlds().get(0).toString();
+    		    */
+    			if(id > 0)
+    			{
+    				//Update the skill values
+    				mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET lastlogin = " + 0 + " WHERE id = " + id);
+    				//if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
+    					//mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
+    	    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"skills SET "
+    	    				+"  taming = taming+"+getInt(taming)
+    	    				+", mining = mining+"+getInt(mining)
+    	    				+", repair = repair+"+getInt(repair)
+    	    				+", woodcutting = woodcutting+"+getInt(woodcutting)
+    	    				+", unarmed = unarmed+"+getInt(unarmed)
+    	    				+", herbalism = herbalism+"+getInt(herbalism)
+    	    				+", excavation = excavation+"+getInt(excavation)
+    	    				+", archery = archery+" +getInt(archery)
+    	    				+", swords = swords+" +getInt(swords)
+    	    				+", axes = axes+"+getInt(axes)
+    	    				+", acrobatics = acrobatics+"+getInt(acrobatics)
+    	    				+" WHERE user_id = "+id);
+    	    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"experience SET "
+    	    				+"  taming = "+getInt(tamingXP)
+    	    				+", mining = "+getInt(miningXP)
+    	    				+", repair = "+getInt(repairXP)
+    	    				+", woodcutting = "+getInt(woodCuttingXP)
+    	    				+", unarmed = "+getInt(unarmedXP)
+    	    				+", herbalism = "+getInt(herbalismXP)
+    	    				+", excavation = "+getInt(excavationXP)
+    	    				+", archery = " +getInt(archeryXP)
+    	    				+", swords = " +getInt(swordsXP)
+    	    				+", axes = "+getInt(axesXP)
+    	    				+", acrobatics = "+getInt(acrobaticsXP)
+    	    				+" WHERE user_id = "+id);
+    			}
+    			else
+    			{
+    				//Create the user in the DB
+    				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"users (user, lastlogin) VALUES ('" + playerName + "'," + System.currentTimeMillis() / 1000 +")");
+    				id = mcMMO.database.GetInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'");
+    				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"spawn (user_id) VALUES ("+id+")");
+    				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"skills (user_id) VALUES ("+id+")");
+    				mcMMO.database.Write("INSERT INTO "+LoadProperties.MySQLtablePrefix+"experience (user_id) VALUES ("+id+")");
+    				//Update the skill values
+    				mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET lastlogin = " + 0 + " WHERE id = " + id);
+    				mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"users SET party = '"+party+"' WHERE id = " +id);
+    				/*
+    				if(getDouble(x) > 0 && getDouble(y) > 0 && getDouble(z) > 0)
+    					mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"spawn SET world = '" + myspawnworld + "', x = " +getDouble(x)+", y = "+getDouble(y)+", z = "+getDouble(z)+" WHERE user_id = "+id);
+    	    		*/
+    	    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"skills SET "
+    	    				+"  taming = "+getInt(taming)
+    	    				+", mining = "+getInt(mining)
+    	    				+", repair = "+getInt(repair)
+    	    				+", woodcutting = "+getInt(woodcutting)
+    	    				+", unarmed = "+getInt(unarmed)
+    	    				+", herbalism = "+getInt(herbalism)
+    	    				+", excavation = "+getInt(excavation)
+    	    				+", archery = " +getInt(archery)
+    	    				+", swords = " +getInt(swords)
+    	    				+", axes = "+getInt(axes)
+    	    				+", acrobatics = "+getInt(acrobatics)
+    	    				+" WHERE user_id = "+id);
+    	    		mcMMO.database.Write("UPDATE "+LoadProperties.MySQLtablePrefix+"experience SET "
+    	    				+"  taming = "+getInt(tamingXP)
+    	    				+", mining = "+getInt(miningXP)
+    	    				+", repair = "+getInt(repairXP)
+    	    				+", woodcutting = "+getInt(woodCuttingXP)
+    	    				+", unarmed = "+getInt(unarmedXP)
+    	    				+", herbalism = "+getInt(herbalismXP)
+    	    				+", excavation = "+getInt(excavationXP)
+    	    				+", archery = " +getInt(archeryXP)
+    	    				+", swords = " +getInt(swordsXP)
+    	    				+", axes = "+getInt(axesXP)
+    	    				+", acrobatics = "+getInt(acrobaticsXP)
+    	    				+" WHERE user_id = "+id);
+    			}
+        	}
+        	in.close();
+        } catch (Exception e) {
+            log.log(Level.SEVERE, "Exception while reading "
+            		+ location + " (Are you sure you formatted it correctly?)", e);
+        }
+    }
     public static void mmoHelpCheck(String[] split, Player player, PlayerChatEvent event){
     	PlayerProfile PP = Users.getProfile(player);
     	if(split[0].equalsIgnoreCase("/taming")){
@@ -310,16 +519,20 @@ public class m {
 			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+"Environmentally Aware: "+ChatColor.YELLOW+ChatColor.GREEN+"Cactus/Lava Phobia, Fall DMG Immune");
+			player.sendMessage(ChatColor.DARK_AQUA+"Thick Fur: "+ChatColor.YELLOW+ChatColor.GREEN+"DMG Reduction, Fire Resistance");
 			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() < 100)
+				player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 100+ SKILL (ENVIRONMENTALLY AWARE)");
+			else
+				player.sendMessage(ChatColor.RED+"Environmentally Aware: "+ChatColor.YELLOW+"Wolves avoid danger");
 			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");
+				player.sendMessage(ChatColor.RED+"Thick Fur: "+ChatColor.YELLOW+"Halved Damage, Fire Resistance");
 			if(PP.getTamingInt() < 500)
 				player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 500+ SKILL (SHOCK PROOF)");
 			else

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

@@ -49,7 +49,7 @@ public class mcEntityListener extends EntityListener {
     }
     public void onEntityDamage(EntityDamageEvent event) {
     	if(event.isCancelled())
-    		return;
+    		return;		
     	/*
     	 * CHECK FOR INVULNERABILITY
     	 */
@@ -71,6 +71,34 @@ public class mcEntityListener extends EntityListener {
 		    	{
 			    	Entity x = event.getEntity();
 			    	DamageCause type = event.getCause();
+			    	if(event.getEntity() instanceof Wolf)
+			    	{
+				    	Player master = Taming.getOwner(event.getEntity(), plugin);
+				    	PlayerProfile PPo = Users.getProfile(master);
+				    	if(master == null || PPo == null)
+				    		return;
+			    		//Environmentally Aware
+						if((event.getCause() == DamageCause.CONTACT || event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.FIRE) && PPo.getTamingInt() >= 100)
+						{
+							if(event.getDamage() < ((Wolf) event.getEntity()).getHealth())
+							{
+								event.getEntity().teleport(Taming.getOwner(event.getEntity(), plugin).getLocation());
+								master.sendMessage(ChatColor.DARK_GRAY+"Your wolf scurries back to you...");
+								event.getEntity().setFireTicks(0);
+							}
+						}
+						if(event.getCause() == DamageCause.FALL && PPo.getTamingInt() >= 100)
+						{
+							event.setCancelled(true);
+						}
+						
+						//Thick Fur
+						if(event.getCause() == DamageCause.FIRE_TICK)
+						{
+							event.getEntity().setFireTicks(0);
+						}
+			    	}
+			    	
 			    	/*
 			    	 * ACROBATICS
 			    	 */

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

@@ -30,6 +30,13 @@ public class mcPermissions {
     private static boolean permission(Player player, String string) {
         return permissionsPlugin.Security.permission(player, string);  
     }
+    public boolean admin(Player player){
+    	if (permissionsEnabled) {
+            return permission(player, "mcmmo.admin");
+        } else {
+            return true;
+        }
+    }
     public boolean mcrefresh(Player player) {
         if (permissionsEnabled) {
             return permission(player, "mcmmo.tools.mcrefresh");

+ 17 - 3
mcMMO/com/gmail/nossr50/mcPlayerListener.java

@@ -213,6 +213,18 @@ public class mcPlayerListener extends PlayerListener {
     		player.sendMessage("Type ID : "+player.getItemInHand().getTypeId());
     		player.sendMessage("Byte Data : "+player.getItemInHand().getDurability());
     	}
+    	if(split[0].equalsIgnoreCase("/mmoupdate") && mcPermissions.getInstance().admin(player))
+    	{
+    		event.setCancelled(true);
+    		player.sendMessage(ChatColor.GRAY+"Starting conversion...");
+    		Users.clearUsers();
+    		m.convertToMySQL(plugin);
+    		for(Player x : plugin.getServer().getOnlinePlayers())
+    		{
+    			Users.addUser(x);
+    		}
+    		player.sendMessage(ChatColor.GREEN+"Conversion finished!");
+    	}
     	/*
     	 * LEADER BOARD COMMAND
     	 */
@@ -336,7 +348,7 @@ public class mcPlayerListener extends PlayerListener {
 	    	        	
 	    	        	for(int i=n;i<=n+10;i++)
     	    			{
-    	    				if (i >= userslist.size())
+    	    				if (i > userslist.size())
     	    					break;
 	    	        		HashMap<Integer, ArrayList<String>> username =  mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
     	    				player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
@@ -348,6 +360,8 @@ public class mcPlayerListener extends PlayerListener {
 	    					+LoadProperties.MySQLtablePrefix+"skills ORDER BY `"+LoadProperties.MySQLtablePrefix+"skills`.`"+lowercase+"` DESC ");
 	    	        for(int i=1;i<=10;i++) //i<=userslist.size()
 	    			{
+	    	        	if (i > userslist.size())
+	    					break;
 	    				HashMap<Integer, ArrayList<String>> username =  mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
 	    				player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
 	    			}
@@ -371,7 +385,7 @@ public class mcPlayerListener extends PlayerListener {
 		    					+LoadProperties.MySQLtablePrefix+"skills ORDER BY taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics DESC ");
 	    	        	for(int i=n;i<=n+10;i++)
     	    			{
-	    	        		if (i >= userslist.size())
+	    	        		if (i > userslist.size())
     	    					break;
 	    	        		HashMap<Integer, ArrayList<String>> username =  mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
     	    				player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
@@ -382,7 +396,7 @@ public class mcPlayerListener extends PlayerListener {
 	    					+LoadProperties.MySQLtablePrefix+"skills ORDER BY taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics DESC ");
 	    			for(int i=1;i<=10;i++)
 	    			{
-	    				if (i >= userslist.size())
+	    				if (i > userslist.size())
 	    					break;
 	    				HashMap<Integer, ArrayList<String>> username =  mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
 	    				player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));