feat(bukkit): 支持 Minecraft 1.20 版本
This commit is contained in:
@@ -65,28 +65,32 @@ abstract class BukkitChatInvoke {
|
|||||||
return base.getClass(['net.minecraft.server', this.nmsVersion, name].join('.'))
|
return base.getClass(['net.minecraft.server', this.nmsVersion, name].join('.'))
|
||||||
}
|
}
|
||||||
|
|
||||||
remapMethod(clazz: any, origin: string, test: string, params: any) {
|
remapMethod(clazz: any, methods: string[], params: any) {
|
||||||
|
for (const method of methods) {
|
||||||
try {
|
try {
|
||||||
return clazz.getMethod(origin, params)
|
|
||||||
} catch (ex: any) {
|
|
||||||
if (this.RemapUtils) {
|
if (this.RemapUtils) {
|
||||||
return clazz.getMethod(this.RemapUtils.mapMethod(clazz, origin, params), params)
|
return clazz.getMethod(this.RemapUtils.mapMethod(clazz, method, params), params)
|
||||||
} else {
|
} else {
|
||||||
return clazz.getMethod(test, params)
|
return clazz.getMethod(method, params)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
throw new Error(`Class ${clazz} not found method ${methods}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
remapFieldName(clazz: any, origin: string, test: string) {
|
remapFieldName(clazz: any, fields: string[]) {
|
||||||
|
for (const field of fields) {
|
||||||
try {
|
try {
|
||||||
return clazz.getField(origin)
|
|
||||||
} catch (ex: any) {
|
|
||||||
if (this.RemapUtils) {
|
if (this.RemapUtils) {
|
||||||
return clazz.getField(this.RemapUtils.mapFieldName(clazz, origin))
|
return clazz.getField(this.RemapUtils.mapFieldName(clazz, field))
|
||||||
} else {
|
} else {
|
||||||
return clazz.getField(test)
|
return clazz.getField(field)
|
||||||
|
}
|
||||||
|
} catch (ex: any) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
throw new Error(`Class ${clazz} not found field ${fields}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
json(sender: any, json: string) {
|
json(sender: any, json: string) {
|
||||||
@@ -107,10 +111,10 @@ abstract class BukkitChatInvoke {
|
|||||||
|
|
||||||
class BukkitChatInvokeBase extends BukkitChatInvoke {
|
class BukkitChatInvokeBase extends BukkitChatInvoke {
|
||||||
getSendPacketMethodName(playerConnectionClass: any) {
|
getSendPacketMethodName(playerConnectionClass: any) {
|
||||||
return this.remapMethod(playerConnectionClass, 'sendPacket', 'func_179290_a', this.getPacketClass()).getName()
|
return this.remapMethod(playerConnectionClass, ['sendPacket', 'a', 'func_179290_a'], this.getPacketClass()).getName()
|
||||||
}
|
}
|
||||||
getNmsChatSerializerMethodName(nmsChatSerializerClass: any) {
|
getNmsChatSerializerMethodName(nmsChatSerializerClass: any) {
|
||||||
let nmsChatSerializerMethod = this.remapMethod(nmsChatSerializerClass, 'a', 'func_150699_a', base.getClass('java.lang.String'))
|
let nmsChatSerializerMethod = this.remapMethod(nmsChatSerializerClass, ['serialize', 'a', 'func_150699_a'], base.getClass('java.lang.String'))
|
||||||
return nmsChatSerializerMethod.getName()
|
return nmsChatSerializerMethod.getName()
|
||||||
}
|
}
|
||||||
getPacketPlayOutChat(sender: any, json: any, type: number) {
|
getPacketPlayOutChat(sender: any, json: any, type: number) {
|
||||||
@@ -123,7 +127,7 @@ class BukkitChatInvokeBase extends BukkitChatInvoke {
|
|||||||
return this.nmsCls("PacketPlayOutChat")
|
return this.nmsCls("PacketPlayOutChat")
|
||||||
}
|
}
|
||||||
getPlayerConnectionField() {
|
getPlayerConnectionField() {
|
||||||
return this.remapFieldName(this.nmsCls('EntityPlayer'), 'playerConnection', 'field_71135_a')
|
return this.remapFieldName(this.nmsCls('EntityPlayer'), ['playerConnection', 'field_71135_a'])
|
||||||
}
|
}
|
||||||
getPacketClass() {
|
getPacketClass() {
|
||||||
return this.nmsCls('Packet')
|
return this.nmsCls('Packet')
|
||||||
@@ -174,13 +178,27 @@ class BukkitChatInvoke_1_19 extends BukkitChatInvoke_1_18_2 {
|
|||||||
return new this.PacketPlayOutChat(this.ChatSerializer[this.nmsChatSerializerMethodName](json), type)
|
return new this.PacketPlayOutChat(this.ChatSerializer[this.nmsChatSerializerMethodName](json), type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
class BukkitChatInvoke_1_20 extends BukkitChatInvoke_1_19 {
|
||||||
|
getNmsChatSerializerClass() {
|
||||||
|
return base.getClass('net.minecraft.network.chat.IChatBaseComponent')
|
||||||
|
}
|
||||||
|
getNmsChatSerializerMethodName(nmsChatSerializerClass: any) {
|
||||||
|
let nmsChatSerializerMethod = this.remapMethod(nmsChatSerializerClass, ['literal', 'a'], base.getClass('java.lang.String'))
|
||||||
|
return nmsChatSerializerMethod.getName()
|
||||||
|
}
|
||||||
|
getPlayerConnectionField() {
|
||||||
|
return base.getClass('net.minecraft.server.level.EntityPlayer').getField('f')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
|
let Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
let nmsVersion = Bukkit.getServer().class.name.split('.')[3]
|
let nmsVersion = Bukkit.getServer().class.name.split('.')[3]
|
||||||
let nmsSubVersion = nmsVersion.split("_")[1]
|
let nmsSubVersion = nmsVersion.split("_")[1]
|
||||||
if (nmsSubVersion >= 19) {
|
if (nmsSubVersion >= 20) {
|
||||||
|
bukkitChatInvoke = new BukkitChatInvoke_1_20(nmsVersion)
|
||||||
|
} else if (nmsSubVersion >= 19) {
|
||||||
bukkitChatInvoke = new BukkitChatInvoke_1_19(nmsVersion)
|
bukkitChatInvoke = new BukkitChatInvoke_1_19(nmsVersion)
|
||||||
} else if (nmsSubVersion >= 18) {
|
} else if (nmsSubVersion >= 18) {
|
||||||
bukkitChatInvoke = new BukkitChatInvoke_1_18_2(nmsVersion)
|
bukkitChatInvoke = new BukkitChatInvoke_1_18_2(nmsVersion)
|
||||||
|
|||||||
Reference in New Issue
Block a user