From f8b7d3a2bab5ad475659dae981ed4bd3f27329a6 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 23 Aug 2021 13:43:17 +0100 Subject: [PATCH] Added dazzle and strong impact effects --- .../com/willfp/ecoskills/effects/Effects.java | 2 + .../ecoskills/effects/effects/EffectDazzle.kt | 60 +++++++++++++++++++ .../effects/effects/EffectSerratedStrikes.kt | 13 +++- .../effects/effects/EffectStrongImpact.kt | 47 +++++++++++++++ .../src/main/resources/effects.yml | 19 +++++- .../src/main/resources/skills/combat.yml | 34 +++++++++++ 6 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectDazzle.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectStrongImpact.kt diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/effects/Effects.java index 993d26f..9a971f3 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/effects/Effects.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/effects/Effects.java @@ -6,6 +6,7 @@ import com.willfp.ecoskills.effects.effects.EffectAcceleratedEscape; import com.willfp.ecoskills.effects.effects.EffectBountifulHarvest; import com.willfp.ecoskills.effects.effects.EffectBravery; import com.willfp.ecoskills.effects.effects.EffectCraftsmanship; +import com.willfp.ecoskills.effects.effects.EffectDazzle; import com.willfp.ecoskills.effects.effects.EffectDodging; import com.willfp.ecoskills.effects.effects.EffectEfficientBrewing; import com.willfp.ecoskills.effects.effects.EffectEyeOfTheDepths; @@ -51,6 +52,7 @@ public class Effects { public static final Effect ACCELERATED_ESCAPE = new EffectAcceleratedEscape(); public static final Effect BRAVERY = new EffectBravery(); public static final Effect INFERNAL_RESISTANCE = new EffectInfernalResistance(); + public static final Effect DAZZLE = new EffectDazzle(); @ApiStatus.Internal public static void registerNewEffect(@NotNull final Effect effect) { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectDazzle.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectDazzle.kt new file mode 100644 index 0000000..3e0b22e --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectDazzle.kt @@ -0,0 +1,60 @@ +package com.willfp.ecoskills.effects.effects + +import com.willfp.eco.core.scheduling.RunnableTask +import com.willfp.eco.util.NumberUtils +import com.willfp.ecoskills.effects.Effect +import com.willfp.ecoskills.getEffectLevel +import org.bukkit.entity.LivingEntity +import org.bukkit.entity.Player +import org.bukkit.entity.Projectile +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.potion.PotionEffect +import org.bukkit.potion.PotionEffectType +import org.bukkit.util.Vector +import java.util.concurrent.atomic.AtomicInteger + + +class EffectDazzle : Effect( + "dazzle" +) { + override fun formatDescription(string: String, level: Int): String { + return string.replace("%chance%", NumberUtils.format(config.getDouble("chance-per-level") * level)) + .replace("%seconds%", NumberUtils.format(((config.getInt("ticks-per-level") * level) + config.getInt("base-ticks")) / 20.0)) + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + fun handle(event: EntityDamageByEntityEvent) { + var player = event.damager + + if (player is Projectile) { + if (player.shooter !is Player) { + return + } else { + player = player.shooter as Player + } + } + + if (player !is Player) { + return + } + + val victim = event.entity + + if (victim !is LivingEntity) { + return + } + + val level = player.getEffectLevel(this) + + if (NumberUtils.randFloat(0.0, 100.0) >= config.getDouble("chance-per-level") * level) { + return + } + + val duration = (config.getInt("ticks-per-level") * level) + config.getInt("base-ticks") + + victim.setVelocity(Vector(0, 0, 0)) + victim.addPotionEffect(PotionEffect(PotionEffectType.CONFUSION, duration, level)) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectSerratedStrikes.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectSerratedStrikes.kt index ca8ee1c..800b6a1 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectSerratedStrikes.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectSerratedStrikes.kt @@ -6,6 +6,7 @@ import com.willfp.ecoskills.effects.Effect import com.willfp.ecoskills.getEffectLevel import org.bukkit.entity.LivingEntity import org.bukkit.entity.Player +import org.bukkit.entity.Projectile import org.bukkit.event.EventHandler import org.bukkit.event.EventPriority import org.bukkit.event.entity.EntityDamageByEntityEvent @@ -21,12 +22,20 @@ class EffectSerratedStrikes : Effect( @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) fun handle(event: EntityDamageByEntityEvent) { - val player = event.damager - val victim = event.entity + var player = event.damager + + if (player is Projectile) { + if (player.shooter !is Player) { + return + } else { + player = player.shooter as Player + } + } if (player !is Player) { return } + val victim = event.entity if (victim !is LivingEntity) { return diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectStrongImpact.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectStrongImpact.kt new file mode 100644 index 0000000..386bff8 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectStrongImpact.kt @@ -0,0 +1,47 @@ +package com.willfp.ecoskills.effects.effects + +import com.willfp.eco.core.scheduling.RunnableTask +import com.willfp.eco.util.NumberUtils +import com.willfp.ecoskills.effects.Effect +import com.willfp.ecoskills.getEffectLevel +import org.bukkit.entity.LivingEntity +import org.bukkit.entity.Player +import org.bukkit.entity.Projectile +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.entity.EntityDamageByEntityEvent +import java.util.concurrent.atomic.AtomicInteger + + +class EffectStrongImpact : Effect( + "strong_impact" +) { + override fun formatDescription(string: String, level: Int): String { + return string.replace("%chance%", NumberUtils.format(config.getDouble("chance-per-level") * level)) + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + fun handle(event: EntityDamageByEntityEvent) { + var player = event.damager + + if (player is Projectile) { + if (player.shooter !is Player) { + return + } else { + player = player.shooter as Player + } + } + + if (player !is Player) { + return + } + + val level = player.getEffectLevel(this) + + if (NumberUtils.randFloat(0.0, 100.0) >= config.getDouble("chance-per-level") * level) { + return + } + + event.damage = event.damage * config.getDouble("multiplier") + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/effects.yml b/eco-core/core-plugin/src/main/resources/effects.yml index 565705f..29717ee 100644 --- a/eco-core/core-plugin/src/main/resources/effects.yml +++ b/eco-core/core-plugin/src/main/resources/effects.yml @@ -122,4 +122,21 @@ infernal_resistance: bravery: description: "&8Take &a%chance%%&8 less damage from bosses" - percent-less-per-level: 1.5 \ No newline at end of file + # The percent less damage to take + percent-less-per-level: 1.5 +dazzle: + description: "&a%chance%%&8 chance to give your opponent nausea for &a%seconds%&8 seconds" + + # The base ticks to give nausea for + base-ticks: 18 + # The extra ticks to give nausea for per level + ticks-per-level: 2 + # The chance to give nausea per level, as a percentage + chance-per-level: 1.5 +strong_impact: + description: "&a%chance%%&8 chance to deal &a3x&8 damage" + + # The damage multiplier + multiplier: 3 + # The chance to deal 3x damage, per level + chance-per-level: 0.2 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/skills/combat.yml b/eco-core/core-plugin/src/main/resources/skills/combat.yml index 2efd2ea..9a61ccc 100644 --- a/eco-core/core-plugin/src/main/resources/skills/combat.yml +++ b/eco-core/core-plugin/src/main/resources/skills/combat.yml @@ -15,6 +15,10 @@ gui: - "&fEffects:" - "&8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" - " %ecoskills_serrated_strikes_description%" + - "&8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + - "&8» &r&6Strong Impact %ecoskills_strong_impact_numeral%" + - " %ecoskills_strong_impact_description%" rewards: # The actual rewards to be given @@ -22,6 +26,8 @@ rewards: - "strength::2" - "ferocity::1:15:100" - "serrated_strikes::1" + - "dazzle::1" + - "strong_impact::1:10:100" # The chat messages to send on level up chat-messages: @@ -29,11 +35,25 @@ rewards: - " &8» &r&f+2 %ecoskills_strength_name%" - " &8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" - " %ecoskills_serrated_strikes_description%" + - " &8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + 10: + - " &8» &r&f+2 %ecoskills_strength_name%" + - " &8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" + - " %ecoskills_serrated_strikes_description%" + - " &8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + - " &8» &r&6Strong Impact %ecoskills_strong_impact_numeral%" + - " %ecoskills_strong_impact_description%" 15: - " &8» &r&f+2 %ecoskills_strength_name%" - " &8» &r&f+1 %ecoskills_ferocity_name%" - " &8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" - " %ecoskills_serrated_strikes_description%" + - " &8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + - " &8» &r&6Strong Impact %ecoskills_strong_impact_numeral%" + - " %ecoskills_strong_impact_description%" # The lore to show in the levels gui progression-lore: @@ -42,11 +62,25 @@ rewards: - " &8» &r&f+1 %ecoskills_ferocity_name%" - " &8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" - " %ecoskills_serrated_strikes_description%" + - " &8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + 10: + - " &8» &r&f+2 %ecoskills_strength_name%" + - " &8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" + - " %ecoskills_serrated_strikes_description%" + - " &8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + - " &8» &r&6Strong Impact %ecoskills_strong_impact_numeral%" + - " %ecoskills_strong_impact_description%" 15: - " &8» &r&f+2 %ecoskills_strength_name%" - " &8» &r&f+1 %ecoskills_ferocity_name%" - " &8» &r&6Serrated Strikes %ecoskills_serrated_strikes_numeral%" - " %ecoskills_serrated_strikes_description%" + - " &8» &r&6Dazzle %ecoskills_dazzle_numeral%" + - " %ecoskills_dazzle_description%" + - " &8» &r&6Strong Impact %ecoskills_strong_impact_numeral%" + - " %ecoskills_strong_impact_description%" # The experience to give for each hp of a killed enemy