mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-08-28 08:25:56 +02:00
add super enchant compatibility
This commit is contained in:
parent
55f6b94ba9
commit
f5343440e4
4 changed files with 171 additions and 1 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package xyz.alexcrea.cuanvil.dependency
|
||||
|
||||
import com.maddoxh.superEnchants.SuperEnchants
|
||||
import io.delilaheve.CustomAnvil
|
||||
import net.kyori.adventure.text.Component
|
||||
import org.bukkit.Bukkit
|
||||
|
|
@ -104,6 +105,12 @@ object DependencyManager {
|
|||
if (pluginManager.isPluginEnabled("ItemsAdder"))
|
||||
genericDependencies.add(GenericPluginDependency(pluginManager.getPlugin("ItemsAdder")!!))
|
||||
|
||||
if (pluginManager.isPluginEnabled("SuperEnchants")){
|
||||
val compatibility = SuperEnchantDependency(pluginManager.getPlugin("SuperEnchants")!! as SuperEnchants)
|
||||
if(compatibility.registerEnchantments())
|
||||
genericDependencies.add(compatibility)
|
||||
}
|
||||
|
||||
for (dependency in genericDependencies)
|
||||
dependency.redirectListeners()
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import org.bukkit.event.inventory.PrepareAnvilEvent
|
|||
import org.bukkit.plugin.Plugin
|
||||
import org.bukkit.plugin.RegisteredListener
|
||||
|
||||
open class GenericPluginDependency(protected val plugin: Plugin) {
|
||||
open class GenericPluginDependency(protected open val plugin: Plugin, private val testPrepare: Boolean = true) {
|
||||
|
||||
private val preAnvil = ArrayList<RegisteredListener>()
|
||||
private val postAnvil = ArrayList<RegisteredListener>()
|
||||
|
|
@ -40,6 +40,8 @@ open class GenericPluginDependency(protected val plugin: Plugin) {
|
|||
}
|
||||
|
||||
open fun testPrepareAnvil(event: PrepareAnvilEvent): Boolean {
|
||||
if(!testPrepare) return false
|
||||
|
||||
val previousResult = event.result
|
||||
event.result = null
|
||||
|
||||
|
|
@ -53,6 +55,8 @@ open class GenericPluginDependency(protected val plugin: Plugin) {
|
|||
}
|
||||
|
||||
open fun testAnvilResult(event: InventoryClickEvent): Boolean {
|
||||
if(!testPrepare) return false
|
||||
|
||||
for (registeredListener in postAnvil) {
|
||||
registeredListener.callEvent(event)
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,86 @@
|
|||
package xyz.alexcrea.cuanvil.dependency.plugins
|
||||
|
||||
import com.maddoxh.superEnchants.SuperEnchants
|
||||
import com.maddoxh.superEnchants.enchants.EnchantManager
|
||||
import com.maddoxh.superEnchants.listeners.AnvilListener
|
||||
import io.delilaheve.CustomAnvil
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import org.bukkit.plugin.RegisteredListener
|
||||
import xyz.alexcrea.cuanvil.api.EnchantmentApi
|
||||
import xyz.alexcrea.cuanvil.enchant.wrapped.CASuperEnchantEnchantment
|
||||
import java.util.logging.Level
|
||||
|
||||
class SuperEnchantDependency(override val plugin: SuperEnchants): GenericPluginDependency(plugin, false) {
|
||||
|
||||
lateinit var enchManager: EnchantManager
|
||||
val enchantments = ArrayList<CASuperEnchantEnchantment>()
|
||||
|
||||
fun registerEnchantments(): Boolean{
|
||||
CustomAnvil.instance.logger.info("Preparing Super Enchant compatibility...")
|
||||
|
||||
val field = SuperEnchants::class.java.getDeclaredField("enchantManager")
|
||||
if(field == null) {
|
||||
CustomAnvil.instance.logger.log(Level.SEVERE, "Failed to initialize Super Enchant compatibility")
|
||||
return false
|
||||
}
|
||||
field.setAccessible(true)
|
||||
|
||||
enchManager = field.get(plugin) as EnchantManager
|
||||
overrideReloadCommand()
|
||||
|
||||
reload()
|
||||
return true
|
||||
}
|
||||
|
||||
fun reload() {
|
||||
for (enchantment in enchantments) {
|
||||
EnchantmentApi.unregisterEnchantment(enchantment)
|
||||
}
|
||||
enchantments.clear()
|
||||
|
||||
// Register enchantments
|
||||
for (enchant in enchManager.getAll()) {
|
||||
val enchantment = CASuperEnchantEnchantment(enchant, plugin, enchManager)
|
||||
enchantments.add(enchantment)
|
||||
|
||||
EnchantmentApi.registerEnchantment(enchantment)
|
||||
}
|
||||
}
|
||||
|
||||
private fun overrideReloadCommand() {
|
||||
val reload = CustomAnvil.instance.getCommand("sereload")
|
||||
|
||||
reload?.setExecutor(ReloadInterceptor(reload.executor))
|
||||
}
|
||||
|
||||
inner class ReloadInterceptor(val other: CommandExecutor): CommandExecutor {
|
||||
|
||||
override fun onCommand(
|
||||
sender: CommandSender,
|
||||
command: Command,
|
||||
label: String,
|
||||
args: Array<out String?>
|
||||
): Boolean {
|
||||
val result = other.onCommand(sender, command, label, args)
|
||||
|
||||
CustomAnvil.log("Detected SuperEnchant reload")
|
||||
reload()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun fillPostAnvil(postAnvil: ArrayList<RegisteredListener>, preAnvil: ArrayList<RegisteredListener>) {
|
||||
|
||||
for (registeredListener in InventoryClickEvent.getHandlerList().registeredListeners) {
|
||||
|
||||
if (registeredListener.listener.javaClass != AnvilListener::class.java) continue
|
||||
postAnvil.add(registeredListener)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue