MessageSignatureCache.java

net.minecraft.network.chat.MessageSignatureCache

信息

  • 全限定名:net.minecraft.network.chat.MessageSignatureCache
  • 类型:public class
  • 包:net.minecraft.network.chat
  • 源码路径:src/main/java/net/minecraft/network/chat/MessageSignatureCache.java
  • 起始行号:L10
  • 职责:

    TODO

字段/常量

  • NOT_FOUND

    • 类型: int
    • 修饰符: public static final
    • 源码定位: L11
    • 说明:

      TODO

  • DEFAULT_CAPACITY

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L12
    • 说明:

      TODO

  • entries

    • 类型: MessageSignature[]
    • 修饰符: private final
    • 源码定位: L13
    • 说明:

      TODO

内部类/嵌套类型

构造器

public MessageSignatureCache(int capacity) @ L15

  • 构造器名:MessageSignatureCache
  • 源码定位:L15
  • 修饰符:public

参数:

  • capacity: int

说明:

TODO

方法

下面的方法块按源码顺序生成。

public static MessageSignatureCache createDefault() @ L19

  • 方法名:createDefault
  • 源码定位:L19
  • 返回类型:MessageSignatureCache
  • 修饰符:public static

参数:

说明:

TODO

public int pack(MessageSignature signature) @ L23

  • 方法名:pack
  • 源码定位:L23
  • 返回类型:int
  • 修饰符:public

参数:

  • signature: MessageSignature

说明:

TODO

public MessageSignature unpack(int id) @ L33

  • 方法名:unpack
  • 源码定位:L33
  • 返回类型:MessageSignature
  • 修饰符:public

参数:

  • id: int

说明:

TODO

public void push(SignedMessageBody body, MessageSignature signature) @ L37

  • 方法名:push
  • 源码定位:L37
  • 返回类型:void
  • 修饰符:public

参数:

  • body: SignedMessageBody
  • signature: MessageSignature

说明:

TODO

void push(List<MessageSignature> entries) @ L48

  • 方法名:push
  • 源码定位:L48
  • 返回类型:void
  • 修饰符:package-private

参数:

  • entries: List

说明:

TODO

private void push(ArrayDeque<MessageSignature> queue) @ L53

  • 方法名:push
  • 源码定位:L53
  • 返回类型:void
  • 修饰符:private

参数:

  • queue: ArrayDeque

说明:

TODO

代码

public class MessageSignatureCache {
    public static final int NOT_FOUND = -1;
    private static final int DEFAULT_CAPACITY = 128;
    private final @Nullable MessageSignature[] entries;
 
    public MessageSignatureCache(int capacity) {
        this.entries = new MessageSignature[capacity];
    }
 
    public static MessageSignatureCache createDefault() {
        return new MessageSignatureCache(128);
    }
 
    public int pack(MessageSignature signature) {
        for (int i = 0; i < this.entries.length; i++) {
            if (signature.equals(this.entries[i])) {
                return i;
            }
        }
 
        return -1;
    }
 
    public @Nullable MessageSignature unpack(int id) {
        return this.entries[id];
    }
 
    public void push(SignedMessageBody body, @Nullable MessageSignature signature) {
        List<MessageSignature> lastSeen = body.lastSeen().entries();
        ArrayDeque<MessageSignature> queue = new ArrayDeque<>(lastSeen.size() + 1);
        queue.addAll(lastSeen);
        if (signature != null) {
            queue.add(signature);
        }
 
        this.push(queue);
    }
 
    @VisibleForTesting
    void push(List<MessageSignature> entries) {
        this.push(new ArrayDeque<>(entries));
    }
 
    private void push(ArrayDeque<MessageSignature> queue) {
        Set<MessageSignature> newEntries = new ObjectOpenHashSet<>(queue);
 
        for (int i = 0; !queue.isEmpty() && i < this.entries.length; i++) {
            MessageSignature entry = this.entries[i];
            this.entries[i] = queue.removeLast();
            if (entry != null && !newEntries.contains(entry)) {
                queue.addFirst(entry);
            }
        }
    }
}

引用的其他类