LastSeenMessagesTracker.java
net.minecraft.network.chat.LastSeenMessagesTracker
信息
- 全限定名:net.minecraft.network.chat.LastSeenMessagesTracker
- 类型:public class
- 包:net.minecraft.network.chat
- 源码路径:src/main/java/net/minecraft/network/chat/LastSeenMessagesTracker.java
- 起始行号:L9
- 职责:
TODO
字段/常量
-
trackedMessages- 类型:
LastSeenTrackedEntry[] - 修饰符:
private final - 源码定位:
L10 - 说明:
TODO
- 类型:
-
tail- 类型:
int - 修饰符:
private - 源码定位:
L11 - 说明:
TODO
- 类型:
-
offset- 类型:
int - 修饰符:
private - 源码定位:
L12 - 说明:
TODO
- 类型:
-
lastTrackedMessage- 类型:
MessageSignature - 修饰符:
private - 源码定位:
L13 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.network.chat.LastSeenMessagesTracker.Update- 类型:
record - 修饰符:
public - 源码定位:
L76 - 说明:
TODO
- 类型:
构造器
public LastSeenMessagesTracker(int lastSeenCount) @ L15
- 构造器名:LastSeenMessagesTracker
- 源码定位:L15
- 修饰符:public
参数:
- lastSeenCount: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
public boolean addPending(MessageSignature message, boolean wasShown) @ L19
- 方法名:addPending
- 源码定位:L19
- 返回类型:boolean
- 修饰符:public
参数:
- message: MessageSignature
- wasShown: boolean
说明:
TODO
private void addEntry(LastSeenTrackedEntry entry) @ L29
- 方法名:addEntry
- 源码定位:L29
- 返回类型:void
- 修饰符:private
参数:
- entry: LastSeenTrackedEntry
说明:
TODO
public void ignorePending(MessageSignature pendingMessage) @ L36
- 方法名:ignorePending
- 源码定位:L36
- 返回类型:void
- 修饰符:public
参数:
- pendingMessage: MessageSignature
说明:
TODO
public int getAndClearOffset() @ L46
- 方法名:getAndClearOffset
- 源码定位:L46
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public LastSeenMessagesTracker.Update generateAndApplyUpdate() @ L52
- 方法名:generateAndApplyUpdate
- 源码定位:L52
- 返回类型:LastSeenMessagesTracker.Update
- 修饰符:public
参数:
- 无
说明:
TODO
public int offset() @ L72
- 方法名:offset
- 源码定位:L72
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class LastSeenMessagesTracker {
private final @Nullable LastSeenTrackedEntry[] trackedMessages;
private int tail;
private int offset;
private @Nullable MessageSignature lastTrackedMessage;
public LastSeenMessagesTracker(int lastSeenCount) {
this.trackedMessages = new LastSeenTrackedEntry[lastSeenCount];
}
public boolean addPending(MessageSignature message, boolean wasShown) {
if (Objects.equals(message, this.lastTrackedMessage)) {
return false;
} else {
this.lastTrackedMessage = message;
this.addEntry(wasShown ? new LastSeenTrackedEntry(message, true) : null);
return true;
}
}
private void addEntry(@Nullable LastSeenTrackedEntry entry) {
int index = this.tail;
this.tail = (index + 1) % this.trackedMessages.length;
this.offset++;
this.trackedMessages[index] = entry;
}
public void ignorePending(MessageSignature pendingMessage) {
for (int i = 0; i < this.trackedMessages.length; i++) {
LastSeenTrackedEntry entry = this.trackedMessages[i];
if (entry != null && entry.pending() && pendingMessage.equals(entry.signature())) {
this.trackedMessages[i] = null;
break;
}
}
}
public int getAndClearOffset() {
int originalOffset = this.offset;
this.offset = 0;
return originalOffset;
}
public LastSeenMessagesTracker.Update generateAndApplyUpdate() {
int offset = this.getAndClearOffset();
BitSet acknowledged = new BitSet(this.trackedMessages.length);
ObjectList<MessageSignature> lastSeenEntries = new ObjectArrayList<>(this.trackedMessages.length);
for (int i = 0; i < this.trackedMessages.length; i++) {
int index = (this.tail + i) % this.trackedMessages.length;
LastSeenTrackedEntry message = this.trackedMessages[index];
if (message != null) {
acknowledged.set(i, true);
lastSeenEntries.add(message.signature());
this.trackedMessages[index] = message.acknowledge();
}
}
LastSeenMessages lastSeen = new LastSeenMessages(lastSeenEntries);
LastSeenMessages.Update update = new LastSeenMessages.Update(offset, acknowledged, lastSeen.computeChecksum());
return new LastSeenMessagesTracker.Update(lastSeen, update);
}
public int offset() {
return this.offset;
}
public record Update(LastSeenMessages lastSeen, LastSeenMessages.Update update) {
}
}引用的其他类
-
- 引用位置:
方法调用/构造调用 - 关联成员:
LastSeenMessages(), LastSeenMessages.Update(), Update()
- 引用位置:
-
- 引用位置:
参数/字段/构造调用 - 关联成员:
LastSeenTrackedEntry()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: