Fixed the bug with mmoedit and mcstats, reworked PlayerProfile hashmaps to

be stored by String instead of Player
This commit is contained in:
nossr50 2012-03-22 13:42:44 -07:00
parent 5ae15bfb71
commit 4377716474
2 changed files with 49 additions and 26 deletions

View File

@ -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, new PlayerProfile(player.getName()));
return players.get(player);
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(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);
}
/**

View File

@ -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)