blob: a71c4560281e5dcf7e8173d80c3e2adcb7a2bd70 [file] [log] [blame] [raw]
package protocolsupport.zplatform;
import org.spigotmc.SpigotConfig;
import net.glowstone.GlowServer;
import net.minecraft.server.v1_11_R1.NetworkManager;
import protocolsupport.zplatform.impl.glowstone.GlowStoneMiscUtils;
import protocolsupport.zplatform.impl.glowstone.GlowStonePacketFactory;
import protocolsupport.zplatform.impl.glowstone.GlowStoneWrapperFactory;
import protocolsupport.zplatform.impl.glowstone.injector.GlowstonePlatformInjector;
import protocolsupport.zplatform.impl.spigot.SpigotMiscUtils;
import protocolsupport.zplatform.impl.spigot.SpigotPacketFactory;
import protocolsupport.zplatform.impl.spigot.SpigotWrapperFactory;
import protocolsupport.zplatform.impl.spigot.injector.SpigotPlatformInjector;
public class ServerPlatform {
private static ServerPlatform current;
public static boolean detect() {
if (current != null) {
throw new IllegalStateException("Implementation already detected");
}
try {
NetworkManager.class.getDeclaredFields();
SpigotConfig.class.getDeclaredFields();
current = new ServerPlatform("Spigot", new SpigotPlatformInjector(), new SpigotMiscUtils(), new SpigotPacketFactory(), new SpigotWrapperFactory());
} catch (Throwable t) {
t.printStackTrace();
}
try {
GlowServer.class.getDeclaredFields();
current = new ServerPlatform("GlowStone", new GlowstonePlatformInjector(), new GlowStoneMiscUtils(), new GlowStonePacketFactory(), new GlowStoneWrapperFactory());
} catch (Throwable t) {
}
return current != null;
}
public static ServerPlatform get() {
if (current == null) {
throw new IllegalStateException("Access to implementation before detect");
}
return current;
}
private final String name;
private final PlatformInjector injector;
private final PlatformUtils utils;
private final PlatformPacketFactory packetfactory;
private final PlatformWrapperFactory wrapperfactory;
private ServerPlatform(String name, PlatformInjector injector, PlatformUtils miscutils, PlatformPacketFactory packetfactory, PlatformWrapperFactory wrapperfactory) {
this.name = name;
this.injector = injector;
this.utils = miscutils;
this.packetfactory = packetfactory;
this.wrapperfactory = wrapperfactory;
}
public String getName() {
return name;
}
public void inject() {
injector.inject();
}
public PlatformUtils getMiscUtils() {
return utils;
}
public PlatformPacketFactory getPacketFactory() {
return packetfactory;
}
public PlatformWrapperFactory getWrapperFactory() {
return wrapperfactory;
}
}