Fix shaped recipe read (take 2) (#573)

This commit is contained in:
Gatt 2022-01-02 17:15:22 +11:00 committed by TheMode
parent 206d93ed1b
commit 627bc14b56
2 changed files with 37 additions and 8 deletions

View File

@ -7,6 +7,7 @@ import net.minestom.server.utils.binary.BinaryReader;
import net.minestom.server.utils.binary.BinaryWriter;
import net.minestom.server.utils.binary.Writeable;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
@ -83,10 +84,26 @@ public record DeclareRecipesPacket(@NotNull List<DeclaredRecipe> recipes) implem
ingredients = List.copyOf(ingredients);
}
private DeclaredShapedCraftingRecipe(DeclaredShapedCraftingRecipe packet) {
this(packet.recipeId, packet.width, packet.height, packet.group, packet.ingredients, packet.result);
}
public DeclaredShapedCraftingRecipe(BinaryReader reader) {
this(reader.readSizedString(), reader.readVarInt(), reader.readVarInt(),
reader.readSizedString(), reader.readVarIntList(Ingredient::new),
reader.readItemStack());
this(read(reader));
}
private static DeclaredShapedCraftingRecipe read(BinaryReader reader) {
String recipeId = reader.readSizedString();
int width = reader.readVarInt();
int height = reader.readVarInt();
String group = reader.readSizedString();
List<Ingredient> ingredients = new ArrayList<>();
for (int slot = 0; slot < width * height; slot++) {
ingredients.add(new Ingredient(reader));
}
ItemStack result = reader.readItemStack();
return new DeclaredShapedCraftingRecipe(recipeId, width, height, group, ingredients, result);
}
@Override

View File

@ -84,10 +84,21 @@ public class PacketWriteReadTest {
SERVER_PACKETS.add(new DeathCombatEventPacket(5, 5, COMPONENT));
SERVER_PACKETS.add(new DeclareRecipesPacket(
List.of(new DeclareRecipesPacket.DeclaredShapelessCraftingRecipe(
"minecraft:sticks",
"sticks",
List.of(new Ingredient(List.of(ItemStack.of(Material.OAK_PLANKS)))),
ItemStack.of(Material.STICK)))));
"minecraft:sticks",
"sticks",
List.of(new Ingredient(List.of(ItemStack.of(Material.OAK_PLANKS)))),
ItemStack.of(Material.STICK)
),
new DeclareRecipesPacket.DeclaredShapedCraftingRecipe(
"minecraft:torch",
1,
2,
"",
List.of(new Ingredient(List.of(ItemStack.of(Material.COAL))),
new Ingredient(List.of(ItemStack.of(Material.STICK)))),
ItemStack.of(Material.TORCH)
))));
SERVER_PACKETS.add(new DestroyEntitiesPacket(List.of(5, 5, 5)));
SERVER_PACKETS.add(new DisconnectPacket(COMPONENT));
SERVER_PACKETS.add(new DisplayScoreboardPacket((byte) 5, "scoreboard"));
@ -142,7 +153,8 @@ public class PacketWriteReadTest {
BinaryReader reader = new BinaryReader(writer.toByteArray());
var createdPacket = readerConstructor.newInstance(reader);
assertEquals(writeable, createdPacket);
} catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) {
} catch (NoSuchMethodException | InvocationTargetException | InstantiationException
| IllegalAccessException e) {
fail(writeable.toString(), e);
}
}