2020-06-24 23:00:59 +02:00
|
|
|
package net.ess3.nms.refl.providers;
|
|
|
|
|
|
|
|
import net.ess3.nms.refl.ReflUtil;
|
|
|
|
import net.ess3.provider.ServerStateProvider;
|
|
|
|
|
|
|
|
import java.lang.invoke.MethodHandle;
|
|
|
|
import java.lang.invoke.MethodHandles;
|
|
|
|
import java.lang.invoke.MethodType;
|
|
|
|
|
|
|
|
public class ReflServerStateProvider implements ServerStateProvider {
|
|
|
|
private final Object nmsServer;
|
|
|
|
private final MethodHandle nmsIsRunning;
|
|
|
|
|
2021-05-28 20:29:52 +02:00
|
|
|
public ReflServerStateProvider() {
|
2020-06-24 23:00:59 +02:00
|
|
|
Object serverObject = null;
|
|
|
|
MethodHandle isRunning = null;
|
2022-06-07 20:28:38 +02:00
|
|
|
|
|
|
|
final String MDFIVEMAGICLETTER;
|
2022-12-08 03:47:13 +01:00
|
|
|
if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R2)) {
|
|
|
|
MDFIVEMAGICLETTER = "v";
|
|
|
|
} else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R1)) {
|
2022-06-07 20:28:38 +02:00
|
|
|
MDFIVEMAGICLETTER = "u";
|
|
|
|
} else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_18_R1)) {
|
|
|
|
MDFIVEMAGICLETTER = "v";
|
|
|
|
} else {
|
|
|
|
MDFIVEMAGICLETTER = "isRunning";
|
|
|
|
}
|
|
|
|
|
2020-10-03 19:46:05 +02:00
|
|
|
final Class<?> nmsClass = ReflUtil.getNMSClass("MinecraftServer");
|
2020-06-24 23:00:59 +02:00
|
|
|
try {
|
|
|
|
serverObject = nmsClass.getMethod("getServer").invoke(null);
|
2021-11-22 05:20:35 +01:00
|
|
|
isRunning = MethodHandles.lookup().findVirtual(nmsClass,
|
2022-06-07 20:28:38 +02:00
|
|
|
MDFIVEMAGICLETTER, //TODO jmp said he may make this better
|
2021-11-22 05:20:35 +01:00
|
|
|
MethodType.methodType(boolean.class));
|
2020-10-03 19:46:05 +02:00
|
|
|
} catch (final Exception e) {
|
2020-06-24 23:00:59 +02:00
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
nmsServer = serverObject;
|
|
|
|
nmsIsRunning = isRunning;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isStopping() {
|
|
|
|
if (nmsServer != null && nmsIsRunning != null) {
|
|
|
|
try {
|
|
|
|
return !(boolean) nmsIsRunning.invoke(nmsServer);
|
2020-10-03 19:46:05 +02:00
|
|
|
} catch (final Throwable throwable) {
|
2020-06-24 23:00:59 +02:00
|
|
|
throwable.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getDescription() {
|
|
|
|
return "NMS Reflection Server State Provider";
|
|
|
|
}
|
|
|
|
}
|