From 8b0a580505fe1c4d70e485b28d143d4cb1fad2d9 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 11 Apr 2019 03:49:13 -0700 Subject: [PATCH] Fixing Party Chat Bug --- Changelog.txt | 2 ++ pom.xml | 2 +- src/main/java/com/gmail/nossr50/chat/ChatManager.java | 10 +++++++--- .../com/gmail/nossr50/util/player/UserManager.java | 6 +++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index c2a876b27..40bb1cd5a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,10 +8,12 @@ Key: - Removal Version 2.1.40 + (API) mcMMO will now return null in all cases for UserManager.getPlayerProfile() if they have not been loaded yet Added new locale string "Profile.Loading.FailureNotice" Added new locale string "Profile.Loading.FailurePlayer" mcMMO no longer gives up forever if a player profile fails to load and the player is still online mcMMO will attempt to save a profile up to 10 times now, previously it would only try one time. + Fixed an ArrayIndexOutOfBounds error with Party Chat Player data for mcMMO is now loaded 3 seconds after a player connects in order to give any ongoing save tasks from other servers a small grace period to finish. This will mostly be useful to Bungee servers. NOTES: I received reports from some users saying that saving and loading was failing could fail and not recover, I have implemented some fail safes to greatly reduce the the odds of that happening. diff --git a/pom.xml b/pom.xml index 20a75ca9b..f5086f40b 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.40-SNAPSHOT + 2.1.40 mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/chat/ChatManager.java b/src/main/java/com/gmail/nossr50/chat/ChatManager.java index a7d5311bb..30908b216 100644 --- a/src/main/java/com/gmail/nossr50/chat/ChatManager.java +++ b/src/main/java/com/gmail/nossr50/chat/ChatManager.java @@ -1,6 +1,8 @@ package com.gmail.nossr50.chat; import com.gmail.nossr50.datatypes.party.Party; +import com.gmail.nossr50.datatypes.player.McMMOPlayer; +import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.events.chat.McMMOChatEvent; import com.gmail.nossr50.events.chat.McMMOPartyChatEvent; import com.gmail.nossr50.locale.LocaleLoader; @@ -46,12 +48,14 @@ public abstract class ChatManager { McMMOPartyChatEvent partyChatEvent = (McMMOPartyChatEvent) event; //Find the people with permissions - for(Player player : event.getPlugin().getServer().getOnlinePlayers()) + for(McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) { + Player player = mcMMOPlayer.getPlayer(); + //Check for toggled players - if(UserManager.getPlayer(player).isPartyChatSpying()) + if(mcMMOPlayer.isPartyChatSpying()) { - Party adminParty = UserManager.getPlayer(player).getParty(); + Party adminParty = mcMMOPlayer.getParty(); //Only message admins not part of this party if(adminParty != null) diff --git a/src/main/java/com/gmail/nossr50/util/player/UserManager.java b/src/main/java/com/gmail/nossr50/util/player/UserManager.java index 3c5411bc9..ff0a53597 100644 --- a/src/main/java/com/gmail/nossr50/util/player/UserManager.java +++ b/src/main/java/com/gmail/nossr50/util/player/UserManager.java @@ -96,7 +96,11 @@ public final class UserManager { } public static McMMOPlayer getPlayer(Player player) { - return (McMMOPlayer) player.getMetadata(mcMMO.playerDataKey).get(0).value(); + //Avoid Array Index out of bounds + if(player.hasMetadata(mcMMO.playerDataKey)) + return (McMMOPlayer) player.getMetadata(mcMMO.playerDataKey).get(0).value(); + else + return null; } private static McMMOPlayer retrieveMcMMOPlayer(String playerName, boolean offlineValid) {