RealmsWorldsTab.java
com.mojang.realmsclient.gui.screens.configuration.RealmsWorldsTab
信息
- 全限定名:com.mojang.realmsclient.gui.screens.configuration.RealmsWorldsTab
- 类型:package-private class
- 包:com.mojang.realmsclient.gui.screens.configuration
- 源码路径:src/main/java/com/mojang/realmsclient/gui/screens/configuration/RealmsWorldsTab.java
- 起始行号:L25
- 继承:GridLayoutTab
- 实现:RealmsConfigurationTab
- 职责:
TODO
字段/常量
-
TITLE- 类型:
Component - 修饰符:
static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
configurationScreen- 类型:
RealmsConfigureWorldScreen - 修饰符:
private final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
serverData- 类型:
RealmsServer - 修饰符:
private - 源码定位:
L29 - 说明:
TODO
- 类型:
-
optionsButton- 类型:
Button - 修饰符:
private final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
backupButton- 类型:
Button - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
resetWorldButton- 类型:
Button - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
slotButtonList- 类型:
List<RealmsWorldSlotButton> - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
RealmsWorldsTab(RealmsConfigureWorldScreen configurationScreen, Minecraft minecraft, RealmsServer serverData) @ L35
- 构造器名:RealmsWorldsTab
- 源码定位:L35
- 修饰符:package-private
参数:
- configurationScreen: RealmsConfigureWorldScreen
- minecraft: Minecraft
- serverData: RealmsServer
说明:
TODO
方法
下面的方法块按源码顺序生成。
private void resetButtonPressed() @ L76
- 方法名:resetButtonPressed
- 源码定位:L76
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
private void templateSelectionCallback(WorldTemplate worldTemplate) @ L96
- 方法名:templateSelectionCallback
- 源码定位:L96
- 返回类型:void
- 修饰符:private
参数:
- worldTemplate: WorldTemplate
说明:
TODO
private boolean isMinigame() @ L106
- 方法名:isMinigame
- 源码定位:L106
- 返回类型:boolean
- 修饰符:private
参数:
- 无
说明:
TODO
public void onSelected(RealmsServer serverData) @ L110
- 方法名:onSelected
- 源码定位:L110
- 返回类型:void
- 修饰符:public
参数:
- serverData: RealmsServer
说明:
TODO
public void updateData(RealmsServer serverData) @ L115
- 方法名:updateData
- 源码定位:L115
- 返回类型:void
- 修饰符:public
参数:
- serverData: RealmsServer
说明:
TODO
private RealmsWorldSlotButton createSlotButton(int i) @ L145
- 方法名:createSlotButton
- 源码定位:L145
- 返回类型:RealmsWorldSlotButton
- 修饰符:private
参数:
- i: int
说明:
TODO
private void switchToMinigame() @ L165
- 方法名:switchToMinigame
- 源码定位:L165
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
private void switchToFullSlot(int selectedSlot, RealmsServer serverData) @ L179
- 方法名:switchToFullSlot
- 源码定位:L179
- 返回类型:void
- 修饰符:private
参数:
- selectedSlot: int
- serverData: RealmsServer
说明:
TODO
private void switchToEmptySlot(int selectedSlot, RealmsServer serverData) @ L200
- 方法名:switchToEmptySlot
- 源码定位:L200
- 返回类型:void
- 修饰符:private
参数:
- selectedSlot: int
- serverData: RealmsServer
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
class RealmsWorldsTab extends GridLayoutTab implements RealmsConfigurationTab {
static final Component TITLE = Component.translatable("mco.configure.worlds.title");
private final RealmsConfigureWorldScreen configurationScreen;
private final Minecraft minecraft;
private RealmsServer serverData;
private final Button optionsButton;
private final Button backupButton;
private final Button resetWorldButton;
private final List<RealmsWorldSlotButton> slotButtonList = Lists.newArrayList();
RealmsWorldsTab(RealmsConfigureWorldScreen configurationScreen, Minecraft minecraft, RealmsServer serverData) {
super(TITLE);
this.configurationScreen = configurationScreen;
this.minecraft = minecraft;
this.serverData = serverData;
GridLayout.RowHelper helper = this.layout.spacing(20).createRowHelper(1);
GridLayout.RowHelper slots = new GridLayout().spacing(16).createRowHelper(4);
this.slotButtonList.clear();
for (int i = 1; i < 5; i++) {
this.slotButtonList.add(slots.addChild(this.createSlotButton(i), LayoutSettings.defaults().alignVerticallyBottom()));
}
helper.addChild(slots.getGrid());
GridLayout.RowHelper buttons = new GridLayout().spacing(8).createRowHelper(1);
this.optionsButton = buttons.addChild(
Button.builder(
Component.translatable("mco.configure.world.buttons.options"),
button -> minecraft.setScreen(
new RealmsSlotOptionsScreen(
configurationScreen, serverData.slots.get(serverData.activeSlot).copy(), serverData.worldType, serverData.activeSlot
)
)
)
.bounds(0, 0, 150, 20)
.build()
);
this.backupButton = buttons.addChild(
Button.builder(
Component.translatable("mco.configure.world.backup"),
button -> minecraft.setScreen(new RealmsBackupScreen(configurationScreen, serverData.copy(), serverData.activeSlot))
)
.bounds(0, 0, 150, 20)
.build()
);
this.resetWorldButton = buttons.addChild(Button.builder(Component.empty(), button -> this.resetButtonPressed()).bounds(0, 0, 150, 20).build());
helper.addChild(buttons.getGrid(), LayoutSettings.defaults().alignHorizontallyCenter());
this.backupButton.active = true;
this.updateData(serverData);
}
private void resetButtonPressed() {
if (this.isMinigame()) {
this.minecraft
.setScreen(
new RealmsSelectWorldTemplateScreen(
Component.translatable("mco.template.title.minigame"), this::templateSelectionCallback, RealmsServer.WorldType.MINIGAME, null
)
);
} else {
this.minecraft
.setScreen(
RealmsResetWorldScreen.forResetSlot(
this.configurationScreen,
this.serverData.copy(),
() -> this.minecraft.execute(() -> this.minecraft.setScreen(this.configurationScreen.getNewScreen()))
)
);
}
}
private void templateSelectionCallback(@Nullable WorldTemplate worldTemplate) {
if (worldTemplate != null && WorldTemplate.WorldTemplateType.MINIGAME == worldTemplate.type()) {
this.configurationScreen.stateChanged();
RealmsConfigureWorldScreen newScreen = this.configurationScreen.getNewScreen();
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(newScreen, new SwitchMinigameTask(this.serverData.id, worldTemplate, newScreen)));
} else {
this.minecraft.setScreen(this.configurationScreen);
}
}
private boolean isMinigame() {
return this.serverData.isMinigameActive();
}
@Override
public void onSelected(RealmsServer serverData) {
this.updateData(serverData);
}
@Override
public void updateData(RealmsServer serverData) {
this.serverData = serverData;
this.optionsButton.active = !serverData.expired && !this.isMinigame();
this.resetWorldButton.active = !serverData.expired;
if (this.isMinigame()) {
this.resetWorldButton.setMessage(Component.translatable("mco.configure.world.buttons.switchminigame"));
} else {
boolean emptySlot = serverData.slots.containsKey(serverData.activeSlot) && serverData.slots.get(serverData.activeSlot).options.empty;
if (emptySlot) {
this.resetWorldButton.setMessage(Component.translatable("mco.configure.world.buttons.newworld"));
} else {
this.resetWorldButton.setMessage(Component.translatable("mco.configure.world.buttons.resetworld"));
}
}
this.backupButton.active = !this.isMinigame();
for (RealmsWorldSlotButton realmsWorldSlotButton : this.slotButtonList) {
RealmsWorldSlotButton.State state = realmsWorldSlotButton.setServerData(serverData);
if (state.activeSlot) {
realmsWorldSlotButton.setSize(80, 80);
} else {
realmsWorldSlotButton.setSize(50, 50);
}
}
this.slotButtonList.get(serverData.activeSlot - 1).updateSlotState(serverData);
}
private RealmsWorldSlotButton createSlotButton(int i) {
return new RealmsWorldSlotButton(0, 0, 80, 80, i, this.serverData, button -> {
RealmsWorldSlotButton.State state = ((RealmsWorldSlotButton)button).getState();
switch (state.action) {
case SWITCH_SLOT:
if (state.minigame) {
this.switchToMinigame();
} else if (state.empty) {
this.switchToEmptySlot(i, this.serverData);
} else {
this.switchToFullSlot(i, this.serverData);
}
case NOTHING:
return;
default:
throw new IllegalStateException("Unknown action " + state.action);
}
});
}
private void switchToMinigame() {
RealmsSelectWorldTemplateScreen screen = new RealmsSelectWorldTemplateScreen(
Component.translatable("mco.template.title.minigame"),
this::templateSelectionCallback,
RealmsServer.WorldType.MINIGAME,
null,
List.of(
Component.translatable("mco.minigame.world.info.line1").withColor(-4539718),
Component.translatable("mco.minigame.world.info.line2").withColor(-4539718)
)
);
this.minecraft.setScreen(screen);
}
private void switchToFullSlot(int selectedSlot, RealmsServer serverData) {
this.minecraft
.setScreen(
RealmsPopups.infoPopupScreen(
this.configurationScreen,
Component.translatable("mco.configure.world.slot.switch.question.line1"),
popup -> {
RealmsConfigureWorldScreen newScreen = this.configurationScreen.getNewScreen();
this.configurationScreen.stateChanged();
this.minecraft
.setScreen(
new RealmsLongRunningMcoTaskScreen(
newScreen,
new SwitchSlotTask(serverData.id, selectedSlot, () -> this.minecraft.execute(() -> this.minecraft.setScreen(newScreen)))
)
);
}
)
);
}
private void switchToEmptySlot(int selectedSlot, RealmsServer serverData) {
this.minecraft
.setScreen(
RealmsPopups.infoPopupScreen(
this.configurationScreen,
Component.translatable("mco.configure.world.slot.switch.question.line1"),
popups -> {
this.configurationScreen.stateChanged();
RealmsResetWorldScreen resetWorldScreen = RealmsResetWorldScreen.forEmptySlot(
this.configurationScreen,
selectedSlot,
serverData,
() -> this.minecraft.execute(() -> this.minecraft.setScreen(this.configurationScreen.getNewScreen()))
);
this.minecraft.setScreen(resetWorldScreen);
}
)
);
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
RealmsWorldSlotButton()
- 引用位置:
-
RealmsLongRunningMcoTaskScreen
- 引用位置:
构造调用 - 关联成员:
RealmsLongRunningMcoTaskScreen()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsPopups.infoPopupScreen()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsResetWorldScreen.forEmptySlot(), RealmsResetWorldScreen.forResetSlot()
- 引用位置:
-
RealmsSelectWorldTemplateScreen
- 引用位置:
构造调用 - 关联成员:
RealmsSelectWorldTemplateScreen()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsBackupScreen()
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsSlotOptionsScreen()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
SwitchMinigameTask()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
SwitchSlotTask()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Button.builder()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
GridLayout()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LayoutSettings.defaults()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Component.empty(), Component.translatable()
- 引用位置: