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 4503f428..0b2c0966 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 @@ -820,6 +820,12 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD return classSlots.get(profess); } + /** + * Saves information of a class + * + * @param profess Class + * @param info Class player progress + */ public void applyClassInfo(PlayerClass profess, SavedClassInformation info) { classSlots.put(profess.getId(), info); } @@ -1216,19 +1222,25 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD return getAttributes().mapPoints(); } - public int getSkillLevel(RegisteredSkill skill) { + public int getSkillLevel(@NotNull RegisteredSkill skill) { return skills.getOrDefault(skill.getHandler().getId(), 1); } - public void setSkillLevel(RegisteredSkill skill, int level) { + public void setSkillLevel(@NotNull RegisteredSkill skill, int level) { setSkillLevel(skill.getHandler().getId(), level); } - public void setSkillLevel(String skill, int level) { - skills.put(skill, level); + public void setSkillLevel(@NotNull String skill, int level) { + if (level <= 1) skills.remove(skill); + else skills.put(skill, level); } - public void resetSkillLevel(String skill) { + public void resetSkills() { + skills.clear(); + while (hasSkillBound(0)) unbindSkill(0); + } + + public void resetSkillLevel(@NotNull String skill) { skills.remove(skill); } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java index 3dd7ce61..f3cd1c4a 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java @@ -299,7 +299,7 @@ public class SavedClassInformation implements ClassDataContainer { /* * Resets information which much be reset after everything is saved. */ - player.mapSkillLevels().forEach((skill, level) -> player.resetSkillLevel(skill)); + player.resetSkills(); for (PlayerAttribute attribute : MMOCore.plugin.attributeManager.getAll()) { attribute.resetAdvancement(player, false); player.getAttributes().getInstance(attribute).setBase(0); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java index b036ba2d..5edd25bd 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/stats/PlayerStats.java @@ -97,7 +97,7 @@ public class PlayerStats { } }); - // Updates the player's unbindable CLASS passive skills + // Updates the player's UNBINDABLE PASSIVE (== PERMANENT) skills final PassiveSkillMap skillMap = data.getMMOPlayerData().getPassiveSkillMap(); skillMap.removeModifiers("MMOCorePermanentSkill"); for (ClassSkill skill : data.getProfess().getSkills()) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/builtin/mmocore/admin/reset/ResetCommandTreeNode.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/builtin/mmocore/admin/reset/ResetCommandTreeNode.java index fcb89dd7..95b96231 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/builtin/mmocore/admin/reset/ResetCommandTreeNode.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/builtin/mmocore/admin/reset/ResetCommandTreeNode.java @@ -104,8 +104,6 @@ public class ResetCommandTreeNode extends CommandTreeNode { static class ResetSkillsCommandTreeNode extends AbstractResetNode { public ResetSkillsCommandTreeNode(CommandTreeNode parent) { super(parent, "skills"); - - addArgument(Argument.PLAYER); } @Override @@ -117,8 +115,7 @@ public class ResetCommandTreeNode extends CommandTreeNode { } static void resetSkills(@NotNull PlayerData data) { - data.mapSkillLevels().forEach((skill, ignored) -> data.resetSkillLevel(skill)); - while (data.hasSkillBound(0)) data.unbindSkill(0); + data.resetSkills(); data.setUnlockedItems(new HashSet<>()); // TODO class-specific unlockables etc. } } @@ -126,8 +123,6 @@ public class ResetCommandTreeNode extends CommandTreeNode { static class ResetSkillTreesCommandTreeNode extends AbstractResetNode { public ResetSkillTreesCommandTreeNode(CommandTreeNode parent) { super(parent, "skill-trees"); - - addArgument(Argument.PLAYER); } @Override