Metadata type should be written as var int

This commit is contained in:
Nassim Jahnke 2021-10-29 17:57:23 +02:00
parent d80735e248
commit ab7cd4955b
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B

View File

@ -24,14 +24,17 @@ package com.viaversion.viaversion.api.type.types.minecraft;
import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf;
public abstract class ModernMetaType extends MetaTypeTemplate {
private static final int END = 255;
@Override
public Metadata read(final ByteBuf buffer) throws Exception {
final short index = buffer.readUnsignedByte();
if (index == 0xff) return null; // End of metadata
final MetaType type = this.getType(buffer.readByte());
if (index == END) return null; // End of metadata
final MetaType type = this.getType(Type.VAR_INT.readPrimitive(buffer));
return new Metadata(index, type, type.type().read(buffer));
}
@ -40,11 +43,11 @@ public abstract class ModernMetaType extends MetaTypeTemplate {
@Override
public void write(final ByteBuf buffer, final Metadata object) throws Exception {
if (object == null) {
buffer.writeByte(0xff);
buffer.writeByte(END);
} else {
buffer.writeByte(object.id());
final MetaType type = object.metaType();
buffer.writeByte(type.typeId());
Type.VAR_INT.writePrimitive(buffer, type.typeId());
type.type().write(buffer, object.getValue());
}
}