1
0
Fork 0
mirror of https://github.com/xHyroM/lighteco.git synced 2024-11-12 18:38:07 +01:00

fix: save users on disable && debug option in config

This commit is contained in:
Jozef Steinhübl 2023-08-30 08:33:24 +02:00
parent 0c35ff18b0
commit 759140cf6f
7 changed files with 38 additions and 12 deletions

View file

@ -10,7 +10,6 @@ import org.bukkit.Server;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List; import java.util.List;
@ -24,11 +23,14 @@ public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstr
@Getter @Getter
private final PluginLogger logger; private final PluginLogger logger;
@Getter
private final SchedulerAdapter scheduler;
public BukkitLightEcoBootstrap(JavaPlugin loader) { public BukkitLightEcoBootstrap(JavaPlugin loader) {
this.loader = loader; this.loader = loader;
this.logger = new BukkitLogger(loader.getSLF4JLogger()); this.logger = new BukkitLogger(loader.getSLF4JLogger());
this.scheduler = new BukkitSchedulerAdapter(this);
} }
@Override @Override
@ -50,11 +52,6 @@ public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstr
return this.loader.getServer(); return this.loader.getServer();
} }
@Override
public SchedulerAdapter getScheduler() {
return new BukkitSchedulerAdapter(this);
}
@Override @Override
public Path getDataDirectory() { public Path getDataDirectory() {
return this.loader.getDataFolder().toPath(); return this.loader.getDataFolder().toPath();

View file

@ -3,10 +3,11 @@ package dev.xhyrom.lighteco.bukkit;
import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPI;
import dev.jorel.commandapi.CommandAPIBukkitConfig; import dev.jorel.commandapi.CommandAPIBukkitConfig;
import dev.xhyrom.lighteco.bukkit.hooks.PlaceholderAPIExpansion; import dev.xhyrom.lighteco.bukkit.hooks.PlaceholderAPIExpansion;
import dev.xhyrom.lighteco.common.plugin.bootstrap.LoaderBootstrap;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
// Used inside plugin.yml
@SuppressWarnings("unused")
public class BukkitLightEcoLoader extends JavaPlugin { public class BukkitLightEcoLoader extends JavaPlugin {
private final BukkitLightEcoBootstrap bootstrap; private final BukkitLightEcoBootstrap bootstrap;
@ -16,8 +17,10 @@ public class BukkitLightEcoLoader extends JavaPlugin {
@Override @Override
public void onLoad() { public void onLoad() {
CommandAPI.onLoad(new CommandAPIBukkitConfig(this).verboseOutput(true));
this.bootstrap.onLoad(); this.bootstrap.onLoad();
CommandAPI.onLoad(new CommandAPIBukkitConfig(this)
.verboseOutput(this.bootstrap.getPlugin().getConfig().debug)
);
} }
@Override @Override

View file

@ -5,6 +5,7 @@ import org.slf4j.Logger;
public class BukkitLogger implements PluginLogger { public class BukkitLogger implements PluginLogger {
private final Logger logger; private final Logger logger;
public BukkitLogger(Logger logger) { public BukkitLogger(Logger logger) {
this.logger = logger; this.logger = logger;
} }

View file

@ -22,4 +22,8 @@ public class Config extends OkaeriConfig {
@Comment("Messages") @Comment("Messages")
public MessageConfig messages = new MessageConfig(); public MessageConfig messages = new MessageConfig();
@Comment("Debug mode")
@Comment("Prints additional information to the console.")
public boolean debug = false;
} }

View file

@ -6,6 +6,7 @@ import dev.xhyrom.lighteco.common.api.LightEcoApi;
import dev.xhyrom.lighteco.common.config.Config; import dev.xhyrom.lighteco.common.config.Config;
import dev.xhyrom.lighteco.common.dependencies.DependencyManager; import dev.xhyrom.lighteco.common.dependencies.DependencyManager;
import dev.xhyrom.lighteco.common.dependencies.DependencyManagerImpl; import dev.xhyrom.lighteco.common.dependencies.DependencyManagerImpl;
import dev.xhyrom.lighteco.common.model.user.User;
import dev.xhyrom.lighteco.common.storage.Storage; import dev.xhyrom.lighteco.common.storage.Storage;
import dev.xhyrom.lighteco.common.storage.StorageFactory; import dev.xhyrom.lighteco.common.storage.StorageFactory;
import dev.xhyrom.lighteco.common.task.UserSaveTask; import dev.xhyrom.lighteco.common.task.UserSaveTask;
@ -25,6 +26,8 @@ public abstract class AbstractLightEcoPlugin implements LightEcoPlugin {
private Storage storage; private Storage storage;
private LightEcoApi api; private LightEcoApi api;
private UserSaveTask userSaveTask;
public final void load() { public final void load() {
this.dependencyManager = new DependencyManagerImpl(this); this.dependencyManager = new DependencyManagerImpl(this);
@ -55,10 +58,13 @@ public abstract class AbstractLightEcoPlugin implements LightEcoPlugin {
LightEcoProvider.set(this.api); LightEcoProvider.set(this.api);
this.registerApiOnPlatform(this.api); this.registerApiOnPlatform(this.api);
this.getBootstrap().getScheduler().asyncRepeating(new UserSaveTask(this), this.config.saveInterval, TimeUnit.SECONDS); this.userSaveTask = new UserSaveTask(this);
this.getBootstrap().getScheduler().asyncRepeating(userSaveTask, this.config.saveInterval, TimeUnit.SECONDS);
} }
public final void disable() { public final void disable() {
this.userSaveTask.run(); // save all users synchronously
this.storage.shutdown(); this.storage.shutdown();
} }

View file

@ -86,6 +86,14 @@ public class Storage {
return future(() -> this.provider.saveUsers(users)); return future(() -> this.provider.saveUsers(users));
} }
public void saveUsersSync(dev.xhyrom.lighteco.api.model.user.User... users) {
try {
this.provider.saveUsers(users);
} catch (Exception e) {
throw new RuntimeException("Failed to save users", e);
}
}
// Return ApiUser instead of User // Return ApiUser instead of User
// We don't do anything with this // We don't do anything with this
public CompletableFuture<List<dev.xhyrom.lighteco.api.model.user.User>> getTopUsers(dev.xhyrom.lighteco.api.model.currency.Currency currency, int length) { public CompletableFuture<List<dev.xhyrom.lighteco.api.model.user.User>> getTopUsers(dev.xhyrom.lighteco.api.model.currency.Currency currency, int length) {

View file

@ -3,7 +3,7 @@ package dev.xhyrom.lighteco.common.task;
import dev.xhyrom.lighteco.common.model.user.User; import dev.xhyrom.lighteco.common.model.user.User;
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
import java.util.concurrent.ExecutionException; import java.util.Arrays;
public class UserSaveTask implements Runnable { public class UserSaveTask implements Runnable {
private final LightEcoPlugin plugin; private final LightEcoPlugin plugin;
@ -14,6 +14,9 @@ public class UserSaveTask implements Runnable {
@Override @Override
public void run() { public void run() {
if (this.plugin.getConfig().debug)
this.plugin.getBootstrap().getLogger().info("Saving users in task");
User[] users = this.plugin.getUserManager().values().stream() User[] users = this.plugin.getUserManager().values().stream()
.filter(User::isDirty) .filter(User::isDirty)
.toArray(User[]::new); .toArray(User[]::new);
@ -23,12 +26,16 @@ public class UserSaveTask implements Runnable {
} }
try { try {
this.plugin.getUserManager().saveUsers(users).get(); this.plugin.getStorage().saveUsersSync(
Arrays.stream(users)
.map(User::getProxy)
.toArray(dev.xhyrom.lighteco.api.model.user.User[]::new)
);
for (User user : users) { for (User user : users) {
user.setDirty(false); user.setDirty(false);
} }
} catch (InterruptedException | RuntimeException | ExecutionException e) { } catch (RuntimeException e) {
this.plugin.getBootstrap().getLogger().error("Failed to save users", e); this.plugin.getBootstrap().getLogger().error("Failed to save users", e);
} }
} }