From 63ef62d97bde95d084865c173ace0615e4441518 Mon Sep 17 00:00:00 2001 From: Oery Date: Thu, 24 Oct 2024 20:17:31 +0200 Subject: [PATCH] Add Potion Effects Registry --- Cargo.lock | 79 ++++++++++++++++++++++++ Cargo.toml | 1 + src/minecraft/mod.rs | 1 + src/minecraft/registry/mod.rs | 3 + src/minecraft/registry/potion_effects.rs | 56 +++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 src/minecraft/registry/mod.rs create mode 100644 src/minecraft/registry/potion_effects.rs diff --git a/Cargo.lock b/Cargo.lock index d190fd4..cbc915e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,6 +88,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "getrandom" version = "0.2.15" @@ -105,12 +111,28 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + [[package]] name = "hermit-abi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown", +] + [[package]] name = "itoa" version = "1.0.11" @@ -125,6 +147,7 @@ dependencies = [ "byteorder", "dotenvy", "kagami_macro", + "num_enum", "serde", "serde_json", "tokio", @@ -185,6 +208,27 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "object" version = "0.36.5" @@ -223,6 +267,15 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro2" version = "1.0.86" @@ -371,6 +424,23 @@ dependencies = [ "syn", ] +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + [[package]] name = "unicode-ident" version = "1.0.13" @@ -464,3 +534,12 @@ name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] diff --git a/Cargo.toml b/Cargo.toml index 5da03cd..4e45f3d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,4 @@ serde_json = "1.0.132" # TODO: Make this easier to use kagami_macro = { path = "../../Code/kagami_macro" } uuid = { version = "1.11.0", features = ["v4"] } +num_enum = "0.7.3" diff --git a/src/minecraft/mod.rs b/src/minecraft/mod.rs index 37f1490..cc559da 100644 --- a/src/minecraft/mod.rs +++ b/src/minecraft/mod.rs @@ -14,6 +14,7 @@ use crate::{ }; pub mod packets; +pub mod registry; pub trait Packet: Serialize + Deserialize + Debug + Any + Send + Sync { fn deserialize_packet(bytes: &[u8]) -> io::Result diff --git a/src/minecraft/registry/mod.rs b/src/minecraft/registry/mod.rs new file mode 100644 index 0000000..cb926a5 --- /dev/null +++ b/src/minecraft/registry/mod.rs @@ -0,0 +1,3 @@ +mod potion_effects; + +pub use potion_effects::PotionEffects; diff --git a/src/minecraft/registry/potion_effects.rs b/src/minecraft/registry/potion_effects.rs new file mode 100644 index 0000000..ce18c47 --- /dev/null +++ b/src/minecraft/registry/potion_effects.rs @@ -0,0 +1,56 @@ +use num_enum::{IntoPrimitive, TryFromPrimitive}; + +#[derive(Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive, Copy, Clone)] +#[repr(u8)] +pub enum PotionEffects { + Speed = 1, + Slowness = 2, + Haste = 3, + MiningFatigue = 4, + Strength = 5, + InstantHealth = 6, + InstantDamage = 7, + JumpBoost = 8, + Nausea = 9, + Regeneration = 10, + Resistance = 11, + FireResistance = 12, + WaterBreathing = 13, + Invisibility = 14, + Blindness = 15, + NightVision = 16, + Hunger = 17, + Weakness = 18, + Poison = 19, + Wither = 20, + HealthBoost = 21, + Absorption = 22, + Saturation = 23, +} + +use crate::serialization::Deserialize; +use byteorder::ReadBytesExt; +use std::io; + +impl Deserialize for PotionEffects { + fn deserialize(reader: &mut R) -> io::Result { + let byte = reader.read_u8()?; + match PotionEffects::try_from(byte) { + Ok(potion) => Ok(potion), + Err(_) => Err(io::Error::new( + io::ErrorKind::InvalidData, + "Invalid potion effect", + )), + } + } +} + +use crate::serialization::Serialize; +use byteorder::WriteBytesExt; + +impl Serialize for PotionEffects { + fn serialize(&self, buf: &mut dyn std::io::Write) -> std::io::Result<()> { + let byte = u8::from(*self); + buf.write_u8(byte) + } +}