bring back old gui tester

This commit is contained in:
alexcrea 2026-01-01 17:15:49 +01:00
parent 161ef6ba91
commit fe2196626a
Signed by: alexcrea
GPG key ID: E346CD16413450E3
4 changed files with 55 additions and 25 deletions

View file

@ -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
}
}

View file

@ -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

View file

@ -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
}
} }

View file

@ -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