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 db412801..486955f5 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 @@ -948,14 +948,22 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc stellium = Math.max(0, Math.min(stellium + event.getAmount(), max)); } + @Override + public double getHealth() { + return getPlayer().getHealth(); + } + + @Override public double getMana() { return mana; } + @Override public double getStamina() { return stamina; } + @Override public double getStellium() { return stellium; } 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 76eafa7e..c8c39a40 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 @@ -10,6 +10,7 @@ import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skill.RegisteredSkill; import net.Indyuce.mmocore.skilltree.SkillTreeNode; import net.Indyuce.mmocore.skilltree.tree.SkillTree; +import org.bukkit.attribute.Attribute; import org.bukkit.configuration.ConfigurationSection; import java.util.*; @@ -17,7 +18,7 @@ import java.util.Map.Entry; public class SavedClassInformation { private final int level, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints; - private final double experience; + private final double experience, health, mana, stellium, stamina; private final Map attributeLevels = new HashMap<>(); private final Map skillLevels = new HashMap<>(); private final Map skillTreePoints = new HashMap<>(); @@ -36,6 +37,10 @@ public class SavedClassInformation { attributeReallocationPoints = config.getInt("attribute-realloc-points"); skillReallocationPoints = config.getInt("skill-reallocation-points"); skillTreeReallocationPoints = config.getInt("skill-tree-reallocation-points"); + health = config.getInt("health", 20); + mana = config.getInt("mana", 0); + stamina = config.getInt("stamina", 0); + stellium = config.getInt("stellium", 0); if (config.contains("attribute")) config.getConfigurationSection("attribute").getKeys(false).forEach(key -> attributeLevels.put(key, config.getInt("attribute." + key))); if (config.contains("skill")) @@ -61,6 +66,10 @@ public class SavedClassInformation { attributeReallocationPoints = json.get("attribute-realloc-points").getAsInt(); skillReallocationPoints = json.get("skill-reallocation-points").getAsInt(); skillTreeReallocationPoints = json.get("skill-tree-reallocation-points").getAsInt(); + health = json.has("health") ? json.get("health").getAsDouble() : 20; + mana = json.has("mana") ? json.get("mana").getAsDouble() : 0; + stamina = json.has("stamina") ? json.get("stamina").getAsDouble() : 0; + stellium = json.has("stellium") ? json.get("stellium").getAsDouble() : 0; if (json.has("attribute")) for (Entry entry : json.getAsJsonObject("attribute").entrySet()) attributeLevels.put(entry.getKey(), entry.getValue().getAsInt()); @@ -88,7 +97,10 @@ public class SavedClassInformation { this.skillTreeReallocationPoints = data.getSkillTreeReallocationPoints(); this.skillReallocationPoints = data.getSkillReallocationPoints(); this.experience = data.getExperience(); - + this.health = data.getHealth(); + this.mana = data.getMana(); + 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)); @@ -163,6 +175,22 @@ public class SavedClassInformation { return skillTreePoints.get(skillTreeId); } + public double getHealth() { + return health; + } + + public double getMana() { + return mana; + } + + public double getStellium() { + return stellium; + } + + public double getStamina() { + return stamina; + } + public Set getAttributeKeys() { return attributeLevels.keySet(); } @@ -265,6 +293,11 @@ public class SavedClassInformation { player.setClass(profess); player.unloadClassInfo(profess); + //This needs to be done at the end to make sure the MAX_HEALTH,MAX_MANA,MAX_STELLIUM... stats are loaded. + player.getPlayer().setHealth(Math.min(health,player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue())); + player.setMana(mana); + player.setStellium(stellium); + player.setStamina(stamina); // Updates level on exp bar player.refreshVanillaExp(); } 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 5f81e45c..f23dafb9 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 @@ -89,6 +89,10 @@ public class MySQLPlayerDataManager extends PlayerDataManager { classinfo.addProperty("attribute-realloc-points", info.getAttributeReallocationPoints()); classinfo.addProperty("skill-reallocation-points", info.getSkillReallocationPoints()); classinfo.addProperty("skill-tree-reallocation-points", info.getSkillTreeReallocationPoints()); + classinfo.addProperty("health", info.getHealth()); + classinfo.addProperty("mana", info.getMana()); + classinfo.addProperty("stamina", info.getStamina()); + classinfo.addProperty("stellium", info.getStellium()); JsonObject skillinfo = new JsonObject(); for (String skill : info.getSkillKeys()) diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java index eabe5e83..1bff27f8 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java @@ -177,6 +177,10 @@ public class YAMLPlayerDataManager extends PlayerDataManager { config.set("class-info." + key + ".attribute-realloc-points", info.getAttributeReallocationPoints()); config.set("class-info." + key + ".skill-tree-reallocation-points", info.getSkillTreeReallocationPoints()); config.set("class-info." + key + ".skill-reallocation-points", info.getSkillReallocationPoints()); + config.set("class-info." + key + ".health", info.getHealth()); + config.set("class-info." + key + ".mana", info.getMana()); + config.set("class-info." + key + ".stamina", info.getStamina()); + config.set("class-info." + key + ".stellium", info.getStellium()); info.getSkillKeys().forEach(skill -> config.set("class-info." + key + ".skill." + skill, info.getSkillLevel(skill))); info.getAttributeKeys().forEach(attribute -> config.set("class-info." + key + ".attribute." + attribute, info.getAttributeLevel(attribute))); info.getNodeKeys().forEach(node -> config.set("class-info." + key + ".node-levels." + node, info.getNodeLevel(node))); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/ClassDataContainer.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/ClassDataContainer.java index 9ac8f2b1..90e8367d 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/ClassDataContainer.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/ClassDataContainer.java @@ -29,6 +29,14 @@ public interface ClassDataContainer { int getSkillTreeReallocationPoints(); + double getHealth(); + + double getMana(); + + double getStamina(); + + double getStellium(); + Map mapAttributeLevels(); Map mapSkillLevels(); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/DefaultPlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/DefaultPlayerData.java index f6b16547..1a4dc244 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/DefaultPlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/player/DefaultPlayerData.java @@ -4,6 +4,7 @@ import io.lumine.mythic.lib.player.skill.PassiveSkill; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skilltree.SkillTreeNode; +import org.bukkit.attribute.Attribute; import org.bukkit.configuration.ConfigurationSection; import java.util.ArrayList; @@ -13,8 +14,8 @@ import java.util.Map; public class DefaultPlayerData implements ClassDataContainer { private final int level, classPoints, skillPoints, attributePoints, attrReallocPoints, skillReallocPoints, skillTreeReallocPoints; - - public static final DefaultPlayerData DEFAULT = new DefaultPlayerData(1, 0, 0, 0, 0, 0, 0); + private final double health, mana, stamina, stellium; + public static final DefaultPlayerData DEFAULT = new DefaultPlayerData(1, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0); public DefaultPlayerData(ConfigurationSection config) { level = config.getInt("level", 1); @@ -24,9 +25,13 @@ public class DefaultPlayerData implements ClassDataContainer { attrReallocPoints = config.getInt("attribute-realloc-points"); skillReallocPoints = config.getInt("skill-realloc-points", 0); skillTreeReallocPoints = config.getInt("skill-tree-realloc-points", 0); + health = config.getDouble("health"); + mana = config.getDouble("mana"); + stellium = config.getDouble("stellium"); + stamina = config.getDouble("stamina"); } - public DefaultPlayerData(int level, int classPoints, int skillPoints, int attributePoints, int attrReallocPoints, int skillReallocPoints, int skillTreeReallocPoints) { + public DefaultPlayerData(int level, int classPoints, int skillPoints, int attributePoints, int attrReallocPoints, int skillReallocPoints, int skillTreeReallocPoints, double health, double mana, double stamina, double stellium) { this.level = level; this.classPoints = classPoints; this.skillPoints = skillPoints; @@ -34,6 +39,10 @@ public class DefaultPlayerData implements ClassDataContainer { this.attrReallocPoints = attrReallocPoints; this.skillReallocPoints = skillReallocPoints; this.skillTreeReallocPoints = skillTreeReallocPoints; + this.health = health; + this.mana = mana; + this.stamina = stamina; + this.stellium = stellium; } public int getLevel() { @@ -74,6 +83,26 @@ public class DefaultPlayerData implements ClassDataContainer { return skillTreeReallocPoints; } + @Override + public double getHealth() { + return health; + } + + @Override + public double getMana() { + return mana; + } + + @Override + public double getStamina() { + return stamina; + } + + @Override + public double getStellium() { + return stellium; + } + @Override public Map mapSkillLevels() { return new HashMap<>(); @@ -117,5 +146,9 @@ public class DefaultPlayerData implements ClassDataContainer { player.setAttributeReallocationPoints(attrReallocPoints); player.setSkillTreeReallocationPoints(skillTreeReallocPoints); player.setSkillReallocationPoints(skillReallocPoints); + player.getPlayer().setHealth(Math.min(health,player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue())); + player.setMana(mana); + player.setStamina(stamina); + player.setStellium(stellium); } } diff --git a/MMOCore-Dist/src/main/resources/config.yml b/MMOCore-Dist/src/main/resources/config.yml index 984f3cc2..d154f80b 100644 --- a/MMOCore-Dist/src/main/resources/config.yml +++ b/MMOCore-Dist/src/main/resources/config.yml @@ -30,6 +30,11 @@ default-playerdata: skill-realloc-points: 0 attribute-points: 0 attribute-realloc-points: 0 + health: 20 + mana: 0 + stellium: 0 + stamina: 0 + # The list of all conditions which must be met for the # BLOCK REGEN and BLOCK RESTRICTIONS to apply. Set to