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());