diff --git a/build.gradle.kts b/build.gradle.kts index d929735..711c583 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "org.adrianvictor" -version = "2.1.1" +version = "2.0" val buildEnv = System.getenv("BUILD_CHANNEL") ?: if (System.getenv("JITPACK") != null) "jitpack" else "local" @@ -86,10 +86,16 @@ mcVersions.forEach { ver -> } } +tasks.register("buildAll") { + dependsOn(tasks.withType()) +} + +// Task to merge service files val prepareServiceFiles = tasks.register("prepareServiceFiles") { val outputDir = layout.buildDirectory.dir("generated/service-files") val serviceFile = "META-INF/services/org.adrianvictor.lib.versioning.VersionedServiceRegistrar" + // Define inputs val inputFiles = mcVersions.map { ver -> file("src/$ver/resources/$serviceFile") }.filter { it.exists() } inputs.files(inputFiles) outputs.dir(outputDir) @@ -133,7 +139,7 @@ tasks.named("jar") { 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) { @@ -141,6 +147,7 @@ tasks.register("bundleAll") { } } + // Include the merged service file from(prepareServiceFiles) duplicatesStrategy = DuplicatesStrategy.EXCLUDE @@ -180,6 +187,7 @@ tasks.withType { /* ----------------------------------------- */ tasks.runServer { - minecraftVersion("1.21.11") + minecraftVersion("1.21.1") + // Include ONLY the all-implementations jar as the plugin pluginJars.setFrom(tasks.named("bundleAll")) } \ No newline at end of file diff --git a/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/configuration/Configuration.java b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/configuration/Configuration.java index 5f3fd89..9e8c31b 100644 --- a/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/configuration/Configuration.java +++ b/src/b1_7_3/java/org/adrianvictor/lib/impl/b1_7_3/configuration/Configuration.java @@ -17,7 +17,6 @@ public class Configuration implements org.adrianvictor.lib.configuration.provide @Override public void load(File file) { config = new org.bukkit.util.config.Configuration(file); - config.load(); } @Override 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 index 5629c8b..943c0b3 100644 --- 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 @@ -13,6 +13,7 @@ public class File implements FileProvider { java.io.File file = new java.io.File(plugin.getDataFolder(), resourcePath); if (!file.exists() || replace) { + file.getParentFile().mkdirs(); InputStream in = plugin.getClass().getResourceAsStream("/" + resourcePath); 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 index 41d2f72..183b2ab 100644 --- 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 @@ -32,7 +32,7 @@ public class Logger implements LoggerProvider { } @Override - public void severe(String text) { + 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 e13bdb5..e7c7760 100644 --- a/src/main/java/org/adrianvictor/lib/Main.java +++ b/src/main/java/org/adrianvictor/lib/Main.java @@ -34,6 +34,7 @@ public class Main extends JavaPlugin { boolean registered = false; + // 1. Load core registrar based on version mapping String coreRegistrar = version.getRegistrarClass(); if (coreRegistrar != null) { if (loadRegistrar(coreRegistrar)) { @@ -41,11 +42,12 @@ public class Main extends JavaPlugin { } } + // 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)) { 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/provider/LoggerProvider.java b/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java index ad5b342..3747ad9 100644 --- a/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java +++ b/src/main/java/org/adrianvictor/lib/logging/provider/LoggerProvider.java @@ -9,16 +9,5 @@ public interface LoggerProvider { void info(String text); void warning(String text); - - /** - * @deprecated - * Does not throw an error. - *

Use {@link LoggerProvider#severe(String)} instead. - */ - @Deprecated - default void error(String text) { - severe(text); - } - - void severe(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 index 25539fa..5ae57be 100644 --- a/src/main/java/org/adrianvictor/lib/versioning/MinecraftVersion.java +++ b/src/main/java/org/adrianvictor/lib/versioning/MinecraftVersion.java @@ -4,6 +4,26 @@ 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"); @@ -44,7 +64,28 @@ public enum MinecraftVersion { String bukkitVersion = Bukkit.getBukkitVersion(); String mcVer = bukkitVersion.split("-")[0]; - //if (mcVer.startsWith("1.21")) return V1_21; - return V1_21; + 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 cfc2e53..1e82d04 100644 --- a/src/main/java/org/adrianvictor/lib/versioning/VersionMatcher.java +++ b/src/main/java/org/adrianvictor/lib/versioning/VersionMatcher.java @@ -16,9 +16,16 @@ public class VersionMatcher { List suffixes = new ArrayList<>(); + // Add suffixes in order of specificity (newest/most specific first) if (version.isAtLeast(MinecraftVersion.V1_21)) { suffixes.add("r1_21"); } + 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"); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1eccf37..10e821b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,5 +4,5 @@ database: false main: org.adrianvictor.lib.Main startup: startup url: https://adrianvic.github.io -version: '2.1.1' +version: '2.0' 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 5047d4a..dff4d46 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 @@ -28,8 +28,8 @@ public class R1_21Registrar implements VersionedServiceRegistrar { @Override public void register(VersionedServiceFactory factory) { Logger.setPlugin(this.plugin); - factory.register(ConfigurationProvider.class, "r1_21", Configuration::new); // min 1.1 - factory.register(TextColorProvider.class, "r1_21", TextColor::new); // min 1.16.5 + 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_21", File::new); } diff --git a/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/configuration/Configuration.java b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/configuration/Configuration.java index 57c324f..0fe9c3d 100644 --- a/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/configuration/Configuration.java +++ b/src/r1_21/java/org/adrianvictor/lib/impl/r1_21/configuration/Configuration.java @@ -6,10 +6,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; import java.io.Reader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; public class Configuration implements org.adrianvictor.lib.configuration.provider.ConfigurationProvider { @@ -28,12 +24,11 @@ public class Configuration implements org.adrianvictor.lib.configuration.provide @Override public void load(String contents) throws IOException, org.adrianvictor.lib.configuration.exception.InvalidConfigurationException { - String timestamp = LocalDateTime.now() - .format(DateTimeFormatter.ofPattern("HH-mm-dd-MM-yyyy")); - Path temp = Files.createTempFile("tlib-configprovider-tmp-%s".formatted(timestamp), ".yml"); - Files.writeString(temp, contents); - File file = temp.toFile(); - load(file); + try { + config.load(contents); + } catch (InvalidConfigurationException e) { + throw new org.adrianvictor.lib.configuration.exception.InvalidConfigurationException(e.getMessage()); + } } @Override 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 index 16ffc6b..818cc5a 100644 --- 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 @@ -30,7 +30,7 @@ public class Logger implements LoggerProvider { } @Override - public void severe(String text) { + public void error(String text) { logger.severe(text); } }