9
0
mirror of https://github.com/Auxilor/EcoSkills.git synced 2026-01-03 14:22:17 +00:00

I need to recode this plugin

This commit is contained in:
Auxilor
2023-04-25 12:48:03 +01:00
parent cf0cddc160
commit 5ab27f6511
5 changed files with 45 additions and 24 deletions

View File

@@ -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<String, Any> {
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<String, Any>)
?.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<NamespacedKey> {

View File

@@ -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<NoCompileData>("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)
}
}
}

View File

@@ -35,10 +35,7 @@ class StatAttackSpeed : Stat(
return
}
plugin.scheduler.run {
instance.removeModifier(modifier)
instance.addModifier(modifier)
}
instance.addModifier(modifier)
}
@EventHandler(priority = EventPriority.LOW)

View File

@@ -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
}
}
}

View File

@@ -35,10 +35,7 @@ class StatSpeed : Stat(
return
}
plugin.scheduler.run {
instance.removeModifier(modifier)
instance.addModifier(modifier)
}
instance.addModifier(modifier)
}
@EventHandler(priority = EventPriority.LOW)