Finish factory implementation

This commit is contained in:
天クマ 2026-05-23 21:41:17 -03:00
commit 0b753d6a4e
15 changed files with 75 additions and 52 deletions

View file

@ -1,7 +1,7 @@
package org.adrianvictor.lib.impl.b1_7_3;
import org.adrianvictor.lib.VersionedServiceFactory;
import org.adrianvictor.lib.VersionedServiceRegistrar;
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;

View file

@ -1,6 +1,9 @@
package org.adrianvictor.lib;
import org.adrianvictor.lib.reflection.VersionMatcher;
import org.adrianvictor.lib.versioning.DefaultVersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionMatcher;
import org.adrianvictor.lib.versioning.VersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionedServiceRegistrar;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ServiceLoader;
@ -12,22 +15,15 @@ public class Main extends JavaPlugin {
@Override
public void onEnable() {
// Initialize VersionMatcher
versionMatcher = new VersionMatcher();
// Initialize DefaultVersionedServiceFactory
versionedServiceFactory = new DefaultVersionedServiceFactory(versionMatcher);
// Discover and register version-specific implementations using ServiceLoader
ServiceLoader<VersionedServiceRegistrar> registrars = ServiceLoader.load(VersionedServiceRegistrar.class);
for (VersionedServiceRegistrar registrar : registrars) {
registrar.register(versionedServiceFactory);
}
// Example usage (for demonstration, can be removed later)
// ConfigurationProvider configProvider = Configuration.create(versionedServiceFactory);
// TextColorProvider textColorProvider = TextColor.create(versionedServiceFactory);
getLogger().info("tenkumaLib has been enabled!");
}

View file

@ -1,6 +1,6 @@
package org.adrianvictor.lib.configuration;
import org.adrianvictor.lib.VersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionedServiceFactory;
import org.adrianvictor.lib.configuration.provider.ConfigurationProvider;
public class Configuration {

View file

@ -1,6 +1,6 @@
package org.adrianvictor.lib.text;
import org.adrianvictor.lib.VersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionedServiceFactory;
import org.adrianvictor.lib.text.provider.TextColorProvider;
public class TextColor {

View file

@ -1,6 +1,6 @@
package org.adrianvictor.lib.text;
import org.adrianvictor.lib.VersionedServiceFactory;
import org.adrianvictor.lib.versioning.VersionedServiceFactory;
import org.adrianvictor.lib.text.provider.TextColorProvider;
public class TextColorUtils {

View file

@ -1,6 +1,5 @@
package org.adrianvictor.lib;
package org.adrianvictor.lib.versioning;
import org.adrianvictor.lib.reflection.VersionMatcher;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
@ -24,8 +23,7 @@ public class DefaultVersionedServiceFactory implements VersionedServiceFactory {
@SuppressWarnings("unchecked")
public <T> T getService(Class<T> serviceType) {
String serverVersion = versionMatcher.getServerVersion();
// Determine the correct suffix using VersionMatcher (adapted)
String versionSuffix = versionMatcher.getClassSuffix(serverVersion); // Removed "release" parameter
String versionSuffix = versionMatcher.getClassSuffix(serverVersion);
Map<String, Supplier<?>> versionSuppliers = serviceRegistrations.get(serviceType);
if (versionSuppliers == null || !versionSuppliers.containsKey(versionSuffix)) {

View file

@ -1,15 +1,13 @@
package org.adrianvictor.lib.reflection;
package org.adrianvictor.lib.versioning;
import org.bukkit.Bukkit;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.Optional;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Collections;
public class VersionMatcher {
@ -39,7 +37,6 @@ public class VersionMatcher {
}
}
// Sort by version (highest minor first for best match within range)
applicableEntries.sort(Comparator
.comparing(Entry::maxMajor).reversed()
.thenComparing(Entry::maxMinor).reversed()
@ -73,13 +70,15 @@ public class VersionMatcher {
private List<Entry> populateEntries() {
return List.of(
new Entry("^1\\.7\\.3$", "b1_7_3", 1, 7, 1, 7),
// Covers 1.8 up to 1.16 for compatibility (example for user request)
new Entry("^1\\.(8|9|10|11|12|13|14|15|16)\\..*$", "b1_8_compat", 1, 8, 1, 16),
new Entry("^1\\.21\\..*$", "r1_21", 1, 21, Integer.MAX_VALUE, Integer.MAX_VALUE) // Open-ended for future 1.21.x
// r1_1 covers versions from 1.1.x up to 1.16.4
new Entry("^1\\.(1[0-5]|[1-9])(\\.\\d+)*$", "r1_1", 1, 1, 1, 16),
// r1_16_5 covers versions from 1.16.5 up to 1.20.x
new Entry("^1\\.(16\\.[5-9]|1[7-9]|20)(\\.\\d+)*$", "r1_16_5", 1, 16, 1, 20),
// r1_21 covers 1.21.x and above
new Entry("^1\\.21(\\.\\d+)*$", "r1_21", 1, 21, Integer.MAX_VALUE, Integer.MAX_VALUE)
);
}
// Helper to parse major and minor version from a string (e.g., "1.16.5" -> [1, 16])
private int[] parseVersion(String versionString) {
Matcher matcher = Pattern.compile("^(\\d+)\\.(\\d+).*").matcher(versionString);
if (matcher.find()) {

View file

@ -1,4 +1,4 @@
package org.adrianvictor.lib;
package org.adrianvictor.lib.versioning;
import java.util.function.Supplier;

View file

@ -1,4 +1,4 @@
package org.adrianvictor.lib;
package org.adrianvictor.lib.versioning;
public interface VersionedServiceRegistrar {
void register(VersionedServiceFactory factory);

View file

@ -1,7 +1,7 @@
package org.adrianvictor.lib.impl.r1_21;
import org.adrianvictor.lib.VersionedServiceFactory;
import org.adrianvictor.lib.VersionedServiceRegistrar;
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;
@ -10,7 +10,7 @@ import org.adrianvictor.lib.impl.r1_21.text.TextColor;
public class R1_21Registrar implements VersionedServiceRegistrar {
@Override
public void register(VersionedServiceFactory factory) {
factory.register(ConfigurationProvider.class, "r1_21", Configuration::new);
factory.register(TextColorProvider.class, "r1_21", TextColor::new);
factory.register(ConfigurationProvider.class, "r1_1", Configuration::new);
factory.register(TextColorProvider.class, "r1_16_5", TextColor::new);
}
}