package org.pepsoft.worldpainter.tools;
import org.pepsoft.worldpainter.layers.Bo2Layer;
import org.pepsoft.worldpainter.layers.bo2.Bo2Object;
import org.pepsoft.worldpainter.layers.bo2.Bo3Object;
import org.pepsoft.worldpainter.layers.bo2.Schematic;
import org.pepsoft.worldpainter.objects.WPObject;
import javax.vecmath.Point3i;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.zip.GZIPInputStream;
/**
* Created by Pepijn Schmitz on 02-09-15.
*/
public class DumpObject {
public static void main(String[] args) throws IOException, ClassNotFoundException {
String filename = args[0];
File file = new File(filename);
int p = filename.lastIndexOf('.');
Object object;
switch (filename.substring(p + 1).toLowerCase()) {
case "bo2":
object = Bo2Object.load(file);
break;
case "bo3":
object = Bo3Object.load(file);
break;
case "schematic":
object = Schematic.load(file);
break;
case "layer":
try (ObjectInputStream in = new ObjectInputStream(new GZIPInputStream(new FileInputStream(file)))) {
object = in.readObject();
}
break;
default:
throw new IllegalArgumentException("File not supported");
}
dump(object);
}
private static void dump(Object object) {
if (object instanceof Bo2Layer) {
((Bo2Layer) object).getObjectProvider().getAllObjects().forEach(DumpObject::dump);
} else if (object instanceof WPObject) {
WPObject wpObject = (WPObject) object;
System.out.println("Name: " + wpObject.getName());
Point3i dim = wpObject.getDimensions();
System.out.println(" Dimensions: " + dim);
System.out.println(" Offset: " + wpObject.getOffset());
if (wpObject.getAttributes() != null) {
System.out.println(" Attributes:");
wpObject.getAttributes().forEach((key, value) -> System.out.println(" " + key + ": " + value));
}
if (wpObject.getEntities() != null) {
System.out.println(" Entities:");
wpObject.getEntities().forEach(entity -> System.out.println(" " + entity.getId() + " @ " + entity.getPos()[0] + "," + entity.getPos()[2] + "," + entity.getPos()[1]));
}
if (wpObject.getTileEntities() != null) {
System.out.println(" Tile entities:");
wpObject.getTileEntities().forEach(entity -> System.out.println(" " + entity.getId() + " @ " + entity.getY() + "," + entity.getZ() + "," + entity.getY()));
}
System.out.println(" Blocks:");
int blockCount = 0;
for (int z = 0; z < dim.z; z++) {
for (int x = 0; x < dim.x; x++) {
for (int y = 0; y < dim.y; y++) {
if (wpObject.getMask(x, y, z)) {
blockCount++;
if (blockCount <= 100) {
System.out.println(" " + x + "," + y + "," + z + ": " + wpObject.getMaterial(x, y, z));
}
}
}
}
}
if (blockCount > 100) {
System.out.println(" ... and " + (blockCount - 100) + " more");
}
} else {
throw new IllegalArgumentException("Unrecognized object type " + object.getClass());
}
}
}