diff --git a/src/main/java/com/booksaw/betterTeams/events/ChatManagement.java b/src/main/java/com/booksaw/betterTeams/events/ChatManagement.java index 59a13abe..43adb9c7 100644 --- a/src/main/java/com/booksaw/betterTeams/events/ChatManagement.java +++ b/src/main/java/com/booksaw/betterTeams/events/ChatManagement.java @@ -50,24 +50,40 @@ public void onChat(AsyncPlayerChatEvent event) { if(teamPlayer == null) { throw new IllegalStateException("Player " + p.getName() + " is registered to be in a team, yet has no playerdata associated with that team"); } - - if ((teamPlayer.isInTeamChat() || teamPlayer.isInAllyChat()) - && (event.getMessage().startsWith("!") && event.getMessage().length() > 1)) { - event.setMessage(event.getMessage().substring(1)); - } else if (teamPlayer.isInTeamChat()) { - // player is sending to team chat - event.setCancelled(true); - team.sendMessage(teamPlayer, event.getMessage()); - // Used as some chat plugins do not accept when a message is cancelled - event.setMessage(""); - event.setFormat(""); - return; - } else if (teamPlayer.isInAllyChat()) { - // player is sending to ally chat + String anyChatToGlobalPrefix = Main.plugin.getConfig().getString("chatPrefixes.teamOrAllyToGlobal", "!"); + String globalToTeamPrefix = Main.plugin.getConfig().getString("chatPrefixes.globalToTeam", "!"); + String globalToAllyPrefix = Main.plugin.getConfig().getString("chatPrefixes.globalToAlly", "?"); + + if (teamPlayer.isInTeamChat() || teamPlayer.isInAllyChat()) { + if (!anyChatToGlobalPrefix.isEmpty() && event.getMessage().startsWith(anyChatToGlobalPrefix) && event.getMessage().length() > anyChatToGlobalPrefix.length()) { + event.setMessage(event.getMessage().substring(anyChatToGlobalPrefix.length())); + } else { + // Player is not sending to global chat + event.setCancelled(true); + + if (teamPlayer.isInTeamChat()) { + team.sendMessage(teamPlayer, event.getMessage()); + } else { + team.sendAllyMessage(teamPlayer, event.getMessage()); + } + // Used as some chat plugins do not accept when a message is cancelled + event.setMessage(""); + event.setFormat(""); + return; + } + } else if ( + (!globalToTeamPrefix.isEmpty() && event.getMessage().startsWith(globalToTeamPrefix) && event.getMessage().length() > globalToTeamPrefix.length()) + || (!globalToAllyPrefix.isEmpty() && event.getMessage().startsWith(globalToAllyPrefix) && event.getMessage().length() > globalToAllyPrefix.length()) + ) { + // Player is not sending to global chat event.setCancelled(true); - team.sendAllyMessage(teamPlayer, event.getMessage()); + if (event.getMessage().startsWith(globalToTeamPrefix)) { + team.sendMessage(teamPlayer, event.getMessage().substring(globalToTeamPrefix.length())); + } else { + team.sendAllyMessage(teamPlayer, event.getMessage().substring(globalToAllyPrefix.length())); + } // Used as some chat plugins do not accept when a message is cancelled event.setMessage(""); event.setFormat(""); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 386d2c71..fd7b0da7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -86,6 +86,16 @@ announceTeamLeave: false # This is used to determine whether disbanding a team should be announced (Message is configurable in messages.yml) announceTeamDisband: false +# These are prefix shortcuts to change where a chat message is sent +# Possible values: [Any text/character(s)] +chatPrefixes: + # This prefix will instead send the global message to the team chat + globalToTeam: '!' + # This prefix will instead send the global message to the ally chat + globalToAlly: '?' + # This prefix will instead send the team or ally message to the global chat + teamOrAllyToGlobal: '!' + # This is used to set the maxmimum number of allies a team can have # - If this feature is unwanted, set the allyLimit to -1 and there will be unlimited allies for each team # - Keep this value reasonable, as Java cannot cope with larger numbers (over 2 billion), so if you want the team to be limitless, set the value to -1 instead of something large