RealmsConnect.java
net.minecraft.realms.RealmsConnect
信息
- 全限定名:net.minecraft.realms.RealmsConnect
- 类型:public class
- 包:net.minecraft.realms
- 源码路径:src/main/java/net/minecraft/realms/RealmsConnect.java
- 起始行号:L27
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
onlineScreen- 类型:
Screen - 修饰符:
private final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
aborted- 类型:
boolean - 修饰符:
private volatile - 源码定位:
L30 - 说明:
TODO
- 类型:
-
connection- 类型:
Connection - 修饰符:
private - 源码定位:
L31 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public RealmsConnect(Screen onlineScreen) @ L33
- 构造器名:RealmsConnect
- 源码定位:L33
- 修饰符:public
参数:
- onlineScreen: Screen
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void connect(RealmsServer server, ServerAddress hostAndPort) @ L37
- 方法名:connect
- 源码定位:L37
- 返回类型:void
- 修饰符:public
参数:
- server: RealmsServer
- hostAndPort: ServerAddress
说明:
TODO
public void abort() @ L121
- 方法名:abort
- 源码定位:L121
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void tick() @ L129
- 方法名:tick
- 源码定位:L129
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class RealmsConnect {
private static final Logger LOGGER = LogUtils.getLogger();
private final Screen onlineScreen;
private volatile boolean aborted;
private @Nullable Connection connection;
public RealmsConnect(Screen onlineScreen) {
this.onlineScreen = onlineScreen;
}
public void connect(RealmsServer server, ServerAddress hostAndPort) {
final Minecraft minecraft = Minecraft.getInstance();
minecraft.prepareForMultiplayer();
minecraft.getNarrator().saySystemNow(Component.translatable("mco.connect.success"));
final String hostname = hostAndPort.getHost();
final int port = hostAndPort.getPort();
(new Thread("Realms-connect-task") {
{
Objects.requireNonNull(RealmsConnect.this);
}
@Override
public void run() {
InetSocketAddress address = null;
try {
address = new InetSocketAddress(hostname, port);
if (RealmsConnect.this.aborted) {
return;
}
RealmsConnect.this.connection = Connection.connectToServer(
address, EventLoopGroupHolder.remote(minecraft.options.useNativeTransport()), minecraft.getDebugOverlay().getBandwidthLogger()
);
if (RealmsConnect.this.aborted) {
return;
}
ClientHandshakePacketListenerImpl clientHandshakePacketListener = new ClientHandshakePacketListenerImpl(
RealmsConnect.this.connection,
minecraft,
server.toServerData(hostname),
RealmsConnect.this.onlineScreen,
false,
null,
status -> {},
new LevelLoadTracker(),
null
);
if (server.isMinigameActive()) {
clientHandshakePacketListener.setMinigameName(server.minigameName);
}
if (RealmsConnect.this.aborted) {
return;
}
RealmsConnect.this.connection.initiateServerboundPlayConnection(hostname, port, clientHandshakePacketListener);
if (RealmsConnect.this.aborted) {
return;
}
RealmsConnect.this.connection.send(new ServerboundHelloPacket(minecraft.getUser().getName(), minecraft.getUser().getProfileId()));
minecraft.updateReportEnvironment(ReportEnvironment.realm(server));
minecraft.quickPlayLog()
.setWorldData(QuickPlayLog.Type.REALMS, String.valueOf(server.id), Objects.requireNonNullElse(server.name, "unknown"));
minecraft.getDownloadedPackSource()
.configureForServerControl(RealmsConnect.this.connection, ServerPackManager.PackPromptStatus.ALLOWED);
} catch (Exception var5) {
minecraft.getDownloadedPackSource().cleanupAfterDisconnect();
if (RealmsConnect.this.aborted) {
return;
}
RealmsConnect.LOGGER.error("Couldn't connect to world", (Throwable)var5);
String message = var5.toString();
if (address != null) {
String filter = address + ":" + port;
message = message.replaceAll(filter, "");
}
DisconnectedScreen screen = new DisconnectedScreen(
RealmsConnect.this.onlineScreen,
Component.translatable("mco.connect.failed"),
Component.translatable("disconnect.genericReason", message),
CommonComponents.GUI_BACK
);
minecraft.execute(() -> minecraft.setScreen(screen));
}
}
})
.start();
}
public void abort() {
this.aborted = true;
if (this.connection != null && this.connection.isConnected()) {
this.connection.disconnect(Component.translatable("disconnect.genericReason"));
this.connection.handleDisconnection();
}
}
public void tick() {
if (this.connection != null) {
if (this.connection.isConnected()) {
this.connection.tick();
} else {
this.connection.handleDisconnection();
}
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
DisconnectedScreen()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
ClientHandshakePacketListenerImpl
- 引用位置:
构造调用 - 关联成员:
ClientHandshakePacketListenerImpl()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
LevelLoadTracker()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ReportEnvironment.realm()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Connection.connectToServer()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ServerboundHelloPacket()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EventLoopGroupHolder.remote()
- 引用位置: