From 5ab27f6511452329f263dcb1d5e9cf08cb089582 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 25 Apr 2023 12:48:03 +0100 Subject: [PATCH] I need to recode this plugin --- .../willfp/ecoskills/StatModifierMethods.kt | 24 ++++++++++++----- .../ecoskills/libreforge/EffectAddStat.kt | 27 +++++++++++++------ .../ecoskills/stats/stats/StatAttackSpeed.kt | 5 +--- .../ecoskills/stats/stats/StatHealth.kt | 8 ++++-- .../willfp/ecoskills/stats/stats/StatSpeed.kt | 5 +--- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/StatModifierMethods.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/StatModifierMethods.kt index 66356df..ff4d7c5 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/StatModifierMethods.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/StatModifierMethods.kt @@ -6,6 +6,7 @@ import com.willfp.ecoskills.api.modifier.ItemStatModifier import com.willfp.ecoskills.api.modifier.ModifierOperation import com.willfp.ecoskills.api.modifier.PlayerStatModifier import com.willfp.ecoskills.api.modifier.StatModifier +import com.willfp.ecoskills.stats.Stat import com.willfp.ecoskills.stats.Stats import org.bukkit.NamespacedKey import org.bukkit.entity.Player @@ -135,7 +136,8 @@ private fun getModifiersTag(player: Player): MutableMap { return modifierCache.get(player) } -fun Player.addStatModifier(modifier: StatModifier) { +@JvmOverloads +fun Player.addStatModifier(modifier: StatModifier, shouldUpdate: Boolean = true) { val modifiers = getModifiersTag(this) modifiers[modifier.key.toString()] = mapOf( @@ -146,21 +148,31 @@ fun Player.addStatModifier(modifier: StatModifier) { this.applyModifiers(modifiers) - for (stat in Stats.values()) { - stat.updateStatLevel(this) + if (shouldUpdate) { + modifier.stat.updateStatLevel(this) } } -fun Player.removeStatModifier(key: NamespacedKey) { +@JvmOverloads +fun Player.removeStatModifier(key: NamespacedKey, shouldUpdate: Boolean = true): Stat? { val modifiers = getModifiersTag(this) + @Suppress("UNCHECKED_CAST") + val stat = Stats.getByID( + (modifiers[key.toString()] + as? MutableMap) + ?.get(META_STAT_KEY) as? String ?: "" + ) + modifiers.remove(key.toString()) this.applyModifiers(modifiers) - for (stat in Stats.values()) { - stat.updateStatLevel(this) + if (shouldUpdate) { + stat?.updateStatLevel(this) } + + return stat } fun Player.getStatModifierKeys(): MutableSet { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/libreforge/EffectAddStat.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/libreforge/EffectAddStat.kt index 00cdf00..f27a25f 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/libreforge/EffectAddStat.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/libreforge/EffectAddStat.kt @@ -1,8 +1,11 @@ package com.willfp.ecoskills.libreforge import com.willfp.eco.core.config.interfaces.Config +import com.willfp.ecoskills.EcoSkillsPlugin +import com.willfp.ecoskills.addStatModifier import com.willfp.ecoskills.api.EcoSkillsAPI import com.willfp.ecoskills.api.modifier.PlayerStatModifier +import com.willfp.ecoskills.removeStatModifier import com.willfp.ecoskills.stats.Stats import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.ProvidedHolder @@ -17,21 +20,29 @@ object EffectAddStat : Effect("add_stat") { require("amount", "You must specify the amount to add/remove!") } - override fun onEnable(player: Player, config: Config, identifiers: Identifiers, holder: ProvidedHolder, compileData: NoCompileData) { - EcoSkillsAPI.getInstance().addStatModifier( - player, + override fun onEnable( + player: Player, + config: Config, + identifiers: Identifiers, + holder: ProvidedHolder, + compileData: NoCompileData + ) { + val stat = Stats.getByID(config.getString("stat")) ?: return + + player.addStatModifier( PlayerStatModifier( identifiers.key, - Stats.getByID(config.getString("stat")) ?: return, + stat, config.getIntFromExpression("amount", player) ) ) } override fun onDisable(player: Player, identifiers: Identifiers, holder: ProvidedHolder) { - EcoSkillsAPI.getInstance().removeStatModifier( - player, - identifiers.key - ) + val stat = player.removeStatModifier(identifiers.key, shouldUpdate = false) + + EcoSkillsPlugin.getInstance().run { + stat?.updateStatLevel(player) + } } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatAttackSpeed.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatAttackSpeed.kt index 4c78e5e..2043bc9 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatAttackSpeed.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatAttackSpeed.kt @@ -35,10 +35,7 @@ class StatAttackSpeed : Stat( return } - plugin.scheduler.run { - instance.removeModifier(modifier) - instance.addModifier(modifier) - } + instance.addModifier(modifier) } @EventHandler(priority = EventPriority.LOW) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatHealth.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatHealth.kt index ad20def..329eef5 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatHealth.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatHealth.kt @@ -27,6 +27,7 @@ class StatHealth : Stat( this.config.getDouble("health-per-level") * player.getStatLevel(this), AttributeModifier.Operation.ADD_NUMBER ) + val instance = player.getAttribute(Attribute.GENERIC_MAX_HEALTH) ?: return instance.removeModifier(modifier) @@ -35,9 +36,12 @@ class StatHealth : Stat( return } + instance.addModifier(modifier) + plugin.scheduler.run { - instance.removeModifier(modifier) - instance.addModifier(modifier) + if (player.health > instance.value && player.health > instance.baseValue && instance.value > 0) { + player.health = instance.value + } } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatSpeed.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatSpeed.kt index 418eb0e..1e63886 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatSpeed.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/stats/StatSpeed.kt @@ -35,10 +35,7 @@ class StatSpeed : Stat( return } - plugin.scheduler.run { - instance.removeModifier(modifier) - instance.addModifier(modifier) - } + instance.addModifier(modifier) } @EventHandler(priority = EventPriority.LOW)