diff --git a/StevenDimDoors/mod_pocketDim/Point3D.java b/StevenDimDoors/mod_pocketDim/Point3D.java index f44d0fe..b9c032e 100644 --- a/StevenDimDoors/mod_pocketDim/Point3D.java +++ b/StevenDimDoors/mod_pocketDim/Point3D.java @@ -60,7 +60,10 @@ public class Point3D implements Serializable { { return new Point3D(x, y, z); } - + public int[] toIntArray() + { + return new int[]{x,y,z}; + } public boolean equals(Point3D other) { if (other == null) diff --git a/StevenDimDoors/mod_pocketDim/core/PocketManager.java b/StevenDimDoors/mod_pocketDim/core/PocketManager.java index 2b04529..dbc2607 100644 --- a/StevenDimDoors/mod_pocketDim/core/PocketManager.java +++ b/StevenDimDoors/mod_pocketDim/core/PocketManager.java @@ -6,6 +6,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import cpw.mods.fml.common.FMLCommonHandler; @@ -13,12 +14,15 @@ import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.DimensionManager; import StevenDimDoors.mod_pocketDim.DDProperties; +import StevenDimDoors.mod_pocketDim.Point3D; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.helpers.Compactor; import StevenDimDoors.mod_pocketDim.helpers.DeleteFolder; import StevenDimDoors.mod_pocketDim.saving.DDSaveHandler; import StevenDimDoors.mod_pocketDim.saving.IPackable; import StevenDimDoors.mod_pocketDim.saving.PackedDimData; +import StevenDimDoors.mod_pocketDim.saving.PackedLinkData; +import StevenDimDoors.mod_pocketDim.saving.PackedLinkTail; import StevenDimDoors.mod_pocketDim.util.Point4D; import StevenDimDoors.mod_pocketDim.watcher.ClientDimData; import StevenDimDoors.mod_pocketDim.watcher.IUpdateSource; @@ -89,8 +93,51 @@ public class PocketManager @Override public PackedDimData pack() { + ArrayList ChildIDs = new ArrayList(); + ArrayList Links = new ArrayList(); + ArrayList Tails = new ArrayList(); + //Make a list of children + for(NewDimData data : this.children) + { + ChildIDs.add(data.id); + } + for(DimLink link:this.links()) + { + ArrayList children = new ArrayList(); + Point3D parentPoint = new Point3D(-1,-1,-1); + if(link.parent!=null) + { + parentPoint=link.parent.source.toPoint3D(); + } + + for(DimLink childLink : link.children) + { + children.add(childLink.source().toPoint3D()); + } + PackedLinkTail tail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType()); + Links.add(new PackedLinkData(link.source,parentPoint,tail,link.orientation,children)); + + PackedLinkTail tempTail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType()); + if(Tails.contains(tempTail)) + { + Tails.add(tempTail); + + } + } + int parentID=this.id; + Point3D originPoint=new Point3D(0,0,0); + if(this.parent!=null) + { + parentID = this.parent.id; + } + if(this.origin!=null) + { + originPoint=this.origin.toPoint3D(); + } + return new PackedDimData(this.id, depth, this.packDepth, parentID, this.root().id(), orientation, + isDungeon, isFilled, originPoint, ChildIDs, Links, Tails); // FIXME: IMPLEMENTATION PLZTHX - return null; + //I tried } } diff --git a/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java b/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java index fe63994..445996c 100644 --- a/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java +++ b/StevenDimDoors/mod_pocketDim/saving/DDSaveHandler.java @@ -75,6 +75,7 @@ public class DDSaveHandler String basePath = DimensionManager.getCurrentSaveRootDirectory() + "/DimensionalDoors/data/"; File basePathFile = new File(basePath); Files.createParentDirs(basePathFile); + basePathFile.mkdir(); basePathFile = null; basePath += "dim_"; @@ -101,7 +102,7 @@ public class DDSaveHandler catch (Exception e) { System.err.println("Could not save data for dimension #" + dimension.name() + ". The following error occurred:"); - printException(e, false); + printException(e, true); return false; } } diff --git a/StevenDimDoors/mod_pocketDim/saving/DimDataProcessor.java b/StevenDimDoors/mod_pocketDim/saving/DimDataProcessor.java index 6102182..4c0c66b 100644 --- a/StevenDimDoors/mod_pocketDim/saving/DimDataProcessor.java +++ b/StevenDimDoors/mod_pocketDim/saving/DimDataProcessor.java @@ -1,19 +1,47 @@ package StevenDimDoors.mod_pocketDim.saving; +import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import scala.Char; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; + +import StevenDimDoors.mod_pocketDim.Point3D; import StevenDimDoors.mod_pocketDim.util.BaseConfigurationProcessor; import StevenDimDoors.mod_pocketDim.util.ConfigurationProcessingException; +import StevenDimDoors.mod_pocketDim.util.Point4D; public class DimDataProcessor extends BaseConfigurationProcessor { + private static final String dimID = "DIM_ID"; + private static final String depth = "DEPTH"; + private static final String children = "CHILDREN_DIM_IDS"; + private static final String linkTails = "LINK_TAILS"; + private static final String filled = "IS_FILLED"; + private static final String isDungeon = "IS_DUNGEON"; + private static final String orientation = "ORIENTATION"; + private static final String parentID = "PARENT_DIM_ID"; + private static final String rootID = "ROOT_DIM_ID"; + private static final String packDepth = "PACK_DEPTH"; + private static final String links = "LINKS"; + private static final String origin = "ORIGIN_POINT"; + @Override public PackedDimData readFromStream(InputStream inputStream) throws ConfigurationProcessingException - { - // TODO Auto-generated method stub + { return null; } @@ -21,8 +49,20 @@ public class DimDataProcessor extends BaseConfigurationProcessor public void writeToStream(OutputStream outputStream, PackedDimData data) throws ConfigurationProcessingException { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.setPrettyPrinting().create(); + + try + { + outputStream.write(gson.toJson(data).getBytes("UTF-8")); + outputStream.close(); + } + catch (IOException e) + { + // TODO Auto-generated catch block + throw new ConfigurationProcessingException(); + } // TODO Auto-generated method stub } - } diff --git a/StevenDimDoors/mod_pocketDim/saving/PackedDungeonData.java b/StevenDimDoors/mod_pocketDim/saving/PackedDungeonData.java new file mode 100644 index 0000000..f997e85 --- /dev/null +++ b/StevenDimDoors/mod_pocketDim/saving/PackedDungeonData.java @@ -0,0 +1,5 @@ +package StevenDimDoors.mod_pocketDim.saving; + +public class PackedDungeonData { + +} diff --git a/StevenDimDoors/mod_pocketDim/saving/PackedLinkData.java b/StevenDimDoors/mod_pocketDim/saving/PackedLinkData.java index f82e74a..c1a81e0 100644 --- a/StevenDimDoors/mod_pocketDim/saving/PackedLinkData.java +++ b/StevenDimDoors/mod_pocketDim/saving/PackedLinkData.java @@ -1,6 +1,25 @@ package StevenDimDoors.mod_pocketDim.saving; +import java.util.List; + +import StevenDimDoors.mod_pocketDim.Point3D; +import StevenDimDoors.mod_pocketDim.core.DimLink; +import StevenDimDoors.mod_pocketDim.util.Point4D; + public class PackedLinkData { - + public final Point4D source; + public final Point3D parent; + public final PackedLinkTail tail; + public final int orientation; + public final List children; + + public PackedLinkData(Point4D source, Point3D parent, PackedLinkTail tail, int orientation, List children) + { + this.source=source; + this.parent=parent; + this.tail=tail; + this.orientation=orientation; + this.children=children; + } } diff --git a/StevenDimDoors/mod_pocketDim/saving/PackedLinkTail.java b/StevenDimDoors/mod_pocketDim/saving/PackedLinkTail.java index c5a1bb7..64c2466 100644 --- a/StevenDimDoors/mod_pocketDim/saving/PackedLinkTail.java +++ b/StevenDimDoors/mod_pocketDim/saving/PackedLinkTail.java @@ -1,6 +1,16 @@ package StevenDimDoors.mod_pocketDim.saving; +import StevenDimDoors.mod_pocketDim.util.Point4D; + public class PackedLinkTail { - + public final Point4D destination; + public final int linkType; + + public PackedLinkTail(Point4D destination, int linkType) + { + this.destination=destination; + this.linkType=linkType; + } + } diff --git a/StevenDimDoors/mod_pocketDim/util/Point4D.java b/StevenDimDoors/mod_pocketDim/util/Point4D.java index 2b41eb5..2b6c4c0 100644 --- a/StevenDimDoors/mod_pocketDim/util/Point4D.java +++ b/StevenDimDoors/mod_pocketDim/util/Point4D.java @@ -4,9 +4,12 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import StevenDimDoors.mod_pocketDim.Point3D; + public final class Point4D implements Comparable { + private final int x; private final int y; private final int z; @@ -136,6 +139,14 @@ public final class Point4D implements Comparable return equals((Point4D) obj); } + public Point3D toPoint3D() + { + return new Point3D(this.x,this.y,this.z); + } + public int[] toIntArray() + { + return new int[]{x,y,z,dimension}; + } public boolean equals(Point4D other) { if (this == other) diff --git a/StevenDimDoors/mod_pocketDim/util/gson-2.2.4-sources.jar b/StevenDimDoors/mod_pocketDim/util/gson-2.2.4-sources.jar new file mode 100644 index 0000000..30b13f6 Binary files /dev/null and b/StevenDimDoors/mod_pocketDim/util/gson-2.2.4-sources.jar differ diff --git a/StevenDimDoors/mod_pocketDim/util/gson-2.2.4.jar b/StevenDimDoors/mod_pocketDim/util/gson-2.2.4.jar new file mode 100644 index 0000000..9478253 Binary files /dev/null and b/StevenDimDoors/mod_pocketDim/util/gson-2.2.4.jar differ