aboutsummaryrefslogtreecommitdiff
path: root/azalea-block/src/block_state.rs
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-04-17 22:17:18 +0200
committermat <git@matdoes.dev>2025-04-17 11:09:14 -0930
commit2aa046c4b50a0de850eb567cd8bced03e8f99bd6 (patch)
tree2fda147226a725b588ef0e7ff36b22cad6509bd4 /azalea-block/src/block_state.rs
parent6a83a6fa387170ae71fbe06791cf3afa20aac1df (diff)
downloadazalea-drasl-2aa046c4b50a0de850eb567cd8bced03e8f99bd6.tar.xz
make BlockState::id private
Diffstat (limited to 'azalea-block/src/block_state.rs')
-rw-r--r--azalea-block/src/block_state.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/azalea-block/src/block_state.rs b/azalea-block/src/block_state.rs
index 6a185ee4..36a01863 100644
--- a/azalea-block/src/block_state.rs
+++ b/azalea-block/src/block_state.rs
@@ -1,5 +1,6 @@
use std::{
fmt::{self, Debug},
+ hint::assert_unchecked,
io::{self, Cursor, Write},
};
@@ -27,7 +28,7 @@ pub type BlockStateIntegerRepr = u16;
pub struct BlockState {
/// The protocol ID for the block state. IDs may change every
/// version, so you shouldn't hard-code them or store them in databases.
- pub id: BlockStateIntegerRepr,
+ id: BlockStateIntegerRepr,
}
impl BlockState {
@@ -35,12 +36,21 @@ impl BlockState {
/// 0.
pub const AIR: BlockState = BlockState { id: 0 };
+ /// Create a new BlockState and panic if the block is not a valid state.
+ ///
+ /// You should probably use [`BlockState::try_from`] instead.
+ #[inline]
+ pub(crate) const fn new_const(id: BlockStateIntegerRepr) -> Self {
+ assert!(Self::is_valid_state(id));
+ Self { id }
+ }
+
/// Whether the block state is possible to exist in vanilla Minecraft.
///
/// It's equivalent to checking that the state ID is not greater than
/// [`Self::MAX_STATE`].
#[inline]
- pub fn is_valid_state(state_id: BlockStateIntegerRepr) -> bool {
+ pub const fn is_valid_state(state_id: BlockStateIntegerRepr) -> bool {
state_id <= Self::MAX_STATE
}
@@ -50,6 +60,13 @@ impl BlockState {
pub fn is_air(&self) -> bool {
self == &Self::AIR
}
+
+ /// Returns the protocol ID for the block state. IDs may change every
+ /// version, so you shouldn't hard-code them or store them in databases.
+ #[inline]
+ pub const fn id(&self) -> BlockStateIntegerRepr {
+ self.id
+ }
}
impl TryFrom<u32> for BlockState {