From 18c11ee24ec3889665a9d6292b7166e95e90a223 Mon Sep 17 00:00:00 2001 From: StevenRS11 Date: Mon, 27 Jan 2014 22:13:32 -0500 Subject: [PATCH] Overhauled loading --- .../mod_pocketDim/saving/DDSaveHandler.java | 60 ++++++++++++------- .../mod_pocketDim/saving/PackedDimData.java | 6 ++ 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java b/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java index 9b6081b3..1d6ea463 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java @@ -5,7 +5,10 @@ import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.util.Deque; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import net.minecraftforge.common.DimensionManager; @@ -86,39 +89,56 @@ public class DDSaveHandler */ public static boolean unpackDimData(HashMap packedDims) { - ArrayList roots = new ArrayList(); - ArrayList children = new ArrayList(); + LinkedList children = new LinkedList(); ArrayList tempChildren = new ArrayList(); - - //Load roots + int registeredDims=packedDims.keySet().size(); + for(PackedDimData packedDim : packedDims.values()) { - if(packedDim.ParentID==packedDim.ID) + //Load roots + if(packedDim.RootID==packedDim.ID) { + children.add(packedDim.ID); PocketManager.registerPackedDimData(packedDim); - roots.add(packedDim); + } + //fix pockets without parents + if(!packedDims.containsKey(packedDim.ParentID)) + { + packedDim=(new PackedDimData(packedDim.ID, 1, packedDim.PackDepth, packedDim.RootID, packedDim.RootID, packedDim.Orientation, packedDim.IsDungeon, packedDim.IsFilled, packedDim.DungeonData, packedDim.Origin, packedDim.ChildIDs, packedDim.Links, packedDim.Tails)); + packedDims.put(packedDim.ID, packedDim); + children.addLast(packedDim.ID); } } //load the children for each root - for(PackedDimData packedDim : roots) - { - children.addAll(packedDim.ChildIDs); - } while(!children.isEmpty()) { - for(Integer child: children) - { - PackedDimData data = packedDims.get(child); - PocketManager.registerPackedDimData(data); - tempChildren.addAll(data.ChildIDs); - } - children.clear(); - children.addAll(tempChildren); - tempChildren.clear(); + Integer childID = children.pop(); + PackedDimData data = packedDims.get(childID); + children.addAll(verifyChildren(data, packedDims)); + PocketManager.registerPackedDimData(data); } - return true; } + private static ArrayList verifyChildren(PackedDimData packedDim,HashMap packedDims) + { + ArrayList children = new ArrayList(); + children.addAll(packedDim.ChildIDs); + boolean isMissing = false; + for(Integer childID : packedDim.ChildIDs) + { + if(!packedDims.containsKey(childID)) + { + children.remove(childID); + isMissing=true; + } + } + if(isMissing) + { + packedDim=(new PackedDimData(packedDim.ID, packedDim.Depth, packedDim.PackDepth, packedDim.ParentID, packedDim.RootID, packedDim.Orientation, packedDim.IsDungeon, packedDim.IsFilled, packedDim.DungeonData, packedDim.Origin, children, packedDim.Links, packedDim.Tails)); + packedDims.put(packedDim.ID, packedDim); + } + return children; + } public static boolean unpackLinkData(List linksToUnpack) { diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/saving/PackedDimData.java b/src/main/java/StevenDimDoors/mod_pocketDim/saving/PackedDimData.java index 524ef549..fb058d3d 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/saving/PackedDimData.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/saving/PackedDimData.java @@ -43,4 +43,10 @@ public class PackedDimData Links = links; Tails = tails; } + + @Override + public String toString() + { + return "ID= "+this.ID; + } }