Overhauled loading

This commit is contained in:
StevenRS11 2014-01-27 22:13:32 -05:00
parent ac7dbab39f
commit 18c11ee24e
2 changed files with 46 additions and 20 deletions

View file

@ -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<Integer,PackedDimData> packedDims)
{
ArrayList<PackedDimData> roots = new ArrayList<PackedDimData>();
ArrayList<Integer> children = new ArrayList<Integer>();
LinkedList<Integer> children = new LinkedList<Integer>();
ArrayList<Integer> tempChildren = new ArrayList<Integer>();
int registeredDims=packedDims.keySet().size();
//Load roots
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);
Integer childID = children.pop();
PackedDimData data = packedDims.get(childID);
children.addAll(verifyChildren(data, packedDims));
PocketManager.registerPackedDimData(data);
tempChildren.addAll(data.ChildIDs);
}
children.clear();
children.addAll(tempChildren);
tempChildren.clear();
}
return true;
}
private static ArrayList<Integer> verifyChildren(PackedDimData packedDim,HashMap<Integer,PackedDimData> packedDims)
{
ArrayList<Integer> children = new ArrayList<Integer>();
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<PackedLinkData> linksToUnpack)
{

View file

@ -43,4 +43,10 @@ public class PackedDimData
Links = links;
Tails = tails;
}
@Override
public String toString()
{
return "ID= "+this.ID;
}
}