mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-03-11 13:11:50 +01:00
ability cleanup
This commit is contained in:
parent
6278b50460
commit
392eaceaaf
4
pom.xml
4
pom.xml
@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.Indyuce</groupId>
|
||||
<artifactId>MMOItems</artifactId>
|
||||
<version>6.6.5</version>
|
||||
<version>6.7</version>
|
||||
<name>MMOItems</name>
|
||||
<description>A great item solution for your RPG server!!</description>
|
||||
|
||||
@ -141,7 +141,7 @@
|
||||
<dependency>
|
||||
<groupId>io.lumine</groupId>
|
||||
<artifactId>MythicLib-dist</artifactId>
|
||||
<version>1.2</version>
|
||||
<version>1.3</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
@ -8,19 +8,17 @@ import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.ability.ItemAbility;
|
||||
import net.Indyuce.mmoitems.ability.metadata.ItemAbilityMetadata;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import net.Indyuce.mmoitems.api.util.NoClipItem;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class Item_Bomb extends ItemAbility implements Listener {
|
||||
public class Item_Bomb extends ItemAbility {
|
||||
public Item_Bomb() {
|
||||
super();
|
||||
|
||||
|
@ -13,11 +13,10 @@ import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class Item_Throw extends ItemAbility implements Listener {
|
||||
public class Item_Throw extends ItemAbility {
|
||||
public Item_Throw() {
|
||||
super();
|
||||
|
||||
|
@ -65,7 +65,7 @@ public class Chicken_Wraith extends SimpleAbility {
|
||||
private final double damage;
|
||||
|
||||
public EggHandler(double damage) {
|
||||
super(EntityDamageByEntityEvent.getHandlerList());
|
||||
super(EntityDamageByEntityEvent.getHandlerList(), PlayerEggThrowEvent.getHandlerList());
|
||||
|
||||
this.damage = damage;
|
||||
}
|
||||
|
@ -7,10 +7,9 @@ import net.Indyuce.mmoitems.ability.metadata.SimpleAbilityMetadata;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class Frog_Mode extends SimpleAbility implements Listener {
|
||||
public class Frog_Mode extends SimpleAbility {
|
||||
public Frog_Mode() {
|
||||
super();
|
||||
|
||||
|
@ -9,12 +9,11 @@ import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class Frozen_Aura extends SimpleAbility implements Listener {
|
||||
public class Frozen_Aura extends SimpleAbility {
|
||||
public Frozen_Aura() {
|
||||
super();
|
||||
|
||||
|
@ -75,8 +75,7 @@ public class Magical_Shield extends SimpleAbility {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ti++;
|
||||
if (ti > duration * 20. / 3.)
|
||||
if (ti++ > duration * 20. / 3.)
|
||||
close();
|
||||
|
||||
for (double j = 0; j < Math.PI / 2; j += Math.PI / (28 + random.nextInt(5)))
|
||||
|
@ -17,7 +17,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class Shadow_Veil extends SimpleAbility implements Listener {
|
||||
public class Shadow_Veil extends SimpleAbility {
|
||||
public Shadow_Veil() {
|
||||
super();
|
||||
|
||||
|
@ -7,16 +7,14 @@ import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.ability.SimpleAbility;
|
||||
import net.Indyuce.mmoitems.ability.metadata.SimpleAbilityMetadata;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
import net.Indyuce.mmoitems.api.util.NoClipItem;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class Throw_Up extends SimpleAbility implements Listener {
|
||||
public class Throw_Up extends SimpleAbility {
|
||||
public Throw_Up() {
|
||||
super();
|
||||
|
||||
|
@ -12,7 +12,6 @@ import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.EvokerFangs;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
@ -20,7 +19,7 @@ import org.bukkit.util.Vector;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class Corrupted_Fangs extends VectorAbility implements Listener {
|
||||
public class Corrupted_Fangs extends VectorAbility {
|
||||
public Corrupted_Fangs() {
|
||||
super();
|
||||
|
||||
|
@ -16,12 +16,11 @@ import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class Explosive_Turkey extends VectorAbility implements Listener {
|
||||
public class Explosive_Turkey extends VectorAbility {
|
||||
public Explosive_Turkey() {
|
||||
super();
|
||||
|
||||
|
@ -12,11 +12,10 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class TNT_Throw extends VectorAbility implements Listener {
|
||||
public class TNT_Throw extends VectorAbility {
|
||||
public TNT_Throw() {
|
||||
super();
|
||||
|
||||
|
@ -358,9 +358,14 @@ public class PlayerData {
|
||||
* @param attack Current attack
|
||||
* @param target Ability target, can be null
|
||||
* @param ability Ability to cast
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
public void cast(AttackMetadata attack, LivingEntity target, AbilityData ability) {
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Apply simple conditions including mana and stamina cost, permission
|
||||
* and cooldown checks
|
||||
@ -385,14 +390,7 @@ public class PlayerData {
|
||||
* The player can cast the ability, and it was successfully cast on its
|
||||
* target, removes resources needed from the player
|
||||
*/
|
||||
if (ability.hasModifier("mana"))
|
||||
rpgPlayer.giveMana(-abilityMetadata.getModifier("mana"));
|
||||
if (ability.hasModifier("stamina"))
|
||||
rpgPlayer.giveStamina(-abilityMetadata.getModifier("stamina"));
|
||||
|
||||
double cooldown = abilityMetadata.getModifier("cooldown") * (1 - Math.min(.8, stats.getStat(ItemStats.COOLDOWN_REDUCTION) / 100));
|
||||
if (cooldown > 0)
|
||||
mmoData.getCooldownMap().applyCooldown(ability.getAbility(), cooldown);
|
||||
|
||||
/*
|
||||
* Finally cast the ability; BUG FIX: cooldown MUST be applied BEFORE
|
||||
|
@ -2,6 +2,7 @@ package net.Indyuce.mmoitems.api.player;
|
||||
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.player.cooldown.CooldownInfo;
|
||||
import io.lumine.mythic.lib.skill.SkillMetadata;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.util.message.Message;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
@ -136,7 +137,9 @@ public abstract class RPGPlayer {
|
||||
*
|
||||
* @param data Ability being cast
|
||||
* @return If the player can cast the ability
|
||||
* @deprecated Replaced by {@link AbilityData#getResult(SkillMetadata)}
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean canCast(AbilityData data) {
|
||||
|
||||
if (playerData.getMMOPlayerData().getCooldownMap().isOnCooldown(data.getAbility())) {
|
||||
|
@ -1,13 +1,14 @@
|
||||
package net.Indyuce.mmoitems.command.mmoitems;
|
||||
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.damage.DamageMetadata;
|
||||
import io.lumine.mythic.lib.commands.mmolib.api.CommandTreeNode;
|
||||
import io.lumine.mythic.lib.commands.mmolib.api.Parameter;
|
||||
import io.lumine.mythic.lib.damage.AttackMetadata;
|
||||
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.ItemAttackMetadata;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.stat.data.AbilityData;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -75,7 +76,8 @@ public class AbilityCommandTreeNode extends CommandTreeNode {
|
||||
}
|
||||
|
||||
PlayerData data = PlayerData.get(target);
|
||||
data.cast(new ItemAttackMetadata(new DamageMetadata(), data.getMMOPlayerData().getStatMap().cache(EquipmentSlot.MAIN_HAND)), null, ability);
|
||||
AttackMetadata attackMeta = new AttackMetadata(new DamageMetadata(), data.getMMOPlayerData().getStatMap().cache(EquipmentSlot.MAIN_HAND));
|
||||
ability.cast(new TriggerMetadata(attackMeta, null));
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -1,56 +1,38 @@
|
||||
package net.Indyuce.mmoitems.stat.data;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.comp.mythicmobs.MythicSkillInfo;
|
||||
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 io.lumine.mythic.lib.skill.trigger.TriggeredSkill;
|
||||
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 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;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class AbilityData implements MythicSkillInfo, TriggeredSkill {
|
||||
public class AbilityData extends Skill {
|
||||
private final Ability ability;
|
||||
private final TriggerType triggerType;
|
||||
private final Map<String, Double> modifiers = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof AbilityData)) { return false; }
|
||||
|
||||
// Compare casitng mode
|
||||
if (((AbilityData) obj).getTriggerType() != getTriggerType()) { return false; }
|
||||
|
||||
// Not same ability
|
||||
if (!((AbilityData) obj).getAbility().equals(getAbility())) { return false; }
|
||||
|
||||
// Check modifiers
|
||||
for (String mod : ((AbilityData) obj).getModifiers()) {
|
||||
|
||||
// Any difference?
|
||||
double objMod = ((AbilityData) obj).getModifier(mod);
|
||||
double thisMod = getModifier(mod);
|
||||
if (objMod != thisMod) { return false; } }
|
||||
|
||||
// Success
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(@Nullable TriggerMetadata triggerMetadata) {
|
||||
PlayerData playerData = PlayerData.get(triggerMetadata.getAttack().getPlayer().getUniqueId());
|
||||
playerData.cast(triggerMetadata.getAttack(), triggerMetadata.getTarget() instanceof LivingEntity ? (LivingEntity) triggerMetadata.getTarget() : null, this);
|
||||
}
|
||||
|
||||
public AbilityData(JsonObject object) {
|
||||
ability = MMOItems.plugin.getAbilities().getAbility(object.get("Id").getAsString());
|
||||
triggerType = MMOUtils.backwardsCompatibleTriggerType(object.get("CastMode").getAsString());
|
||||
@ -92,6 +74,7 @@ public class AbilityData implements MythicSkillInfo, TriggeredSkill {
|
||||
}
|
||||
|
||||
public void setModifier(String path, double value) {
|
||||
// Validate.isTrue(getHandler().getModifiers().contains(path), "Could not find modifier called '" + path + "'");
|
||||
modifiers.put(path, value);
|
||||
}
|
||||
|
||||
@ -99,6 +82,75 @@ public class AbilityData implements MythicSkillInfo, TriggeredSkill {
|
||||
return modifiers.containsKey(path);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public boolean getResult(SkillMetadata meta) {
|
||||
|
||||
PlayerData playerData = PlayerData.get(meta.getCaster().getUniqueId());
|
||||
RPGPlayer rpgPlayer = playerData.getRPG();
|
||||
Player player = meta.getCaster().getPlayer();
|
||||
|
||||
// Check for cooldown
|
||||
if (meta.getCaster().getCooldownMap().isOnCooldown(this)) {
|
||||
CooldownInfo info = playerData.getMMOPlayerData().getCooldownMap().getInfo(this);
|
||||
if (!triggerType.isSilent()) {
|
||||
StringBuilder progressBar = new StringBuilder(ChatColor.YELLOW + "");
|
||||
double progress = (double) (info.getInitialCooldown() - info.getRemaining()) / info.getInitialCooldown() * 10;
|
||||
String barChar = MMOItems.plugin.getConfig().getString("cooldown-progress-bar-char");
|
||||
for (int j = 0; j < 10; j++)
|
||||
progressBar.append(progress >= j ? ChatColor.GREEN : ChatColor.WHITE).append(barChar);
|
||||
Message.SPELL_ON_COOLDOWN.format(ChatColor.RED, "#left#", "" + new DecimalFormat("0.#").format(info.getRemaining() / 1000d), "#progress#",
|
||||
progressBar.toString(), "#s#", (info.getRemaining() > 1999 ? "s" : "")).send(player);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for permission
|
||||
if (MMOItems.plugin.getConfig().getBoolean("permissions.abilities")
|
||||
&& !player.hasPermission("mmoitems.ability." + getHandler().getId().toLowerCase().replace("_", "-"))
|
||||
&& !player.hasPermission("mmoitems.bypass.ability"))
|
||||
return false;
|
||||
|
||||
// Check for mana cost
|
||||
if (hasModifier("mana") && rpgPlayer.getMana() < getModifier("mana")) {
|
||||
Message.NOT_ENOUGH_MANA.format(ChatColor.RED).send(player);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for stamina cost
|
||||
if (hasModifier("stamina") && rpgPlayer.getStamina() < getModifier("stamina")) {
|
||||
Message.NOT_ENOUGH_STAMINA.format(ChatColor.RED).send(player);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenCast(SkillMetadata meta) {
|
||||
PlayerData playerData = PlayerData.get(meta.getCaster().getUniqueId());
|
||||
RPGPlayer rpgPlayer = playerData.getRPG();
|
||||
|
||||
// Apply mana cost
|
||||
if (hasModifier("mana"))
|
||||
rpgPlayer.giveMana(-meta.getModifier("mana"));
|
||||
|
||||
// Apply stamina cost
|
||||
if (hasModifier("stamina"))
|
||||
rpgPlayer.giveStamina(-meta.getModifier("stamina"));
|
||||
|
||||
// Apply cooldown
|
||||
double cooldown = meta.getModifier("cooldown") * (1 - Math.min(.8, meta.getStats().getStat("COOLDOWN_REDUCTION") / 100));
|
||||
if (cooldown > 0)
|
||||
meta.getCaster().getCooldownMap().applyCooldown(this, cooldown);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkillHandler getHandler() {
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getModifier(String path) {
|
||||
return modifiers.getOrDefault(path, ability.getDefaultValue(path));
|
||||
@ -115,4 +167,17 @@ public class AbilityData implements MythicSkillInfo, TriggeredSkill {
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
AbilityData that = (AbilityData) o;
|
||||
return ability.equals(that.ability) && triggerType == that.triggerType && modifiers.equals(that.modifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(ability, triggerType, modifiers);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user