97 lines
3.3 KiB
Java
97 lines
3.3 KiB
Java
|
package net.minecraft.network.chat;
|
||
|
|
||
|
import com.google.common.base.Preconditions;
|
||
|
import com.mojang.serialization.Codec;
|
||
|
import java.nio.ByteBuffer;
|
||
|
import java.util.Arrays;
|
||
|
import java.util.Base64;
|
||
|
import java.util.Optional;
|
||
|
import javax.annotation.Nullable;
|
||
|
import net.minecraft.network.FriendlyByteBuf;
|
||
|
import net.minecraft.util.ExtraCodecs;
|
||
|
import net.minecraft.util.SignatureUpdater;
|
||
|
import net.minecraft.util.SignatureValidator;
|
||
|
|
||
|
public record MessageSignature(byte[] bytes) {
|
||
|
public static final Codec<MessageSignature> CODEC = ExtraCodecs.BASE64_STRING.xmap(MessageSignature::new, MessageSignature::bytes);
|
||
|
public static final int BYTES = 256;
|
||
|
|
||
|
public MessageSignature(byte[] bytes) {
|
||
|
Preconditions.checkState(bytes.length == 256, "Invalid message signature size");
|
||
|
this.bytes = bytes;
|
||
|
}
|
||
|
|
||
|
public static MessageSignature read(FriendlyByteBuf p_249837_) {
|
||
|
byte[] abyte = new byte[256];
|
||
|
p_249837_.readBytes(abyte);
|
||
|
return new MessageSignature(abyte);
|
||
|
}
|
||
|
|
||
|
public static void write(FriendlyByteBuf p_250642_, MessageSignature p_249714_) {
|
||
|
p_250642_.writeBytes(p_249714_.bytes);
|
||
|
}
|
||
|
|
||
|
public boolean verify(SignatureValidator p_250998_, SignatureUpdater p_249843_) {
|
||
|
return p_250998_.validate(p_249843_, this.bytes);
|
||
|
}
|
||
|
|
||
|
public ByteBuffer asByteBuffer() {
|
||
|
return ByteBuffer.wrap(this.bytes);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean equals(Object p_237166_) {
|
||
|
return this == p_237166_ || p_237166_ instanceof MessageSignature messagesignature && Arrays.equals(this.bytes, messagesignature.bytes);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int hashCode() {
|
||
|
return Arrays.hashCode(this.bytes);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString() {
|
||
|
return Base64.getEncoder().encodeToString(this.bytes);
|
||
|
}
|
||
|
|
||
|
public static String describe(@Nullable MessageSignature p_395986_) {
|
||
|
return p_395986_ == null ? "<no signature>" : p_395986_.toString();
|
||
|
}
|
||
|
|
||
|
public MessageSignature.Packed pack(MessageSignatureCache p_253845_) {
|
||
|
int i = p_253845_.pack(this);
|
||
|
return i != -1 ? new MessageSignature.Packed(i) : new MessageSignature.Packed(this);
|
||
|
}
|
||
|
|
||
|
public int checksum() {
|
||
|
return Arrays.hashCode(this.bytes);
|
||
|
}
|
||
|
|
||
|
public record Packed(int id, @Nullable MessageSignature fullSignature) {
|
||
|
public static final int FULL_SIGNATURE = -1;
|
||
|
|
||
|
public Packed(MessageSignature p_249705_) {
|
||
|
this(-1, p_249705_);
|
||
|
}
|
||
|
|
||
|
public Packed(int p_250015_) {
|
||
|
this(p_250015_, null);
|
||
|
}
|
||
|
|
||
|
public static MessageSignature.Packed read(FriendlyByteBuf p_250810_) {
|
||
|
int i = p_250810_.readVarInt() - 1;
|
||
|
return i == -1 ? new MessageSignature.Packed(MessageSignature.read(p_250810_)) : new MessageSignature.Packed(i);
|
||
|
}
|
||
|
|
||
|
public static void write(FriendlyByteBuf p_251691_, MessageSignature.Packed p_252193_) {
|
||
|
p_251691_.writeVarInt(p_252193_.id() + 1);
|
||
|
if (p_252193_.fullSignature() != null) {
|
||
|
MessageSignature.write(p_251691_, p_252193_.fullSignature());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Optional<MessageSignature> unpack(MessageSignatureCache p_254423_) {
|
||
|
return this.fullSignature != null ? Optional.of(this.fullSignature) : Optional.ofNullable(p_254423_.unpack(this.id));
|
||
|
}
|
||
|
}
|
||
|
}
|