Add ReplayStudio as subproject
Move large parts of pathing to ReplayStudio Upgrade to Java 8
This commit is contained in:
@@ -1,249 +0,0 @@
|
||||
package eu.crushedpixel.replaymod.gui;
|
||||
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import eu.crushedpixel.replaymod.gui.elements.GuiEntryList;
|
||||
import eu.crushedpixel.replaymod.gui.elements.listeners.SelectionListener;
|
||||
import eu.crushedpixel.replaymod.holders.KeyframeSet;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import org.apache.commons.lang3.time.DurationFormatUtils;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class GuiKeyframeRepository extends GuiScreen {
|
||||
|
||||
private boolean initialized = false;
|
||||
|
||||
private String screenTitle;
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
private GuiEntryList<KeyframeSet> keyframeSetList;
|
||||
private KeyframeSet[] keyframeRepository;
|
||||
|
||||
private KeyframeSet currentKeyframeSet = null;
|
||||
|
||||
private GuiTextField nameInput;
|
||||
private GuiButton removeButton, loadButton, saveButton;
|
||||
|
||||
private String message = null;
|
||||
|
||||
private int currentSetTimeKeyframeCount, currentSetPositionKeyframeCount, currentSetDuration;
|
||||
|
||||
private final List<KeyframeSet> initialKeyframeSets;
|
||||
|
||||
public GuiKeyframeRepository(KeyframeSet[] keyframeRepository) {
|
||||
this.keyframeRepository = keyframeRepository;
|
||||
this.initialKeyframeSets = new ArrayList<KeyframeSet>(Arrays.asList(keyframeRepository));
|
||||
ReplayMod.replaySender.setReplaySpeed(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
Keyboard.enableRepeatEvents(true);
|
||||
|
||||
int h = (int)Math.floor(((double)this.height-(45+20+15))/14);
|
||||
|
||||
if(!initialized) {
|
||||
screenTitle = I18n.format("replaymod.gui.keyframerepository.title");
|
||||
|
||||
keyframeSetList = new GuiEntryList<KeyframeSet>(mc.fontRendererObj,
|
||||
0, 45, 0, h);
|
||||
|
||||
for(KeyframeSet set : keyframeRepository)
|
||||
keyframeSetList.addElement(set);
|
||||
|
||||
keyframeSetList.setSelectionIndex(-1);
|
||||
|
||||
keyframeSetList.setEmptyMessage(I18n.format("replaymod.gui.keyframerepository.noentries"));
|
||||
|
||||
keyframeSetList.addSelectionListener(new SelectionListener() {
|
||||
@Override
|
||||
public void onSelectionChanged(int selectionIndex) {
|
||||
removeButton.enabled = selectionIndex >= 0;
|
||||
loadButton.enabled = selectionIndex >= 0;
|
||||
nameInput.setEnabled(selectionIndex >= 0);
|
||||
|
||||
if(selectionIndex >= 0) {
|
||||
currentKeyframeSet = keyframeSetList.getElement(selectionIndex);
|
||||
nameInput.setText(currentKeyframeSet.getName());
|
||||
|
||||
currentSetPositionKeyframeCount = currentKeyframeSet.getPositionKeyframeCount();
|
||||
currentSetTimeKeyframeCount = currentKeyframeSet.getTimeKeyframeCount();
|
||||
currentSetDuration = currentKeyframeSet.getPathDuration();
|
||||
} else {
|
||||
nameInput.setText("");
|
||||
currentKeyframeSet = null;
|
||||
}
|
||||
|
||||
message = null;
|
||||
}
|
||||
});
|
||||
|
||||
nameInput = new GuiTextField(GuiConstants.KEYFRAME_REPOSTORY_NAME_INPUT, mc.fontRendererObj,
|
||||
0, 45, 0, 20);
|
||||
nameInput.setEnabled(false);
|
||||
|
||||
removeButton = new GuiButton(GuiConstants.KEYFRAME_REPOSITORY_REMOVE_BUTTON, 0, 75,
|
||||
I18n.format("replaymod.gui.remove"));
|
||||
loadButton = new GuiButton(GuiConstants.KEYFRAME_REPOSITORY_LOAD_BUTTON, 0, 75,
|
||||
I18n.format("replaymod.gui.load"));
|
||||
|
||||
saveButton = new GuiButton(GuiConstants.KEYFRAME_REPOSITORY_ADD_BUTTON, 30 + (this.width / 2),
|
||||
keyframeSetList.yPosition+keyframeSetList.height-20,
|
||||
I18n.format("replaymod.gui.keyframerepository.savecurrent"));
|
||||
|
||||
removeButton.enabled = loadButton.enabled = false;
|
||||
|
||||
}
|
||||
|
||||
keyframeSetList.width = nameInput.width = saveButton.width = 150;
|
||||
|
||||
keyframeSetList.xPosition = width / 2 - keyframeSetList.width - 5;
|
||||
keyframeSetList.setVisibleElements(h);
|
||||
|
||||
removeButton.width = loadButton.width = 73;
|
||||
|
||||
nameInput.xPosition = saveButton.xPosition = width / 2 + 5;
|
||||
loadButton.xPosition = width / 2 + 5;
|
||||
removeButton.xPosition = width / 2 + 5 + loadButton.width + 3 + 4;
|
||||
|
||||
saveButton.yPosition = keyframeSetList.yPosition+keyframeSetList.height-20;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<GuiButton> buttonList = this.buttonList;
|
||||
|
||||
buttonList.add(removeButton);
|
||||
buttonList.add(loadButton);
|
||||
buttonList.add(saveButton);
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton button) {
|
||||
// TODO
|
||||
// if(!button.enabled) return;
|
||||
// switch(button.id) {
|
||||
// case GuiConstants.KEYFRAME_REPOSITORY_ADD_BUTTON:
|
||||
// List<Keyframe> kfs = new ArrayList<Keyframe>(ReplayHandler.getAllKeyframes());
|
||||
//
|
||||
// Keyframe[] keyframes = kfs.toArray(new Keyframe[ReplayHandler.getAllKeyframes().size()]);
|
||||
// KeyframeSet newSet = new KeyframeSet(I18n.format("replaymod.gui.keyframerepository.preset.defaultname"), keyframes, ReplayHandler.getCustomImageObjects());
|
||||
//
|
||||
// try {
|
||||
// CameraPathValidator.validateCameraPath(ReplayHandler.getPositionKeyframes(), ReplayHandler.getTimeKeyframes());
|
||||
// } catch(CameraPathValidator.InvalidCameraPathException e) {
|
||||
// message = e.getLocalizedMessage();
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// if(keyframeSetList.getCopyOfElements().contains(newSet)) {
|
||||
// message = I18n.format("replaymod.gui.keyframerepository.duplicate");
|
||||
// break;
|
||||
// }
|
||||
// message = null;
|
||||
//
|
||||
// keyframeSetList.addElement(newSet);
|
||||
// keyframeSetList.setSelectionIndex(keyframeSetList.getEntryCount()-1);
|
||||
// break;
|
||||
// case GuiConstants.KEYFRAME_REPOSITORY_REMOVE_BUTTON:
|
||||
// keyframeSetList.removeElement(keyframeSetList.getSelectionIndex());
|
||||
// break;
|
||||
// case GuiConstants.KEYFRAME_REPOSITORY_LOAD_BUTTON:
|
||||
// ReplayHandler.useKeyframePreset(keyframeSetList.getElement(keyframeSetList.getSelectionIndex()));
|
||||
// saveOnQuit();
|
||||
// mc.displayGuiScreen(null);
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
|
||||
this.drawCenteredString(fontRendererObj, screenTitle, this.width / 2, 5, Color.WHITE.getRGB());
|
||||
|
||||
int leftBorder = 10;
|
||||
int topBorder = 20;
|
||||
|
||||
drawGradientRect(leftBorder, topBorder, width - leftBorder, this.height - 10, -1072689136, -804253680);
|
||||
|
||||
this.drawCenteredString(fontRendererObj, I18n.format("replaymod.gui.keyframerepository.presets"), keyframeSetList.xPosition + (keyframeSetList.width/2), 30, Color.WHITE.getRGB());
|
||||
|
||||
keyframeSetList.drawTextBox();
|
||||
|
||||
nameInput.drawTextBox();
|
||||
|
||||
KeyframeSet currentSet = null;
|
||||
|
||||
if(keyframeSetList.getSelectionIndex() >= 0) {
|
||||
currentSet = keyframeSetList.getElement(keyframeSetList.getSelectionIndex());
|
||||
}
|
||||
|
||||
if(currentSet != null) {
|
||||
this.drawString(fontRendererObj, I18n.format("replaymod.gui.keyframerepository.positionkeyframes") + ": " +currentSetPositionKeyframeCount,
|
||||
loadButton.xPosition+2, removeButton.yPosition + 30, Color.WHITE.getRGB());
|
||||
|
||||
this.drawString(fontRendererObj, I18n.format("replaymod.gui.keyframerepository.timekeyframes") + ": " +currentSetTimeKeyframeCount,
|
||||
loadButton.xPosition+2, removeButton.yPosition + 50, Color.WHITE.getRGB());
|
||||
|
||||
this.drawString(fontRendererObj, I18n.format("replaymod.gui.duration")+": "+ DurationFormatUtils.formatDurationHMS(currentSetDuration),
|
||||
loadButton.xPosition+2, removeButton.yPosition + 70, Color.WHITE.getRGB());
|
||||
|
||||
this.drawString(fontRendererObj, I18n.format("replaymod.gui.objects")+": "+currentSet.getCustomObjectCount(),
|
||||
loadButton.xPosition+2, removeButton.yPosition + 90, Color.WHITE.getRGB());
|
||||
}
|
||||
|
||||
if(message != null) {
|
||||
this.drawCenteredString(fontRendererObj, message, this.width/2, this.height-25, Color.RED.getRGB());
|
||||
}
|
||||
|
||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
|
||||
super.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
keyframeSetList.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
nameInput.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateScreen() {
|
||||
nameInput.updateCursorCounter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(char typedChar, int keyCode) throws IOException {
|
||||
nameInput.textboxKeyTyped(typedChar, keyCode);
|
||||
if(keyCode == Keyboard.KEY_ESCAPE) {
|
||||
saveOnQuit();
|
||||
super.keyTyped(typedChar, keyCode);
|
||||
}
|
||||
if(currentKeyframeSet != null && !currentKeyframeSet.getName().equals(nameInput.getText().trim())) {
|
||||
currentKeyframeSet.setName(nameInput.getText().trim());
|
||||
}
|
||||
|
||||
super.keyTyped(typedChar, keyCode);
|
||||
}
|
||||
|
||||
private void saveOnQuit() {
|
||||
ArrayList<KeyframeSet> copy = new ArrayList<KeyframeSet>(keyframeSetList.getCopyOfElements());
|
||||
if(initialKeyframeSets.equals(copy)) return;
|
||||
|
||||
this.keyframeRepository = copy.toArray(new KeyframeSet[copy.size()]);
|
||||
// TODO
|
||||
// ReplayHandler.setKeyframeRepository(keyframeRepository, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuiClosed() {
|
||||
Keyboard.enableRepeatEvents(false);
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
package eu.crushedpixel.replaymod.holders;
|
||||
|
||||
import eu.crushedpixel.replaymod.assets.CustomImageObject;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class KeyframeSet implements GuiEntryListEntry {
|
||||
private String name;
|
||||
private Keyframe<AdvancedPosition>[] positionKeyframes;
|
||||
private Keyframe<TimestampValue>[] timeKeyframes;
|
||||
private CustomImageObject[] customObjects = new CustomImageObject[0];
|
||||
|
||||
public KeyframeSet(String name, Keyframe[] keyframes, List<CustomImageObject> customObjectRepository) {
|
||||
this.name = name;
|
||||
setCustomObjects(customObjectRepository.toArray(new CustomImageObject[customObjectRepository.size()]));
|
||||
setKeyframes(keyframes);
|
||||
}
|
||||
|
||||
public KeyframeSet(String name, Keyframe[] keyframes, CustomImageObject[] customObjects) {
|
||||
this.name = name;
|
||||
setCustomObjects(customObjects);
|
||||
setKeyframes(keyframes);
|
||||
}
|
||||
|
||||
public void setCustomObjects(CustomImageObject[] customObjects) {
|
||||
this.customObjects = new CustomImageObject[customObjects.length];
|
||||
|
||||
int i = 0;
|
||||
for(CustomImageObject object : customObjects) {
|
||||
try {
|
||||
this.customObjects[i] = object.copy();
|
||||
} catch(IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setKeyframes(Keyframe[] keyframes) {
|
||||
List<Keyframe<AdvancedPosition>> posKFList = new ArrayList<Keyframe<AdvancedPosition>>();
|
||||
List<Keyframe<TimestampValue>> timeKFList = new ArrayList<Keyframe<TimestampValue>>();
|
||||
|
||||
for(Keyframe kf : keyframes) {
|
||||
if(kf.getValue() instanceof AdvancedPosition)
|
||||
posKFList.add((Keyframe<AdvancedPosition>)kf);
|
||||
else if(kf.getValue() instanceof TimestampValue)
|
||||
timeKFList.add((Keyframe<TimestampValue>) kf);
|
||||
}
|
||||
|
||||
positionKeyframes = posKFList.toArray(new Keyframe[posKFList.size()]);
|
||||
timeKeyframes = timeKFList.toArray(new Keyframe[timeKFList.size()]);
|
||||
}
|
||||
|
||||
public Keyframe[] getKeyframes() {
|
||||
Keyframe[] keyframes = new Keyframe[positionKeyframes.length + timeKeyframes.length];
|
||||
System.arraycopy(positionKeyframes, 0, keyframes, 0, positionKeyframes.length);
|
||||
System.arraycopy(timeKeyframes, 0, keyframes, positionKeyframes.length, timeKeyframes.length);
|
||||
return keyframes;
|
||||
}
|
||||
|
||||
public int getTimeKeyframeCount() {
|
||||
return timeKeyframes.length;
|
||||
}
|
||||
|
||||
public int getPositionKeyframeCount() {
|
||||
return positionKeyframes.length;
|
||||
}
|
||||
|
||||
public int getPathDuration() {
|
||||
int first = 0;
|
||||
int last = 0;
|
||||
|
||||
for(Keyframe k : getKeyframes()) {
|
||||
if(k.getRealTimestamp() < first) {
|
||||
first = k.getRealTimestamp();
|
||||
} else if(k.getRealTimestamp() > last) {
|
||||
last = k.getRealTimestamp();
|
||||
}
|
||||
}
|
||||
|
||||
return last-first;
|
||||
}
|
||||
|
||||
public int getCustomObjectCount() {
|
||||
return customObjects.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package eu.crushedpixel.replaymod.preparation;
|
||||
|
||||
import de.johni0702.replaystudio.PacketData;
|
||||
import de.johni0702.replaystudio.io.ReplayInputStream;
|
||||
import de.johni0702.replaystudio.replay.ZipReplayFile;
|
||||
import de.johni0702.replaystudio.studio.ReplayStudio;
|
||||
import de.johni0702.replaystudio.util.PacketUtils;
|
||||
import com.replaymod.replaystudio.PacketData;
|
||||
import com.replaymod.replaystudio.io.ReplayInputStream;
|
||||
import com.replaymod.replaystudio.replay.ZipReplayFile;
|
||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||
import com.replaymod.replaystudio.util.PacketUtils;
|
||||
import eu.crushedpixel.replaymod.holders.AdvancedPosition;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.spacehq.mc.protocol.data.game.values.entity.player.PositionElement;
|
||||
|
||||
@@ -2,12 +2,12 @@ package eu.crushedpixel.replaymod.studio;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.gson.JsonObject;
|
||||
import de.johni0702.replaystudio.PacketData;
|
||||
import de.johni0702.replaystudio.Studio;
|
||||
import de.johni0702.replaystudio.filter.StreamFilter;
|
||||
import de.johni0702.replaystudio.replay.ReplayFile;
|
||||
import de.johni0702.replaystudio.replay.ReplayMetaData;
|
||||
import de.johni0702.replaystudio.stream.PacketStream;
|
||||
import com.replaymod.replaystudio.PacketData;
|
||||
import com.replaymod.replaystudio.Studio;
|
||||
import com.replaymod.replaystudio.filter.StreamFilter;
|
||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||
import com.replaymod.replaystudio.replay.ReplayMetaData;
|
||||
import com.replaymod.replaystudio.stream.PacketStream;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerResourcePackSendPacket;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package eu.crushedpixel.replaymod.studio;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import de.johni0702.replaystudio.PacketData;
|
||||
import de.johni0702.replaystudio.Studio;
|
||||
import de.johni0702.replaystudio.filter.StreamFilter;
|
||||
import de.johni0702.replaystudio.stream.PacketStream;
|
||||
import com.replaymod.replaystudio.PacketData;
|
||||
import com.replaymod.replaystudio.Studio;
|
||||
import com.replaymod.replaystudio.filter.StreamFilter;
|
||||
import com.replaymod.replaystudio.stream.PacketStream;
|
||||
import eu.crushedpixel.replaymod.gui.elements.listeners.ProgressUpdateListener;
|
||||
|
||||
public class ProgressFilter implements StreamFilter {
|
||||
|
||||
@@ -1,30 +1,25 @@
|
||||
package eu.crushedpixel.replaymod.studio;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.replaymod.pathing.serialize.LegacyKeyframeSetAdapter;
|
||||
import de.johni0702.replaystudio.PacketData;
|
||||
import de.johni0702.replaystudio.filter.ChangeTimestampFilter;
|
||||
import de.johni0702.replaystudio.filter.NeutralizerFilter;
|
||||
import de.johni0702.replaystudio.filter.RemoveFilter;
|
||||
import de.johni0702.replaystudio.filter.SquashFilter;
|
||||
import de.johni0702.replaystudio.io.ReplayOutputStream;
|
||||
import de.johni0702.replaystudio.replay.ReplayFile;
|
||||
import de.johni0702.replaystudio.replay.ReplayMetaData;
|
||||
import de.johni0702.replaystudio.replay.ZipReplayFile;
|
||||
import de.johni0702.replaystudio.stream.PacketStream;
|
||||
import de.johni0702.replaystudio.studio.ReplayStudio;
|
||||
import com.replaymod.replaystudio.PacketData;
|
||||
import com.replaymod.replaystudio.filter.ChangeTimestampFilter;
|
||||
import com.replaymod.replaystudio.filter.NeutralizerFilter;
|
||||
import com.replaymod.replaystudio.filter.RemoveFilter;
|
||||
import com.replaymod.replaystudio.filter.SquashFilter;
|
||||
import com.replaymod.replaystudio.io.ReplayOutputStream;
|
||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||
import com.replaymod.replaystudio.replay.ReplayMetaData;
|
||||
import com.replaymod.replaystudio.replay.ZipReplayFile;
|
||||
import com.replaymod.replaystudio.stream.PacketStream;
|
||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||
import eu.crushedpixel.replaymod.gui.elements.listeners.ProgressUpdateListener;
|
||||
import eu.crushedpixel.replaymod.holders.Keyframe;
|
||||
import eu.crushedpixel.replaymod.holders.KeyframeSet;
|
||||
import eu.crushedpixel.replaymod.holders.TimestampValue;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -98,6 +93,7 @@ public class StudioImplementation {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
KeyframeSet[] keyframeSets = new GsonBuilder()
|
||||
.registerTypeAdapter(KeyframeSet[].class, new LegacyKeyframeSetAdapter())
|
||||
.create().fromJson(new InputStreamReader(in.get()), KeyframeSet[].class);
|
||||
@@ -130,6 +126,7 @@ public class StudioImplementation {
|
||||
new Gson().toJson(resultSets.toArray(new KeyframeSet[resultSets.size()]), out);
|
||||
out.flush();
|
||||
out.close();
|
||||
*/
|
||||
}
|
||||
|
||||
public static void connectReplayFiles(List<File> filesToConnect, File outputFile, ProgressUpdateListener updateListener) throws IOException {
|
||||
|
||||
@@ -2,10 +2,9 @@ package eu.crushedpixel.replaymod.utils;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.replaymod.recording.packet.PacketSerializer;
|
||||
import de.johni0702.replaystudio.replay.ReplayMetaData;
|
||||
import com.replaymod.replaystudio.replay.ReplayMetaData;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import eu.crushedpixel.replaymod.assets.CustomObjectRepository;
|
||||
import eu.crushedpixel.replaymod.holders.KeyframeSet;
|
||||
import eu.crushedpixel.replaymod.holders.PacketData;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
@@ -118,9 +117,6 @@ public class ReplayFileIO {
|
||||
FileUtils.write(file, json);
|
||||
}
|
||||
|
||||
public static void write(KeyframeSet[] keyframeRegistry, File file) throws IOException {
|
||||
write((Object) keyframeRegistry, file);
|
||||
}
|
||||
|
||||
public static void write(ReplayMetaData metaData, File file) throws IOException {
|
||||
write((Object) metaData, file);
|
||||
|
||||
Reference in New Issue
Block a user