RealmsNotification.java
com.mojang.realmsclient.dto.RealmsNotification
信息
- 全限定名:com.mojang.realmsclient.dto.RealmsNotification
- 类型:public class
- 包:com.mojang.realmsclient.dto
- 源码路径:src/main/java/com/mojang/realmsclient/dto/RealmsNotification.java
- 起始行号:L27
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
NOTIFICATION_UUID- 类型:
String - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
DISMISSABLE- 类型:
String - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
SEEN- 类型:
String - 修饰符:
private static final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
TYPE- 类型:
String - 修饰符:
private static final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
VISIT_URL- 类型:
String - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
INFO_POPUP- 类型:
String - 修饰符:
private static final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
BUTTON_TEXT_FALLBACK- 类型:
Component - 修饰符:
private static final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
uuid- 类型:
UUID - 修饰符:
private final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
dismissable- 类型:
boolean - 修饰符:
private final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
seen- 类型:
boolean - 修饰符:
private final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
type- 类型:
String - 修饰符:
private final - 源码定位:
L39 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
com.mojang.realmsclient.dto.RealmsNotification.InfoPopup- 类型:
class - 修饰符:
public static - 源码定位:
L93 - 说明:
TODO
- 类型:
-
com.mojang.realmsclient.dto.RealmsNotification.UrlButton- 类型:
record - 修饰符:
private - 源码定位:
L154 - 说明:
TODO
- 类型:
-
com.mojang.realmsclient.dto.RealmsNotification.VisitUrl- 类型:
class - 修饰符:
public static - 源码定位:
L166 - 说明:
TODO
- 类型:
构造器
private RealmsNotification(UUID uuid, boolean dismissable, boolean seen, String type) @ L41
- 构造器名:RealmsNotification
- 源码定位:L41
- 修饰符:private
参数:
- uuid: UUID
- dismissable: boolean
- seen: boolean
- type: String
说明:
TODO
方法
下面的方法块按源码顺序生成。
public boolean seen() @ L48
- 方法名:seen
- 源码定位:L48
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean dismissable() @ L52
- 方法名:dismissable
- 源码定位:L52
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public UUID uuid() @ L56
- 方法名:uuid
- 源码定位:L56
- 返回类型:UUID
- 修饰符:public
参数:
- 无
说明:
TODO
public static List<RealmsNotification> parseList(String json) @ L60
- 方法名:parseList
- 源码定位:L60
- 返回类型:List
- 修饰符:public static
参数:
- json: String
说明:
TODO
private static RealmsNotification parse(JsonObject jsonObject) @ L74
- 方法名:parse
- 源码定位:L74
- 返回类型:RealmsNotification
- 修饰符:private static
参数:
- jsonObject: JsonObject
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class RealmsNotification {
private static final Logger LOGGER = LogUtils.getLogger();
private static final String NOTIFICATION_UUID = "notificationUuid";
private static final String DISMISSABLE = "dismissable";
private static final String SEEN = "seen";
private static final String TYPE = "type";
private static final String VISIT_URL = "visitUrl";
private static final String INFO_POPUP = "infoPopup";
private static final Component BUTTON_TEXT_FALLBACK = Component.translatable("mco.notification.visitUrl.buttonText.default");
private final UUID uuid;
private final boolean dismissable;
private final boolean seen;
private final String type;
private RealmsNotification(UUID uuid, boolean dismissable, boolean seen, String type) {
this.uuid = uuid;
this.dismissable = dismissable;
this.seen = seen;
this.type = type;
}
public boolean seen() {
return this.seen;
}
public boolean dismissable() {
return this.dismissable;
}
public UUID uuid() {
return this.uuid;
}
public static List<RealmsNotification> parseList(String json) {
List<RealmsNotification> result = new ArrayList<>();
try {
for (JsonElement element : LenientJsonParser.parse(json).getAsJsonObject().get("notifications").getAsJsonArray()) {
result.add(parse(element.getAsJsonObject()));
}
} catch (Exception var5) {
LOGGER.error("Could not parse list of RealmsNotifications", (Throwable)var5);
}
return result;
}
private static RealmsNotification parse(JsonObject jsonObject) {
UUID uuid = JsonUtils.getUuidOr("notificationUuid", jsonObject, null);
if (uuid == null) {
throw new IllegalStateException("Missing required property notificationUuid");
} else {
boolean dismissable = JsonUtils.getBooleanOr("dismissable", jsonObject, true);
boolean seen = JsonUtils.getBooleanOr("seen", jsonObject, false);
String type = JsonUtils.getRequiredString("type", jsonObject);
RealmsNotification base = new RealmsNotification(uuid, dismissable, seen, type);
return (RealmsNotification)(switch (type) {
case "visitUrl" -> RealmsNotification.VisitUrl.parse(base, jsonObject);
case "infoPopup" -> RealmsNotification.InfoPopup.parse(base, jsonObject);
default -> base;
});
}
}
@OnlyIn(Dist.CLIENT)
public static class InfoPopup extends RealmsNotification {
private static final String TITLE = "title";
private static final String MESSAGE = "message";
private static final String IMAGE = "image";
private static final String URL_BUTTON = "urlButton";
private final RealmsText title;
private final RealmsText message;
private final Identifier image;
private final RealmsNotification.@Nullable UrlButton urlButton;
private InfoPopup(RealmsNotification base, RealmsText title, RealmsText message, Identifier image, RealmsNotification.@Nullable UrlButton urlButton) {
super(base.uuid, base.dismissable, base.seen, base.type);
this.title = title;
this.message = message;
this.image = image;
this.urlButton = urlButton;
}
public static RealmsNotification.InfoPopup parse(RealmsNotification base, JsonObject object) {
RealmsText title = JsonUtils.getRequired("title", object, RealmsText::parse);
RealmsText message = JsonUtils.getRequired("message", object, RealmsText::parse);
Identifier image = Identifier.parse(JsonUtils.getRequiredString("image", object));
RealmsNotification.UrlButton urlButton = JsonUtils.getOptional("urlButton", object, RealmsNotification.UrlButton::parse);
return new RealmsNotification.InfoPopup(base, title, message, image, urlButton);
}
public @Nullable PopupScreen buildScreen(Screen parentScreen, Consumer<UUID> dismiss) {
Component title = this.title.createComponent();
if (title == null) {
RealmsNotification.LOGGER.warn("Realms info popup had title with no available translation: {}", this.title);
return null;
} else {
PopupScreen.Builder builder = new PopupScreen.Builder(parentScreen, title)
.setImage(this.image)
.addMessage(this.message.createComponent(CommonComponents.EMPTY));
if (this.urlButton != null) {
builder.addButton(this.urlButton.urlText.createComponent(RealmsNotification.BUTTON_TEXT_FALLBACK), popup -> {
Minecraft minecraft = Minecraft.getInstance();
minecraft.setScreen(new ConfirmLinkScreen(result -> {
if (result) {
Util.getPlatform().openUri(this.urlButton.url);
minecraft.setScreen(parentScreen);
} else {
minecraft.setScreen(popup);
}
}, this.urlButton.url, true));
dismiss.accept(this.uuid());
});
}
builder.addButton(CommonComponents.GUI_OK, popup -> {
popup.onClose();
dismiss.accept(this.uuid());
});
builder.onClose(() -> dismiss.accept(this.uuid()));
return builder.build();
}
}
}
@OnlyIn(Dist.CLIENT)
private record UrlButton(String url, RealmsText urlText) {
private static final String URL = "url";
private static final String URL_TEXT = "urlText";
public static RealmsNotification.UrlButton parse(JsonObject jsonObject) {
String url = JsonUtils.getRequiredString("url", jsonObject);
RealmsText urlText = JsonUtils.getRequired("urlText", jsonObject, RealmsText::parse);
return new RealmsNotification.UrlButton(url, urlText);
}
}
@OnlyIn(Dist.CLIENT)
public static class VisitUrl extends RealmsNotification {
private static final String URL = "url";
private static final String BUTTON_TEXT = "buttonText";
private static final String MESSAGE = "message";
private final String url;
private final RealmsText buttonText;
private final RealmsText message;
private VisitUrl(RealmsNotification base, String url, RealmsText buttonText, RealmsText message) {
super(base.uuid, base.dismissable, base.seen, base.type);
this.url = url;
this.buttonText = buttonText;
this.message = message;
}
public static RealmsNotification.VisitUrl parse(RealmsNotification base, JsonObject jsonObject) {
String url = JsonUtils.getRequiredString("url", jsonObject);
RealmsText buttonText = JsonUtils.getRequired("buttonText", jsonObject, RealmsText::parse);
RealmsText message = JsonUtils.getRequired("message", jsonObject, RealmsText::parse);
return new RealmsNotification.VisitUrl(base, url, buttonText, message);
}
public Component getMessage() {
return this.message.createComponent(Component.translatable("mco.notification.visitUrl.message.default"));
}
public Button buildOpenLinkButton(Screen parentScreen) {
Component buttonLabel = this.buttonText.createComponent(RealmsNotification.BUTTON_TEXT_FALLBACK);
return Button.builder(buttonLabel, ConfirmLinkScreen.confirmLink(parentScreen, this.url)).build();
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
JsonUtils.getBooleanOr(), JsonUtils.getOptional(), JsonUtils.getRequired(), JsonUtils.getRequiredString(), JsonUtils.getUuidOr()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Button.builder()
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
Builder(), PopupScreen.Builder()
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
ConfirmLinkScreen(), ConfirmLinkScreen.confirmLink()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Identifier.parse()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LenientJsonParser.parse()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getPlatform()
- 引用位置: