59 lines
1.9 KiB
Java
59 lines
1.9 KiB
Java
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;
|
|
|
|
public ReflServerStateProvider() {
|
|
Object serverObject = null;
|
|
MethodHandle isRunning = null;
|
|
|
|
final String MDFIVEMAGICLETTER;
|
|
if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R2)) {
|
|
MDFIVEMAGICLETTER = "v";
|
|
} else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R1)) {
|
|
MDFIVEMAGICLETTER = "u";
|
|
} else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_18_R1)) {
|
|
MDFIVEMAGICLETTER = "v";
|
|
} else {
|
|
MDFIVEMAGICLETTER = "isRunning";
|
|
}
|
|
|
|
final Class<?> nmsClass = ReflUtil.getNMSClass("MinecraftServer");
|
|
try {
|
|
serverObject = nmsClass.getMethod("getServer").invoke(null);
|
|
isRunning = MethodHandles.lookup().findVirtual(nmsClass,
|
|
MDFIVEMAGICLETTER, //TODO jmp said he may make this better
|
|
MethodType.methodType(boolean.class));
|
|
} catch (final Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
nmsServer = serverObject;
|
|
nmsIsRunning = isRunning;
|
|
}
|
|
|
|
@Override
|
|
public boolean isStopping() {
|
|
if (nmsServer != null && nmsIsRunning != null) {
|
|
try {
|
|
return !(boolean) nmsIsRunning.invoke(nmsServer);
|
|
} catch (final Throwable throwable) {
|
|
throwable.printStackTrace();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public String getDescription() {
|
|
return "NMS Reflection Server State Provider";
|
|
}
|
|
}
|