diff --git a/.gitignore b/.gitignore index df892ec..741d4ab 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,6 @@ out/ # Ignore Gradle build output directory build -run/ \ No newline at end of file +run/ + +*.log \ No newline at end of file diff --git a/META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar b/META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar deleted file mode 100644 index 8f5e531..0000000 --- a/META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar +++ /dev/null @@ -1 +0,0 @@ -org.adrianvictor.lib.impl.r1_21.R1_21Registrar \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 7db6dbf..711c583 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "org.adrianvictor" -version = System.getenv("VERSION") ?: "unknown" +version = "2.0" val buildEnv = System.getenv("BUILD_CHANNEL") ?: if (System.getenv("JITPACK") != null) "jitpack" else "local" @@ -60,8 +60,8 @@ mcVersions.forEach { ver -> /* ----------------------------------------- */ dependencies { - add("compileOnly", "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") - add("r1_21CompileOnly", "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") + add("compileOnly", "io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT") + add("r1_21CompileOnly", "io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT") add("b1_7_3CompileOnly", files("libs/craftbukkit-1060.jar")) } @@ -103,22 +103,43 @@ val prepareServiceFiles = tasks.register("prepareServiceFiles") { doLast { val registrars = mutableSetOf() inputFiles.forEach { file -> - println("Checking file: ${file.absolutePath}, exists: ${file.exists()}") if (file.exists()) { - val lines = file.readLines().filter { it.isNotBlank() } - println("Found lines: $lines") - registrars.addAll(lines) + file.readLines().forEach { line -> + val trimmed = line.trim() + if (trimmed.isNotEmpty()) { + registrars.add(trimmed) + } + } } } val mergedFile = outputDir.get().file(serviceFile).asFile mergedFile.parentFile.mkdirs() - mergedFile.writeText(registrars.joinToString("\n")) + mergedFile.writeText(registrars.joinToString("\n") + "\n") println("Merged service file content: \n${registrars.joinToString("\n")}") } } +tasks.named("jar") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(sourceSets["main"].output) + mcVersions.forEach { ver -> + from(sourceSets[ver].output) { + exclude("META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar") + } + } + from(prepareServiceFiles) + + manifest { + attributes( + "Implemented-Versions" to mcVersions.joinToString(",") + ) + } +} + tasks.register("bundleAll") { + dependsOn("jar") + // This is now redundant but we keep it for compatibility with previous instructions from(sourceSets["main"].output) mcVersions.forEach { ver -> from(sourceSets[ver].output) { @@ -127,7 +148,7 @@ tasks.register("bundleAll") { } // Include the merged service file - from(prepareServiceFiles.get().outputs.files.singleFile) + from(prepareServiceFiles) duplicatesStrategy = DuplicatesStrategy.EXCLUDE 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 2475ca3..c9cd79b 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,20 +1,27 @@ package org.adrianvictor.lib.impl.b1_7_3; +import org.adrianvictor.lib.impl.b1_7_3.logging.Logger; import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; import org.adrianvictor.lib.configuration.provider.ConfigurationProvider; import org.adrianvictor.lib.impl.b1_7_3.configuration.Configuration; import org.adrianvictor.lib.text.provider.TextColorProvider; import org.adrianvictor.lib.impl.b1_7_3.text.TextColor; +import org.adrianvictor.lib.logging.provider.LoggerProvider; +import org.bukkit.plugin.java.JavaPlugin; public class B1_7_3Registrar implements VersionedServiceRegistrar { + private JavaPlugin plugin; + + public void setPlugin(JavaPlugin plugin) { + this.plugin = 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); - - // Register for b1_8_compat as well, assuming compatibility - factory.register(ConfigurationProvider.class, "b1_8_compat", Configuration::new); - factory.register(TextColorProvider.class, "b1_8_compat", TextColor::new); + factory.register(LoggerProvider.class, "b1_7_3", Logger::new); } } diff --git a/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/logging/Logger.java b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/logging/Logger.java new file mode 100644 index 0000000..183b2ab --- /dev/null +++ b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/logging/Logger.java @@ -0,0 +1,38 @@ +package org.adrianvictor.lib.impl.b1_7_3.logging; + +import org.adrianvictor.lib.logging.provider.LoggerProvider; +import org.bukkit.plugin.java.JavaPlugin; + +public class Logger implements LoggerProvider { + private static JavaPlugin plugin; + private java.util.logging.Logger logger; + private String prefix = "[tenkumaLib] "; + + public static void setPlugin(JavaPlugin p) { + plugin = p; + } + + public Logger() { + if (plugin != null) { + logger = plugin.getServer().getLogger(); + prefix = "[" + plugin.getDescription().getName() + "] "; + } else { + logger = java.util.logging.Logger.getLogger("Minecraft"); + } + } + + @Override + public void info(String text) { + logger.info(prefix + text); + } + + @Override + public void warning(String text) { + logger.warning(prefix + text); + } + + @Override + public void error(String text) { + logger.severe(prefix + text); + } +} diff --git a/src/main/java/org/adrianvictor/lib/Main.java b/src/main/java/org/adrianvictor/lib/Main.java index edb5c75..c37c85b 100644 --- a/src/main/java/org/adrianvictor/lib/Main.java +++ b/src/main/java/org/adrianvictor/lib/Main.java @@ -1,60 +1,113 @@ package org.adrianvictor.lib; +import org.adrianvictor.lib.logging.provider.LoggerProvider; import org.adrianvictor.lib.versioning.DefaultVersionedServiceFactory; +import org.adrianvictor.lib.versioning.MinecraftVersion; import org.adrianvictor.lib.versioning.VersionMatcher; import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; -import java.util.ServiceLoader; +import java.util.logging.Logger; public class Main extends JavaPlugin { - static { - System.out.println("Main class loaded!"); - } + private static Logger globalLogger; + private static LoggerProvider pluginLogger; + private static DefaultVersionedServiceFactory versionedServiceFactory; - private static VersionedServiceFactory versionedServiceFactory; - private static VersionMatcher versionMatcher; + public static VersionedServiceFactory getServiceFactory() { + return versionedServiceFactory; + } @Override public void onEnable() { - versionMatcher = new VersionMatcher(); + globalLogger = Bukkit.getServer().getLogger(); + globalLogger.info("[tenkumaLib] Enabling tenkumaLib v2.0..."); + + VersionMatcher versionMatcher = new VersionMatcher(); versionedServiceFactory = new DefaultVersionedServiceFactory(versionMatcher); - ClassLoader cl = getClassLoader(); - getLogger().info("Plugin ClassLoader: " + cl.getClass().getName()); - String serviceFile = "META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar"; - java.net.URL res = cl.getResource(serviceFile); - getLogger().info("Service file resource: " + res); + MinecraftVersion version = MinecraftVersion.detect(); + globalLogger.info("[tenkumaLib] Detected Minecraft Version: " + version); - ServiceLoader registrars = ServiceLoader.load(VersionedServiceRegistrar.class, cl); - int count = 0; - for (VersionedServiceRegistrar registrar : registrars) { - registrar.register(versionedServiceFactory); - getLogger().info("Registered registrar: " + registrar.getClass().getName()); - count++; + boolean registered = false; + + // 1. Load core registrar based on version mapping + String coreRegistrar = version.getRegistrarClass(); + if (coreRegistrar != null) { + if (loadRegistrar(coreRegistrar)) { + registered = true; + } } - getLogger().info("Registered " + count + " version-specific registrars."); - - String serverVersion = versionMatcher.getServerVersion(); - java.util.List suffixes = versionMatcher.getClassSuffixes(serverVersion); - getLogger().info("Server Version: " + serverVersion); - getLogger().info("Applicable suffixes: " + suffixes); - getLogger().info("tenkumaLib has been enabled!"); + // 2. Load registrars via ServiceLoader for extensibility + try { + java.util.ServiceLoader loader = java.util.ServiceLoader.load(VersionedServiceRegistrar.class, getClassLoader()); + for (VersionedServiceRegistrar registrar : loader) { + String registrarName = registrar.getClass().getName(); + // Skip if already registered as core + if (registrarName.equals(coreRegistrar)) continue; + + if (registerRegistrar(registrar)) { + registered = true; + } + } + } catch (Throwable t) { + // ServiceLoader failure is expected on some legacy platforms + } + + if (!registered) { + globalLogger.warning("[tenkumaLib] No registrars were loaded! Services might not be available."); + } + + try { + org.adrianvictor.lib.logging.Logger.create(versionedServiceFactory); + pluginLogger = versionedServiceFactory.getService(LoggerProvider.class); + pluginLogger.info("tenkumaLib has been successfully enabled!"); + } catch (Exception e) { + globalLogger.severe("[tenkumaLib] Failed to initialize plugin logger: " + e.getMessage()); + e.printStackTrace(); + } + } + + private boolean loadRegistrar(String className) { + try { + Class clazz = Class.forName(className, true, getClassLoader()); + VersionedServiceRegistrar registrar = (VersionedServiceRegistrar) clazz.getDeclaredConstructor().newInstance(); + return registerRegistrar(registrar); + } catch (NoClassDefFoundError e) { + globalLogger.info("[tenkumaLib] Skipping registrar " + className + " (incompatible server version)"); + } catch (Throwable t) { + globalLogger.warning("[tenkumaLib] Failed to load registrar " + className + ": " + t.toString()); + } + return false; + } + + 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.register(versionedServiceFactory); + globalLogger.info("[tenkumaLib] Registered " + registrarName); + return true; + } catch (NoClassDefFoundError e) { + globalLogger.info("[tenkumaLib] Skipping registrar " + registrarName + " (incompatible server version)"); + } catch (Throwable t) { + globalLogger.warning("[tenkumaLib] Failed to register " + registrarName + ": " + t.toString()); + } + return false; } @Override public void onDisable() { - getLogger().info("tenkumaLib has been disabled!"); - } - - public static VersionedServiceFactory getVersionedServiceFactory() { - return versionedServiceFactory; - } - - public static VersionMatcher getVersionMatcher() { - return versionMatcher; + if (pluginLogger != null) { + pluginLogger.info("tenkumaLib has been disabled!"); + } } } diff --git a/src/main/java/org/adrianvictor/lib/loading/ModernRegistrarLoader.java b/src/main/java/org/adrianvictor/lib/loading/ModernRegistrarLoader.java new file mode 100644 index 0000000..e8bb5dc --- /dev/null +++ b/src/main/java/org/adrianvictor/lib/loading/ModernRegistrarLoader.java @@ -0,0 +1,8 @@ +package org.adrianvictor.lib.loading; + +import org.adrianvictor.lib.versioning.VersionedServiceFactory; +import org.bukkit.plugin.java.JavaPlugin; + +public interface ModernRegistrarLoader { + void load(VersionedServiceFactory factory, JavaPlugin plugin); +} diff --git a/src/main/java/org/adrianvictor/lib/loading/RegistrarBridge.java b/src/main/java/org/adrianvictor/lib/loading/RegistrarBridge.java new file mode 100644 index 0000000..b0cd5c0 --- /dev/null +++ b/src/main/java/org/adrianvictor/lib/loading/RegistrarBridge.java @@ -0,0 +1,8 @@ +package org.adrianvictor.lib.loading; + +import org.adrianvictor.lib.versioning.VersionedServiceFactory; +import org.bukkit.plugin.java.JavaPlugin; + +public interface RegistrarBridge { + void load(VersionedServiceFactory factory, JavaPlugin plugin); +} diff --git a/src/main/java/org/adrianvictor/lib/logging/Logger.java b/src/main/java/org/adrianvictor/lib/logging/Logger.java new file mode 100644 index 0000000..a62717e --- /dev/null +++ b/src/main/java/org/adrianvictor/lib/logging/Logger.java @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000..a3e3113 --- /dev/null +++ b/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java @@ -0,0 +1,7 @@ +package org.adrianvictor.lib.logging.provider; + +public interface LoggerProvider { + void info(String text); + void warning(String text); + void error(String text); +} diff --git a/src/main/java/org/adrianvictor/lib/versioning/MinecraftVersion.java b/src/main/java/org/adrianvictor/lib/versioning/MinecraftVersion.java new file mode 100644 index 0000000..5ae57be --- /dev/null +++ b/src/main/java/org/adrianvictor/lib/versioning/MinecraftVersion.java @@ -0,0 +1,91 @@ +package org.adrianvictor.lib.versioning; + +import org.bukkit.Bukkit; + +public enum MinecraftVersion { + B1_7_3(0, "b1_7_3", "org.adrianvictor.lib.impl.b1_7_3.B1_7_3Registrar"), + V1_1(1, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_2(2, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_3(3, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_4(4, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_5(5, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_6(6, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_7(7, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_8(8, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_9(9, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_10(10, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_11(11, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_12(12, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_13(13, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_14(14, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_15(15, "r1_1", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_16(16, "r1_16_5", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_17(17, "r1_16_5", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_18(18, "r1_16_5", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_19(19, "r1_16_5", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_20(20, "r1_16_5", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + V1_21(21, "r1_21", "org.adrianvictor.lib.impl.r1_21.R1_21Registrar"), + UNKNOWN(-1, "unknown"); + + private final int versionId; + private final String suffix; + private final String registrarClass; + + MinecraftVersion(int versionId, String suffix) { + this(versionId, suffix, null); + } + + MinecraftVersion(int versionId, String suffix, String registrarClass) { + this.versionId = versionId; + this.suffix = suffix; + this.registrarClass = registrarClass; + } + + public int getVersionId() { + return versionId; + } + + public String getSuffix() { + return suffix; + } + + public String getRegistrarClass() { + return registrarClass; + } + + public boolean isAtLeast(MinecraftVersion other) { + return this.versionId >= other.versionId; + } + + public static MinecraftVersion detect() { + String version = Bukkit.getVersion(); + if (version.contains("1.7.3")) return B1_7_3; + + String bukkitVersion = Bukkit.getBukkitVersion(); + String mcVer = bukkitVersion.split("-")[0]; + + if (mcVer.startsWith("1.21")) return V1_21; + if (mcVer.startsWith("1.20")) return V1_20; + if (mcVer.startsWith("1.19")) return V1_19; + if (mcVer.startsWith("1.18")) return V1_18; + if (mcVer.startsWith("1.17")) return V1_17; + if (mcVer.startsWith("1.16")) return V1_16; + if (mcVer.startsWith("1.15")) return V1_15; + if (mcVer.startsWith("1.14")) return V1_14; + if (mcVer.startsWith("1.13")) return V1_13; + if (mcVer.startsWith("1.12")) return V1_12; + if (mcVer.startsWith("1.11")) return V1_11; + if (mcVer.startsWith("1.10")) return V1_10; + if (mcVer.startsWith("1.9")) return V1_9; + if (mcVer.startsWith("1.8")) return V1_8; + if (mcVer.startsWith("1.7")) return V1_7; + if (mcVer.startsWith("1.6")) return V1_6; + if (mcVer.startsWith("1.5")) return V1_5; + if (mcVer.startsWith("1.4")) return V1_4; + if (mcVer.startsWith("1.3")) return V1_3; + if (mcVer.startsWith("1.2")) return V1_2; + if (mcVer.startsWith("1.1")) return V1_1; + + return UNKNOWN; + } +} diff --git a/src/main/java/org/adrianvictor/lib/versioning/VersionMatcher.java b/src/main/java/org/adrianvictor/lib/versioning/VersionMatcher.java index a2a6337..1e82d04 100644 --- a/src/main/java/org/adrianvictor/lib/versioning/VersionMatcher.java +++ b/src/main/java/org/adrianvictor/lib/versioning/VersionMatcher.java @@ -1,91 +1,39 @@ package org.adrianvictor.lib.versioning; -import org.bukkit.Bukkit; - -import java.util.Comparator; -import java.util.List; import java.util.ArrayList; import java.util.Collections; -import java.util.regex.Pattern; -import java.util.regex.Matcher; +import java.util.List; public class VersionMatcher { public VersionMatcher() {} - private record Entry(String pattern, String classSuffix, int minMajor, int minMinor, int maxMajor, int maxMinor) {} - public List getClassSuffixes(String serverVersion) { - if (serverVersion == null) { + MinecraftVersion version = MinecraftVersion.detect(); + if (version == MinecraftVersion.UNKNOWN) { return Collections.emptyList(); } - - List entries = populateEntries(); - List applicableEntries = new ArrayList<>(); - - int[] parsedServerVersion = parseVersion(serverVersion); - int serverMajor = parsedServerVersion[0]; - int serverMinor = parsedServerVersion[1]; - - for (Entry entry : entries) { - Pattern p = Pattern.compile(entry.pattern()); - if (p.matcher(serverVersion).matches()) { - if (serverMajor > entry.minMajor() || (serverMajor == entry.minMajor() && serverMinor >= entry.minMinor())) { - if (serverMajor < entry.maxMajor() || (serverMajor == entry.maxMajor() && serverMinor <= entry.maxMinor())) { - applicableEntries.add(entry); - } - } - } + + List suffixes = new ArrayList<>(); + + // Add suffixes in order of specificity (newest/most specific first) + if (version.isAtLeast(MinecraftVersion.V1_21)) { + suffixes.add("r1_21"); } - - applicableEntries.sort((a, b) -> { - if (a.minMajor() != b.minMajor()) { - return Integer.compare(b.minMajor(), a.minMajor()); - } - return Integer.compare(b.minMinor(), a.minMinor()); - }); - - return applicableEntries.stream() - .map(Entry::classSuffix) - .toList(); + if (version.isAtLeast(MinecraftVersion.V1_16)) { + suffixes.add("r1_16_5"); + } + if (version.isAtLeast(MinecraftVersion.V1_1)) { + suffixes.add("r1_1"); + } + if (version == MinecraftVersion.B1_7_3) { + suffixes.add("b1_7_3"); + } + + return suffixes; } public String getServerVersion() { - String rawVersion = null; - try { - rawVersion = Bukkit.getMinecraftVersion(); - } catch (NoSuchMethodError ignored) {} - - if (rawVersion == null || rawVersion.isEmpty()) { - String v = Bukkit.getVersion(); - int start = v.lastIndexOf("MC: "); - if (start != -1) { - rawVersion = v.substring(start + 4, v.length() - 1); - } else { - rawVersion = "unknown"; - } - } - - return rawVersion; + return MinecraftVersion.detect().name(); } - - private List populateEntries() { - return List.of( - new Entry("^1\\.7\\.3$", "b1_7_3", 1, 7, 1, 7), - // r1_1 covers versions 1.1 and above - new Entry("^1\\.\\d+(\\.\\d+)*$", "r1_1", 1, 1, Integer.MAX_VALUE, Integer.MAX_VALUE), - // r1_16_5 covers versions 1.16.5 and above - new Entry("^1\\.(16\\.[5-9]|1[7-9]|[2-9]\\d)(\\.\\d+)*$", "r1_16_5", 1, 16, Integer.MAX_VALUE, Integer.MAX_VALUE), - // r1_21 covers 1.21 and above - new Entry("^1\\.([2-9]\\d)(\\.\\d+)*$", "r1_21", 1, 21, Integer.MAX_VALUE, Integer.MAX_VALUE) - ); - } - - private int[] parseVersion(String versionString) { - Matcher matcher = Pattern.compile("^(\\d+)\\.(\\d+).*").matcher(versionString); - if (matcher.find()) { - return new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))}; - } - return new int[]{0, 0}; // Default for unknown format - } -} \ No newline at end of file +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5585d53..10e821b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,4 +5,4 @@ main: org.adrianvictor.lib.Main startup: startup url: https://adrianvic.github.io version: '2.0' -api-version: '1.13' \ No newline at end of file +api-version: '1.21' \ No newline at end of file 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 d4b10b4..1b7e752 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,16 +1,27 @@ package org.adrianvictor.lib.impl.r1_21; +import org.adrianvictor.lib.impl.r1_21.logging.Logger; import org.adrianvictor.lib.versioning.VersionedServiceFactory; import org.adrianvictor.lib.versioning.VersionedServiceRegistrar; import org.adrianvictor.lib.configuration.provider.ConfigurationProvider; import org.adrianvictor.lib.impl.r1_21.configuration.Configuration; import org.adrianvictor.lib.text.provider.TextColorProvider; import org.adrianvictor.lib.impl.r1_21.text.TextColor; +import org.adrianvictor.lib.logging.provider.LoggerProvider; +import org.bukkit.plugin.java.JavaPlugin; public class R1_21Registrar implements VersionedServiceRegistrar { + private JavaPlugin plugin; + + public void setPlugin(JavaPlugin plugin) { + this.plugin = 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); } } diff --git a/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/logging/Logger.java b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/logging/Logger.java new file mode 100644 index 0000000..818cc5a --- /dev/null +++ b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/logging/Logger.java @@ -0,0 +1,36 @@ +package org.adrianvictor.lib.impl.r1_21.logging; + +import org.adrianvictor.lib.logging.provider.LoggerProvider; +import org.bukkit.plugin.java.JavaPlugin; + +public class Logger implements LoggerProvider { + private static JavaPlugin plugin; + private java.util.logging.Logger logger; + + public static void setPlugin(JavaPlugin p) { + plugin = p; + } + + public Logger() { + if (plugin != null) { + logger = plugin.getLogger(); + } else { + logger = java.util.logging.Logger.getLogger("Minecraft"); + } + } + + @Override + public void info(String text) { + logger.info(text); + } + + @Override + public void warning(String text) { + logger.warning(text); + } + + @Override + public void error(String text) { + logger.severe(text); + } +}