minecraft-source/src/com/mojang/realmsclient/RealmsMainScreen.java

1484 lines
70 KiB
Java

package com.mojang.realmsclient;
import com.mojang.realmsclient.util.RealmsPersistence;
import com.mojang.realmsclient.gui.screens.RealmsPendingInvitesScreen;
import com.mojang.realmsclient.util.RealmsTextureManager;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.realmsclient.gui.ChatFormatting;
import com.mojang.realmsclient.gui.screens.RealmsCreateRealmScreen;
import net.minecraft.realms.RealmsObjectSelectionList;
import org.apache.logging.log4j.LogManager;
import java.util.Collection;
import java.util.stream.Collector;
import com.google.common.collect.ImmutableList;
import net.minecraft.server.packs.resources.ResourceManager;
import com.mojang.realmsclient.gui.LongRunningTask;
import com.mojang.realmsclient.gui.screens.RealmsLongRunningMcoTaskScreen;
import com.mojang.realmsclient.util.RealmsTasks;
import java.util.concurrent.TimeUnit;
import net.minecraft.realms.RealmsMth;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.realms.RealmListEntry;
import net.minecraft.realms.RealmsConfirmResultListener;
import com.mojang.realmsclient.gui.screens.RealmsLongConfirmationScreen;
import javax.annotation.Nullable;
import net.minecraft.client.gui.screens.Screen;
import com.mojang.realmsclient.gui.screens.RealmsConfigureWorldScreen;
import net.minecraft.client.Minecraft;
import com.mojang.realmsclient.gui.screens.RealmsParentalConsentScreen;
import java.io.IOException;
import com.mojang.realmsclient.exception.RealmsServiceException;
import com.mojang.realmsclient.gui.screens.RealmsGenericErrorScreen;
import com.mojang.realmsclient.gui.screens.RealmsClientOutdatedScreen;
import com.mojang.realmsclient.gui.screens.RealmsCreateTrialScreen;
import com.mojang.realmsclient.dto.RegionPingResult;
import com.mojang.realmsclient.dto.PingResult;
import com.mojang.realmsclient.client.Ping;
import com.mojang.realmsclient.dto.RealmsServerPlayerLists;
import com.mojang.realmsclient.dto.RealmsServerPlayerList;
import net.minecraft.realms.RealmsGuiEventListener;
import com.mojang.realmsclient.util.RealmsUtil;
import net.minecraft.realms.AbstractRealmsButton;
import com.mojang.realmsclient.client.RealmsClient;
import java.util.Iterator;
import net.minecraft.realms.Realms;
import com.google.common.collect.Lists;
import java.util.concurrent.locks.ReentrantLock;
import com.mojang.realmsclient.dto.RealmsServer;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsDataFetcher;
import net.minecraft.resources.ResourceLocation;
import java.util.List;
import com.google.common.util.concurrent.RateLimiter;
import org.apache.logging.log4j.Logger;
import net.minecraft.realms.RealmsScreen;
public class RealmsMainScreen extends RealmsScreen {
private static final Logger LOGGER;
private static boolean overrideConfigure;
private final RateLimiter inviteNarrationLimiter;
private boolean dontSetConnectedToRealms;
private static List<ResourceLocation> teaserImages;
private static final RealmsDataFetcher realmsDataFetcher;
private static int lastScrollYPosition;
private final RealmsScreen lastScreen;
private volatile RealmSelectionList realmSelectionList;
private long selectedServerId;
private RealmsButton playButton;
private RealmsButton backButton;
private RealmsButton renewButton;
private RealmsButton configureButton;
private RealmsButton leaveButton;
private String toolTip;
private List<RealmsServer> realmsServers;
private volatile int numberOfPendingInvites;
private int animTick;
private static volatile boolean hasParentalConsent;
private static volatile boolean checkedParentalConsent;
private static volatile boolean checkedClientCompatability;
private boolean hasFetchedServers;
private boolean popupOpenedByUser;
private boolean justClosedPopup;
private volatile boolean trialsAvailable;
private volatile boolean createdTrial;
private volatile boolean showingPopup;
private volatile boolean hasUnreadNews;
private volatile String newsLink;
private int carouselIndex;
private int carouselTick;
private boolean hasSwitchedCarouselImage;
private static RealmsScreen realmsGenericErrorScreen;
private static boolean regionsPinged;
private List<KeyCombo> keyCombos;
private int clicks;
private ReentrantLock connectLock;
private boolean expiredHover;
private ShowPopupButton showPopupButton;
private PendingInvitesButton pendingInvitesButton;
private NewsButton newsButton;
private RealmsButton createTrialButton;
private RealmsButton buyARealmButton;
private RealmsButton closeButton;
public RealmsMainScreen(final RealmsScreen realmsScreen) {
this.selectedServerId = -1L;
this.realmsServers = Lists.newArrayList();
this.connectLock = new ReentrantLock();
this.lastScreen = realmsScreen;
this.inviteNarrationLimiter = RateLimiter.create(0.01666666753590107);
}
public boolean shouldShowMessageInList() {
if (!this.hasParentalConsent() || !this.hasFetchedServers) {
return false;
}
if (this.trialsAvailable && !this.createdTrial) {
return true;
}
for (final RealmsServer realmsServer3 : this.realmsServers) {
if (realmsServer3.ownerUUID.equals(Realms.getUUID())) {
return false;
}
}
return true;
}
public boolean shouldShowPopup() {
return this.hasParentalConsent() && this.hasFetchedServers && (this.popupOpenedByUser || (this.trialsAvailable && !this.createdTrial && this.realmsServers.isEmpty()) || this.realmsServers.isEmpty());
}
@Override
public void init() {
this.keyCombos = Lists.<KeyCombo>newArrayList(new KeyCombo(new char[] { '3', '2', '1', '4', '5', '6' }, () -> RealmsMainScreen.overrideConfigure = !RealmsMainScreen.overrideConfigure), new KeyCombo(new char[] { '9', '8', '7', '1', '2', '3' }, () -> {
if (RealmsClient.currentEnvironment.equals(RealmsClient.Environment.STAGE)) {
this.switchToProd();
}
else {
this.switchToStage();
}
return;
}), new KeyCombo(new char[] { '9', '8', '7', '4', '5', '6' }, () -> {
if (RealmsClient.currentEnvironment.equals(RealmsClient.Environment.LOCAL)) {
this.switchToProd();
}
else {
this.switchToLocal();
}
return;
}));
if (RealmsMainScreen.realmsGenericErrorScreen != null) {
Realms.setScreen(RealmsMainScreen.realmsGenericErrorScreen);
return;
}
this.connectLock = new ReentrantLock();
if (RealmsMainScreen.checkedClientCompatability && !this.hasParentalConsent()) {
this.checkParentalConsent();
}
this.checkClientCompatability();
this.checkUnreadNews();
if (!this.dontSetConnectedToRealms) {
Realms.setConnectedToRealms(false);
}
this.setKeyboardHandlerSendRepeatsToGui(true);
if (this.hasParentalConsent()) {
RealmsMainScreen.realmsDataFetcher.forceUpdate();
}
this.showingPopup = false;
this.postInit();
}
private boolean hasParentalConsent() {
return RealmsMainScreen.checkedParentalConsent && RealmsMainScreen.hasParentalConsent;
}
public void addButtons() {
this.buttonsAdd(this.configureButton = new RealmsButton(1, this.width() / 2 - 190, this.height() - 32, 90, 20, RealmsScreen.getLocalizedString("mco.selectServer.configure")) {
@Override
public void onPress() {
RealmsMainScreen.this.configureClicked(RealmsMainScreen.this.findServer(RealmsMainScreen.this.selectedServerId));
}
});
this.buttonsAdd(this.playButton = new RealmsButton(3, this.width() / 2 - 93, this.height() - 32, 90, 20, RealmsScreen.getLocalizedString("mco.selectServer.play")) {
@Override
public void onPress() {
RealmsMainScreen.this.onPlay();
}
});
this.buttonsAdd(this.backButton = new RealmsButton(2, this.width() / 2 + 4, this.height() - 32, 90, 20, RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
if (!RealmsMainScreen.this.justClosedPopup) {
Realms.setScreen(RealmsMainScreen.this.lastScreen);
}
}
});
this.buttonsAdd(this.renewButton = new RealmsButton(0, this.width() / 2 + 100, this.height() - 32, 90, 20, RealmsScreen.getLocalizedString("mco.selectServer.expiredRenew")) {
@Override
public void onPress() {
RealmsMainScreen.this.onRenew();
}
});
this.buttonsAdd(this.leaveButton = new RealmsButton(7, this.width() / 2 - 202, this.height() - 32, 90, 20, RealmsScreen.getLocalizedString("mco.selectServer.leave")) {
@Override
public void onPress() {
RealmsMainScreen.this.leaveClicked(RealmsMainScreen.this.findServer(RealmsMainScreen.this.selectedServerId));
}
});
this.buttonsAdd(this.pendingInvitesButton = new PendingInvitesButton());
this.buttonsAdd(this.newsButton = new NewsButton());
this.buttonsAdd(this.showPopupButton = new ShowPopupButton());
this.buttonsAdd(this.closeButton = new CloseButton());
this.buttonsAdd(this.createTrialButton = new RealmsButton(6, this.width() / 2 + 52, this.popupY0() + 137 - 20, 98, 20, RealmsScreen.getLocalizedString("mco.selectServer.trial")) {
@Override
public void onPress() {
RealmsMainScreen.this.createTrial();
}
});
this.buttonsAdd(this.buyARealmButton = new RealmsButton(5, this.width() / 2 + 52, this.popupY0() + 160 - 20, 98, 20, RealmsScreen.getLocalizedString("mco.selectServer.buy")) {
@Override
public void onPress() {
RealmsUtil.browseTo("https://aka.ms/BuyJavaRealms");
}
});
final RealmsServer realmsServer2 = this.findServer(this.selectedServerId);
this.updateButtonStates(realmsServer2);
}
private void updateButtonStates(final RealmsServer realmsServer) {
this.playButton.active(this.shouldPlayButtonBeActive(realmsServer) && !this.shouldShowPopup());
this.renewButton.setVisible(this.shouldRenewButtonBeActive(realmsServer));
this.configureButton.setVisible(this.shouldConfigureButtonBeVisible(realmsServer));
this.leaveButton.setVisible(this.shouldLeaveButtonBeVisible(realmsServer));
final boolean boolean3 = this.shouldShowPopup() && this.trialsAvailable && !this.createdTrial;
this.createTrialButton.setVisible(boolean3);
this.createTrialButton.active(boolean3);
this.buyARealmButton.setVisible(this.shouldShowPopup());
this.closeButton.setVisible(this.shouldShowPopup() && this.popupOpenedByUser);
this.renewButton.active(!this.shouldShowPopup());
this.configureButton.active(!this.shouldShowPopup());
this.leaveButton.active(!this.shouldShowPopup());
this.newsButton.active(true);
this.pendingInvitesButton.active(true);
this.backButton.active(true);
this.showPopupButton.active(!this.shouldShowPopup());
}
private boolean shouldShowPopupButton() {
return (!this.shouldShowPopup() || this.popupOpenedByUser) && this.hasParentalConsent() && this.hasFetchedServers;
}
private boolean shouldPlayButtonBeActive(final RealmsServer realmsServer) {
return realmsServer != null && !realmsServer.expired && realmsServer.state == RealmsServer.State.OPEN;
}
private boolean shouldRenewButtonBeActive(final RealmsServer realmsServer) {
return realmsServer != null && realmsServer.expired && this.isSelfOwnedServer(realmsServer);
}
private boolean shouldConfigureButtonBeVisible(final RealmsServer realmsServer) {
return realmsServer != null && this.isSelfOwnedServer(realmsServer);
}
private boolean shouldLeaveButtonBeVisible(final RealmsServer realmsServer) {
return realmsServer != null && !this.isSelfOwnedServer(realmsServer);
}
public void postInit() {
if (this.hasParentalConsent() && this.hasFetchedServers) {
this.addButtons();
}
this.realmSelectionList = new RealmSelectionList();
if (RealmsMainScreen.lastScrollYPosition != -1) {
this.realmSelectionList.scroll(RealmsMainScreen.lastScrollYPosition);
}
this.addWidget(this.realmSelectionList);
this.focusOn(this.realmSelectionList);
}
@Override
public void tick() {
this.tickButtons();
this.justClosedPopup = false;
++this.animTick;
--this.clicks;
if (this.clicks < 0) {
this.clicks = 0;
}
if (this.hasParentalConsent()) {
RealmsMainScreen.realmsDataFetcher.init();
if (RealmsMainScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.SERVER_LIST)) {
final List<RealmsServer> list2 = RealmsMainScreen.realmsDataFetcher.getServers();
this.realmSelectionList.clear();
final boolean boolean3 = !this.hasFetchedServers;
if (boolean3) {
this.hasFetchedServers = true;
}
if (list2 != null) {
boolean boolean4 = false;
for (final RealmsServer realmsServer6 : list2) {
if (this.isSelfOwnedNonExpiredServer(realmsServer6)) {
boolean4 = true;
}
}
this.realmsServers = list2;
if (this.shouldShowMessageInList()) {
((RealmsObjectSelectionList<RealmSelectionListTrialEntry>)this.realmSelectionList).addEntry(new RealmSelectionListTrialEntry());
}
for (final RealmsServer realmsServer6 : this.realmsServers) {
((RealmsObjectSelectionList<RealmSelectionListEntry>)this.realmSelectionList).addEntry(new RealmSelectionListEntry(realmsServer6));
}
if (!RealmsMainScreen.regionsPinged && boolean4) {
RealmsMainScreen.regionsPinged = true;
this.pingRegions();
}
}
if (boolean3) {
this.addButtons();
}
}
if (RealmsMainScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.PENDING_INVITE)) {
this.numberOfPendingInvites = RealmsMainScreen.realmsDataFetcher.getPendingInvitesCount();
if (this.numberOfPendingInvites > 0 && this.inviteNarrationLimiter.tryAcquire(1)) {
Realms.narrateNow(RealmsScreen.getLocalizedString("mco.configure.world.invite.narration", this.numberOfPendingInvites));
}
}
if (RealmsMainScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.TRIAL_AVAILABLE) && !this.createdTrial) {
final boolean boolean5 = RealmsMainScreen.realmsDataFetcher.isTrialAvailable();
if (boolean5 != this.trialsAvailable && this.shouldShowPopup()) {
this.trialsAvailable = boolean5;
this.showingPopup = false;
}
else {
this.trialsAvailable = boolean5;
}
}
if (RealmsMainScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.LIVE_STATS)) {
final RealmsServerPlayerLists realmsServerPlayerLists2 = RealmsMainScreen.realmsDataFetcher.getLivestats();
for (final RealmsServerPlayerList realmsServerPlayerList4 : realmsServerPlayerLists2.servers) {
for (final RealmsServer realmsServer6 : this.realmsServers) {
if (realmsServer6.id == realmsServerPlayerList4.serverId) {
realmsServer6.updateServerPing(realmsServerPlayerList4);
break;
}
}
}
}
if (RealmsMainScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.UNREAD_NEWS)) {
this.hasUnreadNews = RealmsMainScreen.realmsDataFetcher.hasUnreadNews();
this.newsLink = RealmsMainScreen.realmsDataFetcher.newsLink();
}
RealmsMainScreen.realmsDataFetcher.markClean();
if (this.shouldShowPopup()) {
++this.carouselTick;
}
if (this.showPopupButton != null) {
this.showPopupButton.setVisible(this.shouldShowPopupButton());
}
}
}
private void browseURL(final String string) {
Realms.setClipboard(string);
RealmsUtil.browseTo(string);
}
private void pingRegions() {
final List<RegionPingResult> list2;
final RealmsClient cyv3;
final PingResult pingResult4;
new Thread(() -> {
list2 = Ping.pingAllRegions();
cyv3 = RealmsClient.createRealmsClient();
pingResult4 = new PingResult();
pingResult4.pingResults = list2;
pingResult4.worldIds = this.getOwnedNonExpiredWorldIds();
try {
cyv3.sendPingResults(pingResult4);
}
catch (Throwable throwable5) {
RealmsMainScreen.LOGGER.warn("Could not send ping result to Realms: ", throwable5);
}
}).start();
}
private List<Long> getOwnedNonExpiredWorldIds() {
final List<Long> list2 = Lists.newArrayList();
for (final RealmsServer realmsServer4 : this.realmsServers) {
if (this.isSelfOwnedNonExpiredServer(realmsServer4)) {
list2.add(realmsServer4.id);
}
}
return list2;
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
this.stopRealmsFetcher();
}
public void setCreatedTrial(final boolean boolean1) {
this.createdTrial = boolean1;
}
private void onPlay() {
final RealmsServer realmsServer2 = this.findServer(this.selectedServerId);
if (realmsServer2 == null) {
return;
}
this.play(realmsServer2, this);
}
private void onRenew() {
final RealmsServer realmsServer2 = this.findServer(this.selectedServerId);
if (realmsServer2 == null) {
return;
}
final String string3 = "https://aka.ms/ExtendJavaRealms?subscriptionId=" + realmsServer2.remoteSubscriptionId + "&profileId=" + Realms.getUUID() + "&ref=" + (realmsServer2.expiredTrial ? "expiredTrial" : "expiredRealm");
this.browseURL(string3);
}
private void createTrial() {
if (!this.trialsAvailable || this.createdTrial) {
return;
}
Realms.setScreen(new RealmsCreateTrialScreen(this));
}
private void checkClientCompatability() {
if (!RealmsMainScreen.checkedClientCompatability) {
RealmsMainScreen.checkedClientCompatability = true;
new Thread("MCO Compatability Checker #1") {
@Override
public void run() {
final RealmsClient cyv2 = RealmsClient.createRealmsClient();
try {
final RealmsClient.CompatibleVersionResponse a3 = cyv2.clientCompatible();
if (a3.equals(RealmsClient.CompatibleVersionResponse.OUTDATED)) {
RealmsMainScreen.realmsGenericErrorScreen = new RealmsClientOutdatedScreen(RealmsMainScreen.this.lastScreen, true);
Realms.setScreen(RealmsMainScreen.realmsGenericErrorScreen);
return;
}
if (a3.equals(RealmsClient.CompatibleVersionResponse.OTHER)) {
RealmsMainScreen.realmsGenericErrorScreen = new RealmsClientOutdatedScreen(RealmsMainScreen.this.lastScreen, false);
Realms.setScreen(RealmsMainScreen.realmsGenericErrorScreen);
return;
}
RealmsMainScreen.this.checkParentalConsent();
}
catch (RealmsServiceException czd3) {
RealmsMainScreen.checkedClientCompatability = false;
RealmsMainScreen.LOGGER.error("Couldn't connect to realms: ", czd3.toString());
if (czd3.httpResultCode == 401) {
RealmsMainScreen.realmsGenericErrorScreen = new RealmsGenericErrorScreen(RealmsScreen.getLocalizedString("mco.error.invalid.session.title"), RealmsScreen.getLocalizedString("mco.error.invalid.session.message"), RealmsMainScreen.this.lastScreen);
Realms.setScreen(RealmsMainScreen.realmsGenericErrorScreen);
return;
}
Realms.setScreen(new RealmsGenericErrorScreen(czd3, RealmsMainScreen.this.lastScreen));
}
catch (IOException iOException3) {
RealmsMainScreen.checkedClientCompatability = false;
RealmsMainScreen.LOGGER.error("Couldn't connect to realms: ", iOException3.getMessage());
Realms.setScreen(new RealmsGenericErrorScreen(iOException3.getMessage(), RealmsMainScreen.this.lastScreen));
}
}
}.start();
}
}
private void checkUnreadNews() {
}
private void checkParentalConsent() {
new Thread("MCO Compatability Checker #1") {
@Override
public void run() {
final RealmsClient cyv2 = RealmsClient.createRealmsClient();
try {
final Boolean boolean3 = cyv2.mcoEnabled();
if (boolean3) {
RealmsMainScreen.LOGGER.info("Realms is available for this user");
RealmsMainScreen.hasParentalConsent = true;
}
else {
RealmsMainScreen.LOGGER.info("Realms is not available for this user");
RealmsMainScreen.hasParentalConsent = false;
Realms.setScreen(new RealmsParentalConsentScreen(RealmsMainScreen.this.lastScreen));
}
RealmsMainScreen.checkedParentalConsent = true;
}
catch (RealmsServiceException czd3) {
RealmsMainScreen.LOGGER.error("Couldn't connect to realms: ", czd3.toString());
Realms.setScreen(new RealmsGenericErrorScreen(czd3, RealmsMainScreen.this.lastScreen));
}
catch (IOException iOException3) {
RealmsMainScreen.LOGGER.error("Couldn't connect to realms: ", iOException3.getMessage());
Realms.setScreen(new RealmsGenericErrorScreen(iOException3.getMessage(), RealmsMainScreen.this.lastScreen));
}
}
}.start();
}
private void switchToStage() {
if (!RealmsClient.currentEnvironment.equals(RealmsClient.Environment.STAGE)) {
new Thread("MCO Stage Availability Checker #1") {
@Override
public void run() {
final RealmsClient cyv2 = RealmsClient.createRealmsClient();
try {
final Boolean boolean3 = cyv2.stageAvailable();
if (boolean3) {
RealmsClient.switchToStage();
RealmsMainScreen.LOGGER.info("Switched to stage");
RealmsMainScreen.realmsDataFetcher.forceUpdate();
}
}
catch (RealmsServiceException czd3) {
RealmsMainScreen.LOGGER.error("Couldn't connect to Realms: " + czd3);
}
catch (IOException iOException3) {
RealmsMainScreen.LOGGER.error("Couldn't parse response connecting to Realms: " + iOException3.getMessage());
}
}
}.start();
}
}
private void switchToLocal() {
if (!RealmsClient.currentEnvironment.equals(RealmsClient.Environment.LOCAL)) {
new Thread("MCO Local Availability Checker #1") {
@Override
public void run() {
final RealmsClient cyv2 = RealmsClient.createRealmsClient();
try {
final Boolean boolean3 = cyv2.stageAvailable();
if (boolean3) {
RealmsClient.switchToLocal();
RealmsMainScreen.LOGGER.info("Switched to local");
RealmsMainScreen.realmsDataFetcher.forceUpdate();
}
}
catch (RealmsServiceException czd3) {
RealmsMainScreen.LOGGER.error("Couldn't connect to Realms: " + czd3);
}
catch (IOException iOException3) {
RealmsMainScreen.LOGGER.error("Couldn't parse response connecting to Realms: " + iOException3.getMessage());
}
}
}.start();
}
}
private void switchToProd() {
RealmsClient.switchToProd();
RealmsMainScreen.realmsDataFetcher.forceUpdate();
}
private void stopRealmsFetcher() {
RealmsMainScreen.realmsDataFetcher.stop();
}
private void configureClicked(final RealmsServer realmsServer) {
if (Realms.getUUID().equals(realmsServer.ownerUUID) || RealmsMainScreen.overrideConfigure) {
this.saveListScrollPosition();
final Minecraft dbl3 = Minecraft.getInstance();
dbl3.execute(() -> dbl3.setScreen(new RealmsConfigureWorldScreen(this, realmsServer.id).getProxy()));
}
}
private void leaveClicked(@Nullable final RealmsServer realmsServer) {
if (realmsServer != null && !Realms.getUUID().equals(realmsServer.ownerUUID)) {
this.saveListScrollPosition();
final String string3 = RealmsScreen.getLocalizedString("mco.configure.world.leave.question.line1");
final String string4 = RealmsScreen.getLocalizedString("mco.configure.world.leave.question.line2");
Realms.setScreen(new RealmsLongConfirmationScreen(this, RealmsLongConfirmationScreen.Type.Info, string3, string4, true, 4));
}
}
private void saveListScrollPosition() {
RealmsMainScreen.lastScrollYPosition = this.realmSelectionList.getScroll();
}
private RealmsServer findServer(final long long1) {
for (final RealmsServer realmsServer5 : this.realmsServers) {
if (realmsServer5.id == long1) {
return realmsServer5;
}
}
return null;
}
@Override
public void confirmResult(final boolean boolean1, final int integer) {
if (integer == 4) {
if (boolean1) {
new Thread("Realms-leave-server") {
@Override
public void run() {
try {
final RealmsServer realmsServer2 = RealmsMainScreen.this.findServer(RealmsMainScreen.this.selectedServerId);
if (realmsServer2 != null) {
final RealmsClient cyv3 = RealmsClient.createRealmsClient();
cyv3.uninviteMyselfFrom(realmsServer2.id);
RealmsMainScreen.realmsDataFetcher.removeItem(realmsServer2);
RealmsMainScreen.this.realmsServers.remove(realmsServer2);
RealmsMainScreen.this.realmSelectionList.children().removeIf(realmListEntry -> realmListEntry instanceof RealmSelectionListEntry && realmListEntry.mServerData.id == RealmsMainScreen.this.selectedServerId);
RealmsMainScreen.this.realmSelectionList.setSelected(-1);
RealmsMainScreen.this.updateButtonStates(null);
RealmsMainScreen.this.selectedServerId = -1L;
RealmsMainScreen.this.playButton.active(false);
}
}
catch (RealmsServiceException czd2) {
RealmsMainScreen.LOGGER.error("Couldn't configure world");
Realms.setScreen(new RealmsGenericErrorScreen(czd2, RealmsMainScreen.this));
}
}
}.start();
}
Realms.setScreen(this);
}
}
public void removeSelection() {
this.selectedServerId = -1L;
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
switch (integer1) {
case 256: {
this.keyCombos.forEach(KeyCombo::reset);
this.onClosePopup();
return true;
}
default: {
return super.keyPressed(integer1, integer2, integer3);
}
}
}
private void onClosePopup() {
if (this.shouldShowPopup() && this.popupOpenedByUser) {
this.popupOpenedByUser = false;
}
else {
Realms.setScreen(this.lastScreen);
}
}
@Override
public boolean charTyped(final char character, final int integer) {
this.keyCombos.forEach(cyq -> cyq.keyPressed(character));
return true;
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.expiredHover = false;
this.toolTip = null;
this.renderBackground();
this.realmSelectionList.render(integer1, integer2, float3);
this.drawRealmsLogo(this.width() / 2 - 50, 7);
if (RealmsClient.currentEnvironment.equals(RealmsClient.Environment.STAGE)) {
this.renderStage();
}
if (RealmsClient.currentEnvironment.equals(RealmsClient.Environment.LOCAL)) {
this.renderLocal();
}
if (this.shouldShowPopup()) {
this.drawPopup(integer1, integer2);
}
else {
if (this.showingPopup) {
this.updateButtonStates(null);
if (!this.hasWidget(this.realmSelectionList)) {
this.addWidget(this.realmSelectionList);
}
final RealmsServer realmsServer5 = this.findServer(this.selectedServerId);
this.playButton.active(this.shouldPlayButtonBeActive(realmsServer5));
}
this.showingPopup = false;
}
super.render(integer1, integer2, float3);
if (this.toolTip != null) {
this.renderMousehoverTooltip(this.toolTip, integer1, integer2);
}
if (this.trialsAvailable && !this.createdTrial && this.shouldShowPopup()) {
RealmsScreen.bind("realms:textures/gui/realms/trial_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
final int integer3 = 8;
final int integer4 = 8;
int integer5 = 0;
if ((System.currentTimeMillis() / 800L & 0x1L) == 0x1L) {
integer5 = 8;
}
RealmsScreen.blit(this.createTrialButton.x() + this.createTrialButton.getWidth() - 8 - 4, this.createTrialButton.y() + this.createTrialButton.getHeight() / 2 - 4, 0.0f, (float)integer5, 8, 8, 8, 16);
RenderSystem.popMatrix();
}
}
private void drawRealmsLogo(final int integer1, final int integer2) {
RealmsScreen.bind("realms:textures/gui/title/realms.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RenderSystem.scalef(0.5f, 0.5f, 0.5f);
RealmsScreen.blit(integer1 * 2, integer2 * 2 - 5, 0.0f, 0.0f, 200, 50, 200, 50);
RenderSystem.popMatrix();
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
if (this.isOutsidePopup(double1, double2) && this.popupOpenedByUser) {
this.popupOpenedByUser = false;
return this.justClosedPopup = true;
}
return super.mouseClicked(double1, double2, integer);
}
private boolean isOutsidePopup(final double double1, final double double2) {
final int integer6 = this.popupX0();
final int integer7 = this.popupY0();
return double1 < integer6 - 5 || double1 > integer6 + 315 || double2 < integer7 - 5 || double2 > integer7 + 171;
}
private void drawPopup(final int integer1, final int integer2) {
final int integer3 = this.popupX0();
final int integer4 = this.popupY0();
final String string6 = RealmsScreen.getLocalizedString("mco.selectServer.popup");
final List<String> list7 = this.fontSplit(string6, 100);
if (!this.showingPopup) {
this.carouselIndex = 0;
this.carouselTick = 0;
this.hasSwitchedCarouselImage = true;
this.updateButtonStates(null);
if (this.hasWidget(this.realmSelectionList)) {
this.removeWidget(this.realmSelectionList);
}
Realms.narrateNow(string6);
}
if (this.hasFetchedServers) {
this.showingPopup = true;
}
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 0.7f);
RenderSystem.enableBlend();
RealmsScreen.bind("realms:textures/gui/realms/darken.png");
RenderSystem.pushMatrix();
final int integer5 = 0;
final int integer6 = 32;
RealmsScreen.blit(0, 32, 0.0f, 0.0f, this.width(), this.height() - 40 - 32, 310, 166);
RenderSystem.popMatrix();
RenderSystem.disableBlend();
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RealmsScreen.bind("realms:textures/gui/realms/popup.png");
RenderSystem.pushMatrix();
RealmsScreen.blit(integer3, integer4, 0.0f, 0.0f, 310, 166, 310, 166);
RenderSystem.popMatrix();
if (!RealmsMainScreen.teaserImages.isEmpty()) {
RealmsScreen.bind(RealmsMainScreen.teaserImages.get(this.carouselIndex).toString());
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer3 + 7, integer4 + 7, 0.0f, 0.0f, 195, 152, 195, 152);
RenderSystem.popMatrix();
if (this.carouselTick % 95 < 5) {
if (!this.hasSwitchedCarouselImage) {
this.carouselIndex = (this.carouselIndex + 1) % RealmsMainScreen.teaserImages.size();
this.hasSwitchedCarouselImage = true;
}
}
else {
this.hasSwitchedCarouselImage = false;
}
}
int integer7 = 0;
for (final String string7 : list7) {
this.drawString(string7, this.width() / 2 + 52, integer4 + 10 * ++integer7 - 3, 8421504, false);
}
}
private int popupX0() {
return (this.width() - 310) / 2;
}
private int popupY0() {
return this.height() / 2 - 80;
}
private void drawInvitationPendingIcon(final int integer1, final int integer2, final int integer3, final int integer4, final boolean boolean5, final boolean boolean6) {
final int integer5 = this.numberOfPendingInvites;
final boolean boolean7 = this.inPendingInvitationArea(integer1, integer2);
final boolean boolean8 = boolean6 && boolean5;
if (boolean8) {
final float float11 = 0.25f + (1.0f + RealmsMth.sin(this.animTick * 0.5f)) * 0.25f;
int integer6 = 0xFF000000 | (int)(float11 * 64.0f) << 16 | (int)(float11 * 64.0f) << 8 | (int)(float11 * 64.0f) << 0;
this.fillGradient(integer3 - 2, integer4 - 2, integer3 + 18, integer4 + 18, integer6, integer6);
integer6 = (0xFF000000 | (int)(float11 * 255.0f) << 16 | (int)(float11 * 255.0f) << 8 | (int)(float11 * 255.0f) << 0);
this.fillGradient(integer3 - 2, integer4 - 2, integer3 + 18, integer4 - 1, integer6, integer6);
this.fillGradient(integer3 - 2, integer4 - 2, integer3 - 1, integer4 + 18, integer6, integer6);
this.fillGradient(integer3 + 17, integer4 - 2, integer3 + 18, integer4 + 18, integer6, integer6);
this.fillGradient(integer3 - 2, integer4 + 17, integer3 + 18, integer4 + 18, integer6, integer6);
}
RealmsScreen.bind("realms:textures/gui/realms/invite_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
final boolean boolean9 = boolean6 && boolean5;
RealmsScreen.blit(integer3, integer4 - 6, boolean9 ? 16.0f : 0.0f, 0.0f, 15, 25, 31, 25);
RenderSystem.popMatrix();
final boolean boolean10 = boolean6 && integer5 != 0;
if (boolean10) {
final int integer7 = (Math.min(integer5, 6) - 1) * 8;
final int integer8 = (int)(Math.max(0.0f, Math.max(RealmsMth.sin((10 + this.animTick) * 0.57f), RealmsMth.cos(this.animTick * 0.35f))) * -6.0f);
RealmsScreen.bind("realms:textures/gui/realms/invitation_icons.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer3 + 4, integer4 + 4 + integer8, (float)integer7, boolean7 ? 8.0f : 0.0f, 8, 8, 48, 16);
RenderSystem.popMatrix();
}
final int integer7 = integer1 + 12;
final int integer8 = integer2;
final boolean boolean11 = boolean6 && boolean7;
if (boolean11) {
final String string16 = RealmsScreen.getLocalizedString((integer5 == 0) ? "mco.invites.nopending" : "mco.invites.pending");
final int integer9 = this.fontWidth(string16);
this.fillGradient(integer7 - 3, integer8 - 3, integer7 + integer9 + 3, integer8 + 8 + 3, -1073741824, -1073741824);
this.fontDrawShadow(string16, integer7, integer8, -1);
}
}
private boolean inPendingInvitationArea(final double double1, final double double2) {
int integer6 = this.width() / 2 + 50;
int integer7 = this.width() / 2 + 66;
int integer8 = 11;
int integer9 = 23;
if (this.numberOfPendingInvites != 0) {
integer6 -= 3;
integer7 += 3;
integer8 -= 5;
integer9 += 5;
}
return integer6 <= double1 && double1 <= integer7 && integer8 <= double2 && double2 <= integer9;
}
public void play(final RealmsServer realmsServer, final RealmsScreen realmsScreen) {
if (realmsServer != null) {
try {
if (!this.connectLock.tryLock(1L, TimeUnit.SECONDS)) {
return;
}
if (this.connectLock.getHoldCount() > 1) {
return;
}
}
catch (InterruptedException interruptedException4) {
return;
}
this.dontSetConnectedToRealms = true;
this.connectToServer(realmsServer, realmsScreen);
}
}
private void connectToServer(final RealmsServer realmsServer, final RealmsScreen realmsScreen) {
final RealmsLongRunningMcoTaskScreen czx4 = new RealmsLongRunningMcoTaskScreen(realmsScreen, new RealmsTasks.RealmsGetServerDetailsTask(this, realmsScreen, realmsServer, this.connectLock));
czx4.start();
Realms.setScreen(czx4);
}
private boolean isSelfOwnedServer(final RealmsServer realmsServer) {
return realmsServer.ownerUUID != null && realmsServer.ownerUUID.equals(Realms.getUUID());
}
private boolean isSelfOwnedNonExpiredServer(final RealmsServer realmsServer) {
return realmsServer.ownerUUID != null && realmsServer.ownerUUID.equals(Realms.getUUID()) && !realmsServer.expired;
}
private void drawExpired(final int integer1, final int integer2, final int integer3, final int integer4) {
RealmsScreen.bind("realms:textures/gui/realms/expired_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 10, 28);
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27 && integer4 < this.height() - 40 && integer4 > 32 && !this.shouldShowPopup()) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expired");
}
}
private void drawExpiring(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5) {
RealmsScreen.bind("realms:textures/gui/realms/expires_soon_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
if (this.animTick % 20 < 10) {
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 20, 28);
}
else {
RealmsScreen.blit(integer1, integer2, 10.0f, 0.0f, 10, 28, 20, 28);
}
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27 && integer4 < this.height() - 40 && integer4 > 32 && !this.shouldShowPopup()) {
if (integer5 <= 0) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expires.soon");
}
else if (integer5 == 1) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expires.day");
}
else {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expires.days", integer5);
}
}
}
private void drawOpen(final int integer1, final int integer2, final int integer3, final int integer4) {
RealmsScreen.bind("realms:textures/gui/realms/on_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 10, 28);
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27 && integer4 < this.height() - 40 && integer4 > 32 && !this.shouldShowPopup()) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.open");
}
}
private void drawClose(final int integer1, final int integer2, final int integer3, final int integer4) {
RealmsScreen.bind("realms:textures/gui/realms/off_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 10, 28);
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27 && integer4 < this.height() - 40 && integer4 > 32 && !this.shouldShowPopup()) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.closed");
}
}
private void drawLeave(final int integer1, final int integer2, final int integer3, final int integer4) {
boolean boolean6 = false;
if (integer3 >= integer1 && integer3 <= integer1 + 28 && integer4 >= integer2 && integer4 <= integer2 + 28 && integer4 < this.height() - 40 && integer4 > 32 && !this.shouldShowPopup()) {
boolean6 = true;
}
RealmsScreen.bind("realms:textures/gui/realms/leave_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, boolean6 ? 28.0f : 0.0f, 0.0f, 28, 28, 56, 28);
RenderSystem.popMatrix();
if (boolean6) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.leave");
}
}
private void drawConfigure(final int integer1, final int integer2, final int integer3, final int integer4) {
boolean boolean6 = false;
if (integer3 >= integer1 && integer3 <= integer1 + 28 && integer4 >= integer2 && integer4 <= integer2 + 28 && integer4 < this.height() - 40 && integer4 > 32 && !this.shouldShowPopup()) {
boolean6 = true;
}
RealmsScreen.bind("realms:textures/gui/realms/configure_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, boolean6 ? 28.0f : 0.0f, 0.0f, 28, 28, 56, 28);
RenderSystem.popMatrix();
if (boolean6) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.configure");
}
}
protected void renderMousehoverTooltip(final String string, final int integer2, final int integer3) {
if (string == null) {
return;
}
int integer4 = 0;
int integer5 = 0;
for (final String string2 : string.split("\n")) {
final int integer6 = this.fontWidth(string2);
if (integer6 > integer5) {
integer5 = integer6;
}
}
int integer7 = integer2 - integer5 - 5;
final int integer8 = integer3;
if (integer7 < 0) {
integer7 = integer2 + 12;
}
for (final String string3 : string.split("\n")) {
this.fillGradient(integer7 - 3, integer8 - ((integer4 == 0) ? 3 : 0) + integer4, integer7 + integer5 + 3, integer8 + 8 + 3 + integer4, -1073741824, -1073741824);
this.fontDrawShadow(string3, integer7, integer8 + integer4, 16777215);
integer4 += 10;
}
}
private void renderMoreInfo(final int integer1, final int integer2, final int integer3, final int integer4, final boolean boolean5) {
boolean boolean6 = false;
if (integer1 >= integer3 && integer1 <= integer3 + 20 && integer2 >= integer4 && integer2 <= integer4 + 20) {
boolean6 = true;
}
RealmsScreen.bind("realms:textures/gui/realms/questionmark.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer3, integer4, boolean5 ? 20.0f : 0.0f, 0.0f, 20, 20, 40, 20);
RenderSystem.popMatrix();
if (boolean6) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.info");
}
}
private void renderNews(final int integer1, final int integer2, final boolean boolean3, final int integer4, final int integer5, final boolean boolean6, final boolean boolean7) {
boolean boolean8 = false;
if (integer1 >= integer4 && integer1 <= integer4 + 20 && integer2 >= integer5 && integer2 <= integer5 + 20) {
boolean8 = true;
}
RealmsScreen.bind("realms:textures/gui/realms/news_icon.png");
if (boolean7) {
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
}
else {
RenderSystem.color4f(0.5f, 0.5f, 0.5f, 1.0f);
}
RenderSystem.pushMatrix();
final boolean boolean9 = boolean7 && boolean6;
RealmsScreen.blit(integer4, integer5, boolean9 ? 20.0f : 0.0f, 0.0f, 20, 20, 40, 20);
RenderSystem.popMatrix();
if (boolean8 && boolean7) {
this.toolTip = RealmsScreen.getLocalizedString("mco.news");
}
if (boolean3 && boolean7) {
final int integer6 = boolean8 ? 0 : ((int)(Math.max(0.0f, Math.max(RealmsMth.sin((10 + this.animTick) * 0.57f), RealmsMth.cos(this.animTick * 0.35f))) * -6.0f));
RealmsScreen.bind("realms:textures/gui/realms/invitation_icons.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer4 + 10, integer5 + 2 + integer6, 40.0f, 0.0f, 8, 8, 48, 16);
RenderSystem.popMatrix();
}
}
private void renderLocal() {
final String string2 = "LOCAL!";
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RenderSystem.translatef((float)(this.width() / 2 - 25), 20.0f, 0.0f);
RenderSystem.rotatef(-20.0f, 0.0f, 0.0f, 1.0f);
RenderSystem.scalef(1.5f, 1.5f, 1.5f);
this.drawString("LOCAL!", 0, 0, 8388479);
RenderSystem.popMatrix();
}
private void renderStage() {
final String string2 = "STAGE!";
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RenderSystem.translatef((float)(this.width() / 2 - 25), 20.0f, 0.0f);
RenderSystem.rotatef(-20.0f, 0.0f, 0.0f, 1.0f);
RenderSystem.scalef(1.5f, 1.5f, 1.5f);
this.drawString("STAGE!", 0, 0, -256);
RenderSystem.popMatrix();
}
public RealmsMainScreen newScreen() {
return new RealmsMainScreen(this.lastScreen);
}
public void closePopup() {
if (this.shouldShowPopup() && this.popupOpenedByUser) {
this.popupOpenedByUser = false;
}
}
public static void updateTeaserImages(final ResourceManager zb) {
final Collection<ResourceLocation> collection2 = zb.listResources("textures/gui/images", string -> string.endsWith(".png"));
RealmsMainScreen.teaserImages = collection2.stream().filter(sm -> sm.getNamespace().equals("realms")).collect(ImmutableList.toImmutableList());
}
static {
LOGGER = LogManager.getLogger();
RealmsMainScreen.teaserImages = ImmutableList.of();
realmsDataFetcher = new RealmsDataFetcher();
RealmsMainScreen.lastScrollYPosition = -1;
}
class RealmSelectionList extends RealmsObjectSelectionList<RealmListEntry> {
public RealmSelectionList() {
super(RealmsMainScreen.this.width(), RealmsMainScreen.this.height(), 32, RealmsMainScreen.this.height() - 40, 36);
}
@Override
public boolean isFocused() {
return RealmsMainScreen.this.isFocused(this);
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 != 257 && integer1 != 32 && integer1 != 335) {
return false;
}
final RealmListEntry realmListEntry5 = this.getSelected();
if (realmListEntry5 == null) {
return super.keyPressed(integer1, integer2, integer3);
}
return realmListEntry5.mouseClicked(0.0, 0.0, 0);
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
if (integer == 0 && double1 < this.getScrollbarPosition() && double2 >= this.y0() && double2 <= this.y1()) {
final int integer2 = RealmsMainScreen.this.realmSelectionList.getRowLeft();
final int integer3 = this.getScrollbarPosition();
final int integer4 = (int)Math.floor(double2 - this.y0()) - this.headerHeight() + this.getScroll() - 4;
final int integer5 = integer4 / this.itemHeight();
if (double1 >= integer2 && double1 <= integer3 && integer5 >= 0 && integer4 >= 0 && integer5 < this.getItemCount()) {
this.itemClicked(integer4, integer5, double1, double2, this.width());
RealmsMainScreen.this.clicks += 7;
this.selectItem(integer5);
}
return true;
}
return super.mouseClicked(double1, double2, integer);
}
@Override
public void selectItem(final int integer) {
this.setSelected(integer);
if (integer == -1) {
return;
}
RealmsServer realmsServer3;
if (RealmsMainScreen.this.shouldShowMessageInList()) {
if (integer == 0) {
Realms.narrateNow(RealmsScreen.getLocalizedString("mco.trial.message.line1"), RealmsScreen.getLocalizedString("mco.trial.message.line2"));
realmsServer3 = null;
}
else {
if (integer - 1 >= RealmsMainScreen.this.realmsServers.size()) {
RealmsMainScreen.this.selectedServerId = -1L;
return;
}
realmsServer3 = RealmsMainScreen.this.realmsServers.get(integer - 1);
}
}
else {
if (integer >= RealmsMainScreen.this.realmsServers.size()) {
RealmsMainScreen.this.selectedServerId = -1L;
return;
}
realmsServer3 = RealmsMainScreen.this.realmsServers.get(integer);
}
RealmsMainScreen.this.updateButtonStates(realmsServer3);
if (realmsServer3 == null) {
RealmsMainScreen.this.selectedServerId = -1L;
return;
}
if (realmsServer3.state == RealmsServer.State.UNINITIALIZED) {
Realms.narrateNow(RealmsScreen.getLocalizedString("mco.selectServer.uninitialized") + RealmsScreen.getLocalizedString("mco.gui.button"));
RealmsMainScreen.this.selectedServerId = -1L;
return;
}
RealmsMainScreen.this.selectedServerId = realmsServer3.id;
if (RealmsMainScreen.this.clicks >= 10 && RealmsMainScreen.this.playButton.active()) {
RealmsMainScreen.this.play(RealmsMainScreen.this.findServer(RealmsMainScreen.this.selectedServerId), RealmsMainScreen.this);
}
Realms.narrateNow(RealmsScreen.getLocalizedString("narrator.select", realmsServer3.name));
}
@Override
public void itemClicked(final int integer1, int integer2, final double double3, final double double4, final int integer5) {
if (RealmsMainScreen.this.shouldShowMessageInList()) {
if (integer2 == 0) {
RealmsMainScreen.this.popupOpenedByUser = true;
return;
}
--integer2;
}
if (integer2 >= RealmsMainScreen.this.realmsServers.size()) {
return;
}
final RealmsServer realmsServer9 = RealmsMainScreen.this.realmsServers.get(integer2);
if (realmsServer9 == null) {
return;
}
if (realmsServer9.state == RealmsServer.State.UNINITIALIZED) {
RealmsMainScreen.this.selectedServerId = -1L;
Realms.setScreen(new RealmsCreateRealmScreen(realmsServer9, RealmsMainScreen.this));
}
else {
RealmsMainScreen.this.selectedServerId = realmsServer9.id;
}
if (RealmsMainScreen.this.toolTip != null && RealmsMainScreen.this.toolTip.equals(RealmsScreen.getLocalizedString("mco.selectServer.configure"))) {
RealmsMainScreen.this.selectedServerId = realmsServer9.id;
RealmsMainScreen.this.configureClicked(realmsServer9);
}
else if (RealmsMainScreen.this.toolTip != null && RealmsMainScreen.this.toolTip.equals(RealmsScreen.getLocalizedString("mco.selectServer.leave"))) {
RealmsMainScreen.this.selectedServerId = realmsServer9.id;
RealmsMainScreen.this.leaveClicked(realmsServer9);
}
else if (RealmsMainScreen.this.isSelfOwnedServer(realmsServer9) && realmsServer9.expired && RealmsMainScreen.this.expiredHover) {
RealmsMainScreen.this.onRenew();
}
}
@Override
public int getMaxPosition() {
return this.getItemCount() * 36;
}
@Override
public int getRowWidth() {
return 300;
}
}
class RealmSelectionListTrialEntry extends RealmListEntry {
public RealmSelectionListTrialEntry() {
}
@Override
public void render(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final boolean boolean8, final float float9) {
this.renderTrialItem(integer1, integer3, integer2, integer6, integer7);
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
RealmsMainScreen.this.popupOpenedByUser = true;
return true;
}
private void renderTrialItem(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5) {
final int integer6 = integer3 + 8;
int integer7 = 0;
final String string9 = RealmsScreen.getLocalizedString("mco.trial.message.line1") + "\\n" + RealmsScreen.getLocalizedString("mco.trial.message.line2");
boolean boolean10 = false;
if (integer2 <= integer4 && integer4 <= RealmsMainScreen.this.realmSelectionList.getScroll() && integer3 <= integer5 && integer5 <= integer3 + 32) {
boolean10 = true;
}
int integer8 = 8388479;
if (boolean10 && !RealmsMainScreen.this.shouldShowPopup()) {
integer8 = 6077788;
}
for (final String string10 : string9.split("\\\\n")) {
RealmsMainScreen.this.drawCenteredString(string10, RealmsMainScreen.this.width() / 2, integer6 + integer7, integer8);
integer7 += 10;
}
}
}
class RealmSelectionListEntry extends RealmListEntry {
final RealmsServer mServerData;
public RealmSelectionListEntry(final RealmsServer realmsServer) {
this.mServerData = realmsServer;
}
@Override
public void render(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final boolean boolean8, final float float9) {
this.renderMcoServerItem(this.mServerData, integer3, integer2, integer6, integer7);
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
if (this.mServerData.state == RealmsServer.State.UNINITIALIZED) {
RealmsMainScreen.this.selectedServerId = -1L;
Realms.setScreen(new RealmsCreateRealmScreen(this.mServerData, RealmsMainScreen.this));
}
else {
RealmsMainScreen.this.selectedServerId = this.mServerData.id;
}
return true;
}
private void renderMcoServerItem(final RealmsServer realmsServer, final int integer2, final int integer3, final int integer4, final int integer5) {
this.renderLegacy(realmsServer, integer2 + 36, integer3, integer4, integer5);
}
private void renderLegacy(final RealmsServer realmsServer, final int integer2, final int integer3, final int integer4, final int integer5) {
if (realmsServer.state == RealmsServer.State.UNINITIALIZED) {
RealmsScreen.bind("realms:textures/gui/realms/world_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.enableAlphaTest();
RenderSystem.pushMatrix();
RealmsScreen.blit(integer2 + 10, integer3 + 6, 0.0f, 0.0f, 40, 20, 40, 20);
RenderSystem.popMatrix();
final float float7 = 0.5f + (1.0f + RealmsMth.sin(RealmsMainScreen.this.animTick * 0.25f)) * 0.25f;
final int integer6 = 0xFF000000 | (int)(127.0f * float7) << 16 | (int)(255.0f * float7) << 8 | (int)(127.0f * float7);
RealmsMainScreen.this.drawCenteredString(RealmsScreen.getLocalizedString("mco.selectServer.uninitialized"), integer2 + 10 + 40 + 75, integer3 + 12, integer6);
return;
}
final int integer7 = 225;
final int integer6 = 2;
if (realmsServer.expired) {
RealmsMainScreen.this.drawExpired(integer2 + 225 - 14, integer3 + 2, integer4, integer5);
}
else if (realmsServer.state == RealmsServer.State.CLOSED) {
RealmsMainScreen.this.drawClose(integer2 + 225 - 14, integer3 + 2, integer4, integer5);
}
else if (RealmsMainScreen.this.isSelfOwnedServer(realmsServer) && realmsServer.daysLeft < 7) {
RealmsMainScreen.this.drawExpiring(integer2 + 225 - 14, integer3 + 2, integer4, integer5, realmsServer.daysLeft);
}
else if (realmsServer.state == RealmsServer.State.OPEN) {
RealmsMainScreen.this.drawOpen(integer2 + 225 - 14, integer3 + 2, integer4, integer5);
}
if (!RealmsMainScreen.this.isSelfOwnedServer(realmsServer) && !RealmsMainScreen.overrideConfigure) {
RealmsMainScreen.this.drawLeave(integer2 + 225, integer3 + 2, integer4, integer5);
}
else {
RealmsMainScreen.this.drawConfigure(integer2 + 225, integer3 + 2, integer4, integer5);
}
if (!"0".equals(realmsServer.serverPing.nrOfPlayers)) {
final String string9 = ChatFormatting.GRAY + "" + realmsServer.serverPing.nrOfPlayers;
RealmsMainScreen.this.drawString(string9, integer2 + 207 - RealmsMainScreen.this.fontWidth(string9), integer3 + 3, 8421504);
if (integer4 >= integer2 + 207 - RealmsMainScreen.this.fontWidth(string9) && integer4 <= integer2 + 207 && integer5 >= integer3 + 1 && integer5 <= integer3 + 10 && integer5 < RealmsMainScreen.this.height() - 40 && integer5 > 32 && !RealmsMainScreen.this.shouldShowPopup()) {
RealmsMainScreen.this.toolTip = realmsServer.serverPing.playerList;
}
}
if (RealmsMainScreen.this.isSelfOwnedServer(realmsServer) && realmsServer.expired) {
boolean boolean9 = false;
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.enableBlend();
RealmsScreen.bind("minecraft:textures/gui/widgets.png");
RenderSystem.pushMatrix();
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
String string10 = RealmsScreen.getLocalizedString("mco.selectServer.expiredList");
String string11 = RealmsScreen.getLocalizedString("mco.selectServer.expiredRenew");
if (realmsServer.expiredTrial) {
string10 = RealmsScreen.getLocalizedString("mco.selectServer.expiredTrial");
string11 = RealmsScreen.getLocalizedString("mco.selectServer.expiredSubscribe");
}
final int integer8 = RealmsMainScreen.this.fontWidth(string11) + 17;
final int integer9 = 16;
final int integer10 = integer2 + RealmsMainScreen.this.fontWidth(string10) + 8;
final int integer11 = integer3 + 13;
if (integer4 >= integer10 && integer4 < integer10 + integer8 && integer5 > integer11 && (integer5 <= integer11 + 16 & integer5 < RealmsMainScreen.this.height() - 40) && integer5 > 32 && !RealmsMainScreen.this.shouldShowPopup()) {
boolean9 = true;
RealmsMainScreen.this.expiredHover = true;
}
final int integer12 = boolean9 ? 2 : 1;
RealmsScreen.blit(integer10, integer11, 0.0f, (float)(46 + integer12 * 20), integer8 / 2, 8, 256, 256);
RealmsScreen.blit(integer10 + integer8 / 2, integer11, (float)(200 - integer8 / 2), (float)(46 + integer12 * 20), integer8 / 2, 8, 256, 256);
RealmsScreen.blit(integer10, integer11 + 8, 0.0f, (float)(46 + integer12 * 20 + 12), integer8 / 2, 8, 256, 256);
RealmsScreen.blit(integer10 + integer8 / 2, integer11 + 8, (float)(200 - integer8 / 2), (float)(46 + integer12 * 20 + 12), integer8 / 2, 8, 256, 256);
RenderSystem.popMatrix();
RenderSystem.disableBlend();
final int integer13 = integer3 + 11 + 5;
final int integer14 = boolean9 ? 16777120 : 16777215;
RealmsMainScreen.this.drawString(string10, integer2 + 2, integer13 + 1, 15553363);
RealmsMainScreen.this.drawCenteredString(string11, integer10 + integer8 / 2, integer13 + 1, integer14);
}
else {
if (realmsServer.worldType.equals(RealmsServer.WorldType.MINIGAME)) {
final int integer15 = 13413468;
final String string10 = RealmsScreen.getLocalizedString("mco.selectServer.minigame") + " ";
final int integer16 = RealmsMainScreen.this.fontWidth(string10);
RealmsMainScreen.this.drawString(string10, integer2 + 2, integer3 + 12, 13413468);
RealmsMainScreen.this.drawString(realmsServer.getMinigameName(), integer2 + 2 + integer16, integer3 + 12, 8421504);
}
else {
RealmsMainScreen.this.drawString(realmsServer.getDescription(), integer2 + 2, integer3 + 12, 8421504);
}
if (!RealmsMainScreen.this.isSelfOwnedServer(realmsServer)) {
RealmsMainScreen.this.drawString(realmsServer.owner, integer2 + 2, integer3 + 12 + 11, 8421504);
}
}
RealmsMainScreen.this.drawString(realmsServer.getName(), integer2 + 2, integer3 + 1, 16777215);
RealmsTextureManager.withBoundFace(realmsServer.ownerUUID, () -> {
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RealmsScreen.blit(integer2 - 36, integer3, 8.0f, 8.0f, 8, 8, 32, 32, 64, 64);
RealmsScreen.blit(integer2 - 36, integer3, 40.0f, 8.0f, 8, 8, 32, 32, 64, 64);
});
}
}
class PendingInvitesButton extends RealmsButton {
public PendingInvitesButton() {
super(8, RealmsMainScreen.this.width() / 2 + 47, 6, 22, 22, "");
}
@Override
public void tick() {
this.setMessage(Realms.getLocalizedString((RealmsMainScreen.this.numberOfPendingInvites == 0) ? "mco.invites.nopending" : "mco.invites.pending"));
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
super.render(integer1, integer2, float3);
}
@Override
public void onPress() {
final RealmsPendingInvitesScreen daa2 = new RealmsPendingInvitesScreen(RealmsMainScreen.this.lastScreen);
Realms.setScreen(daa2);
}
@Override
public void renderButton(final int integer1, final int integer2, final float float3) {
RealmsMainScreen.this.drawInvitationPendingIcon(integer1, integer2, this.x(), this.y(), this.getProxy().isHovered(), this.active());
}
}
class NewsButton extends RealmsButton {
public NewsButton() {
super(9, RealmsMainScreen.this.width() - 62, 6, 20, 20, "");
}
@Override
public void tick() {
this.setMessage(Realms.getLocalizedString("mco.news"));
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
super.render(integer1, integer2, float3);
}
@Override
public void onPress() {
if (RealmsMainScreen.this.newsLink == null) {
return;
}
RealmsUtil.browseTo(RealmsMainScreen.this.newsLink);
if (RealmsMainScreen.this.hasUnreadNews) {
final RealmsPersistence.RealmsPersistenceData a2 = RealmsPersistence.readFile();
a2.hasUnreadNews = false;
RealmsMainScreen.this.hasUnreadNews = false;
RealmsPersistence.writeFile(a2);
}
}
@Override
public void renderButton(final int integer1, final int integer2, final float float3) {
RealmsMainScreen.this.renderNews(integer1, integer2, RealmsMainScreen.this.hasUnreadNews, this.x(), this.y(), this.getProxy().isHovered(), this.active());
}
}
class ShowPopupButton extends RealmsButton {
public ShowPopupButton() {
super(10, RealmsMainScreen.this.width() - 37, 6, 20, 20, RealmsScreen.getLocalizedString("mco.selectServer.info"));
}
@Override
public void tick() {
super.tick();
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
super.render(integer1, integer2, float3);
}
@Override
public void renderButton(final int integer1, final int integer2, final float float3) {
RealmsMainScreen.this.renderMoreInfo(integer1, integer2, this.x(), this.y(), this.getProxy().isHovered());
}
@Override
public void onPress() {
RealmsMainScreen.this.popupOpenedByUser = !RealmsMainScreen.this.popupOpenedByUser;
}
}
class CloseButton extends RealmsButton {
public CloseButton() {
super(11, RealmsMainScreen.this.popupX0() + 4, RealmsMainScreen.this.popupY0() + 4, 12, 12, RealmsScreen.getLocalizedString("mco.selectServer.close"));
}
@Override
public void tick() {
super.tick();
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
super.render(integer1, integer2, float3);
}
@Override
public void renderButton(final int integer1, final int integer2, final float float3) {
RealmsScreen.bind("realms:textures/gui/realms/cross_icon.png");
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(this.x(), this.y(), 0.0f, this.getProxy().isHovered() ? 12.0f : 0.0f, 12, 12, 12, 24);
RenderSystem.popMatrix();
if (this.getProxy().isMouseOver(integer1, integer2)) {
RealmsMainScreen.this.toolTip = this.getProxy().getMessage();
}
}
@Override
public void onPress() {
RealmsMainScreen.this.onClosePopup();
}
}
}