From a9e4a888088c921449d29d6ae7382b8d354145c8 Mon Sep 17 00:00:00 2001 From: PIEisFANTASTIC <49802408+PIEisFANTASTIC@users.noreply.github.com> Date: Fri, 15 Aug 2025 20:39:21 -0400 Subject: [PATCH] Bugfix: Fix issue with Hard players getting no exp when base is 1 --- .../smprpg/services/DifficultyService.java | 23 ------------------- .../smprpg/skills/SkillInstance.java | 20 ++++++++++++++++ 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/main/java/xyz/devvydont/smprpg/services/DifficultyService.java b/src/main/java/xyz/devvydont/smprpg/services/DifficultyService.java index 2c9c8af0c..21b23dd50 100644 --- a/src/main/java/xyz/devvydont/smprpg/services/DifficultyService.java +++ b/src/main/java/xyz/devvydont/smprpg/services/DifficultyService.java @@ -21,18 +21,6 @@ public class DifficultyService implements IService, Listener { public final static NamespacedKey DIFFICULTY_MODIFIER_KEY = new NamespacedKey(SMPRPG.getInstance(), "difficulty_modifier"); - /** - * Given a difficulty, determine the skill experience multiplier. - * @param difficulty The difficulty a player is on. - * @return The multiplier of skill experience they gain. - */ - public static float getSkillExperienceMultiplier(ProfileDifficulty difficulty) { - return switch (difficulty) { - case EASY -> 1.25f; - case HARD -> 0.75f; - default -> 1.0f; - }; - } /** * Given a difficulty, determine the incoming damage multiplier. @@ -152,17 +140,6 @@ private void __onPlayerJoin(PlayerJoinEvent event) { gui.lock(); } - @EventHandler(priority = EventPriority.HIGHEST) - private void __onPlayerEarnSkillExperience(SkillExperienceGainEvent event) { - - // Ignore experience gained from commands, otherwise the skill set command will behave wonky. - if (event.getSource().equals(SkillExperienceGainEvent.ExperienceSource.COMMANDS)) - return; - - var multiplier = getSkillExperienceMultiplier(getDifficulty(event.getPlayer())); - event.multiplyExperienceEarned(multiplier); - } - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void __onPlayerEarnMinecraftExperience(PlayerPickupExperienceEvent event) { if (getDifficulty(event.getPlayer()).equals(ProfileDifficulty.HARD)) diff --git a/src/main/java/xyz/devvydont/smprpg/skills/SkillInstance.java b/src/main/java/xyz/devvydont/smprpg/skills/SkillInstance.java index 66a51929c..e73cca4b6 100644 --- a/src/main/java/xyz/devvydont/smprpg/skills/SkillInstance.java +++ b/src/main/java/xyz/devvydont/smprpg/skills/SkillInstance.java @@ -2,12 +2,15 @@ import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataType; +import xyz.devvydont.smprpg.SMPRPG; import xyz.devvydont.smprpg.attribute.AttributeWrapper; +import xyz.devvydont.smprpg.entity.player.ProfileDifficulty; import xyz.devvydont.smprpg.events.skills.SkillExperienceGainEvent; import xyz.devvydont.smprpg.events.skills.SkillExperiencePostGainEvent; import xyz.devvydont.smprpg.events.skills.SkillLevelUpEvent; import xyz.devvydont.smprpg.services.AttributeService; import xyz.devvydont.smprpg.skills.rewards.ISkillReward; +import xyz.devvydont.smprpg.services.DifficultyService; import java.util.Collection; @@ -75,6 +78,19 @@ public void setExperience(int experience) { owner.getPersistentDataContainer().set(type.getNamespacedKey(), PersistentDataType.INTEGER, experience); } + /** + * Given a difficulty, determine the skill experience multiplier. + * @param difficulty The difficulty a player is on. + * @return The multiplier of skill experience they gain. + */ + public static float getSkillExperienceMultiplier(ProfileDifficulty difficulty) { + return switch (difficulty) { + case EASY -> 1.25f; + case HARD -> 0.75f; + default -> 1.0f; + }; + } + /** * Add experience to the owning player. Automatically handles level up and event calling logic for you. * @param experience The amount of experience to add. @@ -88,10 +104,14 @@ public void addExperience(int experience, SkillExperienceGainEvent.ExperienceSou if (event.isCancelled() || event.getExperienceEarned() <= 0) return; + var difficulty = SMPRPG.getService(DifficultyService.class).getDifficulty(getOwner()); + double difficultyModifier = getSkillExperienceMultiplier(difficulty); + // Add the experience and take note of what level we are before and after int oldLevel = getLevel(); int expCap = SkillGlobals.getTotalExperienceCap(); double expEarned = event.getExperienceEarned(); + expEarned *= difficultyModifier; expEarned *= 1.0 + (getProficiencyStacks() / 100.0); event.setExperienceEarned((int) Math.round(expEarned)); double newExp = getExperience() + expEarned;