Code/net/minecraft/network/chat/MessageSignatureCache.java

65 lines
2.0 KiB
Java

package net.minecraft.network.chat;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import java.util.ArrayDeque;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
import org.jetbrains.annotations.VisibleForTesting;
public class MessageSignatureCache {
public static final int NOT_FOUND = -1;
private static final int DEFAULT_CAPACITY = 128;
private final MessageSignature[] entries;
public MessageSignatureCache(int p_250894_) {
this.entries = new MessageSignature[p_250894_];
}
public static MessageSignatureCache createDefault() {
return new MessageSignatureCache(128);
}
public int pack(MessageSignature p_254157_) {
for (int i = 0; i < this.entries.length; i++) {
if (p_254157_.equals(this.entries[i])) {
return i;
}
}
return -1;
}
@Nullable
public MessageSignature unpack(int p_253967_) {
return this.entries[p_253967_];
}
public void push(SignedMessageBody p_312296_, @Nullable MessageSignature p_310844_) {
List<MessageSignature> list = p_312296_.lastSeen().entries();
ArrayDeque<MessageSignature> arraydeque = new ArrayDeque<>(list.size() + 1);
arraydeque.addAll(list);
if (p_310844_ != null) {
arraydeque.add(p_310844_);
}
this.push(arraydeque);
}
@VisibleForTesting
void push(List<MessageSignature> p_248560_) {
this.push(new ArrayDeque<>(p_248560_));
}
private void push(ArrayDeque<MessageSignature> p_251419_) {
Set<MessageSignature> set = new ObjectOpenHashSet<>(p_251419_);
for (int i = 0; !p_251419_.isEmpty() && i < this.entries.length; i++) {
MessageSignature messagesignature = this.entries[i];
this.entries[i] = p_251419_.removeLast();
if (messagesignature != null && !set.contains(messagesignature)) {
p_251419_.addFirst(messagesignature);
}
}
}
}