From e518cafc85b978c67cf3a0770c22f80b4e9b6653 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Tue, 21 Mar 2023 20:41:30 +0100 Subject: [PATCH] Modifications to make UnlockSkillTrigger work with the rest of MMOCore. --- .../net/Indyuce/mmocore/api/load/DefaultMMOLoader.java | 2 ++ .../java/net/Indyuce/mmocore/api/player/PlayerData.java | 8 ++++++++ .../mmocore/experience/droptable/ExperienceItem.java | 8 +++++--- .../mmocore/experience/droptable/ExperienceTable.java | 5 ++--- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java index 3957b537..8bfd04bb 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/load/DefaultMMOLoader.java @@ -21,6 +21,8 @@ public class DefaultMMOLoader extends MMOLoader { return new FromTrigger(config); if (config.getKey().equals("stat")) return new StatTrigger(config); + if (config.getKey().equals("unlock_skill")) + return new UnlockSkillTrigger(config); if (config.getKey().equals("message")) return new MessageTrigger(config); if (config.getKey().equals("sound") || config.getKey().equals("playsound")) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 3910d815..9e6b1671 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -550,6 +550,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return unlockedItems.add(unlockable.getUnlockNamespacedKey()); } + /** + * Locks an item for the player by removing it from the unlocked items map if it is present. + * This is mainly used to remove unlocked items when changing class or reallocating a skill tree. + */ + public void lock(Unlockable unlockable){ + unlockedItems.remove(unlockable.getUnlockNamespacedKey()); + } + public void setLevel(int level) { this.level = Math.max(1, level); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceItem.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceItem.java index 05bbdb58..b8914d21 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceItem.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceItem.java @@ -5,6 +5,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.quest.trigger.StatTrigger; import net.Indyuce.mmocore.api.quest.trigger.Trigger; +import net.Indyuce.mmocore.api.quest.trigger.api.Removable; import org.apache.commons.lang.Validate; import org.bukkit.configuration.ConfigurationSection; @@ -105,15 +106,16 @@ public class ExperienceItem { * Used when the player level is reset to 0 ( reallocate point in skill tree for instance) * Creates an opposite playerModifier to compensate all the effect that existed before. */ - public void removeStatTriggers(PlayerData playerData) { + public void removeTriggers(PlayerData playerData) { for (Trigger trigger : triggers) { - if (trigger instanceof StatTrigger statTrigger) - statTrigger.remove(playerData); + if (trigger instanceof Removable) + ((Removable) trigger).remove(playerData); } } /** * Used when a player connects back to give back all the stats that he should have. + * * @param playerData */ public void applyStatTriggers(PlayerData playerData) { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceTable.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceTable.java index e79a8585..9fbdc0a6 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceTable.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/experience/droptable/ExperienceTable.java @@ -4,7 +4,6 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.experience.ExperienceObject; import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import java.util.ArrayList; @@ -62,7 +61,7 @@ public class ExperienceTable { for (ExperienceItem item : items) { int timesClaimed = playerData.getClaims(object, this, item); for (int i = 0; i < timesClaimed; i++) - item.removeStatTriggers(playerData); + item.removeTriggers(playerData); } } @@ -74,7 +73,7 @@ public class ExperienceTable { int timesClaimed = playerData.getClaims(object, this, item); playerData.setClaims(object, this, item, 0); for (int i = 0; i < timesClaimed; i++) - item.removeStatTriggers(playerData); + item.removeTriggers(playerData); } }