/mm reload now updates custom abilities

This commit is contained in:
Indyuce 2021-11-28 11:27:06 +01:00
parent c2d5043af4
commit b041efc62e
5 changed files with 71 additions and 45 deletions

View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>net.Indyuce</groupId>
<artifactId>MMOItems</artifactId>
<version>6.6.3</version>
<version>6.6.4</version>
<name>MMOItems</name>
<description>A great item solution for your RPG server!!</description>

View File

@ -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");
}

View File

@ -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<io.lumine.xikage.mythicmobs.skills.Skill> 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<String> getFactions() {
Set<String> allFactions = new HashSet<>();
// Collects all mythic mobs + edited vanilla mobs in mythic mobs.
List<MythicMob> 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;
}
}

View File

@ -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<String> getFactions(){
// Returned Set.
Set<String> allFactions = new HashSet<>();
// Collects all mythic mobs + edited vanilla mobs in mythic mobs.
List<MythicMob> 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;
}
}

View File

@ -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<MythicMobsAbilityMetadata> {
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<MythicMobsAbilityMetadata> {
Validate.notNull(skillName, "Could not find MM skill name");
Optional<io.lumine.xikage.mythicmobs.skills.Skill> 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<MythicMobsAbilityMetadata> {
return skill.getInternalName();
}
public void setSkill(Skill skill) {
this.skill = skill;
}
@Override
public void whenCast(AttackMetadata attackMeta, MythicMobsAbilityMetadata ability) {
skill.execute(ability.getSkillMetadata());