99 lines
5.1 KiB
Java
99 lines
5.1 KiB
Java
package net.minecraft.client.quickplay;
|
|
|
|
import com.mojang.realmsclient.RealmsMainScreen;
|
|
import com.mojang.realmsclient.client.RealmsClient;
|
|
import com.mojang.realmsclient.dto.RealmsServer;
|
|
import com.mojang.realmsclient.dto.RealmsServerList;
|
|
import com.mojang.realmsclient.exception.RealmsServiceException;
|
|
import com.mojang.realmsclient.gui.screens.RealmsLongRunningMcoTaskScreen;
|
|
import com.mojang.realmsclient.util.task.GetServerDetailsTask;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.screens.ConnectScreen;
|
|
import net.minecraft.client.gui.screens.DisconnectedScreen;
|
|
import net.minecraft.client.gui.screens.Screen;
|
|
import net.minecraft.client.gui.screens.TitleScreen;
|
|
import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;
|
|
import net.minecraft.client.gui.screens.worldselection.SelectWorldScreen;
|
|
import net.minecraft.client.main.GameConfig;
|
|
import net.minecraft.client.multiplayer.ServerData;
|
|
import net.minecraft.client.multiplayer.ServerList;
|
|
import net.minecraft.client.multiplayer.resolver.ServerAddress;
|
|
import net.minecraft.client.resources.language.I18n;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.util.StringUtil;
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
public class QuickPlay {
|
|
public static final Component ERROR_TITLE = Component.translatable("quickplay.error.title");
|
|
private static final Component INVALID_IDENTIFIER = Component.translatable("quickplay.error.invalid_identifier");
|
|
private static final Component REALM_CONNECT = Component.translatable("quickplay.error.realm_connect");
|
|
private static final Component REALM_PERMISSION = Component.translatable("quickplay.error.realm_permission");
|
|
private static final Component TO_TITLE = Component.translatable("gui.toTitle");
|
|
private static final Component TO_WORLD_LIST = Component.translatable("gui.toWorld");
|
|
private static final Component TO_REALMS_LIST = Component.translatable("gui.toRealms");
|
|
|
|
public static void connect(Minecraft p_279319_, GameConfig.QuickPlayData p_279291_, RealmsClient p_279322_) {
|
|
String s = p_279291_.singleplayer();
|
|
String s1 = p_279291_.multiplayer();
|
|
String s2 = p_279291_.realms();
|
|
if (!StringUtil.isBlank(s)) {
|
|
joinSingleplayerWorld(p_279319_, s);
|
|
} else if (!StringUtil.isBlank(s1)) {
|
|
joinMultiplayerWorld(p_279319_, s1);
|
|
} else if (!StringUtil.isBlank(s2)) {
|
|
joinRealmsWorld(p_279319_, p_279322_, s2);
|
|
}
|
|
}
|
|
|
|
private static void joinSingleplayerWorld(Minecraft p_279420_, String p_279459_) {
|
|
if (!p_279420_.getLevelSource().levelExists(p_279459_)) {
|
|
Screen screen = new SelectWorldScreen(new TitleScreen());
|
|
p_279420_.setScreen(new DisconnectedScreen(screen, ERROR_TITLE, INVALID_IDENTIFIER, TO_WORLD_LIST));
|
|
} else {
|
|
p_279420_.createWorldOpenFlows().openWorld(p_279459_, () -> p_279420_.setScreen(new TitleScreen()));
|
|
}
|
|
}
|
|
|
|
private static void joinMultiplayerWorld(Minecraft p_279276_, String p_279128_) {
|
|
ServerList serverlist = new ServerList(p_279276_);
|
|
serverlist.load();
|
|
ServerData serverdata = serverlist.get(p_279128_);
|
|
if (serverdata == null) {
|
|
serverdata = new ServerData(I18n.get("selectServer.defaultName"), p_279128_, ServerData.Type.OTHER);
|
|
serverlist.add(serverdata, true);
|
|
serverlist.save();
|
|
}
|
|
|
|
ServerAddress serveraddress = ServerAddress.parseString(p_279128_);
|
|
ConnectScreen.startConnecting(new JoinMultiplayerScreen(new TitleScreen()), p_279276_, serveraddress, serverdata, true, null);
|
|
}
|
|
|
|
private static void joinRealmsWorld(Minecraft p_279320_, RealmsClient p_279468_, String p_279371_) {
|
|
long i;
|
|
RealmsServerList realmsserverlist;
|
|
try {
|
|
i = Long.parseLong(p_279371_);
|
|
realmsserverlist = p_279468_.listRealms();
|
|
} catch (NumberFormatException numberformatexception) {
|
|
Screen screen1 = new RealmsMainScreen(new TitleScreen());
|
|
p_279320_.setScreen(new DisconnectedScreen(screen1, ERROR_TITLE, INVALID_IDENTIFIER, TO_REALMS_LIST));
|
|
return;
|
|
} catch (RealmsServiceException realmsserviceexception) {
|
|
Screen screen = new TitleScreen();
|
|
p_279320_.setScreen(new DisconnectedScreen(screen, ERROR_TITLE, REALM_CONNECT, TO_TITLE));
|
|
return;
|
|
}
|
|
|
|
RealmsServer realmsserver = realmsserverlist.servers.stream().filter(p_279424_ -> p_279424_.id == i).findFirst().orElse(null);
|
|
if (realmsserver == null) {
|
|
Screen screen2 = new RealmsMainScreen(new TitleScreen());
|
|
p_279320_.setScreen(new DisconnectedScreen(screen2, ERROR_TITLE, REALM_PERMISSION, TO_REALMS_LIST));
|
|
} else {
|
|
TitleScreen titlescreen = new TitleScreen();
|
|
GetServerDetailsTask getserverdetailstask = new GetServerDetailsTask(titlescreen, realmsserver);
|
|
p_279320_.setScreen(new RealmsLongRunningMcoTaskScreen(titlescreen, getserverdetailstask));
|
|
}
|
|
}
|
|
} |