diff --git a/Changelog.txt b/Changelog.txt index abede221e..98c5994af 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,11 @@ Version 2.1.177 Environmentally aware will now protect Wolves from Magma blocks Fixed a bug where mcMMO would fail to update a players name when it detected a name change + mcMMO will treat vanished players as if they are offline when using the inspect command on them now (see notes) + + NOTES: + A few changes were made to the inspect command, it used to reject you when used on vanished players, now it will be processed as if they are offline. + Additionally if you do inspect a vanished player, it will not use their display name (consistent with offline players) as that would give them away for being online Version 2.1.176 Another fix for Double Smelt bringing item stack size to illegal values 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 3e54ffa8b..a65fa1cf2 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/InspectCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/InspectCommand.java @@ -36,7 +36,9 @@ public class InspectCommand implements TabExecutor { return true; } - if (Config.getInstance().getScoreboardsEnabled() && sender instanceof Player && Config.getInstance().getInspectUseBoard()) { + if (Config.getInstance().getScoreboardsEnabled() + && sender instanceof Player + && Config.getInstance().getInspectUseBoard()) { ScoreboardManager.enablePlayerInspectScoreboard((Player) sender, profile); if (!Config.getInstance().getInspectUseChat()) { @@ -63,16 +65,21 @@ public class InspectCommand implements TabExecutor { } else { Player target = mcMMOPlayer.getPlayer(); + boolean isVanished = false; if (CommandUtils.hidden(sender, target, Permissions.inspectHidden(sender))) { - sender.sendMessage(LocaleLoader.getString("Inspect.Offline")); - return true; - } else if (CommandUtils.tooFar(sender, target, Permissions.inspectFar(sender))) { + isVanished = true; + } + + //Only distance check players who are online and not vanished + if (!isVanished && CommandUtils.tooFar(sender, target, Permissions.inspectFar(sender))) { return true; } - if (Config.getInstance().getScoreboardsEnabled() && sender instanceof Player && Config.getInstance().getInspectUseBoard()) { - ScoreboardManager.enablePlayerInspectScoreboard((Player) sender, mcMMOPlayer.getProfile()); + if (Config.getInstance().getScoreboardsEnabled() + && sender instanceof Player + && Config.getInstance().getInspectUseBoard()) { + ScoreboardManager.enablePlayerInspectScoreboard((Player) sender, mcMMOPlayer); if (!Config.getInstance().getInspectUseChat()) { return true; diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java index ad32306ae..e6358ee2d 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java @@ -21,6 +21,7 @@ import org.bukkit.entity.Player; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -327,7 +328,7 @@ public class ScoreboardManager { changeScoreboard(wrapper, Config.getInstance().getStatsScoreboardTime()); } - public static void enablePlayerInspectScoreboard(Player player, PlayerProfile targetProfile) { + public static void enablePlayerInspectScoreboard(@NotNull Player player, @NotNull PlayerProfile targetProfile) { ScoreboardWrapper wrapper = getWrapper(player); if(wrapper == null) { @@ -343,6 +344,22 @@ public class ScoreboardManager { } } + public static void enablePlayerInspectScoreboard(@NotNull Player player, @NotNull McMMOPlayer targetMcMMOPlayer) { + ScoreboardWrapper wrapper = getWrapper(player); + + if(wrapper == null) { + setupPlayer(player); + wrapper = getWrapper(player); + } + + if(wrapper != null) { + wrapper.setOldScoreboard(); + wrapper.setTypeInspectStats(targetMcMMOPlayer); + + changeScoreboard(wrapper, Config.getInstance().getInspectScoreboardTime()); + } + } + public static void enablePlayerCooldownScoreboard(Player player) { ScoreboardWrapper wrapper = getWrapper(player); diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java index 56c7650dc..ad61aede0 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java @@ -25,6 +25,7 @@ import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Score; import org.bukkit.scoreboard.Scoreboard; +import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Map; @@ -322,6 +323,17 @@ public class ScoreboardWrapper { loadObjective(LocaleLoader.getString("Scoreboard.Header.PlayerInspect", targetPlayer)); } + public void setTypeInspectStats(@NotNull McMMOPlayer mcMMOPlayer) { + this.sidebarType = SidebarType.STATS_BOARD; + targetPlayer = mcMMOPlayer.getPlayer().getName(); + targetProfile = mcMMOPlayer.getProfile(); + + targetSkill = null; + leaderboardPage = -1; + + loadObjective(LocaleLoader.getString("Scoreboard.Header.PlayerInspect", targetPlayer)); + } + public void setTypeCooldowns() { this.sidebarType = SidebarType.COOLDOWNS_BOARD;