mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +00:00
* Put physics module in azalea-entity * port aabb * add more stuff to PositionXYZ * azalea-physics * important collision things * more physics stuff * backup because i'm about to delete shapes * more shape stuff * CubeVoxelShape * no compile errors??? insane * impl VoxelShape for ArrayVoxelShape * Shapes stuff * collide_x but it doesn't work yet * binary_search * it compiles * Entity has bounding box * Update discrete_voxel_shape.rs * Entity::make_bounding_box * ok i'm about to merge az-entity and az-world might be a terrible idea which is why i'm committing first * ok so i moved entity to world * on_pos and move_entity compiles * add send_position * move collision stuff to collision module in az-physics * dimension is no longer an Option * start trying to do collision for the client * collision works 🎉 * start adding palette resizing * get_and_set (pain) * it compiles but probably won't work * add a test * remove printlns * add more tests for palette stuff * ClientboundMoveVec3Packet -> ClientboundMoveEntityPosPacket i think i changed this on accident once * palette resizing works todo: remove the printlns * Remove printlns in palette.rs * fix issues from merge * fixes + work a bit more on physics * Better entities (#19) * well it compiles * add tests to entity storage * add suggestions in azalea-brigadier * this probably causes ub * fix brigadiersuggestions * get rid of entityid * test From<EntityMut> for EntityRef * don't mention other libraries since there's too many * fix warnings * do todos in brigadier suggestions * work on physics * more physics stuff * remove trait feature on az-block i think rust gets confused and compiles the macro without the feature * bump ahash * aes tests in az-crypto * optimize aes's deps * fix crashes * fix section_index for negative numbers and test * fix BlockPos protocol implementation * remove some debug prints * prepare to add ai_step * make ai step work * clippy
49 lines
1.1 KiB
Rust
49 lines
1.1 KiB
Rust
mod behavior;
|
|
mod blocks;
|
|
|
|
pub use behavior::BlockBehavior;
|
|
pub use blocks::*;
|
|
|
|
use std::mem;
|
|
|
|
impl BlockState {
|
|
/// Transmutes a u32 to a block state.
|
|
///
|
|
/// # Safety
|
|
/// The `state_id` should be a valid block state.
|
|
#[inline]
|
|
pub unsafe fn from_u32_unsafe(state_id: u32) -> Self {
|
|
mem::transmute::<u32, BlockState>(state_id)
|
|
}
|
|
|
|
#[inline]
|
|
pub fn is_valid_state(state_id: u32) -> bool {
|
|
state_id <= Self::max_state()
|
|
}
|
|
}
|
|
|
|
impl TryFrom<u32> for BlockState {
|
|
type Error = ();
|
|
|
|
/// Safely converts a state id to a block state.
|
|
fn try_from(state_id: u32) -> Result<Self, Self::Error> {
|
|
if Self::is_valid_state(state_id) {
|
|
Ok(unsafe { Self::from_u32_unsafe(state_id) })
|
|
} else {
|
|
Err(())
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_from_u32() {
|
|
assert_eq!(BlockState::try_from(0).unwrap(), BlockState::Air);
|
|
|
|
assert!(BlockState::try_from(BlockState::max_state()).is_ok());
|
|
assert!(BlockState::try_from(BlockState::max_state() + 1).is_err());
|
|
}
|
|
}
|