forked from Upstream/mmocore
Merge branch 'Bug_Fix' into 'master'
Bug fixing See merge request phoenix-dvpmt/mmocore!19
This commit is contained in:
commit
d02418ea12
@ -291,6 +291,8 @@ public class MMOCore extends JavaPlugin {
|
|||||||
for (PlayerData data : PlayerData.getAll())
|
for (PlayerData data : PlayerData.getAll())
|
||||||
if (data.isFullyLoaded()) {
|
if (data.isFullyLoaded()) {
|
||||||
data.close();
|
data.close();
|
||||||
|
//Saves player health before saveData as the player will be considered offline into it if it is async.
|
||||||
|
data.setHealth(data.getPlayer().getHealth());
|
||||||
dataProvider.getDataManager().saveData(data, true);
|
dataProvider.getDataManager().saveData(data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +82,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
private int level, classPoints, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints;
|
private int level, classPoints, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints;
|
||||||
private double experience;
|
private double experience;
|
||||||
private double mana, stamina, stellium;
|
private double mana, stamina, stellium;
|
||||||
|
/**
|
||||||
|
* Health is stored in playerData because when saving the playerData we can't access the player health anymore as the payer is Offline.
|
||||||
|
*/
|
||||||
|
private double health;
|
||||||
private Guild guild;
|
private Guild guild;
|
||||||
private SkillCastingHandler skillCasting;
|
private SkillCastingHandler skillCasting;
|
||||||
private final PlayerQuests questData;
|
private final PlayerQuests questData;
|
||||||
@ -183,11 +187,11 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
skillTree.setupNodeStates(this);
|
skillTree.setupNodeStates(this);
|
||||||
|
|
||||||
// Stat triggers setup
|
// Stat triggers setup
|
||||||
if (!areStatsLoaded()) {
|
|
||||||
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
|
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
|
||||||
for (SkillTreeNode node : skillTree.getNodes())
|
for (SkillTreeNode node : skillTree.getNodes())
|
||||||
node.getExperienceTable().claimStatTriggers(this, node);
|
node.getExperienceTable().claimStatTriggers(this, node);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPointSpent(SkillTree skillTree) {
|
public int getPointSpent(SkillTree skillTree) {
|
||||||
@ -232,15 +236,18 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
return nodeLevelsString.entrySet();
|
return nodeLevelsString.entrySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean areStatsLoaded() {
|
public void resetTriggerStats() {
|
||||||
// Used to see if the triggers need to be applied
|
for (StatInstance instance : mmoData.getStatMap().getInstances()) {
|
||||||
for (StatInstance instance : mmoData.getStatMap().getInstances())
|
Iterator<StatModifier> iter = instance.getModifiers().iterator();
|
||||||
for (StatModifier modifier : instance.getModifiers())
|
while (iter.hasNext()) {
|
||||||
|
StatModifier modifier = iter.next();
|
||||||
if (modifier.getKey().startsWith(StatTrigger.TRIGGER_PREFIX))
|
if (modifier.getKey().startsWith(StatTrigger.TRIGGER_PREFIX))
|
||||||
return true;
|
iter.remove();
|
||||||
return false;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Map<SkillTreeNode, Integer> getNodeLevels() {
|
public Map<SkillTreeNode, Integer> getNodeLevels() {
|
||||||
return new HashMap<>(nodeLevels);
|
return new HashMap<>(nodeLevels);
|
||||||
}
|
}
|
||||||
@ -748,9 +755,9 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
final double r = Math.sin((double) t / warpTime * Math.PI);
|
final double r = Math.sin((double) t / warpTime * Math.PI);
|
||||||
for (double j = 0; j < Math.PI * 2; j += Math.PI / 4)
|
for (double j = 0; j < Math.PI * 2; j += Math.PI / 4)
|
||||||
getPlayer().getLocation().getWorld().spawnParticle(Particle.REDSTONE, getPlayer().getLocation().add(
|
getPlayer().getLocation().getWorld().spawnParticle(Particle.REDSTONE, getPlayer().getLocation().add(
|
||||||
Math.cos((double) 5 * t / warpTime + j) * r,
|
Math.cos((double) 5 * t / warpTime + j) * r,
|
||||||
(double) 2 * t / warpTime,
|
(double) 2 * t / warpTime,
|
||||||
Math.sin((double) 5 * t / warpTime + j) * r),
|
Math.sin((double) 5 * t / warpTime + j) * r),
|
||||||
1, new Particle.DustOptions(Color.PURPLE, 1.25f));
|
1, new Particle.DustOptions(Color.PURPLE, 1.25f));
|
||||||
}
|
}
|
||||||
}.runTaskTimer(MMOCore.plugin, 0, 1);
|
}.runTaskTimer(MMOCore.plugin, 0, 1);
|
||||||
@ -936,18 +943,27 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
stellium = Math.max(0, Math.min(stellium + event.getAmount(), max));
|
stellium = Math.max(0, Math.min(stellium + event.getAmount(), max));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public double getMana() {
|
public double getMana() {
|
||||||
return mana;
|
return mana;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getHealth() {
|
||||||
|
return health;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public double getStamina() {
|
public double getStamina() {
|
||||||
return stamina;
|
return stamina;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public double getStellium() {
|
public double getStellium() {
|
||||||
return stellium;
|
return stellium;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public PlayerStats getStats() {
|
public PlayerStats getStats() {
|
||||||
return playerStats;
|
return playerStats;
|
||||||
}
|
}
|
||||||
@ -960,6 +976,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
mana = Math.max(0, Math.min(amount, getStats().getStat("MAX_MANA")));
|
mana = Math.max(0, Math.min(amount, getStats().getStat("MAX_MANA")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setHealth(double amount) {
|
||||||
|
this.health = amount;
|
||||||
|
}
|
||||||
|
|
||||||
public void setStamina(double amount) {
|
public void setStamina(double amount) {
|
||||||
stamina = Math.max(0, Math.min(amount, getStats().getStat("MAX_STAMINA")));
|
stamina = Math.max(0, Math.min(amount, getStats().getStat("MAX_STAMINA")));
|
||||||
}
|
}
|
||||||
@ -1199,7 +1219,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
* checks if they could potentially upgrade to one of these
|
* checks if they could potentially upgrade to one of these
|
||||||
*
|
*
|
||||||
* @return If the player can change its current class to
|
* @return If the player can change its current class to
|
||||||
* a subclass
|
* a subclass
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public boolean canChooseSubclass() {
|
public boolean canChooseSubclass() {
|
||||||
|
@ -10,6 +10,7 @@ import net.Indyuce.mmocore.skill.ClassSkill;
|
|||||||
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
import net.Indyuce.mmocore.skill.RegisteredSkill;
|
||||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||||
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -17,7 +18,7 @@ import java.util.Map.Entry;
|
|||||||
|
|
||||||
public class SavedClassInformation {
|
public class SavedClassInformation {
|
||||||
private final int level, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints;
|
private final int level, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints;
|
||||||
private final double experience;
|
private final double experience, health, mana, stellium, stamina;
|
||||||
private final Map<String, Integer> attributeLevels = new HashMap<>();
|
private final Map<String, Integer> attributeLevels = new HashMap<>();
|
||||||
private final Map<String, Integer> skillLevels = new HashMap<>();
|
private final Map<String, Integer> skillLevels = new HashMap<>();
|
||||||
private final Map<String, Integer> skillTreePoints = new HashMap<>();
|
private final Map<String, Integer> skillTreePoints = new HashMap<>();
|
||||||
@ -36,6 +37,10 @@ public class SavedClassInformation {
|
|||||||
attributeReallocationPoints = config.getInt("attribute-realloc-points");
|
attributeReallocationPoints = config.getInt("attribute-realloc-points");
|
||||||
skillReallocationPoints = config.getInt("skill-reallocation-points");
|
skillReallocationPoints = config.getInt("skill-reallocation-points");
|
||||||
skillTreeReallocationPoints = config.getInt("skill-tree-reallocation-points");
|
skillTreeReallocationPoints = config.getInt("skill-tree-reallocation-points");
|
||||||
|
health = config.getDouble("health", 20);
|
||||||
|
mana = config.getDouble("mana", 0);
|
||||||
|
stamina = config.getDouble("stamina", 0);
|
||||||
|
stellium = config.getDouble("stellium", 0);
|
||||||
if (config.contains("attribute"))
|
if (config.contains("attribute"))
|
||||||
config.getConfigurationSection("attribute").getKeys(false).forEach(key -> attributeLevels.put(key, config.getInt("attribute." + key)));
|
config.getConfigurationSection("attribute").getKeys(false).forEach(key -> attributeLevels.put(key, config.getInt("attribute." + key)));
|
||||||
if (config.contains("skill"))
|
if (config.contains("skill"))
|
||||||
@ -61,6 +66,11 @@ public class SavedClassInformation {
|
|||||||
attributeReallocationPoints = json.get("attribute-realloc-points").getAsInt();
|
attributeReallocationPoints = json.get("attribute-realloc-points").getAsInt();
|
||||||
skillReallocationPoints = json.get("skill-reallocation-points").getAsInt();
|
skillReallocationPoints = json.get("skill-reallocation-points").getAsInt();
|
||||||
skillTreeReallocationPoints = json.get("skill-tree-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"))
|
if (json.has("attribute"))
|
||||||
for (Entry<String, JsonElement> entry : json.getAsJsonObject("attribute").entrySet())
|
for (Entry<String, JsonElement> entry : json.getAsJsonObject("attribute").entrySet())
|
||||||
attributeLevels.put(entry.getKey(), entry.getValue().getAsInt());
|
attributeLevels.put(entry.getKey(), entry.getValue().getAsInt());
|
||||||
@ -88,6 +98,10 @@ public class SavedClassInformation {
|
|||||||
this.skillTreeReallocationPoints = data.getSkillTreeReallocationPoints();
|
this.skillTreeReallocationPoints = data.getSkillTreeReallocationPoints();
|
||||||
this.skillReallocationPoints = data.getSkillReallocationPoints();
|
this.skillReallocationPoints = data.getSkillReallocationPoints();
|
||||||
this.experience = data.getExperience();
|
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.mapAttributeLevels().forEach((key, val) -> this.attributeLevels.put(key, val));
|
||||||
data.mapSkillLevels().forEach((key, val) -> skillLevels.put(key, val));
|
data.mapSkillLevels().forEach((key, val) -> skillLevels.put(key, val));
|
||||||
@ -119,6 +133,22 @@ public class SavedClassInformation {
|
|||||||
return attributeReallocationPoints;
|
return attributeReallocationPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getHealth() {
|
||||||
|
return health;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMana() {
|
||||||
|
return mana;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getStellium() {
|
||||||
|
return stellium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getStamina() {
|
||||||
|
return stamina;
|
||||||
|
}
|
||||||
|
|
||||||
public Set<String> getSkillKeys() {
|
public Set<String> getSkillKeys() {
|
||||||
return skillLevels.keySet();
|
return skillLevels.keySet();
|
||||||
}
|
}
|
||||||
@ -265,6 +295,12 @@ public class SavedClassInformation {
|
|||||||
player.setClass(profess);
|
player.setClass(profess);
|
||||||
player.unloadClassInfo(profess);
|
player.unloadClassInfo(profess);
|
||||||
|
|
||||||
|
|
||||||
|
//These should be loaded after to make sure that the MAX_MANA, MAX_STAMINA & MAX_STELLIUM stats are already loaded.
|
||||||
|
player.setMana(mana);
|
||||||
|
player.setStellium(stellium);
|
||||||
|
player.setStamina(stamina);
|
||||||
|
player.getPlayer().setHealth(Math.min(health,player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()));
|
||||||
// Updates level on exp bar
|
// Updates level on exp bar
|
||||||
player.refreshVanillaExp();
|
player.refreshVanillaExp();
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,10 @@ public class PartyCommand extends RegisteredCommand {
|
|||||||
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
sender.sendMessage(ChatColor.RED + "This command is for players only.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if(!(MMOCore.plugin.partyModule instanceof MMOCorePartyModule)){
|
||||||
|
sender.sendMessage(ChatColor.RED+"You can't use MMOCore party system as you delegated the party system to another plugin.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
PlayerData data = PlayerData.get((OfflinePlayer) sender);
|
PlayerData data = PlayerData.get((OfflinePlayer) sender);
|
||||||
MMOCommandEvent event = new MMOCommandEvent(data, "party");
|
MMOCommandEvent event = new MMOCommandEvent(data, "party");
|
||||||
|
@ -101,15 +101,12 @@ public class PlayerProfessions {
|
|||||||
for (Entry<String, JsonElement> entry : obj.getAsJsonObject("timesClaimed").entrySet())
|
for (Entry<String, JsonElement> entry : obj.getAsJsonObject("timesClaimed").entrySet())
|
||||||
playerData.getItemClaims().put("profession." + entry.getKey(), entry.getValue().getAsInt());
|
playerData.getItemClaims().put("profession." + entry.getKey(), entry.getValue().getAsInt());
|
||||||
|
|
||||||
if (!playerData.areStatsLoaded()) {
|
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
|
||||||
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
|
if (profession.hasExperienceTable())
|
||||||
if (profession.hasExperienceTable())
|
profession.getExperienceTable().claimStatTriggers(playerData, profession);
|
||||||
profession.getExperienceTable().claimStatTriggers(playerData, profession);
|
|
||||||
}
|
|
||||||
if (playerData.getProfess().hasExperienceTable())
|
|
||||||
playerData.getProfess().getExperienceTable().claimStatTriggers(playerData, playerData.getProfess());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (playerData.getProfess().hasExperienceTable())
|
||||||
|
playerData.getProfess().getExperienceTable().claimStatTriggers(playerData, playerData.getProfess());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,9 @@ import net.Indyuce.mmocore.skill.ClassSkill;
|
|||||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
@ -37,11 +40,8 @@ public class MMOCoreDataSynchronizer extends DataSynchronizer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadData(ResultSet result) throws SQLException {
|
public void loadData(ResultSet result) throws SQLException {
|
||||||
|
//Reset stats linked to triggers
|
||||||
// Initialize custom resources
|
data.resetTriggerStats();
|
||||||
data.setMana(result.getFloat("mana"));
|
|
||||||
data.setStellium(result.getFloat("stellium"));
|
|
||||||
data.setStamina(result.getFloat("stamina"));
|
|
||||||
|
|
||||||
data.setClassPoints(result.getInt("class_points"));
|
data.setClassPoints(result.getInt("class_points"));
|
||||||
data.setSkillPoints(result.getInt("skill_points"));
|
data.setSkillPoints(result.getInt("skill_points"));
|
||||||
@ -118,6 +118,16 @@ public class MMOCoreDataSynchronizer extends DataSynchronizer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//These should be loaded after to make sure that the MAX_MANA, MAX_STAMINA & MAX_STELLIUM stats are already loaded.
|
||||||
|
data.setMana(result.getDouble("mana"));
|
||||||
|
data.setStamina(result.getDouble("stamina"));
|
||||||
|
data.setStellium(result.getDouble("stamina"));
|
||||||
|
double health = result.getDouble("health");
|
||||||
|
health = health == 0 ? 20 : health;
|
||||||
|
health = Math.min(health, data.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
|
||||||
|
data.getPlayer().setHealth(health);
|
||||||
|
|
||||||
|
|
||||||
UtilityMethods.debug(MMOCore.plugin, "SQL", String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));
|
UtilityMethods.debug(MMOCore.plugin, "SQL", String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));
|
||||||
data.setFullyLoaded();
|
data.setFullyLoaded();
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,10 @@ public class MySQLDataProvider extends MMODataSource implements DataProvider {
|
|||||||
"skill_tree_reallocation_points", "INT(11)",
|
"skill_tree_reallocation_points", "INT(11)",
|
||||||
"skill_tree_points", "LONGTEXT",
|
"skill_tree_points", "LONGTEXT",
|
||||||
"skill_tree_levels", "LONGTEXT",
|
"skill_tree_levels", "LONGTEXT",
|
||||||
"mana","FLOAT",
|
"health", "FLOAT",
|
||||||
"stamina","FLOAT",
|
"mana", "FLOAT",
|
||||||
"stellium","FLOAT"};
|
"stamina", "FLOAT",
|
||||||
|
"stellium", "FLOAT"};
|
||||||
|
|
||||||
public MySQLDataProvider(FileConfiguration config) {
|
public MySQLDataProvider(FileConfiguration config) {
|
||||||
super(MMOCore.plugin);
|
super(MMOCore.plugin);
|
||||||
@ -56,6 +57,10 @@ public class MySQLDataProvider extends MMODataSource implements DataProvider {
|
|||||||
"friends LONGTEXT," +
|
"friends LONGTEXT," +
|
||||||
"skills LONGTEXT," +
|
"skills LONGTEXT," +
|
||||||
"bound_skills LONGTEXT," +
|
"bound_skills LONGTEXT," +
|
||||||
|
"health FLOAT," +
|
||||||
|
"mana FLOAT," +
|
||||||
|
"stamina FLOAT," +
|
||||||
|
"stellium FLOAT," +
|
||||||
"class_info LONGTEXT," +
|
"class_info LONGTEXT," +
|
||||||
"is_saved TINYINT," +
|
"is_saved TINYINT," +
|
||||||
"PRIMARY KEY (uuid));");
|
"PRIMARY KEY (uuid));");
|
||||||
|
@ -44,6 +44,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
updater.addData("attribute_realloc_points", data.getAttributeReallocationPoints());
|
updater.addData("attribute_realloc_points", data.getAttributeReallocationPoints());
|
||||||
updater.addJSONArray("waypoints", data.getWaypoints());
|
updater.addJSONArray("waypoints", data.getWaypoints());
|
||||||
updater.addData("skill_tree_reallocation_points", data.getSkillTreeReallocationPoints());
|
updater.addData("skill_tree_reallocation_points", data.getSkillTreeReallocationPoints());
|
||||||
|
updater.addData("health",data.getHealth());
|
||||||
updater.addData("mana", data.getMana());
|
updater.addData("mana", data.getMana());
|
||||||
updater.addData("stellium", data.getStellium());
|
updater.addData("stellium", data.getStellium());
|
||||||
updater.addData("stamina", data.getStamina());
|
updater.addData("stamina", data.getStamina());
|
||||||
|
@ -12,6 +12,7 @@ import net.Indyuce.mmocore.manager.data.PlayerDataManager;
|
|||||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -33,6 +34,9 @@ public class YAMLPlayerDataManager extends PlayerDataManager {
|
|||||||
public void loadData(PlayerData data) {
|
public void loadData(PlayerData data) {
|
||||||
FileConfiguration config = new ConfigFile(data.getUniqueId()).getConfig();
|
FileConfiguration config = new ConfigFile(data.getUniqueId()).getConfig();
|
||||||
|
|
||||||
|
//Reset stats linked to triggers.
|
||||||
|
data.resetTriggerStats();
|
||||||
|
|
||||||
data.setClassPoints(config.getInt("class-points", getDefaultData().getClassPoints()));
|
data.setClassPoints(config.getInt("class-points", getDefaultData().getClassPoints()));
|
||||||
data.setSkillPoints(config.getInt("skill-points", getDefaultData().getSkillPoints()));
|
data.setSkillPoints(config.getInt("skill-points", getDefaultData().getSkillPoints()));
|
||||||
data.setSkillReallocationPoints(config.getInt("skill-reallocation-points", getDefaultData().getSkillReallocationPoints()));
|
data.setSkillReallocationPoints(config.getInt("skill-reallocation-points", getDefaultData().getSkillReallocationPoints()));
|
||||||
@ -117,7 +121,9 @@ public class YAMLPlayerDataManager extends PlayerDataManager {
|
|||||||
data.setMana(config.contains("mana") ? config.getDouble("mana") : data.getStats().getStat("MAX_MANA"));
|
data.setMana(config.contains("mana") ? config.getDouble("mana") : data.getStats().getStat("MAX_MANA"));
|
||||||
data.setStamina(config.contains("stamina") ? config.getDouble("stamina") : data.getStats().getStat("MAX_STAMINA"));
|
data.setStamina(config.contains("stamina") ? config.getDouble("stamina") : data.getStats().getStat("MAX_STAMINA"));
|
||||||
data.setStellium(config.contains("stellium") ? config.getDouble("stellium") : data.getStats().getStat("MAX_STELLIUM"));
|
data.setStellium(config.contains("stellium") ? config.getDouble("stellium") : data.getStats().getStat("MAX_STELLIUM"));
|
||||||
|
double health=config.contains("health") ? config.getDouble("health") : data.getStats().getStat("MAX_HEALTH");
|
||||||
|
health=Math.min(health,data.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
|
||||||
|
data.getPlayer().setHealth(health);
|
||||||
data.setFullyLoaded();
|
data.setFullyLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +148,7 @@ public class YAMLPlayerDataManager extends PlayerDataManager {
|
|||||||
data.mapSkillTreePoints().forEach((key1, value) -> config.set("skill-tree-points." + key1, value));
|
data.mapSkillTreePoints().forEach((key1, value) -> config.set("skill-tree-points." + key1, value));
|
||||||
config.set("skill-tree-reallocation-points", data.getSkillTreeReallocationPoints());
|
config.set("skill-tree-reallocation-points", data.getSkillTreeReallocationPoints());
|
||||||
config.set("skill", null);
|
config.set("skill", null);
|
||||||
|
config.set("health",data.getHealth());
|
||||||
config.set("mana", data.getMana());
|
config.set("mana", data.getMana());
|
||||||
config.set("stellium", data.getStellium());
|
config.set("stellium", data.getStellium());
|
||||||
config.set("stamina", data.getStamina());
|
config.set("stamina", data.getStamina());
|
||||||
|
@ -29,6 +29,14 @@ public interface ClassDataContainer {
|
|||||||
|
|
||||||
int getSkillTreeReallocationPoints();
|
int getSkillTreeReallocationPoints();
|
||||||
|
|
||||||
|
double getHealth();
|
||||||
|
|
||||||
|
double getMana();
|
||||||
|
|
||||||
|
double getStamina();
|
||||||
|
|
||||||
|
double getStellium();
|
||||||
|
|
||||||
Map<String, Integer> mapAttributeLevels();
|
Map<String, Integer> mapAttributeLevels();
|
||||||
|
|
||||||
Map<String, Integer> mapSkillLevels();
|
Map<String, Integer> mapSkillLevels();
|
||||||
|
@ -13,8 +13,8 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class DefaultPlayerData implements ClassDataContainer {
|
public class DefaultPlayerData implements ClassDataContainer {
|
||||||
private final int level, classPoints, skillPoints, attributePoints, attrReallocPoints, skillReallocPoints, skillTreeReallocPoints;
|
private final int level, classPoints, skillPoints, attributePoints, attrReallocPoints, skillReallocPoints, skillTreeReallocPoints;
|
||||||
|
private final double health, mana, stamina, stellium;
|
||||||
public static final DefaultPlayerData DEFAULT = new DefaultPlayerData(1, 0, 0, 0, 0, 0, 0);
|
public static final DefaultPlayerData DEFAULT = new DefaultPlayerData(1, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0);
|
||||||
|
|
||||||
public DefaultPlayerData(ConfigurationSection config) {
|
public DefaultPlayerData(ConfigurationSection config) {
|
||||||
level = config.getInt("level", 1);
|
level = config.getInt("level", 1);
|
||||||
@ -24,9 +24,13 @@ public class DefaultPlayerData implements ClassDataContainer {
|
|||||||
attrReallocPoints = config.getInt("attribute-realloc-points");
|
attrReallocPoints = config.getInt("attribute-realloc-points");
|
||||||
skillReallocPoints = config.getInt("skill-realloc-points", 0);
|
skillReallocPoints = config.getInt("skill-realloc-points", 0);
|
||||||
skillTreeReallocPoints = config.getInt("skill-tree-realloc-points", 0);
|
skillTreeReallocPoints = config.getInt("skill-tree-realloc-points", 0);
|
||||||
|
health=config.getDouble("health",20);
|
||||||
|
mana=config.getDouble("mana",20);
|
||||||
|
stamina=config.getDouble("stamina",20);
|
||||||
|
stellium=config.getDouble("stellium",20);
|
||||||
}
|
}
|
||||||
|
|
||||||
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.level = level;
|
||||||
this.classPoints = classPoints;
|
this.classPoints = classPoints;
|
||||||
this.skillPoints = skillPoints;
|
this.skillPoints = skillPoints;
|
||||||
@ -34,6 +38,10 @@ public class DefaultPlayerData implements ClassDataContainer {
|
|||||||
this.attrReallocPoints = attrReallocPoints;
|
this.attrReallocPoints = attrReallocPoints;
|
||||||
this.skillReallocPoints = skillReallocPoints;
|
this.skillReallocPoints = skillReallocPoints;
|
||||||
this.skillTreeReallocPoints = skillTreeReallocPoints;
|
this.skillTreeReallocPoints = skillTreeReallocPoints;
|
||||||
|
this.health = health;
|
||||||
|
this.mana = mana;
|
||||||
|
this.stamina = stamina;
|
||||||
|
this.stellium = stellium;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLevel() {
|
public int getLevel() {
|
||||||
@ -45,6 +53,26 @@ public class DefaultPlayerData implements ClassDataContainer {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Override
|
||||||
public int getSkillPoints() {
|
public int getSkillPoints() {
|
||||||
return skillPoints;
|
return skillPoints;
|
||||||
|
@ -73,6 +73,10 @@ public class PlayerListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void saveDataOnQuit(PlayerQuitEvent event) {
|
public void saveDataOnQuit(PlayerQuitEvent event) {
|
||||||
PlayerData playerData = PlayerData.get(event.getPlayer());
|
PlayerData playerData = PlayerData.get(event.getPlayer());
|
||||||
|
/**
|
||||||
|
* We save player health as it won't be accessible anymore when saving the player data (player will be offline).
|
||||||
|
*/
|
||||||
|
playerData.setHealth(event.getPlayer().getHealth());
|
||||||
MMOCore.plugin.dataProvider.getDataManager().unregisterSafe(playerData);
|
MMOCore.plugin.dataProvider.getDataManager().unregisterSafe(playerData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user