McProtoNet Help

MinecraftPrimitiveReader

ref-структура, предназначенная для чтения примитивных типов данных из бинарного потока в формате Minecraft-протокола. Она представляет собой высокопроизводительную оболочку над Span<byte>, что позволяет работать с данными напрямую из памяти без лишнего копирования.

Исходный код: MinecraftPrimitiveReader.cs

Основные методы

void Advance(int count)

Перемещает внутренний указатель чтения на указанное количество байт.

ReadOnlySpan<byte> Read(int count)

Считывает указанное количество байт и возвращает их в виде ReadOnlySpan<byte>.

int Read(Span<byte> output)

Считывает данные и записывает их в предоставленный Span<byte>. Возвращает количество фактически прочитанных байт.

int ReadVarInt()

Считывает целое число в формате VarInt из потока. Если число превышает допустимую длину, выбрасывает исключение ArithmeticException.

long ReadVarLong()

Считывает целое число в формате VarLong из потока. Если число превышает допустимую длину, выбрасывает исключение ArithmeticException.

bool ReadBoolean()

Считывает один байт и интерпретирует его как булево значение (true для 1, false для 0).

byte ReadUnsignedByte()

Считывает один байт как беззнаковое целое число.

sbyte ReadSignedByte()

Считывает один байт как знаковое целое число.

ushort ReadUnsignedShort()

Считывает два байта в формате BigEndian и интерпретирует их как беззнаковое короткое целое число.

short ReadSignedShort()

Считывает два байта в формате BigEndian и интерпретирует их как знаковое короткое целое число.

int ReadSignedInt()

Считывает четыре байта в формате BigEndian и интерпретирует их как знаковое целое число.

uint ReadUnsignedInt()

Считывает четыре байта в формате BigEndian и интерпретирует их как беззнаковое целое число.

long ReadSignedLong()

Считывает восемь байт в формате BigEndian и интерпретирует их как знаковое длинное целое число.

ulong ReadUnsignedLong()

Считывает восемь байт в формате BigEndian и интерпретирует их как беззнаковое длинное целое число.

float ReadFloat()

Считывает четыре байта в формате BigEndian и интерпретирует их как значение типа float.

double ReadDouble()

Считывает восемь байт в формате BigEndian и интерпретирует их как значение типа double.

string ReadString()

Считывает строку в формате UTF-8. Сначала считывает длину строки как VarInt, затем соответствующее количество байт.

Guid ReadUUID()

Считывает 16 байт и интерпретирует их как UUID.

byte[] ReadRestBuffer()

Считывает все оставшиеся данные в буфере и возвращает их в виде массива байтов.

byte[] ReadBuffer(int length)

Считывает указанное количество байт и возвращает их в виде массива байтов.

NbtTag? ReadOptionalNbtTag(bool readRootTag)

Считывает опциональный тег NBT. Возвращает null, если тег отсутствует, или объект NbtTag, если он есть.

NbtTag ReadNbtTag(bool readRootTag)

Считывает тег NBT из потока. Поддерживает чтение как корневого, так и вложенного тега.

Пример использования

byte[] data = [0x00, 0x15, 0x16, 0x01, 0x54]; MinecraftPrimitiveReader reader = new MinecraftPrimitiveReader(new ReadOnlySpan<byte>(data)); reader.ReadVarInt(); Console.WriteLine($"Remaining: {reader.RemainingCount}");
Last modified: 13 March 2025