mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-02-08 12:21:23 +01:00
Fixes skill tree points consumption dupe bug
This commit is contained in:
parent
15e759a70b
commit
84e587ba0b
@ -232,11 +232,12 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
}
|
||||
|
||||
public void setSkillTreePoints(@NotNull String treeId, int points) {
|
||||
skillTreePoints.put(treeId, points);
|
||||
if (points <= 0) skillTreePoints.remove(treeId);
|
||||
else skillTreePoints.put(treeId, points);
|
||||
}
|
||||
|
||||
public void giveSkillTreePoints(@NotNull String id, int val) {
|
||||
skillTreePoints.merge(id, val, (points, ignored) -> points + val);
|
||||
skillTreePoints.merge(id, Math.max(0, val), (points, ignored) -> Math.max(0, points + val));
|
||||
}
|
||||
|
||||
public int countSkillTreePoints(@NotNull SkillTree skillTree) {
|
||||
@ -340,7 +341,7 @@ public class PlayerData extends SynchronizedDataHolder implements OfflinePlayerD
|
||||
skillTreePoints.computeIfPresent(node.getTree().getId(), (key, points) -> {
|
||||
final int withdrawn = Math.min(points, cost.get());
|
||||
cost.set(cost.get() - withdrawn);
|
||||
return points == withdrawn ? null : points - withdrawn;
|
||||
return points <= withdrawn ? null : points - withdrawn;
|
||||
});
|
||||
if (cost.get() > 0) withdrawSkillTreePoints("global", cost.get());
|
||||
|
||||
|
@ -125,13 +125,13 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
this.stellium = data.getStellium();
|
||||
this.stamina = data.getStamina();
|
||||
|
||||
data.mapAttributeLevels().forEach((key, val) -> this.attributeLevels.put(key, val));
|
||||
data.mapSkillLevels().forEach((key, val) -> skillLevels.put(key, val));
|
||||
data.mapSkillTreePoints().forEach((key, val) -> skillTreePoints.put(key, val));
|
||||
data.getNodeLevels().forEach((node, level) -> nodeLevels.put(node, level));
|
||||
data.getNodeTimesClaimed().forEach((key, val) -> nodeTimesClaimed.put(key, val));
|
||||
data.mapBoundSkills().forEach((slot, skill) -> boundSkills.put(slot, skill));
|
||||
data.getUnlockedItems().forEach(item -> unlockedItems.add(item));
|
||||
attributeLevels.putAll(data.mapAttributeLevels());
|
||||
skillLevels.putAll(data.mapSkillLevels());
|
||||
skillTreePoints.putAll(data.mapSkillTreePoints());
|
||||
nodeLevels.putAll(data.getNodeLevels());
|
||||
nodeTimesClaimed.putAll(data.getNodeTimesClaimed());
|
||||
boundSkills.putAll(data.mapBoundSkills());
|
||||
unlockedItems.addAll(data.getUnlockedItems());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -324,10 +324,7 @@ public class SavedClassInformation implements ClassDataContainer {
|
||||
player.bindSkill(slot, profess.getSkill(boundSkills.get(slot)));
|
||||
|
||||
skillLevels.forEach(player::setSkillLevel);
|
||||
attributeLevels.forEach((id, pts) -> {
|
||||
final PlayerAttributes.AttributeInstance ins = player.getAttributes().getInstance(id);
|
||||
if (ins != null) ins.setBase(pts);
|
||||
});
|
||||
attributeLevels.forEach((id, pts) -> player.getAttributes().getInstance(id).setBase(pts));
|
||||
|
||||
// Careful, the global points must not be forgotten.
|
||||
player.setSkillTreePoints("global", skillTreePoints.getOrDefault("global", 0));
|
||||
|
@ -9,6 +9,7 @@ import net.Indyuce.mmocore.guild.provided.Guild;
|
||||
import net.Indyuce.mmocore.manager.data.OfflinePlayerData;
|
||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
@ -82,11 +83,8 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
||||
data.bindSkill(Integer.parseInt(key), skill);
|
||||
}
|
||||
|
||||
for (String key : MMOCore.plugin.skillTreeManager.getAll().
|
||||
stream().
|
||||
map(skillTree -> skillTree.getId()).
|
||||
toList()) {
|
||||
data.setSkillTreePoints(key, config.getInt("skill-tree-points." + key, 0));
|
||||
for (SkillTree tree : MMOCore.plugin.skillTreeManager.getAll()) {
|
||||
data.setSkillTreePoints(tree.getId(), config.getInt("skill-tree-points." + tree.getId()));
|
||||
}
|
||||
data.setSkillTreePoints("global", config.getInt("skill-tree-points.global", 0));
|
||||
|
||||
@ -145,6 +143,7 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
||||
config.set("friends", data.getFriends().stream().map(UUID::toString).collect(Collectors.toList()));
|
||||
config.set("last-login", data.getLastLogin());
|
||||
config.set("guild", data.hasGuild() ? data.getGuild().getId() : null);
|
||||
config.set("skill-tree-points", null); // Fixes skill tree points leftovers
|
||||
data.mapSkillTreePoints().forEach((key1, value) -> config.set("skill-tree-points." + key1, value));
|
||||
config.set("skill-tree-reallocation-points", data.getSkillTreeReallocationPoints());
|
||||
config.set("skill", null);
|
||||
|
Loading…
Reference in New Issue
Block a user