22
33import io .papermc .paper .chat .ChatRenderer ;
44import io .papermc .paper .event .player .AsyncChatEvent ;
5+ import me .clip .placeholderapi .PlaceholderAPI ;
56import net .kyori .adventure .text .Component ;
7+ import net .kyori .adventure .text .ComponentBuilder ;
68import net .kyori .adventure .text .TextComponent ;
79import net .kyori .adventure .text .minimessage .MiniMessage ;
810import net .kyori .adventure .text .format .NamedTextColor ;
11+ import net .kyori .adventure .text .minimessage .tag .resolver .Placeholder ;
12+ import net .kyori .adventure .text .minimessage .tag .resolver .TagResolver ;
913import net .kyori .adventure .text .serializer .legacy .LegacyComponentSerializer ;
14+ import net .minecraft .network .chat .HoverEvent ;
1015import org .bukkit .Material ;
1116import org .bukkit .Server ;
1217import org .bukkit .Sound ;
@@ -166,20 +171,6 @@ public void onChatMessage(AsyncChatEvent event) {
166171 }
167172
168173
169- // Item chat
170- ItemStack item = player .getInventory ().getItemInMainHand ();
171-
172- if (item .getType () != Material .AIR ) {
173- Component itemName = item .displayName ().hoverEvent (item .asHoverEvent ());
174-
175- TextComponent itemComponent = Component .text ()
176- .append (itemName )
177- .append (Component .text (" x" + item .getAmount (), item .displayName ().color ()))
178- .build ();
179-
180- event .message (event .message ().replaceText (x -> x .once ().match ("\\ [item\\ ]" ).replacement (itemComponent )));
181- }
182-
183174 // remove dnd players from the recipient list if they have not been mentioned
184175 // also show the message to the player if they send it
185176 event .viewers ().removeAll (ParallelChat .dndPlayers .keySet ()
@@ -189,8 +180,22 @@ public void onChatMessage(AsyncChatEvent event) {
189180 .collect (Collectors .toSet ()));
190181
191182 // re-render the formatted message and send it
192- event .renderer (ChatRenderer .viewerUnaware ((source , sourceDisplayName , message )
193- -> ParallelChat .get ().formatForGroup (source , sourceDisplayName , message )));
183+ event .renderer (ChatRenderer .viewerUnaware ((source , sourceDisplayName , message ) ->
184+ {
185+ message = LegacyComponentSerializer .legacyAmpersand ().deserialize (LegacyComponentSerializer .legacyAmpersand ().serialize (message ));
186+ // Item chat
187+ ItemStack item = player .getInventory ().getItemInMainHand ();
188+
189+ if (item .getType () != Material .AIR ) {
190+ TextComponent itemComponent = Component .text ()
191+ .append (item .displayName ().hoverEvent (item .asHoverEvent ()))
192+ .append (Component .text (" x" + item .getAmount (), item .displayName ().color ()))
193+ .build ();
194+
195+ message = message .replaceText (x -> x .once ().match ("\\ [item\\ ]" ).replacement (itemComponent ));
196+ }
197+ return ParallelChat .get ().formatForGroup (source , sourceDisplayName , message );
198+ }));
194199 // not sure if this is necessary but I don't want to touch it
195200 event .message (event .message ());
196201 }
0 commit comments