summaryrefslogtreecommitdiff
path: root/src/main/java/com/encrox/zombie/Schematic.java
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2022-04-25 18:50:36 +0200
committerLeonard Kugis <leonard@kug.is>2022-04-25 18:50:36 +0200
commit9e2ddeb55321b09086a5a27254197d783847e6e3 (patch)
tree620e4a7b326df2a77fff51aff390e0a6bef43631 /src/main/java/com/encrox/zombie/Schematic.java
Initial commitHEADmaster
Diffstat (limited to 'src/main/java/com/encrox/zombie/Schematic.java')
-rwxr-xr-xsrc/main/java/com/encrox/zombie/Schematic.java117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/main/java/com/encrox/zombie/Schematic.java b/src/main/java/com/encrox/zombie/Schematic.java
new file mode 100755
index 0000000..16d4f5b
--- /dev/null
+++ b/src/main/java/com/encrox/zombie/Schematic.java
@@ -0,0 +1,117 @@
+/*
+ * Dynamic Schematic object
+ *
+ * Currently not supporting entities.
+ */
+
+package com.encrox.zombie;
+
+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, dataReadIndex, dataWriteIndex, blockReadIndex, blockWriteIndex;
+ 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;
+ blockReadIndex = 0;
+ blockWriteIndex = 0;
+ dataReadIndex = 0;
+ dataWriteIndex = 0;
+ }
+
+ 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();
+ blockReadIndex = 0;
+ blockWriteIndex = 0;
+ dataReadIndex = 0;
+ dataWriteIndex = 0;
+ }
+
+ public byte getBlockIdAt(int x, int y, int z) {
+ return blocks[(y*length + z)*width + x];
+ }
+
+ public byte getNextBlock() {
+ return blocks[blockReadIndex++];
+ }
+
+ public byte getDataAt(int x, int y, int z) {
+ return data[(y*length + z)*width + x];
+ }
+
+ public byte getNextData() {
+ return data[dataReadIndex++];
+ }
+
+ public void setBlockIdAt(int x, int y, int z, byte blockId) {
+ blocks[(y*length + z)*width + x] = blockId;
+ }
+
+ public void setNextBlock(byte blockId) {
+ blocks[blockWriteIndex++] = blockId;
+ }
+
+ public void setDataAt(int x, int y, int z, byte newData) {
+ data[(y*length + z)*width + x] = newData;
+ }
+
+ public void setNextData(byte newData) {
+ data[dataWriteIndex++] = newData;
+ }
+
+ public void write(File file) {
+
+ }
+
+ public void reset() {
+ blockReadIndex = 0;
+ blockWriteIndex = 0;
+ dataReadIndex = 0;
+ dataWriteIndex = 0;
+ }
+
+}