diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2024-04-23 10:34:50 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-23 10:34:50 -0500 |
| commit | 1d80f531b74bc3b31023753acb81b35efcdadd73 (patch) | |
| tree | 675635c7c41fbb456e3e0dd7b9f09c7211d356f0 /azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs | |
| parent | 0ddad8bd9c7c0e8846aec8bc90c95416418c9a63 (diff) | |
| download | azalea-drasl-1d80f531b74bc3b31023753acb81b35efcdadd73.tar.xz | |
1.20.5 (#127)
* 23w51b
* make recalculate_near_end_of_path public
so other plugins can do .after(recalculate_near_end_of_path)
* update to 24w03a i think
* start implementing 24w13a
* registries work (but a lot of packets are still broken)
* fix recipes and commands packets
* i love codecs :D i am not going insane :D mojang's java is very readable :D
* item components are "implemented" meowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeow
* update to 1.20.5-pre3
* fix all the broken packets and clippy (mojang please don't do an update like this again or i will murder someone)
* 1.20.5-rc1
* fix failing tests
* 1.20.5
Diffstat (limited to 'azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs')
| -rwxr-xr-x | azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs | 169 |
1 files changed, 13 insertions, 156 deletions
diff --git a/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs b/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs index 291cb580..99f4ab05 100755 --- a/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs @@ -4,19 +4,17 @@ use azalea_buf::{ use azalea_core::resource_location::ResourceLocation; use azalea_inventory::ItemSlot; use azalea_protocol_macros::ClientboundGamePacket; -use azalea_registry::RecipeSerializer; use std::io::{Cursor, Write}; -use std::str::FromStr; #[derive(Clone, Debug, McBuf, PartialEq, ClientboundGamePacket)] pub struct ClientboundUpdateRecipesPacket { - pub recipes: Vec<Recipe>, + pub recipes: Vec<RecipeHolder>, } -#[derive(Clone, Debug, PartialEq)] -pub struct Recipe { - pub identifier: ResourceLocation, +#[derive(Clone, Debug, PartialEq, McBuf)] +pub struct RecipeHolder { + pub id: ResourceLocation, pub data: RecipeData, } @@ -156,147 +154,6 @@ pub struct Ingredient { pub allowed: Vec<ItemSlot>, } -impl McBufWritable for Recipe { - fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - let recipe_serializer = match &self.data { - RecipeData::CraftingShapeless(_) => RecipeSerializer::CraftingShapeless, - RecipeData::CraftingShaped(_) => RecipeSerializer::CraftingShaped, - RecipeData::CraftingSpecialArmorDye(_) => RecipeSerializer::CraftingSpecialArmordye, - RecipeData::CraftingSpecialBookCloning(_) => { - RecipeSerializer::CraftingSpecialBookcloning - } - RecipeData::CraftingSpecialMapCloning(_) => RecipeSerializer::CraftingSpecialMapcloning, - RecipeData::CraftingSpecialMapExtending(_) => { - RecipeSerializer::CraftingSpecialMapextending - } - RecipeData::CraftingSpecialFireworkRocket(_) => { - RecipeSerializer::CraftingSpecialFireworkRocket - } - RecipeData::CraftingSpecialFireworkStar(_) => { - RecipeSerializer::CraftingSpecialFireworkStar - } - - RecipeData::CraftingSpecialFireworkStarFade(_) => { - RecipeSerializer::CraftingSpecialFireworkStarFade - } - RecipeData::CraftingSpecialRepairItem(_) => RecipeSerializer::CraftingSpecialRepairitem, - RecipeData::CraftingSpecialTippedArrow(_) => { - RecipeSerializer::CraftingSpecialTippedarrow - } - RecipeData::CraftingSpecialBannerDuplicate(_) => { - RecipeSerializer::CraftingSpecialBannerduplicate - } - RecipeData::CraftingSpecialShieldDecoration(_) => { - RecipeSerializer::CraftingSpecialShielddecoration - } - RecipeData::CraftingSpecialShulkerBoxColoring(_) => { - RecipeSerializer::CraftingSpecialShulkerboxcoloring - } - RecipeData::CraftingSpecialSuspiciousStew(_) => { - RecipeSerializer::CraftingSpecialSuspiciousstew - } - RecipeData::Smelting(_) => RecipeSerializer::Smelting, - RecipeData::Blasting(_) => RecipeSerializer::Blasting, - RecipeData::Smoking(_) => RecipeSerializer::Smoking, - RecipeData::CampfireCooking(_) => RecipeSerializer::CampfireCooking, - RecipeData::Stonecutting(_) => RecipeSerializer::Stonecutting, - RecipeData::SmithingTransform(_) => RecipeSerializer::SmithingTransform, - RecipeData::SmithingTrim(_) => RecipeSerializer::SmithingTrim, - RecipeData::CraftingDecoratedPot(_) => RecipeSerializer::CraftingDecoratedPot, - }; - let resource_location = ResourceLocation::new(&recipe_serializer.to_string()); - resource_location.write_into(buf)?; - self.identifier.write_into(buf)?; - self.data.write_without_id(buf)?; - Ok(()) - } -} - -impl McBufReadable for Recipe { - fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { - let recipe_serializer_name = ResourceLocation::read_from(buf)?; - let Ok(recipe_serializer) = RecipeSerializer::from_str(&recipe_serializer_name.to_string()) - else { - return Err(BufReadError::UnexpectedStringEnumVariant { - id: recipe_serializer_name.to_string(), - }); - }; - let identifier = ResourceLocation::read_from(buf)?; - - // rust doesn't let us match ResourceLocation so we have to do a big - // if-else chain :( - let data = match recipe_serializer { - RecipeSerializer::CraftingShaped => { - RecipeData::CraftingShaped(ShapedRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingShapeless => { - RecipeData::CraftingShapeless(ShapelessRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialArmordye => { - RecipeData::CraftingSpecialArmorDye(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialBookcloning => { - RecipeData::CraftingSpecialBookCloning(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialMapcloning => { - RecipeData::CraftingSpecialMapCloning(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialMapextending => { - RecipeData::CraftingSpecialMapExtending(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialFireworkRocket => { - RecipeData::CraftingSpecialFireworkRocket(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialFireworkStar => { - RecipeData::CraftingSpecialFireworkStar(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialFireworkStarFade => { - RecipeData::CraftingSpecialFireworkStarFade(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialRepairitem => { - RecipeData::CraftingSpecialRepairItem(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialTippedarrow => { - RecipeData::CraftingSpecialTippedArrow(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialBannerduplicate => { - RecipeData::CraftingSpecialBannerDuplicate(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialShielddecoration => { - RecipeData::CraftingSpecialShieldDecoration(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialShulkerboxcoloring => { - RecipeData::CraftingSpecialShulkerBoxColoring(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingSpecialSuspiciousstew => { - RecipeData::CraftingSpecialSuspiciousStew(SimpleRecipe::read_from(buf)?) - } - RecipeSerializer::Smelting => RecipeData::Smelting(CookingRecipe::read_from(buf)?), - RecipeSerializer::Blasting => RecipeData::Blasting(CookingRecipe::read_from(buf)?), - RecipeSerializer::Smoking => RecipeData::Smoking(CookingRecipe::read_from(buf)?), - RecipeSerializer::CampfireCooking => { - RecipeData::CampfireCooking(CookingRecipe::read_from(buf)?) - } - RecipeSerializer::Stonecutting => { - RecipeData::Stonecutting(StoneCutterRecipe::read_from(buf)?) - } - RecipeSerializer::SmithingTransform => { - RecipeData::SmithingTransform(SmithingTransformRecipe::read_from(buf)?) - } - RecipeSerializer::SmithingTrim => { - RecipeData::SmithingTrim(SmithingTrimRecipe::read_from(buf)?) - } - RecipeSerializer::CraftingDecoratedPot => { - RecipeData::CraftingDecoratedPot(SimpleRecipe::read_from(buf)?) - } - }; - - let recipe = Recipe { identifier, data }; - - Ok(recipe) - } -} - #[cfg(test)] mod tests { use super::*; @@ -304,8 +161,8 @@ mod tests { #[test] fn test_crafting_shaped() { let mut buf = Vec::new(); - let recipe = Recipe { - identifier: ResourceLocation::new("minecraft:crafting_shaped"), + let recipe = RecipeHolder { + id: ResourceLocation::new("minecraft:crafting_shaped"), data: RecipeData::CraftingShaped(ShapedRecipe { group: String::new(), category: CraftingBookCategory::Building, @@ -332,15 +189,15 @@ mod tests { }), }; recipe.write_into(&mut buf).unwrap(); - let decoded_recipe = Recipe::read_from(&mut Cursor::new(&buf[..])).unwrap(); + let decoded_recipe = RecipeHolder::read_from(&mut Cursor::new(&buf[..])).unwrap(); assert_eq!(recipe, decoded_recipe); } #[test] fn test_crafting_shapeless() { let mut buf = Vec::new(); - let recipe = Recipe { - identifier: ResourceLocation::new("minecraft:crafting_shapeless"), + let recipe = RecipeHolder { + id: ResourceLocation::new("minecraft:crafting_shapeless"), data: RecipeData::CraftingShapeless(ShapelessRecipe { group: String::new(), category: CraftingBookCategory::Building, @@ -362,21 +219,21 @@ mod tests { }), }; recipe.write_into(&mut buf).unwrap(); - let decoded_recipe = Recipe::read_from(&mut Cursor::new(&buf[..])).unwrap(); + let decoded_recipe = RecipeHolder::read_from(&mut Cursor::new(&buf[..])).unwrap(); assert_eq!(recipe, decoded_recipe); } #[test] fn test_crafting_special_armordye() { let mut buf = Vec::new(); - let recipe = Recipe { - identifier: ResourceLocation::new("minecraft:crafting_special_armordye"), + let recipe = RecipeHolder { + id: ResourceLocation::new("minecraft:crafting_special_armordye"), data: RecipeData::CraftingSpecialArmorDye(SimpleRecipe { category: CraftingBookCategory::Building, }), }; recipe.write_into(&mut buf).unwrap(); - let decoded_recipe = Recipe::read_from(&mut Cursor::new(&buf[..])).unwrap(); + let decoded_recipe = RecipeHolder::read_from(&mut Cursor::new(&buf[..])).unwrap(); assert_eq!(recipe, decoded_recipe); } } |
