From a3943aab241cf45506a0e81d2d4928e5b39abe28 Mon Sep 17 00:00:00 2001 From: TfT_02 Date: Tue, 19 Aug 2014 22:23:19 -0600 Subject: [PATCH] Add checks for loaded/unloaded profiles in commands --- .../gmail/nossr50/commands/KrakenCommand.java | 4 ++++ .../nossr50/commands/MobhealthCommand.java | 4 ++++ .../gmail/nossr50/commands/ToggleCommand.java | 4 ++++ .../nossr50/commands/chat/ChatCommand.java | 8 +++++++ .../nossr50/commands/party/PartyCommand.java | 5 ++++ .../commands/party/teleport/PtpCommand.java | 5 ++++ .../commands/player/InspectCommand.java | 4 ++++ .../commands/player/MccooldownCommand.java | 4 ++++ .../commands/player/McrankCommand.java | 10 +++++++- .../commands/player/McstatsCommand.java | 4 ++++ .../nossr50/commands/player/MctopCommand.java | 4 ++++ .../nossr50/commands/skills/SkillCommand.java | 4 ++++ .../nossr50/util/commands/CommandUtils.java | 23 +++++++++++++++++++ .../resources/locale/locale_en_US.properties | 1 + 14 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gmail/nossr50/commands/KrakenCommand.java b/src/main/java/com/gmail/nossr50/commands/KrakenCommand.java index 177f90505..8bf421020 100644 --- a/src/main/java/com/gmail/nossr50/commands/KrakenCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/KrakenCommand.java @@ -29,6 +29,10 @@ public class KrakenCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + UserManager.getPlayer(sender.getName()).getFishingManager().unleashTheKraken(); return true; diff --git a/src/main/java/com/gmail/nossr50/commands/MobhealthCommand.java b/src/main/java/com/gmail/nossr50/commands/MobhealthCommand.java index a1aa8ebed..8e22a544a 100644 --- a/src/main/java/com/gmail/nossr50/commands/MobhealthCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/MobhealthCommand.java @@ -37,6 +37,10 @@ public class MobhealthCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + switch (args.length) { case 1: try { diff --git a/src/main/java/com/gmail/nossr50/commands/ToggleCommand.java b/src/main/java/com/gmail/nossr50/commands/ToggleCommand.java index 2835d39b7..94735d834 100644 --- a/src/main/java/com/gmail/nossr50/commands/ToggleCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/ToggleCommand.java @@ -28,6 +28,10 @@ public abstract class ToggleCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + applyCommandAction(UserManager.getPlayer(sender.getName())); return true; diff --git a/src/main/java/com/gmail/nossr50/commands/chat/ChatCommand.java b/src/main/java/com/gmail/nossr50/commands/chat/ChatCommand.java index 74022fca3..9266d435d 100644 --- a/src/main/java/com/gmail/nossr50/commands/chat/ChatCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/chat/ChatCommand.java @@ -41,6 +41,10 @@ public abstract class ChatCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + mcMMOPlayer = UserManager.getPlayer(sender.getName()); if (mcMMOPlayer.isChatEnabled(chatMode)) { @@ -53,6 +57,10 @@ public abstract class ChatCommand implements TabExecutor { return true; case 1: + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + if (CommandUtils.shouldEnableToggle(args[0])) { if (CommandUtils.noConsoleUsage(sender)) { return true; diff --git a/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java b/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java index ce4d641ae..c90889113 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/PartyCommand.java @@ -71,6 +71,11 @@ public class PartyCommand implements TabExecutor { } Player player = (Player) sender; + + if (!UserManager.hasPlayerDataKey(player)) { + return true; + } + McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); if (args.length < 1) { diff --git a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java index 7011834e7..2eaee4153 100644 --- a/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java @@ -42,6 +42,11 @@ public class PtpCommand implements TabExecutor { } Player player = (Player) sender; + + if (!UserManager.hasPlayerDataKey(player)) { + return true; + } + McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); if (!mcMMOPlayer.inParty()) { diff --git a/src/main/java/com/gmail/nossr50/commands/player/InspectCommand.java b/src/main/java/com/gmail/nossr50/commands/player/InspectCommand.java index 50b400460..78c19d907 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/InspectCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/InspectCommand.java @@ -34,6 +34,10 @@ public class InspectCommand implements TabExecutor { if (mcMMOPlayer == null) { PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false); // Temporary Profile + if (!CommandUtils.isLoaded(sender, profile)) { + return true; + } + if (CommandUtils.inspectOffline(sender, profile, Permissions.inspectOffline(sender))) { return true; } diff --git a/src/main/java/com/gmail/nossr50/commands/player/MccooldownCommand.java b/src/main/java/com/gmail/nossr50/commands/player/MccooldownCommand.java index 8ce37fe61..e55159901 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/MccooldownCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/MccooldownCommand.java @@ -24,6 +24,10 @@ public class MccooldownCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + switch (args.length) { case 0: Player player = (Player) sender; diff --git a/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java b/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java index e771c24a0..38a554512 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java @@ -8,7 +8,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.metadata.MetadataValue; import org.bukkit.util.StringUtil; import com.gmail.nossr50.mcMMO; @@ -19,6 +18,7 @@ import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.commands.CommandUtils; import com.gmail.nossr50.util.player.UserManager; + import com.google.common.collect.ImmutableList; public class McrankCommand implements TabExecutor { @@ -35,6 +35,10 @@ public class McrankCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + display(sender, sender.getName()); return true; @@ -45,6 +49,10 @@ public class McrankCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + String playerName = CommandUtils.getMatchedPlayerName(args[0]); McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName); diff --git a/src/main/java/com/gmail/nossr50/commands/player/McstatsCommand.java b/src/main/java/com/gmail/nossr50/commands/player/McstatsCommand.java index d94884874..1184fc87e 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/McstatsCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/McstatsCommand.java @@ -22,6 +22,10 @@ public class McstatsCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + switch (args.length) { case 0: Player player = (Player) sender; diff --git a/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java b/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java index ba415257b..becca971a 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java @@ -83,6 +83,10 @@ public class MctopCommand implements TabExecutor { } if (sender instanceof Player) { + if (!CommandUtils.hasPlayerDataKey(sender)) { + return; + } + McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName()); long cooldownMillis = Math.max(Config.getInstance().getDatabasePlayerCooldown(), 1750); diff --git a/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java index e5d412487..44c31af07 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java @@ -48,6 +48,10 @@ public abstract class SkillCommand implements TabExecutor { return true; } + if (!CommandUtils.hasPlayerDataKey(sender)) { + return true; + } + switch (args.length) { case 0: Player player = (Player) sender; diff --git a/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java b/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java index ec6b085b9..76dd50bdf 100644 --- a/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java +++ b/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java @@ -116,6 +116,29 @@ public final class CommandUtils { return true; } + public static boolean hasPlayerDataKey(CommandSender sender) { + if (sender == null || !(sender instanceof Player)) { + return false; + } + + boolean hasPlayerDataKey = ((Player) sender).hasMetadata(mcMMO.playerDataKey); + + if (!hasPlayerDataKey) { + sender.sendMessage(LocaleLoader.getString("Commands.NotLoaded")); + } + + return hasPlayerDataKey; + } + + public static boolean isLoaded(CommandSender sender, PlayerProfile profile) { + if (profile.isLoaded()) { + return true; + } + + sender.sendMessage(LocaleLoader.getString("Commands.NotLoaded")); + return false; + } + public static boolean isInvalidInteger(CommandSender sender, String value) { if (StringUtils.isInt(value)) { return false; diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 9c9e0674d..8f7e8fc6a 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -498,6 +498,7 @@ Commands.NoConsole=This command does not support console usage. Commands.Notifications.Off=Ability notifications toggled [[RED]]off Commands.Notifications.On=Ability notifications toggled [[GREEN]]on Commands.Offline=[[RED]]This command does not work for offline players. +Commands.NotLoaded=[[RED]]Player profile is not loaded yet. Commands.Other=[[RED]]---[][[GREEN]]OTHER COMMANDS[[RED]][]--- Commands.Party.Header=[[RED]]-----[][[GREEN]]PARTY[[RED]][]----- Commands.Party.Features.Header=[[RED]]-----[][[GREEN]]FEATURES[[RED]][]-----