RealmsConfigureWorldScreen.java
com.mojang.realmsclient.gui.screens.configuration.RealmsConfigureWorldScreen
信息
- 全限定名:com.mojang.realmsclient.gui.screens.configuration.RealmsConfigureWorldScreen
- 类型:public class
- 包:com.mojang.realmsclient.gui.screens.configuration
- 源码路径:src/main/java/com/mojang/realmsclient/gui/screens/configuration/RealmsConfigureWorldScreen.java
- 起始行号:L50
- 继承:RealmsScreen
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L51 - 说明:
TODO
- 类型:
-
PLAY_TEXT- 类型:
Component - 修饰符:
private static final - 源码定位:
L52 - 说明:
TODO
- 类型:
-
lastScreen- 类型:
RealmsMainScreen - 修饰符:
private final - 源码定位:
L53 - 说明:
TODO
- 类型:
-
serverData- 类型:
RealmsServer - 修饰符:
private - 源码定位:
L54 - 说明:
TODO
- 类型:
-
regions- 类型:
PreferredRegionsDto - 修饰符:
private - 源码定位:
L55 - 说明:
TODO
- 类型:
-
regionServiceQuality- 类型:
Map<RealmsRegion,ServiceQuality> - 修饰符:
private final - 源码定位:
L56 - 说明:
TODO
- 类型:
-
serverId- 类型:
long - 修饰符:
private final - 源码定位:
L57 - 说明:
TODO
- 类型:
-
stateChanged- 类型:
boolean - 修饰符:
private - 源码定位:
L58 - 说明:
TODO
- 类型:
-
tabManager- 类型:
TabManager - 修饰符:
private final - 源码定位:
L59 - 说明:
TODO
- 类型:
-
playButton- 类型:
Button - 修饰符:
private - 源码定位:
L62 - 说明:
TODO
- 类型:
-
tabNavigationBar- 类型:
TabNavigationBar - 修饰符:
private - 源码定位:
L63 - 说明:
TODO
- 类型:
-
layout- 类型:
HeaderAndFooterLayout - 修饰符:
final - 源码定位:
L64 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public RealmsConfigureWorldScreen(RealmsMainScreen lastScreen, long serverId, RealmsServer serverData, PreferredRegionsDto regions) @ L66
- 构造器名:RealmsConfigureWorldScreen
- 源码定位:L66
- 修饰符:public
参数:
- lastScreen: RealmsMainScreen
- serverId: long
- serverData: RealmsServer
- regions: PreferredRegionsDto
说明:
TODO
public RealmsConfigureWorldScreen(RealmsMainScreen lastScreen, long serverId) @ L74
- 构造器名:RealmsConfigureWorldScreen
- 源码定位:L74
- 修饰符:public
参数:
- lastScreen: RealmsMainScreen
- serverId: long
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void init() @ L78
- 方法名:init
- 源码定位:L78
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private void onTabSelected(Tab tab) @ L117
- 方法名:onTabSelected
- 源码定位:L117
- 返回类型:void
- 修饰符:private
参数:
- tab: Tab
说明:
TODO
private void onTabDeselected(Tab tab) @ L123
- 方法名:onTabDeselected
- 源码定位:L123
- 返回类型:void
- 修饰符:private
参数:
- tab: Tab
说明:
TODO
public int getContentHeight() @ L129
- 方法名:getContentHeight
- 源码定位:L129
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public int getHeaderHeight() @ L133
- 方法名:getHeaderHeight
- 源码定位:L133
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public Screen getLastScreen() @ L137
- 方法名:getLastScreen
- 源码定位:L137
- 返回类型:Screen
- 修饰符:public
参数:
- 无
说明:
TODO
public Screen createErrorScreen(RealmsServiceException exception) @ L141
- 方法名:createErrorScreen
- 源码定位:L141
- 返回类型:Screen
- 修饰符:public
参数:
- exception: RealmsServiceException
说明:
TODO
public void repositionElements() @ L145
- 方法名:repositionElements
- 源码定位:L145
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private void updateButtonStates() @ L157
- 方法名:updateButtonStates
- 源码定位:L157
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
public void extractRenderState(GuiGraphicsExtractor graphics, int xm, int ym, float a) @ L166
- 方法名:extractRenderState
- 源码定位:L166
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
- xm: int
- ym: int
- a: float
说明:
TODO
public boolean keyPressed(KeyEvent event) @ L174
- 方法名:keyPressed
- 源码定位:L174
- 返回类型:boolean
- 修饰符:public
参数:
- event: KeyEvent
说明:
TODO
protected void extractMenuBackground(GuiGraphicsExtractor graphics) @ L179
- 方法名:extractMenuBackground
- 源码定位:L179
- 返回类型:void
- 修饰符:protected
参数:
- graphics: GuiGraphicsExtractor
说明:
TODO
public void onClose() @ L187
- 方法名:onClose
- 源码定位:L187
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void fetchRegionData() @ L199
- 方法名:fetchRegionData
- 源码定位:L199
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void fetchServerData(long realmId) @ L209
- 方法名:fetchServerData
- 源码定位:L209
- 返回类型:void
- 修饰符:public
参数:
- realmId: long
说明:
TODO
private void onRealmsDataFetched() @ L219
- 方法名:onRealmsDataFetched
- 源码定位:L219
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
public void saveSlotSettings(RealmsSlot slot) @ L265
- 方法名:saveSlotSettings
- 源码定位:L265
- 返回类型:void
- 修饰符:public
参数:
- slot: RealmsSlot
说明:
TODO
public void saveSettings(String name, String desc, RegionSelectionPreference preference, RealmsRegion region) @ L292
- 方法名:saveSettings
- 源码定位:L292
- 返回类型:void
- 修饰符:public
参数:
- name: String
- desc: String
- preference: RegionSelectionPreference
- region: RealmsRegion
说明:
TODO
public void openTheWorld(boolean join) @ L317
- 方法名:openTheWorld
- 源码定位:L317
- 返回类型:void
- 修饰符:public
参数:
- join: boolean
说明:
TODO
public void closeTheWorld() @ L323
- 方法名:closeTheWorld
- 源码定位:L323
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void stateChanged() @ L328
- 方法名:stateChanged
- 源码定位:L328
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean invitePlayer(long serverId, String name) @ L339
- 方法名:invitePlayer
- 源码定位:L339
- 返回类型:boolean
- 修饰符:public
参数:
- serverId: long
- name: String
说明:
TODO
public RealmsConfigureWorldScreen getNewScreen() @ L358
- 方法名:getNewScreen
- 源码定位:L358
- 返回类型:RealmsConfigureWorldScreen
- 修饰符:public
参数:
- 无
说明:
TODO
public RealmsConfigureWorldScreen getNewScreenWithKnownData(RealmsServer serverData) @ L364
- 方法名:getNewScreenWithKnownData
- 源码定位:L364
- 返回类型:RealmsConfigureWorldScreen
- 修饰符:public
参数:
- serverData: RealmsServer
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class RealmsConfigureWorldScreen extends RealmsScreen {
private static final Logger LOGGER = LogUtils.getLogger();
private static final Component PLAY_TEXT = Component.translatable("mco.selectServer.play");
private final RealmsMainScreen lastScreen;
private @Nullable RealmsServer serverData;
private @Nullable PreferredRegionsDto regions;
private final Map<RealmsRegion, ServiceQuality> regionServiceQuality = new LinkedHashMap<>();
private final long serverId;
private boolean stateChanged;
private final TabManager tabManager = new TabManager(
x$0 -> this.addRenderableWidget(x$0), x$0 -> this.removeWidget(x$0), this::onTabSelected, this::onTabDeselected
);
private @Nullable Button playButton;
private @Nullable TabNavigationBar tabNavigationBar;
final HeaderAndFooterLayout layout = new HeaderAndFooterLayout(this);
public RealmsConfigureWorldScreen(RealmsMainScreen lastScreen, long serverId, @Nullable RealmsServer serverData, @Nullable PreferredRegionsDto regions) {
super(Component.empty());
this.lastScreen = lastScreen;
this.serverId = serverId;
this.serverData = serverData;
this.regions = regions;
}
public RealmsConfigureWorldScreen(RealmsMainScreen lastScreen, long serverId) {
this(lastScreen, serverId, null, null);
}
@Override
public void init() {
if (this.serverData == null) {
this.fetchServerData(this.serverId);
}
if (this.regions == null) {
this.fetchRegionData();
}
Component loadingTitle = Component.translatable("mco.configure.world.loading");
this.tabNavigationBar = TabNavigationBar.builder(this.tabManager, this.width)
.addTabs(
new LoadingTab(this.getFont(), RealmsWorldsTab.TITLE, loadingTitle),
new LoadingTab(this.getFont(), RealmsPlayersTab.TITLE, loadingTitle),
new LoadingTab(this.getFont(), RealmsSubscriptionTab.TITLE, loadingTitle),
new LoadingTab(this.getFont(), RealmsSettingsTab.TITLE, loadingTitle)
)
.build();
this.tabNavigationBar.setTabActiveState(3, false);
this.addRenderableWidget(this.tabNavigationBar);
LinearLayout footer = this.layout.addToFooter(LinearLayout.horizontal().spacing(8));
this.playButton = footer.addChild(Button.builder(PLAY_TEXT, button -> {
this.onClose();
RealmsMainScreen.play(this.serverData, this);
}).width(150).build());
this.playButton.active = false;
footer.addChild(Button.builder(CommonComponents.GUI_BACK, button -> this.onClose()).build());
this.layout.visitWidgets(button -> {
button.setTabOrderGroup(1);
this.addRenderableWidget(button);
});
this.tabNavigationBar.selectTab(0, false);
this.repositionElements();
if (this.serverData != null && this.regions != null) {
this.onRealmsDataFetched();
}
}
private void onTabSelected(Tab tab) {
if (this.serverData != null && tab instanceof RealmsConfigurationTab configurationTab) {
configurationTab.onSelected(this.serverData);
}
}
private void onTabDeselected(Tab tab) {
if (this.serverData != null && tab instanceof RealmsConfigurationTab configurationTab) {
configurationTab.onDeselected(this.serverData);
}
}
public int getContentHeight() {
return this.layout.getContentHeight();
}
public int getHeaderHeight() {
return this.layout.getHeaderHeight();
}
public Screen getLastScreen() {
return this.lastScreen;
}
public Screen createErrorScreen(RealmsServiceException exception) {
return new RealmsGenericErrorScreen(exception, this.lastScreen);
}
@Override
public void repositionElements() {
if (this.tabNavigationBar != null) {
this.tabNavigationBar.updateWidth(this.width);
int tabAreaTop = this.tabNavigationBar.getRectangle().bottom();
ScreenRectangle tabArea = new ScreenRectangle(0, tabAreaTop, this.width, this.height - this.layout.getFooterHeight() - tabAreaTop);
this.tabManager.setTabArea(tabArea);
this.layout.setHeaderHeight(tabAreaTop);
this.layout.arrangeElements();
}
}
private void updateButtonStates() {
if (this.serverData != null && this.playButton != null) {
this.playButton.active = this.serverData.shouldPlayButtonBeActive();
if (!this.playButton.active && this.serverData.state == RealmsServer.State.CLOSED) {
this.playButton.setTooltip(Tooltip.create(RealmsServer.WORLD_CLOSED_COMPONENT));
}
}
}
@Override
public void extractRenderState(GuiGraphicsExtractor graphics, int xm, int ym, float a) {
super.extractRenderState(graphics, xm, ym, a);
graphics.blit(
RenderPipelines.GUI_TEXTURED, Screen.FOOTER_SEPARATOR, 0, this.height - this.layout.getFooterHeight() - 2, 0.0F, 0.0F, this.width, 2, 32, 2
);
}
@Override
public boolean keyPressed(KeyEvent event) {
return this.tabNavigationBar.keyPressed(event) ? true : super.keyPressed(event);
}
@Override
protected void extractMenuBackground(GuiGraphicsExtractor graphics) {
graphics.blit(
RenderPipelines.GUI_TEXTURED, CreateWorldScreen.TAB_HEADER_BACKGROUND, 0, 0, 0.0F, 0.0F, this.width, this.layout.getHeaderHeight(), 16, 16
);
this.extractMenuBackground(graphics, 0, this.layout.getHeaderHeight(), this.width, this.height);
}
@Override
public void onClose() {
if (this.serverData != null && this.tabManager.getCurrentTab() instanceof RealmsConfigurationTab tab) {
tab.onDeselected(this.serverData);
}
this.minecraft.setScreen(this.lastScreen);
if (this.stateChanged) {
this.lastScreen.resetScreen();
}
}
public void fetchRegionData() {
RealmsUtil.supplyAsync(
RealmsClient::getPreferredRegionSelections, RealmsUtil.openScreenAndLogOnFailure(this::createErrorScreen, "Couldn't get realms region data")
)
.thenAcceptAsync(regions -> {
this.regions = regions;
this.onRealmsDataFetched();
}, this.minecraft);
}
public void fetchServerData(long realmId) {
RealmsUtil.<RealmsServer>supplyAsync(
client -> client.getOwnRealm(realmId), RealmsUtil.openScreenAndLogOnFailure(this::createErrorScreen, "Couldn't get own world")
)
.thenAcceptAsync(serverData -> {
this.serverData = serverData;
this.onRealmsDataFetched();
}, this.minecraft);
}
private void onRealmsDataFetched() {
if (this.serverData != null && this.regions != null) {
this.regionServiceQuality.clear();
for (RegionDataDto region : this.regions.regionData()) {
if (region.region() != RealmsRegion.INVALID_REGION) {
this.regionServiceQuality.put(region.region(), region.serviceQuality());
}
}
int focusedTabIndex = -1;
if (this.tabNavigationBar != null) {
focusedTabIndex = this.tabNavigationBar.getTabs().indexOf(this.tabManager.getCurrentTab());
}
if (this.tabNavigationBar != null) {
this.removeWidget(this.tabNavigationBar);
}
this.tabNavigationBar = this.addRenderableWidget(
TabNavigationBar.builder(this.tabManager, this.width)
.addTabs(
new RealmsWorldsTab(this, Objects.requireNonNull(this.minecraft), this.serverData),
new RealmsPlayersTab(this, this.minecraft, this.serverData),
new RealmsSubscriptionTab(this, this.minecraft, this.serverData),
new RealmsSettingsTab(this, this.minecraft, this.serverData, this.regionServiceQuality)
)
.build()
);
this.setFocused(this.tabNavigationBar);
if (focusedTabIndex != -1) {
this.tabNavigationBar.selectTab(focusedTabIndex, false);
}
this.tabNavigationBar.setTabActiveState(3, !this.serverData.expired);
if (this.serverData.expired) {
this.tabNavigationBar.setTabTooltip(3, Tooltip.create(Component.translatable("mco.configure.world.settings.expired")));
} else {
this.tabNavigationBar.setTabTooltip(3, null);
}
this.updateButtonStates();
this.repositionElements();
}
}
public void saveSlotSettings(RealmsSlot slot) {
RealmsSlot oldSlot = this.serverData.slots.get(this.serverData.activeSlot);
slot.options.templateId = oldSlot.options.templateId;
slot.options.templateImage = oldSlot.options.templateImage;
RealmsClient client = RealmsClient.getOrCreate();
try {
if (this.serverData.activeSlot != slot.slotId) {
throw new RealmsServiceException(RealmsError.CustomError.configurationError());
}
client.updateSlot(this.serverData.id, slot.slotId, slot.options, slot.settings);
this.serverData.slots.put(this.serverData.activeSlot, slot);
if (slot.options.gameMode != oldSlot.options.gameMode || slot.isHardcore() != oldSlot.isHardcore()) {
RealmsMainScreen.refreshServerList();
}
this.stateChanged();
} catch (RealmsServiceException var5) {
LOGGER.error("Couldn't save slot settings", (Throwable)var5);
this.minecraft.setScreen(new RealmsGenericErrorScreen(var5, this));
return;
}
this.minecraft.setScreen(this);
}
public void saveSettings(String name, String desc, RegionSelectionPreference preference, @Nullable RealmsRegion region) {
String description = StringUtil.isBlank(desc) ? "" : desc;
String finalName = StringUtil.isBlank(name) ? "" : name;
RealmsClient client = RealmsClient.getOrCreate();
try {
RealmsSlot realmsSlot = this.serverData.slots.get(this.serverData.activeSlot);
RealmsRegion regionSelection = preference == RegionSelectionPreference.MANUAL ? region : null;
RegionSelectionPreferenceDto regionSelectionPreference = new RegionSelectionPreferenceDto(preference, regionSelection);
client.updateConfiguration(
this.serverData.id, finalName, description, regionSelectionPreference, realmsSlot.slotId, realmsSlot.options, realmsSlot.settings
);
this.serverData.regionSelectionPreference = regionSelectionPreference;
this.serverData.name = name;
this.serverData.motd = description;
this.stateChanged();
} catch (RealmsServiceException var11) {
LOGGER.error("Couldn't save settings", (Throwable)var11);
this.minecraft.setScreen(new RealmsGenericErrorScreen(var11, this));
return;
}
this.minecraft.setScreen(this);
}
public void openTheWorld(boolean join) {
RealmsConfigureWorldScreen screenWithKnownData = this.getNewScreenWithKnownData(this.serverData);
this.minecraft
.setScreen(new RealmsLongRunningMcoTaskScreen(this.getNewScreen(), new OpenServerTask(this.serverData, screenWithKnownData, join, this.minecraft)));
}
public void closeTheWorld() {
RealmsConfigureWorldScreen screenWithKnownData = this.getNewScreenWithKnownData(this.serverData);
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(this.getNewScreen(), new CloseServerTask(this.serverData, screenWithKnownData)));
}
public void stateChanged() {
this.stateChanged = true;
if (this.tabNavigationBar != null) {
for (Tab child : this.tabNavigationBar.getTabs()) {
if (child instanceof RealmsConfigurationTab tab) {
tab.updateData(this.serverData);
}
}
}
}
public boolean invitePlayer(long serverId, String name) {
RealmsClient client = RealmsClient.getOrCreate();
try {
List<PlayerInfo> players = client.invite(serverId, name);
if (this.serverData != null) {
this.serverData.players = players;
} else {
this.serverData = client.getOwnRealm(serverId);
}
this.stateChanged();
return true;
} catch (RealmsServiceException var6) {
LOGGER.error("Couldn't invite user", (Throwable)var6);
return false;
}
}
public RealmsConfigureWorldScreen getNewScreen() {
RealmsConfigureWorldScreen realmsConfigureWorldScreen = new RealmsConfigureWorldScreen(this.lastScreen, this.serverId);
realmsConfigureWorldScreen.stateChanged = this.stateChanged;
return realmsConfigureWorldScreen;
}
public RealmsConfigureWorldScreen getNewScreenWithKnownData(RealmsServer serverData) {
RealmsConfigureWorldScreen realmsConfigureWorldScreen = new RealmsConfigureWorldScreen(this.lastScreen, this.serverId, serverData, this.regions);
realmsConfigureWorldScreen.stateChanged = this.stateChanged;
return realmsConfigureWorldScreen;
}
}引用的其他类
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
RealmsMainScreen.play(), RealmsMainScreen.refreshServerList()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsClient.getOrCreate()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsError.CustomError.configurationError()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RegionSelectionPreferenceDto()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/构造调用 - 关联成员:
RealmsServiceException()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsGenericErrorScreen()
- 引用位置:
-
RealmsLongRunningMcoTaskScreen
- 引用位置:
构造调用 - 关联成员:
RealmsLongRunningMcoTaskScreen()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsPlayersTab()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsSettingsTab()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsSubscriptionTab()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsWorldsTab()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsUtil.openScreenAndLogOnFailure(), RealmsUtil.supplyAsync()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
CloseServerTask()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
OpenServerTask()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Button.builder()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Tooltip.create()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
LoadingTab()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
TabManager()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
TabNavigationBar.builder()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
HeaderAndFooterLayout()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LinearLayout.horizontal()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ScreenRectangle()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Component.empty(), Component.translatable()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StringUtil.isBlank()
- 引用位置: