From c935156b7172bb735ca7b02567f6a593d229a3e0 Mon Sep 17 00:00:00 2001 From: StevenRS11 Date: Mon, 27 Jan 2014 17:01:23 -0500 Subject: [PATCH] working on saving --- .../mod_pocketDim/saving/DDSaveHandler.java | 54 ++++++++----------- .../mod_pocketDim/saving/OldSaveImporter.java | 4 +- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java b/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java index 675ff43..c23fd20 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java @@ -5,6 +5,7 @@ import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import net.minecraftforge.common.DimensionManager; @@ -59,24 +60,22 @@ public class DDSaveHandler // List any dimension data files and read each dimension DimDataProcessor reader = new DimDataProcessor(); - List packedDims = new ArrayList(); + HashMap packedDims = new HashMap(); FileFilter dataFileFilter = new FileFilters.RegexFileFilter("dim_-?\\d+\\.txt"); File[] dataFiles = dataDirectory.listFiles(dataFileFilter); for (File dataFile : dataFiles) { PackedDimData packedDim = readDimension(dataFile, reader); - packedDims.add(packedDim); + packedDims.put(packedDim.ID,packedDim); } List linksToUnpack = new ArrayList(); //get the grand list of all links to unpack - for(PackedDimData packedDim : packedDims) + for(PackedDimData packedDim : packedDims.values()) { linksToUnpack.addAll(packedDim.Links); } - - return unpackDimData(packedDims)&&unpackLinkData(linksToUnpack); } @@ -85,47 +84,36 @@ public class DDSaveHandler * @param packedDims * @return */ - public static boolean unpackDimData(List packedDims) + public static boolean unpackDimData(HashMap packedDims) { - List unpackedDims = new ArrayList(); - for(PackedDimData data : packedDims) - { - System.out.println(data.ID); - } + ArrayList roots = new ArrayList(); + //Load roots - for(PackedDimData packedDim : packedDims) + for(PackedDimData packedDim : packedDims.values()) { if(packedDim.ParentID==packedDim.ID) { PocketManager.registerPackedDimData(packedDim); - unpackedDims.add(packedDim); + roots.add(packedDim); } } - packedDims.removeAll(unpackedDims); - unpackedDims.clear(); - - //Load the pockets - while(!packedDims.isEmpty()) + //load the children for each root + for(PackedDimData packedDim : roots) { - for(PackedDimData packedDim : packedDims) - { - if(PocketManager.isRegisteredInternally(packedDim.ParentID)) - { - PocketManager.registerPackedDimData(packedDim); - unpackedDims.add(packedDim); - } - else - { - //break here gracefully - } - } - packedDims.removeAll(unpackedDims); - unpackedDims.clear(); - + registerChildren(packedDim, packedDims); } return true; } + private static void registerChildren(PackedDimData data, HashMap packedDims) + { + PocketManager.registerPackedDimData(data); + for(Integer child : data.ChildIDs) + { + registerChildren(packedDims.get(child),packedDims); + } + } + public static boolean unpackLinkData(List linksToUnpack) { Point3D fakePoint = new Point3D(-1,-1,-1); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/saving/OldSaveImporter.java b/src/main/java/StevenDimDoors/mod_pocketDim/saving/OldSaveImporter.java index cefaf36..42b8d01 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/saving/OldSaveImporter.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/saving/OldSaveImporter.java @@ -25,7 +25,7 @@ public class OldSaveImporter save.close(); List allPackedLinks = new ArrayList(); - List newPackedDimData = new ArrayList(); + HashMap newPackedDimData = new HashMap(); HashMap dimMap; @@ -59,7 +59,7 @@ public class OldSaveImporter } PackedDimData dim = new PackedDimData(data.dimID, data.depth, data.depth, data.exitDimLink.locDimID, data.exitDimLink.locDimID, 0, data.dungeonGenerator!=null, data.hasBeenFilled, null, new Point3D(0,64,0), childDims, newPackedLinkData, null); - newPackedDimData.add(dim); + newPackedDimData.put(dim.ID,dim); DDSaveHandler.unpackDimData(newPackedDimData); DDSaveHandler.unpackLinkData(allPackedLinks);