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

93 lines
2.6 KiB
Java
Raw Normal View History

package cc.fascinated.account;
import cc.fascinated.Aetheria;
import cc.fascinated.utils.io.Config;
import cc.fascinated.utils.Manager;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
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.io.File;
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()) {
registerAccount(player);
}
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) {
return ACCOUNTS.get(uuid); // todo: load account if not found
}
/**
* Registers an account for the specified player.
*
* @param player the player to register the account for
*/
private void registerAccount(Player player) {
Account account = new Account(player.getUniqueId());
ACCOUNTS.put(player.getUniqueId(), 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) {
if (getAccount(event.getPlayer().getUniqueId()) == null) {
registerAccount(event.getPlayer());
}
}
@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();
}
}