From 45fbfca44f90147951940746bfafabf9ee0ecc7d Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 13 Oct 2021 15:42:33 +0100 Subject: [PATCH] Added base and bonus placeholders --- .../willfp/ecoskills/api/EcoSkillsAPI.java | 10 +++++++ .../com/willfp/ecoskills/EcoSkillsPlayer.kt | 16 ++++++---- .../willfp/ecoskills/api/EcoSkillsAPIImpl.kt | 6 +++- .../kotlin/com/willfp/ecoskills/stats/Stat.kt | 29 +++++++++++++++++-- .../core-plugin/src/main/resources/config.yml | 14 ++++----- 5 files changed, 59 insertions(+), 16 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/EcoSkillsAPI.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/EcoSkillsAPI.java index 7fd120b..418dba5 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/EcoSkillsAPI.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/api/EcoSkillsAPI.java @@ -125,6 +125,16 @@ public interface EcoSkillsAPI { int getBaseStatLevel(@NotNull OfflinePlayer player, @NotNull Stat stat); + /** + * Get the added stat levels for a player from modifiers. + * + * @param player The player. + * @param stat The stat. + * @return The stat level. + */ + int getBonusStatLevel(@NotNull Player player, + @NotNull Stat stat); + /** * Add a stat modifier to an item. * diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt index 08cdfa3..5741185 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt @@ -129,15 +129,21 @@ fun OfflinePlayer.setEffectLevel(effect: Effect, level: Int) { fun OfflinePlayer.getStatLevel(stat: Stat): Int { var base = this.getBaseStatLevel(stat) if (this is Player) { - for (modifier in this.getStatModifiers()) { - if (modifier.stat == stat) { - base += modifier.amount - } - } + base += this.getBonusStatLevel(stat) } return base } +fun Player.getBonusStatLevel(stat: Stat): Int { + var i = 0 + for (modifier in this.getStatModifiers()) { + if (modifier.stat == stat) { + i += modifier.amount + } + } + return i +} + fun OfflinePlayer.getBaseStatLevel(stat: Stat): Int { return profile.readInt(stat.id) } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/api/EcoSkillsAPIImpl.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/api/EcoSkillsAPIImpl.kt index bc13cf3..ed4e910 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/api/EcoSkillsAPIImpl.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/api/EcoSkillsAPIImpl.kt @@ -11,7 +11,7 @@ import org.bukkit.OfflinePlayer import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack -object EcoSkillsAPIImpl: EcoSkillsAPI { +object EcoSkillsAPIImpl : EcoSkillsAPI { override fun getSkillLevel(player: OfflinePlayer, skill: Skill): Int { return player.getSkillLevel(skill) } @@ -48,6 +48,10 @@ object EcoSkillsAPIImpl: EcoSkillsAPI { return player.getBaseStatLevel(stat) } + override fun getBonusStatLevel(player: Player, stat: Stat): Int { + return player.getBonusStatLevel(stat) + } + override fun addStatModifier(itemStack: ItemStack, modifier: ItemStatModifier) { itemStack.addStatModifier(modifier) } 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 1c4430c..2040e6d 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 @@ -4,9 +4,7 @@ import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.integrations.placeholder.PlaceholderEntry import com.willfp.eco.util.NumberUtils -import com.willfp.ecoskills.EcoSkillsPlugin -import com.willfp.ecoskills.SkillObject -import com.willfp.ecoskills.getStatLevel +import com.willfp.ecoskills.* import org.bukkit.NamespacedKey import org.bukkit.entity.Player import org.bukkit.event.Listener @@ -53,6 +51,31 @@ abstract class Stat( true ).register() + PlaceholderEntry( + "${id}_base", + { player -> player.getBaseStatLevel(this).toString() }, + true + ).register() + + PlaceholderEntry( + "${id}_base_numeral", + { player -> NumberUtils.toNumeral(player.getBaseStatLevel(this)) }, + true + ).register() + + PlaceholderEntry( + "${id}_bonus", + { player -> + val bonus = player.getBonusStatLevel(this) + return@PlaceholderEntry when { + bonus > 0 -> "+$bonus" + bonus < 0 -> "$bonus" + else -> "" + } + }, + true + ).register() + PlaceholderEntry( "${id}_name", { this.name }, diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 4984399..603455f 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -44,13 +44,13 @@ gui: name: "&f%player%&f's &fStats:" lore: - "&f" - - " %ecoskills_defense_name%&f %ecoskills_defense%" - - " %ecoskills_strength_name%&f %ecoskills_strength%" - - " %ecoskills_crit_chance_name%&f %ecoskills_crit_chance%%" - - " %ecoskills_crit_damage_name%&f %ecoskills_crit_damage%" - - " %ecoskills_speed_name%&f %ecoskills_speed%" - - " %ecoskills_wisdom_name%&f %ecoskills_wisdom%" - - " %ecoskills_ferocity_name%&f %ecoskills_ferocity%" + - " %ecoskills_defense_name%&f %ecoskills_defense_base% &e%ecoskills_defense_bonus%" + - " %ecoskills_strength_name%&f %ecoskills_strength_base% &e%ecoskills_strength_bonus%" + - " %ecoskills_crit_chance_name%&f %ecoskills_crit_chance_base%% &e%ecoskills_crit_chance_bonus%%" + - " %ecoskills_crit_damage_name%&f %ecoskills_crit_damage_base% &e%ecoskills_crit_damage_bonus%" + - " %ecoskills_speed_name%&f %ecoskills_speed_base% &e%ecoskills_speed_bonus%" + - " %ecoskills_wisdom_name%&f %ecoskills_wisdom_base% &e%ecoskills_wisdom_bonus%" + - " %ecoskills_ferocity_name%&f %ecoskills_ferocity_base% &e%ecoskills_ferocity_bonus%" - "&f" - "&7Total Skill Level: &f%ecoskills_total_skill_level%" - "&7Average Skill Level: &f%ecoskills_average_skill_level%"