94 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.9 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 net.minecraft.network.FriendlyByteBuf;
 | |
| import net.minecraft.util.ExtraCodecs;
 | |
| import net.minecraft.util.SignatureUpdater;
 | |
| import net.minecraft.util.SignatureValidator;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| 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 buffer) {
 | |
| 		byte[] bs = new byte[256];
 | |
| 		buffer.readBytes(bs);
 | |
| 		return new MessageSignature(bs);
 | |
| 	}
 | |
| 
 | |
| 	public static void write(FriendlyByteBuf buffer, MessageSignature signature) {
 | |
| 		buffer.writeBytes(signature.bytes);
 | |
| 	}
 | |
| 
 | |
| 	public boolean verify(SignatureValidator validator, SignatureUpdater updater) {
 | |
| 		return validator.validate(updater, this.bytes);
 | |
| 	}
 | |
| 
 | |
| 	public ByteBuffer asByteBuffer() {
 | |
| 		return ByteBuffer.wrap(this.bytes);
 | |
| 	}
 | |
| 
 | |
| 	public boolean equals(Object object) {
 | |
| 		return this == object || object instanceof MessageSignature messageSignature && Arrays.equals(this.bytes, messageSignature.bytes);
 | |
| 	}
 | |
| 
 | |
| 	public int hashCode() {
 | |
| 		return Arrays.hashCode(this.bytes);
 | |
| 	}
 | |
| 
 | |
| 	public String toString() {
 | |
| 		return Base64.getEncoder().encodeToString(this.bytes);
 | |
| 	}
 | |
| 
 | |
| 	public static String describe(@Nullable MessageSignature signature) {
 | |
| 		return signature == null ? "<no signature>" : signature.toString();
 | |
| 	}
 | |
| 
 | |
| 	public MessageSignature.Packed pack(MessageSignatureCache signatureCache) {
 | |
| 		int i = signatureCache.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 fullSignature) {
 | |
| 			this(-1, fullSignature);
 | |
| 		}
 | |
| 
 | |
| 		public Packed(int id) {
 | |
| 			this(id, null);
 | |
| 		}
 | |
| 
 | |
| 		public static MessageSignature.Packed read(FriendlyByteBuf buffer) {
 | |
| 			int i = buffer.readVarInt() - 1;
 | |
| 			return i == -1 ? new MessageSignature.Packed(MessageSignature.read(buffer)) : new MessageSignature.Packed(i);
 | |
| 		}
 | |
| 
 | |
| 		public static void write(FriendlyByteBuf buffer, MessageSignature.Packed packed) {
 | |
| 			buffer.writeVarInt(packed.id() + 1);
 | |
| 			if (packed.fullSignature() != null) {
 | |
| 				MessageSignature.write(buffer, packed.fullSignature());
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public Optional<MessageSignature> unpack(MessageSignatureCache signatureCache) {
 | |
| 			return this.fullSignature != null ? Optional.of(this.fullSignature) : Optional.ofNullable(signatureCache.unpack(this.id));
 | |
| 		}
 | |
| 	}
 | |
| }
 |