mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
bring back old gui tester
This commit is contained in:
parent
161ef6ba91
commit
fe2196626a
4 changed files with 55 additions and 25 deletions
|
|
@ -1,16 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.gui
|
|
||||||
|
|
||||||
import org.bukkit.inventory.InventoryView
|
|
||||||
|
|
||||||
interface ExternGuiTester {
|
|
||||||
|
|
||||||
fun getContainerClass(view: InventoryView): Class<Any>?
|
|
||||||
|
|
||||||
fun testIfGui(inventory: InventoryView): Boolean {
|
|
||||||
// container class only allow default bukkit craft view or test class
|
|
||||||
|
|
||||||
val clazz = getContainerClass(inventory)
|
|
||||||
return clazz == null
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -16,7 +16,7 @@ import xyz.alexcrea.cuanvil.api.event.listener.CAPreAnvilBypassEvent
|
||||||
import xyz.alexcrea.cuanvil.api.event.listener.CATreatAnvilResultEvent
|
import xyz.alexcrea.cuanvil.api.event.listener.CATreatAnvilResultEvent
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||||
import xyz.alexcrea.cuanvil.dependency.datapack.DataPackDependency
|
import xyz.alexcrea.cuanvil.dependency.datapack.DataPackDependency
|
||||||
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
import xyz.alexcrea.cuanvil.dependency.gui.GenericExternGuiTester
|
||||||
import xyz.alexcrea.cuanvil.dependency.gui.GuiTesterSelector
|
import xyz.alexcrea.cuanvil.dependency.gui.GuiTesterSelector
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerSelector
|
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerSelector
|
||||||
|
|
@ -34,7 +34,7 @@ object DependencyManager {
|
||||||
|
|
||||||
lateinit var scheduler: TaskScheduler
|
lateinit var scheduler: TaskScheduler
|
||||||
lateinit var packetManager: PacketManager
|
lateinit var packetManager: PacketManager
|
||||||
var externGuiTester: ExternGuiTester? = null
|
var externGuiTester: GenericExternGuiTester? = null
|
||||||
|
|
||||||
var enchantmentSquaredCompatibility: EnchantmentSquaredDependency? = null
|
var enchantmentSquaredCompatibility: EnchantmentSquaredDependency? = null
|
||||||
var ecoEnchantCompatibility: EcoEnchantDependency? = null
|
var ecoEnchantCompatibility: EcoEnchantDependency? = null
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.gui
|
package xyz.alexcrea.cuanvil.dependency.gui
|
||||||
|
|
||||||
import org.bukkit.inventory.InventoryView
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.MinecraftVersionUtil
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
class GenericExternGuiTester: ExternGuiTester {
|
class GenericExternGuiTester {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val ANVIL_CLASS_NAME = "org.bukkit.craftbukkit.inventory.view.CraftAnvilView"
|
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 INV_CLASS_NAME = "org.bukkit.craftbukkit.inventory.CraftInventoryView"
|
||||||
private const val HANDLE_METHOD_NAME = "getHandle"
|
private const val HANDLE_METHOD_NAME = "getHandle"
|
||||||
|
|
||||||
|
private const val CANONICAL_PAPER_ANVIL_MENU = "net.minecraft.world.inventory.AnvilMenu"
|
||||||
}
|
}
|
||||||
|
|
||||||
var testExist = false
|
var testExist = false
|
||||||
|
|
@ -17,11 +21,7 @@ class GenericExternGuiTester: ExternGuiTester {
|
||||||
var testedClass: String? = null
|
var testedClass: String? = null
|
||||||
lateinit var getHandleMethod: Method
|
lateinit var getHandleMethod: Method
|
||||||
|
|
||||||
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
private fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
// In case we are in a test environment
|
|
||||||
if(!testExist) testClassExist()
|
|
||||||
if(inTesting) return view.javaClass //TEMPORARY
|
|
||||||
|
|
||||||
if(!testedClass.contentEquals(view.javaClass.name))
|
if(!testedClass.contentEquals(view.javaClass.name))
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
@ -58,4 +58,50 @@ class GenericExternGuiTester: ExternGuiTester {
|
||||||
inTesting = true
|
inTesting = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try if were in another plugin anvil inventory
|
||||||
|
fun testIfGui(inventory: InventoryView): Boolean {
|
||||||
|
// In case we are in a test environment
|
||||||
|
if(!testExist) testClassExist()
|
||||||
|
if(inTesting) return false
|
||||||
|
|
||||||
|
val clazz = getContainerClass(inventory) ?: return false
|
||||||
|
|
||||||
|
val clazzName = clazz.name
|
||||||
|
if(!PlatformUtil.isPaper){
|
||||||
|
// Blacklist gui causing issue
|
||||||
|
if (expectWesjd(clazzName)) return true
|
||||||
|
if (expectXenondevUI(clazzName)) return true
|
||||||
|
if (expectVanePortal(clazzName)) return true
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only allow cannonical anvil menu class
|
||||||
|
return !CANONICAL_PAPER_ANVIL_MENU.equals(clazzName, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Known custom implementations
|
||||||
|
fun expectWesjd(name: String): Boolean {
|
||||||
|
val expectedWesjdGuiPath = "anvilgui.version.Wrapper${MinecraftVersionUtil.craftbukkitVersion}"
|
||||||
|
|
||||||
|
return name.contains(expectedWesjdGuiPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val XenondevUIPrefix: String
|
||||||
|
get() = "xyz.xenondevs.inventoryaccess."
|
||||||
|
private val XenondevUISufix: String
|
||||||
|
get() = ".AnvilInventoryImpl"
|
||||||
|
|
||||||
|
fun expectXenondevUI(name: String): Boolean {
|
||||||
|
return name.startsWith(XenondevUIPrefix)
|
||||||
|
&& name.endsWith(XenondevUISufix)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun expectVanePortal(name: String): Boolean {
|
||||||
|
val expected = "org.oddlama.vane.core.menu.AnvilMenu\$AnvilContainer"
|
||||||
|
|
||||||
|
return name == expected
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -4,7 +4,7 @@ import xyz.alexcrea.cuanvil.update.UpdateUtils
|
||||||
|
|
||||||
object GuiTesterSelector {
|
object GuiTesterSelector {
|
||||||
|
|
||||||
val selectGuiTester: ExternGuiTester?
|
val selectGuiTester: GenericExternGuiTester?
|
||||||
get() {
|
get() {
|
||||||
val versionParts = UpdateUtils.currentMinecraftVersionArray()
|
val versionParts = UpdateUtils.currentMinecraftVersionArray()
|
||||||
if (versionParts[0] != 1) return null
|
if (versionParts[0] != 1) return null
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue