diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java index e2e4280..5abb34c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java @@ -6,7 +6,7 @@ import lombok.Getter; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; -public abstract class Effect implements Listener { +public abstract class Effect implements Listener { /** * Instance of EcoArmor. */ @@ -19,6 +19,11 @@ public abstract class Effect implements Listener { @Getter private final String name; + /** + * Create a new effect. + * + * @param name The effect name. + */ protected Effect(@NotNull final String name) { this.name = name; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java index c9b2e82..e568ffd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java @@ -9,7 +9,6 @@ import org.bukkit.attribute.AttributeModifier; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; -import org.w3c.dom.Attr; import java.util.UUID; @@ -17,7 +16,7 @@ public class BonusHearts extends Effect { private static final UUID MODIFIER_UUID = UUID.nameUUIDFromBytes("bonus-hearts".getBytes()); public BonusHearts() { - super("bonus-hearts"); + super("bonus-hearts", ValueType.INT); } @EventHandler diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java index 21e8d30..acefb1d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull; public class BowDamageMultiplier extends Effect { public BowDamageMultiplier() { - super("bow-damage-multiplier"); + super("bow-damage-multiplier", ValueType.DOUBLE); } @EventHandler diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java index 9f567f8..1695c78 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java @@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull; public class DamageMultiplier extends Effect { public DamageMultiplier() { - super("damage-multiplier"); + super("damage-multiplier", ValueType.DOUBLE); } @EventHandler diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java index b14a74e..f11fa5b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull; public class DamageTakenMultiplier extends Effect { public DamageTakenMultiplier() { - super("damage-taken-multiplier"); + super("damage-taken-multiplier", ValueType.DOUBLE); } @EventHandler diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java index 446a827..f6f64cb 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java @@ -8,7 +8,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerItemDamageEvent; import org.jetbrains.annotations.NotNull; -public class DurabilityMultiplier extends Effect { +public class DurabilityMultiplier extends Effect { public DurabilityMultiplier() { super("durability-multiplier"); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java index 09d60d1..7692c1a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java @@ -8,7 +8,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.NotNull; -public class EvadeChance extends Effect { +public class EvadeChance extends Effect { public EvadeChance() { super("evade-chance"); } @@ -25,7 +25,11 @@ public class EvadeChance extends Effect { Player player = (Player) event.getEntity(); - double chance = ArmorUtils.getEffectStrength(player, this); + Double chance = ArmorUtils.getEffectStrength(player, this); + + if (chance == null) { + return; + } if (NumberUtils.randFloat(0, 100) < chance) { event.setCancelled(true); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/ExperienceMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/ExperienceMultiplier.java index 79540f5..d77bc8e 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/ExperienceMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/ExperienceMultiplier.java @@ -7,7 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; -public class ExperienceMultiplier extends Effect { +public class ExperienceMultiplier extends Effect { public ExperienceMultiplier() { super("experience-multiplier"); } @@ -20,9 +20,9 @@ public class ExperienceMultiplier extends Effect { return; } - double multiplier = ArmorUtils.getEffectStrength(player, this); + Double multiplier = ArmorUtils.getEffectStrength(player, this); - if (multiplier == 0) { + if (multiplier == null) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java index 4955bb3..9d0e2ce 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java @@ -7,7 +7,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.NotNull; -public class FallDamageMultiplier extends Effect { +public class FallDamageMultiplier extends Effect { public FallDamageMultiplier() { super("fall-damage-multiplier"); } @@ -28,8 +28,8 @@ public class FallDamageMultiplier extends Effect { Player player = (Player) event.getEntity(); - double multiplier = ArmorUtils.getEffectStrength(player, this); - if (multiplier == 0) { + Double multiplier = ArmorUtils.getEffectStrength(player, this); + if (multiplier == null) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java index 4a3293d..d5c850e 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java @@ -7,7 +7,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.jetbrains.annotations.NotNull; -public class MeleeDamageMultiplier extends Effect { +public class MeleeDamageMultiplier extends Effect { public MeleeDamageMultiplier() { super("melee-damage-multiplier"); } @@ -24,8 +24,8 @@ public class MeleeDamageMultiplier extends Effect { Player attacker = (Player) event.getDamager(); - double multiplier = ArmorUtils.getEffectStrength(attacker, this); - if (multiplier == 0) { + Double multiplier = ArmorUtils.getEffectStrength(attacker, this); + if (multiplier == null) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java index 73e261d..7945904 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java @@ -7,7 +7,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityRegainHealthEvent; import org.jetbrains.annotations.NotNull; -public class RegenerationMultiplier extends Effect { +public class RegenerationMultiplier extends Effect { public RegenerationMultiplier() { super("regeneration-multiplier"); } @@ -24,9 +24,9 @@ public class RegenerationMultiplier extends Effect { Player player = (Player) event.getEntity(); - double multiplier = ArmorUtils.getEffectStrength(player, this); + Double multiplier = ArmorUtils.getEffectStrength(player, this); - if (multiplier == 0) { + if (multiplier == null) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java index 8e592ef..d57a09a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull; import java.util.UUID; -public class SpeedMutiplier extends Effect { +public class SpeedMutiplier extends Effect { private static final UUID MODIFIER_UUID = UUID.nameUUIDFromBytes("speed-multiplier".getBytes()); public SpeedMutiplier() { @@ -27,8 +27,8 @@ public class SpeedMutiplier extends Effect { assert movementSpeed != null; this.getPlugin().getScheduler().runLater(() -> { - double multiplier = ArmorUtils.getEffectStrength(player, this); - if (multiplier == 0) { + Double multiplier = ArmorUtils.getEffectStrength(player, this); + if (multiplier == null) { movementSpeed.removeModifier(new AttributeModifier(MODIFIER_UUID, "speed-multiplier", 0, AttributeModifier.Operation.MULTIPLY_SCALAR_1)); } else { AttributeModifier modifier = new AttributeModifier(MODIFIER_UUID, "speed-multiplier", multiplier - 1, AttributeModifier.Operation.MULTIPLY_SCALAR_1); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java index e877ab4..f54ff47 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java @@ -10,7 +10,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.projectiles.ProjectileSource; import org.jetbrains.annotations.NotNull; -public class TridentDamageMultiplier extends Effect { +public class TridentDamageMultiplier extends Effect { public TridentDamageMultiplier() { super("trident-damage-multiplier"); } @@ -37,7 +37,12 @@ public class TridentDamageMultiplier extends Effect { return; } - double multiplier = ArmorUtils.getEffectStrength(attacker, this); + Double multiplier = ArmorUtils.getEffectStrength(attacker, this); + + if (multiplier == null) { + return; + } + if (multiplier == 0) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java index c565640..796de22 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java @@ -3,7 +3,6 @@ package com.willfp.ecoarmor.effects.effects; import com.willfp.eco.util.NumberUtils; import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.sets.util.ArmorUtils; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.LivingEntity; @@ -13,7 +12,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; -public class WarpChance extends Effect { +public class WarpChance extends Effect { public WarpChance() { super("warp-chance"); } @@ -35,7 +34,15 @@ public class WarpChance extends Effect { Player player = (Player) event.getDamager(); LivingEntity victim = (LivingEntity) event.getEntity(); - double chance = ArmorUtils.getEffectStrength(player, this); + if (!ArmorUtils.hasEffect(player, this)) { + return; + } + + Double chance = ArmorUtils.getEffectStrength(player, this); + + if (chance == null) { + return; + } if (NumberUtils.randFloat(0, 100) > chance) { return; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 3d66191..15c4a11 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +@SuppressWarnings("unchecked") public class ArmorSet { /** * Instance of EcoArmor. @@ -48,7 +49,7 @@ public class ArmorSet { * Effects and their strengths. */ @Getter - private final Map effects = new HashMap<>(); + private final Map, Object> effects = new HashMap<>(); /** * Potion effects to be applied on equip. @@ -70,8 +71,8 @@ public class ArmorSet { this.name = name; for (String effectName : EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".set-bonus").getKeys(false)) { - Effect effect = Effects.getByName(effectName); - double value = EcoArmorConfigs.SETS.getDouble(name + ".set-bonus." + effectName); + Effect effect = Effects.getByName(effectName); + Object value = EcoArmorConfigs.SETS.getConfig().get(name + ".set-bonus." + effectName); effects.put(effect, value); } @@ -160,6 +161,17 @@ public class ArmorSet { return items.get(slot); } + /** + * Get effect strength of effect. + * + * @param effect The effect to query. + * @param The type of the effect value. + * @return The strength. + */ + public T getEffectStrength(@NotNull final Effect effect) { + return (T) effects.get(effect); + } + @Override public boolean equals(final Object o) { if (this == o) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 240053f..02de847 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -99,20 +99,18 @@ public class ArmorUtils { * * @param player The player to test. * @param effect The effect to test. - * @return The strength, or 0 if not found. + * @param Effect type. + * @return The strength, or null if not found. */ - public double getEffectStrength(@NotNull final Player player, - @NotNull final Effect effect) { + @Nullable + public T getEffectStrength(@NotNull final Player player, + @NotNull final Effect effect) { ArmorSet set = getSetOnPlayer(player); if (set == null) { - return 0; + return null; } - if (set.getEffects().containsKey(effect)) { - return set.getEffects().get(effect); - } - - return 0; + return set.getEffectStrength(effect); } /** @@ -123,8 +121,8 @@ public class ArmorUtils { * @return If a player has an active effect. */ public boolean hasEffect(@NotNull final Player player, - @NotNull final Effect effect) { - return getEffectStrength(player, effect) != 0; + @NotNull final Effect effect) { + return getEffectStrength(player, effect) != null; } /**