diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt index 8e2297b..9581a0e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt @@ -5,11 +5,13 @@ import com.willfp.ecoskills.effects.Effect import com.willfp.ecoskills.getSkillLevel import com.willfp.ecoskills.setEffectLevel import com.willfp.ecoskills.skills.Skills +import com.willfp.ecoskills.stats.Stats +import org.bukkit.attribute.Attribute import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.player.PlayerJoinEvent -class DataListener: Listener { +class DataListener : Listener { @EventHandler fun onJoin(event: PlayerJoinEvent) { event.player.convertPersistentToYml() @@ -20,8 +22,26 @@ class DataListener: Listener { if (obj !is Effect) { continue } - event.player.setEffectLevel(obj, skill.getCumulativeLevelUpReward(obj, event.player.getSkillLevel(skill))) + event.player.setEffectLevel( + obj, + skill.getCumulativeLevelUpReward(obj, event.player.getSkillLevel(skill)) + ) } } + + for (attribute in Attribute.values()) { + val player = event.player + + val inst = player.getAttribute(attribute) ?: continue + for (modifier in inst.modifiers.toMutableList()) { + if (modifier.amount == 0.0) { + inst.removeModifier(modifier) + } + } + } + + for (stat in Stats.values()) { + stat.updateStatLevel(event.player) + } } } \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/Effect.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/Effect.kt index 6891a5e..fc3feb1 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/Effect.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/Effect.kt @@ -9,6 +9,7 @@ import com.willfp.ecoskills.SkillObject import com.willfp.ecoskills.getEffectLevel import org.bukkit.NamespacedKey import org.bukkit.event.Listener +import java.util.* abstract class Effect( id: String @@ -17,9 +18,11 @@ abstract class Effect( val key: NamespacedKey val config: Config + val uuid: UUID init { update() + uuid = UUID.nameUUIDFromBytes(id.toByteArray()) key = plugin.namespacedKeyFactory.create(id) config = plugin.effectsYml.getSubsection(id) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectAcceleratedEscape.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectAcceleratedEscape.kt index 6e8e387..872b7c3 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectAcceleratedEscape.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/effects/effects/EffectAcceleratedEscape.kt @@ -9,7 +9,6 @@ import org.bukkit.entity.Player import org.bukkit.event.EventHandler import org.bukkit.event.EventPriority import org.bukkit.event.entity.EntityDamageEvent -import java.util.* class EffectAcceleratedEscape: Effect( "accelerated_escape" @@ -29,14 +28,15 @@ class EffectAcceleratedEscape: Effect( val level = player.getEffectLevel(this) val modifier = AttributeModifier( - UUID.randomUUID(), - NumberUtils.randFloat(0.0, 1.0).toString(), - (config.getDouble("percent-faster-per-level") * level) / 100, + this.uuid, + this.id, + (config.getDouble("percent-faster-per-level") * level) / 100.0, AttributeModifier.Operation.MULTIPLY_SCALAR_1 ) val inst = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED)!! + inst.removeModifier(modifier) inst.addModifier(modifier) plugin.scheduler.runLater({ 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 f5fa134..c4ff5ec 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 @@ -2,6 +2,7 @@ package com.willfp.ecoskills.stats.stats import com.willfp.ecoskills.getStatLevel import com.willfp.ecoskills.stats.Stat +import org.bukkit.Bukkit import org.bukkit.attribute.Attribute import org.bukkit.attribute.AttributeModifier import org.bukkit.entity.Player @@ -16,8 +17,11 @@ class StatSpeed : Stat( (this.config.getDouble("percent-faster-per-level") * player.getStatLevel(this)) / 100.0, AttributeModifier.Operation.MULTIPLY_SCALAR_1 ) + val instance = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED) ?: return + instance.removeModifier(modifier) + Bukkit.getLogger().info(instance.modifiers.toString()) + plugin.scheduler.run { - val instance = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED) ?: return@run instance.removeModifier(modifier) instance.addModifier(modifier) }