diff options
Diffstat (limited to 'src/dimension.rs')
-rw-r--r-- | src/dimension.rs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/dimension.rs b/src/dimension.rs index 6c3bea8..0f8ac3e 100644 --- a/src/dimension.rs +++ b/src/dimension.rs @@ -1,7 +1,7 @@ use chashmap::{CHashMap, ReadGuard, WriteGuard}; use fastanvil::{Block, Chunk, CurrentJavaChunk, Region, RegionFileLoader, RegionLoader}; use log::{debug, info}; -use std::{fs::File, path::Path}; +use std::{fs::File, path::PathBuf}; pub struct Dimension { loader: RegionFileLoader, @@ -10,8 +10,8 @@ pub struct Dimension { } impl Dimension { - pub fn new(path: &str) -> Self { - let loader = fastanvil::RegionFileLoader::new(Path::new(path).to_path_buf()); + pub fn new(path: PathBuf) -> Self { + let loader = fastanvil::RegionFileLoader::new(path); Self { loader, regions: Default::default(), @@ -36,7 +36,7 @@ impl Dimension { self.region(rx, rz) } } - + pub fn chunk( &self, cx: isize, @@ -46,11 +46,14 @@ impl Dimension { self.chunks.get(&(cx, cz)).unwrap() } else { let mut guard = self.region(cx / 32, cz / 32); - let reg = guard.as_mut().unwrap(); debug!("loading chunk {:?}", (cx, cz)); - let chunk: Option<CurrentJavaChunk> = reg - .read_chunk(cx.rem_euclid(32) as usize, cz.rem_euclid(32) as usize) - .ok() + let chunk: Option<CurrentJavaChunk> = guard + .as_mut() + .map(|c| { + c.read_chunk(cx.rem_euclid(32) as usize, cz.rem_euclid(32) as usize) + .ok() + }) + .flatten() .flatten() .map(|chunk| fastnbt::from_bytes(&chunk).ok()) .flatten(); @@ -58,7 +61,7 @@ impl Dimension { self.chunk(cx, cz) } } - + pub fn block(&self, x: isize, y: isize, z: isize) -> Option<Block> { self.chunk(x / 16, z / 16) .as_ref()? |