From 5cf1505a8dc13112fa9cb3e76caeed7fdf73157d Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 29 Oct 2022 05:46:27 +0200 Subject: [PATCH 1/6] Remove redundancy issues. --- .../main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java | 5 ++--- .../main/java/net/Indyuce/mmocore/gui/eco/DepositMenu.java | 2 -- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java index d3d38fc7..ef7c91e2 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/SkillTreeViewer.java @@ -337,8 +337,7 @@ public class SkillTreeViewer extends EditableInventory { @Override public void whenClicked(InventoryClickContext event, InventoryItem item) { - if(event.getClickedItem()==null) - return; + if (item.getFunction().equals("next-tree-list-page")) { treeListPage++; @@ -401,7 +400,7 @@ public class SkillTreeViewer extends EditableInventory { String id = event.getClickedItem().getItemMeta().getPersistentDataContainer().get( new NamespacedKey(MMOCore.plugin, "skill-tree-id"), PersistentDataType.STRING); MMOCore.plugin.soundManager.getSound(SoundEvent.CHANGE_SKILL_TREE).playTo(player); - skillTree=MMOCore.plugin.skillTreeManager.get(id); + skillTree = MMOCore.plugin.skillTreeManager.get(id); open(); event.setCancelled(true); return; diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/eco/DepositMenu.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/eco/DepositMenu.java index 8296cebf..eb956832 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/eco/DepositMenu.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/gui/eco/DepositMenu.java @@ -42,8 +42,6 @@ public class DepositMenu extends PluginInventory { @Override public void whenClicked(InventoryClickContext event) { - if (event.getClickedItem() == null || event.getClickedItem().getType() == Material.AIR) - return; if (event.getClickedItem().isSimilar(depositItem)) { event.setCancelled(true); From 2adca395c0f662980231053cf8152065b794d130 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 29 Oct 2022 06:20:52 +0200 Subject: [PATCH 2/6] Little modifications to the chance system. Potential fix of a bug about fishing drop tables. --- .../java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java | 6 +++--- .../Indyuce/mmocore/loot/droptable/dropitem/DropItem.java | 3 ++- .../java/net/Indyuce/mmocore/manager/ConfigManager.java | 3 ++- MMOCore-Dist/src/main/resources/config.yml | 1 + 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java index 53e3fae2..ffe61326 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/RandomWeightedRoll.java @@ -17,6 +17,7 @@ public class RandomWeightedRoll { private final T rolled; private static final Random RANDOM = new Random(); + private static final double CHANCE_COEFFICIENT = 7. / 100; public RandomWeightedRoll(PlayerData player, Collection collection, double chanceWeight) { this.collection = collection; @@ -26,13 +27,13 @@ public class RandomWeightedRoll { for (T item : collection) { partialSum += computeRealWeight(item, chance); - if (partialSum > randomCoefficient * sum) { + if (partialSum >= randomCoefficient * sum) { rolled = item; return; } } - throw new RuntimeException("Could not roll item"); + throw new RuntimeException("Could not roll item, the chance is :"+chance); } /** @@ -53,7 +54,6 @@ public class RandomWeightedRoll { return sum; } - private static final double CHANCE_COEFFICIENT = 7. / 100; /** * chance = 0 | tier chances are unchanged diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java index f46c0554..8559101c 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/loot/droptable/dropitem/DropItem.java @@ -1,6 +1,7 @@ package net.Indyuce.mmocore.loot.droptable.dropitem; import io.lumine.mythic.lib.api.MMOLineConfig; +import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.util.math.formula.RandomAmount; import net.Indyuce.mmocore.loot.LootBuilder; @@ -46,7 +47,7 @@ public abstract class DropItem { */ public boolean rollChance(PlayerData player) { double value = random.nextDouble(); - return value < Math.pow(chance, 1 / Math.pow(1 + CHANCE_COEFFICIENT * player.getStats().getStat("CHANCE"), 1.0 / 3.0)); + return value < Math.pow(chance, 1 / Math.pow(1 + CHANCE_COEFFICIENT * MMOCore.plugin.configManager.dropItemsChanceWeight* player.getStats().getStat("CHANCE"), 1.0 / 3.0)); } public abstract void collect(LootBuilder builder); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java index 7165a728..3dcb7c23 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/ConfigManager.java @@ -26,7 +26,7 @@ public class ConfigManager { public String partyChatPrefix, noSkillBoundPlaceholder; public ChatColor staminaFull, staminaHalf, staminaEmpty; public long combatLogTimer, lootChestExpireTime, lootChestPlayerCooldown, globalSkillCooldown; - public double lootChestsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange; + public double lootChestsChanceWeight,dropItemsChanceWeight, fishingDropsChanceWeight, partyMaxExpSplitRange; public int maxPartyLevelDifference, maxBoundActiveSkills, maxBoundPassiveSkills, waypointWarpTime; private final FileConfiguration messages; @@ -111,6 +111,7 @@ public class ConfigManager { globalSkillCooldown = MMOCore.plugin.getConfig().getLong("global-skill-cooldown") * 50; noSkillBoundPlaceholder = getSimpleMessage("no-skill-placeholder").message(); lootChestsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.loot-chests"); + dropItemsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.drop-items"); fishingDropsChanceWeight = MMOCore.plugin.getConfig().getDouble("chance-stat-weight.fishing-drops"); maxPartyLevelDifference = MMOCore.plugin.getConfig().getInt("party.max-level-difference"); partyMaxExpSplitRange = MMOCore.plugin.getConfig().getDouble("party.max-exp-split-range"); diff --git a/MMOCore-Dist/src/main/resources/config.yml b/MMOCore-Dist/src/main/resources/config.yml index a6d6024c..cbdd6559 100644 --- a/MMOCore-Dist/src/main/resources/config.yml +++ b/MMOCore-Dist/src/main/resources/config.yml @@ -79,6 +79,7 @@ guild-plugin: mmocore chance-stat-weight: loot-chests: 1 fishing-drops: 1 + drop-items: 1 # Whether blocks generated with a "cobblegenerator" should # provide the player with experience points or not From 6965ebafcfb341b919694f432ee570d988aa2f42 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 29 Oct 2022 06:20:52 +0200 Subject: [PATCH 3/6] Debug for MMOCore skill Tree. When creating nodes and using /mmocore reload --- .../src/main/java/net/Indyuce/mmocore/MMOCore.java | 5 +++++ .../net/Indyuce/mmocore/api/player/PlayerData.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java index 6cc0b87b..93e4e5da 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java @@ -382,6 +382,11 @@ public class MMOCore extends JavaPlugin { if (clearBefore) PlayerData.getAll().forEach(PlayerData::update); + else + //We update the skill tree data if some new skill tree has been + // created and updated with the /mmocore reload command. + PlayerData.getAll().forEach(PlayerData::updateSkillTree); + } public static void log(String message) { 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 529f4a86..f99fde29 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 @@ -187,6 +187,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc node.getExperienceTable().claimStatTriggers(this, node); } } + statLoaded=true; } @@ -344,6 +345,18 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc skillTree.setupNodeState(this); } + + public void updateSkillTree() { + nodeStates.clear(); + for (SkillTree tree : profess.getSkillTrees()) { + for (SkillTreeNode node : tree.getNodes()) { + if (!nodeLevels.containsKey(node)) + nodeLevels.put(node, 0); + } + } + setupSkillTree(); + } + public Map getNodeStates() { return new HashMap<>(nodeStates); } From aa90e9bc6c97f7c86d3c62636d4bcfb40a1dafff Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 29 Oct 2022 11:27:32 +0200 Subject: [PATCH 4/6] Debug for MMOCore skill Tree. When creating nodes and using /mmocore reload --- .../java/net/Indyuce/mmocore/MMOCore.java | 5 ---- .../mmocore/api/player/PlayerData.java | 23 ++++++++----------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java index 93e4e5da..6cc0b87b 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java @@ -382,11 +382,6 @@ public class MMOCore extends JavaPlugin { if (clearBefore) PlayerData.getAll().forEach(PlayerData::update); - else - //We update the skill tree data if some new skill tree has been - // created and updated with the /mmocore reload command. - PlayerData.getAll().forEach(PlayerData::updateSkillTree); - } public static void log(String message) { 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 f99fde29..f5bb8f56 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 @@ -172,11 +172,20 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc } finally { j++; } + + for(SkillTree skillTree:profess.getSkillTrees()) { + for(SkillTreeNode node: skillTree.getNodes()) { + if(!nodeLevels.containsKey(node)) + nodeLevels.put(node,0); + } + } + + setupSkillTree(); } public void setupSkillTree() { //Node states setup - for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) + for (SkillTree skillTree : profess.getSkillTrees()) skillTree.setupNodeState(this); @@ -345,18 +354,6 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc skillTree.setupNodeState(this); } - - public void updateSkillTree() { - nodeStates.clear(); - for (SkillTree tree : profess.getSkillTrees()) { - for (SkillTreeNode node : tree.getNodes()) { - if (!nodeLevels.containsKey(node)) - nodeLevels.put(node, 0); - } - } - setupSkillTree(); - } - public Map getNodeStates() { return new HashMap<>(nodeStates); } From 06985321d6b33231b56a8c76e6f1f713c95248d5 Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 5 Nov 2022 17:52:05 +0100 Subject: [PATCH 5/6] Bug for class information saving in SQL. --- .../mmocore/manager/data/mysql/MySQLPlayerDataManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java index f36568a8..35173d0d 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java @@ -125,7 +125,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager { data.getBoundSkills().add(skill); } if (!isEmpty(result.getString("class_info"))) { - JsonObject object = MythicLib.plugin.getJson().parse(result.getString("class_info"), JsonObject.class); + JsonObject object = new Gson().fromJson(result.getString("class_info"), JsonObject.class); for (Entry entry : object.entrySet()) { try { PlayerClass profess = MMOCore.plugin.classManager.get(entry.getKey()); From 9e821c79db490085957840504c8292129a165c4e Mon Sep 17 00:00:00 2001 From: Ka0rX Date: Sat, 5 Nov 2022 21:02:27 +0100 Subject: [PATCH 6/6] Debug and enhancements for the reset method. --- .../mmocore/api/player/PlayerData.java | 27 +- .../rpg/admin/ResetCommandTreeNode.java | 379 ++++++++++-------- .../manager/data/PlayerDataManager.java | 2 + 3 files changed, 222 insertions(+), 186 deletions(-) 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 f5bb8f56..858b058a 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 @@ -173,10 +173,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc j++; } - for(SkillTree skillTree:profess.getSkillTrees()) { - for(SkillTreeNode node: skillTree.getNodes()) { - if(!nodeLevels.containsKey(node)) - nodeLevels.put(node,0); + for (SkillTree skillTree : profess.getSkillTrees()) { + for (SkillTreeNode node : skillTree.getNodes()) { + if (!nodeLevels.containsKey(node)) + nodeLevels.put(node, 0); } } @@ -196,7 +196,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc node.getExperienceTable().claimStatTriggers(this, node); } } - statLoaded=true; + statLoaded = true; } @@ -233,6 +233,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return new HashMap(skillTreePoints); } + + public void clearSkillTreePoints() { skillTreePoints.clear(); } @@ -371,21 +373,11 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return result; } - public void resetNodeTimesClaimed() { - Map newTableItemClaims = new HashMap<>(); - tableItemClaims.forEach((str, val) -> { - if (!str.startsWith(SkillTreeNode.getPrefix())) - newTableItemClaims.put(str, val); - }); + public void resetTimesClaimed() { tableItemClaims.clear(); - tableItemClaims.putAll(newTableItemClaims); } - public void addNodeLevel(SkillTreeNode node) { - nodeLevels.put(node, nodeLevels.get(node) + 1); - } - @Override public void close() { @@ -804,7 +796,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc * If it's null, no hologram will be displayed * @param splitExp Should the exp be split among party members */ - public void giveExperience(double value, EXPSource source, @Nullable Location hologramLocation, boolean splitExp) { + public void giveExperience(double value, EXPSource source, @Nullable Location hologramLocation, + boolean splitExp) { if (value <= 0) return; diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ResetCommandTreeNode.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ResetCommandTreeNode.java index b1915813..16389ea1 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ResetCommandTreeNode.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ResetCommandTreeNode.java @@ -4,6 +4,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.experience.Profession; import net.Indyuce.mmocore.api.player.attribute.PlayerAttributes; +import net.Indyuce.mmocore.tree.skilltree.SkillTree; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -14,210 +15,250 @@ import io.lumine.mythic.lib.command.api.CommandTreeNode; import io.lumine.mythic.lib.command.api.Parameter; public class ResetCommandTreeNode extends CommandTreeNode { - public ResetCommandTreeNode(CommandTreeNode parent) { - super(parent, "reset"); + public ResetCommandTreeNode(CommandTreeNode parent) { + super(parent, "reset"); - addChild(new ResetLevelsCommandTreeNode(this)); - addChild(new ResetSkillsCommandTreeNode(this)); - addChild(new ResetAllCommandTreeNode(this)); - addChild(new ResetAttributesCommandTreeNode(this)); - addChild(new ResetWaypointsCommandTreeNode(this)); - } + addChild(new ResetLevelsCommandTreeNode(this)); + addChild(new ResetSkillsCommandTreeNode(this)); + addChild(new ResetAllCommandTreeNode(this)); + addChild(new ResetAttributesCommandTreeNode(this)); + addChild(new ResetWaypointsCommandTreeNode(this)); + addChild(new ResetSkillTreesCommandTreeNode(this)); + } - @Override - public CommandResult execute(CommandSender sender, String[] args) { - return CommandResult.THROW_USAGE; - } + @Override + public CommandResult execute(CommandSender sender, String[] args) { + return CommandResult.THROW_USAGE; + } - public static class ResetAllCommandTreeNode extends CommandTreeNode { - public ResetAllCommandTreeNode(CommandTreeNode parent) { - super(parent, "all"); + public static class ResetAllCommandTreeNode extends CommandTreeNode { + public ResetAllCommandTreeNode(CommandTreeNode parent) { + super(parent, "all"); - addParameter(Parameter.PLAYER); - } + addParameter(Parameter.PLAYER); + } - @Override - public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 4) - return CommandResult.THROW_USAGE; + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; - Player player = Bukkit.getPlayer(args[3]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); - return CommandResult.FAILURE; - } + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } - PlayerData data = PlayerData.get(player); - MMOCore.plugin.dataProvider.getDataManager().getDefaultData().apply(data); - data.setExperience(0); - for (Profession profession : MMOCore.plugin.professionManager.getAll()) { - data.getCollectionSkills().setExperience(profession, 0); - data.getCollectionSkills().setLevel(profession, 0); - } - MMOCore.plugin.classManager.getAll().forEach(data::unloadClassInfo); - data.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); - data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill)); - while (data.hasSkillBound(0)) - data.unbindSkill(0); - data.getQuestData().resetFinishedQuests(); - data.getQuestData().start(null); - CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, - ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s data was succesfully reset."); - return CommandResult.SUCCESS; - } - } + PlayerData data = PlayerData.get(player); + MMOCore.plugin.dataProvider.getDataManager().getDefaultData().apply(data); + data.setExperience(0); + for (Profession profession : MMOCore.plugin.professionManager.getAll()) { + data.getCollectionSkills().setExperience(profession, 0); + data.getCollectionSkills().setLevel(profession, 0); + } + MMOCore.plugin.classManager.getAll().forEach(data::unloadClassInfo); + data.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); + data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill)); + data.setSkillTreePoints("global", 0); + for (SkillTree skillTree : data.getProfess().getSkillTrees()) { + data.resetSkillTree(skillTree); + data.setSkillTreePoints(skillTree.getId(), 0); + } - public static class ResetWaypointsCommandTreeNode extends CommandTreeNode { - public ResetWaypointsCommandTreeNode(CommandTreeNode parent) { - super(parent, "waypoints"); + data.resetTimesClaimed(); + while (data.hasSkillBound(0)) + data.unbindSkill(0); + while (data.hasPassiveSkillBound(0)) + data.unbindPassiveSkill(0); + data.getQuestData().resetFinishedQuests(); + data.getQuestData().start(null); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s data was succesfully reset."); + return CommandResult.SUCCESS; + } + } - addParameter(Parameter.PLAYER); - } + public static class ResetWaypointsCommandTreeNode extends CommandTreeNode { + public ResetWaypointsCommandTreeNode(CommandTreeNode parent) { + super(parent, "waypoints"); - @Override - public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 4) - return CommandResult.THROW_USAGE; + addParameter(Parameter.PLAYER); + } - Player player = Bukkit.getPlayer(args[3]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); - return CommandResult.FAILURE; - } + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; - PlayerData data = PlayerData.get(player); - data.getWaypoints().clear(); - return CommandResult.SUCCESS; - } - } + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } - public static class ResetQuestsCommandTreeNode extends CommandTreeNode { - public ResetQuestsCommandTreeNode(CommandTreeNode parent) { - super(parent, "quests"); + PlayerData data = PlayerData.get(player); + data.getWaypoints().clear(); + return CommandResult.SUCCESS; + } + } - addParameter(Parameter.PLAYER); - } + public static class ResetQuestsCommandTreeNode extends CommandTreeNode { + public ResetQuestsCommandTreeNode(CommandTreeNode parent) { + super(parent, "quests"); - @Override - public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 4) - return CommandResult.THROW_USAGE; + addParameter(Parameter.PLAYER); + } - Player player = Bukkit.getPlayer(args[3]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); - return CommandResult.FAILURE; - } + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; - PlayerData data = PlayerData.get(player); - data.getQuestData().resetFinishedQuests(); - data.getQuestData().start(null); - return CommandResult.SUCCESS; - } - } + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } - public static class ResetSkillsCommandTreeNode extends CommandTreeNode { - public ResetSkillsCommandTreeNode(CommandTreeNode parent) { - super(parent, "skills"); + PlayerData data = PlayerData.get(player); + data.getQuestData().resetFinishedQuests(); + data.getQuestData().start(null); + return CommandResult.SUCCESS; + } + } - addParameter(Parameter.PLAYER); - } + public static class ResetSkillsCommandTreeNode extends CommandTreeNode { + public ResetSkillsCommandTreeNode(CommandTreeNode parent) { + super(parent, "skills"); - @Override - public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 4) - return CommandResult.THROW_USAGE; + addParameter(Parameter.PLAYER); + } - Player player = Bukkit.getPlayer(args[3]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); - return CommandResult.FAILURE; - } + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; - PlayerData data = PlayerData.get(player); - data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill)); - while (data.hasSkillBound(0)) - data.unbindSkill(0); - CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, - ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s skill data was succesfully reset."); - return CommandResult.SUCCESS; - } - } + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } - public class ResetAttributesCommandTreeNode extends CommandTreeNode { - public ResetAttributesCommandTreeNode(CommandTreeNode parent) { - super(parent, "attributes"); + PlayerData data = PlayerData.get(player); + data.mapSkillLevels().forEach((skill, level) -> data.resetSkillLevel(skill)); + while (data.hasSkillBound(0)) + data.unbindSkill(0); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s skill data was succesfully reset."); + return CommandResult.SUCCESS; + } + } - addParameter(Parameter.PLAYER); - addParameter(new Parameter("(-reallocate)", (explore, list) -> list.add("-reallocate"))); - } - @Override - public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 4) - return CommandResult.THROW_USAGE; + public static class ResetSkillTreesCommandTreeNode extends CommandTreeNode { + public ResetSkillTreesCommandTreeNode(CommandTreeNode parent) { + super(parent, "skill-trees"); - Player player = Bukkit.getPlayer(args[3]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); - return CommandResult.FAILURE; - } + addParameter(Parameter.PLAYER); + } - PlayerData data = PlayerData.get(player); + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; - /* - * force reallocating of player attribute points - */ - if (args.length > 4 && args[4].equalsIgnoreCase("-reallocate")) { + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } - int points = 0; - for (PlayerAttributes.AttributeInstance ins : data.getAttributes().getInstances()) { - points += ins.getBase(); - ins.setBase(0); - } + PlayerData data = PlayerData.get(player); + for (SkillTree skillTree : data.getProfess().getSkillTrees()) + data.resetSkillTree(skillTree); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s skill-tree data was succesfully reset."); + return CommandResult.SUCCESS; + } + } - data.giveAttributePoints(points); - CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, - ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attribute points spendings were successfully reset."); - return CommandResult.SUCCESS; - } + public class ResetAttributesCommandTreeNode extends CommandTreeNode { + public ResetAttributesCommandTreeNode(CommandTreeNode parent) { + super(parent, "attributes"); - data.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); - CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, - ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attributes were succesfully reset."); - return CommandResult.SUCCESS; - } - } + addParameter(Parameter.PLAYER); + addParameter(new Parameter("(-reallocate)", (explore, list) -> list.add("-reallocate"))); + } - public static class ResetLevelsCommandTreeNode extends CommandTreeNode { - public ResetLevelsCommandTreeNode(CommandTreeNode parent) { - super(parent, "levels"); + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; - addParameter(Parameter.PLAYER); - } + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } - @Override - public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 4) - return CommandResult.THROW_USAGE; + PlayerData data = PlayerData.get(player); - Player player = Bukkit.getPlayer(args[3]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); - return CommandResult.FAILURE; - } + /* + * force reallocating of player attribute points + */ + if (args.length > 4 && args[4].equalsIgnoreCase("-reallocate")) { - PlayerData data = PlayerData.get(player); - data.setLevel(MMOCore.plugin.dataProvider.getDataManager().getDefaultData().getLevel()); - data.setExperience(0); - for (Profession profession : MMOCore.plugin.professionManager.getAll()) { - data.getCollectionSkills().setExperience(profession, 0); - data.getCollectionSkills().setLevel(profession, 0); - } - CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, - ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s levels were succesfully reset."); + int points = 0; + for (PlayerAttributes.AttributeInstance ins : data.getAttributes().getInstances()) { + points += ins.getBase(); + ins.setBase(0); + } - return CommandResult.SUCCESS; - } - } + data.giveAttributePoints(points); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attribute points spendings were successfully reset."); + return CommandResult.SUCCESS; + } + + data.getAttributes().getInstances().forEach(ins -> ins.setBase(0)); + CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s attributes were succesfully reset."); + return CommandResult.SUCCESS; + } + } + + public static class ResetLevelsCommandTreeNode extends CommandTreeNode { + public ResetLevelsCommandTreeNode(CommandTreeNode parent) { + super(parent, "levels"); + + addParameter(Parameter.PLAYER); + } + + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 4) + return CommandResult.THROW_USAGE; + + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } + + PlayerData data = PlayerData.get(player); + data.setLevel(MMOCore.plugin.dataProvider.getDataManager().getDefaultData().getLevel()); + data.setExperience(0); + for (Profession profession : MMOCore.plugin.professionManager.getAll()) { + data.getCollectionSkills().setExperience(profession, 0); + data.getCollectionSkills().setLevel(profession, 0); + profession.getExperienceTable().reset(data, profession); + } + + CommandVerbose.verbose(sender, CommandVerbose.CommandType.RESET, + ChatColor.GOLD + player.getName() + ChatColor.YELLOW + "'s levels were succesfully reset."); + + return CommandResult.SUCCESS; + } + } } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java index 7bd659eb..57a0eed0 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java @@ -184,6 +184,8 @@ public abstract class PlayerDataManager { player.setSkillPoints(skillPoints); player.setAttributePoints(attributePoints); player.setAttributeReallocationPoints(attrReallocPoints); + player.setSkillTreeReallocationPoints(skillTreeReallocPoints); + player.setSkillReallocationPoints(skillReallocPoints); } } }