mana/stamina/stellium saved when relogging

This commit is contained in:
Indyuce 2021-12-22 10:26:37 +01:00
parent a8ffe80e50
commit d3edab7687
3 changed files with 29 additions and 2 deletions

View File

@ -1,6 +1,7 @@
package net.Indyuce.mmocore.api.player; package net.Indyuce.mmocore.api.player;
import io.lumine.mythic.lib.api.player.MMOPlayerData; import io.lumine.mythic.lib.api.player.MMOPlayerData;
import io.lumine.mythic.lib.player.TemporaryPlayerData;
import io.lumine.mythic.lib.player.cooldown.CooldownInfo; import io.lumine.mythic.lib.player.cooldown.CooldownInfo;
import io.lumine.mythic.lib.player.cooldown.CooldownMap; import io.lumine.mythic.lib.player.cooldown.CooldownMap;
import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.MMOCore;
@ -98,6 +99,14 @@ public class PlayerData extends OfflinePlayerData implements Closable {
this.questData = new PlayerQuests(this); this.questData = new PlayerQuests(this);
} }
public PlayerData(MMOPlayerData mmoData, TemporaryPlayerData tempData) {
this(mmoData);
mana = tempData.getDouble("mana");
stamina = tempData.getDouble("stamina");
stellium = tempData.getDouble("stellium");
}
/** /**
* Update all references after /mmocore reload so there can be garbage * Update all references after /mmocore reload so there can be garbage
* collection with old plugin objects like class or skill instances. * collection with old plugin objects like class or skill instances.
@ -908,7 +917,7 @@ public class PlayerData extends OfflinePlayerData implements Closable {
* @return If player data for that player is loaded * @return If player data for that player is loaded
*/ */
public static boolean has(Player player) { public static boolean has(Player player) {
return has(player.getUniqueId()); return has(player.getUniqueId());
} }
/** /**

View File

@ -1,6 +1,8 @@
package net.Indyuce.mmocore.listener; package net.Indyuce.mmocore.listener;
import io.lumine.mythic.lib.api.event.TemporaryDataSavedEvent;
import io.lumine.mythic.lib.player.TemporaryPlayerData;
import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.PlayerResourceUpdateEvent; import net.Indyuce.mmocore.api.event.PlayerResourceUpdateEvent;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
@ -89,4 +91,19 @@ public class PlayerListener implements Listener {
event.setAmount(bukkitEvent.getAmount()); event.setAmount(bukkitEvent.getAmount());
} }
} }
/**
* See {@link TemporaryPlayerData} and {@link TemporaryDataSavedEvent}
* <p>
* This temporarily saves:
* - player resources including mana, stamina and stellium
*/
@EventHandler
public void h(TemporaryDataSavedEvent event) {
TemporaryPlayerData temp = event.getTemporaryData();
PlayerData playerData = PlayerData.get(event.getPlayer().getUniqueId());
temp.set("mana", playerData.getMana());
temp.set("stamina", playerData.getStamina());
temp.set("stellium", playerData.getStellium());
}
} }

View File

@ -1,6 +1,7 @@
package net.Indyuce.mmocore.manager.data; package net.Indyuce.mmocore.manager.data;
import io.lumine.mythic.lib.api.player.MMOPlayerData; import io.lumine.mythic.lib.api.player.MMOPlayerData;
import io.lumine.mythic.lib.player.TemporaryPlayerData;
import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.event.AsyncPlayerDataLoadEvent; import net.Indyuce.mmocore.api.event.AsyncPlayerDataLoadEvent;
import net.Indyuce.mmocore.api.event.PlayerDataLoadEvent; import net.Indyuce.mmocore.api.event.PlayerDataLoadEvent;
@ -87,7 +88,7 @@ public abstract class PlayerDataManager {
// Load player data if it does not exist // Load player data if it does not exist
if (!data.containsKey(uniqueId)) { if (!data.containsKey(uniqueId)) {
PlayerData newData = new PlayerData(MMOPlayerData.get(uniqueId)); PlayerData newData = TemporaryPlayerData.has(uniqueId) ? new PlayerData(MMOPlayerData.get(uniqueId), TemporaryPlayerData.get(uniqueId)) : new PlayerData(MMOPlayerData.get(uniqueId));
// Schedule async data loading // Schedule async data loading
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> { Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {