From 26d18e255295d93017b7d4404e2bc204683dd5e7 Mon Sep 17 00:00:00 2001 From: Adrian Victor Date: Mon, 25 May 2026 19:15:30 -0300 Subject: [PATCH] Add file provider with support for saving resource to disk --- .../lib/impl/b1_7_3/B1_7_3Registrar.java | 9 ++++ .../lib/impl/b1_7_3/file/File.java | 44 +++++++++++++++++++ src/main/java/org/adrianvictor/lib/Main.java | 8 +--- .../lib/configuration/Configuration.java | 10 ----- .../provider/ConfigurationProvider.java | 5 +++ .../lib/file/provider/FileProvider.java | 13 ++++++ .../org/adrianvictor/lib/logging/Logger.java | 10 ----- .../lib/logging/provider/LoggerProvider.java | 6 +++ .../org/adrianvictor/lib/text/TextColor.java | 10 ----- .../adrianvictor/lib/text/TextColorUtils.java | 6 ++- .../lib/text/provider/TextColorProvider.java | 6 +++ .../versioning/VersionedServiceRegistrar.java | 4 ++ .../lib/impl/r1_21/R1_21Registrar.java | 9 ++++ .../lib/impl/r1_21/file/File.java | 17 +++++++ 14 files changed, 120 insertions(+), 37 deletions(-) create mode 100644 src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/file/File.java delete mode 100644 src/main/java/org/adrianvictor/lib/configuration/Configuration.java create mode 100644 src/main/java/org/adrianvictor/lib/file/provider/FileProvider.java delete mode 100644 src/main/java/org/adrianvictor/lib/logging/Logger.java delete mode 100644 src/main/java/org/adrianvictor/lib/text/TextColor.java create mode 100644 src/r1_21/java/org/adrianvictor/lib/impl/r1_21/file/File.java diff --git a/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/B1_7_3Registrar.java b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/B1_7_3Registrar.java index c9cd79b..8c7c41d 100644 --- a/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/B1_7_3Registrar.java +++ b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/B1_7_3Registrar.java @@ -1,5 +1,7 @@ package org.adrianvictor.lib.impl.b1_7_3; +import org.adrianvictor.lib.file.provider.FileProvider; +import org.adrianvictor.lib.impl.b1_7_3.file.File; import org.adrianvictor.lib.impl.b1_7_3.logging.Logger; import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; @@ -13,15 +15,22 @@ import org.bukkit.plugin.java.JavaPlugin; public class B1_7_3Registrar implements VersionedServiceRegistrar { private JavaPlugin plugin; + @Override public void setPlugin(JavaPlugin plugin) { this.plugin = plugin; } + @Override + public JavaPlugin getPlugin() { + return plugin; + } + @Override public void register(VersionedServiceFactory factory) { Logger.setPlugin(this.plugin); factory.register(ConfigurationProvider.class, "b1_7_3", Configuration::new); factory.register(TextColorProvider.class, "b1_7_3", TextColor::new); factory.register(LoggerProvider.class, "b1_7_3", Logger::new); + factory.register(FileProvider.class, "b1_7_3", () -> new File(plugin)); } } diff --git a/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/file/File.java b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/file/File.java new file mode 100644 index 0000000..731547d --- /dev/null +++ b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/file/File.java @@ -0,0 +1,44 @@ +package org.adrianvictor.lib.impl.b1_7_3.file; + +import org.adrianvictor.lib.file.provider.FileProvider; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class File implements FileProvider { + private final JavaPlugin plugin; + + public File(JavaPlugin plugin) { + this.plugin = plugin; + } + + @Override + public void saveResource(String resourcePath, boolean replace) throws IOException { + java.io.File file = new java.io.File(plugin.getDataFolder(), resourcePath); + + if (!file.exists() || replace) { + + file.getParentFile().mkdirs(); + + InputStream in = this.getClass().getResourceAsStream("/" + resourcePath); + + if (in == null) { + throw new IllegalArgumentException("Resource not found: " + resourcePath); + } + + FileOutputStream out = new FileOutputStream(file); + + byte[] buf = new byte[1024]; + int len; + + while ((len = in.read(buf)) != -1) { + out.write(buf, 0, len); + } + + in.close(); + out.close(); + } + } +} diff --git a/src/main/java/org/adrianvictor/lib/Main.java b/src/main/java/org/adrianvictor/lib/Main.java index c37c85b..e7c7760 100644 --- a/src/main/java/org/adrianvictor/lib/Main.java +++ b/src/main/java/org/adrianvictor/lib/Main.java @@ -63,8 +63,7 @@ public class Main extends JavaPlugin { } try { - org.adrianvictor.lib.logging.Logger.create(versionedServiceFactory); - pluginLogger = versionedServiceFactory.getService(LoggerProvider.class); + pluginLogger = LoggerProvider.get(); pluginLogger.info("tenkumaLib has been successfully enabled!"); } catch (Exception e) { globalLogger.severe("[tenkumaLib] Failed to initialize plugin logger: " + e.getMessage()); @@ -88,10 +87,7 @@ public class Main extends JavaPlugin { private boolean registerRegistrar(VersionedServiceRegistrar registrar) { String registrarName = registrar.getClass().getName(); try { - try { - java.lang.reflect.Method setPlugin = registrar.getClass().getMethod("setPlugin", JavaPlugin.class); - setPlugin.invoke(registrar, this); - } catch (NoSuchMethodException ignored) {} + registrar.setPlugin(this); registrar.register(versionedServiceFactory); globalLogger.info("[tenkumaLib] Registered " + registrarName); diff --git a/src/main/java/org/adrianvictor/lib/configuration/Configuration.java b/src/main/java/org/adrianvictor/lib/configuration/Configuration.java deleted file mode 100644 index 8cee615..0000000 --- a/src/main/java/org/adrianvictor/lib/configuration/Configuration.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.adrianvictor.lib.configuration; - -import org.adrianvictor.lib.versioning.VersionedServiceFactory; -import org.adrianvictor.lib.configuration.provider.ConfigurationProvider; - -public class Configuration { - public static ConfigurationProvider create(VersionedServiceFactory factory) { - return factory.getService(ConfigurationProvider.class); - } -} \ No newline at end of file diff --git a/src/main/java/org/adrianvictor/lib/configuration/provider/ConfigurationProvider.java b/src/main/java/org/adrianvictor/lib/configuration/provider/ConfigurationProvider.java index 718212e..1390133 100644 --- a/src/main/java/org/adrianvictor/lib/configuration/provider/ConfigurationProvider.java +++ b/src/main/java/org/adrianvictor/lib/configuration/provider/ConfigurationProvider.java @@ -1,5 +1,6 @@ package org.adrianvictor.lib.configuration.provider; +import org.adrianvictor.lib.Main; import org.adrianvictor.lib.configuration.exception.InvalidConfigurationException; import java.io.File; @@ -9,6 +10,10 @@ import java.util.List; import java.util.Map; public interface ConfigurationProvider { + static ConfigurationProvider get() { + return Main.getServiceFactory().getService(ConfigurationProvider.class); + } + void load(File file) throws IOException, InvalidConfigurationException; void load(String contents) throws IOException, InvalidConfigurationException; void load(Reader reader) throws IOException, InvalidConfigurationException; diff --git a/src/main/java/org/adrianvictor/lib/file/provider/FileProvider.java b/src/main/java/org/adrianvictor/lib/file/provider/FileProvider.java new file mode 100644 index 0000000..72eea80 --- /dev/null +++ b/src/main/java/org/adrianvictor/lib/file/provider/FileProvider.java @@ -0,0 +1,13 @@ +package org.adrianvictor.lib.file.provider; + +import org.adrianvictor.lib.Main; + +import java.io.IOException; + +public interface FileProvider { + static FileProvider get() { + return Main.getServiceFactory().getService(FileProvider.class); + } + + void saveResource(String resourcePath, boolean replace) throws IOException; +} diff --git a/src/main/java/org/adrianvictor/lib/logging/Logger.java b/src/main/java/org/adrianvictor/lib/logging/Logger.java deleted file mode 100644 index a62717e..0000000 --- a/src/main/java/org/adrianvictor/lib/logging/Logger.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.adrianvictor.lib.logging; - -import org.adrianvictor.lib.logging.provider.LoggerProvider; -import org.adrianvictor.lib.versioning.VersionedServiceFactory; - -public class Logger { - public static LoggerProvider create(VersionedServiceFactory factory) { - return factory.getService(LoggerProvider.class); - } -} diff --git a/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java b/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java index a3e3113..3747ad9 100644 --- a/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java +++ b/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java @@ -1,6 +1,12 @@ package org.adrianvictor.lib.logging.provider; +import org.adrianvictor.lib.Main; + public interface LoggerProvider { + static LoggerProvider get() { + return Main.getServiceFactory().getService(LoggerProvider.class); + } + void info(String text); void warning(String text); void error(String text); diff --git a/src/main/java/org/adrianvictor/lib/text/TextColor.java b/src/main/java/org/adrianvictor/lib/text/TextColor.java deleted file mode 100644 index c07ebdf..0000000 --- a/src/main/java/org/adrianvictor/lib/text/TextColor.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.adrianvictor.lib.text; - -import org.adrianvictor.lib.versioning.VersionedServiceFactory; -import org.adrianvictor.lib.text.provider.TextColorProvider; - -public class TextColor { - public static TextColorProvider create(VersionedServiceFactory factory) { - return factory.getService(TextColorProvider.class); - } -} diff --git a/src/main/java/org/adrianvictor/lib/text/TextColorUtils.java b/src/main/java/org/adrianvictor/lib/text/TextColorUtils.java index 81ba3cf..250da75 100644 --- a/src/main/java/org/adrianvictor/lib/text/TextColorUtils.java +++ b/src/main/java/org/adrianvictor/lib/text/TextColorUtils.java @@ -6,8 +6,12 @@ import org.adrianvictor.lib.text.provider.TextColorProvider; public class TextColorUtils { private final TextColorProvider provider; + public TextColorUtils() { + this.provider = TextColorProvider.get(); + } + public TextColorUtils(VersionedServiceFactory factory) { - provider = TextColor.create(factory); + this.provider = factory.getService(TextColorProvider.class); } public String formatColors(String message) { diff --git a/src/main/java/org/adrianvictor/lib/text/provider/TextColorProvider.java b/src/main/java/org/adrianvictor/lib/text/provider/TextColorProvider.java index a106e58..bd42b7f 100644 --- a/src/main/java/org/adrianvictor/lib/text/provider/TextColorProvider.java +++ b/src/main/java/org/adrianvictor/lib/text/provider/TextColorProvider.java @@ -1,5 +1,11 @@ package org.adrianvictor.lib.text.provider; +import org.adrianvictor.lib.Main; + public interface TextColorProvider { + static TextColorProvider get() { + return Main.getServiceFactory().getService(TextColorProvider.class); + } + String colorize(String colorCode); } diff --git a/src/main/java/org/adrianvictor/lib/versioning/VersionedServiceRegistrar.java b/src/main/java/org/adrianvictor/lib/versioning/VersionedServiceRegistrar.java index ee3fe52..7e2bf93 100644 --- a/src/main/java/org/adrianvictor/lib/versioning/VersionedServiceRegistrar.java +++ b/src/main/java/org/adrianvictor/lib/versioning/VersionedServiceRegistrar.java @@ -1,5 +1,9 @@ package org.adrianvictor.lib.versioning; +import org.bukkit.plugin.java.JavaPlugin; + public interface VersionedServiceRegistrar { + void setPlugin(JavaPlugin plugin); + JavaPlugin getPlugin(); void register(VersionedServiceFactory factory); } diff --git a/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/R1_21Registrar.java b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/R1_21Registrar.java index 1b7e752..4803ad6 100644 --- a/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/R1_21Registrar.java +++ b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/R1_21Registrar.java @@ -1,5 +1,7 @@ package org.adrianvictor.lib.impl.r1_21; +import org.adrianvictor.lib.file.provider.FileProvider; +import org.adrianvictor.lib.impl.r1_21.file.File; import org.adrianvictor.lib.impl.r1_21.logging.Logger; import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; @@ -13,15 +15,22 @@ import org.bukkit.plugin.java.JavaPlugin; public class R1_21Registrar implements VersionedServiceRegistrar { private JavaPlugin plugin; + @Override public void setPlugin(JavaPlugin plugin) { this.plugin = plugin; } + @Override + public JavaPlugin getPlugin() { + return plugin; + } + @Override public void register(VersionedServiceFactory factory) { Logger.setPlugin(this.plugin); factory.register(ConfigurationProvider.class, "r1_1", Configuration::new); factory.register(TextColorProvider.class, "r1_16_5", TextColor::new); factory.register(LoggerProvider.class, "r1_21", Logger::new); + factory.register(FileProvider.class, "r1_3", () -> new File(plugin)); } } diff --git a/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/file/File.java b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/file/File.java new file mode 100644 index 0000000..26bf88c --- /dev/null +++ b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/file/File.java @@ -0,0 +1,17 @@ +package org.adrianvictor.lib.impl.r1_21.file; + +import org.adrianvictor.lib.file.provider.FileProvider; +import org.bukkit.plugin.java.JavaPlugin; + +public class File implements FileProvider { + private final JavaPlugin plugin; + + public File(JavaPlugin plugin) { + this.plugin = plugin; + } + + @Override + public void saveResource(String resourcePath, boolean replace) { + plugin.saveResource(resourcePath, replace); + } +}