minecraft-source/src/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java

384 lines
17 KiB
Java

package com.mojang.realmsclient.gui.screens;
import org.apache.logging.log4j.LogManager;
import com.mojang.realmsclient.gui.LongRunningTask;
import net.minecraft.realms.RealmsConfirmResultListener;
import com.mojang.realmsclient.util.RealmsTasks;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.realmsclient.util.RealmsTextureManager;
import net.minecraft.realms.RealmsGuiEventListener;
import com.mojang.realmsclient.exception.RealmsServiceException;
import com.mojang.realmsclient.client.RealmsClient;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.Realms;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import com.mojang.realmsclient.dto.WorldTemplatePaginatedList;
import net.minecraft.realms.RealmsLabel;
import com.mojang.realmsclient.dto.RealmsServer;
import net.minecraft.realms.RealmsScreen;
import org.apache.logging.log4j.Logger;
import com.mojang.realmsclient.dto.WorldTemplate;
public class RealmsResetWorldScreen extends RealmsScreenWithCallback<WorldTemplate> {
private static final Logger LOGGER;
private final RealmsScreen lastScreen;
private final RealmsServer serverData;
private final RealmsScreen returnScreen;
private RealmsLabel titleLabel;
private RealmsLabel subtitleLabel;
private String title;
private String subtitle;
private String buttonTitle;
private int subtitleColor;
private final int BUTTON_CANCEL_ID = 0;
private final int BUTTON_FRAME_START = 100;
private WorldTemplatePaginatedList templates;
private WorldTemplatePaginatedList adventuremaps;
private WorldTemplatePaginatedList experiences;
private WorldTemplatePaginatedList inspirations;
public int slot;
private ResetType typeToReset;
private ResetWorldInfo worldInfoToReset;
private WorldTemplate worldTemplateToReset;
private String resetTitle;
private int confirmationId;
public RealmsResetWorldScreen(final RealmsScreen realmsScreen1, final RealmsServer realmsServer, final RealmsScreen realmsScreen3) {
this.title = RealmsScreen.getLocalizedString("mco.reset.world.title");
this.subtitle = RealmsScreen.getLocalizedString("mco.reset.world.warning");
this.buttonTitle = RealmsScreen.getLocalizedString("gui.cancel");
this.subtitleColor = 16711680;
this.slot = -1;
this.typeToReset = ResetType.NONE;
this.confirmationId = -1;
this.lastScreen = realmsScreen1;
this.serverData = realmsServer;
this.returnScreen = realmsScreen3;
}
public RealmsResetWorldScreen(final RealmsScreen realmsScreen1, final RealmsServer realmsServer, final RealmsScreen realmsScreen3, final String string4, final String string5, final int integer, final String string7) {
this(realmsScreen1, realmsServer, realmsScreen3);
this.title = string4;
this.subtitle = string5;
this.subtitleColor = integer;
this.buttonTitle = string7;
}
public void setConfirmationId(final int integer) {
this.confirmationId = integer;
}
public void setSlot(final int integer) {
this.slot = integer;
}
public void setResetTitle(final String string) {
this.resetTitle = string;
}
@Override
public void init() {
this.buttonsAdd(new RealmsButton(0, this.width() / 2 - 40, RealmsConstants.row(14) - 10, 80, 20, this.buttonTitle) {
@Override
public void onPress() {
Realms.setScreen(RealmsResetWorldScreen.this.lastScreen);
}
});
new Thread("Realms-reset-world-fetcher") {
@Override
public void run() {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
try {
final WorldTemplatePaginatedList worldTemplatePaginatedList3 = cyy2.fetchWorldTemplates(1, 10, RealmsServer.WorldType.NORMAL);
final WorldTemplatePaginatedList worldTemplatePaginatedList4 = cyy2.fetchWorldTemplates(1, 10, RealmsServer.WorldType.ADVENTUREMAP);
final WorldTemplatePaginatedList worldTemplatePaginatedList5 = cyy2.fetchWorldTemplates(1, 10, RealmsServer.WorldType.EXPERIENCE);
final WorldTemplatePaginatedList worldTemplatePaginatedList6 = cyy2.fetchWorldTemplates(1, 10, RealmsServer.WorldType.INSPIRATION);
final WorldTemplatePaginatedList worldTemplatePaginatedList7;
final WorldTemplatePaginatedList worldTemplatePaginatedList8;
final WorldTemplatePaginatedList worldTemplatePaginatedList9;
final WorldTemplatePaginatedList worldTemplatePaginatedList10;
Realms.execute(() -> {
RealmsResetWorldScreen.this.templates = worldTemplatePaginatedList7;
RealmsResetWorldScreen.this.adventuremaps = worldTemplatePaginatedList8;
RealmsResetWorldScreen.this.experiences = worldTemplatePaginatedList9;
RealmsResetWorldScreen.this.inspirations = worldTemplatePaginatedList10;
});
}
catch (RealmsServiceException czg3) {
RealmsResetWorldScreen.LOGGER.error("Couldn't fetch templates in reset world", (Throwable)czg3);
}
}
}.start();
this.addWidget(this.titleLabel = new RealmsLabel(this.title, this.width() / 2, 7, 16777215));
this.addWidget(this.subtitleLabel = new RealmsLabel(this.subtitle, this.width() / 2, 22, this.subtitleColor));
this.buttonsAdd(new FrameButton(this.frame(1), RealmsConstants.row(0) + 10, RealmsScreen.getLocalizedString("mco.reset.world.generate"), -1L, "realms:textures/gui/realms/new_world.png", ResetType.GENERATE) {
@Override
public void onPress() {
Realms.setScreen(new RealmsResetNormalWorldScreen(RealmsResetWorldScreen.this, RealmsResetWorldScreen.this.title));
}
});
this.buttonsAdd(new FrameButton(this.frame(2), RealmsConstants.row(0) + 10, RealmsScreen.getLocalizedString("mco.reset.world.upload"), -1L, "realms:textures/gui/realms/upload.png", ResetType.UPLOAD) {
@Override
public void onPress() {
Realms.setScreen(new RealmsSelectFileToUploadScreen(RealmsResetWorldScreen.this.serverData.id, (RealmsResetWorldScreen.this.slot != -1) ? RealmsResetWorldScreen.this.slot : RealmsResetWorldScreen.this.serverData.activeSlot, RealmsResetWorldScreen.this));
}
});
this.buttonsAdd(new FrameButton(this.frame(3), RealmsConstants.row(0) + 10, RealmsScreen.getLocalizedString("mco.reset.world.template"), -1L, "realms:textures/gui/realms/survival_spawn.png", ResetType.SURVIVAL_SPAWN) {
@Override
public void onPress() {
final RealmsSelectWorldTemplateScreen daj2 = new RealmsSelectWorldTemplateScreen(RealmsResetWorldScreen.this, RealmsServer.WorldType.NORMAL, RealmsResetWorldScreen.this.templates);
daj2.setTitle(RealmsScreen.getLocalizedString("mco.reset.world.template"));
Realms.setScreen(daj2);
}
});
this.buttonsAdd(new FrameButton(this.frame(1), RealmsConstants.row(6) + 20, RealmsScreen.getLocalizedString("mco.reset.world.adventure"), -1L, "realms:textures/gui/realms/adventure.png", ResetType.ADVENTURE) {
@Override
public void onPress() {
final RealmsSelectWorldTemplateScreen daj2 = new RealmsSelectWorldTemplateScreen(RealmsResetWorldScreen.this, RealmsServer.WorldType.ADVENTUREMAP, RealmsResetWorldScreen.this.adventuremaps);
daj2.setTitle(RealmsScreen.getLocalizedString("mco.reset.world.adventure"));
Realms.setScreen(daj2);
}
});
this.buttonsAdd(new FrameButton(this.frame(2), RealmsConstants.row(6) + 20, RealmsScreen.getLocalizedString("mco.reset.world.experience"), -1L, "realms:textures/gui/realms/experience.png", ResetType.EXPERIENCE) {
@Override
public void onPress() {
final RealmsSelectWorldTemplateScreen daj2 = new RealmsSelectWorldTemplateScreen(RealmsResetWorldScreen.this, RealmsServer.WorldType.EXPERIENCE, RealmsResetWorldScreen.this.experiences);
daj2.setTitle(RealmsScreen.getLocalizedString("mco.reset.world.experience"));
Realms.setScreen(daj2);
}
});
this.buttonsAdd(new FrameButton(this.frame(3), RealmsConstants.row(6) + 20, RealmsScreen.getLocalizedString("mco.reset.world.inspiration"), -1L, "realms:textures/gui/realms/inspiration.png", ResetType.INSPIRATION) {
@Override
public void onPress() {
final RealmsSelectWorldTemplateScreen daj2 = new RealmsSelectWorldTemplateScreen(RealmsResetWorldScreen.this, RealmsServer.WorldType.INSPIRATION, RealmsResetWorldScreen.this.inspirations);
daj2.setTitle(RealmsScreen.getLocalizedString("mco.reset.world.inspiration"));
Realms.setScreen(daj2);
}
});
this.narrateLabels();
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 == 256) {
Realms.setScreen(this.lastScreen);
return true;
}
return super.keyPressed(integer1, integer2, integer3);
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
return super.mouseClicked(double1, double2, integer);
}
private int frame(final int integer) {
return this.width() / 2 - 130 + (integer - 1) * 100;
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.titleLabel.render(this);
this.subtitleLabel.render(this);
super.render(integer1, integer2, float3);
}
private void drawFrame(final int integer1, final int integer2, final String string3, final long long4, final String string5, final ResetType b, final boolean boolean7, final boolean boolean8) {
if (long4 == -1L) {
RealmsScreen.bind(string5);
}
else {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long4), string5);
}
if (boolean7) {
RenderSystem.color4f(0.56f, 0.56f, 0.56f, 1.0f);
}
else {
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
}
RealmsScreen.blit(integer1 + 2, integer2 + 14, 0.0f, 0.0f, 56, 56, 56, 56);
RealmsScreen.bind("realms:textures/gui/realms/slot_frame.png");
if (boolean7) {
RenderSystem.color4f(0.56f, 0.56f, 0.56f, 1.0f);
}
else {
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
}
RealmsScreen.blit(integer1, integer2 + 12, 0.0f, 0.0f, 60, 60, 60, 60);
this.drawCenteredString(string3, integer1 + 30, integer2, boolean7 ? 10526880 : 16777215);
}
@Override
void callback(final WorldTemplate worldTemplate) {
if (worldTemplate != null) {
if (this.slot == -1) {
this.resetWorldWithTemplate(worldTemplate);
}
else {
switch (worldTemplate.type) {
case WORLD_TEMPLATE: {
this.typeToReset = ResetType.SURVIVAL_SPAWN;
break;
}
case ADVENTUREMAP: {
this.typeToReset = ResetType.ADVENTURE;
break;
}
case EXPERIENCE: {
this.typeToReset = ResetType.EXPERIENCE;
break;
}
case INSPIRATION: {
this.typeToReset = ResetType.INSPIRATION;
break;
}
}
this.worldTemplateToReset = worldTemplate;
this.switchSlot();
}
}
}
private void switchSlot() {
this.switchSlot(this);
}
public void switchSlot(final RealmsScreen realmsScreen) {
final RealmsTasks.SwitchSlotTask i3 = new RealmsTasks.SwitchSlotTask(this.serverData.id, this.slot, realmsScreen, 100);
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, i3);
czz4.start();
Realms.setScreen(czz4);
}
@Override
public void confirmResult(final boolean boolean1, final int integer) {
if (integer == 100 && boolean1) {
switch (this.typeToReset) {
case ADVENTURE:
case SURVIVAL_SPAWN:
case EXPERIENCE:
case INSPIRATION: {
if (this.worldTemplateToReset != null) {
this.resetWorldWithTemplate(this.worldTemplateToReset);
break;
}
break;
}
case GENERATE: {
if (this.worldInfoToReset != null) {
this.triggerResetWorld(this.worldInfoToReset);
break;
}
break;
}
default: {}
}
return;
}
if (boolean1) {
Realms.setScreen(this.returnScreen);
if (this.confirmationId != -1) {
this.returnScreen.confirmResult(true, this.confirmationId);
}
}
}
public void resetWorldWithTemplate(final WorldTemplate worldTemplate) {
final RealmsTasks.ResettingWorldTask f3 = new RealmsTasks.ResettingWorldTask(this.serverData.id, this.returnScreen, worldTemplate);
if (this.resetTitle != null) {
f3.setResetTitle(this.resetTitle);
}
if (this.confirmationId != -1) {
f3.setConfirmationId(this.confirmationId);
}
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, f3);
czz4.start();
Realms.setScreen(czz4);
}
public void resetWorld(final ResetWorldInfo c) {
if (this.slot == -1) {
this.triggerResetWorld(c);
}
else {
this.typeToReset = ResetType.GENERATE;
this.worldInfoToReset = c;
this.switchSlot();
}
}
private void triggerResetWorld(final ResetWorldInfo c) {
final RealmsTasks.ResettingWorldTask f3 = new RealmsTasks.ResettingWorldTask(this.serverData.id, this.returnScreen, c.seed, c.levelType, c.generateStructures);
if (this.resetTitle != null) {
f3.setResetTitle(this.resetTitle);
}
if (this.confirmationId != -1) {
f3.setConfirmationId(this.confirmationId);
}
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, f3);
czz4.start();
Realms.setScreen(czz4);
}
static {
LOGGER = LogManager.getLogger();
}
enum ResetType {
NONE,
GENERATE,
UPLOAD,
ADVENTURE,
SURVIVAL_SPAWN,
EXPERIENCE,
INSPIRATION;
}
public static class ResetWorldInfo {
String seed;
int levelType;
boolean generateStructures;
public ResetWorldInfo(final String string, final int integer, final boolean boolean3) {
this.seed = string;
this.levelType = integer;
this.generateStructures = boolean3;
}
}
abstract class FrameButton extends RealmsButton {
private final long imageId;
private final String image;
private final ResetType resetType;
public FrameButton(final int integer2, final int integer3, final String string4, final long long5, final String string6, final ResetType b) {
super(100 + b.ordinal(), integer2, integer3, 60, 72, string4);
this.imageId = long5;
this.image = string6;
this.resetType = b;
}
@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) {
RealmsResetWorldScreen.this.drawFrame(this.x(), this.y(), this.getProxy().getMessage(), this.imageId, this.image, this.resetType, this.getProxy().isHovered(), this.getProxy().isMouseOver(integer1, integer2));
}
}
}