diff --git a/Changelog.txt b/Changelog.txt index 06745e870..6925de71d 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -32,6 +32,7 @@ Version 1.5.01-dev = Fixed bug where falling blocks were incorrectly tracked = Fixed bug where items would get deleted when in Berserk with a full inventory = Fixed bug where the console would not correctly show party chat colors + = Fixed bug where party chat was using non thread safe methods ! Changed SecondaryAbilityEvent to implement Cancellable and it now gets fired for damage related secondary abilities ! Changed the way mcMMO handles bonus damage, updated for the new damage event API ! Changed player data saving. Save tasks are now asynchronous diff --git a/src/main/java/com/gmail/nossr50/chat/PartyChatManager.java b/src/main/java/com/gmail/nossr50/chat/PartyChatManager.java index a7be9fa66..91a9d5379 100644 --- a/src/main/java/com/gmail/nossr50/chat/PartyChatManager.java +++ b/src/main/java/com/gmail/nossr50/chat/PartyChatManager.java @@ -1,16 +1,11 @@ package com.gmail.nossr50.chat; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.events.chat.McMMOPartyChatEvent; -import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.runnables.party.PartyChatTask; public class PartyChatManager extends ChatManager { private Party party; @@ -30,21 +25,6 @@ public class PartyChatManager extends ChatManager { @Override protected void sendMessage() { - if (Config.getInstance().getPartyChatColorLeaderName() && senderName.equalsIgnoreCase(party.getLeader())) { - message = message.replaceFirst(Pattern.quote(displayName), ChatColor.GOLD + Matcher.quoteReplacement(displayName) + ChatColor.RESET); - } - - for (Player member : party.getOnlineMembers()) { - member.sendMessage(message); - } - - if (party.getAlly() != null) { - for (Player member : party.getAlly().getOnlineMembers()) { - String allyPrefix = LocaleLoader.formatString(Config.getInstance().getPartyChatPrefixAlly()); - member.sendMessage(allyPrefix + message); - } - } - - plugin.getServer().getConsoleSender().sendMessage("[mcMMO] [P]<" + party.getName() + ">" + message); + new PartyChatTask(plugin, party, senderName, displayName, message).runTask(plugin); } } diff --git a/src/main/java/com/gmail/nossr50/runnables/party/PartyChatTask.java b/src/main/java/com/gmail/nossr50/runnables/party/PartyChatTask.java new file mode 100644 index 000000000..2f090213b --- /dev/null +++ b/src/main/java/com/gmail/nossr50/runnables/party/PartyChatTask.java @@ -0,0 +1,51 @@ +package com.gmail.nossr50.runnables.party; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.datatypes.party.Party; +import com.gmail.nossr50.locale.LocaleLoader; + +public class PartyChatTask extends BukkitRunnable { + private Plugin plugin; + + private Party party; + private String senderName; + private String displayName; + private String message; + + public PartyChatTask(Plugin plugin, Party party, String senderName, String displayName, String message) { + this.plugin = plugin; + + this.party = party; + this.senderName = senderName; + this.displayName = displayName; + this.message = message; + } + + @Override + public void run() { + if (Config.getInstance().getPartyChatColorLeaderName() && senderName.equalsIgnoreCase(party.getLeader())) { + message = message.replaceFirst(Pattern.quote(displayName), ChatColor.GOLD + Matcher.quoteReplacement(displayName) + ChatColor.RESET); + } + + for (Player member : party.getOnlineMembers()) { + member.sendMessage(message); + } + + if (party.getAlly() != null) { + for (Player member : party.getAlly().getOnlineMembers()) { + String allyPrefix = LocaleLoader.formatString(Config.getInstance().getPartyChatPrefixAlly()); + member.sendMessage(allyPrefix + message); + } + } + + plugin.getServer().getConsoleSender().sendMessage("[mcMMO] [P]<" + party.getName() + ">" + message); + } +}