From 4a1336a4edde99d512688bacbb5065fe8b9986f1 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 5 Oct 2021 19:32:09 +0100 Subject: [PATCH] Fixed attack speed and improved APIO --- .../com/willfp/ecoskills/effects/Effect.kt | 15 ++++-- .../com/willfp/ecoskills/skills/Skill.kt | 12 ++++- .../kotlin/com/willfp/ecoskills/stats/Stat.kt | 13 ++++- .../attackspeed/AttackSpeedMain.java | 32 ++++++++++++ .../attackspeed/StatAttackSpeed.java | 49 +++++++++++++++++++ .../attackspeed/AttackSpeedConfig.kt | 13 ----- .../ecoskills/attackspeed/AttackSpeedMain.kt | 16 ------ .../ecoskills/attackspeed/StatAttackSpeed.kt | 29 ----------- .../src/main/resources/stats/attackspeed.yml | 1 - 9 files changed, 114 insertions(+), 66 deletions(-) create mode 100644 eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/AttackSpeedMain.java create mode 100644 eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/StatAttackSpeed.java delete mode 100644 eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedConfig.kt delete mode 100644 eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedMain.kt delete mode 100644 eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/StatAttackSpeed.kt delete mode 100644 eco-extensions/attackspeed/src/main/resources/stats/attackspeed.yml 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 66387ff..27f0f96 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 @@ -13,22 +13,31 @@ import java.util.* abstract class Effect( id: String -): SkillObject(id), Listener { +) : SkillObject(id), Listener { protected val plugin: EcoSkillsPlugin = EcoSkillsPlugin.getInstance() val key: NamespacedKey - open val config: Config val uuid: UUID + lateinit var config: Config init { update() uuid = UUID.nameUUIDFromBytes(id.toByteArray()) key = plugin.namespacedKeyFactory.create(id) - config = plugin.effectsYml.getSubsection(id) + + finishLoading() + } + + private fun finishLoading() { + config = loadConfig() Effects.registerNewEffect(this) } + open fun loadConfig(): Config { + return plugin.effectsYml.getSubsection(id) + } + abstract fun formatDescription(string: String, level: Int): String fun getDescription(level: Int): String { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt index 937b820..8461aad 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt @@ -22,7 +22,7 @@ abstract class Skill( val key: NamespacedKey = plugin.namespacedKeyFactory.create(id) val xpKey: NamespacedKey = plugin.namespacedKeyFactory.create(id + "_progress") - open val config: Config + lateinit var config: Config lateinit var name: String lateinit var description: String lateinit var gui: SkillGUI @@ -35,11 +35,19 @@ abstract class Skill( private val messagesCache = mutableMapOf>() init { - config = SkillConfig(this.id, this.javaClass, plugin) + finishLoading() + } + + private fun finishLoading() { + config = loadConfig() Skills.registerNewSkill(this) } + open fun loadConfig(): Config { + return SkillConfig(this.id, this.javaClass, plugin) + } + fun update() { name = config.getString("name") description = config.getString("description") diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/Stat.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/Stat.kt index b7be814..1c4fa73 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/Stat.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/stats/Stat.kt @@ -19,18 +19,27 @@ abstract class Stat( val key: NamespacedKey val uuid: UUID - open val config: Config + lateinit var config: Config lateinit var name: String init { update() key = plugin.namespacedKeyFactory.create(id) uuid = UUID.nameUUIDFromBytes(id.toByteArray()) - config = plugin.configYml.getSubsection("stats.$id") + + finishLoading() + } + + private fun finishLoading() { + config = loadConfig() Stats.registerNewStat(this) } + open fun loadConfig(): Config { + return plugin.configYml.getSubsection("stats.$id") + } + fun update() { name = plugin.langYml.getString("stats.$id.name") diff --git a/eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/AttackSpeedMain.java b/eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/AttackSpeedMain.java new file mode 100644 index 0000000..a2abb87 --- /dev/null +++ b/eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/AttackSpeedMain.java @@ -0,0 +1,32 @@ +package com.willfp.ecoskills.attackspeed; + +import com.willfp.eco.core.EcoPlugin; +import com.willfp.eco.core.extensions.Extension; +import com.willfp.ecoskills.stats.Stat; +import org.jetbrains.annotations.NotNull; + +public class AttackSpeedMain extends Extension { + /** + * Attack Speed. + */ + public static final Stat ATTACK_SPEED = new StatAttackSpeed(); + + /** + * Create a new extension for a plugin. + * + * @param plugin The plugin. + */ + public AttackSpeedMain(@NotNull final EcoPlugin plugin) { + super(plugin); + } + + @Override + protected void onEnable() { + + } + + @Override + protected void onDisable() { + + } +} diff --git a/eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/StatAttackSpeed.java b/eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/StatAttackSpeed.java new file mode 100644 index 0000000..010b1cc --- /dev/null +++ b/eco-extensions/attackspeed/src/main/java/com/willfp/ecoskills/attackspeed/StatAttackSpeed.java @@ -0,0 +1,49 @@ +package com.willfp.ecoskills.attackspeed; + +import com.willfp.eco.core.config.interfaces.Config; +import com.willfp.eco.core.config.yaml.YamlTransientConfig; +import com.willfp.ecoskills.api.EcoSkillsAPI; +import com.willfp.ecoskills.stats.Stat; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class StatAttackSpeed extends Stat { + /** + * Create attack speed stat. + */ + public StatAttackSpeed() { + super("attack_speed"); + } + + @NotNull + @Override + public Config loadConfig() { + return new YamlTransientConfig(new YamlConfiguration()); + } + + @Override + public void updateStatLevel(@NotNull final Player player) { + AttributeModifier modifier = new AttributeModifier( + this.getUuid(), + this.getName(), + EcoSkillsAPI.getInstance().getStatLevel(player, this) / 100D, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ); + + AttributeInstance instance = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED); + if (instance == null) { + return; + } + + instance.removeModifier(modifier); + + this.getPlugin().getScheduler().run(() -> { + instance.removeModifier(modifier); + instance.addModifier(modifier); + }); + } +} diff --git a/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedConfig.kt b/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedConfig.kt deleted file mode 100644 index fd6d083..0000000 --- a/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedConfig.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.willfp.ecoskills.attackspeed - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.yaml.YamlExtendableConfig - -class AttackSpeedConfig(plugin: EcoPlugin) : YamlExtendableConfig( - "attackspeed", - true, - plugin, - AttackSpeedConfig::class.java, - "stats/" -) { -} \ No newline at end of file diff --git a/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedMain.kt b/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedMain.kt deleted file mode 100644 index b69aca8..0000000 --- a/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/AttackSpeedMain.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.willfp.ecoskills.attackspeed - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.extensions.Extension - -class AttackSpeedMain(plugin: EcoPlugin) : Extension(plugin) { - val attackSpeed = StatAttackSpeed() - - override fun onEnable() { - // Do nothing - } - - override fun onDisable() { - // Do nothing - } -} \ No newline at end of file diff --git a/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/StatAttackSpeed.kt b/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/StatAttackSpeed.kt deleted file mode 100644 index e2e8ceb..0000000 --- a/eco-extensions/attackspeed/src/main/kotlin/com/willfp/ecoskills/attackspeed/StatAttackSpeed.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.willfp.ecoskills.attackspeed - -import com.willfp.ecoskills.getStatLevel -import com.willfp.ecoskills.stats.Stat -import org.bukkit.attribute.Attribute -import org.bukkit.attribute.AttributeModifier -import org.bukkit.entity.Player - -class StatAttackSpeed : Stat( - "attack_speed" -) { - override val config = AttackSpeedConfig(plugin) - - override fun updateStatLevel(player: Player) { - val modifier = AttributeModifier( - this.uuid, - this.name, - (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) - - plugin.scheduler.run { - instance.removeModifier(modifier) - instance.addModifier(modifier) - } - } -} \ No newline at end of file diff --git a/eco-extensions/attackspeed/src/main/resources/stats/attackspeed.yml b/eco-extensions/attackspeed/src/main/resources/stats/attackspeed.yml deleted file mode 100644 index 4e4421b..0000000 --- a/eco-extensions/attackspeed/src/main/resources/stats/attackspeed.yml +++ /dev/null @@ -1 +0,0 @@ -percent-faster-per-level: 1 \ No newline at end of file