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); MMOCore.plugin.dataProvider.getDataManager().loadData(offlinePlayerData);
// Player data is loaded, now it gets saved through SQL // Player data is loaded, now it gets saved through SQL
sqlProvider.getDataManager().saveData(offlinePlayerData); sqlProvider.getDataManager().saveData(offlinePlayerData, true);
} catch (RuntimeException exception) { } catch (RuntimeException exception) {
errorCount++; errorCount++;
exception.printStackTrace(); exception.printStackTrace();

View File

@ -46,7 +46,7 @@ public abstract class PlayerDataManager {
// Save data async if required // Save data async if required
if (playerData.isFullyLoaded()) 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 // Close and unregister data instantly if no error occured
playerData.close(); playerData.close();
@ -123,8 +123,9 @@ public abstract class PlayerDataManager {
* an async task in case MySQL storage is used. * 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 //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(); data.setFullyLoaded();
this.cancel();
MMOCore.sqlDebug("Loaded saved data for: '" + data.getUniqueId() + "'!"); MMOCore.sqlDebug("Loaded saved data for: '" + data.getUniqueId() + "'!");
MMOCore.sqlDebug(String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel())); MMOCore.sqlDebug(String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));
return; return;
@ -160,6 +158,9 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
data.setExperience(0); data.setExperience(0);
data.getQuestData().updateBossBar(); 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(); data.setFullyLoaded();
this.cancel(); this.cancel();
MMOCore.sqlDebug("Loaded DEFAULT data for: '" + data.getUniqueId() + "' as no saved data was found."); MMOCore.sqlDebug("Loaded DEFAULT data for: '" + data.getUniqueId() + "' as no saved data was found.");
@ -177,7 +178,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
} }
@Override @Override
public void saveData(PlayerData data) { public void saveData(PlayerData data, boolean logout) {
MySQLTableEditor sql = new MySQLTableEditor(MySQLTableEditor.Table.PLAYERDATA, data.getUniqueId(), provider); MySQLTableEditor sql = new MySQLTableEditor(MySQLTableEditor.Table.PLAYERDATA, data.getUniqueId(), provider);
MMOCore.sqlDebug("Saving data for: '" + data.getUniqueId() + "'..."); MMOCore.sqlDebug("Saving data for: '" + data.getUniqueId() + "'...");
@ -211,6 +212,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
request.addData("professions", data.getCollectionSkills().toJsonString()); request.addData("professions", data.getCollectionSkills().toJsonString());
request.addData("quests", data.getQuestData().toJsonString()); request.addData("quests", data.getQuestData().toJsonString());
request.addData("class_info", createClassInfoData(data).toString()); request.addData("class_info", createClassInfoData(data).toString());
if (logout)
request.addData("is_saved", 1); request.addData("is_saved", 1);
sql.updateData(request); sql.updateData(request);
MMOCore.sqlDebug("Saved data for: " + data.getUniqueId()); MMOCore.sqlDebug("Saved data for: " + data.getUniqueId());

View File

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