diff options
author | metamuffin <metamuffin@disroot.org> | 2022-10-17 22:17:24 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-10-17 22:17:24 +0200 |
commit | 0a6122efbbdea974d963e167db1d660c81ea16e7 (patch) | |
tree | 36bce185bc5b7e718e508dab44f3a5fb11459bfa /src/dimension.rs | |
parent | bcfc5827a949172aedbd6c7cd1881a47db42c46d (diff) | |
download | trash-map-0a6122efbbdea974d963e167db1d660c81ea16e7.tar trash-map-0a6122efbbdea974d963e167db1d660c81ea16e7.tar.bz2 trash-map-0a6122efbbdea974d963e167db1d660c81ea16e7.tar.zst |
a
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()? |