diff --git a/README.md b/README.md index cf24208..3a26c7e 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ both ways. #### Full sample (with comments) ```java -import dev.spexx.configurationAPI.manager.ConfigManager; +import dev.spexx.configurationAPI.api.manager.ConfigManager; // ConfigManager takes a plugin instance, should only // be initialized once! @@ -64,36 +64,45 @@ ConfigManager configManager = new ConfigManager(this); // Which means you should NOT use saveDefaultConfig() / saveConfig() // anywhere in your plugin. -// This is where you want the config from the plugin resources to be saved. -File myPluginConfigDestination = new File(getDataFolder(), "config.yml"); + // This is where you want the config from the plugin resources to be saved. + File myPluginConfigDestination = new File(getDataFolder(), "config.yml"); // 2nd parameter, "config.yml" is the path inside the jar. Should really leave that as it is, only // change your file name. 3rd parameter is your plugin instance - so we know from which plugin we're // pulling the config. -configManager.registerFromJar(myPluginConfigDestination, "config.yml", this); +configManager. + + registerFromJar(myPluginConfigDestination, "config.yml",this); // I recommend putting all of this in your onEnable, at the end don't forget to // actually start the watch service. Note that you can also dynamically create files during // runtime, you don't have to do everything in onEnable. -manager.start(); +manager. + + start(); -// Sample 2 - registering custom yaml files, except not from plugin jar + // Sample 2 - registering custom yaml files, except not from plugin jar // This is fairly simple! -YamlConfig myCustomConfig = manager.register( - new File(getDataFolder(), "data.yml") -); - + YamlConfig myCustomConfig = manager.register( + new File(getDataFolder(), "data.yml") + ); + // What you're doing here is creating a file, in your plugin folder - getDataFolder(), // and you're naming it 'data.yml', that's about it. // You can write to it: -myCustomConfig.get().set("hello", "world"); +myCustomConfig. + + get(). + + set("hello","world"); -// Read from it (get() - returns the latest internally cached config, + // Read from it (get() - returns the latest internally cached config, // basically, the latest config that matches the file on your disk) // with get(), you get raw YamlConfiguration access, so you're able to do // anything. If you do change anything in the file don't forget to // save it in the end: myCustomConfig.save(), api will handle the rest. -@Nullable String myValue = myCustomConfig.get().getString("something.here"); + @Nullable + String myValue = myCustomConfig.get().getString("something.here"); // --- // If you find this confusing, there is javadoc at every method / public variable. So you won't be lost! diff --git a/src/main/java/dev/spexx/configurationAPI/configuration/yaml/YamlConfig.java b/src/main/java/dev/spexx/configurationAPI/api/config/yaml/YamlConfig.java similarity index 94% rename from src/main/java/dev/spexx/configurationAPI/configuration/yaml/YamlConfig.java rename to src/main/java/dev/spexx/configurationAPI/api/config/yaml/YamlConfig.java index 9153ede..87ea766 100644 --- a/src/main/java/dev/spexx/configurationAPI/configuration/yaml/YamlConfig.java +++ b/src/main/java/dev/spexx/configurationAPI/api/config/yaml/YamlConfig.java @@ -1,10 +1,10 @@ -package dev.spexx.configurationAPI.configuration.yaml; +package dev.spexx.configurationAPI.api.config.yaml; -import dev.spexx.configurationAPI.exceptions.ConfigException; -import dev.spexx.configurationAPI.exceptions.ConfigFileException; -import dev.spexx.configurationAPI.exceptions.ConfigParseException; -import dev.spexx.configurationAPI.exceptions.ConfigPermissionException; -import dev.spexx.configurationAPI.utils.FileChecksum; +import dev.spexx.configurationAPI.api.exceptions.ConfigException; +import dev.spexx.configurationAPI.api.exceptions.ConfigFileException; +import dev.spexx.configurationAPI.api.exceptions.ConfigParseException; +import dev.spexx.configurationAPI.api.exceptions.ConfigPermissionException; +import dev.spexx.configurationAPI.api.utils.FileChecksum; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/configuration/yaml/YamlConfigWatcher.java b/src/main/java/dev/spexx/configurationAPI/api/config/yaml/YamlConfigWatcher.java similarity index 97% rename from src/main/java/dev/spexx/configurationAPI/configuration/yaml/YamlConfigWatcher.java rename to src/main/java/dev/spexx/configurationAPI/api/config/yaml/YamlConfigWatcher.java index b4e34e9..ec587d4 100644 --- a/src/main/java/dev/spexx/configurationAPI/configuration/yaml/YamlConfigWatcher.java +++ b/src/main/java/dev/spexx/configurationAPI/api/config/yaml/YamlConfigWatcher.java @@ -1,8 +1,8 @@ -package dev.spexx.configurationAPI.configuration.yaml; +package dev.spexx.configurationAPI.api.config.yaml; -import dev.spexx.configurationAPI.events.ConfigReloadEvent; -import dev.spexx.configurationAPI.exceptions.ConfigException; -import dev.spexx.configurationAPI.utils.FileChecksum; +import dev.spexx.configurationAPI.api.event.ConfigReloadEvent; +import dev.spexx.configurationAPI.api.exceptions.ConfigException; +import dev.spexx.configurationAPI.api.utils.FileChecksum; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/events/ConfigReloadEvent.java b/src/main/java/dev/spexx/configurationAPI/api/event/ConfigReloadEvent.java similarity index 98% rename from src/main/java/dev/spexx/configurationAPI/events/ConfigReloadEvent.java rename to src/main/java/dev/spexx/configurationAPI/api/event/ConfigReloadEvent.java index b0f68ee..78cd22b 100644 --- a/src/main/java/dev/spexx/configurationAPI/events/ConfigReloadEvent.java +++ b/src/main/java/dev/spexx/configurationAPI/api/event/ConfigReloadEvent.java @@ -1,4 +1,4 @@ -package dev.spexx.configurationAPI.events; +package dev.spexx.configurationAPI.api.event; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.Event; diff --git a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigException.java b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigException.java similarity index 96% rename from src/main/java/dev/spexx/configurationAPI/exceptions/ConfigException.java rename to src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigException.java index 103feac..9ac3e98 100644 --- a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigException.java +++ b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigException.java @@ -1,4 +1,4 @@ -package dev.spexx.configurationAPI.exceptions; +package dev.spexx.configurationAPI.api.exceptions; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigFileException.java b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigFileException.java similarity index 97% rename from src/main/java/dev/spexx/configurationAPI/exceptions/ConfigFileException.java rename to src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigFileException.java index dc07cb3..5f1b7bc 100644 --- a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigFileException.java +++ b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigFileException.java @@ -1,4 +1,4 @@ -package dev.spexx.configurationAPI.exceptions; +package dev.spexx.configurationAPI.api.exceptions; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigParseException.java b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigParseException.java similarity index 96% rename from src/main/java/dev/spexx/configurationAPI/exceptions/ConfigParseException.java rename to src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigParseException.java index f11b05b..fce33a9 100644 --- a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigParseException.java +++ b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigParseException.java @@ -1,4 +1,4 @@ -package dev.spexx.configurationAPI.exceptions; +package dev.spexx.configurationAPI.api.exceptions; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigPermissionException.java b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigPermissionException.java similarity index 94% rename from src/main/java/dev/spexx/configurationAPI/exceptions/ConfigPermissionException.java rename to src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigPermissionException.java index fa7f006..39ef02b 100644 --- a/src/main/java/dev/spexx/configurationAPI/exceptions/ConfigPermissionException.java +++ b/src/main/java/dev/spexx/configurationAPI/api/exceptions/ConfigPermissionException.java @@ -1,4 +1,4 @@ -package dev.spexx.configurationAPI.exceptions; +package dev.spexx.configurationAPI.api.exceptions; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/manager/ConfigManager.java b/src/main/java/dev/spexx/configurationAPI/api/manager/ConfigManager.java similarity index 96% rename from src/main/java/dev/spexx/configurationAPI/manager/ConfigManager.java rename to src/main/java/dev/spexx/configurationAPI/api/manager/ConfigManager.java index 8067366..46516d6 100644 --- a/src/main/java/dev/spexx/configurationAPI/manager/ConfigManager.java +++ b/src/main/java/dev/spexx/configurationAPI/api/manager/ConfigManager.java @@ -1,8 +1,8 @@ -package dev.spexx.configurationAPI.manager; +package dev.spexx.configurationAPI.api.manager; -import dev.spexx.configurationAPI.configuration.yaml.YamlConfig; -import dev.spexx.configurationAPI.configuration.yaml.YamlConfigWatcher; -import dev.spexx.configurationAPI.exceptions.ConfigException; +import dev.spexx.configurationAPI.api.config.yaml.YamlConfig; +import dev.spexx.configurationAPI.api.config.yaml.YamlConfigWatcher; +import dev.spexx.configurationAPI.api.exceptions.ConfigException; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/utils/FileChecksum.java b/src/main/java/dev/spexx/configurationAPI/api/utils/FileChecksum.java similarity index 98% rename from src/main/java/dev/spexx/configurationAPI/utils/FileChecksum.java rename to src/main/java/dev/spexx/configurationAPI/api/utils/FileChecksum.java index 53089e9..8028219 100644 --- a/src/main/java/dev/spexx/configurationAPI/utils/FileChecksum.java +++ b/src/main/java/dev/spexx/configurationAPI/api/utils/FileChecksum.java @@ -1,4 +1,4 @@ -package dev.spexx.configurationAPI.utils; +package dev.spexx.configurationAPI.api.utils; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/dev/spexx/configurationAPI/bootstrap/ConfigurationBootstrap.java b/src/main/java/dev/spexx/configurationAPI/bootstrap/ConfigurationBootstrap.java new file mode 100644 index 0000000..0806160 --- /dev/null +++ b/src/main/java/dev/spexx/configurationAPI/bootstrap/ConfigurationBootstrap.java @@ -0,0 +1,40 @@ +package dev.spexx.configurationAPI.bootstrap; + +import io.papermc.paper.plugin.bootstrap.BootstrapContext; +import io.papermc.paper.plugin.bootstrap.PluginBootstrap; +import org.jetbrains.annotations.NotNull; + +/** + * Bootstrap entry point for the ConfigurationAPI plugin. + * + *

This class is invoked during the early plugin bootstrap phase, + * before the plugin is fully loaded and enabled.

+ * + *

It can be used to perform early initialization logic such as + * preparing resources, validating environment state, or influencing + * plugin loading behavior.

+ * + *

Note that the Bukkit API is not fully available at this stage.

+ * + * @since 1.3.0 + */ +public class ConfigurationBootstrap implements PluginBootstrap { + + /** + * Creates a new ConfigurationBootstrap instance. + * + * @since 1.3.0 + */ + public ConfigurationBootstrap() { + } + + /** + * Called during the bootstrap phase of plugin initialization. + * + * @param context the bootstrap context providing access to plugin metadata and logging + */ + @Override + public void bootstrap(@NotNull BootstrapContext context) { + // no-op (reserved for future use) + } +} \ No newline at end of file diff --git a/src/main/java/dev/spexx/configurationAPI/loader/ConfigurationLoader.java b/src/main/java/dev/spexx/configurationAPI/loader/ConfigurationLoader.java new file mode 100644 index 0000000..1505580 --- /dev/null +++ b/src/main/java/dev/spexx/configurationAPI/loader/ConfigurationLoader.java @@ -0,0 +1,39 @@ +package dev.spexx.configurationAPI.loader; + +import io.papermc.paper.plugin.loader.PluginClasspathBuilder; +import io.papermc.paper.plugin.loader.PluginLoader; +import org.jetbrains.annotations.NotNull; + +/** + * Classpath loader for the ConfigurationAPI plugin. + * + *

This class is responsible for modifying the plugin's classpath + * during the loading phase.

+ * + *

It can be used to add external libraries or dependencies to the + * plugin classloader before the plugin is initialized.

+ * + *

Currently, no additional libraries are injected.

+ * + * @since 1.3.0 + */ +public class ConfigurationLoader implements PluginLoader { + + /** + * Creates a new ConfigurationLoader instance. + * + * @since 1.3.0 + */ + public ConfigurationLoader() { + } + + /** + * Called when the plugin classloader is being constructed. + * + * @param builder the classpath builder used to modify the plugin classpath + */ + @Override + public void classloader(@NotNull PluginClasspathBuilder builder) { + // no-op (reserved for future use) + } +} \ No newline at end of file diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 997a48a..1cb0c15 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -3,7 +3,10 @@ description: "Lightweight YAML config API with automatic reload and event-driven version: '1.3.0' main: dev.spexx.configurationAPI.ConfigurationAPI -api-version: '1.21.11' +bootstrapper: dev.spexx.configurationAPI.bootstrap.ConfigurationBootstrap +loader: dev.spexx.configurationAPI.bootstrap.ConfigurationLoader + +api-version: '21.1.1' load: POSTWORLD authors: [ Spexx ]