From ec275caf546e0b7bda361cb79ec69649ff8b13c3 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Thu, 18 Oct 2018 01:29:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20RegionManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/mc/world/anvil/RegionManager.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 anvil-loader/src/main/java/mc/world/anvil/RegionManager.java diff --git a/anvil-loader/src/main/java/mc/world/anvil/RegionManager.java b/anvil-loader/src/main/java/mc/world/anvil/RegionManager.java new file mode 100644 index 0000000..dfd1843 --- /dev/null +++ b/anvil-loader/src/main/java/mc/world/anvil/RegionManager.java @@ -0,0 +1,44 @@ +package mc.world.anvil; + +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import lombok.extern.slf4j.Slf4j; +import mc.core.utils.CompactedCoords; +import org.springframework.lang.Nullable; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +@Slf4j +class RegionManager { + private final Path regionFilesPath; + private final TIntObjectMap regions = new TIntObjectHashMap<>(); + + RegionManager(Path regionFilesPath) { + this.regionFilesPath = regionFilesPath; + } + + @Nullable + public Region getRegion(int x, int z) { + final int xz = CompactedCoords.compressXZ(x, z); + + if (regions.containsKey(xz)) { + return regions.get(xz); + } else { + Path regionFilePath = regionFilesPath.resolve("r." + x + "." + z + ".mca"); + if (Files.exists(regionFilePath)) { + try { + Region region = new Region(regionFilePath.toFile()); + regions.put(xz, region); + return region; + } catch (IOException e) { + log.error("load region from file", e); + return null; + } + } else { + return null; + } + } + } +}