1 package com.irtimaled.bbor.client.interop;
3 import com.irtimaled.bbor.client.Player;
4 import net.minecraft.client.Minecraft;
5 import net.minecraft.world.storage.SaveFormat;
6 import net.minecraft.world.storage.SaveHandler;
9 import java.util.HashMap;
12 public class SaveGameStructureLoader {
13 private static final Map<Integer, NBTStructureLoader> nbtStructureLoaders = new HashMap<>();
14 private static SaveHandler saveHandler = null;
15 private static File worldDirectory = null;
17 static void loadSaveGame(String fileName) {
18 Minecraft minecraft = Minecraft.getInstance();
19 SaveFormat saveLoader = minecraft.getSaveLoader();
20 saveHandler = saveLoader.getSaveLoader(fileName, null);
21 worldDirectory = saveLoader.func_215781_c().resolve(fileName).toFile();
23 for (int dimensionId : nbtStructureLoaders.keySet()) {
24 NBTStructureLoader dimensionProcessor = getNBTStructureLoader(dimensionId);
25 dimensionProcessor.configure(saveHandler, worldDirectory);
28 loadChunksAroundPlayer();
31 private static void loadChunksAroundPlayer() {
32 NBTStructureLoader dimensionProcessor = getNBTStructureLoader(Player.getDimensionId());
33 int renderDistance = ClientInterop.getRenderDistanceChunks();
35 int playerChunkX = (int) Player.getX() >> 4;
36 int minChunkX = playerChunkX - renderDistance;
37 int maxChunkX = playerChunkX + renderDistance;
39 int playerChunkZ = (int) Player.getZ() >> 4;
40 int minChunkZ = playerChunkZ - renderDistance;
41 int maxChunkZ = playerChunkZ + renderDistance;
43 for (int chunkX = minChunkX; chunkX < maxChunkX; chunkX++) {
44 for (int chunkZ = minChunkZ; chunkZ < maxChunkZ; chunkZ++) {
45 dimensionProcessor.loadStructures(chunkX, chunkZ);
50 static void loadStructures(int chunkX, int chunkZ) {
51 NBTStructureLoader dimensionProcessor = getNBTStructureLoader(Player.getDimensionId());
52 dimensionProcessor.loadStructures(chunkX, chunkZ);
55 private static NBTStructureLoader getNBTStructureLoader(int dimensionId) {
56 return nbtStructureLoaders.computeIfAbsent(dimensionId,
57 id -> new NBTStructureLoader(id, saveHandler, worldDirectory));
60 public static void clear() {
61 nbtStructureLoaders.values().forEach(NBTStructureLoader::clear);
62 nbtStructureLoaders.clear();
64 worldDirectory = null;