diff --git a/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java b/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java index 3da7801d..473a9fef 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/profess/SavedClassInformation.java @@ -29,10 +29,10 @@ public class SavedClassInformation { attributes = new HashMap<>(); if (config.contains("attribute")) - config.getConfigurationSection("attribute").getKeys(false).forEach(key -> attributes.put(key, config.getInt(key))); + config.getConfigurationSection("attribute").getKeys(false).forEach(key -> attributes.put(key, config.getInt("attribute." + key))); skills = new HashMap<>(); if (config.contains("skill")) - config.getConfigurationSection("skill").getKeys(false).forEach(key -> skills.put(key, config.getInt(key))); + config.getConfigurationSection("skill").getKeys(false).forEach(key -> skills.put(key, config.getInt("skill." + key))); } public SavedClassInformation(JsonObject json) { @@ -150,9 +150,9 @@ public class SavedClassInformation { * resets information which much be reset after everything is saved. */ player.mapSkillLevels().forEach((skill, level) -> player.resetSkillLevel(skill)); + player.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); while (player.hasSkillBound(0)) player.unbindSkill(0); - player.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); /* * reads this class info, applies it to the player. set class after @@ -164,6 +164,7 @@ public class SavedClassInformation { player.setSkillPoints(skillPoints); player.setAttributePoints(attributePoints); player.setAttributeReallocationPoints(attributeReallocationPoints); + skills.forEach(player::setSkillLevel); attributes.forEach((id, pts) -> player.getAttributes().setBaseAttribute(id, pts)); diff --git a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ClassCommandTreeNode.java b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ClassCommandTreeNode.java index ff6499fc..7704b345 100644 --- a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ClassCommandTreeNode.java +++ b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ClassCommandTreeNode.java @@ -1,6 +1,5 @@ package net.Indyuce.mmocore.command.rpg.admin; -import net.Indyuce.mmocore.command.CommandVerbose; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Sound; @@ -12,6 +11,7 @@ import net.Indyuce.mmocore.api.event.PlayerChangeClassEvent; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.profess.PlayerClass; import net.Indyuce.mmocore.api.player.profess.SavedClassInformation; +import net.Indyuce.mmocore.command.CommandVerbose; import net.mmogroup.mmolib.command.api.CommandTreeNode; import net.mmogroup.mmolib.command.api.Parameter; @@ -20,8 +20,8 @@ public class ClassCommandTreeNode extends CommandTreeNode { super(parent, "class"); addParameter(Parameter.PLAYER); - addParameter(new Parameter("", (explorer, list) -> MMOCore.plugin.classManager.getAll() - .forEach(profess -> list.add(profess.getId())))); + addParameter( + new Parameter("", (explorer, list) -> MMOCore.plugin.classManager.getAll().forEach(profess -> list.add(profess.getId())))); } @Override @@ -42,26 +42,24 @@ public class ClassCommandTreeNode extends CommandTreeNode { } PlayerClass profess = MMOCore.plugin.classManager.get(format); - PlayerData data = PlayerData.get(player); + if (data.getProfess().equals(profess)) + return CommandResult.SUCCESS; + PlayerChangeClassEvent called = new PlayerChangeClassEvent(data, profess); Bukkit.getPluginManager().callEvent(called); if (called.isCancelled()) return CommandResult.SUCCESS; - data.giveClassPoints(-1); - (data.hasSavedClass(profess) ? data.getClassInfo(profess) : new SavedClassInformation( - MMOCore.plugin.dataProvider.getDataManager().getDefaultData())).load(profess, data); - while (data.hasSkillBound(0)) - data.unbindSkill(0); + (data.hasSavedClass(profess) ? data.getClassInfo(profess) + : new SavedClassInformation(MMOCore.plugin.dataProvider.getDataManager().getDefaultData())).load(profess, data); if (data.isOnline()) { - MMOCore.plugin.configManager.getSimpleMessage("class-select", "class", profess.getName()) - .send(data.getPlayer()); + MMOCore.plugin.configManager.getSimpleMessage("class-select", "class", profess.getName()).send(data.getPlayer()); data.getPlayer().playSound(data.getPlayer().getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 1, 1); } - CommandVerbose.verbose(sender, CommandVerbose.CommandType.CLASS, ChatColor.GOLD + player.getName() - + ChatColor.YELLOW + " is now a " + ChatColor.GOLD + profess.getName() + ChatColor.YELLOW + "."); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.CLASS, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now a " + ChatColor.GOLD + profess.getName() + ChatColor.YELLOW + "."); return CommandResult.SUCCESS; } } diff --git a/src/main/java/net/Indyuce/mmocore/gui/ClassConfirmation.java b/src/main/java/net/Indyuce/mmocore/gui/ClassConfirmation.java index 4ae22c8d..fe736ec4 100644 --- a/src/main/java/net/Indyuce/mmocore/gui/ClassConfirmation.java +++ b/src/main/java/net/Indyuce/mmocore/gui/ClassConfirmation.java @@ -92,9 +92,7 @@ public class ClassConfirmation extends EditableInventory { @Override public ItemStack display(GeneratedInventory inv, int n) { - return inv.getPlayerData().hasSavedClass(((ClassConfirmationInventory) inv).profess) - ? unlocked.display(inv, n) - : locked.display(inv, n); + return inv.getPlayerData().hasSavedClass(((ClassConfirmationInventory) inv).profess) ? unlocked.display(inv, n) : locked.display(inv, n); } @Override @@ -107,8 +105,7 @@ public class ClassConfirmation extends EditableInventory { private final PlayerClass profess; private final PluginInventory last; - public ClassConfirmationInventory(PlayerData playerData, EditableInventory editable, PlayerClass profess, - PluginInventory last) { + public ClassConfirmationInventory(PlayerData playerData, EditableInventory editable, PlayerClass profess, PluginInventory last) { super(playerData, editable); this.profess = profess; @@ -131,10 +128,8 @@ public class ClassConfirmation extends EditableInventory { return; playerData.giveClassPoints(-1); - (playerData.hasSavedClass(profess) ? playerData.getClassInfo(profess) : new SavedClassInformation( - MMOCore.plugin.dataProvider.getDataManager().getDefaultData())).load(profess, playerData); - while (playerData.hasSkillBound(0)) - playerData.unbindSkill(0); + (playerData.hasSavedClass(profess) ? playerData.getClassInfo(profess) + : new SavedClassInformation(MMOCore.plugin.dataProvider.getDataManager().getDefaultData())).load(profess, playerData); MMOCore.plugin.configManager.getSimpleMessage("class-select", "class", profess.getName()).send(player); MMOCore.plugin.soundManager.play(player, SoundManager.SoundEvent.SELECT_CLASS); player.closeInventory(); diff --git a/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java b/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java index e653e3e1..69ae7b8d 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java @@ -1,22 +1,23 @@ package net.Indyuce.mmocore.manager.data; -import net.Indyuce.mmocore.MMOCore; -import net.Indyuce.mmocore.api.event.PlayerDataLoadEvent; -import net.Indyuce.mmocore.api.player.OfflinePlayerData; -import net.Indyuce.mmocore.api.player.PlayerData; -import net.mmogroup.mmolib.api.player.MMOPlayerData; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.configuration.ConfigurationSection; - import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.ConfigurationSection; + +import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.event.PlayerDataLoadEvent; +import net.Indyuce.mmocore.api.player.OfflinePlayerData; +import net.Indyuce.mmocore.api.player.PlayerData; +import net.mmogroup.mmolib.api.player.MMOPlayerData; + public abstract class PlayerDataManager { private final static Map data = new HashMap<>(); - private DefaultPlayerData defaultData = new DefaultPlayerData(); + private DefaultPlayerData defaultData = new DefaultPlayerData(1, 0, 0, 0, 0); public PlayerData get(OfflinePlayer player) { return get(player.getUniqueId()); @@ -47,10 +48,11 @@ public abstract class PlayerDataManager { */ Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> { PlayerData loaded = PlayerData.get(uuid); - if(!loaded.isOnline()) return; + if (!loaded.isOnline()) + return; loadData(loaded); Bukkit.getScheduler().runTask(MMOCore.plugin, () -> { - if(loaded.isOnline()) + if (loaded.isOnline()) Bukkit.getPluginManager().callEvent(new PlayerDataLoadEvent(loaded)); }); loaded.getStats().updateStats(); @@ -92,12 +94,12 @@ public abstract class PlayerDataManager { attrReallocPoints = config.getInt("attribute-realloc-points"); } - public DefaultPlayerData() { - level = 1; - classPoints = 0; - skillPoints = 0; - attributePoints = 0; - attrReallocPoints = 0; + public DefaultPlayerData(int level, int classPoints, int skillPoints, int attributePoints, int attrReallocPoints) { + this.level = level; + this.classPoints = classPoints; + this.skillPoints = skillPoints; + this.attributePoints = attributePoints; + this.attrReallocPoints = attrReallocPoints; } public int getLevel() { @@ -119,5 +121,13 @@ public abstract class PlayerDataManager { public int getAttributePoints() { return attributePoints; } + + public void apply(PlayerData player) { + player.setLevel(level); + player.setClassPoints(classPoints); + player.setSkillPoints(skillPoints); + player.setAttributePoints(attributePoints); + player.setAttributeReallocationPoints(attrReallocPoints); + } } }