mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-24 16:18:02 +01:00
473 lines
18 KiB
Diff
473 lines
18 KiB
Diff
--- a/net/minecraft/nbt/NbtIo.java
|
|
+++ b/net/minecraft/nbt/NbtIo.java
|
|
@@ -1,3 +1,4 @@
|
|
+// mc-dev import
|
|
package net.minecraft.nbt;
|
|
|
|
import java.io.BufferedOutputStream;
|
|
@@ -10,6 +11,7 @@
|
|
import java.io.OutputStream;
|
|
import java.io.UTFDataFormatException;
|
|
import java.nio.file.Files;
|
|
+import java.nio.file.LinkOption;
|
|
import java.nio.file.OpenOption;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.StandardOpenOption;
|
|
@@ -23,87 +25,270 @@
|
|
import net.minecraft.util.FastBufferedInputStream;
|
|
|
|
public class NbtIo {
|
|
- private static final OpenOption[] SYNC_OUTPUT_OPTIONS = new OpenOption[]{
|
|
- StandardOpenOption.SYNC, StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING
|
|
- };
|
|
|
|
- public static CompoundTag readCompressed(Path path, NbtAccounter nbtAccounter) throws IOException {
|
|
- CompoundTag var3;
|
|
- try (InputStream inputStream = Files.newInputStream(path)) {
|
|
- var3 = readCompressed(inputStream, nbtAccounter);
|
|
+ private static final OpenOption[] SYNC_OUTPUT_OPTIONS = new OpenOption[]{StandardOpenOption.SYNC, StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
|
|
+
|
|
+ public NbtIo() {}
|
|
+
|
|
+ public static CompoundTag readCompressed(Path path, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ InputStream inputstream = Files.newInputStream(path);
|
|
+
|
|
+ CompoundTag nbttagcompound;
|
|
+
|
|
+ try {
|
|
+ nbttagcompound = readCompressed(inputstream, nbtreadlimiter);
|
|
+ } catch (Throwable throwable) {
|
|
+ if (inputstream != null) {
|
|
+ try {
|
|
+ inputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
}
|
|
|
|
- return var3;
|
|
+ if (inputstream != null) {
|
|
+ inputstream.close();
|
|
+ }
|
|
+
|
|
+ return nbttagcompound;
|
|
}
|
|
|
|
private static DataInputStream createDecompressorStream(InputStream zippedStream) throws IOException {
|
|
return new DataInputStream(new FastBufferedInputStream(new GZIPInputStream(zippedStream)));
|
|
}
|
|
|
|
- private static DataOutputStream createCompressorStream(OutputStream outputStream) throws IOException {
|
|
- return new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(outputStream)));
|
|
+ private static DataOutputStream createCompressorStream(OutputStream outputstream) throws IOException {
|
|
+ return new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(outputstream)));
|
|
}
|
|
|
|
- public static CompoundTag readCompressed(InputStream inputStream, NbtAccounter nbtAccounter) throws IOException {
|
|
- CompoundTag var3;
|
|
- try (DataInputStream dataInputStream = createDecompressorStream(inputStream)) {
|
|
- var3 = read(dataInputStream, nbtAccounter);
|
|
+ public static CompoundTag readCompressed(InputStream inputstream, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ DataInputStream datainputstream = createDecompressorStream(inputstream);
|
|
+
|
|
+ CompoundTag nbttagcompound;
|
|
+
|
|
+ try {
|
|
+ nbttagcompound = read(datainputstream, nbtreadlimiter);
|
|
+ } catch (Throwable throwable) {
|
|
+ if (datainputstream != null) {
|
|
+ try {
|
|
+ datainputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
}
|
|
|
|
- return var3;
|
|
+ if (datainputstream != null) {
|
|
+ datainputstream.close();
|
|
+ }
|
|
+
|
|
+ return nbttagcompound;
|
|
}
|
|
|
|
- public static void parseCompressed(Path path, StreamTagVisitor streamTagVisitor, NbtAccounter nbtAccounter) throws IOException {
|
|
- try (InputStream inputStream = Files.newInputStream(path)) {
|
|
- parseCompressed(inputStream, streamTagVisitor, nbtAccounter);
|
|
+ public static void parseCompressed(Path path, StreamTagVisitor streamtagvisitor, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ InputStream inputstream = Files.newInputStream(path);
|
|
+
|
|
+ try {
|
|
+ parseCompressed(inputstream, streamtagvisitor, nbtreadlimiter);
|
|
+ } catch (Throwable throwable) {
|
|
+ if (inputstream != null) {
|
|
+ try {
|
|
+ inputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
}
|
|
+
|
|
+ if (inputstream != null) {
|
|
+ inputstream.close();
|
|
+ }
|
|
+
|
|
}
|
|
|
|
- public static void parseCompressed(InputStream inputStream, StreamTagVisitor streamTagVisitor, NbtAccounter nbtAccounter) throws IOException {
|
|
- try (DataInputStream dataInputStream = createDecompressorStream(inputStream)) {
|
|
- parse(dataInputStream, streamTagVisitor, nbtAccounter);
|
|
+ public static void parseCompressed(InputStream inputstream, StreamTagVisitor streamtagvisitor, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ DataInputStream datainputstream = createDecompressorStream(inputstream);
|
|
+
|
|
+ try {
|
|
+ parse(datainputstream, streamtagvisitor, nbtreadlimiter);
|
|
+ } catch (Throwable throwable) {
|
|
+ if (datainputstream != null) {
|
|
+ try {
|
|
+ datainputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
}
|
|
+
|
|
+ if (datainputstream != null) {
|
|
+ datainputstream.close();
|
|
+ }
|
|
+
|
|
}
|
|
|
|
- public static void writeCompressed(CompoundTag compoundTag, Path path) throws IOException {
|
|
- try (
|
|
- OutputStream outputStream = Files.newOutputStream(path, SYNC_OUTPUT_OPTIONS);
|
|
- OutputStream outputStream1 = new BufferedOutputStream(outputStream);
|
|
- ) {
|
|
- writeCompressed(compoundTag, outputStream1);
|
|
+ public static void writeCompressed(CompoundTag nbttagcompound, Path path) throws IOException {
|
|
+ OutputStream outputstream = Files.newOutputStream(path, NbtIo.SYNC_OUTPUT_OPTIONS);
|
|
+
|
|
+ try {
|
|
+ BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(outputstream);
|
|
+
|
|
+ try {
|
|
+ writeCompressed(nbttagcompound, (OutputStream) bufferedoutputstream);
|
|
+ } catch (Throwable throwable) {
|
|
+ try {
|
|
+ bufferedoutputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
+ }
|
|
+
|
|
+ bufferedoutputstream.close();
|
|
+ } catch (Throwable throwable2) {
|
|
+ if (outputstream != null) {
|
|
+ try {
|
|
+ outputstream.close();
|
|
+ } catch (Throwable throwable3) {
|
|
+ throwable2.addSuppressed(throwable3);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable2;
|
|
}
|
|
+
|
|
+ if (outputstream != null) {
|
|
+ outputstream.close();
|
|
+ }
|
|
+
|
|
}
|
|
|
|
public static void writeCompressed(CompoundTag compoundTag, OutputStream outputStream) throws IOException {
|
|
- try (DataOutputStream dataOutputStream = createCompressorStream(outputStream)) {
|
|
- write(compoundTag, dataOutputStream);
|
|
+ DataOutputStream dataoutputstream = createCompressorStream(outputStream);
|
|
+
|
|
+ try {
|
|
+ write(compoundTag, (DataOutput) dataoutputstream);
|
|
+ } catch (Throwable throwable) {
|
|
+ if (dataoutputstream != null) {
|
|
+ try {
|
|
+ dataoutputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
}
|
|
+
|
|
+ if (dataoutputstream != null) {
|
|
+ dataoutputstream.close();
|
|
+ }
|
|
+
|
|
}
|
|
|
|
- public static void write(CompoundTag compoundTag, Path path) throws IOException {
|
|
- try (
|
|
- OutputStream outputStream = Files.newOutputStream(path, SYNC_OUTPUT_OPTIONS);
|
|
- OutputStream outputStream1 = new BufferedOutputStream(outputStream);
|
|
- DataOutputStream dataOutputStream = new DataOutputStream(outputStream1);
|
|
- ) {
|
|
- write(compoundTag, dataOutputStream);
|
|
+ public static void write(CompoundTag nbttagcompound, Path path) throws IOException {
|
|
+ OutputStream outputstream = Files.newOutputStream(path, NbtIo.SYNC_OUTPUT_OPTIONS);
|
|
+
|
|
+ try {
|
|
+ BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(outputstream);
|
|
+
|
|
+ try {
|
|
+ DataOutputStream dataoutputstream = new DataOutputStream(bufferedoutputstream);
|
|
+
|
|
+ try {
|
|
+ write(nbttagcompound, (DataOutput) dataoutputstream);
|
|
+ } catch (Throwable throwable) {
|
|
+ try {
|
|
+ dataoutputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
+ }
|
|
+
|
|
+ dataoutputstream.close();
|
|
+ } catch (Throwable throwable2) {
|
|
+ try {
|
|
+ bufferedoutputstream.close();
|
|
+ } catch (Throwable throwable3) {
|
|
+ throwable2.addSuppressed(throwable3);
|
|
+ }
|
|
+
|
|
+ throw throwable2;
|
|
+ }
|
|
+
|
|
+ bufferedoutputstream.close();
|
|
+ } catch (Throwable throwable4) {
|
|
+ if (outputstream != null) {
|
|
+ try {
|
|
+ outputstream.close();
|
|
+ } catch (Throwable throwable5) {
|
|
+ throwable4.addSuppressed(throwable5);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable4;
|
|
}
|
|
+
|
|
+ if (outputstream != null) {
|
|
+ outputstream.close();
|
|
+ }
|
|
+
|
|
}
|
|
|
|
@Nullable
|
|
public static CompoundTag read(Path path) throws IOException {
|
|
- if (!Files.exists(path)) {
|
|
+ if (!Files.exists(path, new LinkOption[0])) {
|
|
return null;
|
|
} else {
|
|
- CompoundTag var3;
|
|
- try (
|
|
- InputStream inputStream = Files.newInputStream(path);
|
|
- DataInputStream dataInputStream = new DataInputStream(inputStream);
|
|
- ) {
|
|
- var3 = read(dataInputStream, NbtAccounter.unlimitedHeap());
|
|
+ InputStream inputstream = Files.newInputStream(path);
|
|
+
|
|
+ CompoundTag nbttagcompound;
|
|
+
|
|
+ try {
|
|
+ DataInputStream datainputstream = new DataInputStream(inputstream);
|
|
+
|
|
+ try {
|
|
+ nbttagcompound = read(datainputstream, NbtAccounter.unlimitedHeap());
|
|
+ } catch (Throwable throwable) {
|
|
+ try {
|
|
+ datainputstream.close();
|
|
+ } catch (Throwable throwable1) {
|
|
+ throwable.addSuppressed(throwable1);
|
|
+ }
|
|
+
|
|
+ throw throwable;
|
|
+ }
|
|
+
|
|
+ datainputstream.close();
|
|
+ } catch (Throwable throwable2) {
|
|
+ if (inputstream != null) {
|
|
+ try {
|
|
+ inputstream.close();
|
|
+ } catch (Throwable throwable3) {
|
|
+ throwable2.addSuppressed(throwable3);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ throw throwable2;
|
|
}
|
|
|
|
- return var3;
|
|
+ if (inputstream != null) {
|
|
+ inputstream.close();
|
|
+ }
|
|
+
|
|
+ return nbttagcompound;
|
|
}
|
|
}
|
|
|
|
@@ -112,9 +297,10 @@
|
|
}
|
|
|
|
public static CompoundTag read(DataInput input, NbtAccounter accounter) throws IOException {
|
|
- Tag unnamedTag = readUnnamedTag(input, accounter);
|
|
- if (unnamedTag instanceof CompoundTag) {
|
|
- return (CompoundTag)unnamedTag;
|
|
+ Tag nbtbase = readUnnamedTag(input, accounter);
|
|
+
|
|
+ if (nbtbase instanceof CompoundTag) {
|
|
+ return (CompoundTag) nbtbase;
|
|
} else {
|
|
throw new IOException("Root tag must be a named compound tag");
|
|
}
|
|
@@ -124,37 +310,41 @@
|
|
writeUnnamedTagWithFallback(compoundTag, output);
|
|
}
|
|
|
|
- public static void parse(DataInput dataInput, StreamTagVisitor streamTagVisitor, NbtAccounter nbtAccounter) throws IOException {
|
|
- TagType<?> type = TagTypes.getType(dataInput.readByte());
|
|
- if (type == EndTag.TYPE) {
|
|
- if (streamTagVisitor.visitRootEntry(EndTag.TYPE) == StreamTagVisitor.ValueResult.CONTINUE) {
|
|
- streamTagVisitor.visitEnd();
|
|
+ public static void parse(DataInput datainput, StreamTagVisitor streamtagvisitor, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ TagType<?> nbttagtype = TagTypes.getType(datainput.readByte());
|
|
+
|
|
+ if (nbttagtype == EndTag.TYPE) {
|
|
+ if (streamtagvisitor.visitRootEntry(EndTag.TYPE) == StreamTagVisitor.b.CONTINUE) {
|
|
+ streamtagvisitor.visitEnd();
|
|
}
|
|
+
|
|
} else {
|
|
- switch (streamTagVisitor.visitRootEntry(type)) {
|
|
+ switch (streamtagvisitor.visitRootEntry(nbttagtype)) {
|
|
case HALT:
|
|
default:
|
|
break;
|
|
case BREAK:
|
|
- StringTag.skipString(dataInput);
|
|
- type.skip(dataInput, nbtAccounter);
|
|
+ StringTag.skipString(datainput);
|
|
+ nbttagtype.skip(datainput, nbtreadlimiter);
|
|
break;
|
|
case CONTINUE:
|
|
- StringTag.skipString(dataInput);
|
|
- type.parse(dataInput, streamTagVisitor, nbtAccounter);
|
|
+ StringTag.skipString(datainput);
|
|
+ nbttagtype.parse(datainput, streamtagvisitor, nbtreadlimiter);
|
|
}
|
|
+
|
|
}
|
|
}
|
|
|
|
- public static Tag readAnyTag(DataInput dataInput, NbtAccounter nbtAccounter) throws IOException {
|
|
- byte _byte = dataInput.readByte();
|
|
- return (Tag)(_byte == 0 ? EndTag.INSTANCE : readTagSafe(dataInput, nbtAccounter, _byte));
|
|
+ public static Tag readAnyTag(DataInput datainput, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ byte b0 = datainput.readByte();
|
|
+
|
|
+ return (Tag) (b0 == 0 ? EndTag.INSTANCE : readTagSafe(datainput, nbtreadlimiter, b0));
|
|
}
|
|
|
|
- public static void writeAnyTag(Tag tag, DataOutput dataOutput) throws IOException {
|
|
- dataOutput.writeByte(tag.getId());
|
|
- if (tag.getId() != 0) {
|
|
- tag.write(dataOutput);
|
|
+ public static void writeAnyTag(Tag nbtbase, DataOutput dataoutput) throws IOException {
|
|
+ dataoutput.writeByte(nbtbase.getId());
|
|
+ if (nbtbase.getId() != 0) {
|
|
+ nbtbase.write(dataoutput);
|
|
}
|
|
}
|
|
|
|
@@ -166,44 +356,48 @@
|
|
}
|
|
}
|
|
|
|
- public static void writeUnnamedTagWithFallback(Tag tag, DataOutput dataOutput) throws IOException {
|
|
- writeUnnamedTag(tag, new NbtIo.StringFallbackDataOutput(dataOutput));
|
|
+ public static void writeUnnamedTagWithFallback(Tag nbtbase, DataOutput dataoutput) throws IOException {
|
|
+ writeUnnamedTag(nbtbase, new NbtIo.a(dataoutput));
|
|
}
|
|
|
|
- private static Tag readUnnamedTag(DataInput dataInput, NbtAccounter nbtAccounter) throws IOException {
|
|
- byte _byte = dataInput.readByte();
|
|
- if (_byte == 0) {
|
|
+ private static Tag readUnnamedTag(DataInput datainput, NbtAccounter nbtreadlimiter) throws IOException {
|
|
+ byte b0 = datainput.readByte();
|
|
+
|
|
+ if (b0 == 0) {
|
|
return EndTag.INSTANCE;
|
|
} else {
|
|
- StringTag.skipString(dataInput);
|
|
- return readTagSafe(dataInput, nbtAccounter, _byte);
|
|
+ StringTag.skipString(datainput);
|
|
+ return readTagSafe(datainput, nbtreadlimiter, b0);
|
|
}
|
|
}
|
|
|
|
- private static Tag readTagSafe(DataInput dataInput, NbtAccounter nbtAccounter, byte b) {
|
|
+ private static Tag readTagSafe(DataInput datainput, NbtAccounter nbtreadlimiter, byte b0) {
|
|
try {
|
|
- return TagTypes.getType(b).load(dataInput, nbtAccounter);
|
|
- } catch (IOException var6) {
|
|
- CrashReport crashReport = CrashReport.forThrowable(var6, "Loading NBT data");
|
|
- CrashReportCategory crashReportCategory = crashReport.addCategory("NBT Tag");
|
|
- crashReportCategory.setDetail("Tag type", b);
|
|
- throw new ReportedNbtException(crashReport);
|
|
+ return TagTypes.getType(b0).load(datainput, nbtreadlimiter);
|
|
+ } catch (IOException ioexception) {
|
|
+ CrashReport crashreport = CrashReport.forThrowable(ioexception, "Loading NBT data");
|
|
+ CrashReportCategory crashreportsystemdetails = crashreport.addCategory("NBT Tag");
|
|
+
|
|
+ crashreportsystemdetails.setDetail("Tag type", (Object) b0);
|
|
+ throw new ReportedNbtException(crashreport);
|
|
}
|
|
}
|
|
|
|
- public static class StringFallbackDataOutput extends DelegateDataOutput {
|
|
- public StringFallbackDataOutput(DataOutput dataOutput) {
|
|
- super(dataOutput);
|
|
+ public static class a extends DelegateDataOutput {
|
|
+
|
|
+ public a(DataOutput dataoutput) {
|
|
+ super(dataoutput);
|
|
}
|
|
|
|
@Override
|
|
- public void writeUTF(String string) throws IOException {
|
|
+ public void writeUTF(String s) throws IOException {
|
|
try {
|
|
- super.writeUTF(string);
|
|
- } catch (UTFDataFormatException var3) {
|
|
- Util.logAndPauseIfInIde("Failed to write NBT String", var3);
|
|
+ super.writeUTF(s);
|
|
+ } catch (UTFDataFormatException utfdataformatexception) {
|
|
+ Util.logAndPauseIfInIde("Failed to write NBT String", utfdataformatexception);
|
|
super.writeUTF("");
|
|
}
|
|
+
|
|
}
|
|
}
|
|
}
|