From 65bafc4d4fdd42c146cddfab749e343af8a5ff64 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 23 Aug 2021 13:30:15 +0100 Subject: [PATCH] Added bravery and infernal resistance effects --- .../com/willfp/ecoskills/effects/Effects.java | 4 ++ .../effects/effects/EffectBravery.kt | 41 +++++++++++++++++ .../effects/EffectInfernalResistance.kt | 44 +++++++++++++++++++ .../src/main/resources/effects.yml | 11 ++++- .../src/main/resources/skills/armory.yml | 28 ++++++++++++ 5 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectBravery.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectInfernalResistance.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 9c6128d..993d26f 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 @@ -4,11 +4,13 @@ import com.google.common.collect.ImmutableSet; import com.willfp.eco.core.config.updating.ConfigUpdater; 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.EffectDodging; import com.willfp.ecoskills.effects.effects.EffectEfficientBrewing; import com.willfp.ecoskills.effects.effects.EffectEyeOfTheDepths; import com.willfp.ecoskills.effects.effects.EffectGoldenYield; +import com.willfp.ecoskills.effects.effects.EffectInfernalResistance; import com.willfp.ecoskills.effects.effects.EffectMysticResilience; import com.willfp.ecoskills.effects.effects.EffectPotionmaster; import com.willfp.ecoskills.effects.effects.EffectSatiation; @@ -47,6 +49,8 @@ public class Effects { public static final Effect GOLDEN_YIELD = new EffectGoldenYield(); public static final Effect DODGING = new EffectDodging(); public static final Effect ACCELERATED_ESCAPE = new EffectAcceleratedEscape(); + public static final Effect BRAVERY = new EffectBravery(); + public static final Effect INFERNAL_RESISTANCE = new EffectInfernalResistance(); @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/EffectBravery.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectBravery.kt new file mode 100644 index 0000000..bb8a245 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectBravery.kt @@ -0,0 +1,41 @@ +package com.willfp.ecoskills.effects.effects + +import com.willfp.eco.util.NumberUtils +import com.willfp.ecoskills.effects.Effect +import com.willfp.ecoskills.getEffectLevel +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.entity.EntityDamageEvent + +class EffectBravery: Effect( + "bravery" +) { + 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: EntityDamageEvent) { + val player = event.entity + + if (player !is Player) { + return + } + + if (event.cause != EntityDamageEvent.DamageCause.FIRE + && event.cause != EntityDamageEvent.DamageCause.FIRE_TICK + && event.cause != EntityDamageEvent.DamageCause.LAVA + && event.cause != EntityDamageEvent.DamageCause.HOT_FLOOR) { + return + } + + val level = player.getEffectLevel(this) + + val chance = config.getDouble("chance-per-level") * level + + if (NumberUtils.randFloat(0.0, 100.0) < chance) { + event.isCancelled = true + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectInfernalResistance.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectInfernalResistance.kt new file mode 100644 index 0000000..fe39a8f --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectInfernalResistance.kt @@ -0,0 +1,44 @@ +package com.willfp.ecoskills.effects.effects + +import com.willfp.eco.util.NamespacedKeyUtils +import com.willfp.eco.util.NumberUtils +import com.willfp.ecoskills.effects.Effect +import com.willfp.ecoskills.getEffectLevel +import org.bukkit.entity.Boss +import org.bukkit.entity.ElderGuardian +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.persistence.PersistentDataType + + +class EffectInfernalResistance: Effect( + "infernal_resistance" +) { + override fun formatDescription(string: String, level: Int): String { + return string.replace("%percent_less%", NumberUtils.format(config.getDouble("percent-less-per-level") * level)) + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + fun handle(event: EntityDamageByEntityEvent) { + val player = event.entity + + if (player !is Player) { + return + } + + if (event.damager !is Boss && event.damager !is ElderGuardian + && !event.damager.persistentDataContainer.has(NamespacedKeyUtils.create("ecobosses", "boss"), PersistentDataType.STRING)) { + return + } + + val level = player.getEffectLevel(this) + + var multiplier = config.getDouble("percent-less-per-level") * level + multiplier /= 100 + multiplier = 1 - multiplier + + event.damage = event.damage * 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 418aba4..565705f 100644 --- a/eco-core/core-plugin/src/main/resources/effects.yml +++ b/eco-core/core-plugin/src/main/resources/effects.yml @@ -113,4 +113,13 @@ accelerated_escape: percent-faster-per-level: 4 # The duration to go faster for, in ticks - ticks: 30 \ No newline at end of file + ticks: 30 +infernal_resistance: + description: "&a%chance%%&8 chance to ignore fire damage" + + # The chance to ignore damage, as a percentage + chance-per-level: 2 +bravery: + description: "&8Take &a%chance%%&8 less damage from bosses" + + percent-less-per-level: 1.5 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/skills/armory.yml b/eco-core/core-plugin/src/main/resources/skills/armory.yml index 32095a1..50ac098 100644 --- a/eco-core/core-plugin/src/main/resources/skills/armory.yml +++ b/eco-core/core-plugin/src/main/resources/skills/armory.yml @@ -15,6 +15,10 @@ gui: - "&fEffects:" - "&8» &r&6Shamanism %ecoskills_shamanism_numeral%" - " %ecoskills_shamanism_description%" + - "&8» &r&6Infernal Resistance %ecoskills_infernal_resistance_numeral%" + - " %ecoskills_infernal_resistance_description%" + - "&8» &r&6Bravery %ecoskills_bravery_numeral%" + - " %ecoskills_bravery_description%" rewards: # The actual rewards to be given @@ -22,6 +26,8 @@ rewards: - "defense::2" - "speed::1" - "shamanism::1" + - "infernal_resistance::1" + - "bravery::1:10:100" # The chat messages to send on level up chat-messages: @@ -30,6 +36,17 @@ rewards: - " &8» &r&f+1 %ecoskills_speed_name%" - " &8» &r&6Shamanism %ecoskills_shamanism_numeral%" - " %ecoskills_shamanism_description%" + - " &8» &r&6Infernal Resistance %ecoskills_infernal_resistance_numeral%" + - " %ecoskills_infernal_resistance_description%" + 10: + - " &8» &r&f+2 %ecoskills_defense_name%" + - " &8» &r&f+1 %ecoskills_speed_name%" + - " &8» &r&6Shamanism %ecoskills_shamanism_numeral%" + - " %ecoskills_shamanism_description%" + - " &8» &r&6Infernal Resistance %ecoskills_infernal_resistance_numeral%" + - " %ecoskills_infernal_resistance_description%" + - " &8» &r&6Bravery %ecoskills_bravery_numeral%" + - " %ecoskills_bravery_description%" # The lore to show in the levels gui progression-lore: @@ -38,6 +55,17 @@ rewards: - " &8» &r&f+1 %ecoskills_speed_name%" - " &8» &r&6Shamanism %ecoskills_shamanism_numeral%" - " %ecoskills_shamanism_description%" + - " &8» &r&6Infernal Resistance %ecoskills_infernal_resistance_numeral%" + - " %ecoskills_infernal_resistance_description%" + 10: + - " &8» &r&f+2 %ecoskills_defense_name%" + - " &8» &r&f+1 %ecoskills_speed_name%" + - " &8» &r&6Shamanism %ecoskills_shamanism_numeral%" + - " %ecoskills_shamanism_description%" + - " &8» &r&6Infernal Resistance %ecoskills_infernal_resistance_numeral%" + - " %ecoskills_infernal_resistance_description%" + - " &8» &r&6Bravery %ecoskills_bravery_numeral%" + - " %ecoskills_bravery_description%" # The experience to give for each hp of damage taken