diff options
author | Leonard Kugis <Leonard Kugis> | 2016-12-24 05:09:24 +0100 |
---|---|---|
committer | Leonard Kugis <Leonard Kugis> | 2016-12-24 05:09:24 +0100 |
commit | aaf6bd00b1682ce22bab036ccd1d1c280d312a4a (patch) | |
tree | 1e3733c223fd18c9d1bdcc56e7ee402893a7d0c3 /src/main/java/com/encrox/instanceddungeons/Schematic.java |
initial commit
Diffstat (limited to 'src/main/java/com/encrox/instanceddungeons/Schematic.java')
-rw-r--r-- | src/main/java/com/encrox/instanceddungeons/Schematic.java | 86 |
1 files changed, 86 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..c20d83a --- /dev/null +++ b/src/main/java/com/encrox/instanceddungeons/Schematic.java @@ -0,0 +1,86 @@ +/* + * 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 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) { + 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(); + } + + 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) { + + } + +} |