1
0
Files
aetheria-anarchy-plugin/src/main/java/cc/fascinated/account/AccountManager.java

104 lines
2.9 KiB
Java
Raw Normal View History

package cc.fascinated.account;
import cc.fascinated.Aetheria;
import cc.fascinated.utils.Manager;
import lombok.extern.log4j.Log4j2;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.server.PluginDisableEvent;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@Log4j2
public class AccountManager extends Manager {
private final int SAVE_INTERVAL = 60 * 5; // 5 minutes
private static final Map<UUID, Account> ACCOUNTS = new HashMap<>();
public AccountManager() {
for (Player player : Bukkit.getOnlinePlayers()) {
2024-03-26 09:04:54 +00:00
registerAccount(player.getUniqueId());
}
Bukkit.getAsyncScheduler().runAtFixedRate(Aetheria.INSTANCE, (task) -> {
this.saveAccounts();
}, SAVE_INTERVAL, SAVE_INTERVAL, TimeUnit.SECONDS);
}
/**
* Gets the account for the specified player.
*
* @param uuid the UUID of the player
* @return the account
*/
public static Account getAccount(UUID uuid) {
2024-03-26 09:04:54 +00:00
if (!ACCOUNTS.containsKey(uuid)) {
return registerAccount(uuid);
}
return ACCOUNTS.get(uuid);
}
/**
* Checks if an account is already registered for the specified player.
*
* @param uuid the UUID of the player
* @return true if the account is already registered, false otherwise
*/
private boolean accountRegistered(UUID uuid) {
return ACCOUNTS.containsKey(uuid);
}
/**
* Registers an account for the specified player.
*
2024-03-26 09:04:54 +00:00
* @param uuid the UUID of the player
*/
2024-03-26 09:04:54 +00:00
private static Account registerAccount(UUID uuid) {
Account account = new Account(uuid);
ACCOUNTS.put(uuid, account);
return account;
}
/**
* Save all accounts to disk.
*/
private void saveAccounts() {
log.info("Saving accounts...");
for (Account account : ACCOUNTS.values()) {
account.save(true); // Save the account
}
log.info("Saved " + ACCOUNTS.size() + " accounts.");
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
2024-03-26 09:04:54 +00:00
if (accountRegistered(event.getPlayer().getUniqueId())) { // Account already registered
return;
}
2024-03-26 09:04:54 +00:00
registerAccount(event.getPlayer().getUniqueId());
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
Account account = getAccount(event.getPlayer().getUniqueId());
account.save(true);
ACCOUNTS.remove(event.getPlayer().getUniqueId());
}
@EventHandler
public void onPluginDisable(PluginDisableEvent event) {
if (event.getPlugin() != Aetheria.INSTANCE) {
return;
}
this.saveAccounts();
}
}