22
33import io .papermc .paper .chat .ChatRenderer ;
44import io .papermc .paper .event .player .AsyncChatEvent ;
5+ import io .papermc .paper .text .PaperComponents ;
6+ import me .clip .placeholderapi .PlaceholderAPI ;
7+ import net .kyori .adventure .audience .Audience ;
58import net .kyori .adventure .text .Component ;
69import net .kyori .adventure .text .TextComponent ;;
710import net .kyori .adventure .text .format .NamedTextColor ;
811import net .kyori .adventure .text .format .TextDecoration ;
12+ import net .kyori .adventure .text .serializer .legacy .LegacyComponentSerializer ;
913import org .bukkit .Material ;
1014import org .bukkit .entity .Player ;
1115import org .bukkit .event .EventHandler ;
1216import org .bukkit .event .EventPriority ;
1317import org .bukkit .event .Listener ;
18+ import org .bukkit .event .player .AsyncPlayerChatEvent ;
1419import org .bukkit .inventory .ItemStack ;
1520import parallelmc .parallelutils .Parallelutils ;
1621
22+ import java .util .HashMap ;
1723import java .util .logging .Level ;
1824
25+ import static io .papermc .paper .chat .ChatRenderer .viewerUnaware ;
26+
1927public class OnChatMessage implements Listener {
28+
29+
30+ private final HashMap <String , String > nameformats = new HashMap <>();
31+
2032 /**
2133 * This event handler allows players to link their held item in chat if they type [item]
2234 */
23- @ EventHandler (ignoreCancelled = true , priority = EventPriority .HIGHEST )
35+ @ EventHandler (ignoreCancelled = true , priority = EventPriority .HIGH )
2436 public void onChatMessage (AsyncChatEvent event ) {
2537 Player player = event .getPlayer ();
2638 ItemStack item = player .getInventory ().getItemInMainHand ();
2739
2840 Component name = item .displayName ().hoverEvent (item .asHoverEvent ());
29- Parallelutils .log (Level .INFO , item .asHoverEvent ().toString ());
3041
3142 TextComponent component = Component .text ()
3243 .append (name )
@@ -35,22 +46,50 @@ public void onChatMessage(AsyncChatEvent event) {
3546
3647 Component incomingMessage = event .message ();
3748
49+ String format = nameformats .get (player .getName ());
50+
51+ if (format == null ) {
52+ format = player .getName () + " > " ;
53+ Parallelutils .log (Level .INFO , format );
54+ } else {
55+ nameformats .remove (player .getName ());
56+ }
57+
58+ String formatted = PlaceholderAPI .setBracketPlaceholders (player , String .format (format , player .getName (), "" )
59+ .replace ("&r" , "" ).replace ("§r" , "" )); // Clear the reset characters
60+
3861 Component outgoingMessage = incomingMessage .replaceText (x -> x .once ().match ("\\ [item\\ ]" ).replacement (component ));
3962
63+ if (incomingMessage .contains (outgoingMessage )) {
64+ // [item] was not found. No need to stop the message
65+ return ;
66+ }
67+
4068 // can't put nothing in chat
4169 if (item .getType () == Material .AIR ) {
42- if (incomingMessage .contains (outgoingMessage )) {
43- // [item] was not found. No need to stop the message
44- return ;
45- }
4670 player .sendMessage (Component .text ("[" , NamedTextColor .DARK_AQUA )
4771 .append (Component .text ("P" , NamedTextColor .WHITE , TextDecoration .BOLD ))
4872 .append (Component .text ("]" , NamedTextColor .DARK_AQUA ))
4973 .append (Component .text (" Cannot link Air into chat!" , NamedTextColor .WHITE )));
5074 event .setCancelled (true );
5175 } else {
52- event .renderer (ChatRenderer .defaultRenderer ());
76+ event .renderer (viewerUnaware ((source , sourceDisplayName , message ) ->
77+ LegacyComponentSerializer .legacyAmpersand ().deserialize (formatted ).append (message )));
78+
5379 event .message (outgoingMessage );
5480 }
5581 }
82+
83+ /**
84+ * This event is purely to capture the format
85+ */
86+ @ EventHandler (ignoreCancelled = true , priority = EventPriority .LOWEST )
87+ public void onDeprecatedChatMessage (AsyncPlayerChatEvent event ) {
88+ String format = event .getFormat ();
89+ String playerName = event .getPlayer ().getName ();
90+
91+ Parallelutils .log (Level .INFO , format );
92+
93+ nameformats .put (playerName , format );
94+ }
5695}
0 commit comments