diff --git a/build.gradle b/build.gradle index 1dcdd5b1..875e7df0 100644 --- a/build.gradle +++ b/build.gradle @@ -5,19 +5,19 @@ buildscript { } dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' + classpath 'com.gradleup.shadow:shadow-gradle-plugin:8.3.0' } } allprojects { group 'me.realized' - version '3.5.3' + version '3.5.4' } subprojects { apply plugin: 'java' apply plugin: 'java-library' - apply plugin: 'com.github.johnrengelman.shadow' + apply plugin: 'com.gradleup.shadow' apply plugin: 'maven-publish' sourceCompatibility = 1.8 diff --git a/duels-plugin/build.gradle b/duels-plugin/build.gradle index a292f1e9..045167c1 100644 --- a/duels-plugin/build.gradle +++ b/duels-plugin/build.gradle @@ -15,11 +15,11 @@ processResources { dependencies { compileOnly 'org.jetbrains:annotations-java5:22.0.0' - compileOnly 'org.projectlombok:lombok:1.18.22' - annotationProcessor 'org.projectlombok:lombok:1.18.22' + compileOnly 'org.projectlombok:lombok:1.18.36' + annotationProcessor 'org.projectlombok:lombok:1.18.36' implementation 'org.spigotmc:spigot-api:1.14.4-R0.1-SNAPSHOT' implementation 'com.mojang:authlib:1.5.21' - implementation 'me.clip:placeholderapi:2.11.1' + implementation 'me.clip:placeholderapi:2.11.6' implementation 'com.SirBlobman.combatlogx:CombatLogX-API:10.0.0.0-SNAPSHOT' implementation ('net.essentialsx:EssentialsX:2.19.2') { transitive = false @@ -42,7 +42,7 @@ dependencies { implementation project(':duels-worldguard') implementation project(':duels-worldguard-v6') implementation project(':duels-worldguard-v7') - implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.2' } shadowJar { @@ -60,7 +60,7 @@ shadowJar { } final String group = project.group.toString() + "." + parent.name.toLowerCase() + ".shaded." - relocate 'com.fasterxml.jackson.core', group + 'jackson-core' + relocate 'com.fasterxml.jackson', group + 'jackson' } // To build Duels plugin jar, run './gradlew clean build'. diff --git a/duels-plugin/src/main/java/me/realized/duels/util/EnumUtil.java b/duels-plugin/src/main/java/me/realized/duels/util/EnumUtil.java index 5b6f338c..51c9b042 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/EnumUtil.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/EnumUtil.java @@ -1,12 +1,38 @@ package me.realized.duels.util; +import java.lang.reflect.Field; import java.util.Arrays; public final class EnumUtil { private EnumUtil() {} - public static > E getByName(final String name, Class clazz) { - return clazz.cast(Arrays.stream(clazz.getEnumConstants()).filter(type -> type.name().equalsIgnoreCase(name)).findFirst().orElse(null)); + public static E getByName(final String name, final Class clazz) { + if (clazz == null) { + throw new IllegalArgumentException("Class cannot be null"); + } + + // Handle enums + if (clazz.isEnum()) { + return Arrays.stream(clazz.getEnumConstants()) + .filter(type -> type.toString().equalsIgnoreCase(name)) + .findFirst() + .orElse(null); + } + + // Handle static classes with public static fields + try { + final Field[] fields = clazz.getDeclaredFields(); + for (final Field field : fields) { + if (field.getType() == clazz && field.getName().equalsIgnoreCase(name)) { + return (E) field.get(null); // Get the static field value + } + } + } catch (final IllegalAccessException e) { + throw new RuntimeException("Failed to access static field in " + clazz.getName(), e); + } + + // No match found + return null; } } diff --git a/duels-plugin/src/main/java/me/realized/duels/util/reflect/ReflectionUtil.java b/duels-plugin/src/main/java/me/realized/duels/util/reflect/ReflectionUtil.java index 8d4f818a..f231c19a 100644 --- a/duels-plugin/src/main/java/me/realized/duels/util/reflect/ReflectionUtil.java +++ b/duels-plugin/src/main/java/me/realized/duels/util/reflect/ReflectionUtil.java @@ -15,7 +15,12 @@ public final class ReflectionUtil { static { final String packageName = Bukkit.getServer().getClass().getPackage().getName(); PACKAGE_VERSION = packageName.substring(packageName.lastIndexOf('.') + 1); - MAJOR_VERSION = NumberUtil.parseInt(PACKAGE_VERSION.split("_")[1]).orElse(0); + if (PACKAGE_VERSION.equalsIgnoreCase("craftbukkit")) { + String bukkitVersion = Bukkit.getBukkitVersion(); + MAJOR_VERSION = NumberUtil.parseInt(bukkitVersion.split("-")[0].split("\\.")[1]).orElse(0); + } else { + MAJOR_VERSION = NumberUtil.parseInt(PACKAGE_VERSION.split("_")[1]).orElse(0); + } } public static int getMajorVersion() { @@ -56,6 +61,9 @@ public static Class getNMSClass(final String name) { public static Class getCBClass(final String path, final boolean logError) { try { + if (getMajorVersion() >= 21) { + return Class.forName("org.bukkit.craftbukkit." + path); + } return Class.forName("org.bukkit.craftbukkit." + PACKAGE_VERSION + "." + path); } catch (ClassNotFoundException ex) { if (logError) { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d17bd14e..7454180f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 477d9145..80b5de5c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip