initiate and disable storage providers.

This commit is contained in:
Len 2024-06-17 09:29:22 +02:00
parent 5ed4c32cc1
commit 2e2d370bc6
5 changed files with 67 additions and 3 deletions

View File

@ -4,7 +4,12 @@ import com.alttd.essentia.commands.admin.*;
import com.alttd.essentia.commands.player.*;
import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.listeners.PlayerListener;
import com.alttd.essentia.storage.StorageManager;
import com.alttd.essentia.storage.StorageProvider;
import com.alttd.essentia.storage.StorageType;
import com.alttd.essentia.storage.mysql.SQLStorageProvider;
import com.alttd.essentia.user.EssentiaUserManager;
import com.alttd.essentia.user.User;
import com.alttd.essentia.user.UserManager;
import lombok.Getter;
import org.bukkit.plugin.PluginManager;
@ -18,6 +23,9 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI {
@Getter
private UserManager userManager;
@Getter
private StorageProvider storageProvider;
@Override
public void onLoad() {
instance = this;
@ -30,11 +38,20 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI {
loadCommands();
loadEventListeners();
loadManagers();
loadStorageProvider();
}
@Override
public void onDisable() {
getServer().getScheduler().cancelTasks(this);
for (User user : userManager().getUsers().values()) {
try {
storageProvider.save(user);
} catch (Exception e) {
e.printStackTrace();
}
}
storageProvider().disable();
}
public void loadConfiguration() {
@ -72,4 +89,10 @@ public class EssentiaPlugin extends JavaPlugin implements EssentiaAPI {
userManager = new EssentiaUserManager();
}
void loadStorageProvider() {
StorageManager storageManager = new StorageManager(this);
storageProvider = storageManager.storageProvider(StorageType.valueOf(Config.STORAGE_TYPE.toUpperCase()));
storageProvider.startAutoSaving();
}
}

View File

@ -238,6 +238,9 @@ public class Config {
FEED_BY_OTHER = config.getString("messages.command.feed.feed-by-other", FEED_BY_OTHER);
}
public static String STORAGE_TYPE = "mysql";
public static boolean AUTO_SAVE = true;
public static int AUTO_SAVE_DELAY = 60;
public static String MYSQL_IP = "localhost";
public static String MYSQL_PORT = "3306";
public static String MYSQL_DATABASE_NAME = "essentia";
@ -246,6 +249,9 @@ public class Config {
public static int MYSQL_CONNECTIONS = 10;
public static int MYSQL_QUEUE_DELAY = 5;
private static void storage() {
STORAGE_TYPE = config.getString("storage.type", STORAGE_TYPE);
AUTO_SAVE = config.getBoolean("storage.auto-save", AUTO_SAVE);
AUTO_SAVE_DELAY = config.getInt("storaeg.auto-save-delay", AUTO_SAVE_DELAY);
MYSQL_IP = config.getString("storage.mysql.ip", MYSQL_IP);
MYSQL_PORT = config.getString("storage.mysql.port", MYSQL_PORT);
MYSQL_DATABASE_NAME = config.getString("storage.mysql.database", MYSQL_DATABASE_NAME);

View File

@ -2,12 +2,11 @@ package com.alttd.essentia.storage;
import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.storage.mysql.SQLStorageProvider;
import com.alttd.essentia.storage.sqlite.SQLiteStorageProvider;
import com.alttd.essentia.storage.yaml.YamlStorageProvider;
import java.io.File;
public abstract class StorageManager {
public class StorageManager {
protected final EssentiaPlugin plugin;

View File

@ -1,8 +1,10 @@
package com.alttd.essentia.storage;
import com.alttd.essentia.EssentiaPlugin;
import com.alttd.essentia.configuration.Config;
import com.alttd.essentia.user.EssentiaUser;
import com.alttd.essentia.user.User;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
@ -10,6 +12,7 @@ import java.util.UUID;
public abstract class StorageProvider {
protected final EssentiaPlugin plugin;
private AutoSaveTask autoSaveTask;
public StorageProvider(EssentiaPlugin plugin) {
this.plugin = plugin;
@ -24,9 +27,41 @@ public abstract class StorageProvider {
return user;
}
public void startAutoSaving() {
if (!Config.AUTO_SAVE)
return;
autoSaveTask = new AutoSaveTask();
int delay = Config.AUTO_SAVE_DELAY * 20;
autoSaveTask.runTaskTimerAsynchronously(plugin, delay, delay);
}
public void disable() {
// Override if some extra steps are required when disabling the plugin.
}
protected abstract EssentiaUser load(UUID uuid);
public abstract void save(@NotNull User user) throws Exception;
public abstract void delete(UUID uuid) throws Exception;
private class AutoSaveTask extends BukkitRunnable {
@Override
public void run() {
for (User user : plugin.userManager().getUsers().values()) {
try {
if (user.saving()) {
continue;
}
save(user);
} catch (Exception e) {
user.saving(false);
e.printStackTrace();
}
}
}
}
}

View File

@ -87,7 +87,8 @@ public class SQLStorageProvider extends StorageProvider {
}
}
public void unload() {
@Override
public void disable() {
if (databaseQueue != null && !databaseQueue.isCancelled()) {
databaseQueue.cancel();
databaseQueue.runTaskQueue();