mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
add super enchant compatibility
This commit is contained in:
parent
55f6b94ba9
commit
f5343440e4
4 changed files with 171 additions and 1 deletions
|
|
@ -0,0 +1,73 @@
|
|||
package xyz.alexcrea.cuanvil.enchant.wrapped;
|
||||
|
||||
import com.maddoxh.superEnchants.enchants.CustomEnchant;
|
||||
import com.maddoxh.superEnchants.enchants.EnchantManager;
|
||||
import com.maddoxh.superEnchants.items.EnchantApplicator;
|
||||
import com.maddoxh.superEnchants.items.EnchantReader;
|
||||
import com.maddoxh.superEnchants.util.ConflictChecker;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentBase;
|
||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CASuperEnchantEnchantment extends CAEnchantmentBase implements AdditionalTestEnchantment {
|
||||
|
||||
private @NotNull CustomEnchant enchant;
|
||||
private @NotNull EnchantManager enchantManager;
|
||||
|
||||
public CASuperEnchantEnchantment(@NotNull CustomEnchant enchant, @NotNull Plugin plugin, @NotNull EnchantManager enchantManager) {
|
||||
super(NamespacedKey.fromString(enchant.getId(), plugin), EnchantmentRarity.NO_RARITY, enchant.getMaxLevel());
|
||||
|
||||
this.enchant = enchant;
|
||||
this.enchantManager = enchantManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLevel(@NotNull ItemStack item, @NotNull ItemMeta meta) {
|
||||
return EnchantReader.INSTANCE.getEnchantLevel(item, enchant.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnchantmentPresent(@NotNull ItemStack item, @NotNull ItemMeta meta) {
|
||||
return EnchantReader.INSTANCE.hasEnchant(item, enchant.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addEnchantmentUnsafe(@NotNull ItemStack item, int level) {
|
||||
EnchantApplicator.INSTANCE.applyEnchant(item, enchant.getId(), level);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFrom(@NotNull ItemStack item) {
|
||||
EnchantApplicator.INSTANCE.removeEnchant(item, enchant.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnchantConflict(@NotNull Map<CAEnchantment, Integer> enchantments, @NotNull NamespacedKey itemType) {
|
||||
var idMap = new HashMap<String, Integer>();
|
||||
|
||||
enchantments.forEach((enchant, level) -> {
|
||||
if(!(enchant instanceof CASuperEnchantEnchantment superEnch)) return;
|
||||
idMap.put(superEnch.enchant.getId(), level);
|
||||
});
|
||||
|
||||
return ConflictChecker.INSTANCE.hasConflict(
|
||||
idMap,
|
||||
enchant.getId(),
|
||||
enchantManager
|
||||
) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemConflict(@NotNull Map<CAEnchantment, Integer> enchantments, @NotNull NamespacedKey itemType, @NotNull ItemStack item) {
|
||||
return !enchant.canApplyTo(item.getType());
|
||||
}
|
||||
}
|
||||
|
|
@ -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