From d3edab76877e4ea497befb2f53b33ef9c0acba4f Mon Sep 17 00:00:00 2001 From: Indyuce Date: Wed, 22 Dec 2021 10:26:37 +0100 Subject: [PATCH] mana/stamina/stellium saved when relogging --- .../Indyuce/mmocore/api/player/PlayerData.java | 11 ++++++++++- .../mmocore/listener/PlayerListener.java | 17 +++++++++++++++++ .../mmocore/manager/data/PlayerDataManager.java | 3 ++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 4851a39f..5bd963ee 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -1,6 +1,7 @@ package net.Indyuce.mmocore.api.player; 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.CooldownMap; import net.Indyuce.mmocore.MMOCore; @@ -98,6 +99,14 @@ public class PlayerData extends OfflinePlayerData implements Closable { 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 * 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 */ public static boolean has(Player player) { - return has(player.getUniqueId()); + return has(player.getUniqueId()); } /** diff --git a/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java b/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java index fd9ad9de..c3b074f3 100644 --- a/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java +++ b/src/main/java/net/Indyuce/mmocore/listener/PlayerListener.java @@ -1,6 +1,8 @@ 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.api.event.PlayerResourceUpdateEvent; import net.Indyuce.mmocore.api.player.PlayerData; @@ -89,4 +91,19 @@ public class PlayerListener implements Listener { event.setAmount(bukkitEvent.getAmount()); } } + + /** + * See {@link TemporaryPlayerData} and {@link TemporaryDataSavedEvent} + *

+ * 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()); + } } diff --git a/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java b/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java index 72af6abd..e3ffbc3b 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java @@ -1,6 +1,7 @@ package net.Indyuce.mmocore.manager.data; import io.lumine.mythic.lib.api.player.MMOPlayerData; +import io.lumine.mythic.lib.player.TemporaryPlayerData; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.event.AsyncPlayerDataLoadEvent; import net.Indyuce.mmocore.api.event.PlayerDataLoadEvent; @@ -87,7 +88,7 @@ public abstract class PlayerDataManager { // Load player data if it does not exist 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 Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {