PlayerChatMessage.java
net.minecraft.network.chat.PlayerChatMessage
信息
- 全限定名:net.minecraft.network.chat.PlayerChatMessage
- 类型:public record
- 包:net.minecraft.network.chat
- 源码路径:src/main/java/net/minecraft/network/chat/PlayerChatMessage.java
- 起始行号:L18
- 职责:
TODO
字段/常量
-
MAP_CODEC- 类型:
MapCodec<PlayerChatMessage> - 修饰符:
public static final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
SYSTEM_SENDER- 类型:
UUID - 修饰符:
private static final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
MESSAGE_EXPIRES_AFTER_SERVER- 类型:
Duration - 修饰符:
public static final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
MESSAGE_EXPIRES_AFTER_CLIENT- 类型:
Duration - 修饰符:
public static final - 源码定位:
L40 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static PlayerChatMessage system(String content) @ L42
- 方法名:system
- 源码定位:L42
- 返回类型:PlayerChatMessage
- 修饰符:public static
参数:
- content: String
说明:
TODO
public static PlayerChatMessage unsigned(UUID sender, String content) @ L46
- 方法名:unsigned
- 源码定位:L46
- 返回类型:PlayerChatMessage
- 修饰符:public static
参数:
- sender: UUID
- content: String
说明:
TODO
public PlayerChatMessage withUnsignedContent(Component content) @ L52
- 方法名:withUnsignedContent
- 源码定位:L52
- 返回类型:PlayerChatMessage
- 修饰符:public
参数:
- content: Component
说明:
TODO
public PlayerChatMessage removeUnsignedContent() @ L57
- 方法名:removeUnsignedContent
- 源码定位:L57
- 返回类型:PlayerChatMessage
- 修饰符:public
参数:
- 无
说明:
TODO
public PlayerChatMessage filter(FilterMask filterMask) @ L61
- 方法名:filter
- 源码定位:L61
- 返回类型:PlayerChatMessage
- 修饰符:public
参数:
- filterMask: FilterMask
说明:
TODO
public PlayerChatMessage filter(boolean filtered) @ L65
- 方法名:filter
- 源码定位:L65
- 返回类型:PlayerChatMessage
- 修饰符:public
参数:
- filtered: boolean
说明:
TODO
public PlayerChatMessage removeSignature() @ L69
- 方法名:removeSignature
- 源码定位:L69
- 返回类型:PlayerChatMessage
- 修饰符:public
参数:
- 无
说明:
TODO
public static void updateSignature(SignatureUpdater.Output output, SignedMessageLink link, SignedMessageBody body) @ L75
- 方法名:updateSignature
- 源码定位:L75
- 返回类型:void
- 修饰符:public static
参数:
- output: SignatureUpdater.Output
- link: SignedMessageLink
- body: SignedMessageBody
说明:
TODO
public boolean verify(SignatureValidator signatureValidator) @ L81
- 方法名:verify
- 源码定位:L81
- 返回类型:boolean
- 修饰符:public
参数:
- signatureValidator: SignatureValidator
说明:
TODO
public String signedContent() @ L85
- 方法名:signedContent
- 源码定位:L85
- 返回类型:String
- 修饰符:public
参数:
- 无
说明:
TODO
public Component decoratedContent() @ L89
- 方法名:decoratedContent
- 源码定位:L89
- 返回类型:Component
- 修饰符:public
参数:
- 无
说明:
TODO
public Instant timeStamp() @ L93
- 方法名:timeStamp
- 源码定位:L93
- 返回类型:Instant
- 修饰符:public
参数:
- 无
说明:
TODO
public long salt() @ L97
- 方法名:salt
- 源码定位:L97
- 返回类型:long
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean hasExpiredServer(Instant now) @ L101
- 方法名:hasExpiredServer
- 源码定位:L101
- 返回类型:boolean
- 修饰符:public
参数:
- now: Instant
说明:
TODO
public boolean hasExpiredClient(Instant now) @ L105
- 方法名:hasExpiredClient
- 源码定位:L105
- 返回类型:boolean
- 修饰符:public
参数:
- now: Instant
说明:
TODO
public UUID sender() @ L109
- 方法名:sender
- 源码定位:L109
- 返回类型:UUID
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean isSystem() @ L113
- 方法名:isSystem
- 源码定位:L113
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean hasSignature() @ L117
- 方法名:hasSignature
- 源码定位:L117
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean hasSignatureFrom(UUID profileId) @ L121
- 方法名:hasSignatureFrom
- 源码定位:L121
- 返回类型:boolean
- 修饰符:public
参数:
- profileId: UUID
说明:
TODO
public boolean isFullyFiltered() @ L125
- 方法名:isFullyFiltered
- 源码定位:L125
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public static String describeSigned(PlayerChatMessage message) @ L129
- 方法名:describeSigned
- 源码定位:L129
- 返回类型:String
- 修饰符:public static
参数:
- message: PlayerChatMessage
说明:
TODO
代码
public record PlayerChatMessage(
SignedMessageLink link, @Nullable MessageSignature signature, SignedMessageBody signedBody, @Nullable Component unsignedContent, FilterMask filterMask
) {
public static final MapCodec<PlayerChatMessage> MAP_CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(
SignedMessageLink.CODEC.fieldOf("link").forGetter(PlayerChatMessage::link),
MessageSignature.CODEC.optionalFieldOf("signature").forGetter(playerChatMessage -> Optional.ofNullable(playerChatMessage.signature)),
SignedMessageBody.MAP_CODEC.forGetter(PlayerChatMessage::signedBody),
ComponentSerialization.CODEC
.optionalFieldOf("unsigned_content")
.forGetter(playerChatMessage -> Optional.ofNullable(playerChatMessage.unsignedContent)),
FilterMask.CODEC.optionalFieldOf("filter_mask", FilterMask.PASS_THROUGH).forGetter(PlayerChatMessage::filterMask)
)
.apply(
i,
(link, signature, signedBody, unsignedContent, filterMask) -> new PlayerChatMessage(
link, signature.orElse(null), signedBody, unsignedContent.orElse(null), filterMask
)
)
);
private static final UUID SYSTEM_SENDER = Util.NIL_UUID;
public static final Duration MESSAGE_EXPIRES_AFTER_SERVER = Duration.ofMinutes(5L);
public static final Duration MESSAGE_EXPIRES_AFTER_CLIENT = MESSAGE_EXPIRES_AFTER_SERVER.plus(Duration.ofMinutes(2L));
public static PlayerChatMessage system(String content) {
return unsigned(SYSTEM_SENDER, content);
}
public static PlayerChatMessage unsigned(UUID sender, String content) {
SignedMessageBody body = SignedMessageBody.unsigned(content);
SignedMessageLink link = SignedMessageLink.unsigned(sender);
return new PlayerChatMessage(link, null, body, null, FilterMask.PASS_THROUGH);
}
public PlayerChatMessage withUnsignedContent(Component content) {
Component unsignedContent = !content.equals(Component.literal(this.signedContent())) ? content : null;
return new PlayerChatMessage(this.link, this.signature, this.signedBody, unsignedContent, this.filterMask);
}
public PlayerChatMessage removeUnsignedContent() {
return this.unsignedContent != null ? new PlayerChatMessage(this.link, this.signature, this.signedBody, null, this.filterMask) : this;
}
public PlayerChatMessage filter(FilterMask filterMask) {
return this.filterMask.equals(filterMask) ? this : new PlayerChatMessage(this.link, this.signature, this.signedBody, this.unsignedContent, filterMask);
}
public PlayerChatMessage filter(boolean filtered) {
return this.filter(filtered ? this.filterMask : FilterMask.PASS_THROUGH);
}
public PlayerChatMessage removeSignature() {
SignedMessageBody body = SignedMessageBody.unsigned(this.signedContent());
SignedMessageLink link = SignedMessageLink.unsigned(this.sender());
return new PlayerChatMessage(link, null, body, this.unsignedContent, this.filterMask);
}
public static void updateSignature(SignatureUpdater.Output output, SignedMessageLink link, SignedMessageBody body) throws SignatureException {
output.update(Ints.toByteArray(1));
link.updateSignature(output);
body.updateSignature(output);
}
public boolean verify(SignatureValidator signatureValidator) {
return this.signature != null && this.signature.verify(signatureValidator, output -> updateSignature(output, this.link, this.signedBody));
}
public String signedContent() {
return this.signedBody.content();
}
public Component decoratedContent() {
return Objects.requireNonNullElseGet(this.unsignedContent, () -> Component.literal(this.signedContent()));
}
public Instant timeStamp() {
return this.signedBody.timeStamp();
}
public long salt() {
return this.signedBody.salt();
}
public boolean hasExpiredServer(Instant now) {
return now.isAfter(this.timeStamp().plus(MESSAGE_EXPIRES_AFTER_SERVER));
}
public boolean hasExpiredClient(Instant now) {
return now.isAfter(this.timeStamp().plus(MESSAGE_EXPIRES_AFTER_CLIENT));
}
public UUID sender() {
return this.link.sender();
}
public boolean isSystem() {
return this.sender().equals(SYSTEM_SENDER);
}
public boolean hasSignature() {
return this.signature != null;
}
public boolean hasSignatureFrom(UUID profileId) {
return this.hasSignature() && this.link.sender().equals(profileId);
}
public boolean isFullyFiltered() {
return this.filterMask.isFullyFiltered();
}
public static String describeSigned(PlayerChatMessage message) {
return "'"
+ message.signedBody.content()
+ "' @ "
+ message.signedBody.timeStamp()
+ "\n - From: "
+ message.link.sender()
+ "/"
+ message.link.sessionId()
+ ", message #"
+ message.link.index()
+ "\n - Salt: "
+ message.signedBody.salt()
+ "\n - Signature: "
+ MessageSignature.describe(message.signature)
+ "\n - Last Seen: [\n"
+ message.signedBody
.lastSeen()
.entries()
.stream()
.map(signature -> " " + MessageSignature.describe(signature) + "\n")
.collect(Collectors.joining())
+ " ]\n";
}
}引用的其他类
-
- 引用位置:
参数/方法调用/返回值 - 关联成员:
Component.literal()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
MessageSignature.describe()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
SignedMessageBody.unsigned()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
SignedMessageLink.unsigned()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: