package com.sk89q.jnbt; import java.io.IOException; import java.util.HashMap; import java.util.Map; import net.jpountz.lz4.LZ4BlockInputStream; public abstract class CompressedCompoundTag extends CompoundTag { private T in; public CompressedCompoundTag(T in) { super(new HashMap<>()); this.in = in; } @Override public Map getValue() { if (in != null) decompress(); return super.getValue(); } public abstract LZ4BlockInputStream adapt(T src) throws IOException; public T getSource() { return in; } private void decompress() { try (NBTInputStream nbtIn = new NBTInputStream(adapt(in))) { in = null; CompoundTag tag = (CompoundTag) nbtIn.readTag(); Map value = tag.getValue(); Map raw = super.getValue(); for (Map.Entry entry : value.entrySet()) { raw.put(entry.getKey(), entry.getValue()); } } catch (IOException e) { throw new RuntimeException(e); } } }