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('.'))
|
||||
}
|
||||
|
||||
remapMethod(clazz: any, origin: string, test: string, params: any) {
|
||||
try {
|
||||
return clazz.getMethod(origin, params)
|
||||
} catch (ex: any) {
|
||||
if (this.RemapUtils) {
|
||||
return clazz.getMethod(this.RemapUtils.mapMethod(clazz, origin, params), params)
|
||||
} else {
|
||||
return clazz.getMethod(test, params)
|
||||
remapMethod(clazz: any, methods: string[], params: any) {
|
||||
for (const method of methods) {
|
||||
try {
|
||||
if (this.RemapUtils) {
|
||||
return clazz.getMethod(this.RemapUtils.mapMethod(clazz, method, params), params)
|
||||
} else {
|
||||
return clazz.getMethod(method, params)
|
||||
}
|
||||
} catch (error) {
|
||||
}
|
||||
}
|
||||
throw new Error(`Class ${clazz} not found method ${methods}`)
|
||||
}
|
||||
|
||||
remapFieldName(clazz: any, origin: string, test: string) {
|
||||
try {
|
||||
return clazz.getField(origin)
|
||||
} catch (ex: any) {
|
||||
if (this.RemapUtils) {
|
||||
return clazz.getField(this.RemapUtils.mapFieldName(clazz, origin))
|
||||
} else {
|
||||
return clazz.getField(test)
|
||||
remapFieldName(clazz: any, fields: string[]) {
|
||||
for (const field of fields) {
|
||||
try {
|
||||
if (this.RemapUtils) {
|
||||
return clazz.getField(this.RemapUtils.mapFieldName(clazz, field))
|
||||
} else {
|
||||
return clazz.getField(field)
|
||||
}
|
||||
} catch (ex: any) {
|
||||
}
|
||||
}
|
||||
throw new Error(`Class ${clazz} not found field ${fields}`)
|
||||
}
|
||||
|
||||
json(sender: any, json: string) {
|
||||
@@ -107,10 +111,10 @@ abstract class BukkitChatInvoke {
|
||||
|
||||
class BukkitChatInvokeBase extends BukkitChatInvoke {
|
||||
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) {
|
||||
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()
|
||||
}
|
||||
getPacketPlayOutChat(sender: any, json: any, type: number) {
|
||||
@@ -123,7 +127,7 @@ class BukkitChatInvokeBase extends BukkitChatInvoke {
|
||||
return this.nmsCls("PacketPlayOutChat")
|
||||
}
|
||||
getPlayerConnectionField() {
|
||||
return this.remapFieldName(this.nmsCls('EntityPlayer'), 'playerConnection', 'field_71135_a')
|
||||
return this.remapFieldName(this.nmsCls('EntityPlayer'), ['playerConnection', 'field_71135_a'])
|
||||
}
|
||||
getPacketClass() {
|
||||
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)
|
||||
}
|
||||
}
|
||||
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 {
|
||||
let Bukkit: typeof org.bukkit.Bukkit = Java.type('org.bukkit.Bukkit')
|
||||
// @ts-ignore
|
||||
let nmsVersion = Bukkit.getServer().class.name.split('.')[3]
|
||||
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)
|
||||
} else if (nmsSubVersion >= 18) {
|
||||
bukkitChatInvoke = new BukkitChatInvoke_1_18_2(nmsVersion)
|
||||
|
||||
Reference in New Issue
Block a user