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

301 lines
16 KiB
Java

package com.mojang.realmsclient.gui.screens;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.RealmsGuiEventListener;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.Realms;
import net.minecraft.realms.RealmsLabel;
import net.minecraft.realms.RealmsSliderButton;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.dto.RealmsServer;
import com.mojang.realmsclient.dto.RealmsWorldOptions;
import net.minecraft.realms.RealmsEditBox;
import net.minecraft.realms.RealmsScreen;
public class RealmsSlotOptionsScreen extends RealmsScreen {
private RealmsEditBox nameEdit;
protected final RealmsConfigureWorldScreen parent;
private int column1_x;
private int column_width;
private int column2_x;
private final RealmsWorldOptions options;
private final RealmsServer.WorldType worldType;
private final int activeSlot;
private int difficultyIndex;
private int gameModeIndex;
private Boolean pvp;
private Boolean spawnNPCs;
private Boolean spawnAnimals;
private Boolean spawnMonsters;
private Integer spawnProtection;
private Boolean commandBlocks;
private Boolean forceGameMode;
private RealmsButton pvpButton;
private RealmsButton spawnAnimalsButton;
private RealmsButton spawnMonstersButton;
private RealmsButton spawnNPCsButton;
private RealmsSliderButton spawnProtectionButton;
private RealmsButton commandBlocksButton;
private RealmsButton forceGameModeButton;
String[] difficulties;
String[] gameModes;
String[][] gameModeHints;
private RealmsLabel titleLabel;
private RealmsLabel warningLabel;
public RealmsSlotOptionsScreen(final RealmsConfigureWorldScreen czs, final RealmsWorldOptions realmsWorldOptions, final RealmsServer.WorldType c, final int integer) {
this.parent = czs;
this.options = realmsWorldOptions;
this.worldType = c;
this.activeSlot = integer;
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
}
@Override
public void tick() {
this.nameEdit.tick();
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
switch (integer1) {
case 256: {
Realms.setScreen(this.parent);
return true;
}
default: {
return super.keyPressed(integer1, integer2, integer3);
}
}
}
@Override
public void init() {
this.column_width = 170;
this.column1_x = this.width() / 2 - this.column_width * 2 / 2;
this.column2_x = this.width() / 2 + 10;
this.createDifficultyAndGameMode();
this.difficultyIndex = this.options.difficulty;
this.gameModeIndex = this.options.gameMode;
if (this.worldType.equals(RealmsServer.WorldType.NORMAL)) {
this.pvp = this.options.pvp;
this.spawnProtection = this.options.spawnProtection;
this.forceGameMode = this.options.forceGameMode;
this.spawnAnimals = this.options.spawnAnimals;
this.spawnMonsters = this.options.spawnMonsters;
this.spawnNPCs = this.options.spawnNPCs;
this.commandBlocks = this.options.commandBlocks;
}
else {
String string2;
if (this.worldType.equals(RealmsServer.WorldType.ADVENTUREMAP)) {
string2 = RealmsScreen.getLocalizedString("mco.configure.world.edit.subscreen.adventuremap");
}
else if (this.worldType.equals(RealmsServer.WorldType.INSPIRATION)) {
string2 = RealmsScreen.getLocalizedString("mco.configure.world.edit.subscreen.inspiration");
}
else {
string2 = RealmsScreen.getLocalizedString("mco.configure.world.edit.subscreen.experience");
}
this.warningLabel = new RealmsLabel(string2, this.width() / 2, 26, 16711680);
this.pvp = true;
this.spawnProtection = 0;
this.forceGameMode = false;
this.spawnAnimals = true;
this.spawnMonsters = true;
this.spawnNPCs = true;
this.commandBlocks = true;
}
(this.nameEdit = this.newEditBox(11, this.column1_x + 2, RealmsConstants.row(1), this.column_width - 4, 20, RealmsScreen.getLocalizedString("mco.configure.world.edit.slot.name"))).setMaxLength(10);
this.nameEdit.setValue(this.options.getSlotName(this.activeSlot));
this.focusOn(this.nameEdit);
this.buttonsAdd(this.pvpButton = new RealmsButton(4, this.column2_x, RealmsConstants.row(1), this.column_width, 20, this.pvpTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.pvp = !RealmsSlotOptionsScreen.this.pvp;
this.setMessage(RealmsSlotOptionsScreen.this.pvpTitle());
}
});
this.buttonsAdd(new RealmsButton(3, this.column1_x, RealmsConstants.row(3), this.column_width, 20, this.gameModeTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.gameModeIndex = (RealmsSlotOptionsScreen.this.gameModeIndex + 1) % RealmsSlotOptionsScreen.this.gameModes.length;
this.setMessage(RealmsSlotOptionsScreen.this.gameModeTitle());
}
});
this.buttonsAdd(this.spawnAnimalsButton = new RealmsButton(5, this.column2_x, RealmsConstants.row(3), this.column_width, 20, this.spawnAnimalsTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.spawnAnimals = !RealmsSlotOptionsScreen.this.spawnAnimals;
this.setMessage(RealmsSlotOptionsScreen.this.spawnAnimalsTitle());
}
});
this.buttonsAdd(new RealmsButton(2, this.column1_x, RealmsConstants.row(5), this.column_width, 20, this.difficultyTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.difficultyIndex = (RealmsSlotOptionsScreen.this.difficultyIndex + 1) % RealmsSlotOptionsScreen.this.difficulties.length;
this.setMessage(RealmsSlotOptionsScreen.this.difficultyTitle());
if (RealmsSlotOptionsScreen.this.worldType.equals(RealmsServer.WorldType.NORMAL)) {
RealmsSlotOptionsScreen.this.spawnMonstersButton.active(RealmsSlotOptionsScreen.this.difficultyIndex != 0);
RealmsSlotOptionsScreen.this.spawnMonstersButton.setMessage(RealmsSlotOptionsScreen.this.spawnMonstersTitle());
}
}
});
this.buttonsAdd(this.spawnMonstersButton = new RealmsButton(6, this.column2_x, RealmsConstants.row(5), this.column_width, 20, this.spawnMonstersTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.spawnMonsters = !RealmsSlotOptionsScreen.this.spawnMonsters;
this.setMessage(RealmsSlotOptionsScreen.this.spawnMonstersTitle());
}
});
this.buttonsAdd(this.spawnProtectionButton = new SettingsSlider(8, this.column1_x, RealmsConstants.row(7), this.column_width, this.spawnProtection, 0.0f, 16.0f));
this.buttonsAdd(this.spawnNPCsButton = new RealmsButton(7, this.column2_x, RealmsConstants.row(7), this.column_width, 20, this.spawnNPCsTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.spawnNPCs = !RealmsSlotOptionsScreen.this.spawnNPCs;
this.setMessage(RealmsSlotOptionsScreen.this.spawnNPCsTitle());
}
});
this.buttonsAdd(this.forceGameModeButton = new RealmsButton(10, this.column1_x, RealmsConstants.row(9), this.column_width, 20, this.forceGameModeTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.forceGameMode = !RealmsSlotOptionsScreen.this.forceGameMode;
this.setMessage(RealmsSlotOptionsScreen.this.forceGameModeTitle());
}
});
this.buttonsAdd(this.commandBlocksButton = new RealmsButton(9, this.column2_x, RealmsConstants.row(9), this.column_width, 20, this.commandBlocksTitle()) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.commandBlocks = !RealmsSlotOptionsScreen.this.commandBlocks;
this.setMessage(RealmsSlotOptionsScreen.this.commandBlocksTitle());
}
});
if (!this.worldType.equals(RealmsServer.WorldType.NORMAL)) {
this.pvpButton.active(false);
this.spawnAnimalsButton.active(false);
this.spawnNPCsButton.active(false);
this.spawnMonstersButton.active(false);
this.spawnProtectionButton.active(false);
this.commandBlocksButton.active(false);
this.spawnProtectionButton.active(false);
this.forceGameModeButton.active(false);
}
if (this.difficultyIndex == 0) {
this.spawnMonstersButton.active(false);
}
this.buttonsAdd(new RealmsButton(1, this.column1_x, RealmsConstants.row(13), this.column_width, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.done")) {
@Override
public void onPress() {
RealmsSlotOptionsScreen.this.saveSettings();
}
});
this.buttonsAdd(new RealmsButton(0, this.column2_x, RealmsConstants.row(13), this.column_width, 20, RealmsScreen.getLocalizedString("gui.cancel")) {
@Override
public void onPress() {
Realms.setScreen(RealmsSlotOptionsScreen.this.parent);
}
});
this.addWidget(this.nameEdit);
this.addWidget(this.titleLabel = new RealmsLabel(RealmsScreen.getLocalizedString("mco.configure.world.buttons.options"), this.width() / 2, 17, 16777215));
if (this.warningLabel != null) {
this.addWidget(this.warningLabel);
}
this.narrateLabels();
}
private void createDifficultyAndGameMode() {
this.difficulties = new String[] { RealmsScreen.getLocalizedString("options.difficulty.peaceful"), RealmsScreen.getLocalizedString("options.difficulty.easy"), RealmsScreen.getLocalizedString("options.difficulty.normal"), RealmsScreen.getLocalizedString("options.difficulty.hard") };
this.gameModes = new String[] { RealmsScreen.getLocalizedString("selectWorld.gameMode.survival"), RealmsScreen.getLocalizedString("selectWorld.gameMode.creative"), RealmsScreen.getLocalizedString("selectWorld.gameMode.adventure") };
this.gameModeHints = new String[][] { { RealmsScreen.getLocalizedString("selectWorld.gameMode.survival.line1"), RealmsScreen.getLocalizedString("selectWorld.gameMode.survival.line2") }, { RealmsScreen.getLocalizedString("selectWorld.gameMode.creative.line1"), RealmsScreen.getLocalizedString("selectWorld.gameMode.creative.line2") }, { RealmsScreen.getLocalizedString("selectWorld.gameMode.adventure.line1"), RealmsScreen.getLocalizedString("selectWorld.gameMode.adventure.line2") } };
}
private String difficultyTitle() {
final String string2 = RealmsScreen.getLocalizedString("options.difficulty");
return string2 + ": " + this.difficulties[this.difficultyIndex];
}
private String gameModeTitle() {
final String string2 = RealmsScreen.getLocalizedString("selectWorld.gameMode");
return string2 + ": " + this.gameModes[this.gameModeIndex];
}
private String pvpTitle() {
return RealmsScreen.getLocalizedString("mco.configure.world.pvp") + ": " + RealmsScreen.getLocalizedString(((boolean)this.pvp) ? "mco.configure.world.on" : "mco.configure.world.off");
}
private String spawnAnimalsTitle() {
return RealmsScreen.getLocalizedString("mco.configure.world.spawnAnimals") + ": " + RealmsScreen.getLocalizedString(((boolean)this.spawnAnimals) ? "mco.configure.world.on" : "mco.configure.world.off");
}
private String spawnMonstersTitle() {
if (this.difficultyIndex == 0) {
return RealmsScreen.getLocalizedString("mco.configure.world.spawnMonsters") + ": " + RealmsScreen.getLocalizedString("mco.configure.world.off");
}
return RealmsScreen.getLocalizedString("mco.configure.world.spawnMonsters") + ": " + RealmsScreen.getLocalizedString(((boolean)this.spawnMonsters) ? "mco.configure.world.on" : "mco.configure.world.off");
}
private String spawnNPCsTitle() {
return RealmsScreen.getLocalizedString("mco.configure.world.spawnNPCs") + ": " + RealmsScreen.getLocalizedString(((boolean)this.spawnNPCs) ? "mco.configure.world.on" : "mco.configure.world.off");
}
private String commandBlocksTitle() {
return RealmsScreen.getLocalizedString("mco.configure.world.commandBlocks") + ": " + RealmsScreen.getLocalizedString(((boolean)this.commandBlocks) ? "mco.configure.world.on" : "mco.configure.world.off");
}
private String forceGameModeTitle() {
return RealmsScreen.getLocalizedString("mco.configure.world.forceGameMode") + ": " + RealmsScreen.getLocalizedString(((boolean)this.forceGameMode) ? "mco.configure.world.on" : "mco.configure.world.off");
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
final String string5 = RealmsScreen.getLocalizedString("mco.configure.world.edit.slot.name");
this.drawString(string5, this.column1_x + this.column_width / 2 - this.fontWidth(string5) / 2, RealmsConstants.row(0) - 5, 16777215);
this.titleLabel.render(this);
if (this.warningLabel != null) {
this.warningLabel.render(this);
}
this.nameEdit.render(integer1, integer2, float3);
super.render(integer1, integer2, float3);
}
private String getSlotName() {
if (this.nameEdit.getValue().equals(this.options.getDefaultSlotName(this.activeSlot))) {
return "";
}
return this.nameEdit.getValue();
}
private void saveSettings() {
if (this.worldType.equals(RealmsServer.WorldType.ADVENTUREMAP) || this.worldType.equals(RealmsServer.WorldType.EXPERIENCE) || this.worldType.equals(RealmsServer.WorldType.INSPIRATION)) {
this.parent.saveSlotSettings(new RealmsWorldOptions(this.options.pvp, this.options.spawnAnimals, this.options.spawnMonsters, this.options.spawnNPCs, this.options.spawnProtection, this.options.commandBlocks, this.difficultyIndex, this.gameModeIndex, this.options.forceGameMode, this.getSlotName()));
}
else {
this.parent.saveSlotSettings(new RealmsWorldOptions(this.pvp, this.spawnAnimals, this.spawnMonsters, this.spawnNPCs, this.spawnProtection, this.commandBlocks, this.difficultyIndex, this.gameModeIndex, this.forceGameMode, this.getSlotName()));
}
}
class SettingsSlider extends RealmsSliderButton {
public SettingsSlider(final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final float float7, final float float8) {
super(integer2, integer3, integer4, integer5, integer6, float7, float8);
}
@Override
public void applyValue() {
if (!RealmsSlotOptionsScreen.this.spawnProtectionButton.active()) {
return;
}
RealmsSlotOptionsScreen.this.spawnProtection = (int)this.toValue(this.getValue());
}
@Override
public String getMessage() {
return RealmsScreen.getLocalizedString("mco.configure.world.spawnProtection") + ": " + ((RealmsSlotOptionsScreen.this.spawnProtection == 0) ? RealmsScreen.getLocalizedString("mco.configure.world.off") : RealmsSlotOptionsScreen.this.spawnProtection);
}
}
}