From b1bce0c85af3fdafd1fad31f322c35870117d29e Mon Sep 17 00:00:00 2001 From: youhavetrouble Date: Wed, 10 May 2023 00:07:51 +0200 Subject: [PATCH] read block palette from schematic file --- .../blockedit/SchematicHandler.java | 15 +++++------ .../blockedit/util/Schematic.java | 25 ++++++++++++++----- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/youhavetrouble/blockedit/SchematicHandler.java b/src/main/java/me/youhavetrouble/blockedit/SchematicHandler.java index 16cfb08..a27a88d 100644 --- a/src/main/java/me/youhavetrouble/blockedit/SchematicHandler.java +++ b/src/main/java/me/youhavetrouble/blockedit/SchematicHandler.java @@ -1,14 +1,9 @@ package me.youhavetrouble.blockedit; import me.youhavetrouble.blockedit.util.Clipboard; -import net.querz.nbt.io.NBTInputStream; -import net.querz.nbt.io.NamedTag; -import net.querz.nbt.tag.CompoundTag; -import net.querz.nbt.tag.Tag; -import org.bukkit.block.BlockState; +import me.youhavetrouble.blockedit.util.Schematic; import java.io.*; -import java.util.zip.GZIPInputStream; public class SchematicHandler { @@ -41,7 +36,13 @@ public class SchematicHandler { */ public Clipboard loadSchematic(String schematicName) { File schematicFile = new File(plugin.getDataFolder(), "schematics/" + schematicName + ".schematic"); - + if (!schematicFile.exists()) { + schematicFile = new File(plugin.getDataFolder(), "schematics/" + schematicName + ".schem"); + } + if (!schematicFile.exists()) { + return null; + } + Schematic schematic = new Schematic(schematicFile); return null; diff --git a/src/main/java/me/youhavetrouble/blockedit/util/Schematic.java b/src/main/java/me/youhavetrouble/blockedit/util/Schematic.java index c3a83d4..c2c1c40 100644 --- a/src/main/java/me/youhavetrouble/blockedit/util/Schematic.java +++ b/src/main/java/me/youhavetrouble/blockedit/util/Schematic.java @@ -1,23 +1,24 @@ package me.youhavetrouble.blockedit.util; +import me.youhavetrouble.blockedit.commands.arguments.BlockDataArgument; import me.youhavetrouble.blockedit.exception.SchematicLoadException; import net.querz.nbt.io.NBTInputStream; import net.querz.nbt.io.NamedTag; import net.querz.nbt.tag.CompoundTag; import net.querz.nbt.tag.Tag; -import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; import java.io.*; +import java.util.List; import java.util.zip.GZIPInputStream; public class Schematic { private final short width, height, length; - private final int[] palette; private final int bitsPerBlock; private final byte[] blocks; - private BlockState[] blockPalette = new BlockState[0]; + private BlockData[] blockPalette = new BlockData[0]; public Schematic(File file) throws SchematicLoadException { try (DataInputStream dis = new DataInputStream(new BufferedInputStream(new GZIPInputStream(new FileInputStream(file))))) { @@ -30,13 +31,21 @@ public class Schematic { this.height = compoundTag.getShort("Height"); this.length = compoundTag.getShort("Length"); - this.palette = compoundTag.getIntArray("Palette"); + CompoundTag paletteMap = compoundTag.getCompoundTag("Palette"); this.blocks = compoundTag.getByteArray("BlockData"); this.bitsPerBlock = blocks.length >> 6; - if (this.palette.length > 0) { - this.blockPalette = new BlockState[this.palette.length]; + if (paletteMap.size() > 0) { + this.blockPalette = new BlockData[paletteMap.size()]; + } + for (String key : paletteMap.keySet()) { + int index = paletteMap.getInt(key); + String[] split = key.split(":"); + if (split.length == 2) { + key = split[1]; + } + this.blockPalette[index] = BlockDataArgument.getBlockData(key); } } catch (IOException e) { @@ -55,4 +64,8 @@ public class Schematic { public short getLength() { return length; } + + public List getBlockPalette() { + return List.of(blockPalette); + } }