From 3c3952bb0b255a4e03537fbfe3b53634a64c6a7b Mon Sep 17 00:00:00 2001 From: mat Date: Fri, 27 Dec 2024 05:43:35 +0000 Subject: [PATCH] resolve some todos in az-core --- Cargo.lock | 1 + azalea-block/src/range.rs | 16 ++++++++++++++++ azalea-core/Cargo.toml | 3 +-- azalea-core/src/direction.rs | 5 ++++- azalea-core/src/game_type.rs | 36 ++++++++++++++++++------------------ azalea-core/src/math.rs | 23 ++++++++++++++++------- 6 files changed, 56 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c7b8d9ee..a6081a953 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -369,6 +369,7 @@ name = "azalea-core" version = "0.11.0+mc1.21.4" dependencies = [ "azalea-buf", + "azalea-chat", "azalea-registry", "bevy_ecs", "nohash-hasher", diff --git a/azalea-block/src/range.rs b/azalea-block/src/range.rs index 779d805dc..fb6552d5a 100644 --- a/azalea-block/src/range.rs +++ b/azalea-block/src/range.rs @@ -44,3 +44,19 @@ impl Add for BlockStates { } } } + +impl From> for BlockStates { + fn from(set: HashSet) -> Self { + Self { + set: set.into_iter().map(|b| b.into()).collect(), + } + } +} + +impl From<&HashSet> for BlockStates { + fn from(set: &HashSet) -> Self { + Self { + set: set.iter().map(|&b| b.into()).collect(), + } + } +} diff --git a/azalea-core/Cargo.toml b/azalea-core/Cargo.toml index a8ac2d854..74403ec14 100644 --- a/azalea-core/Cargo.toml +++ b/azalea-core/Cargo.toml @@ -13,10 +13,9 @@ bevy_ecs = { workspace = true, optional = true } nohash-hasher = { workspace = true } num-traits = { workspace = true } serde = { workspace = true, optional = true } -#serde_json = { workspace = true } simdnbt = { workspace = true } tracing = { workspace = true } -#uuid = { workspace = true } +azalea-chat = { path = "../azalea-chat", version = "0.11.0" } [features] bevy_ecs = ["dep:bevy_ecs"] diff --git a/azalea-core/src/direction.rs b/azalea-core/src/direction.rs index 0cca7aaf6..6ff556151 100755 --- a/azalea-core/src/direction.rs +++ b/azalea-core/src/direction.rs @@ -62,7 +62,10 @@ impl Direction { } } -// TODO: make azalea_block use this instead of FacingCardinal +/// The four cardinal directions. +/// +/// Note that azalea_block has a similar enum named `FacingCardinal` that is +/// used for block states. #[derive(Clone, Copy, Debug, AzBuf, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub enum CardinalDirection { diff --git a/azalea-core/src/game_type.rs b/azalea-core/src/game_type.rs index 5bac06d5c..5d9ee8f56 100644 --- a/azalea-core/src/game_type.rs +++ b/azalea-core/src/game_type.rs @@ -1,6 +1,7 @@ use std::io::{Cursor, Write}; use azalea_buf::{AzaleaRead, AzaleaReadVar, AzaleaWrite, BufReadError}; +use azalea_chat::translatable_component::TranslatableComponent; use tracing::debug; /// A Minecraft gamemode, like survival or creative. @@ -51,26 +52,15 @@ impl GameMode { ) } - pub fn short_name(&self) -> &'static str { - // TODO: these should be translated - // TranslatableComponent("selectWorld.gameMode." + string2) - match self { - GameMode::Survival => "Survival", - GameMode::Creative => "Creative", - GameMode::Adventure => "Adventure", - GameMode::Spectator => "Spectator", - } + /// The short translatable display name for the gamemode, like "Survival". + pub fn short_name(&self) -> TranslatableComponent { + TranslatableComponent::new(format!("selectWorld.gameMode.{}", self.name()), vec![]) } - pub fn long_name(&self) -> &'static str { - // TODO: These should be translated TranslatableComponent("gameMode." + - // string2); - match self { - GameMode::Survival => "Survival Mode", - GameMode::Creative => "Creative Mode", - GameMode::Adventure => "Adventure Mode", - GameMode::Spectator => "Spectator Mode", - } + /// The long translatable display name for the gamemode, like "Survival + /// Mode". + pub fn long_name(&self) -> TranslatableComponent { + TranslatableComponent::new(format!("gameMode.{}", self.name()), vec![]) } pub fn from_name(name: &str) -> GameMode { @@ -82,6 +72,16 @@ impl GameMode { _ => panic!("Unknown game type name: {name}"), } } + + /// The internal name for the game mode, like "survival". + pub fn name(&self) -> &'static str { + match self { + GameMode::Survival => "survival", + GameMode::Creative => "creative", + GameMode::Adventure => "adventure", + GameMode::Spectator => "spectator", + } + } } impl GameMode { diff --git a/azalea-core/src/math.rs b/azalea-core/src/math.rs index 622157494..67ece5ccd 100644 --- a/azalea-core/src/math.rs +++ b/azalea-core/src/math.rs @@ -1,4 +1,8 @@ -use std::{f64::consts::PI, sync::LazyLock}; +use std::{ + f64::consts::PI, + ops::{Add, Div, Sub}, + sync::LazyLock, +}; pub const EPSILON: f64 = 1.0E-7; @@ -24,17 +28,22 @@ pub fn cos(x: f32) -> f32 { SIN[x] } -// TODO: make this generic -pub fn binary_search(mut min: i32, max: i32, predicate: &dyn Fn(i32) -> bool) -> i32 { +pub fn binary_search< + T: Ord + PartialOrd + Add + Sub + Div + From + Copy, +>( + mut min: T, + max: T, + predicate: impl Fn(T) -> bool, +) -> T { let mut diff = max - min; - while diff > 0 { - let diff_mid = diff / 2; + while diff > T::from(0) { + let diff_mid = diff / T::from(2); let mid = min + diff_mid; if predicate(mid) { diff = diff_mid; } else { - min = mid + 1; - diff -= diff_mid + 1; + min = mid + T::from(1); + diff = diff - (diff_mid + T::from(1)); } }