- package io.bilicraft.r6.bbs.helper;
- import org.bukkit.entity.Player;
- import io.bilicraft.r6.bbs.BiliBS;
- public class ChatHelper{
- public static Class<?> craftPlayer;
- private static Class<?> packetPlayOutChat;
- private static Class<?> packet;
- private static Class<?> chat;
- private static Class<?> iChatComponent;
- private static boolean canSendTitleBool = true;
- static {
- try {
- if (ModHelper.isGlowStone) {
- BiliBS.getInstance().getLogger().info("Found GlowPlayer Start");
- ChatHelper.craftPlayer = Class.forName("net.glowstone.entity.GlowPlayer");
- BiliBS.getInstance().getLogger().info("Found GlowPlayer End");
- } else {
- BiliBS.getInstance().getLogger().info("Found NMS Package Start");
- ChatHelper.craftPlayer = Class
- .forName("org.bukkit.craftbukkit." + ModHelper.versionPack + ".entity.CraftPlayer");
- packetPlayOutChat = Class
- .forName("net.minecraft.server." + ModHelper.versionPack + ".PacketPlayOutChat");
- packet = Class.forName("net.minecraft.server." + ModHelper.versionPack + ".Packet");
- try {
- chat = Class.forName("net.minecraft.server." + ModHelper.versionPack + ".ChatSerializer");
- } catch (ClassNotFoundException e) {
- chat = Class.forName("net.minecraft.server." + ModHelper.versionPack + ".ChatComponentText");
- }
- iChatComponent = Class.forName("net.minecraft.server." + ModHelper.versionPack + ".IChatBaseComponent");
- BiliBS.getInstance().getLogger().info("Found NMS Package End");
- }
- } catch (ClassNotFoundException e) {
- canSendTitleBool = false;
- BiliBS.getInstance().getLogger().info("Not Found NMS Package {" + e.getMessage() + "}");
- }
- }
- public ChatHelper(){}
- public static void sendActionBar(Player player, String message) throws Exception {
- if (!canSendTitle()) {
- return;
- }
- Object craftPlayerObj = ChatHelper.craftPlayer.cast(player);
- if (ModHelper.isGlowStone) {
- ChatHelper.craftPlayer.getDeclaredMethod("sendActionBarMessage", new Class[] { String.class }).invoke(
- craftPlayerObj, new Object[] { message.replace("&", "<span style="font-family: arial, 'courier new', courier, 宋体, monospace, 'Microsoft YaHei'; line-height: 24px; white-space: pre-wrap; background-color: rgb(255, 255, 255);">§</span><span style="line-height: 1.5;">").replace("%player", player.getName()) });</span>
- } else {
- Object packObj = null;
- Object iChatObj = null;
- if (chat.getTypeName().endsWith("ChatSerializer")) {
- String messageR = new StringBuilder("{"text": "")
- .append(message.replace("&", "<span style="font-family: arial, 'courier new', courier, 宋体, monospace, 'Microsoft YaHei'; line-height: 24px; white-space: pre-wrap; background-color: rgb(255, 255, 255);">§</span><span style="line-height: 1.5;">").replace("%player", player.getName())).append(""}")</span>
- .toString();
- iChatObj = iChatComponent.cast(chat.getDeclaredMethod("a", new Class[] { String.class }).invoke(chat,
- new Object[] { messageR }));
- } else {
- iChatObj = chat.getConstructor(new Class[] { String.class })
- .newInstance(new Object[] { message.replace("&", "<span style="font-family: arial, 'courier new', courier, 宋体, monospace, 'Microsoft YaHei'; line-height: 24px; white-space: pre-wrap; background-color: rgb(255, 255, 255);">§</span><span style="line-height: 1.5;">").replace("%player", player.getName()) });</span>
- }
- packObj = packetPlayOutChat.getConstructor(new Class[] { iChatComponent, Byte.TYPE })
- .newInstance(new Object[] { iChatObj, (byte) 2 });
- Object handlerObj = ChatHelper.craftPlayer.getDeclaredMethod("getHandle").invoke(craftPlayerObj);
- Object playerConnectionObj = handlerObj.getClass().getDeclaredField("playerConnection").get(handlerObj);
- playerConnectionObj.getClass().getDeclaredMethod("sendPacket", new Class[] { packet })
- .invoke(playerConnectionObj, new Object[] { packObj });
- }
- }
- public static boolean canSendTitle() {
- return canSendTitleBool;
- }
- }
复制代码 |