Feat: Change way of handling voids
Only store to database when fetching scoreboard or on disconnect. else just use the persistentStorage from players
This commit is contained in:
		| @ -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<Player, BossBar> 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<Player, Integer> scoreboard(){ | ||||
| 		Bukkit.getServer().forEachAudience(a -> { | ||||
| 			if(a instanceof Player ply) save(ply); | ||||
| 		}); | ||||
| 		HashMap<Player, Integer> ret = new HashMap<>(); | ||||
| 		try { | ||||
| 			HashMap<UUID, Integer> 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()); | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user