@@ -281,15 +281,25 @@ public void dispatch(AsyncPlayerChatEvent event) {
281281 try {
282282 if (event .isCancelled ()) return ;
283283
284- var msg = new ChatMessageParser ().parse (event .getMessage ());
284+ var plaintext = event .getMessage ();
285+
286+ String quickShoutChannelName = null ;
287+ if (plaintext .startsWith ("@#" )) {
288+ var endOfName = plaintext .indexOf (' ' );
289+ quickShoutChannelName = plaintext .substring (2 , endOfName );
290+ plaintext = plaintext .substring (endOfName + 1 );
291+ }
292+
293+ var msg = new ChatMessageParser ().parse (plaintext );
285294 var bukkitPlayer = event .getPlayer ();
286295 var player = getOrCreatePlayer (bukkitPlayer );
287296 var playerName = Util .Kyori .sanitizePlain (bukkitPlayer .getDisplayName ());
288- var message = new ChatMessage (player , playerName , event .getMessage (), msg );
289- var channel = channels .stream ()
290- .filter (chl -> chl .getPlayerIDs ().contains (bukkitPlayer .getUniqueId ()))
291- .findAny ()
292- .orElseGet (channels ::getFirst );
297+ var message = new ChatMessage (player , playerName , plaintext , msg );
298+ var channel = (quickShoutChannelName != null
299+ ? channel (quickShoutChannelName )
300+ : channels .stream ()
301+ .filter (chl -> chl .getPlayerIDs ().contains (bukkitPlayer .getUniqueId ()))
302+ .findAny ()).orElseGet (channels ::getFirst );
293303
294304 if (hasAccess (player .getId (), channel )) {
295305 var packet = new ChatMessagePacketImpl (PacketType .CHAT ,
0 commit comments