aboutsummaryrefslogtreecommitdiff
path: root/src/dimension.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/dimension.rs')
-rw-r--r--src/dimension.rs21
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()?