diff options
Diffstat (limited to 'src/main/java/com/encrox/instanceddungeons/Schematic.java')
-rw-r--r-- | src/main/java/com/encrox/instanceddungeons/Schematic.java | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/main/java/com/encrox/instanceddungeons/Schematic.java b/src/main/java/com/encrox/instanceddungeons/Schematic.java new file mode 100644 index 0000000..c5aaf9e --- /dev/null +++ b/src/main/java/com/encrox/instanceddungeons/Schematic.java @@ -0,0 +1,90 @@ +/*
+ * Dynamic Schematic object
+ *
+ * Currently not supporting entities.
+ */
+
+package com.encrox.instanceddungeons;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.bukkit.Material;
+import org.jnbt.ByteArrayTag;
+import org.jnbt.CompoundTag;
+import org.jnbt.ListTag;
+import org.jnbt.NBTInputStream;
+import org.jnbt.ShortTag;
+import org.jnbt.StringTag;
+import org.jnbt.Tag;
+
+public class Schematic {
+
+ public int width, height, length, readIndex, writeIndex;
+ public String materials;
+ public byte[] blocks, data;
+ public List<Tag> entities, tileEntities;
+ public File file;
+
+ public Schematic(int width, int height, int length, String materials, byte[] blocks, byte[] data, List<Tag> entities, List<Tag> tileEntities) {
+ this.width = width;
+ this.height = height;
+ this.length = length;
+ this.materials = materials;
+ this.blocks = blocks;
+ this.data = data;
+ this.entities = entities;
+ this.tileEntities = tileEntities;
+ readIndex = -1;
+ writeIndex = -1;
+ }
+
+ public Schematic(File file) {
+ this.file = file;
+ CompoundTag schematicTag = null;
+ try {
+ NBTInputStream in = new NBTInputStream(new FileInputStream(file));
+ schematicTag = (CompoundTag)in.readTag();
+ in.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ Map<String,Tag> schematic = schematicTag.getValue();
+ width = ((ShortTag)schematic.get("Width")).getValue();
+ height = ((ShortTag)schematic.get("Height")).getValue();
+ length = ((ShortTag)schematic.get("Length")).getValue();
+ materials = ((StringTag)schematic.get("Materials")).getValue();
+ blocks = ((ByteArrayTag)schematic.get("Blocks")).getValue();
+ data = ((ByteArrayTag)schematic.get("Data")).getValue();
+ entities = ((ListTag)schematic.get("Entities")).getValue();
+ tileEntities = ((ListTag)schematic.get("TileEntities")).getValue();
+ InstancedDungeons.logger.info("blocks: " + blocks.length);
+ InstancedDungeons.logger.info("data: " + data.length);
+ }
+
+ public byte getBlockIdAt(int x, int y, int z) {
+ return blocks[(y*length + z)*width + x];
+ }
+
+ public byte getNextBlock() {
+ return blocks[readIndex++];
+ }
+
+ public void setBlockIdAt(int x, int y, int z, byte blockId) {
+ blocks[(y*length + z)*width + x] = blockId;
+ }
+
+ public void setNextBlock(byte blockId) {
+ blocks[writeIndex++] = blockId;
+ }
+
+ public void write(File file) {
+
+ }
+
+}
|