RealmsSettingsTab.java
com.mojang.realmsclient.gui.screens.configuration.RealmsSettingsTab
信息
- 全限定名:com.mojang.realmsclient.gui.screens.configuration.RealmsSettingsTab
- 类型:public class
- 包:com.mojang.realmsclient.gui.screens.configuration
- 源码路径:src/main/java/com/mojang/realmsclient/gui/screens/configuration/RealmsSettingsTab.java
- 起始行号:L31
- 继承:GridLayoutTab
- 实现:RealmsConfigurationTab
- 职责:
TODO
字段/常量
-
COMPONENT_WIDTH- 类型:
int - 修饰符:
private static final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
EXTRA_SPACING- 类型:
int - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
DEFAULT_SPACING- 类型:
int - 修饰符:
private static final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
TITLE- 类型:
Component - 修饰符:
static final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
NAME_LABEL- 类型:
Component - 修饰符:
private static final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
DESCRIPTION_LABEL- 类型:
Component - 修饰符:
private static final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
REGION_PREFERENCE_LABEL- 类型:
Component - 修饰符:
private static final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
REALM_NAME_VALIDATION_ERROR_TOOLTIP- 类型:
Tooltip - 修饰符:
private static final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
configurationScreen- 类型:
RealmsConfigureWorldScreen - 修饰符:
private final - 源码定位:
L40 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L41 - 说明:
TODO
- 类型:
-
serverData- 类型:
RealmsServer - 修饰符:
private - 源码定位:
L42 - 说明:
TODO
- 类型:
-
regionServiceQuality- 类型:
Map<RealmsRegion,ServiceQuality> - 修饰符:
private final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
closeOpenButton- 类型:
Button - 修饰符:
final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
descEdit- 类型:
EditBox - 修饰符:
private final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
nameEdit- 类型:
EditBox - 修饰符:
private final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
selectedRegionStringWidget- 类型:
StringWidget - 修饰符:
private final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
selectedRegionImageWidget- 类型:
ImageWidget - 修饰符:
private final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
preferredRegionSelection- 类型:
RealmsSettingsTab.RegionSelection - 修饰符:
private - 源码定位:
L49 - 说明:
TODO
- 类型:
内部类/嵌套类型
com.mojang.realmsclient.gui.screens.configuration.RealmsSettingsTab.RegionSelection- 类型:
record - 修饰符:
public - 源码定位:
L208 - 说明:
TODO
- 类型:
构造器
RealmsSettingsTab(RealmsConfigureWorldScreen configurationScreen, Minecraft minecraft, RealmsServer serverData, Map<RealmsRegion,ServiceQuality> regionServiceQuality) @ L51
- 构造器名:RealmsSettingsTab
- 源码定位:L51
- 修饰符:package-private
参数:
- configurationScreen: RealmsConfigureWorldScreen
- minecraft: Minecraft
- serverData: RealmsServer
- regionServiceQuality: Map<RealmsRegion,ServiceQuality>
说明:
TODO
方法
下面的方法块按源码顺序生成。
private static MutableComponent getTranslatableFromPreference(RealmsSettingsTab.RegionSelection regionSelection) @ L119
- 方法名:getTranslatableFromPreference
- 源码定位:L119
- 返回类型:MutableComponent
- 修饰符:private static
参数:
- regionSelection: RealmsSettingsTab.RegionSelection
说明:
TODO
private static Identifier getServiceQualityIcon(RealmsSettingsTab.RegionSelection regionSelection, Map<RealmsRegion,ServiceQuality> regionServiceQuality) @ L126
- 方法名:getServiceQualityIcon
- 源码定位:L126
- 返回类型:Identifier
- 修饰符:private static
参数:
- regionSelection: RealmsSettingsTab.RegionSelection
- regionServiceQuality: Map<RealmsRegion,ServiceQuality>
说明:
TODO
private boolean isRealmNameValid() @ L135
- 方法名:isRealmNameValid
- 源码定位:L135
- 返回类型:boolean
- 修饰符:private
参数:
- 无
说明:
TODO
private void openPreferenceSelector() @ L141
- 方法名:openPreferenceSelector
- 源码定位:L141
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
private void applyRegionPreferenceSelection(RegionSelectionPreference preference, RealmsRegion region) @ L150
- 方法名:applyRegionPreferenceSelection
- 源码定位:L150
- 返回类型:void
- 修饰符:private
参数:
- preference: RegionSelectionPreference
- region: RealmsRegion
说明:
TODO
private void updateRegionPreferenceValues() @ L155
- 方法名:updateRegionPreferenceValues
- 源码定位:L155
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
public void onSelected(RealmsServer serverData) @ L161
- 方法名:onSelected
- 源码定位:L161
- 返回类型:void
- 修饰符:public
参数:
- serverData: RealmsServer
说明:
TODO
public void updateData(RealmsServer serverData) @ L166
- 方法名:updateData
- 源码定位:L166
- 返回类型:void
- 修饰符:public
参数:
- serverData: RealmsServer
说明:
TODO
public void onDeselected(RealmsServer serverData) @ L190
- 方法名:onDeselected
- 源码定位:L190
- 返回类型:void
- 修饰符:public
参数:
- serverData: RealmsServer
说明:
TODO
public void save() @ L195
- 方法名:save
- 源码定位:L195
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class RealmsSettingsTab extends GridLayoutTab implements RealmsConfigurationTab {
private static final int COMPONENT_WIDTH = 212;
private static final int EXTRA_SPACING = 2;
private static final int DEFAULT_SPACING = 6;
static final Component TITLE = Component.translatable("mco.configure.world.settings.title");
private static final Component NAME_LABEL = Component.translatable("mco.configure.world.name");
private static final Component DESCRIPTION_LABEL = Component.translatable("mco.configure.world.description");
private static final Component REGION_PREFERENCE_LABEL = Component.translatable("mco.configure.world.region_preference");
private static final Tooltip REALM_NAME_VALIDATION_ERROR_TOOLTIP = Tooltip.create(Component.translatable("mco.configure.world.name.validation.whitespace"));
private final RealmsConfigureWorldScreen configurationScreen;
private final Minecraft minecraft;
private RealmsServer serverData;
private final Map<RealmsRegion, ServiceQuality> regionServiceQuality;
final Button closeOpenButton;
private final EditBox descEdit;
private final EditBox nameEdit;
private final StringWidget selectedRegionStringWidget;
private final ImageWidget selectedRegionImageWidget;
private RealmsSettingsTab.RegionSelection preferredRegionSelection;
RealmsSettingsTab(
RealmsConfigureWorldScreen configurationScreen, Minecraft minecraft, RealmsServer serverData, Map<RealmsRegion, ServiceQuality> regionServiceQuality
) {
super(TITLE);
this.configurationScreen = configurationScreen;
this.minecraft = minecraft;
this.serverData = serverData;
this.regionServiceQuality = regionServiceQuality;
GridLayout.RowHelper helper = this.layout.rowSpacing(6).createRowHelper(1);
helper.addChild(new StringWidget(NAME_LABEL, configurationScreen.getFont()));
this.nameEdit = new EditBox(minecraft.font, 0, 0, 212, 20, Component.translatable("mco.configure.world.name"));
this.nameEdit.setMaxLength(32);
this.nameEdit.setResponder(value -> {
if (!this.isRealmNameValid()) {
this.nameEdit.setTextColor(-2142128);
this.nameEdit.setTooltip(REALM_NAME_VALIDATION_ERROR_TOOLTIP);
} else {
this.nameEdit.setTooltip(null);
this.nameEdit.setTextColor(-2039584);
}
});
helper.addChild(this.nameEdit);
helper.addChild(SpacerElement.height(2));
helper.addChild(new StringWidget(DESCRIPTION_LABEL, configurationScreen.getFont()));
this.descEdit = new EditBox(minecraft.font, 0, 0, 212, 20, Component.translatable("mco.configure.world.description"));
this.descEdit.setMaxLength(32);
helper.addChild(this.descEdit);
helper.addChild(SpacerElement.height(2));
helper.addChild(new StringWidget(REGION_PREFERENCE_LABEL, configurationScreen.getFont()));
EqualSpacingLayout selectedRegion = new EqualSpacingLayout(0, 0, 212, 9, EqualSpacingLayout.Orientation.HORIZONTAL);
this.selectedRegionStringWidget = selectedRegion.addChild(new StringWidget(192, 9, Component.empty(), configurationScreen.getFont()));
this.selectedRegionImageWidget = selectedRegion.addChild(ImageWidget.sprite(10, 8, ServiceQuality.UNKNOWN.getIcon()));
helper.addChild(selectedRegion);
helper.addChild(
Button.builder(Component.translatable("mco.configure.world.buttons.region_preference"), button -> this.openPreferenceSelector())
.bounds(0, 0, 212, 20)
.build()
);
helper.addChild(SpacerElement.height(2));
this.closeOpenButton = helper.addChild(
Button.builder(
Component.empty(),
button -> {
if (serverData.state == RealmsServer.State.OPEN) {
minecraft.setScreen(
RealmsPopups.customPopupScreen(
configurationScreen,
Component.translatable("mco.configure.world.close.question.title"),
Component.translatable("mco.configure.world.close.question.line1"),
popup -> {
this.save();
configurationScreen.closeTheWorld();
}
)
);
} else {
this.save();
configurationScreen.openTheWorld(false);
}
}
)
.bounds(0, 0, 212, 20)
.build()
);
this.closeOpenButton.active = false;
this.updateData(serverData);
}
private static MutableComponent getTranslatableFromPreference(RealmsSettingsTab.RegionSelection regionSelection) {
return (regionSelection.preference().equals(RegionSelectionPreference.MANUAL) && regionSelection.region() != null
? Component.translatable(regionSelection.region().translationKey)
: Component.translatable(regionSelection.preference().translationKey))
.withStyle(ChatFormatting.GRAY);
}
private static Identifier getServiceQualityIcon(RealmsSettingsTab.RegionSelection regionSelection, Map<RealmsRegion, ServiceQuality> regionServiceQuality) {
if (regionSelection.region() != null && regionServiceQuality.containsKey(regionSelection.region())) {
ServiceQuality serviceQuality = regionServiceQuality.getOrDefault(regionSelection.region(), ServiceQuality.UNKNOWN);
return serviceQuality.getIcon();
} else {
return ServiceQuality.UNKNOWN.getIcon();
}
}
private boolean isRealmNameValid() {
String name = this.nameEdit.getValue();
String trimmedName = name.trim();
return !trimmedName.isEmpty() && name.length() == trimmedName.length();
}
private void openPreferenceSelector() {
this.minecraft
.setScreen(
new RealmsPreferredRegionSelectionScreen(
this.configurationScreen, this::applyRegionPreferenceSelection, this.regionServiceQuality, this.preferredRegionSelection
)
);
}
private void applyRegionPreferenceSelection(RegionSelectionPreference preference, RealmsRegion region) {
this.preferredRegionSelection = new RealmsSettingsTab.RegionSelection(preference, region);
this.updateRegionPreferenceValues();
}
private void updateRegionPreferenceValues() {
this.selectedRegionStringWidget.setMessage(getTranslatableFromPreference(this.preferredRegionSelection));
this.selectedRegionImageWidget.updateResource(getServiceQualityIcon(this.preferredRegionSelection, this.regionServiceQuality));
this.selectedRegionImageWidget.visible = this.preferredRegionSelection.preference == RegionSelectionPreference.MANUAL;
}
@Override
public void onSelected(RealmsServer serverData) {
this.updateData(serverData);
}
@Override
public void updateData(RealmsServer serverData) {
this.serverData = serverData;
if (serverData.regionSelectionPreference == null) {
serverData.regionSelectionPreference = RegionSelectionPreferenceDto.DEFAULT;
}
if (serverData.regionSelectionPreference.regionSelectionPreference == RegionSelectionPreference.MANUAL
&& serverData.regionSelectionPreference.preferredRegion == null) {
Optional<RealmsRegion> first = this.regionServiceQuality.keySet().stream().findFirst();
first.ifPresent(region -> serverData.regionSelectionPreference.preferredRegion = region);
}
String key = serverData.state == RealmsServer.State.OPEN ? "mco.configure.world.buttons.close" : "mco.configure.world.buttons.open";
this.closeOpenButton.setMessage(Component.translatable(key));
this.closeOpenButton.active = true;
this.preferredRegionSelection = new RealmsSettingsTab.RegionSelection(
serverData.regionSelectionPreference.regionSelectionPreference, serverData.regionSelectionPreference.preferredRegion
);
this.nameEdit.setValue(Objects.requireNonNullElse(serverData.getName(), ""));
this.descEdit.setValue(serverData.getDescription());
this.updateRegionPreferenceValues();
}
@Override
public void onDeselected(RealmsServer serverData) {
this.save();
}
public void save() {
String realmName = this.nameEdit.getValue().trim();
if (this.serverData.regionSelectionPreference == null
|| !Objects.equals(realmName, this.serverData.name)
|| !Objects.equals(this.descEdit.getValue(), this.serverData.motd)
|| this.preferredRegionSelection.preference() != this.serverData.regionSelectionPreference.regionSelectionPreference
|| this.preferredRegionSelection.region() != this.serverData.regionSelectionPreference.preferredRegion) {
this.configurationScreen
.saveSettings(realmName, this.descEdit.getValue(), this.preferredRegionSelection.preference(), this.preferredRegionSelection.region());
}
}
@OnlyIn(Dist.CLIENT)
public record RegionSelection(RegionSelectionPreference preference, @Nullable RealmsRegion region) {
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsPopups.customPopupScreen()
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
RealmsPreferredRegionSelectionScreen
- 引用位置:
构造调用 - 关联成员:
RealmsPreferredRegionSelectionScreen()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Button.builder()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
EditBox()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
ImageWidget.sprite()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
StringWidget()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Tooltip.create()
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
EqualSpacingLayout()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SpacerElement.height()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Component.empty(), Component.translatable()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
返回值
- 引用位置: