Add file provider with support for saving resource to disk

This commit is contained in:
天クマ 2026-05-25 19:15:30 -03:00
commit 26d18e2552
14 changed files with 120 additions and 37 deletions

View file

@ -1,5 +1,7 @@
package org.adrianvictor.lib.impl.b1_7_3; 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.impl.b1_7_3.logging.Logger;
import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar;
@ -13,15 +15,22 @@ import org.bukkit.plugin.java.JavaPlugin;
public class B1_7_3Registrar implements VersionedServiceRegistrar { public class B1_7_3Registrar implements VersionedServiceRegistrar {
private JavaPlugin plugin; private JavaPlugin plugin;
@Override
public void setPlugin(JavaPlugin plugin) { public void setPlugin(JavaPlugin plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
@Override
public JavaPlugin getPlugin() {
return plugin;
}
@Override @Override
public void register(VersionedServiceFactory factory) { public void register(VersionedServiceFactory factory) {
Logger.setPlugin(this.plugin); Logger.setPlugin(this.plugin);
factory.register(ConfigurationProvider.class, "b1_7_3", Configuration::new); factory.register(ConfigurationProvider.class, "b1_7_3", Configuration::new);
factory.register(TextColorProvider.class, "b1_7_3", TextColor::new); factory.register(TextColorProvider.class, "b1_7_3", TextColor::new);
factory.register(LoggerProvider.class, "b1_7_3", Logger::new); factory.register(LoggerProvider.class, "b1_7_3", Logger::new);
factory.register(FileProvider.class, "b1_7_3", () -> new File(plugin));
} }
} }

View file

@ -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();
}
}
}

View file

@ -63,8 +63,7 @@ public class Main extends JavaPlugin {
} }
try { try {
org.adrianvictor.lib.logging.Logger.create(versionedServiceFactory); pluginLogger = LoggerProvider.get();
pluginLogger = versionedServiceFactory.getService(LoggerProvider.class);
pluginLogger.info("tenkumaLib has been successfully enabled!"); pluginLogger.info("tenkumaLib has been successfully enabled!");
} catch (Exception e) { } catch (Exception e) {
globalLogger.severe("[tenkumaLib] Failed to initialize plugin logger: " + e.getMessage()); globalLogger.severe("[tenkumaLib] Failed to initialize plugin logger: " + e.getMessage());
@ -88,10 +87,7 @@ public class Main extends JavaPlugin {
private boolean registerRegistrar(VersionedServiceRegistrar registrar) { private boolean registerRegistrar(VersionedServiceRegistrar registrar) {
String registrarName = registrar.getClass().getName(); String registrarName = registrar.getClass().getName();
try { try {
try { registrar.setPlugin(this);
java.lang.reflect.Method setPlugin = registrar.getClass().getMethod("setPlugin", JavaPlugin.class);
setPlugin.invoke(registrar, this);
} catch (NoSuchMethodException ignored) {}
registrar.register(versionedServiceFactory); registrar.register(versionedServiceFactory);
globalLogger.info("[tenkumaLib] Registered " + registrarName); globalLogger.info("[tenkumaLib] Registered " + registrarName);

View file

@ -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);
}
}

View file

@ -1,5 +1,6 @@
package org.adrianvictor.lib.configuration.provider; package org.adrianvictor.lib.configuration.provider;
import org.adrianvictor.lib.Main;
import org.adrianvictor.lib.configuration.exception.InvalidConfigurationException; import org.adrianvictor.lib.configuration.exception.InvalidConfigurationException;
import java.io.File; import java.io.File;
@ -9,6 +10,10 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public interface ConfigurationProvider { public interface ConfigurationProvider {
static ConfigurationProvider get() {
return Main.getServiceFactory().getService(ConfigurationProvider.class);
}
void load(File file) throws IOException, InvalidConfigurationException; void load(File file) throws IOException, InvalidConfigurationException;
void load(String contents) throws IOException, InvalidConfigurationException; void load(String contents) throws IOException, InvalidConfigurationException;
void load(Reader reader) throws IOException, InvalidConfigurationException; void load(Reader reader) throws IOException, InvalidConfigurationException;

View file

@ -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;
}

View file

@ -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);
}
}

View file

@ -1,6 +1,12 @@
package org.adrianvictor.lib.logging.provider; package org.adrianvictor.lib.logging.provider;
import org.adrianvictor.lib.Main;
public interface LoggerProvider { public interface LoggerProvider {
static LoggerProvider get() {
return Main.getServiceFactory().getService(LoggerProvider.class);
}
void info(String text); void info(String text);
void warning(String text); void warning(String text);
void error(String text); void error(String text);

View file

@ -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);
}
}

View file

@ -6,8 +6,12 @@ import org.adrianvictor.lib.text.provider.TextColorProvider;
public class TextColorUtils { public class TextColorUtils {
private final TextColorProvider provider; private final TextColorProvider provider;
public TextColorUtils() {
this.provider = TextColorProvider.get();
}
public TextColorUtils(VersionedServiceFactory factory) { public TextColorUtils(VersionedServiceFactory factory) {
provider = TextColor.create(factory); this.provider = factory.getService(TextColorProvider.class);
} }
public String formatColors(String message) { public String formatColors(String message) {

View file

@ -1,5 +1,11 @@
package org.adrianvictor.lib.text.provider; package org.adrianvictor.lib.text.provider;
import org.adrianvictor.lib.Main;
public interface TextColorProvider { public interface TextColorProvider {
static TextColorProvider get() {
return Main.getServiceFactory().getService(TextColorProvider.class);
}
String colorize(String colorCode); String colorize(String colorCode);
} }

View file

@ -1,5 +1,9 @@
package org.adrianvictor.lib.versioning; package org.adrianvictor.lib.versioning;
import org.bukkit.plugin.java.JavaPlugin;
public interface VersionedServiceRegistrar { public interface VersionedServiceRegistrar {
void setPlugin(JavaPlugin plugin);
JavaPlugin getPlugin();
void register(VersionedServiceFactory factory); void register(VersionedServiceFactory factory);
} }

View file

@ -1,5 +1,7 @@
package org.adrianvictor.lib.impl.r1_21; 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.impl.r1_21.logging.Logger;
import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar;
@ -13,15 +15,22 @@ import org.bukkit.plugin.java.JavaPlugin;
public class R1_21Registrar implements VersionedServiceRegistrar { public class R1_21Registrar implements VersionedServiceRegistrar {
private JavaPlugin plugin; private JavaPlugin plugin;
@Override
public void setPlugin(JavaPlugin plugin) { public void setPlugin(JavaPlugin plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
@Override
public JavaPlugin getPlugin() {
return plugin;
}
@Override @Override
public void register(VersionedServiceFactory factory) { public void register(VersionedServiceFactory factory) {
Logger.setPlugin(this.plugin); Logger.setPlugin(this.plugin);
factory.register(ConfigurationProvider.class, "r1_1", Configuration::new); factory.register(ConfigurationProvider.class, "r1_1", Configuration::new);
factory.register(TextColorProvider.class, "r1_16_5", TextColor::new); factory.register(TextColorProvider.class, "r1_16_5", TextColor::new);
factory.register(LoggerProvider.class, "r1_21", Logger::new); factory.register(LoggerProvider.class, "r1_21", Logger::new);
factory.register(FileProvider.class, "r1_3", () -> new File(plugin));
} }
} }

View file

@ -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);
}
}