* Make /quest stats offline player compatible

This commit is contained in:
PikachuEXE 2015-04-10 09:16:18 +08:00
parent ec074573a7
commit 150e524855

View File

@ -15,6 +15,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.apache.commons.lang.Validate;
import me.blackvein.quests.exceptions.InvalidStageException; import me.blackvein.quests.exceptions.InvalidStageException;
import me.blackvein.quests.prompts.QuestAcceptPrompt; import me.blackvein.quests.prompts.QuestAcceptPrompt;
@ -38,6 +39,7 @@ import org.bukkit.DyeColor;
import org.bukkit.Effect; import org.bukkit.Effect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -1572,15 +1574,17 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener,
return; return;
} }
Player target_online_player = PlayerFinder.findOnlinePlayerByPartialCaseInsensitiveNameMatch(args[1]); OfflinePlayer target_offline_player = PlayerFinder.findOfflinePlayerWithNameByExactCaseInsensitiveNameMatch(args[1]);
// Reject usage without matching online player // According to CraftBukkit implementation, OfflinePlayer#getName could be null,
if (target_online_player == null) { // meaning the player has NOT been seen on current server
// To avoid displaying stats with name `null`, we consider this as player not found
if (target_offline_player == null) {
cs.sendMessage(YELLOW + Lang.get("playerNotFound")); cs.sendMessage(YELLOW + Lang.get("playerNotFound"));
return; return;
} }
questsStats(target_online_player, cs); questsStats(target_offline_player, cs);
} }
private void adminRemoveCompletedQuest(final CommandSender cs, String[] args) { private void adminRemoveCompletedQuest(final CommandSender cs, String[] args) {
@ -1808,18 +1812,16 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener,
} }
private void questsStats(final Player player) { private void questsStats(final Player player) {
questsStats(player, null); Validate.notNull(player);
questsStats(player, player);
} }
private void questsStats(final Player player, final CommandSender customMessageTarget) { private void questsStats(final OfflinePlayer offlinePlayer, final CommandSender messageTarget) {
Validate.notNull(offlinePlayer);
Validate.notNull(messageTarget);
CommandSender messageTarget = player; Quester quester = getQuester(offlinePlayer.getUniqueId());
if (customMessageTarget != null) { messageTarget.sendMessage(GOLD + "- " + offlinePlayer.getName() + " -");
messageTarget = customMessageTarget;
}
Quester quester = getQuester(player.getUniqueId());
messageTarget.sendMessage(GOLD + "- " + player.getName() + " -");
messageTarget.sendMessage(YELLOW + Lang.get("questPointsDisplay") + " " + PURPLE + quester.questPoints + "/" + totalQuestPoints); messageTarget.sendMessage(YELLOW + Lang.get("questPointsDisplay") + " " + PURPLE + quester.questPoints + "/" + totalQuestPoints);
if (quester.currentQuests.isEmpty()) { if (quester.currentQuests.isEmpty()) {
messageTarget.sendMessage(YELLOW + Lang.get("currentQuest") + " " + PURPLE + Lang.get("none")); messageTarget.sendMessage(YELLOW + Lang.get("currentQuest") + " " + PURPLE + Lang.get("none"));