package net.minecraft.server.network; import net.minecraft.network.EnumConnectionState; import net.minecraft.network.NetworkManager; import net.minecraft.network.handshake.INetHandlerHandshakeServer; import net.minecraft.network.handshake.client.C00Handshake; import net.minecraft.network.login.server.S00PacketDisconnect; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; public class NetHandlerHandshakeTCP implements INetHandlerHandshakeServer { private final MinecraftServer server; private final NetworkManager networkManager; private static final String __OBFID = "CL_00001456"; public NetHandlerHandshakeTCP(MinecraftServer serverIn, NetworkManager netManager) { this.server = serverIn; this.networkManager = netManager; } /** * There are two recognized intentions for initiating a handshake: logging in and acquiring server status. The * NetworkManager's protocol will be reconfigured according to the specified intention, although a login-intention * must pass a versioncheck or receive a disconnect otherwise */ public void processHandshake(C00Handshake packetIn) { switch (NetHandlerHandshakeTCP.SwitchEnumConnectionState.VALUES[packetIn.getRequestedState().ordinal()]) { case 1: this.networkManager.setConnectionState(EnumConnectionState.LOGIN); ChatComponentText var2; if (packetIn.getProtocolVersion() > 47) { var2 = new ChatComponentText("Outdated server! I\'m still on 1.8"); this.networkManager.sendPacket(new S00PacketDisconnect(var2)); this.networkManager.closeChannel(var2); } else if (packetIn.getProtocolVersion() < 47) { var2 = new ChatComponentText("Outdated client! Please use 1.8"); this.networkManager.sendPacket(new S00PacketDisconnect(var2)); this.networkManager.closeChannel(var2); } else { this.networkManager.setNetHandler(new NetHandlerLoginServer(this.server, this.networkManager)); } break; case 2: this.networkManager.setConnectionState(EnumConnectionState.STATUS); this.networkManager.setNetHandler(new NetHandlerStatusServer(this.server, this.networkManager)); break; default: throw new UnsupportedOperationException("Invalid intention " + packetIn.getRequestedState()); } } /** * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination */ public void onDisconnect(IChatComponent reason) {} static final class SwitchEnumConnectionState { static final int[] VALUES = new int[EnumConnectionState.values().length]; private static final String __OBFID = "CL_00001457"; static { try { VALUES[EnumConnectionState.LOGIN.ordinal()] = 1; } catch (NoSuchFieldError var2) { ; } try { VALUES[EnumConnectionState.STATUS.ordinal()] = 2; } catch (NoSuchFieldError var1) { ; } } } }