From 25a6cdc502f2800be69249c5e7f2863b67039564 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 5 Jun 2021 13:04:23 +0200 Subject: [PATCH] Fix RenderSettings (de)serialization with Java 16 (fixes #520) Turns out we were relying on the implementation detail of the File class, and Java 16 ensures we cannot do that. --- .../replaymod/core/utils/FileTypeAdapter.java | 30 +++++++++++++++++++ .../com/replaymod/render/RenderSettings.java | 3 ++ 2 files changed, 33 insertions(+) create mode 100644 src/main/java/com/replaymod/core/utils/FileTypeAdapter.java diff --git a/src/main/java/com/replaymod/core/utils/FileTypeAdapter.java b/src/main/java/com/replaymod/core/utils/FileTypeAdapter.java new file mode 100644 index 00000000..78d76f90 --- /dev/null +++ b/src/main/java/com/replaymod/core/utils/FileTypeAdapter.java @@ -0,0 +1,30 @@ +package com.replaymod.core.utils; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +import java.io.File; +import java.io.IOException; + +public class FileTypeAdapter extends TypeAdapter { + @Override + public void write(JsonWriter out, File value) throws IOException { + out.value(value.getPath()); + } + + @Override + public File read(JsonReader in) throws IOException { + String path; + if (in.peek() == JsonToken.BEGIN_OBJECT) { + in.beginObject(); + in.nextName(); + path = in.nextString(); + in.endObject(); + } else { + path = in.nextString(); + } + return new File(path); + } +} diff --git a/src/main/java/com/replaymod/render/RenderSettings.java b/src/main/java/com/replaymod/render/RenderSettings.java index bfc8783f..0eea5951 100644 --- a/src/main/java/com/replaymod/render/RenderSettings.java +++ b/src/main/java/com/replaymod/render/RenderSettings.java @@ -1,6 +1,8 @@ package com.replaymod.render; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.SerializedName; +import com.replaymod.core.utils.FileTypeAdapter; import com.replaymod.core.versions.MCVer; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; import net.minecraft.client.resource.language.I18n; @@ -146,6 +148,7 @@ public class RenderSettings { private final int videoHeight; private final int framesPerSecond; private final int bitRate; + @JsonAdapter(FileTypeAdapter.class) private final File outputFile; private final boolean renderNameTags;