8181import org .jetbrains .annotations .Nullable ;
8282
8383import static java .lang .invoke .MethodHandles .dropArguments ;
84+ import static java .lang .invoke .MethodHandles .insertArguments ;
8485import static java .lang .invoke .MethodType .methodType ;
8586import static net .kyori .adventure .platform .bukkit .BukkitComponentSerializer .gson ;
8687import static net .kyori .adventure .platform .bukkit .BukkitComponentSerializer .legacy ;
@@ -248,8 +249,12 @@ public Object createMessage(final @NotNull V viewer, final @NotNull Component me
248249 findMcClassName ("network.protocol.game.ClientboundChatPacket" ),
249250 findMcClassName ("network.protocol.game.ClientboundSystemChatPacket" )
250251 );
251- // ClientboundSystemChatPacket constructor changed for 1.19
252- chatPacketConstructor = findConstructor (chatPacketClass , CLASS_CHAT_COMPONENT , int .class );
252+ // ClientboundSystemChatPacket constructor changed for 1.19.1
253+ chatPacketConstructor = findConstructor (chatPacketClass , CLASS_CHAT_COMPONENT , boolean .class );
254+ if (chatPacketConstructor == null ) {
255+ // ClientboundSystemChatPacket constructor changed for 1.19
256+ chatPacketConstructor = findConstructor (chatPacketClass , CLASS_CHAT_COMPONENT , int .class );
257+ }
253258 if (chatPacketConstructor == null ) {
254259 // ClientboundChatPacket constructor changed for 1.16
255260 chatPacketConstructor = findConstructor (chatPacketClass , CLASS_CHAT_COMPONENT );
@@ -260,8 +265,14 @@ public Object createMessage(final @NotNull V viewer, final @NotNull Component me
260265 }
261266 } else {
262267 if (MESSAGE_TYPE_CHAT == Integer .valueOf (0 )) {
263- // for 1.19, create a function that drops the last UUID argument while keeping the integer message type argument
264- chatPacketConstructor = dropArguments (chatPacketConstructor , 2 , UUID .class );
268+ if (chatPacketConstructor .type ().parameterType (1 ).equals (boolean .class )) {
269+ // 1.19.1
270+ chatPacketConstructor = insertArguments (chatPacketConstructor , 1 , Boolean .FALSE );
271+ chatPacketConstructor = dropArguments (chatPacketConstructor , 1 , Integer .class , UUID .class );
272+ } else {
273+ // for 1.19, create a function that drops the last UUID argument while keeping the integer message type argument
274+ chatPacketConstructor = dropArguments (chatPacketConstructor , 2 , UUID .class );
275+ }
265276 } else {
266277 // Create a function that ignores the message type and sender id arguments to call the underlying one-argument constructor
267278 chatPacketConstructor = dropArguments (chatPacketConstructor , 1 , CLASS_MESSAGE_TYPE == null ? Object .class : CLASS_MESSAGE_TYPE , UUID .class );
0 commit comments