diff --git a/pom.xml b/pom.xml index 5e7ea3a5..7c8d5fd2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 net.Indyuce MMOItems - 6.6.3 + 6.6.4 MMOItems A great item solution for your RPG server!! diff --git a/src/main/java/net/Indyuce/mmoitems/MMOItems.java b/src/main/java/net/Indyuce/mmoitems/MMOItems.java index 41298178..a46e1137 100644 --- a/src/main/java/net/Indyuce/mmoitems/MMOItems.java +++ b/src/main/java/net/Indyuce/mmoitems/MMOItems.java @@ -24,7 +24,6 @@ import net.Indyuce.mmoitems.comp.McMMONonRPGHook; import net.Indyuce.mmoitems.comp.PhatLootsHook; import net.Indyuce.mmoitems.comp.RealDualWieldHook; import net.Indyuce.mmoitems.comp.WorldEditSupport; -import net.Indyuce.mmoitems.comp.denizen.DenizenHook; import net.Indyuce.mmoitems.comp.eco.VaultSupport; import net.Indyuce.mmoitems.comp.enchants.CrazyEnchantsStat; import net.Indyuce.mmoitems.comp.enchants.EnchantPlugin; @@ -40,7 +39,7 @@ import net.Indyuce.mmoitems.comp.itemglow.NoGlowListener; import net.Indyuce.mmoitems.comp.mmocore.MMOCoreMMOLoader; import net.Indyuce.mmoitems.comp.mmoinventory.MMOInventorySupport; import net.Indyuce.mmoitems.comp.mythicmobs.LootsplosionListener; -import net.Indyuce.mmoitems.comp.mythicmobs.MythicMobsLoader; +import net.Indyuce.mmoitems.comp.mythicmobs.MythicMobsCompatibility; import net.Indyuce.mmoitems.comp.parse.StringInputParser; import net.Indyuce.mmoitems.comp.parse.placeholders.DefaultPlaceholderParser; import net.Indyuce.mmoitems.comp.parse.placeholders.PlaceholderAPIParser; @@ -184,7 +183,7 @@ public class MMOItems extends LuminePlugin { // registering here so the stats will load with the templates if (Bukkit.getPluginManager().getPlugin("MythicMobs") != null) { - new MythicMobsLoader(); + new MythicMobsCompatibility(); if (getConfig().getBoolean("lootsplosion.enabled")) Bukkit.getPluginManager().registerEvents(new LootsplosionListener(), this); getLogger().log(Level.INFO, "Hooked onto MythicMobs"); } diff --git a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsCompatibility.java b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsCompatibility.java new file mode 100644 index 00000000..62b40e8c --- /dev/null +++ b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsCompatibility.java @@ -0,0 +1,61 @@ +package net.Indyuce.mmoitems.comp.mythicmobs; + +import io.lumine.xikage.mythicmobs.MythicMobs; +import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicReloadedEvent; +import io.lumine.xikage.mythicmobs.mobs.MythicMob; +import net.Indyuce.mmoitems.MMOItems; +import net.Indyuce.mmoitems.comp.mythicmobs.skill.MythicMobsAbility; +import net.Indyuce.mmoitems.comp.mythicmobs.stat.FactionDamage; +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.*; +import java.util.logging.Level; + +public class MythicMobsCompatibility implements Listener { + + public MythicMobsCompatibility() { + + // Gonna keep the try catch here for a safety net. + try { + for (String faction : this.getFactions()) + MMOItems.plugin.getStats().register(new FactionDamage(faction)); + } catch (NullPointerException ignored) { + } + + Bukkit.getPluginManager().registerEvents(this, MMOItems.plugin); + } + + @EventHandler + public void a(MythicReloadedEvent event) { + + // Update skills + MMOItems.plugin.getAbilities().getAll().stream().filter(ability -> ability instanceof MythicMobsAbility).map(ability -> (MythicMobsAbility) ability).forEach(ability -> { + try { + Optional opt = MythicMobs.inst().getSkillManager().getSkill(ability.getInternalName()); + Validate.isTrue(opt.isPresent(), "Could not find MM skill with name '" + ability.getInternalName() + "'"); + ability.setSkill(opt.get()); + } catch (IllegalArgumentException exception) { + MMOItems.plugin.getLogger().log(Level.WARNING, "Could not reload custom MM ability '" + ability.getID() + "': " + exception.getMessage()); + } + }); + } + + private Set getFactions() { + Set allFactions = new HashSet<>(); + + // Collects all mythic mobs + edited vanilla mobs in mythic mobs. + List mobs = new ArrayList<>(MythicMobs.inst().getMobManager().getVanillaTypes()); + mobs.addAll(MythicMobs.inst().getMobManager().getMobTypes()); + // Adds their faction to the set if it is set. + + for (MythicMob mob : mobs) + // Checks if it has a faction. + if (mob.hasFaction()) + allFactions.add(mob.getFaction()); + + return allFactions; + } +} diff --git a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsLoader.java b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsLoader.java deleted file mode 100644 index 919f3da9..00000000 --- a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/MythicMobsLoader.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.Indyuce.mmoitems.comp.mythicmobs; - -import io.lumine.xikage.mythicmobs.MythicMobs; -import io.lumine.xikage.mythicmobs.mobs.MythicMob; -import net.Indyuce.mmoitems.MMOItems; -import net.Indyuce.mmoitems.comp.mythicmobs.stat.FactionDamage; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class MythicMobsLoader { - - public MythicMobsLoader() { - // Gonna keep the try catch here for a safety net. - try { - for (String faction : this.getFactions()) { - MMOItems.plugin.getStats().register(new FactionDamage(faction)); - } - } catch (NullPointerException ignored) {} - } - - private Set getFactions(){ - // Returned Set. - Set allFactions = new HashSet<>(); - // Collects all mythic mobs + edited vanilla mobs in mythic mobs. - List mobs = new ArrayList<>(MythicMobs.inst().getMobManager().getVanillaTypes()); - mobs.addAll(MythicMobs.inst().getMobManager().getMobTypes()); - // Adds their faction to the set if it is set. - for (MythicMob mob : mobs) { - // Checks if it has a faction. - if (mob.hasFaction()) - allFactions.add(mob.getFaction()); - } - return allFactions; - } -} diff --git a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/skill/MythicMobsAbility.java b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/skill/MythicMobsAbility.java index c80cbcb6..b75fcba0 100644 --- a/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/skill/MythicMobsAbility.java +++ b/src/main/java/net/Indyuce/mmoitems/comp/mythicmobs/skill/MythicMobsAbility.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems.comp.mythicmobs.skill; +import io.lumine.mythic.lib.damage.AttackMetadata; import io.lumine.xikage.mythicmobs.MythicMobs; import io.lumine.xikage.mythicmobs.adapters.AbstractEntity; import io.lumine.xikage.mythicmobs.adapters.AbstractLocation; @@ -10,7 +11,6 @@ import io.lumine.xikage.mythicmobs.skills.SkillCaster; import io.lumine.xikage.mythicmobs.skills.SkillMetadata; import io.lumine.xikage.mythicmobs.skills.SkillTrigger; import net.Indyuce.mmoitems.ability.Ability; -import io.lumine.mythic.lib.damage.AttackMetadata; import net.Indyuce.mmoitems.stat.data.AbilityData; import org.apache.commons.lang.Validate; import org.bukkit.configuration.file.FileConfiguration; @@ -20,7 +20,7 @@ import java.util.HashSet; import java.util.Optional; public class MythicMobsAbility extends Ability { - private final Skill skill; + private Skill skill; public MythicMobsAbility(String id, FileConfiguration config) { super(id, config.getString("name")); @@ -29,7 +29,7 @@ public class MythicMobsAbility extends Ability { Validate.notNull(skillName, "Could not find MM skill name"); Optional opt = MythicMobs.inst().getSkillManager().getSkill(skillName); - Validate.isTrue(opt.isPresent(), "Could not find MM skill " + skillName); + Validate.isTrue(opt.isPresent(), "Could not find MM skill with name '" + skillName + "'"); skill = opt.get(); addModifier("cooldown", 10); @@ -45,6 +45,10 @@ public class MythicMobsAbility extends Ability { return skill.getInternalName(); } + public void setSkill(Skill skill) { + this.skill = skill; + } + @Override public void whenCast(AttackMetadata attackMeta, MythicMobsAbilityMetadata ability) { skill.execute(ability.getSkillMetadata());