mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Compatibility with most plugin using wesjd anvil gui
This commit is contained in:
parent
74a211bc88
commit
a915d5ad80
15 changed files with 267 additions and 1 deletions
|
|
@ -0,0 +1,24 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui
|
||||||
|
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
|
||||||
|
interface ExternGuiTester {
|
||||||
|
|
||||||
|
val wesjdAnvilGuiName: String?
|
||||||
|
|
||||||
|
fun getContainerClass(inventory: InventoryView): Class<Any>?
|
||||||
|
|
||||||
|
fun testIfGui(inventory: InventoryView): Boolean {
|
||||||
|
val clazz = getContainerClass(inventory)
|
||||||
|
if(clazz == null) return false
|
||||||
|
|
||||||
|
val expectedWesjdGuiPath = "anvilgui.version.$wesjdAnvilGuiName"
|
||||||
|
|
||||||
|
val clazzName = clazz.name
|
||||||
|
val isWejdsGui = clazzName.contains(expectedWesjdGuiPath)
|
||||||
|
|
||||||
|
return isWejdsGui
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_17R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_17_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_18R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_18_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_18R2_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_18_R2"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_19R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_19_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_19R2_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_19_R2"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_19R3_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_19_R3"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_20R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
import kotlin.jvm.javaClass
|
||||||
|
|
||||||
|
class v1_20R2_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R2"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
import kotlin.jvm.javaClass
|
||||||
|
|
||||||
|
class v1_20R3_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R3"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
import kotlin.jvm.javaClass
|
||||||
|
|
||||||
|
class v1_20R4_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R4"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_21R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_21_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if(view !is CraftInventoryView<*>) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -56,7 +56,7 @@ class AnvilEventListener(private val packetManager: PacketManager) : Listener {
|
||||||
/**
|
/**
|
||||||
* Event handler logic for when an anvil contains items to be combined
|
* Event handler logic for when an anvil contains items to be combined
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = HIGHEST)
|
@EventHandler(priority = HIGHEST, ignoreCancelled = true)
|
||||||
fun anvilCombineCheck(event: PrepareAnvilEvent) {
|
fun anvilCombineCheck(event: PrepareAnvilEvent) {
|
||||||
// Test if the event should bypass custom anvil.
|
// Test if the event should bypass custom anvil.
|
||||||
if(DependencyManager.tryEventPreAnvilBypass(event)) return
|
if(DependencyManager.tryEventPreAnvilBypass(event)) return
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
import org.bukkit.inventory.AnvilInventory
|
import org.bukkit.inventory.AnvilInventory
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
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
|
||||||
import xyz.alexcrea.cuanvil.dependency.scheduler.BukkitScheduler
|
import xyz.alexcrea.cuanvil.dependency.scheduler.BukkitScheduler
|
||||||
|
|
@ -17,6 +19,8 @@ object DependencyManager {
|
||||||
var isFolia: Boolean = false
|
var isFolia: Boolean = false
|
||||||
lateinit var scheduler: TaskScheduler
|
lateinit var scheduler: TaskScheduler
|
||||||
lateinit var packetManager: PacketManager
|
lateinit var packetManager: PacketManager
|
||||||
|
var externGuiTester: ExternGuiTester? = null
|
||||||
|
|
||||||
var enchantmentSquaredCompatibility: EnchantmentSquaredDependency? = null
|
var enchantmentSquaredCompatibility: EnchantmentSquaredDependency? = null
|
||||||
var ecoEnchantCompatibility: EcoEnchantDependency? = null
|
var ecoEnchantCompatibility: EcoEnchantDependency? = null
|
||||||
var disenchantmentCompatibility: DisenchantmentDependency? = null
|
var disenchantmentCompatibility: DisenchantmentDependency? = null
|
||||||
|
|
@ -35,6 +39,7 @@ object DependencyManager {
|
||||||
// Packet Manager
|
// Packet Manager
|
||||||
val forceProtocolib = ConfigHolder.DEFAULT_CONFIG.config.getBoolean("force_protocolib", false)
|
val forceProtocolib = ConfigHolder.DEFAULT_CONFIG.config.getBoolean("force_protocolib", false)
|
||||||
packetManager = PacketManagerSelector.selectPacketManager(forceProtocolib)
|
packetManager = PacketManagerSelector.selectPacketManager(forceProtocolib)
|
||||||
|
externGuiTester = GuiTesterSelector.selectGuiTester
|
||||||
|
|
||||||
// Enchantment Squared dependency
|
// Enchantment Squared dependency
|
||||||
if(pluginManager.isPluginEnabled("EnchantsSquared")){
|
if(pluginManager.isPluginEnabled("EnchantsSquared")){
|
||||||
|
|
@ -81,6 +86,10 @@ object DependencyManager {
|
||||||
|
|
||||||
if(disenchantmentCompatibility?.testPrepareAnvil(event) == true) bypass = true
|
if(disenchantmentCompatibility?.testPrepareAnvil(event) == true) bypass = true
|
||||||
|
|
||||||
|
|
||||||
|
// Test if the inventory is a gui(version specific)
|
||||||
|
if(!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true
|
||||||
|
|
||||||
return bypass
|
return bypass
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -89,6 +98,9 @@ object DependencyManager {
|
||||||
|
|
||||||
if(disenchantmentCompatibility?.testAnvilResult(event, inventory) == true) bypass = true
|
if(disenchantmentCompatibility?.testAnvilResult(event, inventory) == true) bypass = true
|
||||||
|
|
||||||
|
// Test if the inventory is a gui(version specific)
|
||||||
|
if(!bypass && (externGuiTester?.testIfGui(event.view) == true)) bypass = true
|
||||||
|
|
||||||
return bypass
|
return bypass
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui
|
||||||
|
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.version.*;
|
||||||
|
import xyz.alexcrea.cuanvil.update.UpdateUtils
|
||||||
|
|
||||||
|
object GuiTesterSelector {
|
||||||
|
|
||||||
|
val selectGuiTester: ExternGuiTester?
|
||||||
|
get() {
|
||||||
|
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()
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue