From e9c494081ab4f6e09b35a3c481bcd7754f35d2bf Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 23 Aug 2021 18:17:24 +0100 Subject: [PATCH] Added reimbursement effect --- .../com/willfp/ecoskills/effects/Effects.java | 2 ++ .../effects/effects/EffectReimbursement.kt | 35 +++++++++++++++++++ .../src/main/resources/effects.yml | 7 +++- .../src/main/resources/skills/enchanting.yml | 7 ++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectReimbursement.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 f92a18b..2560cf1 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 @@ -15,6 +15,7 @@ import com.willfp.ecoskills.effects.effects.EffectEyeOfTheDepths; import com.willfp.ecoskills.effects.effects.EffectGoldenYield; import com.willfp.ecoskills.effects.effects.EffectMysticResilience; import com.willfp.ecoskills.effects.effects.EffectPotionmaster; +import com.willfp.ecoskills.effects.effects.EffectReimbursement; import com.willfp.ecoskills.effects.effects.EffectSatiation; import com.willfp.ecoskills.effects.effects.EffectSeamlessMovement; import com.willfp.ecoskills.effects.effects.EffectSecondChance; @@ -60,6 +61,7 @@ public class Effects { public static final Effect ENDANGERING = new EffectEndangering(); public static final Effect SPELUNKING = new EffectSpelunking(); public static final Effect DYNAMIC_MINING = new EffectDynamicMining(); + public static final Effect REIMBURSEMENT = new EffectReimbursement(); @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/EffectReimbursement.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectReimbursement.kt new file mode 100644 index 0000000..91b1ccb --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectReimbursement.kt @@ -0,0 +1,35 @@ +package com.willfp.ecoskills.effects.effects + +import com.willfp.eco.util.NumberUtils +import com.willfp.ecoskills.effects.Effect +import com.willfp.ecoskills.getEffectLevel +import com.willfp.ecoskills.giveSkillExperience +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.enchantment.EnchantItemEvent +import org.bukkit.event.entity.EntityDamageEvent + +class EffectReimbursement : Effect( + "reimbursement" +) { + 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 handleLevelling(event: EnchantItemEvent) { + val player = event.enchanter + val cost = event.expLevelCost + + val chance = config.getDouble("chance-per-level") * player.getEffectLevel(this) + + if (NumberUtils.randFloat(0.0, 100.0) < chance) { + event.isCancelled = true + } + + this.plugin.scheduler.runLater({ + player.giveExpLevels(cost) + }, 2) + } +} \ 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 e92abf8..197d5a8 100644 --- a/eco-core/core-plugin/src/main/resources/effects.yml +++ b/eco-core/core-plugin/src/main/resources/effects.yml @@ -181,4 +181,9 @@ dynamic_mining: # The chance to give nausea per level, as a percentage chance-per-level: 1.5 # The level of haste to give - level: 3 \ No newline at end of file + level: 3 +reimbursement: + description: "&a%chance%%&8 chance to get experience back after enchanting" + + # The chance to get experience back, as a percentage + chance-per-level: 0.5 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/skills/enchanting.yml b/eco-core/core-plugin/src/main/resources/skills/enchanting.yml index 5b83b1d..f47a380 100644 --- a/eco-core/core-plugin/src/main/resources/skills/enchanting.yml +++ b/eco-core/core-plugin/src/main/resources/skills/enchanting.yml @@ -15,6 +15,8 @@ gui: - "&fEffects:" - "&8» &r&6Second Chance %ecoskills_second_chance_numeral%" - " %ecoskills_second_chance_description%" + - "&8» &r&6Reimbursement %ecoskills_reimbursement_numeral%" + - " %ecoskills_reimbursement_description%" rewards: # The actual rewards to be given @@ -22,6 +24,7 @@ rewards: - "wisdom::2" - "crit_chance::1" - "second_chance::1" + - "reimbursement::1" # The chat messages to send on level up chat-messages: @@ -30,6 +33,8 @@ rewards: - " &8» &r&f+1 %ecoskills_crit_chance_name%" - " &8» &r&6Second Chance %ecoskills_second_chance_numeral%" - " %ecoskills_second_chance_description%" + - " &8» &r&6Reimbursement %ecoskills_reimbursement_numeral%" + - " %ecoskills_reimbursement_description%" # The lore to show in the levels gui progression-lore: @@ -38,6 +43,8 @@ rewards: - " &8» &r&f+1 %ecoskills_crit_chance_name%" - " &8» &r&6Second Chance %ecoskills_second_chance_numeral%" - " %ecoskills_second_chance_description%" + - " &8» &r&6Reimbursement %ecoskills_reimbursement_numeral%" + - " %ecoskills_reimbursement_description%" # The experience to give for each level cost of enchanting xp-per-level: 4 \ No newline at end of file