66import com .comphenix .protocol .wrappers .EnumWrappers .ChatType ;
77import com .comphenix .protocol .wrappers .WrappedChatComponent ;
88import com .github .games647 .mcmmoaction .mcMMOAction ;
9+ import com .google .common .base .Enums ;
910import com .google .common .collect .ImmutableSet ;
1011import com .google .gson .Gson ;
1112import com .google .gson .JsonArray ;
13+ import com .google .gson .JsonElement ;
1214import com .google .gson .JsonObject ;
1315
1416import java .util .Collection ;
1517import java .util .regex .Pattern ;
1618import java .util .stream .Collectors ;
1719
1820import net .md_5 .bungee .api .chat .BaseComponent ;
21+ import net .md_5 .bungee .api .chat .HoverEvent ;
1922import net .md_5 .bungee .chat .ComponentSerializer ;
2023
2124import org .bukkit .entity .Player ;
@@ -28,6 +31,8 @@ public class MessageListener extends PacketAdapter {
2831 private final Pattern pluginTagPattern = Pattern .compile (Pattern .quote ("[mcMMO] " ));
2932 private final Gson gson = new Gson ();
3033
34+ private final boolean shouldRemoveHover ;
35+
3136 //compile the pattern just once - remove the comma so it also detect numbers like (10,000)
3237 private final Pattern numberRemover = Pattern .compile ("[,0-9]" );
3338
@@ -37,6 +42,8 @@ public class MessageListener extends PacketAdapter {
3742 public MessageListener (mcMMOAction plugin , Collection <String > messages ) {
3843 super (params ().plugin (plugin ).types (CHAT ));
3944
45+ shouldRemoveHover = !Enums .getIfPresent (HoverEvent .Action .class , "SHOW_ENTITY" ).isPresent ();
46+
4047 this .plugin = plugin ;
4148 this .localizedMessages = ImmutableSet .copyOf (messages
4249 .stream ()
@@ -65,12 +72,15 @@ public void onPacketSending(PacketEvent packetEvent) {
6572 }
6673
6774 String json = message .getJson ();
68- String cleanedJson = gson .toJson (cleanJsonFromHover (json ));
69- if (cleanedJson == null ) {
75+ if (shouldRemoveHover ) {
76+ json = gson .toJson (cleanJsonFromHover (json ));
77+ }
78+
79+ if (json == null ) {
7080 return ;
7181 }
7282
73- BaseComponent chatComponent = ComponentSerializer .parse (cleanedJson )[0 ];
83+ BaseComponent chatComponent = ComponentSerializer .parse (json )[0 ];
7484 if (chatComponent != null && isMcMMOMessage (chatComponent .toPlainText ())) {
7585 writeChatPosition (packet );
7686
@@ -104,9 +114,13 @@ private void writeChatPosition(PacketContainer packet) {
104114 }
105115 }
106116
107- private JsonObject cleanJsonFromHover (String json ) {
108- JsonObject jsonComponent = gson .fromJson (json , JsonObject .class );
109- return cleanJsonFromHover (jsonComponent );
117+ private JsonElement cleanJsonFromHover (String json ) {
118+ JsonElement jsonComponent = gson .fromJson (json , JsonElement .class );
119+ if (jsonComponent instanceof JsonObject ) {
120+ return cleanJsonFromHover ((JsonObject ) jsonComponent );
121+ }
122+
123+ return jsonComponent ;
110124 }
111125
112126 private JsonObject cleanJsonFromHover (JsonObject jsonComponent ) {
0 commit comments