mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
start of nms generalization
This commit is contained in:
parent
c94c85a3cf
commit
c166d2a78a
19 changed files with 63 additions and 421 deletions
|
|
@ -0,0 +1,58 @@
|
|||
package xyz.alexcrea.cuanvil.dependency.gui
|
||||
|
||||
import org.bukkit.inventory.InventoryView
|
||||
import xyz.alexcrea.cuanvil.dependency.MinecraftVersionUtil
|
||||
import java.lang.reflect.Method
|
||||
|
||||
class GenericExternGuiTester: ExternGuiTester {
|
||||
|
||||
companion object {
|
||||
private const val ANVIL_CLASS_NAME = "org.bukkit.craftbukkit.inventory.view.CraftAnvilView"
|
||||
private const val INV_CLASS_NAME = "org.bukkit.craftbukkit.inventory.CraftInventoryView"
|
||||
private const val HANDLE_METHOD_NAME = "getHandle"
|
||||
}
|
||||
|
||||
var tested = false
|
||||
|
||||
var testedClass: String? = null
|
||||
lateinit var getHandleMethod: Method
|
||||
|
||||
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||
// In case we are in a test environment
|
||||
if(!tested) testClassExist()
|
||||
|
||||
if(!testedClass.contentEquals(view.javaClass.name))
|
||||
return null
|
||||
|
||||
val container = getHandleMethod.invoke(view)
|
||||
return container.javaClass
|
||||
}
|
||||
|
||||
fun tryFromClass(className: String) {
|
||||
val clazz = Class.forName(className)
|
||||
testedClass = className
|
||||
|
||||
getHandleMethod = clazz.getMethod(HANDLE_METHOD_NAME)
|
||||
}
|
||||
|
||||
fun testClassExist() {
|
||||
tested = true
|
||||
|
||||
// We first try to get craft anvil interface,
|
||||
// but is absent on old version so we try craft inventory view before
|
||||
try {
|
||||
tryFromClass(ANVIL_CLASS_NAME)
|
||||
return
|
||||
}
|
||||
catch (_: ClassNotFoundException) {}
|
||||
catch (_: NoSuchMethodException) {}
|
||||
|
||||
try {
|
||||
tryFromClass(INV_CLASS_NAME)
|
||||
return
|
||||
}
|
||||
catch (_: ClassNotFoundException) {}
|
||||
catch (_: NoSuchMethodException) {}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package xyz.alexcrea.cuanvil.dependency.gui
|
||||
|
||||
import xyz.alexcrea.cuanvil.dependency.gui.version.*;
|
||||
import xyz.alexcrea.cuanvil.update.UpdateUtils
|
||||
|
||||
object GuiTesterSelector {
|
||||
|
|
@ -10,47 +9,7 @@ object GuiTesterSelector {
|
|||
val versionParts = UpdateUtils.currentMinecraftVersionArray()
|
||||
if (versionParts[0] != 1) return null
|
||||
|
||||
return when (versionParts[1]) {
|
||||
// Can't support 1.16.5 bc 1.16.5 paper userdev do not exist
|
||||
|
||||
17 -> when (versionParts[2]) {
|
||||
0, 1 -> v1_17R1_ExternGuiTester()
|
||||
else -> null
|
||||
}
|
||||
|
||||
18 -> when (versionParts[2]) {
|
||||
0, 1 -> v1_18R1_ExternGuiTester()
|
||||
2 -> v1_18R2_ExternGuiTester()
|
||||
else -> null
|
||||
}
|
||||
|
||||
19 -> when (versionParts[2]) {
|
||||
0, 1, 2 -> v1_19R1_ExternGuiTester()
|
||||
3 -> v1_19R2_ExternGuiTester()
|
||||
4 -> v1_19R3_ExternGuiTester()
|
||||
else -> null
|
||||
}
|
||||
|
||||
20 -> when (versionParts[2]) {
|
||||
0, 1 -> v1_20R1_ExternGuiTester()
|
||||
2 -> v1_20R2_ExternGuiTester()
|
||||
3, 4 -> v1_20R3_ExternGuiTester()
|
||||
5, 6 -> v1_20R4_ExternGuiTester()
|
||||
else -> null
|
||||
}
|
||||
|
||||
21 -> when (versionParts[2]) {
|
||||
0, 1 -> v1_21R1_ExternGuiTester()
|
||||
2, 3 -> v1_21R2_ExternGuiTester()
|
||||
4 -> v1_21R3_ExternGuiTester()
|
||||
5 -> v1_21R4_ExternGuiTester()
|
||||
6, 7, 8 -> v1_21R5_ExternGuiTester()
|
||||
9, 10 -> v1_21R6_ExternGuiTester()
|
||||
else -> null
|
||||
}
|
||||
|
||||
else -> null
|
||||
}
|
||||
return GenericExternGuiTester()
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue