aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2024-12-11 03:25:36 +0000
committermat <git@matdoes.dev>2024-12-11 03:25:36 +0000
commit097a620de1a0139ca9a745ddc146c37e1d4695da (patch)
tree293a0187f7528afa48aa5ffa7e89acd10841c5ba
parent2feef494718009dbcb5c62ef1e58c84c36e8bcbf (diff)
downloadazalea-drasl-097a620de1a0139ca9a745ddc146c37e1d4695da.tar.xz
fix for latest nightly by changing the FixedBitSet generic to take bytes instead of bits
-rwxr-xr-x.gitignore2
-rwxr-xr-xazalea-core/src/bitset.rs40
-rw-r--r--azalea-protocol/build.rs53
-rw-r--r--azalea-protocol/src/common/client_information.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/c_boss_event.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/c_commands.rs12
-rwxr-xr-xazalea-protocol/src/packets/game/c_player_abilities.rs4
-rw-r--r--azalea-protocol/src/packets/game/c_player_info_update.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/c_player_position.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/c_stop_sound.rs6
-rwxr-xr-xazalea-protocol/src/packets/game/s_chat.rs2
-rwxr-xr-xazalea-protocol/src/packets/game/s_player_abilities.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/s_player_input.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/s_set_command_block.rs4
-rwxr-xr-xazalea-protocol/src/packets/game/s_set_structure_block.rs4
-rw-r--r--azalea/src/pathfinder/world.rs8
-rw-r--r--rust-toolchain.toml3
17 files changed, 51 insertions, 111 deletions
diff --git a/.gitignore b/.gitignore
index c6cf1aef..db30f8c8 100755
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,5 @@ flamegraph.svg
perf.data
perf.data.old
heaptrack.*
+
+rustc-ice-*
diff --git a/azalea-core/src/bitset.rs b/azalea-core/src/bitset.rs
index e7c79467..de9d00f3 100755
--- a/azalea-core/src/bitset.rs
+++ b/azalea-core/src/bitset.rs
@@ -126,26 +126,24 @@ impl From<Vec<u8>> for BitSet {
/// A list of bits with a known fixed size.
///
+/// The `N` is the number of bytes reserved for the bitset. You're encouraged to
+/// use it like `FixedBitSet<{ 20_usize.div_ceil(8) }>` if you need 20 bits.
+///
+/// TODO: this should be changed back to bits once this is resolved:
+/// https://github.com/rust-lang/rust/issues/133199#issuecomment-2531645526
+///
/// Note that this is primarily meant for fast serialization and deserialization
/// for Minecraft, if you don't need that you should use the `fixedbitset` crate
/// since it's approximately 20% faster (since it stores the data as usizes
-/// instead of u8s)
+/// instead of u8s).
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct FixedBitSet<const N: usize>
-where
- [(); N.div_ceil(8)]: Sized,
-{
- data: [u8; N.div_ceil(8)],
+pub struct FixedBitSet<const N: usize> {
+ data: [u8; N],
}
-impl<const N: usize> FixedBitSet<N>
-where
- [u8; N.div_ceil(8)]: Sized,
-{
+impl<const N: usize> FixedBitSet<N> {
pub fn new() -> Self {
- FixedBitSet {
- data: [0; N.div_ceil(8)],
- }
+ FixedBitSet { data: [0; N] }
}
#[inline]
@@ -159,24 +157,18 @@ where
}
}
-impl<const N: usize> AzaleaRead for FixedBitSet<N>
-where
- [u8; N.div_ceil(8)]: Sized,
-{
+impl<const N: usize> AzaleaRead for FixedBitSet<N> {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let mut data = [0; N.div_ceil(8)];
- for item in data.iter_mut().take(N.div_ceil(8)) {
+ let mut data = [0; N];
+ for item in data.iter_mut().take(N) {
*item = u8::azalea_read(buf)?;
}
Ok(FixedBitSet { data })
}
}
-impl<const N: usize> AzaleaWrite for FixedBitSet<N>
-where
- [u8; N.div_ceil(8)]: Sized,
-{
+impl<const N: usize> AzaleaWrite for FixedBitSet<N> {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- for i in 0..N.div_ceil(8) {
+ for i in 0..N {
self.data[i].azalea_write(buf)?;
}
Ok(())
diff --git a/azalea-protocol/build.rs b/azalea-protocol/build.rs
deleted file mode 100644
index e3bb9c3c..00000000
--- a/azalea-protocol/build.rs
+++ /dev/null
@@ -1,53 +0,0 @@
-use std::env;
-use std::process::Command;
-
-/// The maximum recommended toolchain version, as a triple.
-const TOOLCHAIN_MAX: (u32, u32, u32) = (2024, 11, 11);
-
-fn main() {
- if let Some(toolchain) = toolchain_version() {
- // If the toolchain is not nightly, do nothing
- if !toolchain.contains("nightly") {
- return;
- }
-
- // Warn if the toolchain may cause issues
- if !recommended_toolchain(&toolchain).unwrap_or_default() {
- println!("cargo::warning=The current Rust version may cause issues, try using: \"nightly-{}-{}-{}\"", TOOLCHAIN_MAX.0, TOOLCHAIN_MAX.1, TOOLCHAIN_MAX.2);
- }
- }
-}
-
-/// Attempt to get the current toolchain version
-fn toolchain_version() -> Option<String> {
- // Use the `RUSTUP_TOOLCHAIN` environment variable
- if let Ok(toolchain) = env::var("RUSTUP_TOOLCHAIN") {
- return Some(toolchain);
- }
-
- // Fallback to running `rustc -V`
- let rustc_path = env::var("RUSTC")
- .or_else(|_| env::var("CARGO_BUILD_RUSTC"))
- .unwrap_or(String::from("rustc"));
-
- let rustc_command = Command::new(&rustc_path).arg("-V").output().unwrap();
- if rustc_command.status.success() {
- String::from_utf8(rustc_command.stdout).ok()
- } else {
- None
- }
-}
-
-
-/// Attempt to parse the version of the toolchain,
-/// returning `Some(true)` if the toolchain should be fine.
-fn recommended_toolchain(toolchain: &str) -> Option<bool> {
- let mut split = toolchain.split('-');
- while split.next() != Some("nightly") {}
-
- let year = split.next()?.parse().ok()?;
- let month = split.next()?.parse().ok()?;
- let day = split.next()?.parse().ok()?;
-
- Some((year, month, day) <= TOOLCHAIN_MAX)
-}
diff --git a/azalea-protocol/src/common/client_information.rs b/azalea-protocol/src/common/client_information.rs
index 6f5e05e2..f2290fe7 100644
--- a/azalea-protocol/src/common/client_information.rs
+++ b/azalea-protocol/src/common/client_information.rs
@@ -97,7 +97,7 @@ impl Default for ModelCustomization {
impl AzaleaRead for ModelCustomization {
fn azalea_read(buf: &mut std::io::Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
- let set = FixedBitSet::<7>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 7_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(Self {
cape: set.index(0),
jacket: set.index(1),
@@ -112,7 +112,7 @@ impl AzaleaRead for ModelCustomization {
impl AzaleaWrite for ModelCustomization {
fn azalea_write(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<7>::new();
+ let mut set = FixedBitSet::<{ 7_usize.div_ceil(8) }>::new();
if self.cape {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/c_boss_event.rs b/azalea-protocol/src/packets/game/c_boss_event.rs
index e54ab59f..58d9f4bb 100755
--- a/azalea-protocol/src/packets/game/c_boss_event.rs
+++ b/azalea-protocol/src/packets/game/c_boss_event.rs
@@ -116,7 +116,7 @@ pub struct Properties {
impl AzaleaRead for Properties {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<3>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 3_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(Self {
darken_screen: set.index(0),
play_music: set.index(1),
@@ -127,7 +127,7 @@ impl AzaleaRead for Properties {
impl AzaleaWrite for Properties {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<3>::new();
+ let mut set = FixedBitSet::<{ 3_usize.div_ceil(8) }>::new();
if self.darken_screen {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/c_commands.rs b/azalea-protocol/src/packets/game/c_commands.rs
index 1a231559..c0ac27b2 100755
--- a/azalea-protocol/src/packets/game/c_commands.rs
+++ b/azalea-protocol/src/packets/game/c_commands.rs
@@ -46,7 +46,7 @@ impl<T: PartialEq> PartialEq for BrigadierNumber<T> {
impl<T: AzaleaRead> AzaleaRead for BrigadierNumber<T> {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let flags = FixedBitSet::<2>::azalea_read(buf)?;
+ let flags = FixedBitSet::<{ 2_usize.div_ceil(8) }>::azalea_read(buf)?;
let min = if flags.index(0) {
Some(T::azalea_read(buf)?)
} else {
@@ -62,7 +62,7 @@ impl<T: AzaleaRead> AzaleaRead for BrigadierNumber<T> {
}
impl<T: AzaleaWrite> AzaleaWrite for BrigadierNumber<T> {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut flags = FixedBitSet::<2>::new();
+ let mut flags = FixedBitSet::<{ 2_usize.div_ceil(8) }>::new();
if self.min.is_some() {
flags.set(0);
}
@@ -156,7 +156,7 @@ pub struct EntityParser {
}
impl AzaleaRead for EntityParser {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let flags = FixedBitSet::<2>::azalea_read(buf)?;
+ let flags = FixedBitSet::<{ 2_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(EntityParser {
single: flags.index(0),
players_only: flags.index(1),
@@ -165,7 +165,7 @@ impl AzaleaRead for EntityParser {
}
impl AzaleaWrite for EntityParser {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut flags = FixedBitSet::<2>::new();
+ let mut flags = FixedBitSet::<{ 2_usize.div_ceil(8) }>::new();
if self.single {
flags.set(0);
}
@@ -180,7 +180,7 @@ impl AzaleaWrite for EntityParser {
// TODO: BrigadierNodeStub should have more stuff
impl AzaleaRead for BrigadierNodeStub {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let flags = FixedBitSet::<8>::azalea_read(buf)?;
+ let flags = FixedBitSet::<{ 8_usize.div_ceil(8) }>::azalea_read(buf)?;
if flags.index(5) || flags.index(6) || flags.index(7) {
warn!("Warning: The flags from a Brigadier node are over 31. This is probably a bug.",);
}
@@ -239,7 +239,7 @@ impl AzaleaRead for BrigadierNodeStub {
impl AzaleaWrite for BrigadierNodeStub {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut flags = FixedBitSet::<4>::new();
+ let mut flags = FixedBitSet::<{ 4_usize.div_ceil(8) }>::new();
if self.is_executable {
flags.set(2);
}
diff --git a/azalea-protocol/src/packets/game/c_player_abilities.rs b/azalea-protocol/src/packets/game/c_player_abilities.rs
index c32a99fe..fffd320c 100755
--- a/azalea-protocol/src/packets/game/c_player_abilities.rs
+++ b/azalea-protocol/src/packets/game/c_player_abilities.rs
@@ -23,7 +23,7 @@ pub struct PlayerAbilitiesFlags {
impl AzaleaRead for PlayerAbilitiesFlags {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<4>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 4_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(PlayerAbilitiesFlags {
invulnerable: set.index(0),
flying: set.index(1),
@@ -35,7 +35,7 @@ impl AzaleaRead for PlayerAbilitiesFlags {
impl AzaleaWrite for PlayerAbilitiesFlags {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<4>::new();
+ let mut set = FixedBitSet::<{ 4_usize.div_ceil(8) }>::new();
if self.invulnerable {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/c_player_info_update.rs b/azalea-protocol/src/packets/game/c_player_info_update.rs
index 73c463d5..eb019167 100644
--- a/azalea-protocol/src/packets/game/c_player_info_update.rs
+++ b/azalea-protocol/src/packets/game/c_player_info_update.rs
@@ -183,7 +183,7 @@ pub struct ActionEnumSet {
impl AzaleaRead for ActionEnumSet {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<7>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 7_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(ActionEnumSet {
add_player: set.index(0),
initialize_chat: set.index(1),
@@ -199,7 +199,7 @@ impl AzaleaRead for ActionEnumSet {
impl AzaleaWrite for ActionEnumSet {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<7>::new();
+ let mut set = FixedBitSet::<{ 7_usize.div_ceil(8) }>::new();
if self.add_player {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/c_player_position.rs b/azalea-protocol/src/packets/game/c_player_position.rs
index e742df22..c6a2e3f9 100755
--- a/azalea-protocol/src/packets/game/c_player_position.rs
+++ b/azalea-protocol/src/packets/game/c_player_position.rs
@@ -39,7 +39,7 @@ pub struct RelativeMovements {
impl AzaleaRead for RelativeMovements {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
// yes minecraft seriously wastes that many bits, smh
- let set = FixedBitSet::<32>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 32_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(RelativeMovements {
x: set.index(0),
y: set.index(1),
@@ -56,7 +56,7 @@ impl AzaleaRead for RelativeMovements {
impl AzaleaWrite for RelativeMovements {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<32>::new();
+ let mut set = FixedBitSet::<{ 32_usize.div_ceil(8) }>::new();
let mut set_bit = |index: usize, value: bool| {
if value {
set.set(index);
diff --git a/azalea-protocol/src/packets/game/c_stop_sound.rs b/azalea-protocol/src/packets/game/c_stop_sound.rs
index 0a01fa71..aa92c23e 100755
--- a/azalea-protocol/src/packets/game/c_stop_sound.rs
+++ b/azalea-protocol/src/packets/game/c_stop_sound.rs
@@ -1,6 +1,6 @@
use std::io::{Cursor, Write};
-use azalea_buf::{BufReadError, AzaleaRead, AzaleaWrite};
+use azalea_buf::{AzaleaRead, AzaleaWrite, BufReadError};
use azalea_core::{bitset::FixedBitSet, resource_location::ResourceLocation};
use azalea_protocol_macros::ClientboundGamePacket;
@@ -14,7 +14,7 @@ pub struct ClientboundStopSound {
impl AzaleaRead for ClientboundStopSound {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<2>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 2_usize.div_ceil(8) }>::azalea_read(buf)?;
let source = if set.index(0) {
Some(SoundSource::azalea_read(buf)?)
} else {
@@ -32,7 +32,7 @@ impl AzaleaRead for ClientboundStopSound {
impl AzaleaWrite for ClientboundStopSound {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<2>::new();
+ let mut set = FixedBitSet::<{ 2_usize.div_ceil(8) }>::new();
if self.source.is_some() {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/s_chat.rs b/azalea-protocol/src/packets/game/s_chat.rs
index 03bafd11..40c7e123 100755
--- a/azalea-protocol/src/packets/game/s_chat.rs
+++ b/azalea-protocol/src/packets/game/s_chat.rs
@@ -16,5 +16,5 @@ pub struct ServerboundChat {
pub struct LastSeenMessagesUpdate {
#[var]
pub messages: u32,
- pub acknowledged: FixedBitSet<20>,
+ pub acknowledged: FixedBitSet<{ 20_usize.div_ceil(8) }>,
}
diff --git a/azalea-protocol/src/packets/game/s_player_abilities.rs b/azalea-protocol/src/packets/game/s_player_abilities.rs
index fdf2d8a4..5e63ef2e 100755
--- a/azalea-protocol/src/packets/game/s_player_abilities.rs
+++ b/azalea-protocol/src/packets/game/s_player_abilities.rs
@@ -13,7 +13,7 @@ pub struct ServerboundPlayerAbilities {
impl AzaleaRead for ServerboundPlayerAbilities {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<2>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 2_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(Self {
is_flying: set.index(1),
})
@@ -22,7 +22,7 @@ impl AzaleaRead for ServerboundPlayerAbilities {
impl AzaleaWrite for ServerboundPlayerAbilities {
fn azalea_write(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<2>::new();
+ let mut set = FixedBitSet::<{ 2_usize.div_ceil(8) }>::new();
if self.is_flying {
set.set(1);
}
diff --git a/azalea-protocol/src/packets/game/s_player_input.rs b/azalea-protocol/src/packets/game/s_player_input.rs
index bd4ba970..6dbd47cd 100755
--- a/azalea-protocol/src/packets/game/s_player_input.rs
+++ b/azalea-protocol/src/packets/game/s_player_input.rs
@@ -18,7 +18,7 @@ pub struct ServerboundPlayerInput {
impl AzaleaRead for ServerboundPlayerInput {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<7>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 7_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(Self {
forward: set.index(0),
backward: set.index(1),
@@ -33,7 +33,7 @@ impl AzaleaRead for ServerboundPlayerInput {
impl AzaleaWrite for ServerboundPlayerInput {
fn azalea_write(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<7>::new();
+ let mut set = FixedBitSet::<{ 7_usize.div_ceil(8) }>::new();
if self.forward {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/s_set_command_block.rs b/azalea-protocol/src/packets/game/s_set_command_block.rs
index dacb79de..ea1af6bb 100755
--- a/azalea-protocol/src/packets/game/s_set_command_block.rs
+++ b/azalea-protocol/src/packets/game/s_set_command_block.rs
@@ -30,7 +30,7 @@ impl AzaleaRead for ServerboundSetCommandBlock {
let command = String::azalea_read(buf)?;
let mode = Mode::azalea_read(buf)?;
- let set = FixedBitSet::<3>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 3_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(Self {
pos,
command,
@@ -48,7 +48,7 @@ impl AzaleaWrite for ServerboundSetCommandBlock {
self.command.azalea_write(buf)?;
self.mode.azalea_write(buf)?;
- let mut set = FixedBitSet::<3>::new();
+ let mut set = FixedBitSet::<{ 3_usize.div_ceil(8) }>::new();
if self.track_output {
set.set(0);
}
diff --git a/azalea-protocol/src/packets/game/s_set_structure_block.rs b/azalea-protocol/src/packets/game/s_set_structure_block.rs
index 7f05a3a7..14b403ab 100755
--- a/azalea-protocol/src/packets/game/s_set_structure_block.rs
+++ b/azalea-protocol/src/packets/game/s_set_structure_block.rs
@@ -71,7 +71,7 @@ pub struct Flags {
impl AzaleaRead for Flags {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
- let set = FixedBitSet::<3>::azalea_read(buf)?;
+ let set = FixedBitSet::<{ 3_usize.div_ceil(8) }>::azalea_read(buf)?;
Ok(Self {
ignore_entities: set.index(0),
show_air: set.index(1),
@@ -82,7 +82,7 @@ impl AzaleaRead for Flags {
impl AzaleaWrite for Flags {
fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
- let mut set = FixedBitSet::<3>::new();
+ let mut set = FixedBitSet::<{ 3_usize.div_ceil(8) }>::new();
if self.ignore_entities {
set.set(0);
}
diff --git a/azalea/src/pathfinder/world.rs b/azalea/src/pathfinder/world.rs
index 3a004f65..924ee33a 100644
--- a/azalea/src/pathfinder/world.rs
+++ b/azalea/src/pathfinder/world.rs
@@ -77,8 +77,8 @@ impl CachedSections {
pub struct CachedSection {
pub pos: ChunkSectionPos,
- pub passable_bitset: FixedBitSet<4096>,
- pub solid_bitset: FixedBitSet<4096>,
+ pub passable_bitset: FixedBitSet<{ 4096_usize.div_ceil(8) }>,
+ pub solid_bitset: FixedBitSet<{ 4096_usize.div_ceil(8) }>,
}
impl CachedWorld {
@@ -182,8 +182,8 @@ impl CachedWorld {
fn calculate_bitsets_for_section(&self, section_pos: ChunkSectionPos) -> Option<CachedSection> {
self.with_section(section_pos, |section| {
- let mut passable_bitset = FixedBitSet::<4096>::new();
- let mut solid_bitset = FixedBitSet::<4096>::new();
+ let mut passable_bitset = FixedBitSet::<{ 4096_usize.div_ceil(8) }>::new();
+ let mut solid_bitset = FixedBitSet::<{ 4096_usize.div_ceil(8) }>::new();
for i in 0..4096 {
let block_state_id = section.get_at_index(i);
let block_state = BlockState::try_from(block_state_id).unwrap_or(BlockState::AIR);
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
index e5458740..5d56faf9 100644
--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -1,3 +1,2 @@
[toolchain]
-channel = "nightly-2024-11-11"
-# channel = "nightly"
+channel = "nightly"