This commit is contained in:
Jules 2023-01-22 21:58:54 +01:00
parent c1a231e8e1
commit fa6809b483
4 changed files with 16 additions and 13 deletions

View File

@ -91,7 +91,7 @@ public class ExportDataTreeNode extends CommandTreeNode {
MMOCore.plugin.dataProvider.getDataManager().loadData(offlinePlayerData);
// Player data is loaded, now it gets saved through SQL
sqlProvider.getDataManager().saveData(offlinePlayerData);
sqlProvider.getDataManager().saveData(offlinePlayerData, true);
} catch (RuntimeException exception) {
errorCount++;
exception.printStackTrace();

View File

@ -46,7 +46,7 @@ public abstract class PlayerDataManager {
// Save data async if required
if (playerData.isFullyLoaded())
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> saveData(playerData));
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> saveData(playerData, true));
// Close and unregister data instantly if no error occured
playerData.close();
@ -122,9 +122,10 @@ public abstract class PlayerDataManager {
* This method should always be called sync because it DOES register
* an async task in case MySQL storage is used.
*
* @param data Player data to save
* @param data Player data to save
* @param logout When logging out, is_saved is switched back to 1. This parameter
* must be turned off when auto-saving because the player doesn't
* actually leave the server.
*/
public abstract void saveData(PlayerData data);
public abstract void saveData(PlayerData data, boolean logout);
}

View File

@ -137,12 +137,10 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
}
//We now change the saved status to false because the data on SQL won't be the same as in the RAM
MySQLTableEditor sql = new MySQLTableEditor(MySQLTableEditor.Table.PLAYERDATA, data.getUniqueId(), provider);
new MySQLTableEditor(MySQLTableEditor.Table.PLAYERDATA, data.getUniqueId(), provider).updateData("is_saved", 0);
//We set the saved status to false
sql.updateData("is_saved", 0);
this.cancel();
data.setFullyLoaded();
this.cancel();
MMOCore.sqlDebug("Loaded saved data for: '" + data.getUniqueId() + "'!");
MMOCore.sqlDebug(String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));
return;
@ -160,6 +158,9 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
data.setExperience(0);
data.getQuestData().updateBossBar();
//We now change the saved status to false because the data on SQL won't be the same as in the RAM
new MySQLTableEditor(MySQLTableEditor.Table.PLAYERDATA, data.getUniqueId(), provider).updateData("is_saved", 0);
data.setFullyLoaded();
this.cancel();
MMOCore.sqlDebug("Loaded DEFAULT data for: '" + data.getUniqueId() + "' as no saved data was found.");
@ -177,7 +178,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
}
@Override
public void saveData(PlayerData data) {
public void saveData(PlayerData data, boolean logout) {
MySQLTableEditor sql = new MySQLTableEditor(MySQLTableEditor.Table.PLAYERDATA, data.getUniqueId(), provider);
MMOCore.sqlDebug("Saving data for: '" + data.getUniqueId() + "'...");
@ -211,7 +212,8 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
request.addData("professions", data.getCollectionSkills().toJsonString());
request.addData("quests", data.getQuestData().toJsonString());
request.addData("class_info", createClassInfoData(data).toString());
request.addData("is_saved", 1);
if (logout)
request.addData("is_saved", 1);
sql.updateData(request);
MMOCore.sqlDebug("Saved data for: " + data.getUniqueId());
MMOCore.sqlDebug(String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));

View File

@ -121,7 +121,7 @@ public class YAMLPlayerDataManager extends PlayerDataManager {
}
@Override
public void saveData(PlayerData data) {
public void saveData(PlayerData data, boolean logout) {
ConfigFile file = new ConfigFile(data.getUniqueId());
FileConfiguration config = file.getConfig();