Overhauled loading
This commit is contained in:
parent
ac7dbab39f
commit
18c11ee24e
2 changed files with 46 additions and 20 deletions
|
@ -5,7 +5,10 @@ import java.io.FileFilter;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Deque;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
|
@ -86,39 +89,56 @@ public class DDSaveHandler
|
||||||
*/
|
*/
|
||||||
public static boolean unpackDimData(HashMap<Integer,PackedDimData> packedDims)
|
public static boolean unpackDimData(HashMap<Integer,PackedDimData> packedDims)
|
||||||
{
|
{
|
||||||
ArrayList<PackedDimData> roots = new ArrayList<PackedDimData>();
|
LinkedList<Integer> children = new LinkedList<Integer>();
|
||||||
ArrayList<Integer> children = new ArrayList<Integer>();
|
|
||||||
ArrayList<Integer> tempChildren = new ArrayList<Integer>();
|
ArrayList<Integer> tempChildren = new ArrayList<Integer>();
|
||||||
|
int registeredDims=packedDims.keySet().size();
|
||||||
|
|
||||||
//Load roots
|
|
||||||
for(PackedDimData packedDim : packedDims.values())
|
for(PackedDimData packedDim : packedDims.values())
|
||||||
{
|
{
|
||||||
if(packedDim.ParentID==packedDim.ID)
|
//Load roots
|
||||||
|
if(packedDim.RootID==packedDim.ID)
|
||||||
{
|
{
|
||||||
|
children.add(packedDim.ID);
|
||||||
PocketManager.registerPackedDimData(packedDim);
|
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
|
//load the children for each root
|
||||||
for(PackedDimData packedDim : roots)
|
|
||||||
{
|
|
||||||
children.addAll(packedDim.ChildIDs);
|
|
||||||
}
|
|
||||||
while(!children.isEmpty())
|
while(!children.isEmpty())
|
||||||
{
|
{
|
||||||
for(Integer child: children)
|
Integer childID = children.pop();
|
||||||
{
|
PackedDimData data = packedDims.get(childID);
|
||||||
PackedDimData data = packedDims.get(child);
|
children.addAll(verifyChildren(data, packedDims));
|
||||||
PocketManager.registerPackedDimData(data);
|
PocketManager.registerPackedDimData(data);
|
||||||
tempChildren.addAll(data.ChildIDs);
|
|
||||||
}
|
}
|
||||||
children.clear();
|
|
||||||
children.addAll(tempChildren);
|
|
||||||
tempChildren.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
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)
|
public static boolean unpackLinkData(List<PackedLinkData> linksToUnpack)
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,4 +43,10 @@ public class PackedDimData
|
||||||
Links = links;
|
Links = links;
|
||||||
Tails = tails;
|
Tails = tails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "ID= "+this.ID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue