Skip to content

Commit

Permalink
feat: improved configuration handling
Browse files Browse the repository at this point in the history
  • Loading branch information
4drian3d committed Mar 11, 2023
1 parent 63f7af9 commit f87051c
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 61 deletions.
Expand Up @@ -17,40 +17,68 @@

package io.github._4drian3d.authmevelocity.common.configuration;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.atomic.AtomicReference;

import org.spongepowered.configurate.CommentedConfigurationNode;
import org.spongepowered.configurate.ConfigurateException;
import org.spongepowered.configurate.hocon.HoconConfigurationLoader;

public final class ConfigurationContainer<C> {
private C config;
private final AtomicReference<C> config;
private final HoconConfigurationLoader loader;
private final Class<C> clazz;

public ConfigurationContainer(
private ConfigurationContainer(
final C config,
final Class<C> clazz,
final HoconConfigurationLoader loader
) {
this.config = config;
this.config = new AtomicReference<>(config);
this.loader = loader;
this.clazz = clazz;
}

public C get() {
return this.config;
return this.config.get();
}

public CompletableFuture<Void> reload() {
return CompletableFuture.runAsync(() -> {
try {
final CommentedConfigurationNode node = loader.load();
config = node.get(clazz);
config.set(node.get(clazz));
} catch (ConfigurateException exception) {
throw new CompletionException("Could not load config.conf file", exception);
}
});
}

public static <C> ConfigurationContainer<C> load(Path path, Class<C> clazz) throws IOException {
path = path.resolve("config.conf");
final boolean firstCreation = Files.notExists(path);
final HoconConfigurationLoader loader = HoconConfigurationLoader.builder()
.defaultOptions(opts -> opts
.shouldCopyDefaults(true)
.header("""
AuthMeVelocity | by Glyart & 4drian3d
""")
)
.path(path)
.build();


final CommentedConfigurationNode node = loader.load();
final C config = node.get(clazz);
if (firstCreation) {
node.set(clazz, config);
loader.save(node);
}

return new ConfigurationContainer<>(config, clazz, loader);
}
}

This file was deleted.

Expand Up @@ -22,7 +22,6 @@
import io.github._4drian3d.authmevelocity.common.LibsManager;
import io.github._4drian3d.authmevelocity.common.MessageType;
import io.github._4drian3d.authmevelocity.common.configuration.ConfigurationContainer;
import io.github._4drian3d.authmevelocity.common.configuration.Loader;
import io.github._4drian3d.authmevelocity.common.configuration.PaperConfiguration;
import io.github._4drian3d.authmevelocity.paper.listeners.AuthMeListener;
import io.github._4drian3d.authmevelocity.paper.listeners.MessageListener;
Expand All @@ -44,7 +43,7 @@ public void onEnable() {
new LibsManager(new BukkitLibraryManager(this)).loadLibraries();

try {
this.config = Loader.loadMainConfig(getDataFolder().toPath(), PaperConfiguration.class);
this.config = ConfigurationContainer.load(getDataFolder().toPath(), PaperConfiguration.class);
} catch (Exception e) {
getLogger().log(Level.SEVERE, "Could not load config.conf file", e);
getServer().getPluginManager().disablePlugin(this);
Expand Down
Expand Up @@ -38,7 +38,6 @@
import io.github._4drian3d.authmevelocity.common.Constants;
import io.github._4drian3d.authmevelocity.common.LibsManager;
import io.github._4drian3d.authmevelocity.common.configuration.ConfigurationContainer;
import io.github._4drian3d.authmevelocity.common.configuration.Loader;
import io.github._4drian3d.authmevelocity.common.configuration.ProxyConfiguration;
import io.github._4drian3d.authmevelocity.velocity.commands.AuthMeCommand;
import io.github._4drian3d.authmevelocity.velocity.listener.ConnectListener;
Expand Down Expand Up @@ -110,7 +109,7 @@ public void onProxyInitialization(ProxyInitializeEvent event) {
libraries.loadLibraries();

try {
this.config = Loader.loadMainConfig(pluginDirectory, ProxyConfiguration.class);
this.config = ConfigurationContainer.load(pluginDirectory, ProxyConfiguration.class);
} catch (Exception e) {
logger.error("Could not load config.conf file", e);
return;
Expand Down

0 comments on commit f87051c

Please sign in to comment.