From 9420b8c5ef71dee01d7e19160992c34d5feef154 Mon Sep 17 00:00:00 2001 From: Leonard Kugis Date: Mon, 25 Apr 2022 18:40:22 +0200 Subject: . --- .../com/encrox/instanceddungeons/Schematic.java | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/main/java/com/encrox/instanceddungeons/Schematic.java (limited to 'src/main/java/com/encrox/instanceddungeons/Schematic.java') 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 entities, tileEntities; + public File file; + + public Schematic(int width, int height, int length, String materials, byte[] blocks, byte[] data, List entities, List 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 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) { + + } + +} -- cgit v1.2.1