133 lines
4.7 KiB
Java
133 lines
4.7 KiB
Java
package net.minecraft.realms;
|
|
|
|
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.CPacketLoginStart;
|
|
import net.minecraft.util.text.TextComponentTranslation;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
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;
|
|
private NetworkManager connection;
|
|
|
|
public RealmsConnect(RealmsScreen onlineScreenIn)
|
|
{
|
|
this.onlineScreen = onlineScreenIn;
|
|
}
|
|
|
|
public void connect(final String p_connect_1_, final int p_connect_2_)
|
|
{
|
|
Realms.setConnectedToRealms(true);
|
|
(new Thread("Realms-connect-task")
|
|
{
|
|
public void run()
|
|
{
|
|
InetAddress inetaddress = null;
|
|
|
|
try
|
|
{
|
|
net.minecraftforge.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.createNetworkManagerAndConnect(inetaddress, p_connect_2_, Minecraft.getMinecraft().gameSettings.isUsingNativeTransport());
|
|
|
|
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.sendPacket(new C00Handshake(p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN, true));
|
|
|
|
if (RealmsConnect.this.aborted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
RealmsConnect.this.connection.sendPacket(new CPacketLoginStart(Minecraft.getMinecraft().getSession().getProfile()));
|
|
}
|
|
catch (UnknownHostException unknownhostexception)
|
|
{
|
|
Realms.clearResourcePack();
|
|
|
|
if (RealmsConnect.this.aborted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
RealmsConnect.LOGGER.error("Couldn't connect to world", (Throwable)unknownhostexception);
|
|
Realms.setScreen(new DisconnectedRealmsScreen(RealmsConnect.this.onlineScreen, "connect.failed", new TextComponentTranslation("disconnect.genericReason", new Object[] {"Unknown host '" + p_connect_1_ + "'"})));
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Realms.clearResourcePack();
|
|
|
|
if (RealmsConnect.this.aborted)
|
|
{
|
|
return;
|
|
}
|
|
|
|
RealmsConnect.LOGGER.error("Couldn't connect to world", (Throwable)exception);
|
|
String s = exception.toString();
|
|
|
|
if (inetaddress != null)
|
|
{
|
|
String s1 = inetaddress + ":" + p_connect_2_;
|
|
s = s.replaceAll(s1, "");
|
|
}
|
|
|
|
Realms.setScreen(new DisconnectedRealmsScreen(RealmsConnect.this.onlineScreen, "connect.failed", new TextComponentTranslation("disconnect.genericReason", new Object[] {s})));
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
public void abort()
|
|
{
|
|
this.aborted = true;
|
|
|
|
if (this.connection != null && this.connection.isChannelOpen())
|
|
{
|
|
this.connection.closeChannel(new TextComponentTranslation("disconnect.genericReason", new Object[0]));
|
|
this.connection.checkDisconnected();
|
|
}
|
|
}
|
|
|
|
public void tick()
|
|
{
|
|
if (this.connection != null)
|
|
{
|
|
if (this.connection.isChannelOpen())
|
|
{
|
|
this.connection.processReceivedPackets();
|
|
}
|
|
else
|
|
{
|
|
this.connection.checkDisconnected();
|
|
}
|
|
}
|
|
}
|
|
} |