mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-11-18 06:24:17 +01:00
Player data load refactor
This commit is contained in:
parent
bf73ec42f0
commit
088c795ede
@ -1,13 +1,16 @@
|
||||
package net.Indyuce.mmocore.manager.data;
|
||||
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.api.player.MMOPlayerData;
|
||||
import io.lumine.mythic.lib.data.SynchronizedDataManager;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.comp.profile.MMOCoreProfileDataModule;
|
||||
import net.Indyuce.mmocore.manager.data.yaml.YAMLPlayerDataHandler;
|
||||
import net.Indyuce.mmocore.player.DefaultPlayerData;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlayerDataManager extends SynchronizedDataManager<PlayerData, OfflinePlayerData> {
|
||||
private DefaultPlayerData defaultData = DefaultPlayerData.DEFAULT;
|
||||
@ -30,6 +33,12 @@ public class PlayerDataManager extends SynchronizedDataManager<PlayerData, Offli
|
||||
return defaultData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadEmptyPlayerData(@NotNull PlayerData playerData) {
|
||||
MMOCore.plugin.playerDataManager.getDefaultData().apply(playerData, PlayerLevelChangeEvent.Reason.CHOOSE_PROFILE);
|
||||
UtilityMethods.debug(MMOCore.plugin, "Data", "Loaded default data for '" + playerData.getEffectiveId() + "'");
|
||||
}
|
||||
|
||||
public void loadDefaultData(ConfigurationSection config) {
|
||||
defaultData = new DefaultPlayerData(config);
|
||||
}
|
||||
|
||||
@ -1,140 +0,0 @@
|
||||
package net.Indyuce.mmocore.manager.data.sql;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.data.sql.SQLDataSynchronizer;
|
||||
import io.lumine.mythic.lib.gson.JsonArray;
|
||||
import io.lumine.mythic.lib.gson.JsonElement;
|
||||
import io.lumine.mythic.lib.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
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.api.util.MMOCoreUtils;
|
||||
import net.Indyuce.mmocore.guild.provided.Guild;
|
||||
import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class MMOCoreDataSynchronizer extends SQLDataSynchronizer<PlayerData> {
|
||||
public MMOCoreDataSynchronizer(SQLDataHandler handler, PlayerData data) {
|
||||
super("mmocore_playerdata", "uuid", handler.getDataSource(), data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadData(ResultSet result) throws SQLException {
|
||||
|
||||
// Reset stats linked to triggers
|
||||
getData().resetTriggerStats();
|
||||
|
||||
getData().setClassPoints(result.getInt("class_points"));
|
||||
getData().setSkillPoints(result.getInt("skill_points"));
|
||||
getData().setSkillReallocationPoints(result.getInt("skill_reallocation_points"));
|
||||
getData().setSkillTreeReallocationPoints(result.getInt("skill_tree_reallocation_points"));
|
||||
getData().setAttributePoints(result.getInt("attribute_points"));
|
||||
getData().setAttributeReallocationPoints(result.getInt("attribute_realloc_points"));
|
||||
getData().setLevel(result.getInt("level"), PlayerLevelChangeEvent.Reason.CHOOSE_PROFILE);
|
||||
getData().setExperience(result.getDouble("experience"));
|
||||
|
||||
if (!isEmpty(result.getString("class")))
|
||||
getData().setClass(MMOCore.plugin.classManager.get(result.getString("class")));
|
||||
|
||||
if (!isEmpty(result.getString("times_claimed"))) {
|
||||
JsonObject json = MythicLib.plugin.getGson().fromJson(result.getString("times_claimed"), JsonObject.class);
|
||||
json.entrySet().forEach(entry -> getData().getItemClaims().put(entry.getKey(), entry.getValue().getAsInt()));
|
||||
}
|
||||
if (!isEmpty(result.getString("skill_tree_points"))) {
|
||||
JsonObject json = MythicLib.plugin.getGson().fromJson(result.getString("skill_tree_points"), JsonObject.class);
|
||||
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) {
|
||||
getData().setSkillTreePoints(skillTree.getId(), json.has(skillTree.getId()) ? json.get(skillTree.getId()).getAsInt() : 0);
|
||||
}
|
||||
getData().setSkillTreePoints("global", json.has("global") ? json.get("global").getAsInt() : 0);
|
||||
}
|
||||
|
||||
if (!isEmpty(result.getString("skill_tree_levels"))) {
|
||||
JsonObject json = MythicLib.plugin.getGson().fromJson(result.getString("skill_tree_levels"), JsonObject.class);
|
||||
for (SkillTreeNode skillTreeNode : MMOCore.plugin.skillTreeManager.getAllNodes()) {
|
||||
getData().setNodeLevel(skillTreeNode, json.has(skillTreeNode.getFullId()) ? json.get(skillTreeNode.getFullId()).getAsInt() : 0);
|
||||
}
|
||||
}
|
||||
Set<String> unlockedItems = new HashSet<>();
|
||||
if (!isEmpty(result.getString("unlocked_items"))) {
|
||||
JsonArray unlockedItemsArray = MythicLib.plugin.getGson().fromJson(result.getString("unlocked_items"), JsonArray.class);
|
||||
for (JsonElement item : unlockedItemsArray)
|
||||
unlockedItems.add(item.getAsString());
|
||||
}
|
||||
getData().setUnlockedItems(unlockedItems);
|
||||
if (!isEmpty(result.getString("guild"))) {
|
||||
final Guild guild = MMOCore.plugin.nativeGuildManager.getGuild(result.getString("guild"));
|
||||
if (guild != null && guild.hasMember(getData().getUniqueId())) getData().setGuild(guild);
|
||||
}
|
||||
if (!isEmpty(result.getString("attributes"))) getData().getAttributes().load(result.getString("attributes"));
|
||||
if (getData().isOnline())
|
||||
MMOCore.plugin.attributeManager.getAll().forEach(attribute -> getData().getAttributes().getInstance(attribute).updateStats());
|
||||
if (!isEmpty(result.getString("professions")))
|
||||
getData().getCollectionSkills().load(result.getString("professions"));
|
||||
if (!isEmpty(result.getString("quests"))) getData().getQuestData().load(result.getString("quests"));
|
||||
getData().getQuestData().updateBossBar();
|
||||
if (!isEmpty(result.getString("waypoints")))
|
||||
getData().getWaypoints().addAll(MMOCoreUtils.jsonArrayToList(result.getString("waypoints")));
|
||||
if (!isEmpty(result.getString("friends")))
|
||||
MMOCoreUtils.jsonArrayToList(result.getString("friends")).forEach(str -> getData().getFriends().add(UUID.fromString(str)));
|
||||
if (!isEmpty(result.getString("skills"))) {
|
||||
JsonObject object = MythicLib.plugin.getGson().fromJson(result.getString("skills"), JsonObject.class);
|
||||
for (Map.Entry<String, JsonElement> entry : object.entrySet())
|
||||
getData().setSkillLevel(entry.getKey(), entry.getValue().getAsInt());
|
||||
}
|
||||
if (!isEmpty(result.getString("bound_skills"))) {
|
||||
JsonObject object = MythicLib.plugin.getGson().fromJson(result.getString("bound_skills"), JsonObject.class);
|
||||
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
|
||||
ClassSkill skill = getData().getProfess().getSkill(entry.getValue().getAsString());
|
||||
if (skill != null) getData().bindSkill(Integer.parseInt(entry.getKey()), skill);
|
||||
}
|
||||
}
|
||||
if (!isEmpty(result.getString("class_info"))) {
|
||||
JsonObject object = MythicLib.plugin.getGson().fromJson(result.getString("class_info"), JsonObject.class);
|
||||
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
|
||||
try {
|
||||
PlayerClass profess = MMOCore.plugin.classManager.get(entry.getKey());
|
||||
Validate.notNull(profess, "Could not find class '" + entry.getKey() + "'");
|
||||
getData().applyClassInfo(profess, new SavedClassInformation(entry.getValue().getAsJsonObject()));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
MMOCore.log(Level.WARNING, "Could not load class info '" + entry.getKey() + "': " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* These should be loaded after to make sure that the
|
||||
* MAX_MANA, MAX_STAMINA & MAX_STELLIUM stats are already loaded.
|
||||
*/
|
||||
getData().loadResources(result.getDouble("health"), result.getDouble("mana"), result.getDouble("stamina"), result.getDouble("stellium"));
|
||||
|
||||
UtilityMethods.debug(MMOCore.plugin, "SQL", String.format("{ class: %s, level: %d }", getData().getProfess().getId(), getData().getLevel()));
|
||||
}
|
||||
|
||||
private boolean isEmpty(@Nullable String str) {
|
||||
return str == null
|
||||
|| str.isEmpty()
|
||||
|| str.equalsIgnoreCase("null")
|
||||
|| str.equals("{}")
|
||||
|| str.equals("[]");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadEmptyData() {
|
||||
MMOCore.plugin.playerDataManager.getDefaultData().apply(getData(), PlayerLevelChangeEvent.Reason.CHOOSE_PROFILE);
|
||||
UtilityMethods.debug(MMOCore.plugin, "SQL", "Loaded DEFAULT data for: '" + getData().getUniqueId() + "' as no saved data was found.");
|
||||
}
|
||||
}
|
||||
@ -16,10 +16,6 @@ import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
* @deprecated Not implemented yet
|
||||
*/
|
||||
@Deprecated
|
||||
public class PlayerDataTableUpdater {
|
||||
private final PlayerData playerData;
|
||||
private final SQLDataSource provider;
|
||||
@ -33,7 +29,7 @@ public class PlayerDataTableUpdater {
|
||||
}
|
||||
|
||||
public void executeRequest(@NotNull SaveReason saveReason) {
|
||||
final String request = "INSERT INTO mmocore_playerdata(uuid, " + formatCollection(requestMap.keySet(), false)
|
||||
final String request = "INSERT INTO " + SQLDataHandler.DATA_TABLE_NAME + "(" + SQLDataHandler.UUID_FIELD_NAME + ", " + formatCollection(requestMap.keySet(), false)
|
||||
+ ") VALUES('" + effectiveId + "'," + formatCollection(requestMap.values(), true) + ")" +
|
||||
" ON DUPLICATE KEY UPDATE " + formatMap() + ";";
|
||||
|
||||
|
||||
@ -1,25 +1,44 @@
|
||||
package net.Indyuce.mmocore.manager.data.sql;
|
||||
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.UtilityMethods;
|
||||
import io.lumine.mythic.lib.data.DataLoadResult;
|
||||
import io.lumine.mythic.lib.data.SaveReason;
|
||||
import io.lumine.mythic.lib.data.sql.SQLDataSource;
|
||||
import io.lumine.mythic.lib.data.sql.SQLSynchronizedDataHandler;
|
||||
import io.lumine.mythic.lib.gson.JsonArray;
|
||||
import io.lumine.mythic.lib.gson.JsonElement;
|
||||
import io.lumine.mythic.lib.gson.JsonObject;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
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.api.util.MMOCoreUtils;
|
||||
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.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SQLDataHandler extends SQLSynchronizedDataHandler<PlayerData, OfflinePlayerData> {
|
||||
public static final String DATA_TABLE_NAME = "mmocore_playerdata";
|
||||
public static final String UUID_FIELD_NAME = "uuid";
|
||||
|
||||
public SQLDataHandler(SQLDataSource dataSource) {
|
||||
super(dataSource);
|
||||
super(dataSource, DATA_TABLE_NAME, UUID_FIELD_NAME);
|
||||
}
|
||||
|
||||
private static final String[] NEW_COLUMNS = new String[]{
|
||||
@ -39,7 +58,8 @@ public class SQLDataHandler extends SQLSynchronizedDataHandler<PlayerData, Offli
|
||||
public void setup() {
|
||||
|
||||
// Fully create table
|
||||
getDataSource().executeUpdateAsync("CREATE TABLE IF NOT EXISTS mmocore_playerdata(uuid VARCHAR(36)," +
|
||||
getDataSource().executeUpdateAsync("CREATE TABLE IF NOT EXISTS " + DATA_TABLE_NAME + "("
|
||||
+ UUID_FIELD_NAME + " VARCHAR(36)," +
|
||||
"class_points INT(11) DEFAULT 0," +
|
||||
"skill_points INT(11) DEFAULT 0," +
|
||||
"attribute_points INT(11) DEFAULT 0," +
|
||||
@ -74,10 +94,11 @@ public class SQLDataHandler extends SQLSynchronizedDataHandler<PlayerData, Offli
|
||||
for (int i = 0; i < NEW_COLUMNS.length; i += 2) {
|
||||
final String columnName = NEW_COLUMNS[i];
|
||||
final String dataType = NEW_COLUMNS[i + 1];
|
||||
getDataSource().getResultAsync("SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'mmocore_playerdata' AND COLUMN_NAME = '" + columnName + "'", result -> {
|
||||
// TODO prepare
|
||||
getDataSource().getResultAsync("SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = '" + DATA_TABLE_NAME + "' AND COLUMN_NAME = '" + columnName + "'", result -> {
|
||||
try {
|
||||
if (!result.next())
|
||||
getDataSource().executeUpdate("ALTER TABLE mmocore_playerdata ADD COLUMN " + columnName + " " + dataType);
|
||||
getDataSource().executeUpdate("ALTER TABLE " + DATA_TABLE_NAME + " ADD COLUMN " + columnName + " " + dataType);
|
||||
} catch (SQLException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
@ -85,12 +106,100 @@ public class SQLDataHandler extends SQLSynchronizedDataHandler<PlayerData, Offli
|
||||
}
|
||||
|
||||
// Modify exp to be a double precision instead
|
||||
getDataSource().executeUpdateAsync("ALTER TABLE mmocore_playerdata MODIFY COLUMN experience DOUBLE PRECISION");
|
||||
getDataSource().executeUpdateAsync("ALTER TABLE " + DATA_TABLE_NAME + " MODIFY COLUMN experience DOUBLE PRECISION");
|
||||
}
|
||||
|
||||
@Override
|
||||
public MMOCoreDataSynchronizer newDataSynchronizer(PlayerData playerData) {
|
||||
return new MMOCoreDataSynchronizer(this, playerData);
|
||||
protected @NotNull DataLoadResult loadDataFromResultSet(@NotNull PlayerData playerData, @NotNull ResultSet result, boolean force) throws SQLException {
|
||||
|
||||
// Reset stats linked to triggers
|
||||
playerData.resetTriggerStats();
|
||||
|
||||
playerData.setClassPoints(result.getInt("class_points"));
|
||||
playerData.setSkillPoints(result.getInt("skill_points"));
|
||||
playerData.setSkillReallocationPoints(result.getInt("skill_reallocation_points"));
|
||||
playerData.setSkillTreeReallocationPoints(result.getInt("skill_tree_reallocation_points"));
|
||||
playerData.setAttributePoints(result.getInt("attribute_points"));
|
||||
playerData.setAttributeReallocationPoints(result.getInt("attribute_realloc_points"));
|
||||
playerData.setLevel(result.getInt("level"), PlayerLevelChangeEvent.Reason.CHOOSE_PROFILE);
|
||||
playerData.setExperience(result.getDouble("experience"));
|
||||
|
||||
if (!isEmpty(result.getString("class")))
|
||||
playerData.setClass(MMOCore.plugin.classManager.get(result.getString("class")));
|
||||
|
||||
if (!isEmpty(result.getString("times_claimed"))) {
|
||||
JsonObject json = MythicLib.plugin.getGson().fromJson(result.getString("times_claimed"), JsonObject.class);
|
||||
json.entrySet().forEach(entry -> playerData.getItemClaims().put(entry.getKey(), entry.getValue().getAsInt()));
|
||||
}
|
||||
if (!isEmpty(result.getString("skill_tree_points"))) {
|
||||
JsonObject json = MythicLib.plugin.getGson().fromJson(result.getString("skill_tree_points"), JsonObject.class);
|
||||
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) {
|
||||
playerData.setSkillTreePoints(skillTree.getId(), json.has(skillTree.getId()) ? json.get(skillTree.getId()).getAsInt() : 0);
|
||||
}
|
||||
playerData.setSkillTreePoints("global", json.has("global") ? json.get("global").getAsInt() : 0);
|
||||
}
|
||||
|
||||
if (!isEmpty(result.getString("skill_tree_levels"))) {
|
||||
JsonObject json = MythicLib.plugin.getGson().fromJson(result.getString("skill_tree_levels"), JsonObject.class);
|
||||
for (SkillTreeNode skillTreeNode : MMOCore.plugin.skillTreeManager.getAllNodes()) {
|
||||
playerData.setNodeLevel(skillTreeNode, json.has(skillTreeNode.getFullId()) ? json.get(skillTreeNode.getFullId()).getAsInt() : 0);
|
||||
}
|
||||
}
|
||||
Set<String> unlockedItems = new HashSet<>();
|
||||
if (!isEmpty(result.getString("unlocked_items"))) {
|
||||
JsonArray unlockedItemsArray = MythicLib.plugin.getGson().fromJson(result.getString("unlocked_items"), JsonArray.class);
|
||||
for (JsonElement item : unlockedItemsArray)
|
||||
unlockedItems.add(item.getAsString());
|
||||
}
|
||||
playerData.setUnlockedItems(unlockedItems);
|
||||
if (!isEmpty(result.getString("guild"))) {
|
||||
final Guild guild = MMOCore.plugin.nativeGuildManager.getGuild(result.getString("guild"));
|
||||
if (guild != null && guild.hasMember(playerData.getUniqueId())) playerData.setGuild(guild);
|
||||
}
|
||||
if (!isEmpty(result.getString("attributes"))) playerData.getAttributes().load(result.getString("attributes"));
|
||||
if (playerData.isOnline())
|
||||
MMOCore.plugin.attributeManager.getAll().forEach(attribute -> playerData.getAttributes().getInstance(attribute).updateStats());
|
||||
if (!isEmpty(result.getString("professions")))
|
||||
playerData.getCollectionSkills().load(result.getString("professions"));
|
||||
if (!isEmpty(result.getString("quests"))) playerData.getQuestData().load(result.getString("quests"));
|
||||
playerData.getQuestData().updateBossBar();
|
||||
if (!isEmpty(result.getString("waypoints")))
|
||||
playerData.getWaypoints().addAll(MMOCoreUtils.jsonArrayToList(result.getString("waypoints")));
|
||||
if (!isEmpty(result.getString("friends")))
|
||||
MMOCoreUtils.jsonArrayToList(result.getString("friends")).forEach(str -> playerData.getFriends().add(UUID.fromString(str)));
|
||||
if (!isEmpty(result.getString("skills"))) {
|
||||
JsonObject object = MythicLib.plugin.getGson().fromJson(result.getString("skills"), JsonObject.class);
|
||||
for (Map.Entry<String, JsonElement> entry : object.entrySet())
|
||||
playerData.setSkillLevel(entry.getKey(), entry.getValue().getAsInt());
|
||||
}
|
||||
if (!isEmpty(result.getString("bound_skills"))) {
|
||||
JsonObject object = MythicLib.plugin.getGson().fromJson(result.getString("bound_skills"), JsonObject.class);
|
||||
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
|
||||
ClassSkill skill = playerData.getProfess().getSkill(entry.getValue().getAsString());
|
||||
if (skill != null) playerData.bindSkill(Integer.parseInt(entry.getKey()), skill);
|
||||
}
|
||||
}
|
||||
if (!isEmpty(result.getString("class_info"))) {
|
||||
JsonObject object = MythicLib.plugin.getGson().fromJson(result.getString("class_info"), JsonObject.class);
|
||||
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
|
||||
try {
|
||||
PlayerClass profess = MMOCore.plugin.classManager.get(entry.getKey());
|
||||
Validate.notNull(profess, "Could not find class '" + entry.getKey() + "'");
|
||||
playerData.applyClassInfo(profess, new SavedClassInformation(entry.getValue().getAsJsonObject()));
|
||||
} catch (IllegalArgumentException exception) {
|
||||
MMOCore.log(Level.WARNING, "Could not load class info '" + entry.getKey() + "': " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* These should be loaded after to make sure that the
|
||||
* MAX_MANA, MAX_STAMINA & MAX_STELLIUM stats are already loaded.
|
||||
*/
|
||||
playerData.loadResources(result.getDouble("health"), result.getDouble("mana"), result.getDouble("stamina"), result.getDouble("stellium"));
|
||||
|
||||
UtilityMethods.debug(MMOCore.plugin, "SQL", String.format("{ class: %s, level: %d }", playerData.getProfess().getId(), playerData.getLevel()));
|
||||
return new DataLoadResult(DataLoadResult.Type.SUCCESS, false, force);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -189,7 +298,11 @@ public class SQLDataHandler extends SQLSynchronizedDataHandler<PlayerData, Offli
|
||||
}
|
||||
|
||||
private boolean isEmpty(@Nullable String str) {
|
||||
return str == null || str.equalsIgnoreCase("null") || str.equalsIgnoreCase("{}") || str.equalsIgnoreCase("[]") || str.equalsIgnoreCase("");
|
||||
return str == null
|
||||
|| str.isEmpty()
|
||||
|| str.equalsIgnoreCase("null")
|
||||
|| str.equalsIgnoreCase("{}")
|
||||
|| str.equalsIgnoreCase("[]");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@ -22,7 +22,7 @@ public class SQLOfflinePlayerData implements OfflinePlayerData {
|
||||
public SQLOfflinePlayerData(UUID uuid) {
|
||||
this.uuid = uuid;
|
||||
/*
|
||||
provider.getResult("SELECT * FROM mmocore_playerdata WHERE uuid = '" + uuid + "';", (result) -> {
|
||||
provider.getResult("SELECT * FROM "+DATA_TABLE_NAME+" WHERE uuid = '" + uuid + "';", (result) -> {
|
||||
try {
|
||||
MythicLib.debug("MMOCoreSQL", "Loading OFFLINE data for '" + uuid + "'.");
|
||||
if (!result.next()) {
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package net.Indyuce.mmocore.manager.data.yaml;
|
||||
|
||||
import io.lumine.mythic.lib.data.DataLoadResult;
|
||||
import io.lumine.mythic.lib.data.yaml.YAMLSynchronizedDataHandler;
|
||||
import io.lumine.mythic.lib.module.MMOPlugin;
|
||||
import io.lumine.mythic.lib.util.lang3.Validate;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.event.PlayerLevelChangeEvent;
|
||||
@ -13,7 +15,6 @@ import net.Indyuce.mmocore.skill.ClassSkill;
|
||||
import net.Indyuce.mmocore.skilltree.SkillTreeNode;
|
||||
import net.Indyuce.mmocore.skilltree.tree.SkillTree;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -22,7 +23,7 @@ import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerData, OfflinePlayerData> {
|
||||
public YAMLPlayerDataHandler(Plugin owning) {
|
||||
public YAMLPlayerDataHandler(MMOPlugin owning) {
|
||||
super(owning);
|
||||
}
|
||||
|
||||
@ -37,7 +38,7 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFromSection(PlayerData data, ConfigurationSection config) {
|
||||
protected @NotNull DataLoadResult loadFromSection(@NotNull PlayerData data, @NotNull ConfigurationSection config, boolean isSaved) {
|
||||
|
||||
// Reset stats linked to triggers.
|
||||
data.resetTriggerStats();
|
||||
@ -45,7 +46,7 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
||||
// Load default data
|
||||
if (!config.contains("class-points")) {
|
||||
MMOCore.plugin.playerDataManager.getDefaultData().apply(data, PlayerLevelChangeEvent.Reason.CHOOSE_PROFILE);
|
||||
return;
|
||||
return new DataLoadResult(DataLoadResult.Type.SUCCESS, true, isSaved);
|
||||
}
|
||||
|
||||
data.setClassPoints(config.getInt("class-points"));
|
||||
@ -127,6 +128,8 @@ public class YAMLPlayerDataHandler extends YAMLSynchronizedDataHandler<PlayerDat
|
||||
var fixedStamina = config.getDouble("stamina", data.getStats().getStat("MAX_STAMINA"));
|
||||
var fixedStellium = config.getDouble("stellium", data.getStats().getStat("MAX_STELLIUM"));
|
||||
data.loadResources(fixedHealth, fixedMana, fixedStamina, fixedStellium);
|
||||
|
||||
return new DataLoadResult(DataLoadResult.Type.SUCCESS, false, isSaved);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
Reference in New Issue
Block a user