package net.minecraft.realms;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.util.concurrent.GenericFutureListener;
import java.net.InetAddress;
import java.net.UnknownHostException;
import net.minecraft.client.Minecraft;
import net.minecraft.client.network.NetHandlerLoginClient;
import net.minecraft.network.EnumConnectionState;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.handshake.client.C00Handshake;
import net.minecraft.network.login.client.C00PacketLoginStart;
import net.minecraft.util.ChatComponentTranslation;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SideOnly(Side.CLIENT)
public class RealmsConnect
{
private static final Logger LOGGER = LogManager.getLogger();
private final RealmsScreen onlineScreen;
private volatile boolean aborted = false;
private NetworkManager connection;
private static final String __OBFID = "CL_00001844";
public RealmsConnect(RealmsScreen p_i1079_1_)
{
this.onlineScreen = p_i1079_1_;
}
public void connect(final String p_connect_1_, final int p_connect_2_)
{
(new Thread("Realms-connect-task")
{
private static final String __OBFID = "CL_00001808";
public void run()
{
InetAddress inetaddress = null;
try
{
cpw.mods.fml.client.FMLClientHandler.instance().connectToRealmsServer(p_connect_1_, p_connect_2_);
inetaddress = InetAddress.getByName(p_connect_1_);
if (RealmsConnect.this.aborted)
{
return;
}
RealmsConnect.this.connection = NetworkManager.provideLanClient(inetaddress, p_connect_2_);
if (RealmsConnect.this.aborted)
{
return;
}
RealmsConnect.this.connection.setNetHandler(new NetHandlerLoginClient(RealmsConnect.this.connection, Minecraft.getMinecraft(), RealmsConnect.this.onlineScreen.getProxy()));
if (RealmsConnect.this.aborted)
{
return;
}
RealmsConnect.this.connection.scheduleOutboundPacket(new C00Handshake(5, p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN), new GenericFutureListener[0]);
if (RealmsConnect.this.aborted)
{
return;
}
RealmsConnect.this.connection.scheduleOutboundPacket(new C00PacketLoginStart(Minecraft.getMinecraft().getSession().getProfile()), new GenericFutureListener[0]);
}
catch (UnknownHostException unknownhostexception)
{
if (RealmsConnect.this.aborted)
{
return;
}
RealmsConnect.LOGGER.error("Couldn\'t connect to world", unknownhostexception);
Realms.setScreen(new DisconnectedOnlineScreen(RealmsConnect.this.onlineScreen, "connect.failed", new ChatComponentTranslation("disconnect.genericReason", new Object[] {"Unknown host \'" + p_connect_1_ + "\'"})));
}
catch (Exception exception)
{
if (RealmsConnect.this.aborted)
{
return;
}
RealmsConnect.LOGGER.error("Couldn\'t connect to world", exception);
String s = exception.toString();
if (inetaddress != null)
{
String s1 = inetaddress.toString() + ":" + p_connect_2_;
s = s.replaceAll(s1, "");
}
Realms.setScreen(new DisconnectedOnlineScreen(RealmsConnect.this.onlineScreen, "connect.failed", new ChatComponentTranslation("disconnect.genericReason", new Object[] {s})));
}
}
}).start();
}
public void abort()
{
this.aborted = true;
}
public void tick()
{
if (this.connection != null)
{
if (this.connection.isChannelOpen())
{
this.connection.processReceivedPackets();
}
else if (this.connection.getExitMessage() != null)
{
this.connection.getNetHandler().onDisconnect(this.connection.getExitMessage());
}
}
}
}