From 314680631725585171cd333dec96b2d6bba5046a Mon Sep 17 00:00:00 2001 From: CJCrafter Date: Wed, 20 Jul 2022 18:37:50 -0700 Subject: [PATCH] #2 Add Mythic Mobs support --- build.gradle.kts | 7 +++ .../armormechanics/ArmorMechanics.java | 13 +++++- .../lib/MythicMobsArmorDrop.java | 44 +++++++++++++++++++ .../listeners/MythicMobsListener.java | 21 +++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/cjcrafter/armormechanics/lib/MythicMobsArmorDrop.java create mode 100644 src/main/java/me/cjcrafter/armormechanics/listeners/MythicMobsListener.java diff --git a/build.gradle.kts b/build.gradle.kts index 6e2fa61..24d3765 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,12 +38,19 @@ repositories { password = "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" // this is a public token created in CJCrafter's name which will never expire } } + + maven { + name = "lumine-repo" + url = uri("http://mvn.lumine.io/repository/maven-public/") + isAllowInsecureProtocol = true + } } dependencies { compileOnly("org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT") compileOnly("me.deecaad:mechanicscore:1.3.3-BETA") compileOnly("me.deecaad:weaponmechanics:1.8.3-BETA") + implementation("io.lumine:Mythic-Dist:5.0.1-SNAPSHOT") implementation("org.bstats:bstats-bukkit:3.0.0") } diff --git a/src/main/java/me/cjcrafter/armormechanics/ArmorMechanics.java b/src/main/java/me/cjcrafter/armormechanics/ArmorMechanics.java index 7a3852a..0bcfe65 100644 --- a/src/main/java/me/cjcrafter/armormechanics/ArmorMechanics.java +++ b/src/main/java/me/cjcrafter/armormechanics/ArmorMechanics.java @@ -5,6 +5,7 @@ import me.deecaad.core.file.SerializerException; import me.deecaad.core.utils.Debugger; import me.deecaad.core.utils.FileUtil; +import me.deecaad.core.utils.LogLevel; import me.deecaad.core.utils.ReflectionUtil; import org.bstats.bukkit.Metrics; import org.bstats.charts.SimplePie; @@ -24,7 +25,7 @@ public class ArmorMechanics extends JavaPlugin { public static ArmorMechanics INSTANCE; - Debugger debug; + public Debugger debug; private Metrics metrics; public final Map effects = new HashMap<>(); @@ -62,6 +63,16 @@ public void onEnable() { pm.registerEvents(new PreventRemoveListener(), this); pm.registerEvents(new WeaponMechanicsDamageListener(), this); + // Try to hook into MythicMobs, an error will be thrown if the user is + // using any version below v5.0.0 + if (pm.getPlugin("MythicMobs") != null) { + try { + pm.registerEvents(new MythicMobsListener(), this); + } catch (Throwable e) { + debug.log(LogLevel.ERROR, "Could not hook into MythicMobs", e); + } + } + Command.register(); } diff --git a/src/main/java/me/cjcrafter/armormechanics/lib/MythicMobsArmorDrop.java b/src/main/java/me/cjcrafter/armormechanics/lib/MythicMobsArmorDrop.java new file mode 100644 index 0000000..be1136f --- /dev/null +++ b/src/main/java/me/cjcrafter/armormechanics/lib/MythicMobsArmorDrop.java @@ -0,0 +1,44 @@ +package me.cjcrafter.armormechanics.lib; + +import io.lumine.mythic.api.adapters.AbstractItemStack; +import io.lumine.mythic.api.config.MythicLineConfig; +import io.lumine.mythic.api.drops.DropMetadata; +import io.lumine.mythic.api.drops.IItemDrop; +import io.lumine.mythic.bukkit.adapters.BukkitItemStack; +import me.cjcrafter.armormechanics.ArmorMechanics; +import me.deecaad.core.utils.StringUtil; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +public class MythicMobsArmorDrop implements IItemDrop { + + private final String armorTitle; + + public MythicMobsArmorDrop(MythicLineConfig config, String argument) { + String title = config.getString(new String[]{ "armorTitle", "armor" }, "", ""); + + // Since we want to ignore spelling/capitalization errors, we should + // make sure the given 'title' matches to an actual armor-title. + List startsWith = new ArrayList<>(); + Set options = ArmorMechanics.INSTANCE.armors.keySet(); + for (String temp : options) { + if (temp.toLowerCase(Locale.ROOT).startsWith(title.toLowerCase(Locale.ROOT))) + startsWith.add(title); + } + + armorTitle = StringUtil.didYouMean(title, startsWith.isEmpty() ? options : startsWith); + } + + @Override + public AbstractItemStack getDrop(DropMetadata dropMetadata, double v) { + ItemStack item = ArmorMechanics.INSTANCE.armors.get(armorTitle); + + // Just in case MythicMobs edits this item, we want to use a clone + // to avoid possible modification. + return new BukkitItemStack(item.clone()); + } +} diff --git a/src/main/java/me/cjcrafter/armormechanics/listeners/MythicMobsListener.java b/src/main/java/me/cjcrafter/armormechanics/listeners/MythicMobsListener.java new file mode 100644 index 0000000..e0ea36f --- /dev/null +++ b/src/main/java/me/cjcrafter/armormechanics/listeners/MythicMobsListener.java @@ -0,0 +1,21 @@ +package me.cjcrafter.armormechanics.listeners; + +import io.lumine.mythic.bukkit.events.MythicDropLoadEvent; +import me.cjcrafter.armormechanics.ArmorMechanics; +import me.cjcrafter.armormechanics.lib.MythicMobsArmorDrop; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class MythicMobsListener implements Listener { + + public MythicMobsListener() { + ArmorMechanics.INSTANCE.debug.info("Hooking into MythicMobs"); + } + + @EventHandler + public void onMythicDropLoad(MythicDropLoadEvent event) { + if (event.getDropName().equalsIgnoreCase("armorMechanicsArmor")) { + event.register(new MythicMobsArmorDrop(event.getConfig(), event.getArgument())); + } + } +}