diff --git a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java index d042057..7ceab31 100644 --- a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java +++ b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java @@ -5,17 +5,18 @@ import java.util.HashMap; import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.persistence.PersistentDataType; import org.bukkit.scoreboard.Criteria; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.RenderType; import org.bukkit.scoreboard.Score; import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.text.Component; @@ -25,26 +26,30 @@ import net.kyori.adventure.title.Title; public final class Voids implements Listener{ private static HashMap bossbars = new HashMap<>(); + private static final NamespacedKey voids = new NamespacedKey(TheVoidRoad.instance, "voids"); public static int get(Player ply){ + if(ply.getPersistentDataContainer().has(voids)){ + return ply.getPersistentDataContainer().get(voids, PersistentDataType.INTEGER); + } return TheVoidRoad.db.getVoids(ply.getUniqueId()); } public static void set(Player ply, int amount){ - TheVoidRoad.db.setVoids(ply.getUniqueId(), amount); + ply.getPersistentDataContainer().set(voids, PersistentDataType.INTEGER, amount); UpdateVoids(ply); } public static void add(Player ply, int amount){ - int curr = DatabaseManager.getInstance().getVoids(ply.getUniqueId()); - DatabaseManager.getInstance().setVoids(ply.getUniqueId(), curr + amount); + int curr = get(ply); + set(ply, curr + amount); UpdateVoids(ply); } public static boolean subtract(Player ply, int amount, boolean force){ - int curr = TheVoidRoad.db.getVoids(ply.getUniqueId()); + int curr = get(ply); if(curr - amount < 0 && !force) return false; - TheVoidRoad.db.setVoids(ply.getUniqueId(), curr - amount); + set(ply, curr - amount); UpdateVoids(ply); return true; } @@ -59,7 +64,15 @@ public final class Voids implements Listener{ return true; } + public static void save(Player ply){ + int curr = get(ply); + TheVoidRoad.db.setVoids(ply.getUniqueId(), curr); + } + public static HashMap scoreboard(){ + Bukkit.getServer().forEachAudience(a -> { + if(a instanceof Player ply) save(ply); + }); HashMap ret = new HashMap<>(); try { HashMap scores_uuid = TheVoidRoad.db.getVoidsScoreboard(); @@ -95,4 +108,9 @@ public final class Voids implements Listener{ public void UpdateVoids(PlayerJoinEvent e){ UpdateVoids(e.getPlayer()); } + + @EventHandler + public void SaveToDbBeforeQuit(PlayerQuitEvent e){ + save(e.getPlayer()); + } }