From ff4c5f6f46d7dd6b7a21df3608ecc4d7269b01e5 Mon Sep 17 00:00:00 2001 From: xjboss Date: Tue, 12 Mar 2019 11:17:54 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=81=8A=E5=A4=A9=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pw/yumc/YumCore/bukkit/compatible/C.java | 74 +++++++++---------- 1 file changed, 34 insertions(+), 40 deletions(-) diff --git a/src/main/java/pw/yumc/YumCore/bukkit/compatible/C.java b/src/main/java/pw/yumc/YumCore/bukkit/compatible/C.java index 7aa9ade..d8a8089 100644 --- a/src/main/java/pw/yumc/YumCore/bukkit/compatible/C.java +++ b/src/main/java/pw/yumc/YumCore/bukkit/compatible/C.java @@ -48,52 +48,37 @@ public class C { private static Object[] chatMessageTypes; public static boolean init; - public static boolean cauldron; + public static boolean cauldron1710; public static boolean uranium; public static boolean titlePAB; static { version=getNMSVersion(); titlePAB=false; - if(version.equals("v1_7_R4")&&Package.getPackage("net.minecraftforge.cauldron")!=null) { - try{ - Class.forName("cc.uraniummc.Uranium"); - uranium=true; - }catch (Exception e){ - Log.d("检测到不是Uranium服务端"); - } - try { - cauldron=true; + + try { + cauldron1710 =version.equals("v1_7_R4")&&Package.getPackage("net.minecraftforge.cauldron1710")!=null; + if(cauldron1710) { + try{ + Class.forName("cc.uraniummc.Uranium"); + uranium=true; + }catch (Exception e){ + Log.d("检测到不是Uranium服务端"); + } newversion=false; nmsChatSerializer = Class.forName("net.minecraft.util.IChatComponent$Serializer"); chatSerializer = nmsChatSerializer.getMethod("func_150699_a", String.class); nmsIChatBaseComponent = Class.forName("net.minecraft.util.IChatComponent"); packetType = Class.forName("net.minecraft.network.play.server.S02PacketChat"); Arrays.stream(packetType.getConstructors()).forEach(c -> { - if (c.getParameterTypes().length == 2) { + if (c.getParameterTypes().length == 2&&uranium) { + packetTypeConstructor = c; + }else if(c.getParameterTypes().length==1){ packetTypeConstructor = c; } }); - nmsChatMessageTypeClass = packetTypeConstructor.getParameterTypes()[1]; - if (nmsChatMessageTypeClass.isEnum()) { - chatMessageTypes = nmsChatMessageTypeClass.getEnumConstants(); - } else if(uranium) { - titlePAB=true; - } - Class typeCraftPlayer = Class.forName(b("entity.CraftPlayer")); - Class typeNMSPlayer = Class.forName("net.minecraft.entity.player.EntityPlayerMP"); - Class typePlayerConnection = Class.forName("net.minecraft.network.NetHandlerPlayServer"); - getHandle = typeCraftPlayer.getMethod("getHandle"); - playerConnection = typeNMSPlayer.getField("field_71135_a"); - sendPacket = typePlayerConnection.getMethod("func_147359_a", Class.forName("net.minecraft.network.Packet")); - init = true; - } catch (Exception e) { - Log.w("C(Cauldron_1710) 兼容性工具初始化失败 可能造成部分功能不可用!"); - Log.d(e); - } - }else { - try { - version = getNMSVersion(); + }else { newversion = Integer.parseInt(version.split("_")[1]) > 7; + titlePAB=newversion; nmsChatSerializer = Class.forName(a(newversion ? "IChatBaseComponent$ChatSerializer" : "ChatSerializer")); chatSerializer = nmsChatSerializer.getMethod("a", String.class); nmsIChatBaseComponent = Class.forName(a("IChatBaseComponent")); @@ -103,6 +88,8 @@ public class C { packetTypeConstructor = c; } }); + } + if(!cauldron1710||uranium) { try { nmsChatMessageTypeClass = packetTypeConstructor.getParameterTypes()[1]; if (nmsChatMessageTypeClass.isEnum()) { @@ -116,20 +103,27 @@ public class C { } nmsChatMessageTypeClassValueOf = nmsChatMessageTypeClass.getDeclaredMethod("valueOf", String.class); } - }catch (Exception e){ - packetTypeConstructor=packetType.getConstructor(String.class); + } catch (Exception e) { + packetTypeConstructor = packetType.getConstructor(String.class); } - Class typeCraftPlayer = Class.forName(b("entity.CraftPlayer")); + } + Class typeCraftPlayer = Class.forName(b("entity.CraftPlayer")); + getHandle = typeCraftPlayer.getMethod("getHandle"); + if(cauldron1710) { + Class typeNMSPlayer = Class.forName("net.minecraft.entity.player.EntityPlayerMP"); + Class typePlayerConnection = Class.forName("net.minecraft.network.NetHandlerPlayServer"); + playerConnection = typeNMSPlayer.getField("field_71135_a"); + sendPacket = typePlayerConnection.getMethod("func_147359_a", Class.forName("net.minecraft.network.Packet")); + }else{ Class typeNMSPlayer = Class.forName(a("EntityPlayer")); Class typePlayerConnection = Class.forName(a("PlayerConnection")); - getHandle = typeCraftPlayer.getMethod("getHandle"); playerConnection = typeNMSPlayer.getField("playerConnection"); sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(a("Packet"))); - init = true; - } catch (Exception e) { - Log.w("C 兼容性工具初始化失败 可能造成部分功能不可用!"); - Log.d(e); } + init = true; + } catch (Exception e) { + Log.w("C 兼容性工具初始化失败 可能造成部分功能不可用!"); + Log.d(e); } } @@ -386,7 +380,7 @@ public class C { private static Constructor packetTitleSetTimeConstructor; private static Object[] actions; static { - if(cauldron&&uranium) { + if(cauldron1710 &&uranium) { try { packetActions = Class.forName("cc.uraniummc.packet.S45PacketTitle$Type"); packetTitle = Class.forName("cc.uraniummc.packet.S45PacketTitle");