[BLIND] Use MinecraftServer.getVersion, if no version was detected.

This commit is contained in:
asofold 2017-12-16 16:51:46 +01:00
parent 7c5d67b1d4
commit 7fb960275d
3 changed files with 38 additions and 6 deletions

View File

@ -17,7 +17,7 @@ package fr.neatmonster.nocheatplus.compat.cbreflect.reflect;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
import fr.neatmonster.nocheatplus.compat.versions.ServerVersion;
public class ReflectBase {
@ -39,8 +39,7 @@ public class ReflectBase {
obcPackageName = null;
}
// nms
Object obj = ReflectionUtil.invokeMethodNoArgs(server, "getHandle");
clazz = obj.getClass();
clazz = ServerVersion.getNMSMinecraftServer();
name = clazz.getPackage().getName();
if (name.equals("net.minecraft.server") || name.indexOf("net.") == 0 && name.indexOf(".minecraft.") != -1 && name.indexOf(".server.") != -1) {
nmsPackageName = name;

View File

@ -42,7 +42,11 @@ public class BukkitVersion {
// Initialize server version.
final Server server = Bukkit.getServer();
// Note that Bukkit.getVersion() should be used to get the version of Bukkit (...)
ServerVersion.setMinecraftVersion(ServerVersion.parseMinecraftVersion(server.getBukkitVersion(), server.getVersion()));
ServerVersion.setMinecraftVersion(ServerVersion.parseMinecraftVersion(
server.getBukkitVersion(),
server.getVersion(),
ServerVersion.fetchNMSMinecraftServerVersion()
));
// Test availability/reliability of certain features.
boolean uuidOnline = false;

View File

@ -14,6 +14,11 @@
*/
package fr.neatmonster.nocheatplus.compat.versions;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
/**
* Static utility that stores the Minecraft version, providing some parsing
* methods. This has to be initialized from an external source (e.g. a plugin
@ -26,10 +31,10 @@ package fr.neatmonster.nocheatplus.compat.versions;
*/
public class ServerVersion {
private static String minecraftVersion = GenericVersion.UNKNOWN_VERSION;
private static String minecraftVersion = GenericVersion.UNKNOWN_VERSION;
private static final String[][] versionTagsMatch = {
{"1.7.2-r", "1.7.2"}, // Example. Probably this method will just be removed.
{"1.7.2-r", "1.7.2"}, // Example. Probably this method will just be removed.
};
/**
@ -64,6 +69,30 @@ public class ServerVersion {
return null;
}
public static Class<?> getNMSMinecraftServer() {
final Server server = Bukkit.getServer();
try {
final Object obj = ReflectionUtil.invokeMethodNoArgs(server, "getHandle");
return obj.getClass();
}
catch (Throwable t) {
return null;
}
}
public static String fetchNMSMinecraftServerVersion() {
final Class<?> clazz = getNMSMinecraftServer();
if (clazz == null) {
return null;
}
try {
return (String) ReflectionUtil.invokeMethodNoArgs(clazz, "getVersion", String.class);
}
catch (Throwable t) {
return null;
}
}
/**
* Simple consistency check.
*