Plex-FAWE/worldedit-core/src/main/java/com/sk89q/jnbt/CompressedCompoundTag.java
2019-07-16 23:44:34 -04:00

42 lines
1.1 KiB
Java

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<T> extends CompoundTag {
private T in;
public CompressedCompoundTag(T in) {
super(new HashMap<>());
this.in = in;
}
@Override
public Map<String, Tag> 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<String, Tag> value = tag.getValue();
Map<String, Tag> raw = super.getValue();
for (Map.Entry<String, Tag> entry : value.entrySet()) {
raw.put(entry.getKey(), entry.getValue());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}