diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java index a28f2f5..868db0b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java @@ -14,6 +14,7 @@ import com.willfp.ecoarmor.effects.effects.ExperienceMultiplier; import com.willfp.ecoarmor.effects.effects.FallDamageMultiplier; import com.willfp.ecoarmor.effects.effects.Flight; import com.willfp.ecoarmor.effects.effects.HungerLossMultiplier; +import com.willfp.ecoarmor.effects.effects.KnockbackMultiplier; import com.willfp.ecoarmor.effects.effects.MeleeDamageMultiplier; import com.willfp.ecoarmor.effects.effects.RegenerationMultiplier; import com.willfp.ecoarmor.effects.effects.SpeedMultiplier; @@ -49,6 +50,7 @@ public class Effects { public static final Effect FLIGHT = new Flight(); public static final Effect HUNGER_LOSS_MULTIPLIER = new HungerLossMultiplier(); public static final Effect BOSS_DAMAGE_MULTIPLIER = new BossDamageMultiplier(); + public static final Effect KNOCKBACK_MULTIPLIER = new KnockbackMultiplier(); /** * Get effect matching name. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/KnockbackMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/KnockbackMultiplier.java new file mode 100644 index 0000000..3c5f1ec --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/KnockbackMultiplier.java @@ -0,0 +1,39 @@ +package com.willfp.ecoarmor.effects.effects; + +import com.willfp.ecoarmor.effects.Effect; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class KnockbackMultiplier extends Effect { + public KnockbackMultiplier() { + super("knockback-multiplier", Double.class); + } + + @Override + protected void onEnable(@NotNull final Player player) { + AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_ATTACK_KNOCKBACK); + assert movementSpeed != null; + + Double strength = this.getStrengthForPlayer(player); + + if (strength == null) { + return; + } + + AttributeModifier modifier = new AttributeModifier(this.getUuid(), "kb-multiplier", strength - 1, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + if (movementSpeed.getModifiers().stream().noneMatch(attributeModifier -> attributeModifier.getUniqueId().equals(modifier.getUniqueId()))) { + movementSpeed.addModifier(modifier); + } + } + + @Override + protected void onDisable(@NotNull final Player player) { + AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); + assert movementSpeed != null; + + movementSpeed.removeModifier(new AttributeModifier(this.getUuid(), "kb-multiplier", 0, AttributeModifier.Operation.MULTIPLY_SCALAR_1)); + } +} diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 4590994..c25ba6d 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -60,4 +60,7 @@ effects: enabled: true boss-damage-multiplier: # Modify boss damage by some multiplier + enabled: true + knockback-multiplier: + # Modify knockback by some multiplier enabled: true \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 66a16f8..38da0f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version = 5.0.1 +version = 5.1.0 plugin-name = EcoArmor \ No newline at end of file