From 3e7719b6d1132656b435adeb7dda6d6bb9e95360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noel=20N=C3=A9meth?= Date: Tue, 5 Jul 2022 20:01:51 +0200 Subject: [PATCH] Add missing parsers --- .../server/play/DeclareCommandsPacket.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java index b946e5f95..5a1a0c95e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java @@ -9,6 +9,7 @@ import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.function.Function; public record DeclareCommandsPacket(@NotNull List nodes, int rootIndex) implements ServerPacket { @@ -96,28 +97,24 @@ public record DeclareCommandsPacket(@NotNull List nodes, } private byte[] getProperties(BinaryReader reader, String parser) { + final Function, byte[]> minMaxExtractor = (via) -> reader.extractBytes(() -> { + byte flags = reader.readByte(); + if ((flags & 0x01) == 0x01) { + via.apply(reader); // min + } + if ((flags & 0x02) == 0x02) { + via.apply(reader); // max + } + }); return switch (parser) { - case "brigadier:double" -> reader.extractBytes(() -> { - byte flags = reader.readByte(); - if ((flags & 0x01) == 0x01) { - reader.readDouble(); // min - } - if ((flags & 0x02) == 0x02) { - reader.readDouble(); // max - } - }); - case "brigadier:integer" -> reader.extractBytes(() -> { - byte flags = reader.readByte(); - if ((flags & 0x01) == 0x01) { - reader.readInt(); // min - } - if ((flags & 0x02) == 0x02) { - reader.readInt(); // max - } - }); + case "brigadier:double" -> minMaxExtractor.apply(BinaryReader::readDouble); + case "brigadier:integer" -> minMaxExtractor.apply(BinaryReader::readInt); + case "brigadier:float" -> minMaxExtractor.apply(BinaryReader::readFloat); + case "brigadier:long" -> minMaxExtractor.apply(BinaryReader::readLong); case "brigadier:string" -> reader.extractBytes(reader::readVarInt); case "minecraft:entity", "minecraft:score_holder" -> reader.extractBytes(reader::readByte); case "minecraft:range" -> reader.extractBytes(reader::readBoolean); // https://wiki.vg/Command_Data#minecraft:range, looks fishy + case "minecraft:resource_or_tag", "minecraft:registry" -> reader.extractBytes(reader::readSizedString); default -> new byte[0]; // unknown }; }