!improved mm skill compatibility

This commit is contained in:
Indyuce 2021-08-21 11:41:48 +02:00
parent d4071f532e
commit 8b85248918
20 changed files with 215 additions and 136 deletions

View File

@ -20,7 +20,7 @@ import net.Indyuce.mmocore.comp.flags.DefaultFlags;
import net.Indyuce.mmocore.comp.flags.FlagPlugin;
import net.Indyuce.mmocore.comp.flags.ResidenceFlags;
import net.Indyuce.mmocore.comp.flags.WorldGuardFlags;
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsDrops;
import net.Indyuce.mmocore.comp.mythicmobs.MythicHook;
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
import net.Indyuce.mmocore.comp.placeholder.PlaceholderAPIParser;
@ -167,7 +167,7 @@ public class MMOCore extends LuminePlugin {
}
if (Bukkit.getPluginManager().getPlugin("MythicMobs") != null) {
Bukkit.getServer().getPluginManager().registerEvents(new MythicMobsDrops(), this);
Bukkit.getServer().getPluginManager().registerEvents(new MythicHook(), this);
MMOCore.plugin.getLogger().log(Level.INFO, "Hooked onto MythicMobs");
}

View File

@ -279,12 +279,17 @@ public class PlayerClass extends PostLoadObject {
return getSkill(skill.getId());
}
/*
* reduces map checkups when skills are being checked on events that are
/**
* Reduces map checkups when skills are being checked on events that are
* commonly called like EntityDamageEvent or regen events.
* <p>
* Examples:
* - {@link net.Indyuce.mmocore.skill.list.Neptune_Gift}
* - {@link net.Indyuce.mmocore.skill.list.Fire_Berserker}
*/
public Optional<SkillInfo> findSkill(Skill skill) {
return skills.containsKey(skill.getId()) ? Optional.of(skills.get(skill.getId())) : Optional.empty();
SkillInfo found = skills.get(skill.getId());
return found == null ? Optional.empty() : Optional.of(found);
}
public SkillInfo getSkill(String id) {

View File

@ -0,0 +1,65 @@
package net.Indyuce.mmocore.comp.mythicmobs;
import io.lumine.xikage.mythicmobs.MythicMobs;
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicDropLoadEvent;
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicReloadedEvent;
import io.lumine.xikage.mythicmobs.skills.SkillMetadata;
import io.lumine.xikage.mythicmobs.skills.placeholders.Placeholder;
import io.lumine.xikage.mythicmobs.skills.variables.Variable;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.load.CurrencyItemDrop;
import net.Indyuce.mmocore.comp.mythicmobs.load.GoldPouchDrop;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class MythicHook implements Listener {
public MythicHook() {
registerPlaceholders();
}
@EventHandler
public void a(MythicDropLoadEvent event) {
// random gold pouches
if (event.getDropName().equalsIgnoreCase("gold_pouch") || event.getDropName().equalsIgnoreCase("goldpouch"))
event.register(new GoldPouchDrop(event.getConfig()));
// gold coins
if (event.getDropName().equalsIgnoreCase("gold_coin") || event.getDropName().equalsIgnoreCase("coin"))
event.register(new CurrencyItemDrop("GOLD_COIN", event.getConfig()));
// notes
if (event.getDropName().equalsIgnoreCase("note") || event.getDropName().equalsIgnoreCase("banknote") || event.getDropName().equalsIgnoreCase("bank_note"))
event.register(new CurrencyItemDrop("NOTE", event.getConfig()));
}
// When MythicMobs is reloaded, the placeholders are emptied. Add them again
@EventHandler
public void b(MythicReloadedEvent event) {
registerPlaceholders();
}
private void registerPlaceholders() {
MythicMobs.inst().getPlaceholderManager().register("modifier", Placeholder.meta((metadata, arg) -> {
if (!(metadata instanceof SkillMetadata))
throw new RuntimeException("Cannot use this placeholder outside of skill");
Variable var = ((SkillMetadata) metadata).getVariables().get("MMOCoreSkill");
net.Indyuce.mmocore.skill.metadata.SkillMetadata cast = (net.Indyuce.mmocore.skill.metadata.SkillMetadata) var.get();
return String.valueOf(cast.getModifier(arg));
}));
MythicMobs.inst().getPlaceholderManager().register("modifier.int", Placeholder.meta((metadata, arg) -> {
if (!(metadata instanceof SkillMetadata))
throw new RuntimeException("Cannot use this placeholder outside of skill");
Variable var = ((SkillMetadata) metadata).getVariables().get("MMOCoreSkill");
net.Indyuce.mmocore.skill.metadata.SkillMetadata cast = (net.Indyuce.mmocore.skill.metadata.SkillMetadata) var.get();
return String.valueOf((int) cast.getModifier(arg));
}));
MythicMobs.inst().getPlaceholderManager().register("mana", Placeholder.meta((metadata, arg) -> String.valueOf((int) PlayerData.get(metadata.getCaster().getEntity().getUniqueId()).getMana())));
MythicMobs.inst().getPlaceholderManager().register("stamina", Placeholder.meta((metadata, arg) -> String.valueOf((int) PlayerData.get(metadata.getCaster().getEntity().getUniqueId()).getStamina())));
}
}

View File

@ -1,49 +0,0 @@
package net.Indyuce.mmocore.comp.mythicmobs;
import io.lumine.xikage.mythicmobs.MythicMobs;
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicDropLoadEvent;
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicReloadedEvent;
import io.lumine.xikage.mythicmobs.skills.placeholders.Placeholder;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.load.CurrencyItemDrop;
import net.Indyuce.mmocore.comp.mythicmobs.load.GoldPouchDrop;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class MythicMobsDrops implements Listener {
public MythicMobsDrops() {
registerPlaceholders();
}
@EventHandler
public void a(MythicDropLoadEvent event) {
// random gold pouches
if (event.getDropName().equalsIgnoreCase("gold_pouch") || event.getDropName().equalsIgnoreCase("goldpouch"))
event.register(new GoldPouchDrop(event.getConfig()));
// gold coins
if (event.getDropName().equalsIgnoreCase("gold_coin") || event.getDropName().equalsIgnoreCase("coin"))
event.register(new CurrencyItemDrop("GOLD_COIN", event.getConfig()));
// notes
if (event.getDropName().equalsIgnoreCase("note") || event.getDropName().equalsIgnoreCase("banknote") || event.getDropName().equalsIgnoreCase("bank_note"))
event.register(new CurrencyItemDrop("NOTE", event.getConfig()));
}
/*
* when MythicMobs is reloaded, the placeholders are emptied. Add them again
*/
@EventHandler
public void b(MythicReloadedEvent event) {
registerPlaceholders();
}
private void registerPlaceholders() {
// TODO
/*MythicMobs.inst().getPlaceholderManager().register("mmocore.skill", Placeholder.meta((metadata, arg) -> String.valueOf(PlayerData.get(metadata.getCaster().getEntity().getUniqueId()).getSkillData().getCachedModifier(arg))));
MythicMobs.inst().getPlaceholderManager().register("mmocore.skill.int", Placeholder.meta((metadata, arg) -> String.valueOf((int) PlayerData.get(metadata.getCaster().getEntity().getUniqueId()).getSkillData().getCachedModifier(arg))));*/
MythicMobs.inst().getPlaceholderManager().register("mmocore.mana", Placeholder.meta((metadata, arg) -> String.valueOf((int) PlayerData.get(metadata.getCaster().getEntity().getUniqueId()).getMana())));
MythicMobs.inst().getPlaceholderManager().register("mmocore.stamina", Placeholder.meta((metadata, arg) -> String.valueOf((int) PlayerData.get(metadata.getCaster().getEntity().getUniqueId()).getStamina())));
}
}

View File

@ -3,7 +3,6 @@ package net.Indyuce.mmocore.comp.mythicmobs;
import net.Indyuce.mmocore.experience.provider.ExperienceDispenser;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmocore.experience.Profession;
import net.Indyuce.mmocore.experience.source.type.ExperienceSource;
import net.Indyuce.mmocore.api.load.MMOLoader;
import net.Indyuce.mmocore.api.quest.objective.Objective;
@ -12,7 +11,7 @@ import net.Indyuce.mmocore.comp.mythicmobs.load.KillMythicFactionExperienceSourc
import net.Indyuce.mmocore.comp.mythicmobs.load.KillMythicFactionObjective;
import net.Indyuce.mmocore.comp.mythicmobs.load.KillMythicMobExperienceSource;
import net.Indyuce.mmocore.comp.mythicmobs.load.KillMythicMobObjective;
import net.Indyuce.mmocore.comp.mythicmobs.load.MythicMobSkillTrigger;
import net.Indyuce.mmocore.comp.mythicmobs.load.MythicSkillTrigger;
import io.lumine.mythic.lib.api.MMOLineConfig;
public class MythicMobsMMOLoader extends MMOLoader {
@ -21,7 +20,7 @@ public class MythicMobsMMOLoader extends MMOLoader {
public Trigger loadTrigger(MMOLineConfig config) {
if (config.getKey().equalsIgnoreCase("mmskill") || config.getKey().equalsIgnoreCase("mythicmobskill"))
return new MythicMobSkillTrigger(config);
return new MythicSkillTrigger(config);
return null;
}

View File

@ -1,36 +0,0 @@
package net.Indyuce.mmocore.comp.mythicmobs.load;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.apache.commons.lang.Validate;
import org.bukkit.entity.Entity;
import io.lumine.xikage.mythicmobs.MythicMobs;
import io.lumine.xikage.mythicmobs.skills.Skill;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
import io.lumine.mythic.lib.api.MMOLineConfig;
public class MythicMobSkillTrigger extends Trigger {
private final Skill skill;
public MythicMobSkillTrigger(MMOLineConfig config) {
super(config);
config.validate("id");
String id = config.getString("id");
Optional<io.lumine.xikage.mythicmobs.skills.Skill> opt = MythicMobs.inst().getSkillManager().getSkill(id);
Validate.isTrue(opt.isPresent(), "Could not find MM skill " + id);
skill = opt.get();
}
@Override
public void apply(PlayerData player) {
if(!player.isOnline()) return;
List<Entity> targets = new ArrayList<>();
targets.add(player.getPlayer());
MythicMobs.inst().getAPIHelper().castSkill(player.getPlayer(), this.skill.getInternalName(), player.getPlayer(), player.getPlayer().getEyeLocation(), targets, null, 1);
}
}

View File

@ -0,0 +1,42 @@
package net.Indyuce.mmocore.comp.mythicmobs.load;
import io.lumine.mythic.lib.api.MMOLineConfig;
import io.lumine.xikage.mythicmobs.MythicMobs;
import io.lumine.xikage.mythicmobs.adapters.AbstractPlayer;
import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter;
import io.lumine.xikage.mythicmobs.mobs.GenericCaster;
import io.lumine.xikage.mythicmobs.skills.Skill;
import io.lumine.xikage.mythicmobs.skills.SkillCaster;
import io.lumine.xikage.mythicmobs.skills.SkillMetadata;
import io.lumine.xikage.mythicmobs.skills.SkillTrigger;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
import org.apache.commons.lang.Validate;
import java.util.HashSet;
import java.util.Optional;
public class MythicSkillTrigger extends Trigger {
private final Skill skill;
public MythicSkillTrigger(MMOLineConfig config) {
super(config);
config.validate("id");
String id = config.getString("id");
Optional<io.lumine.xikage.mythicmobs.skills.Skill> opt = MythicMobs.inst().getSkillManager().getSkill(id);
Validate.isTrue(opt.isPresent(), "Could not find MM skill " + id);
skill = opt.get();
}
@Override
public void apply(PlayerData player) {
if (!player.isOnline()) return;
AbstractPlayer trigger = BukkitAdapter.adapt(player.getPlayer());
SkillCaster caster = new GenericCaster(trigger);
SkillMetadata skillMeta = new SkillMetadata(SkillTrigger.API, caster, trigger, BukkitAdapter.adapt(player.getPlayer().getLocation()), new HashSet<>(), null, 1);
if (skill.usable(skillMeta, SkillTrigger.API))
skill.execute(skillMeta);
}
}

View File

@ -0,0 +1,53 @@
package net.Indyuce.mmocore.comp.mythicmobs.skill;
import io.lumine.xikage.mythicmobs.skills.variables.Variable;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* Used by MMOCore to cache skill modifiers inside a variable.
* The modifiers are cached in a variable with the skill scope.
*
* @deprecated Now using an {@link io.lumine.xikage.mythicmobs.skills.variables.types.AbstractVariable}
*/
@Deprecated
public class MapVariable extends Variable {
@NotNull
private final Map<String, Double> map = new HashMap<>();
public Map<String, Double> getValue() {
return map;
}
@Override
public String toString() {
return "VAR_Map(" + map + ')';
}
@Override
public boolean shouldSave() {
return false;
}
@Override
public Object get() {
return map;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MapVariable that = (MapVariable) o;
return map.equals(that.map);
}
@Override
public int hashCode() {
return Objects.hash(map);
}
}

View File

@ -27,11 +27,11 @@ import java.util.Map;
import java.util.Optional;
import java.util.logging.Level;
public class MythicMobSkill extends Skill {
public class MythicSkill extends Skill {
private final io.lumine.xikage.mythicmobs.skills.Skill skill;
private final Map<CheatType, Integer> antiCheat = new HashMap<>();
public MythicMobSkill(String id, FileConfiguration config) {
public MythicSkill(String id, FileConfiguration config) {
super(id);
String mmId = config.getString("mythicmobs-skill-id");
@ -85,6 +85,7 @@ public class MythicMobSkill extends Skill {
if (!cast.isSuccessful() || isPassive())
return cast;
// Gather MythicMobs skill info
HashSet<AbstractEntity> targetEntities = new HashSet<>();
HashSet<AbstractLocation> targetLocations = new HashSet<>();
@ -96,9 +97,11 @@ public class MythicMobSkill extends Skill {
if (MMOCore.plugin.hasAntiCheat())
MMOCore.plugin.antiCheatSupport.disableAntiCheat(caster.getPlayer(), antiCheat);
/*
* Yo is that me or the second argument is f***ing useless
*/
// Place cast skill info in a variable
skillMeta.getVariables().putObject("MMOCoreSkill", cast);
skillMeta.getVariables().putObject("MMOStatMap", caster.getStats());
// Yo is that me or the second argument is f***ing useless
if (this.skill.usable(skillMeta, SkillTrigger.CAST))
this.skill.execute(skillMeta);
else

View File

@ -16,13 +16,13 @@ import org.bukkit.event.Listener;
import java.util.HashSet;
public abstract class PassiveMythicMobSkillHandler implements Listener {
protected final MythicMobSkill skill;
public abstract class PassiveMythicSkillHandler implements Listener {
protected final MythicSkill skill;
/**
* Core class for all passive types
*/
protected PassiveMythicMobSkillHandler(MythicMobSkill skill) {
protected PassiveMythicSkillHandler(MythicSkill skill) {
this.skill = skill;
}

View File

@ -11,7 +11,7 @@ public enum PassiveSkillType {
PLAYER_LOGIN,
SHOOT_BOW;
public PassiveMythicMobSkillHandler getHandler(MythicMobSkill skill) {
public PassiveMythicSkillHandler getHandler(MythicSkill skill) {
if (this == PLAYER_ATTACK)
return new PlayerAttackSkillHandler(skill);
if (this == PLAYER_DAMAGE)

View File

@ -2,19 +2,19 @@ package net.Indyuce.mmocore.comp.mythicmobs.skill.handlers;
import io.lumine.mythic.lib.api.event.EntityKillEntityEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
public class EntityDeathSkillHandler extends PassiveMythicMobSkillHandler {
public class EntityDeathSkillHandler extends PassiveMythicSkillHandler {
/**
* Used to handle passive skills which trigger when a player kills
* another entity
*/
public EntityDeathSkillHandler(MythicMobSkill skill) {
public EntityDeathSkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -3,16 +3,16 @@ package net.Indyuce.mmocore.comp.mythicmobs.skill.handlers;
import net.Indyuce.mmocore.api.player.PlayerData;
import org.bukkit.event.EventHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
import io.lumine.mythic.lib.api.event.PlayerAttackEvent;
public class PlayerAttackSkillHandler extends PassiveMythicMobSkillHandler {
public class PlayerAttackSkillHandler extends PassiveMythicSkillHandler {
/**
* Used to handle passive skills which trigger when a player attacks another
* entity
*/
public PlayerAttackSkillHandler(MythicMobSkill skill) {
public PlayerAttackSkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -2,19 +2,19 @@ package net.Indyuce.mmocore.comp.mythicmobs.skill.handlers;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
public class PlayerDamageByEntitySkillHandler extends PassiveMythicMobSkillHandler {
public class PlayerDamageByEntitySkillHandler extends PassiveMythicSkillHandler {
/**
* Used to handle passive skills which trigger when a player takes damage
* from another entity
*/
public PlayerDamageByEntitySkillHandler(MythicMobSkill skill) {
public PlayerDamageByEntitySkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -6,14 +6,14 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
public class PlayerDamageSkillHandler extends PassiveMythicMobSkillHandler {
public class PlayerDamageSkillHandler extends PassiveMythicSkillHandler {
/**
* Used to handle passive skills which trigger when a player takes damage
*/
public PlayerDamageSkillHandler(MythicMobSkill skill) {
public PlayerDamageSkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -6,14 +6,14 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDeathEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
public class PlayerDeathSkillHandler extends PassiveMythicMobSkillHandler {
public class PlayerDeathSkillHandler extends PassiveMythicSkillHandler {
/**
* Used to handle passive skills which trigger when a player dies
*/
public PlayerDeathSkillHandler(MythicMobSkill skill) {
public PlayerDeathSkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -5,16 +5,16 @@ import org.bukkit.event.player.PlayerLoginEvent;
import io.lumine.mythic.utils.Schedulers;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
public class PlayerLoginSkillHandler extends PassiveMythicMobSkillHandler {
public class PlayerLoginSkillHandler extends PassiveMythicSkillHandler {
/**
* Used when a player logins
*
* @param skill
*/
public PlayerLoginSkillHandler(MythicMobSkill skill) {
public PlayerLoginSkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -6,14 +6,14 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityShootBowEvent;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicMobSkillHandler;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.PassiveMythicSkillHandler;
public class ShootBowSkillHandler extends PassiveMythicMobSkillHandler {
public class ShootBowSkillHandler extends PassiveMythicSkillHandler {
/**
* Used to handle passive skills which trigger when a player shoots a bow
*/
public ShootBowSkillHandler(MythicMobSkill skill) {
public ShootBowSkillHandler(MythicSkill skill) {
super(skill);
}

View File

@ -19,7 +19,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.ConfigFile;
import net.Indyuce.mmocore.skill.Skill;
import net.Indyuce.mmocore.api.util.math.formula.LinearValue;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicSkill;
public class SkillManager {
private final Map<String, Skill> skills = new LinkedHashMap<>();
@ -59,7 +59,7 @@ public class SkillManager {
if (Bukkit.getPluginManager().getPlugin("MythicMobs") != null)
for (File file : mythicMobs.listFiles()) {
try {
register(new MythicMobSkill(file.getName().substring(0, file.getName().length() - 4).toUpperCase(),
register(new MythicSkill(file.getName().substring(0, file.getName().length() - 4).toUpperCase(),
YamlConfiguration.loadConfiguration(file)));
} catch (Exception exception) {
MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load skill from " + file.getName() + ": " + exception.getMessage());
@ -67,7 +67,7 @@ public class SkillManager {
}
for (Skill skill : getAll())
if (!(skill instanceof MythicMobSkill)) {
if (!(skill instanceof MythicSkill)) {
File file = new File(MMOCore.plugin.getDataFolder() + "/skills", skill.getLowerCaseId() + ".yml");
ConfigFile config = new ConfigFile("/skills", skill.getLowerCaseId());

View File

@ -3,11 +3,8 @@ package net.Indyuce.mmocore.skill;
import java.util.HashMap;
import java.util.Map;
import io.lumine.mythic.utils.cooldown.CooldownMap;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.skill.Skill.SkillInfo;
import net.Indyuce.mmocore.comp.mythicmobs.skill.MythicMobSkill;
import net.Indyuce.mmocore.skill.metadata.SkillMetadata;
/**
* Note: any method which return longs returns milliseconds.