mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-03-11 13:11:50 +01:00
support for mm skill handlers
This commit is contained in:
parent
392eaceaaf
commit
987208c194
2
pom.xml
2
pom.xml
@ -141,7 +141,7 @@
|
||||
<dependency>
|
||||
<groupId>io.lumine</groupId>
|
||||
<artifactId>MythicLib-dist</artifactId>
|
||||
<version>1.3</version>
|
||||
<version>1.3-R5</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
@ -61,24 +61,8 @@ import net.Indyuce.mmoitems.listener.EquipListener;
|
||||
import net.Indyuce.mmoitems.listener.ItemListener;
|
||||
import net.Indyuce.mmoitems.listener.ItemUse;
|
||||
import net.Indyuce.mmoitems.listener.PlayerListener;
|
||||
import net.Indyuce.mmoitems.manager.AbilityManager;
|
||||
import net.Indyuce.mmoitems.manager.BlockManager;
|
||||
import net.Indyuce.mmoitems.manager.ConfigManager;
|
||||
import net.Indyuce.mmoitems.manager.CraftingManager;
|
||||
import net.Indyuce.mmoitems.manager.DropTableManager;
|
||||
import net.Indyuce.mmoitems.manager.EntityManager;
|
||||
import net.Indyuce.mmoitems.manager.ItemManager;
|
||||
import net.Indyuce.mmoitems.manager.LayoutManager;
|
||||
import net.Indyuce.mmoitems.manager.LoreFormatManager;
|
||||
import net.Indyuce.mmoitems.manager.PluginUpdateManager;
|
||||
import net.Indyuce.mmoitems.manager.RecipeManager;
|
||||
import net.Indyuce.mmoitems.manager.SetManager;
|
||||
import net.Indyuce.mmoitems.manager.StatManager;
|
||||
import net.Indyuce.mmoitems.manager.TemplateManager;
|
||||
import net.Indyuce.mmoitems.manager.TierManager;
|
||||
import net.Indyuce.mmoitems.manager.TypeManager;
|
||||
import net.Indyuce.mmoitems.manager.UpgradeManager;
|
||||
import net.Indyuce.mmoitems.manager.WorldGenManager;
|
||||
import net.Indyuce.mmoitems.manager.*;
|
||||
import net.Indyuce.mmoitems.skill.Shulker_Missile;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@ -108,6 +92,7 @@ public class MMOItems extends LuminePlugin {
|
||||
private final LoreFormatManager formatManager = new LoreFormatManager();
|
||||
private final TemplateManager templateManager = new TemplateManager();
|
||||
private final AbilityManager abilityManager = new AbilityManager();
|
||||
private final SkillManager skillManager = new SkillManager();
|
||||
private final EntityManager entityManager = new EntityManager();
|
||||
private final RecipeManager recipeManager = new RecipeManager();
|
||||
private final LayoutManager layoutManager = new LayoutManager();
|
||||
@ -164,6 +149,9 @@ public class MMOItems extends LuminePlugin {
|
||||
typeManager.reload();
|
||||
templateManager.preloadTemplates();
|
||||
|
||||
// Register MMOItems-specific skills
|
||||
MythicLib.plugin.getSkills().registerSkillHandler(new Shulker_Missile());
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("MMOCore") != null) new MMOCoreMMOLoader();
|
||||
|
||||
if (Bukkit.getPluginManager().getPlugin("mcMMO") != null)
|
||||
@ -184,7 +172,7 @@ public class MMOItems extends LuminePlugin {
|
||||
new MMOItemsMetrics();
|
||||
|
||||
RecipeBrowserGUI.registerNativeRecipes();
|
||||
abilityManager.loadPluginAbilities();
|
||||
skillManager.reload();
|
||||
configManager = new ConfigManager();
|
||||
|
||||
final int configVersion = getConfig().contains("config-version", true) ? getConfig().getInt("config-version") : -1;
|
||||
@ -489,10 +477,15 @@ public class MMOItems extends LuminePlugin {
|
||||
return dropTableManager;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public AbilityManager getAbilities() {
|
||||
return abilityManager;
|
||||
}
|
||||
|
||||
public SkillManager getSkills() {
|
||||
return skillManager;
|
||||
}
|
||||
|
||||
public BlockManager getCustomBlocks() {
|
||||
return blockManager;
|
||||
}
|
||||
|
@ -2,14 +2,27 @@ package net.Indyuce.mmoitems.ability;
|
||||
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownObject;
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class Ability<T extends AbilityMetadata> implements CooldownObject {
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class Ability<T extends AbilityMetadata> extends SkillHandler<T> implements CooldownObject {
|
||||
private final String name, id;
|
||||
private final Map<String, Double> modifiers = new HashMap<>();
|
||||
|
||||
@ -48,6 +61,26 @@ public abstract class Ability<T extends AbilityMetadata> implements CooldownObje
|
||||
return modifiers.keySet();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public T getResult(SkillMetadata meta) {
|
||||
|
||||
// Corresponding registered skill
|
||||
RegisteredSkill registeredSkill = new RegisteredSkill(this);
|
||||
|
||||
// Corresponding ability data
|
||||
AbilityData abilityData = new AbilityData(registeredSkill, TriggerType.API);
|
||||
for (String mod : modifiers.keySet())
|
||||
abilityData.setModifier(mod, meta.getModifier(mod));
|
||||
|
||||
return canBeCast(meta.getAttack(), meta.hasTargetEntity() && meta.getTargetEntityOrNull() instanceof LivingEntity ? (LivingEntity) meta.getTargetEntityOrNull() : null, abilityData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenCast(T t, SkillMetadata skillMetadata) {
|
||||
whenCast(skillMetadata.getAttack(), t);
|
||||
}
|
||||
|
||||
public void addModifier(String modifier, double defaultValue) {
|
||||
modifiers.put(modifier, defaultValue);
|
||||
}
|
||||
|
@ -1,8 +1,15 @@
|
||||
package net.Indyuce.mmoitems.ability;
|
||||
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.result.SkillResult;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
|
||||
public abstract class AbilityMetadata {
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class AbilityMetadata implements SkillResult {
|
||||
private final AbilityData ability;
|
||||
|
||||
public AbilityMetadata(AbilityData ability) {
|
||||
@ -28,4 +35,9 @@ public abstract class AbilityMetadata {
|
||||
* at an entity..)
|
||||
*/
|
||||
public abstract boolean isSuccessful();
|
||||
|
||||
@Override
|
||||
public boolean isSuccessful(SkillMetadata skillMetadata) {
|
||||
return isSuccessful();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,36 @@
|
||||
package net.Indyuce.mmoitems.ability;
|
||||
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.custom.variable.VariableList;
|
||||
import io.lumine.mythic.lib.skill.custom.variable.VariableScope;
|
||||
import net.Indyuce.mmoitems.ability.metadata.BackwardsCompatibleAbilityMetadata;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@Deprecated
|
||||
public class BackwardsCompatibleAbility extends Ability<BackwardsCompatibleAbilityMetadata> {
|
||||
private final RegisteredSkill registeredSkill;
|
||||
|
||||
public BackwardsCompatibleAbility(RegisteredSkill registeredSkill) {
|
||||
super(registeredSkill.getHandler().getId(), registeredSkill.getName());
|
||||
|
||||
this.registeredSkill = registeredSkill;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BackwardsCompatibleAbilityMetadata canBeCast(AttackMetadata attack, LivingEntity target, AbilityData ability) {
|
||||
SkillMetadata skillMeta = new SkillMetadata(ability, attack.getStats(), new VariableList(VariableScope.SKILL), attack, attack.getPlayer().getLocation(), null, target);
|
||||
return new BackwardsCompatibleAbilityMetadata(skillMeta, registeredSkill.getHandler().getResult(skillMeta), ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenCast(AttackMetadata attack, BackwardsCompatibleAbilityMetadata ability) {
|
||||
registeredSkill.getHandler().whenCast(ability.getResult(), ability.getMetadata());
|
||||
}
|
||||
}
|
@ -2,10 +2,14 @@ package net.Indyuce.mmoitems.ability;
|
||||
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import net.Indyuce.mmoitems.ability.metadata.FriendlyTargetAbilityMetadata;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class FriendlyTargetAbility extends Ability<FriendlyTargetAbilityMetadata> {
|
||||
public FriendlyTargetAbility() {
|
||||
super();
|
||||
@ -18,6 +22,4 @@ public abstract class FriendlyTargetAbility extends Ability<FriendlyTargetAbilit
|
||||
public FriendlyTargetAbilityMetadata canBeCast(AttackMetadata attack, LivingEntity target, AbilityData ability) {
|
||||
return new FriendlyTargetAbilityMetadata(ability, attack.getPlayer(), target);
|
||||
}
|
||||
|
||||
public abstract void whenCast(AttackMetadata attack, FriendlyTargetAbilityMetadata ability);
|
||||
}
|
||||
|
@ -5,6 +5,11 @@ import net.Indyuce.mmoitems.ability.metadata.ItemAbilityMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class ItemAbility extends Ability<ItemAbilityMetadata> {
|
||||
public ItemAbility() {
|
||||
super();
|
||||
|
@ -5,6 +5,11 @@ import net.Indyuce.mmoitems.ability.metadata.LocationAbilityMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class LocationAbility extends Ability<LocationAbilityMetadata> {
|
||||
public LocationAbility() {
|
||||
super();
|
||||
|
@ -5,6 +5,11 @@ import net.Indyuce.mmoitems.ability.metadata.SimpleAbilityMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class SimpleAbility extends Ability<SimpleAbilityMetadata> {
|
||||
public SimpleAbility() {
|
||||
super();
|
||||
|
@ -1,10 +1,15 @@
|
||||
package net.Indyuce.mmoitems.ability;
|
||||
|
||||
import net.Indyuce.mmoitems.ability.metadata.TargetAbilityMetadata;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import net.Indyuce.mmoitems.ability.metadata.TargetAbilityMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class TargetAbility extends Ability<TargetAbilityMetadata> {
|
||||
public TargetAbility() {
|
||||
super();
|
||||
|
@ -9,7 +9,11 @@ import org.bukkit.entity.LivingEntity;
|
||||
/**
|
||||
* Ability that requires a direction to be cast. For
|
||||
* instance, a projectile like {@link Firebolt}
|
||||
*
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* Abilities are being replaced by {@link io.lumine.mythic.lib.skill.handler.SkillHandler}
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class VectorAbility extends Ability<VectorAbilityMetadata> {
|
||||
public VectorAbility() {
|
||||
super();
|
||||
|
@ -0,0 +1,32 @@
|
||||
package net.Indyuce.mmoitems.ability.metadata;
|
||||
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.result.SkillResult;
|
||||
import net.Indyuce.mmoitems.ability.AbilityMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
|
||||
@Deprecated
|
||||
public class BackwardsCompatibleAbilityMetadata extends AbilityMetadata {
|
||||
private final SkillMetadata skillMeta;
|
||||
private final SkillResult result;
|
||||
|
||||
public BackwardsCompatibleAbilityMetadata(SkillMetadata skillMeta, SkillResult result, AbilityData abilityData) {
|
||||
super(abilityData);
|
||||
|
||||
this.skillMeta = skillMeta;
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSuccessful() {
|
||||
return result.isSuccessful(skillMeta);
|
||||
}
|
||||
|
||||
public SkillMetadata getMetadata() {
|
||||
return skillMeta;
|
||||
}
|
||||
|
||||
public SkillResult getResult() {
|
||||
return result;
|
||||
}
|
||||
}
|
@ -8,6 +8,11 @@ import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public class FriendlyTargetAbilityMetadata extends AbilityMetadata {
|
||||
private final LivingEntity target;
|
||||
|
||||
|
@ -9,7 +9,11 @@ import org.bukkit.inventory.ItemStack;
|
||||
* Item that requires to throw the item in hand.
|
||||
* This takes as input the player's main hand item and
|
||||
* also takes the direction where he's looking
|
||||
*
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public class ItemAbilityMetadata extends VectorAbilityMetadata {
|
||||
private final ItemStack item;
|
||||
|
||||
|
@ -11,7 +11,11 @@ import org.bukkit.entity.Player;
|
||||
/**
|
||||
* Ability that requires a target location, for
|
||||
* instance {@link Minor_Explosion}
|
||||
*
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public class LocationAbilityMetadata extends AbilityMetadata {
|
||||
private final Location target;
|
||||
|
||||
|
@ -3,6 +3,11 @@ package net.Indyuce.mmoitems.ability.metadata;
|
||||
import net.Indyuce.mmoitems.ability.AbilityMetadata;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public class SimpleAbilityMetadata extends AbilityMetadata {
|
||||
private final boolean successful;
|
||||
|
||||
|
@ -8,6 +8,11 @@ import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public class TargetAbilityMetadata extends AbilityMetadata {
|
||||
private final LivingEntity target;
|
||||
|
||||
|
@ -6,6 +6,11 @@ import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
/**
|
||||
* @deprecated Abilities were moved over to MythicLib.
|
||||
* AbilityMetadata from MMOItems are now {@link io.lumine.mythic.lib.skill.result.SkillResult}
|
||||
*/
|
||||
@Deprecated
|
||||
public class VectorAbilityMetadata extends AbilityMetadata {
|
||||
private final Vector target;
|
||||
|
||||
|
@ -14,6 +14,7 @@ import net.Indyuce.mmoitems.api.item.ItemReference;
|
||||
public class ConfigFile {
|
||||
private final Plugin plugin;
|
||||
private final String path, name;
|
||||
private final boolean exists;
|
||||
|
||||
private final FileConfiguration config;
|
||||
|
||||
@ -34,13 +35,19 @@ public class ConfigFile {
|
||||
this.path = path;
|
||||
this.name = name;
|
||||
|
||||
config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder() + path, name + ".yml"));
|
||||
File file = new File(plugin.getDataFolder() + path, name + ".yml");
|
||||
exists = file.exists();
|
||||
config = YamlConfiguration.loadConfiguration(file);
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
public boolean exists() {
|
||||
return exists;
|
||||
}
|
||||
|
||||
public void save() {
|
||||
try {
|
||||
config.save(new File(plugin.getDataFolder() + path, name + ".yml"));
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.Indyuce.mmoitems.api;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
@ -9,6 +10,7 @@ import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.api.player.RPGPlayer;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -39,6 +41,7 @@ public class MMOItemsAPI {
|
||||
*
|
||||
* @param ability Ability to register
|
||||
*/
|
||||
@Deprecated
|
||||
public void registerAbility(Ability ability) {
|
||||
MMOItems.plugin.getAbilities().registerAbility(ability);
|
||||
}
|
||||
@ -46,8 +49,8 @@ public class MMOItemsAPI {
|
||||
/**
|
||||
* @return Ability with the specified identifier like FIREBOLT
|
||||
*/
|
||||
public Ability getAbilityById(String id) {
|
||||
return Objects.requireNonNull(MMOItems.plugin.getAbilities().getAbility(id), "Could not find ability with ID '" + id + "'");
|
||||
public RegisteredSkill getAbilityById(String id) {
|
||||
return Objects.requireNonNull(MMOItems.plugin.getSkills().getSkill(id), "Could not find skill with ID '" + id + "'");
|
||||
}
|
||||
|
||||
public PlayerData getPlayerData(Player player) {
|
||||
@ -83,6 +86,7 @@ public class MMOItemsAPI {
|
||||
* This parameter is useless for trigger types like RIGHT_CLICK or SNEAK which aren't
|
||||
* based on entity attacks; in that case the attackMeta will have an empty DamageMetadata
|
||||
*/
|
||||
@Deprecated
|
||||
public AttackMetadata castAbility(Player player, String abilityName, Map<String, Double> modifiers, @NotNull LivingEntity target, AttackMetadata attackMeta) {
|
||||
|
||||
// Setup ability
|
||||
@ -104,6 +108,7 @@ public class MMOItemsAPI {
|
||||
* This parameter is useless for trigger types like RIGHT_CLICK or SNEAK which aren't
|
||||
* based on entity attacks; in that case the attackMeta will have an empty DamageMetadata
|
||||
*/
|
||||
@Deprecated
|
||||
public AttackMetadata castAbility(PlayerData playerData, AbilityData ability, @NotNull LivingEntity target, AttackMetadata attackMeta) {
|
||||
playerData.cast(attackMeta, target, ability);
|
||||
return attackMeta;
|
||||
|
@ -6,6 +6,7 @@ import org.bukkit.event.HandlerList;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
|
||||
@Deprecated
|
||||
public class AbilityUseEvent extends PlayerDataEvent {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
|
@ -2,7 +2,7 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.staff;
|
||||
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.list.vector.Shulker_Missile;
|
||||
import net.Indyuce.mmoitems.skill.Shulker_Missile;
|
||||
import net.Indyuce.mmoitems.api.ItemAttackMetadata;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
@ -7,15 +7,14 @@ import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.api.stat.modifier.ModifierSource;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import io.lumine.mythic.lib.skill.trigger.PassiveSkill;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerMetadata;
|
||||
import net.Indyuce.mmoitems.ItemStats;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.AbilityMetadata;
|
||||
import net.Indyuce.mmoitems.api.ConfigFile;
|
||||
import net.Indyuce.mmoitems.api.ItemSet;
|
||||
import net.Indyuce.mmoitems.api.ItemSet.SetBonuses;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.crafting.CraftingStatus;
|
||||
import net.Indyuce.mmoitems.api.event.AbilityUseEvent;
|
||||
import net.Indyuce.mmoitems.api.event.RefreshInventoryEvent;
|
||||
import net.Indyuce.mmoitems.api.item.ItemReference;
|
||||
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
|
||||
@ -362,42 +361,7 @@ public class PlayerData {
|
||||
*/
|
||||
@Deprecated
|
||||
public void cast(AttackMetadata attack, LivingEntity target, AbilityData ability) {
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Apply simple conditions including mana and stamina cost, permission
|
||||
* and cooldown checks
|
||||
*/
|
||||
if (!rpgPlayer.canCast(ability))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Apply extra conditions which depend on the ability the player is
|
||||
* casting
|
||||
*/
|
||||
AbilityMetadata abilityMetadata = ability.getAbility().canBeCast(attack, target, ability);
|
||||
if (!abilityMetadata.isSuccessful())
|
||||
return;
|
||||
|
||||
AbilityUseEvent event = new AbilityUseEvent(this, ability, target);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
/*
|
||||
* The player can cast the ability, and it was successfully cast on its
|
||||
* target, removes resources needed from the player
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Finally cast the ability; BUG FIX: cooldown MUST be applied BEFORE
|
||||
* the ability is cast otherwise instantaneously damaging abilities like
|
||||
* Sparkle can trigger deadly crash loops
|
||||
*/
|
||||
ability.getAbility().whenCast(attack, abilityMetadata);
|
||||
ability.cast(new TriggerMetadata(attack, target));
|
||||
}
|
||||
|
||||
public boolean isOnCooldown(CooldownType type) {
|
||||
|
@ -142,8 +142,8 @@ public abstract class RPGPlayer {
|
||||
@Deprecated
|
||||
public boolean canCast(AbilityData data) {
|
||||
|
||||
if (playerData.getMMOPlayerData().getCooldownMap().isOnCooldown(data.getAbility())) {
|
||||
CooldownInfo info = playerData.getMMOPlayerData().getCooldownMap().getInfo(data.getAbility());
|
||||
if (playerData.getMMOPlayerData().getCooldownMap().isOnCooldown(data)) {
|
||||
CooldownInfo info = playerData.getMMOPlayerData().getCooldownMap().getInfo(data);
|
||||
if (!data.getTriggerType().isSilent()) {
|
||||
StringBuilder progressBar = new StringBuilder(ChatColor.YELLOW + "");
|
||||
double progress = (double) (info.getInitialCooldown() - info.getRemaining()) / info.getInitialCooldown() * 10;
|
||||
@ -157,7 +157,7 @@ public abstract class RPGPlayer {
|
||||
}
|
||||
|
||||
if (MMOItems.plugin.getConfig().getBoolean("permissions.abilities")
|
||||
&& !player.hasPermission("mmoitems.ability." + data.getAbility().getLowerCaseID())
|
||||
&& !player.hasPermission("mmoitems.ability." + data.getAbility().getHandler().getLowerCaseId())
|
||||
&& !player.hasPermission("mmoitems.bypass.ability"))
|
||||
return false;
|
||||
|
||||
|
@ -8,8 +8,8 @@ import io.lumine.mythic.lib.damage.DamageMetadata;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerMetadata;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@ -21,15 +21,14 @@ public class AbilityCommandTreeNode extends CommandTreeNode {
|
||||
super(parent, "ability");
|
||||
|
||||
addParameter(new Parameter("<ability>",
|
||||
(explorer, list) -> MMOItems.plugin.getAbilities().getAll().forEach(ability -> list.add(ability.getID()))));
|
||||
(explorer, list) -> MMOItems.plugin.getSkills().getAll().forEach(ability -> list.add(ability.getHandler().getId()))));
|
||||
addParameter(Parameter.PLAYER_OPTIONAL);
|
||||
|
||||
// three modifiers but more can be used
|
||||
for (int j = 0; j < 3; j++) {
|
||||
for (int j = 0; j < 10; j++) {
|
||||
addParameter(new Parameter("<modifier>", (explorer, list) -> {
|
||||
try {
|
||||
Ability ability = MMOItems.plugin.getAbilities().getAbility(explorer.getArguments()[1].toUpperCase().replace("-", "_"));
|
||||
list.addAll(ability.getModifiers());
|
||||
RegisteredSkill ability = MMOItems.plugin.getSkills().getSkillOrThrow(explorer.getArguments()[1].toUpperCase().replace("-", "_"));
|
||||
list.addAll(ability.getHandler().getModifiers());
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}));
|
||||
@ -56,13 +55,13 @@ public class AbilityCommandTreeNode extends CommandTreeNode {
|
||||
|
||||
// ability
|
||||
String key = args[1].toUpperCase().replace("-", "_");
|
||||
if (!MMOItems.plugin.getAbilities().hasAbility(key)) {
|
||||
if (!MMOItems.plugin.getSkills().hasSkill(key)) {
|
||||
sender.sendMessage(MMOItems.plugin.getPrefix() + ChatColor.RED + "Couldn't find ability " + key + ".");
|
||||
return CommandResult.FAILURE;
|
||||
}
|
||||
|
||||
// modifiers
|
||||
AbilityData ability = new AbilityData(MMOItems.plugin.getAbilities().getAbility(key), TriggerType.RIGHT_CLICK);
|
||||
AbilityData ability = new AbilityData(MMOItems.plugin.getSkills().getSkill(key), TriggerType.RIGHT_CLICK);
|
||||
for (int j = 3; j < args.length - 1; j += 2) {
|
||||
String name = args[j];
|
||||
String value = args[j + 1];
|
||||
|
@ -1,10 +1,10 @@
|
||||
package net.Indyuce.mmoitems.command.mmoitems.list;
|
||||
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import io.lumine.mythic.lib.commands.mmolib.api.CommandTreeNode;
|
||||
|
||||
public class AbilityCommandTreeNode extends CommandTreeNode {
|
||||
@ -19,10 +19,10 @@ public class AbilityCommandTreeNode extends CommandTreeNode {
|
||||
sender.sendMessage(ChatColor.WHITE + "Here are all the abilities you can bind to items.");
|
||||
sender.sendMessage(ChatColor.WHITE + "The values inside brackets are " + ChatColor.UNDERLINE + "modifiers" + ChatColor.WHITE
|
||||
+ " which allow you to change the ability values (cooldown, damage...)");
|
||||
for (Ability a : MMOItems.plugin.getAbilities().getAll()) {
|
||||
String modFormat = ChatColor.GRAY + String.join(ChatColor.WHITE + ", " + ChatColor.GRAY, a.getModifiers());
|
||||
for (RegisteredSkill ability : MMOItems.plugin.getSkills().getAll()) {
|
||||
String modFormat = ChatColor.GRAY + String.join(ChatColor.WHITE + ", " + ChatColor.GRAY, ability.getHandler().getModifiers());
|
||||
modFormat = ChatColor.WHITE + "(" + modFormat + ChatColor.WHITE + ")";
|
||||
sender.sendMessage("* " + ChatColor.LIGHT_PURPLE + a.getName() + " " + modFormat);
|
||||
sender.sendMessage("* " + ChatColor.LIGHT_PURPLE + ability.getName() + " " + modFormat);
|
||||
}
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ 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.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.*;
|
||||
@ -28,19 +29,15 @@ public class MythicMobsCompatibility implements Listener {
|
||||
Bukkit.getPluginManager().registerEvents(this, MMOItems.plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
/**
|
||||
* MythicLib skill handlers are reloaded on priority {@link EventPriority#NORMAL}
|
||||
* MMOCore and MMOItems use HIGH or HIGHEST
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
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());
|
||||
}
|
||||
});
|
||||
MMOItems.plugin.getSkills().reload();
|
||||
}
|
||||
|
||||
private Set<String> getFactions() {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.Indyuce.mmoitems.gui.edition;
|
||||
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.ItemStats;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
@ -12,6 +13,7 @@ import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.item.ItemTag;
|
||||
import io.lumine.mythic.lib.api.util.AltChar;
|
||||
import io.lumine.mythic.lib.version.VersionMaterial;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
@ -30,7 +32,7 @@ import java.util.List;
|
||||
public class AbilityEdition extends EditionInventory {
|
||||
private final String configKey;
|
||||
|
||||
private Ability<?> ability;
|
||||
private RegisteredSkill ability;
|
||||
|
||||
private static final DecimalFormat modifierFormat = new DecimalFormat("0.###");
|
||||
private static final int[] slots = { 23, 24, 25, 32, 33, 34, 41, 42, 43 };
|
||||
@ -48,7 +50,7 @@ public class AbilityEdition extends EditionInventory {
|
||||
|
||||
String configString = getEditedSection().getString("ability." + configKey + ".type");
|
||||
String format = configString == null ? "" : configString.toUpperCase().replace(" ", "_").replace("-", "_").replaceAll("[^A-Z_]", "");
|
||||
ability = MMOItems.plugin.getAbilities().hasAbility(format) ? MMOItems.plugin.getAbilities().getAbility(format) : null;
|
||||
ability = MMOItems.plugin.getSkills().hasSkill(format) ? MMOItems.plugin.getSkills().getSkill(format) : null;
|
||||
|
||||
ItemStack abilityItem = new ItemStack(Material.BLAZE_POWDER);
|
||||
ItemMeta abilityItemMeta = abilityItem.getItemMeta();
|
||||
@ -90,7 +92,7 @@ public class AbilityEdition extends EditionInventory {
|
||||
|
||||
if (ability != null) {
|
||||
ConfigurationSection section = getEditedSection().getConfigurationSection("ability." + configKey);
|
||||
for (String modifier : ability.getModifiers()) {
|
||||
for (String modifier : ((SkillHandler<?>) ability.getHandler()).getModifiers()) {
|
||||
ItemStack modifierItem = VersionMaterial.GRAY_DYE.toItem();
|
||||
ItemMeta modifierItemMeta = modifierItem.getItemMeta();
|
||||
modifierItemMeta.setDisplayName(ChatColor.GREEN + MMOUtils.caseOnWords(modifier.toLowerCase().replace("-", " ")));
|
||||
@ -102,12 +104,12 @@ public class AbilityEdition extends EditionInventory {
|
||||
try {
|
||||
modifierItemLore.add(ChatColor.GRAY + "Current Value: " + ChatColor.GOLD
|
||||
+ (section.contains(modifier) ? new NumericStatFormula(section.get(modifier)).toString()
|
||||
: modifierFormat.format(ability.getDefaultValue(modifier))));
|
||||
: modifierFormat.format(ability.getDefaultModifier(modifier))));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
modifierItemLore.add(ChatColor.GRAY + "Could not read value. Using default");
|
||||
}
|
||||
|
||||
modifierItemLore.add(ChatColor.GRAY + "Default Value: " + ChatColor.GOLD + modifierFormat.format(ability.getDefaultValue(modifier)));
|
||||
modifierItemLore.add(ChatColor.GRAY + "Default Value: " + ChatColor.GOLD + modifierFormat.format(ability.getDefaultModifier(modifier)));
|
||||
modifierItemLore.add("");
|
||||
modifierItemLore.add(ChatColor.YELLOW + AltChar.listDash + " Click to change this value.");
|
||||
modifierItemLore.add(ChatColor.YELLOW + AltChar.listDash + " Right click to reset.");
|
||||
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
@ -39,9 +40,9 @@ public class AbilityListEdition extends EditionInventory {
|
||||
if (getEditedSection().contains("ability"))
|
||||
for (String key : getEditedSection().getConfigurationSection("ability").getKeys(false)) {
|
||||
String abilityFormat = getEditedSection().getString("ability." + key + ".type");
|
||||
Ability ability = abilityFormat != null
|
||||
&& MMOItems.plugin.getAbilities().hasAbility(abilityFormat = abilityFormat.toUpperCase().replace(" ", "_").replace("-", "_"))
|
||||
? MMOItems.plugin.getAbilities().getAbility(abilityFormat)
|
||||
RegisteredSkill ability = abilityFormat != null
|
||||
&& MMOItems.plugin.getSkills().hasSkill(abilityFormat = abilityFormat.toUpperCase().replace(" ", "_").replace("-", "_"))
|
||||
? MMOItems.plugin.getSkills().getSkill(abilityFormat)
|
||||
: null;
|
||||
|
||||
TriggerType castMode = TriggerType.safeValueOf(getEditedSection().getString("ability." + key + ".mode"));
|
||||
@ -58,7 +59,7 @@ public class AbilityListEdition extends EditionInventory {
|
||||
boolean check = false;
|
||||
if (ability != null)
|
||||
for (String modifier : getEditedSection().getConfigurationSection("ability." + key).getKeys(false))
|
||||
if (!modifier.equals("type") && !modifier.equals("mode") && ability.getModifiers().contains(modifier))
|
||||
if (!modifier.equals("type") && !modifier.equals("mode") && ability.getHandler().getModifiers().contains(modifier))
|
||||
try {
|
||||
abilityItemLore.add(
|
||||
ChatColor.GRAY + "* " + MMOUtils.caseOnWords(modifier.toLowerCase().replace("-", " ")) + ": " + ChatColor.GOLD
|
||||
|
@ -1,17 +1,25 @@
|
||||
package net.Indyuce.mmoitems.listener;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.event.skill.PlayerCastSkillEvent;
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import io.lumine.mythic.utils.Schedulers;
|
||||
import io.lumine.mythic.utils.events.extra.ArmorEquipEvent;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.api.SoulboundInfo;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.event.AbilityUseEvent;
|
||||
import net.Indyuce.mmoitems.api.interaction.util.InteractItem;
|
||||
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Trident;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -168,4 +176,34 @@ public class PlayerListener implements Listener {
|
||||
public void registerInventoryUpdates2(PlayerItemHeldEvent event) {
|
||||
PlayerData.get(event.getPlayer()).getInventory().scheduleUpdate();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@EventHandler
|
||||
public void registerOldEvent(PlayerCastSkillEvent event) {
|
||||
|
||||
// Find caster
|
||||
PlayerData playerData = PlayerData.get(event.getPlayer().getUniqueId());
|
||||
|
||||
// Create registered skill
|
||||
RegisteredSkill registeredSkill = new RegisteredSkill(event.getCast().getHandler(), event.getCast().getHandler().getId());
|
||||
for (Object obj : event.getCast().getHandler().getModifiers()) {
|
||||
String mod = obj.toString();
|
||||
registeredSkill.setDefaultValue(mod, event.getMetadata().getModifier(mod));
|
||||
registeredSkill.setName(mod, MMOUtils.caseOnWords(mod.toLowerCase().replace("-", " ").replace("_", " ")));
|
||||
}
|
||||
|
||||
// Create ability data
|
||||
AbilityData abilityData = new AbilityData(registeredSkill, TriggerType.API);
|
||||
for (Object obj : event.getCast().getHandler().getModifiers()) {
|
||||
String mod = obj.toString();
|
||||
abilityData.setModifier(mod, event.getMetadata().getModifier(mod));
|
||||
}
|
||||
|
||||
// Find ability target
|
||||
LivingEntity target = event.getMetadata().hasTargetEntity() && event.getMetadata().getTargetEntityOrNull() instanceof LivingEntity ?
|
||||
(LivingEntity) event.getMetadata().getTargetEntityOrNull() : null;
|
||||
|
||||
// Call event for compatibility
|
||||
Bukkit.getPluginManager().callEvent(new AbilityUseEvent(playerData, abilityData, target));
|
||||
}
|
||||
}
|
||||
|
@ -1,110 +1,56 @@
|
||||
package net.Indyuce.mmoitems.manager;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.comp.mythicmobs.skill.MythicMobsAbility;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.event.Listener;
|
||||
import net.Indyuce.mmoitems.ability.BackwardsCompatibleAbility;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Deprecated
|
||||
public class AbilityManager {
|
||||
private final Map<String, Ability> abilities = new HashMap<>();
|
||||
public Ability getAbility(String id) {
|
||||
return new BackwardsCompatibleAbility(MMOItems.plugin.getSkills().getSkillOrThrow(id));
|
||||
}
|
||||
|
||||
private boolean registration = true;
|
||||
public boolean hasAbility(String id) {
|
||||
return MMOItems.plugin.getSkills().hasSkill(id);
|
||||
}
|
||||
|
||||
public Ability getAbility(String id) {
|
||||
return abilities.get(id);
|
||||
}
|
||||
/**
|
||||
* @return Collection of all active abilities
|
||||
*/
|
||||
public Collection<Ability> getAll() {
|
||||
return MMOItems.plugin.getSkills().getAll().stream().map(skill -> new BackwardsCompatibleAbility(skill)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public boolean hasAbility(String id) {
|
||||
return abilities.containsKey(id);
|
||||
}
|
||||
/**
|
||||
* Add multiple abilities at the same time
|
||||
* but for multiple abilities.
|
||||
*
|
||||
* @param abilities - Refer to {@link #registerAbility(Ability ability)}
|
||||
*/
|
||||
public void registerAbilities(Ability... abilities) {
|
||||
for (Ability ability : abilities)
|
||||
registerAbility(ability);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection of all active abilities
|
||||
*/
|
||||
public Collection<Ability> getAll() {
|
||||
return abilities.values();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add multiple abilities at the same time
|
||||
* but for multiple abilities.
|
||||
*
|
||||
* @param abilities - Refer to {@link #registerAbility(Ability ability)}
|
||||
*/
|
||||
public void registerAbilities(Ability... abilities) {
|
||||
for (Ability ability : abilities)
|
||||
registerAbility(ability);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers an ability in MMOItems. This must be called before MMOItems enables,
|
||||
* therefore either using a loadbefore of MMOItems and while the plugin enables,
|
||||
* or using a dependency and usign #onLoad().
|
||||
* <p>
|
||||
* This method does NOT register listeners.
|
||||
* <p>
|
||||
* Throws an IAE if anything goes wrong.
|
||||
*
|
||||
* @param ability Ability to register
|
||||
*/
|
||||
public void registerAbility(Ability ability) {
|
||||
Validate.isTrue(registration, "Ability registration is disabled");
|
||||
Validate.isTrue(!hasAbility(ability.getID()), "An ability is already registered with the same ID");
|
||||
|
||||
// Add to all ability list
|
||||
abilities.put(ability.getID(), ability);
|
||||
}
|
||||
|
||||
public void loadPluginAbilities() {
|
||||
|
||||
// Load MMOItems default abilities
|
||||
try {
|
||||
JarFile file = new JarFile(MMOItems.plugin.getJarFile());
|
||||
for (Enumeration<JarEntry> enu = file.entries(); enu.hasMoreElements(); ) {
|
||||
String name = enu.nextElement().getName().replace("/", ".");
|
||||
if (!name.contains("$") && name.endsWith(".class") && name.startsWith("net.Indyuce.mmoitems.ability.list.")) {
|
||||
Ability ability = (Ability) Class.forName(name.substring(0, name.length() - 6)).newInstance();
|
||||
registerAbility(ability);
|
||||
if (ability instanceof Listener)
|
||||
Bukkit.getPluginManager().registerEvents((Listener) ability, MMOItems.plugin);
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
} catch (IOException | InstantiationException | IllegalAccessException | ClassNotFoundException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
|
||||
File mythicMobs = new File(MMOItems.plugin.getDataFolder() + "/dynamic/mythic-mobs-abilities");
|
||||
if (!mythicMobs.exists() && !mythicMobs.mkdirs())
|
||||
MMOItems.plugin.getLogger().warning("Failed DIR generation!");
|
||||
|
||||
// Load MythicMobs addon skills
|
||||
if (Bukkit.getPluginManager().getPlugin("MythicMobs") != null)
|
||||
loadMythicMobsAbilities(mythicMobs);
|
||||
|
||||
// Finally disable ability registration
|
||||
registration = false;
|
||||
}
|
||||
|
||||
private void loadMythicMobsAbilities(File file) {
|
||||
if (file.isDirectory())
|
||||
Arrays.asList(file.listFiles()).forEach(subfile -> loadMythicMobsAbilities(subfile));
|
||||
else
|
||||
try {
|
||||
registerAbility(new MythicMobsAbility(file.getName().substring(0, file.getName().length() - 4), YamlConfiguration.loadConfiguration(file)));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
MMOItems.plugin.getLogger().log(Level.WARNING, "Could not load ability from '" + file.getName() + "': " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Registers an ability in MMOItems. This must be called before MMOItems enables,
|
||||
* therefore either using a loadbefore of MMOItems and while the plugin enables,
|
||||
* or using a dependency and usign #onLoad().
|
||||
* <p>
|
||||
* This method does NOT register listeners.
|
||||
* <p>
|
||||
* Throws an IAE if anything goes wrong.
|
||||
*
|
||||
* @param ability Ability to register
|
||||
*/
|
||||
public void registerAbility(Ability ability) {
|
||||
MythicLib.plugin.getSkills().registerSkillHandler(ability);
|
||||
MMOItems.plugin.getSkills().registerSkill(new RegisteredSkill(ability));
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package net.Indyuce.mmoitems.manager;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.util.AltChar;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
@ -13,6 +14,7 @@ import net.Indyuce.mmoitems.api.item.util.ConfigItem;
|
||||
import net.Indyuce.mmoitems.api.item.util.ConfigItems;
|
||||
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
|
||||
import net.Indyuce.mmoitems.api.util.message.Message;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import net.Indyuce.mmoitems.stat.GemUpgradeScaling;
|
||||
import net.Indyuce.mmoitems.stat.LuteAttackEffectStat.LuteAttackEffect;
|
||||
import net.Indyuce.mmoitems.stat.StaffSpiritStat.StaffSpirit;
|
||||
@ -50,7 +52,6 @@ public class ConfigManager implements Reloadable {
|
||||
private static final String[] fileNames = {"abilities", "messages", "potion-effects", "stats", "items", "attack-effects"};
|
||||
private static final String[] languages = {"french", "chinese", "spanish", "russian", "polish"};
|
||||
|
||||
// try to setup non existing languages
|
||||
public ConfigManager() {
|
||||
|
||||
mkdir("layouts");
|
||||
@ -78,6 +79,7 @@ public class ConfigManager implements Reloadable {
|
||||
} else MMOItems.plugin.getLogger().log(Level.WARNING, "Could not create directory!");
|
||||
}
|
||||
|
||||
// Setup non existing language files
|
||||
for (String language : languages) {
|
||||
File languageFolder = new File(MMOItems.plugin.getDataFolder() + "/language/" + language);
|
||||
if (!languageFolder.exists())
|
||||
@ -127,12 +129,12 @@ public class ConfigManager implements Reloadable {
|
||||
messages.save();
|
||||
|
||||
ConfigFile abilities = new ConfigFile("/language", "abilities");
|
||||
for (Ability<?> ability : MMOItems.plugin.getAbilities().getAll()) {
|
||||
String path = ability.getLowerCaseID();
|
||||
for (RegisteredSkill ability : MMOItems.plugin.getSkills().getAll()) {
|
||||
String path = ability.getHandler().getLowerCaseId();
|
||||
if (!abilities.getConfig().getKeys(true).contains("ability." + path))
|
||||
abilities.getConfig().set("ability." + path, ability.getName());
|
||||
|
||||
for (String modifier : ability.getModifiers())
|
||||
for (String modifier : ((SkillHandler<?>) ability.getHandler()).getModifiers())
|
||||
if (!abilities.getConfig().getKeys(true).contains("modifier." + modifier))
|
||||
abilities.getConfig().set("modifier." + modifier, MMOUtils.caseOnWords(modifier.replace("-", " ")));
|
||||
}
|
||||
@ -248,6 +250,7 @@ public class ConfigManager implements Reloadable {
|
||||
return MythicLib.plugin.parseColors(found == null ? "<MessageNotFound:" + path + ">" : found);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public String getAbilityName(Ability ability) {
|
||||
String configName = abilities.getConfig().getString("ability." + ability.getLowerCaseID());
|
||||
return configName != null ? configName : ability.getName();
|
||||
@ -257,6 +260,7 @@ public class ConfigManager implements Reloadable {
|
||||
return abilities.getConfig().getString("cast-mode." + mode.getLowerCaseId());
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public String getModifierName(String path) {
|
||||
return abilities.getConfig().getString("modifier." + path);
|
||||
}
|
||||
|
85
src/main/java/net/Indyuce/mmoitems/manager/SkillManager.java
Normal file
85
src/main/java/net/Indyuce/mmoitems/manager/SkillManager.java
Normal file
@ -0,0 +1,85 @@
|
||||
package net.Indyuce.mmoitems.manager;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.api.ConfigFile;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class SkillManager {
|
||||
private final Map<String, RegisteredSkill> skills = new HashMap<>();
|
||||
|
||||
public RegisteredSkill getSkill(String id) {
|
||||
return skills.get(id);
|
||||
}
|
||||
|
||||
public RegisteredSkill getSkillOrThrow(String id) {
|
||||
return Objects.requireNonNull(skills.get(id), "Could not find skill with ID '" + id + "'");
|
||||
}
|
||||
|
||||
public void registerSkill(RegisteredSkill skill) {
|
||||
Validate.notNull(skill);
|
||||
|
||||
this.skills.put(skill.getHandler().getId(), skill);
|
||||
}
|
||||
|
||||
public boolean hasSkill(String id) {
|
||||
return skills.containsKey(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection of all registered skills. It has the same number
|
||||
* of elements as MythicLib's skill handler registry.
|
||||
*/
|
||||
public Collection<RegisteredSkill> getAll() {
|
||||
return skills.values();
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
|
||||
// Check for default files
|
||||
File skillFolder = new File(MMOItems.plugin.getDataFolder() + "/skill");
|
||||
if (!skillFolder.exists())
|
||||
try {
|
||||
skillFolder.mkdir();
|
||||
|
||||
for (SkillHandler handler : MythicLib.plugin.getSkills().getHandlers()) {
|
||||
InputStream res = MMOItems.plugin.getResource("default/skill/" + handler.getLowerCaseId() + ".yml");
|
||||
if (res != null)
|
||||
Files.copy(res, new File(MMOItems.plugin.getDataFolder() + "/skill/" + handler.getLowerCaseId() + ".yml").getAbsoluteFile().toPath());
|
||||
}
|
||||
} catch (IOException exception) {
|
||||
MMOItems.plugin.getLogger().log(Level.WARNING, "Could not save default ability configs: " + exception.getMessage());
|
||||
}
|
||||
|
||||
for (SkillHandler handler : MythicLib.plugin.getSkills().getHandlers()) {
|
||||
|
||||
// Check if config file exists
|
||||
ConfigFile config = new ConfigFile("/skill", handler.getLowerCaseId());
|
||||
if (!config.exists()) {
|
||||
config.getConfig().set("name", MMOUtils.caseOnWords(handler.getId().replace("_", " ").replace("-", " ").toLowerCase()));
|
||||
for (Object mod : handler.getModifiers()) {
|
||||
config.getConfig().set("modifier." + mod + ".name", MMOUtils.caseOnWords(mod.toString().replace("-", " ").toLowerCase()));
|
||||
config.getConfig().set("modifier." + mod + ".default-value", 0);
|
||||
}
|
||||
config.save();
|
||||
}
|
||||
|
||||
RegisteredSkill skill = new RegisteredSkill(handler, config.getConfig());
|
||||
this.skills.put(handler.getId(), skill);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package net.Indyuce.mmoitems.skill;
|
||||
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class RegisteredSkill {
|
||||
private final SkillHandler<?> handler;
|
||||
private final String name;
|
||||
private final Map<String, String> modifierNames = new HashMap<>();
|
||||
private final Map<String, Double> modifierDefaultValues = new HashMap<>();
|
||||
|
||||
public RegisteredSkill(SkillHandler<?> handler, ConfigurationSection config) {
|
||||
this.handler = handler;
|
||||
|
||||
this.name = Objects.requireNonNull(config.getString("name"), "Could not fill skill name");
|
||||
for (Object obj : handler.getModifiers()) {
|
||||
String mod = obj.toString();
|
||||
modifierNames.put(mod, Objects.requireNonNull(config.getString("modifier." + mod + ".name"), "Could not find translation for modifier '" + mod + "'"));
|
||||
modifierDefaultValues.put(mod, config.getDouble("modifier." + mod + ".default-value"));
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public RegisteredSkill(Ability ability) {
|
||||
this.handler = ability;
|
||||
this.name = MMOItems.plugin.getLanguage().getAbilityName(ability);
|
||||
|
||||
for (String mod : handler.getModifiers()) {
|
||||
modifierDefaultValues.put(mod, ability.getDefaultValue(mod));
|
||||
modifierNames.put(mod, MMOUtils.caseOnWords(mod.toLowerCase().replace("_", " ").replace("-", " ")));
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public RegisteredSkill(SkillHandler handler, String name) {
|
||||
this.handler = handler;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public SkillHandler getHandler() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setDefaultValue(String modifier, double value) {
|
||||
modifierDefaultValues.put(modifier, value);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setName(String modifier, String name) {
|
||||
modifierNames.put(modifier, name);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getModifierName(String modifier) {
|
||||
return modifierNames.get(modifier);
|
||||
}
|
||||
|
||||
public double getDefaultModifier(String modifier) {
|
||||
return modifierDefaultValues.get(modifier);
|
||||
}
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
package net.Indyuce.mmoitems.ability.list.vector;
|
||||
package net.Indyuce.mmoitems.skill;
|
||||
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.comp.target.InteractionType;
|
||||
import io.lumine.mythic.lib.damage.DamageMetadata;
|
||||
import io.lumine.mythic.lib.damage.DamageType;
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.skill.result.def.VectorSkillResult;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.ability.VectorAbility;
|
||||
import net.Indyuce.mmoitems.ability.metadata.VectorAbilityMetadata;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import net.Indyuce.mmoitems.api.ItemAttackMetadata;
|
||||
import net.Indyuce.mmoitems.api.interaction.projectile.EntityData;
|
||||
import org.bukkit.Color;
|
||||
@ -17,6 +17,7 @@ import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.ShulkerBullet;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -28,21 +29,23 @@ import org.bukkit.util.Vector;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class Shulker_Missile extends VectorAbility implements Listener {
|
||||
public class Shulker_Missile extends SkillHandler<VectorSkillResult> implements Listener {
|
||||
public Shulker_Missile() {
|
||||
super();
|
||||
|
||||
addModifier("cooldown", 12);
|
||||
addModifier("damage", 5);
|
||||
addModifier("effect-duration", 5);
|
||||
addModifier("duration", 5);
|
||||
addModifier("mana", 0);
|
||||
addModifier("stamina", 0);
|
||||
registerModifiers("damage", "effect-duration", "duration");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenCast(AttackMetadata attack, VectorAbilityMetadata ability) {
|
||||
double duration = ability.getModifier("duration");
|
||||
public VectorSkillResult getResult(SkillMetadata meta) {
|
||||
return new VectorSkillResult(meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenCast(VectorSkillResult result, SkillMetadata skillMeta) {
|
||||
double duration = skillMeta.getModifier("duration");
|
||||
|
||||
Player caster = skillMeta.getCaster().getPlayer();
|
||||
|
||||
new BukkitRunnable() {
|
||||
double n = 0;
|
||||
@ -53,14 +56,14 @@ public class Shulker_Missile extends VectorAbility implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
Vector vec = ability.getTarget();
|
||||
attack.getPlayer().getWorld().playSound(attack.getPlayer().getLocation(), Sound.ENTITY_WITHER_SHOOT, 2, 2);
|
||||
ShulkerBullet shulkerBullet = (ShulkerBullet) attack.getPlayer().getWorld().spawnEntity(attack.getPlayer().getLocation().add(0, 1, 0),
|
||||
Vector vec = result.getTarget();
|
||||
caster.getWorld().playSound(caster.getLocation(), Sound.ENTITY_WITHER_SHOOT, 2, 2);
|
||||
ShulkerBullet shulkerBullet = (ShulkerBullet) caster.getWorld().spawnEntity(caster.getLocation().add(0, 1, 0),
|
||||
EntityType.SHULKER_BULLET);
|
||||
shulkerBullet.setShooter(attack.getPlayer());
|
||||
shulkerBullet.setShooter(caster);
|
||||
|
||||
ItemAttackMetadata attackMeta = new ItemAttackMetadata(new DamageMetadata(ability.getModifier("damage"), DamageType.SKILL, DamageType.MAGIC, DamageType.PROJECTILE), attack.getStats());
|
||||
MMOItems.plugin.getEntities().registerCustomEntity(shulkerBullet, new ShulkerMissileEntityData(attackMeta, ability.getModifier("effect-duration")));
|
||||
ItemAttackMetadata attackMeta = new ItemAttackMetadata(new DamageMetadata(skillMeta.getModifier("damage"), DamageType.SKILL, DamageType.MAGIC, DamageType.PROJECTILE), skillMeta.getStats());
|
||||
MMOItems.plugin.getEntities().registerCustomEntity(shulkerBullet, new ShulkerMissileEntityData(attackMeta, skillMeta.getModifier("effect-duration")));
|
||||
|
||||
new BukkitRunnable() {
|
||||
double ti = 0;
|
@ -8,6 +8,7 @@ import java.util.Optional;
|
||||
import com.google.gson.*;
|
||||
import io.lumine.mythic.lib.api.item.SupportedNBTTagValues;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
@ -16,7 +17,6 @@ import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
|
||||
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
|
||||
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
|
||||
@ -65,13 +65,12 @@ public class Abilities extends ItemStat {
|
||||
String modifierFormat = ItemStat.translate("ability-modifier"), abilityFormat = ItemStat.translate("ability-format");
|
||||
|
||||
((AbilityListData) data).getAbilities().forEach(ability -> {
|
||||
abilityLore.add(abilityFormat.replace("#c", MMOItems.plugin.getLanguage().getCastingModeName(ability.getTriggerType())).replace("#a",
|
||||
MMOItems.plugin.getLanguage().getAbilityName(ability.getAbility())));
|
||||
abilityLore.add(abilityFormat.replace("#c", MMOItems.plugin.getLanguage().getCastingModeName(ability.getTriggerType())).replace("#a", ability.getAbility().getName()));
|
||||
|
||||
for (String modifier : ability.getModifiers()) {
|
||||
item.getLore().registerPlaceholder("ability_" + ability.getAbility().getID().toLowerCase() + "_" + modifier,
|
||||
item.getLore().registerPlaceholder("ability_" + ability.getAbility().getHandler().getId().toLowerCase() + "_" + modifier,
|
||||
this.modifierFormat.format(ability.getModifier(modifier)));
|
||||
abilityLore.add(modifierFormat.replace("#m", MMOItems.plugin.getLanguage().getModifierName(modifier)).replace("#v",
|
||||
abilityLore.add(modifierFormat.replace("#m", ability.getAbility().getModifierName(modifier)).replace("#v",
|
||||
this.modifierFormat.format(ability.getModifier(modifier))));
|
||||
}
|
||||
|
||||
@ -116,9 +115,9 @@ public class Abilities extends ItemStat {
|
||||
|
||||
String format = message.toUpperCase().replace("-", "_").replace(" ", "_").replaceAll("[^A-Z_]", "");
|
||||
if (edited.equals("ability")) {
|
||||
Validate.isTrue(MMOItems.plugin.getAbilities().hasAbility(format),
|
||||
Validate.isTrue(MMOItems.plugin.getSkills().hasSkill(format),
|
||||
"format is not a valid ability! You may check the ability list using /mi list ability.");
|
||||
Ability ability = MMOItems.plugin.getAbilities().getAbility(format);
|
||||
RegisteredSkill ability = MMOItems.plugin.getSkills().getSkill(format);
|
||||
|
||||
inv.getEditedSection().set("ability." + configKey, null);
|
||||
inv.getEditedSection().set("ability." + configKey + ".type", format);
|
||||
|
@ -1,26 +1,23 @@
|
||||
package net.Indyuce.mmoitems.stat.data;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownInfo;
|
||||
import io.lumine.mythic.lib.skill.Skill;
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerMetadata;
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.ItemStats;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.api.player.RPGPlayer;
|
||||
import net.Indyuce.mmoitems.api.util.message.Message;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.HashMap;
|
||||
@ -29,12 +26,12 @@ import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class AbilityData extends Skill {
|
||||
private final Ability ability;
|
||||
private final RegisteredSkill ability;
|
||||
private final TriggerType triggerType;
|
||||
private final Map<String, Double> modifiers = new HashMap<>();
|
||||
|
||||
public AbilityData(JsonObject object) {
|
||||
ability = MMOItems.plugin.getAbilities().getAbility(object.get("Id").getAsString());
|
||||
ability = MMOItems.plugin.getSkills().getSkill(object.get("Id").getAsString());
|
||||
triggerType = MMOUtils.backwardsCompatibleTriggerType(object.get("CastMode").getAsString());
|
||||
|
||||
JsonObject modifiers = object.getAsJsonObject("Modifiers");
|
||||
@ -45,23 +42,23 @@ public class AbilityData extends Skill {
|
||||
Validate.isTrue(config.contains("type") && config.contains("mode"), "Ability is missing type or mode");
|
||||
|
||||
String abilityFormat = config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_");
|
||||
Validate.isTrue(MMOItems.plugin.getAbilities().hasAbility(abilityFormat), "Could not find ability called '" + abilityFormat + "'");
|
||||
ability = MMOItems.plugin.getAbilities().getAbility(abilityFormat);
|
||||
Validate.isTrue(MMOItems.plugin.getSkills().hasSkill(abilityFormat), "Could not find ability called '" + abilityFormat + "'");
|
||||
ability = MMOItems.plugin.getSkills().getSkill(abilityFormat);
|
||||
|
||||
String modeFormat = config.getString("mode").toUpperCase().replace("-", "_").replace(" ", "_");
|
||||
triggerType = MMOUtils.backwardsCompatibleTriggerType(modeFormat);
|
||||
|
||||
for (String key : config.getKeys(false))
|
||||
if (!key.equalsIgnoreCase("mode") && !key.equalsIgnoreCase("type") && ability.getModifiers().contains(key))
|
||||
if (!key.equalsIgnoreCase("mode") && !key.equalsIgnoreCase("type") && ability.getHandler().getModifiers().contains(key))
|
||||
modifiers.put(key, config.getDouble(key));
|
||||
}
|
||||
|
||||
public AbilityData(Ability ability, TriggerType triggerType) {
|
||||
public AbilityData(RegisteredSkill ability, TriggerType triggerType) {
|
||||
this.ability = ability;
|
||||
this.triggerType = triggerType;
|
||||
}
|
||||
|
||||
public Ability getAbility() {
|
||||
public RegisteredSkill getAbility() {
|
||||
return ability;
|
||||
}
|
||||
|
||||
@ -107,7 +104,7 @@ public class AbilityData extends Skill {
|
||||
|
||||
// Check for permission
|
||||
if (MMOItems.plugin.getConfig().getBoolean("permissions.abilities")
|
||||
&& !player.hasPermission("mmoitems.ability." + getHandler().getId().toLowerCase().replace("_", "-"))
|
||||
&& !player.hasPermission("mmoitems.ability." + getHandler().getLowerCaseId())
|
||||
&& !player.hasPermission("mmoitems.bypass.ability"))
|
||||
return false;
|
||||
|
||||
@ -147,18 +144,17 @@ public class AbilityData extends Skill {
|
||||
|
||||
@Override
|
||||
public SkillHandler getHandler() {
|
||||
// TODO
|
||||
return null;
|
||||
return ability.getHandler();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getModifier(String path) {
|
||||
return modifiers.getOrDefault(path, ability.getDefaultValue(path));
|
||||
return modifiers.getOrDefault(path, ability.getDefaultModifier(path));
|
||||
}
|
||||
|
||||
public JsonObject toJson() {
|
||||
JsonObject object = new JsonObject();
|
||||
object.addProperty("Id", ability.getID());
|
||||
object.addProperty("Id", ability.getHandler().getId());
|
||||
object.addProperty("CastMode", triggerType.name());
|
||||
|
||||
JsonObject modifiers = new JsonObject();
|
||||
|
@ -6,17 +6,17 @@ import java.util.Set;
|
||||
|
||||
import io.lumine.mythic.lib.skill.trigger.TriggerType;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.skill.RegisteredSkill;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
|
||||
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
|
||||
public class RandomAbilityData {
|
||||
private final Ability ability;
|
||||
private final RegisteredSkill ability;
|
||||
private final TriggerType triggerType;
|
||||
private final Map<String, NumericStatFormula> modifiers = new HashMap<>();
|
||||
|
||||
@ -24,23 +24,23 @@ public class RandomAbilityData {
|
||||
Validate.isTrue(config.contains("type") && config.contains("mode"), "Ability is missing type or mode");
|
||||
|
||||
String abilityFormat = config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_");
|
||||
Validate.isTrue(MMOItems.plugin.getAbilities().hasAbility(abilityFormat), "Could not find ability called '" + abilityFormat + "'");
|
||||
ability = MMOItems.plugin.getAbilities().getAbility(abilityFormat);
|
||||
Validate.isTrue(MMOItems.plugin.getSkills().hasSkill(abilityFormat), "Could not find ability called '" + abilityFormat + "'");
|
||||
ability = MMOItems.plugin.getSkills().getSkill(abilityFormat);
|
||||
|
||||
String modeFormat = config.getString("mode").toUpperCase().replace("-", "_").replace(" ", "_");
|
||||
triggerType = MMOUtils.backwardsCompatibleTriggerType(modeFormat);
|
||||
|
||||
for (String key : config.getKeys(false))
|
||||
if (!key.equalsIgnoreCase("mode") && !key.equalsIgnoreCase("type") && ability.getModifiers().contains(key))
|
||||
if (!key.equalsIgnoreCase("mode") && !key.equalsIgnoreCase("type") && ability.getHandler().getModifiers().contains(key))
|
||||
modifiers.put(key, new NumericStatFormula(config.get(key)));
|
||||
}
|
||||
|
||||
public RandomAbilityData(Ability ability, TriggerType triggerType) {
|
||||
public RandomAbilityData(RegisteredSkill ability, TriggerType triggerType) {
|
||||
this.ability = ability;
|
||||
this.triggerType = triggerType;
|
||||
}
|
||||
|
||||
public Ability getAbility() {
|
||||
public RegisteredSkill getAbility() {
|
||||
return ability;
|
||||
}
|
||||
|
||||
|
20
src/main/resources/default/skill/arcane-hail.yml
Normal file
20
src/main/resources/default/skill/arcane-hail.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Arcane Hail
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 3.0
|
23
src/main/resources/default/skill/arcane-rift.yml
Normal file
23
src/main/resources/default/skill/arcane-rift.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Arcane Rift
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 1.5
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 2.0
|
||||
speed:
|
||||
name: Speed
|
||||
default-value: 1.0
|
17
src/main/resources/default/skill/black-hole.yml
Normal file
17
src/main/resources/default/skill/black-hole.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Black Hole
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 35.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 2.0
|
14
src/main/resources/default/skill/blind.yml
Normal file
14
src/main/resources/default/skill/blind.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Blind
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 9.0
|
14
src/main/resources/default/skill/blink.yml
Normal file
14
src/main/resources/default/skill/blink.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Blink
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
range:
|
||||
name: Range
|
||||
default-value: 8.0
|
23
src/main/resources/default/skill/blizzard.yml
Normal file
23
src/main/resources/default/skill/blizzard.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Blizzard
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.5
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
inaccuracy:
|
||||
name: Inaccuracy
|
||||
default-value: 10.0
|
||||
force:
|
||||
name: Force
|
||||
default-value: 1.0
|
14
src/main/resources/default/skill/bloodbath.yml
Normal file
14
src/main/resources/default/skill/bloodbath.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Bloodbath
|
||||
modifier:
|
||||
amount:
|
||||
name: Amount
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 8.0
|
23
src/main/resources/default/skill/bouncy-fireball.yml
Normal file
23
src/main/resources/default/skill/bouncy-fireball.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Bouncy Fireball
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 5.0
|
||||
ignite:
|
||||
name: Ignite
|
||||
default-value: 40.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 20.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 4.0
|
||||
speed:
|
||||
name: Speed
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/bunny-mode.yml
Normal file
20
src/main/resources/default/skill/bunny-mode.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Bunny Mode
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 20.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 50.0
|
||||
jump-force:
|
||||
name: Jump Force
|
||||
default-value: 1.0
|
||||
speed:
|
||||
name: Speed
|
||||
default-value: 1.0
|
14
src/main/resources/default/skill/burn.yml
Normal file
14
src/main/resources/default/skill/burn.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Burn
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 8.0
|
17
src/main/resources/default/skill/burning-hands.yml
Normal file
17
src/main/resources/default/skill/burning-hands.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Burning Hands
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
23
src/main/resources/default/skill/chicken-wraith.yml
Normal file
23
src/main/resources/default/skill/chicken-wraith.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Chicken Wraith
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.5
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
inaccuracy:
|
||||
name: Inaccuracy
|
||||
default-value: 10.0
|
||||
force:
|
||||
name: Force
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/circular-slash.yml
Normal file
20
src/main/resources/default/skill/circular-slash.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Circular Slash
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 3.0
|
11
src/main/resources/default/skill/confuse.yml
Normal file
11
src/main/resources/default/skill/confuse.yml
Normal file
@ -0,0 +1,11 @@
|
||||
name: Confuse
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 7.0
|
17
src/main/resources/default/skill/contamination.yml
Normal file
17
src/main/resources/default/skill/contamination.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Contamination
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 8.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
20
src/main/resources/default/skill/corrosion.yml
Normal file
20
src/main/resources/default/skill/corrosion.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Corrosion
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
20
src/main/resources/default/skill/corrupt.yml
Normal file
20
src/main/resources/default/skill/corrupt.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Corrupt
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 8.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
17
src/main/resources/default/skill/corrupted-fangs.yml
Normal file
17
src/main/resources/default/skill/corrupted-fangs.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Corrupted Fangs
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
fangs:
|
||||
name: Fangs
|
||||
default-value: 6.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 12.0
|
17
src/main/resources/default/skill/cursed-beam.yml
Normal file
17
src/main/resources/default/skill/cursed-beam.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Cursed Beam
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 5.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 8.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
20
src/main/resources/default/skill/death-mark.yml
Normal file
20
src/main/resources/default/skill/death-mark.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Death Mark
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 7.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/earthquake.yml
Normal file
20
src/main/resources/default/skill/earthquake.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Earthquake
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
23
src/main/resources/default/skill/explosive-turkey.yml
Normal file
23
src/main/resources/default/skill/explosive-turkey.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Explosive Turkey
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 4.0
|
20
src/main/resources/default/skill/fire-meteor.yml
Normal file
20
src/main/resources/default/skill/fire-meteor.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Fire Meteor
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 4.0
|
17
src/main/resources/default/skill/firebolt.yml
Normal file
17
src/main/resources/default/skill/firebolt.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Firebolt
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
ignite:
|
||||
name: Ignite
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
20
src/main/resources/default/skill/firefly.yml
Normal file
20
src/main/resources/default/skill/firefly.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Firefly
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.5
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/freeze.yml
Normal file
20
src/main/resources/default/skill/freeze.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Freeze
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 2.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
23
src/main/resources/default/skill/freezing-curse.yml
Normal file
23
src/main/resources/default/skill/freezing-curse.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Freezing Curse
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 7.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 3.0
|
20
src/main/resources/default/skill/frog-mode.yml
Normal file
20
src/main/resources/default/skill/frog-mode.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Frog Mode
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 20.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 50.0
|
||||
jump-force:
|
||||
name: Jump Force
|
||||
default-value: 1.0
|
||||
speed:
|
||||
name: Speed
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/frozen-aura.yml
Normal file
20
src/main/resources/default/skill/frozen-aura.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Frozen Aura
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 10.0
|
17
src/main/resources/default/skill/grand-heal.yml
Normal file
17
src/main/resources/default/skill/grand-heal.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Grand Heal
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
heal:
|
||||
name: Heal
|
||||
default-value: 5.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 15.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
14
src/main/resources/default/skill/heal.yml
Normal file
14
src/main/resources/default/skill/heal.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Heal
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
heal:
|
||||
name: Heal
|
||||
default-value: 4.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
17
src/main/resources/default/skill/heavy-charge.yml
Normal file
17
src/main/resources/default/skill/heavy-charge.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Heavy Charge
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
11
src/main/resources/default/skill/hoearthquake.yml
Normal file
11
src/main/resources/default/skill/hoearthquake.yml
Normal file
@ -0,0 +1,11 @@
|
||||
name: Hoearthquake
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
17
src/main/resources/default/skill/holy-missile.yml
Normal file
17
src/main/resources/default/skill/holy-missile.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Holy Missile
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
20
src/main/resources/default/skill/ice-crystal.yml
Normal file
20
src/main/resources/default/skill/ice-crystal.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Ice Crystal
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/ignite.yml
Normal file
20
src/main/resources/default/skill/ignite.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Ignite
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 80.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
max-ignite:
|
||||
name: Max Ignite
|
||||
default-value: 200.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
23
src/main/resources/default/skill/item-bomb.yml
Normal file
23
src/main/resources/default/skill/item-bomb.yml
Normal file
@ -0,0 +1,23 @@
|
||||
name: Item Bomb
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 7.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
slow-duration:
|
||||
name: Slow Duration
|
||||
default-value: 4.0
|
||||
slow-amplifier:
|
||||
name: Slow Amplifier
|
||||
default-value: 1.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 15.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 6.0
|
17
src/main/resources/default/skill/item-throw.yml
Normal file
17
src/main/resources/default/skill/item-throw.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Item Throw
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
force:
|
||||
name: Force
|
||||
default-value: 1.0
|
14
src/main/resources/default/skill/leap.yml
Normal file
14
src/main/resources/default/skill/leap.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Leap
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
force:
|
||||
name: Force
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/life-ender.yml
Normal file
20
src/main/resources/default/skill/life-ender.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Life Ender
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 4.0
|
17
src/main/resources/default/skill/light-dash.yml
Normal file
17
src/main/resources/default/skill/light-dash.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Light Dash
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
length:
|
||||
name: Length
|
||||
default-value: 1.0
|
17
src/main/resources/default/skill/lightning-beam.yml
Normal file
17
src/main/resources/default/skill/lightning-beam.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Lightning Beam
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 8.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
14
src/main/resources/default/skill/magical-path.yml
Normal file
14
src/main/resources/default/skill/magical-path.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Magical Path
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 15.0
|
20
src/main/resources/default/skill/magical-shield.yml
Normal file
20
src/main/resources/default/skill/magical-shield.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Magical Shield
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 35.0
|
||||
power:
|
||||
name: Power
|
||||
default-value: 40.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
17
src/main/resources/default/skill/magma-fissure.yml
Normal file
17
src/main/resources/default/skill/magma-fissure.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Magma Fissure
|
||||
modifier:
|
||||
ignite:
|
||||
name: Ignite
|
||||
default-value: 4.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 4.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
20
src/main/resources/default/skill/minor-explosion.yml
Normal file
20
src/main/resources/default/skill/minor-explosion.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Minor Explosion
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knockback:
|
||||
name: Knockback
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 5.0
|
17
src/main/resources/default/skill/overload.yml
Normal file
17
src/main/resources/default/skill/overload.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Overload
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 6.0
|
17
src/main/resources/default/skill/poison.yml
Normal file
17
src/main/resources/default/skill/poison.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Poison
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/present-throw.yml
Normal file
20
src/main/resources/default/skill/present-throw.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Present Throw
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 6.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
force:
|
||||
name: Force
|
||||
default-value: 1.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 4.0
|
17
src/main/resources/default/skill/regen-ally.yml
Normal file
17
src/main/resources/default/skill/regen-ally.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Regen Ally
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
heal:
|
||||
name: Heal
|
||||
default-value: 7.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
17
src/main/resources/default/skill/shadow-veil.yml
Normal file
17
src/main/resources/default/skill/shadow-veil.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Shadow Veil
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 5.0
|
||||
deception:
|
||||
name: Deception
|
||||
default-value: 1.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 35.0
|
14
src/main/resources/default/skill/shock.yml
Normal file
14
src/main/resources/default/skill/shock.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Shock
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 8.0
|
17
src/main/resources/default/skill/shockwave.yml
Normal file
17
src/main/resources/default/skill/shockwave.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Shockwave
|
||||
modifier:
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 7.5
|
||||
length:
|
||||
name: Length
|
||||
default-value: 5.0
|
||||
knock-up:
|
||||
name: Knock Up
|
||||
default-value: 1.0
|
20
src/main/resources/default/skill/shulker-missile.yml
Normal file
20
src/main/resources/default/skill/shulker-missile.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Shulker Missile
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 5.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 5.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 12.0
|
||||
effect-duration:
|
||||
name: Effect Duration
|
||||
default-value: 5.0
|
17
src/main/resources/default/skill/sky-smash.yml
Normal file
17
src/main/resources/default/skill/sky-smash.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Sky Smash
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
knock-up:
|
||||
name: Knock Up
|
||||
default-value: 1.0
|
17
src/main/resources/default/skill/slow.yml
Normal file
17
src/main/resources/default/skill/slow.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Slow
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 3.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 5.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
14
src/main/resources/default/skill/smite.yml
Normal file
14
src/main/resources/default/skill/smite.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Smite
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 8.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
20
src/main/resources/default/skill/snowman-turret.yml
Normal file
20
src/main/resources/default/skill/snowman-turret.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Snowman Turret
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 6.0
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 35.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 20.0
|
20
src/main/resources/default/skill/sparkle.yml
Normal file
20
src/main/resources/default/skill/sparkle.yml
Normal file
@ -0,0 +1,20 @@
|
||||
name: Sparkle
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 4.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
||||
limit:
|
||||
name: Limit
|
||||
default-value: 5.0
|
||||
radius:
|
||||
name: Radius
|
||||
default-value: 6.0
|
14
src/main/resources/default/skill/starfall.yml
Normal file
14
src/main/resources/default/skill/starfall.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Starfall
|
||||
modifier:
|
||||
damage:
|
||||
name: Damage
|
||||
default-value: 3.5
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 8.0
|
14
src/main/resources/default/skill/stun.yml
Normal file
14
src/main/resources/default/skill/stun.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Stun
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 2.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 10.0
|
17
src/main/resources/default/skill/swiftness.yml
Normal file
17
src/main/resources/default/skill/swiftness.yml
Normal file
@ -0,0 +1,17 @@
|
||||
name: Swiftness
|
||||
modifier:
|
||||
duration:
|
||||
name: Duration
|
||||
default-value: 4.0
|
||||
mana:
|
||||
name: Mana
|
||||
default-value: 0.0
|
||||
stamina:
|
||||
name: Stamina
|
||||
default-value: 0.0
|
||||
cooldown:
|
||||
name: Cooldown
|
||||
default-value: 15.0
|
||||
amplifier:
|
||||
name: Amplifier
|
||||
default-value: 1.0
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user