Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 53a2d261ff | |||
| 1dd1f6b541 | |||
| b87eaae396 | |||
| ccf47fbc67 |
@@ -4,7 +4,7 @@
|
|||||||
<groupId>be.maximvdw</groupId>
|
<groupId>be.maximvdw</groupId>
|
||||||
<artifactId>MVdWPlaceholderAPI</artifactId>
|
<artifactId>MVdWPlaceholderAPI</artifactId>
|
||||||
<name>MVdWPlaceholderAPI</name>
|
<name>MVdWPlaceholderAPI</name>
|
||||||
<version>3.1.1-SNAPSHOT</version>
|
<version>4.0.0</version>
|
||||||
<description>Placeholder API for MVdW Software plugins</description>
|
<description>Placeholder API for MVdW Software plugins</description>
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -30,7 +30,15 @@ public abstract class ReflectionUtil {
|
|||||||
MINECRAFT_SERVER {
|
MINECRAFT_SERVER {
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
String pkgName = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
|
// Fix für 1.21+: Prüfen der Länge, da split("\\.")[3] fehlschlägt
|
||||||
|
String[] parts = pkgName.split("\\.");
|
||||||
|
if (parts.length > 3) {
|
||||||
|
return "net.minecraft.server." + parts[3];
|
||||||
|
} else {
|
||||||
|
// Fallback für 1.21+, obwohl NMS Packages dort komplett anders sind
|
||||||
|
return "net.minecraft.server";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CRAFTBUKKIT {
|
CRAFTBUKKIT {
|
||||||
@@ -213,23 +221,34 @@ public abstract class ReflectionUtil {
|
|||||||
|
|
||||||
public static String getVersion() {
|
public static String getVersion() {
|
||||||
String name = Bukkit.getServer().getClass().getPackage().getName();
|
String name = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
|
// Fix für 1.21+ (Paper): Paketstruktur ist flach "org.bukkit.craftbukkit"
|
||||||
|
// Alte Versionen sind "org.bukkit.craftbukkit.v1_20_R3"
|
||||||
|
if (name.equals("org.bukkit.craftbukkit")) {
|
||||||
|
return ""; // Keine Versions-Extension für 1.21+ nötig
|
||||||
|
}
|
||||||
String version = name.substring(name.lastIndexOf('.') + 1) + ".";
|
String version = name.substring(name.lastIndexOf('.') + 1) + ".";
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Class<?> getNMSClass(String className) {
|
public static Class<?> getNMSClass(String className) {
|
||||||
String fullName = "net.minecraft.server." + getVersion() + className;
|
// In 1.21 ist die Struktur von NMS komplett anders (Mojang Mappings),
|
||||||
|
// diese Methode wird dort wahrscheinlich fehlschlagen, aber wir verhindern einen Absturz
|
||||||
|
// durch die falsche Versions-Logik.
|
||||||
|
String versionSuffix = getVersion();
|
||||||
|
String fullName = "net.minecraft.server." + versionSuffix + className;
|
||||||
Class<?> clazz = null;
|
Class<?> clazz = null;
|
||||||
try {
|
try {
|
||||||
clazz = Class.forName(fullName);
|
clazz = Class.forName(fullName);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
// Ignorieren oder Loggen, wenn NMS nicht gefunden wird (Kann in 1.21+ passieren)
|
||||||
|
// e.printStackTrace();
|
||||||
}
|
}
|
||||||
return clazz;
|
return clazz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Class<?> getOBCClass(String className) {
|
public static Class<?> getOBCClass(String className) {
|
||||||
String fullName = "org.bukkit.craftbukkit." + getVersion() + className;
|
String versionSuffix = getVersion();
|
||||||
|
String fullName = "org.bukkit.craftbukkit." + versionSuffix + className;
|
||||||
Class<?> clazz = null;
|
Class<?> clazz = null;
|
||||||
try {
|
try {
|
||||||
clazz = Class.forName(fullName);
|
clazz = Class.forName(fullName);
|
||||||
@@ -241,7 +260,8 @@ public abstract class ReflectionUtil {
|
|||||||
|
|
||||||
|
|
||||||
public static Class<?> getNMSClassWithException(String className) throws Exception {
|
public static Class<?> getNMSClassWithException(String className) throws Exception {
|
||||||
String fullName = "net.minecraft.server." + getVersion() + className;
|
String versionSuffix = getVersion();
|
||||||
|
String fullName = "net.minecraft.server." + versionSuffix + className;
|
||||||
Class<?> clazz = Class.forName(fullName);
|
Class<?> clazz = Class.forName(fullName);
|
||||||
return clazz;
|
return clazz;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,9 +79,19 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (version.equals("")) {
|
if (version.equals("")) {
|
||||||
version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
// Korrektur: Prüfen der Länge des Paket-Namens, da 1.21+ (Paper) die Version nicht mehr im Namen trägt
|
||||||
|
String[] pkgSplit = Bukkit.getServer().getClass().getPackage().getName().split("\\.");
|
||||||
|
if (pkgSplit.length >= 4) {
|
||||||
|
// Altes Format: org.bukkit.craftbukkit.v1_20_R3
|
||||||
|
version = pkgSplit[3];
|
||||||
|
} else {
|
||||||
|
// Neues Format: org.bukkit.craftbukkit
|
||||||
|
// Wir nutzen Bukkit.getVersion() oder setzten eine Default-Version für 1.21
|
||||||
|
// Da wir für 1.21 bauen, setzen wir hier v1_21_R1, damit die weiteren Logik greift
|
||||||
|
version = "v1_21_R1";
|
||||||
|
}
|
||||||
|
|
||||||
String[] data = BukkitUtils.getVersion().substring(1).split("_");
|
String[] data = version.substring(1).split("_");
|
||||||
if (NumberUtils.isInteger(data[1]) && NumberUtils.isInteger(data[0])) {
|
if (NumberUtils.isInteger(data[1]) && NumberUtils.isInteger(data[0])) {
|
||||||
versionMinor = Integer.parseInt(data[1]);
|
versionMinor = Integer.parseInt(data[1]);
|
||||||
versionMajor = Integer.parseInt(data[0]);
|
versionMajor = Integer.parseInt(data[0]);
|
||||||
|
|||||||
Reference in New Issue
Block a user