Skip to content

Commit

Permalink
Initial 1.19.1 support
Browse files Browse the repository at this point in the history
  • Loading branch information
Brikster committed Aug 2, 2022
1 parent 9b28f2e commit 7532bd5
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 deletions.
56 changes: 36 additions & 20 deletions api/src/main/java/ru/mrbrikster/chatty/util/textapi/NMSUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ public class NMSUtil {
NMS_CLASSES.put("PlayerChatMessage", resolveSuitableClass(NETWORK + ".chat.PlayerChatMessage"));
NMS_CLASSES.put("ServerPlayer", resolveSuitableClass("net.minecraft.server.level.ServerPlayer"));
NMS_CLASSES.put("ChatSender", resolveSuitableClass(NETWORK + ".chat.ChatSender"));

// 1.19.1
NMS_CLASSES.put("ClientboundSystemChatPacket", resolveSuitableClass(NETWORK + ".protocol.game.ClientboundSystemChatPacket"));
}

public Class<?> getClass(String key) {
Expand Down Expand Up @@ -79,13 +82,15 @@ public void sendChatPacket(Player player, String type, String text, @Nullable Pl
Class<?> clsIChatBaseComponent = NMS_CLASSES.get("IChatBaseComponent");
Object chatBaseComponent = NMS_CLASSES.get("IChatBaseComponent$ChatSerializer").getMethod("a", String.class).invoke(null, text);

// EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
Object playerConnection = resolveField(entityPlayer.getClass(), "b", "playerConnection").get(entityPlayer);

Class<?> clsClientboundPlayerChatPacket = NMS_CLASSES.get("ClientboundPlayerChatPacket");

if (clsClientboundPlayerChatPacket == null) {
// < 1.19
Class<?> clsChatMessageType = NMS_CLASSES.get("ChatMessageType");
Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
Object playerConnection = resolveField(entityPlayer.getClass(), "b", "playerConnection").get(entityPlayer);
Object chatMessageType = clsChatMessageType.getMethod("valueOf", String.class).invoke(null, type);

Object packetPlayOutChat = null;
Expand Down Expand Up @@ -133,24 +138,35 @@ public void sendChatPacket(Player player, String type, String text, @Nullable Pl
.getMethod("a", String.class)
.invoke(null, "{\"text\":\"" + player.getDisplayName() + "\"}");

// PlayerChatMessage playerChatMessage = PlayerChatMessage.a(chatBaseComponent);
Object playerChatMessage = clsPlayerChatMessage.getMethod("a", clsIChatBaseComponent)
.invoke(null, chatBaseComponent);

// EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);

if (sender == null) {
// entityPlayer.a(chatBaseComponent, chatMessageType);
entityPlayer.getClass().getMethod("a", clsIChatBaseComponent, chatMessageType.getClass())
.invoke(entityPlayer, chatBaseComponent, chatMessageType);
} else {
// ChatSender chatSender = new ChatSender(sender, senderName);
Object chatSender = clsChatSender.getConstructor(UUID.class, clsIChatBaseComponent)
.newInstance(sender.getUniqueId(), senderName);
// entityPlayer.a(playerChatMessage, chatSender, chatMessageType);
entityPlayer.getClass().getMethod("a", clsPlayerChatMessage, clsChatSender, chatMessageType.getClass())
.invoke(entityPlayer, playerChatMessage, chatSender, chatMessageType);
try {
// 1.19 - player message with UUID etc.

// PlayerChatMessage playerChatMessage = PlayerChatMessage.a(chatBaseComponent);
Object playerChatMessage = clsPlayerChatMessage.getMethod("a", clsIChatBaseComponent)
.invoke(null, chatBaseComponent);

if (sender == null) {
// entityPlayer.a(chatBaseComponent, chatMessageType);
entityPlayer.getClass().getMethod("a", clsIChatBaseComponent, chatMessageType.getClass())
.invoke(entityPlayer, chatBaseComponent, chatMessageType);
} else {
// ChatSender chatSender = new ChatSender(sender, senderName);
Object chatSender = clsChatSender.getConstructor(UUID.class, clsIChatBaseComponent)
.newInstance(sender.getUniqueId(), senderName);
// entityPlayer.a(playerChatMessage, chatSender, chatMessageType);
entityPlayer.getClass().getMethod("a", clsPlayerChatMessage, clsChatSender, chatMessageType.getClass())
.invoke(entityPlayer, playerChatMessage, chatSender, chatMessageType);
}
} catch (Exception ignored) {
// 1.19.1 - system message
Class<?> clsClientboundSystemChatPacket = NMS_CLASSES.get("ClientboundSystemChatPacket");
// ClientboundSystemChatPacket clientboundSystemChatPacket = new ClientboundSystemChatPacket(chatBaseComponent, false);
Object clientboundSystemChatPacket = clsClientboundSystemChatPacket.getConstructor(clsIChatBaseComponent, boolean.class)
.newInstance(chatBaseComponent, false);

// ((CraftPlayer) player).b.a(clientboundSystemChatPacket);
playerConnection.getClass().getMethod("a", NMS_CLASSES.get("Packet"))
.invoke(playerConnection, clientboundSystemChatPacket);
}
}
} catch (Throwable e) {
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
allprojects {
group = 'ru.mrbrikster'
version = '2.19.11'
version = '2.19.12'
}

subprojects {
Expand Down
2 changes: 1 addition & 1 deletion spigot/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ tasks {
}

runServer {
minecraftVersion('1.19')
minecraftVersion('1.19.1')
}
}

Expand Down

0 comments on commit 7532bd5

Please sign in to comment.