GetServerDetailsTask.java
com.mojang.realmsclient.util.task.GetServerDetailsTask
信息
- 全限定名:com.mojang.realmsclient.util.task.GetServerDetailsTask
- 类型:public class
- 包:com.mojang.realmsclient.util.task
- 源码路径:src/main/java/com/mojang/realmsclient/util/task/GetServerDetailsTask.java
- 起始行号:L34
- 继承:LongRunningTask
- 职责:
TODO
字段/常量
-
APPLYING_PACK_TEXT- 类型:
Component - 修饰符:
private static final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
TITLE- 类型:
Component - 修饰符:
private static final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
server- 类型:
RealmsServer - 修饰符:
private final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
lastScreen- 类型:
Screen - 修饰符:
private final - 源码定位:
L39 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public GetServerDetailsTask(Screen lastScreen, RealmsServer server) @ L41
- 构造器名:GetServerDetailsTask
- 源码定位:L41
- 修饰符:public
参数:
- lastScreen: Screen
- server: RealmsServer
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void run() @ L46
- 方法名:run
- 源码定位:L46
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private static UUID generatePackId(RealmsServer serverData) @ L96
- 方法名:generatePackId
- 源码定位:L96
- 返回类型:UUID
- 修饰符:private static
参数:
- serverData: RealmsServer
说明:
TODO
public Component getTitle() @ L104
- 方法名:getTitle
- 源码定位:L104
- 返回类型:Component
- 修饰符:public
参数:
- 无
说明:
TODO
private RealmsJoinInformation fetchServerAddress() @ L109
- 方法名:fetchServerAddress
- 源码定位:L109
- 返回类型:RealmsJoinInformation
- 修饰符:private
参数:
- 无
说明:
TODO
public RealmsLongRunningMcoTaskScreen connectScreen(RealmsJoinInformation address) @ L127
- 方法名:connectScreen
- 源码定位:L127
- 返回类型:RealmsLongRunningMcoTaskScreen
- 修饰符:public
参数:
- address: RealmsJoinInformation
说明:
TODO
private PopupScreen resourcePackDownloadConfirmationScreen(RealmsJoinInformation address, UUID packId, Function<RealmsJoinInformation,Screen> onCompletionScreen) @ L131
- 方法名:resourcePackDownloadConfirmationScreen
- 源码定位:L131
- 返回类型:PopupScreen
- 修饰符:private
参数:
- address: RealmsJoinInformation
- packId: UUID
- onCompletionScreen: Function<RealmsJoinInformation,Screen>
说明:
TODO
private CompletableFuture<?> scheduleResourcePackDownload(RealmsJoinInformation address, UUID packId) @ L146
- 方法名:scheduleResourcePackDownload
- 源码定位:L146
- 返回类型:CompletableFuture<?>
- 修饰符:private
参数:
- address: RealmsJoinInformation
- packId: UUID
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class GetServerDetailsTask extends LongRunningTask {
private static final Component APPLYING_PACK_TEXT = Component.translatable("multiplayer.applyingPack");
private static final Logger LOGGER = LogUtils.getLogger();
private static final Component TITLE = Component.translatable("mco.connect.connecting");
private final RealmsServer server;
private final Screen lastScreen;
public GetServerDetailsTask(Screen lastScreen, RealmsServer server) {
this.lastScreen = lastScreen;
this.server = server;
}
@Override
public void run() {
RealmsJoinInformation address;
try {
address = this.fetchServerAddress();
} catch (CancellationException var4) {
LOGGER.info("User aborted connecting to realms");
return;
} catch (RealmsServiceException var5) {
switch (var5.realmsError.errorCode()) {
case 6002:
setScreen(new RealmsTermsScreen(this.lastScreen, this.server));
return;
case 6006:
boolean isOwner = Minecraft.getInstance().isLocalPlayer(this.server.ownerUUID);
setScreen(
(Screen)(isOwner
? new RealmsBrokenWorldScreen(this.lastScreen, this.server.id, this.server.isMinigameActive())
: new RealmsGenericErrorScreen(
Component.translatable("mco.brokenworld.nonowner.title"),
Component.translatable("mco.brokenworld.nonowner.error"),
this.lastScreen
))
);
return;
default:
this.error(var5);
LOGGER.error("Couldn't connect to world", (Throwable)var5);
return;
}
} catch (TimeoutException var6) {
this.error(Component.translatable("mco.errorMessage.connectionFailure"));
return;
} catch (Exception var7) {
LOGGER.error("Couldn't connect to world", (Throwable)var7);
this.error(var7);
return;
}
if (address.address() == null) {
this.error(Component.translatable("mco.errorMessage.connectionFailure"));
} else {
boolean requiresResourcePack = address.resourcePackUrl() != null && address.resourcePackHash() != null;
Screen nextScreen = (Screen)(requiresResourcePack
? this.resourcePackDownloadConfirmationScreen(address, generatePackId(this.server), this::connectScreen)
: this.connectScreen(address));
setScreen(nextScreen);
}
}
private static UUID generatePackId(RealmsServer serverData) {
return serverData.minigameName != null
? UUID.nameUUIDFromBytes(("minigame:" + serverData.minigameName).getBytes(StandardCharsets.UTF_8))
: UUID.nameUUIDFromBytes(
("realms:" + Objects.requireNonNullElse(serverData.name, "") + ":" + serverData.activeSlot).getBytes(StandardCharsets.UTF_8)
);
}
@Override
public Component getTitle() {
return TITLE;
}
private RealmsJoinInformation fetchServerAddress() throws RealmsServiceException, TimeoutException, CancellationException {
RealmsClient client = RealmsClient.getOrCreate();
for (int i = 0; i < 40; i++) {
if (this.aborted()) {
throw new CancellationException();
}
try {
return client.join(this.server.id);
} catch (RetryCallException var4) {
pause(var4.delaySeconds);
}
}
throw new TimeoutException();
}
public RealmsLongRunningMcoTaskScreen connectScreen(RealmsJoinInformation address) {
return new RealmsLongRunningMcoConnectTaskScreen(this.lastScreen, address, new ConnectTask(this.lastScreen, this.server, address));
}
private PopupScreen resourcePackDownloadConfirmationScreen(
RealmsJoinInformation address, UUID packId, Function<RealmsJoinInformation, Screen> onCompletionScreen
) {
Component popupMessage = Component.translatable("mco.configure.world.resourcepack.question");
return RealmsPopups.infoPopupScreen(this.lastScreen, popupMessage, popupScreen -> {
setScreen(new GenericMessageScreen(APPLYING_PACK_TEXT));
this.scheduleResourcePackDownload(address, packId).thenRun(() -> setScreen(onCompletionScreen.apply(address))).exceptionally(e -> {
Minecraft.getInstance().getDownloadedPackSource().cleanupAfterDisconnect();
LOGGER.error("Failed to download resource pack from {}", address, e);
setScreen(new RealmsGenericErrorScreen(Component.translatable("mco.download.resourcePack.fail"), this.lastScreen));
return null;
});
});
}
private CompletableFuture<?> scheduleResourcePackDownload(RealmsJoinInformation address, UUID packId) {
try {
if (address.resourcePackUrl() == null) {
return CompletableFuture.failedFuture(new IllegalStateException("resourcePackUrl was null"));
} else if (address.resourcePackHash() == null) {
return CompletableFuture.failedFuture(new IllegalStateException("resourcePackHash was null"));
} else {
DownloadedPackSource packSource = Minecraft.getInstance().getDownloadedPackSource();
CompletableFuture<Void> result = packSource.waitForPackFeedback(packId);
packSource.allowServerPacks();
packSource.pushPack(packId, new URL(address.resourcePackUrl()), address.resourcePackHash());
return result;
}
} catch (Exception var5) {
return CompletableFuture.failedFuture(var5);
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
RealmsClient.getOrCreate()
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsBrokenWorldScreen()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsGenericErrorScreen()
- 引用位置:
-
RealmsLongRunningMcoConnectTaskScreen
- 引用位置:
构造调用 - 关联成员:
RealmsLongRunningMcoConnectTaskScreen()
- 引用位置:
-
RealmsLongRunningMcoTaskScreen
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsPopups.infoPopupScreen()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsTermsScreen()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ConnectTask()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
GenericMessageScreen()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段/方法调用/返回值 - 关联成员:
Component.translatable()
- 引用位置: