فهرست منبع

Fixed the bug with mmoedit and mcstats, reworked PlayerProfile hashmaps to
be stored by String instead of Player

nossr50 13 سال پیش
والد
کامیت
4377716474
2فایلهای تغییر یافته به همراه49 افزوده شده و 26 حذف شده
  1. 29 23
      src/main/java/com/gmail/nossr50/Users.java
  2. 20 3
      src/main/java/com/gmail/nossr50/commands/general/MmoeditCommand.java

+ 29 - 23
src/main/java/com/gmail/nossr50/Users.java

@@ -15,7 +15,7 @@ public class Users {
     String directory = "plugins/mcMMO/FlatFileStuff/";
     String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/";
 
-    public static HashMap<Player, PlayerProfile> players = new HashMap<Player, PlayerProfile>();
+    public static HashMap<String, PlayerProfile> players = new HashMap<String, PlayerProfile>();
 
     /**
      * Load users.
@@ -42,8 +42,8 @@ public class Users {
      * @param player The player to create a user record for
      */
     public static void addUser(Player player) {
-        if (!players.containsKey(player)) {
-            players.put(player, new PlayerProfile(player.getName()));
+        if (!players.containsKey(player.getName().toLowerCase())) {
+            players.put(player.getName().toLowerCase(), new PlayerProfile(player.getName().toLowerCase()));
         }
     }
 
@@ -59,7 +59,7 @@ public class Users {
      *
      * @return a HashMap containing the PlayerProfile of everyone in the database
      */
-    public static HashMap<Player, PlayerProfile> getProfiles() {
+    public static HashMap<String, PlayerProfile> getProfiles() {
         return players;
     }
 
@@ -71,9 +71,9 @@ public class Users {
     public static void removeUser(Player player) {
 
         //Only remove PlayerProfile if user is offline and we have it in memory
-        if (!player.isOnline() && players.containsKey(player)) {
-            players.get(player).save();
-            players.remove(player);
+        if (!player.isOnline() && players.containsKey(player.getName().toLowerCase())) {
+            players.get(player.getName().toLowerCase()).save();
+            players.remove(player.getName().toLowerCase());
         }
     }
 
@@ -83,17 +83,7 @@ public class Users {
      * @param playerName The name of the player to remove
      */
     public static void removeUserByName(String playerName) {
-        Player target = null;
-
-        for (Player player : players.keySet()) {
-            PlayerProfile PP = players.get(player);
-
-            if (PP.getPlayerName().equals(playerName)) {
-                target = player;
-            }
-        }
-
-        players.remove(target);
+        players.remove(playerName.toLowerCase());
     }
 
     /**
@@ -103,12 +93,28 @@ public class Users {
      * @return the player's profile
      */
     public static PlayerProfile getProfile(Player player) {
-        if(players.get(player) != null) {
-            return players.get(player);
+        if(players.get(player.getName().toLowerCase()) != null) {
+            return players.get(player.getName().toLowerCase());
+        }
+        else {
+            players.put(player.getName().toLowerCase(), new PlayerProfile(player.getName().toLowerCase()));
+            return players.get(player.getName().toLowerCase());
+        }
+    }
+    
+    /**
+     * Get the profile of an online player.
+     *
+     * @param player The player whose profile to retrieve
+     * @return the player's profile
+     */
+    public static PlayerProfile getProfile(String playerName) {
+        if(players.get(playerName.toLowerCase()) != null) {
+            return players.get(playerName.toLowerCase());
         }
         else {
-            players.put(player, new PlayerProfile(player.getName()));
-            return players.get(player);
+            players.put(playerName.toLowerCase(), new PlayerProfile(playerName.toLowerCase()));
+            return players.get(playerName.toLowerCase());
         }
     }
 
@@ -119,7 +125,7 @@ public class Users {
      * @return the player's profile
      */
     public static PlayerProfile getOfflineProfile(String playerName) {
-        return new PlayerProfile(playerName, false);
+        return new PlayerProfile(playerName.toLowerCase(), false);
     }
 
     /**

+ 20 - 3
src/main/java/com/gmail/nossr50/commands/general/MmoeditCommand.java

@@ -1,5 +1,6 @@
 package com.gmail.nossr50.commands.general;
 
+import org.bukkit.Bukkit;
 import org.bukkit.ChatColor;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandExecutor;
@@ -42,7 +43,15 @@ public class MmoeditCommand implements CommandExecutor {
 				return true;
 			} else if (args.length == 3)
 			{
-			    PlayerProfile PPt = Users.getOfflineProfile(args[0]);
+			    PlayerProfile PPt = null;
+			    
+			    if(Users.players.containsKey(args[0].toLowerCase())) {
+			        PPt = Users.players.get(args[0].toLowerCase());
+			    }
+			    
+			    if(PPt == null)
+			        Users.getOfflineProfile(args[0]); //Only grab offline profile if the above failed
+			        
 			    if(!PPt.isLoaded())
 		        {
 		            sender.sendMessage("Player does not exist in the database!");
@@ -76,7 +85,15 @@ public class MmoeditCommand implements CommandExecutor {
 		}
 		if (args.length == 3) 
 		{
-		    PlayerProfile PPt = Users.getOfflineProfile(args[0]);
+		    PlayerProfile PPt = null;
+            
+            if(Users.players.containsKey(args[0].toLowerCase())) {
+                PPt = Users.players.get(args[0].toLowerCase());
+            }
+            
+            if(PPt == null)
+                Users.getOfflineProfile(args[0]); //Only grab offline profile if the above failed
+            
 		    if(!PPt.isLoaded())
 	        {
 	            sender.sendMessage("Player does not exist in the database!");
@@ -86,7 +103,7 @@ public class MmoeditCommand implements CommandExecutor {
 			if (m.isInt(args[2]) && Skills.isSkill(args[1])) 
 			{
 				int newvalue = Integer.valueOf(args[2]);
-				Users.getOfflineProfile(args[0]).modifyskill(Skills.getSkillType(args[1]), newvalue);
+				PPt.modifyskill(Skills.getSkillType(args[1]), newvalue);
 				player.sendMessage(ChatColor.RED + args[1] + " has been modified for "+args[0]);
 			}
 		} else if (args.length == 2)