Fix versioning not working on b1.7.3
This commit is contained in:
parent
5b3f7a4e56
commit
df450e1f9b
15 changed files with 362 additions and 123 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -12,3 +12,5 @@ out/
|
|||
build
|
||||
|
||||
run/
|
||||
|
||||
*.log
|
||||
|
|
@ -1 +0,0 @@
|
|||
org.adrianvictor.lib.impl.r1_21.R1_21Registrar
|
||||
|
|
@ -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<String>()
|
||||
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>("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<Jar>("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<Jar>("bundleAll") {
|
|||
}
|
||||
|
||||
// Include the merged service file
|
||||
from(prepareServiceFiles.get().outputs.files.singleFile)
|
||||
from(prepareServiceFiles)
|
||||
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<VersionedServiceRegistrar> 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<String> suffixes = versionMatcher.getClassSuffixes(serverVersion);
|
||||
getLogger().info("Server Version: " + serverVersion);
|
||||
getLogger().info("Applicable suffixes: " + suffixes);
|
||||
// 2. Load registrars via ServiceLoader for extensibility
|
||||
try {
|
||||
java.util.ServiceLoader<VersionedServiceRegistrar> 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;
|
||||
|
||||
getLogger().info("tenkumaLib has been enabled!");
|
||||
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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
10
src/main/java/org/adrianvictor/lib/logging/Logger.java
Normal file
10
src/main/java/org/adrianvictor/lib/logging/Logger.java
Normal file
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String> getClassSuffixes(String serverVersion) {
|
||||
if (serverVersion == null) {
|
||||
MinecraftVersion version = MinecraftVersion.detect();
|
||||
if (version == MinecraftVersion.UNKNOWN) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<Entry> entries = populateEntries();
|
||||
List<Entry> applicableEntries = new ArrayList<>();
|
||||
List<String> suffixes = 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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");
|
||||
}
|
||||
|
||||
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();
|
||||
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;
|
||||
}
|
||||
|
||||
private List<Entry> 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
|
||||
return MinecraftVersion.detect().name();
|
||||
}
|
||||
}
|
||||
|
|
@ -5,4 +5,4 @@ main: org.adrianvictor.lib.Main
|
|||
startup: startup
|
||||
url: https://adrianvic.github.io
|
||||
version: '2.0'
|
||||
api-version: '1.13'
|
||||
api-version: '1.21'
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue