From 366860ac55e0a149f449dfbfb6ad2dcf09c6f2ff Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Fri, 5 Jan 2024 21:19:19 +0100 Subject: [PATCH] Add Configuration files --- .../configuration/Configuration.java | 4 + .../configuration/ConfigurationContainer.java | 83 +++++++++++++++++++ .../configuration/DatabaseConfiguration.java | 19 +++++ .../configuration/IslandConfiguration.java | 11 +++ .../configuration/MessageConfiguration.java | 10 +++ .../configuration/PluginConfiguration.java | 30 +++++++ 6 files changed, 157 insertions(+) create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/configuration/Configuration.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/configuration/ConfigurationContainer.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/configuration/DatabaseConfiguration.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java create mode 100644 plugin/src/main/java/com/alttd/cometskyblock/configuration/PluginConfiguration.java diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/Configuration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/Configuration.java new file mode 100644 index 0000000..e2ab91a --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/Configuration.java @@ -0,0 +1,4 @@ +package com.alttd.cometskyblock.configuration; + +public interface Configuration { +} \ No newline at end of file diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/ConfigurationContainer.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/ConfigurationContainer.java new file mode 100644 index 0000000..055dc8e --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/ConfigurationContainer.java @@ -0,0 +1,83 @@ +package com.alttd.cometskyblock.configuration; + +import org.jetbrains.annotations.NotNull; +import org.spongepowered.configurate.CommentedConfigurationNode; +import org.spongepowered.configurate.ConfigurateException; +import org.spongepowered.configurate.yaml.NodeStyle; +import org.spongepowered.configurate.yaml.YamlConfigurationLoader; + +import java.nio.file.Path; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicReference; +import org.slf4j.Logger; + +public class ConfigurationContainer { + private final AtomicReference config; + private final YamlConfigurationLoader loader; + private final CommentedConfigurationNode node; + private final Class clazz; + private final Logger logger; + + private ConfigurationContainer(final C config, final Class clazz, final YamlConfigurationLoader loader, final CommentedConfigurationNode node, final Logger logger) { + this.config = new AtomicReference<>(config); + this.loader = loader; + this.node = node; + this.clazz = clazz; + this.logger = logger; + } + + public CompletableFuture reload() { + return CompletableFuture.supplyAsync(() -> { + try { + final CommentedConfigurationNode node = loader.load(); + C newConfig = node.get(clazz); + node.set(clazz, newConfig); + loader.save(node); + config.set(newConfig); + return true; + } catch (ConfigurateException exception) { + logger.error("Could not reload {} configuration file", clazz.getSimpleName(), exception); + return false; + } + }); + } + + public CompletableFuture save() { + return CompletableFuture.supplyAsync(() -> { + try { + node.set(clazz, get()); + loader.save(node); + return true; + } catch (ConfigurateException exception) { + logger.error("Could not reload {} configuration file", clazz.getSimpleName(), exception); + return false; + } + }); + } + + public @NotNull C get() { + return this.config.get(); + } + + public static ConfigurationContainer load(final Logger logger, final Path path, final Class clazz, final String file) { + final YamlConfigurationLoader loader = YamlConfigurationLoader.builder() + .defaultOptions(options -> options + .shouldCopyDefaults(true) + .header("") + ) + .path(path.resolve(file + ".yml")) + .nodeStyle(NodeStyle.BLOCK) + .build(); + try { + final CommentedConfigurationNode node = loader.load(); + final C config = node.get(clazz); + node.set(clazz, config); + loader.save(node); + return new ConfigurationContainer<>(config, clazz, loader, node, logger); + } catch (ConfigurateException exception){ + logger.error("Could not load {} configuration file", clazz.getSimpleName(), exception); + return null; + } + } + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/DatabaseConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/DatabaseConfiguration.java new file mode 100644 index 0000000..869551c --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/DatabaseConfiguration.java @@ -0,0 +1,19 @@ +package com.alttd.cometskyblock.configuration; + + +import lombok.Getter; +import org.spongepowered.configurate.objectmapping.ConfigSerializable; + +@ConfigSerializable +@Getter +@SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"}) +public class DatabaseConfiguration implements Configuration { + + private String ip = "0.0.0.0"; + private String port = "3306"; + private String database = "CometSkyBlock"; + private String user = "root"; + private String password = "toor"; + private String maximumConnections = "10"; + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java new file mode 100644 index 0000000..6c5644a --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/IslandConfiguration.java @@ -0,0 +1,11 @@ +package com.alttd.cometskyblock.configuration; + +import lombok.Getter; +import org.spongepowered.configurate.objectmapping.ConfigSerializable; + +@ConfigSerializable +@Getter +@SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"}) +public class IslandConfiguration implements Configuration { + +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java new file mode 100644 index 0000000..e129db6 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java @@ -0,0 +1,10 @@ +package com.alttd.cometskyblock.configuration; + +import lombok.Getter; +import org.spongepowered.configurate.objectmapping.ConfigSerializable; + +@ConfigSerializable +@Getter +@SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"}) +public class MessageConfiguration implements Configuration { +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/PluginConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/PluginConfiguration.java new file mode 100644 index 0000000..fed27d4 --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/PluginConfiguration.java @@ -0,0 +1,30 @@ +package com.alttd.cometskyblock.configuration; + +import lombok.Getter; + +import org.spongepowered.configurate.objectmapping.ConfigSerializable; +import org.spongepowered.configurate.objectmapping.meta.Comment; + +@ConfigSerializable +@Getter +@SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"}) +public class PluginConfiguration implements Configuration { + + @Comment("Generate debug messages") + private boolean debug = true; + + private MasterWorldGenerator masterWorldGenerator = new MasterWorldGenerator(); + @ConfigSerializable @Getter + public static class MasterWorldGenerator { + + private int centerX = 0; + private int centerZ = 0; + private int size = 100; + + private int spawnX = 0; + private int spawnY = 63; + private int spawnz = 0; + + } + +}