Only register changes in ReplayFileAppender if something changed - this applies to GuiKeyframeRepository, GuiObjectManager, GuiPlayerOverview, GuiAssetManager

Added equals method to ReplayImageAsset which is based on the BufferedImage's hash code (which is calculated only once)
This commit is contained in:
CrushedPixel
2015-07-16 13:26:12 +02:00
parent e6fcf4f094
commit d45fcb8a34
9 changed files with 69 additions and 3 deletions

View File

@@ -34,10 +34,13 @@ public class GuiAssetManager extends GuiScreen {
private AssetRepository assetRepository;
private final AssetRepository initialRepository;
private ReplayAsset currentAsset;
public GuiAssetManager() {
this.assetRepository = ReplayHandler.getAssetRepository();
this.initialRepository = ReplayHandler.getAssetRepository();
this.assetRepository = new AssetRepository(ReplayHandler.getAssetRepository());
}
@Override
@@ -190,6 +193,8 @@ public class GuiAssetManager extends GuiScreen {
new Thread(new Runnable() {
@Override
public void run() {
if(assetRepository.equals(initialRepository)) return;
ReplayHandler.setAssetRepository(assetRepository);
assetRepository.saveAssets();
}
}, "replaymod-asset-saver").start();

View File

@@ -15,6 +15,7 @@ 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 scala.actors.threadpool.Arrays;
import java.awt.*;
import java.io.IOException;
@@ -40,8 +41,11 @@ public class GuiKeyframeRepository extends GuiScreen implements GuiReplayOverlay
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);
}
@@ -230,6 +234,8 @@ public class GuiKeyframeRepository extends GuiScreen implements GuiReplayOverlay
private void saveOnQuit() {
ArrayList<KeyframeSet> copy = new ArrayList<KeyframeSet>(keyframeSetList.getCopyOfElements());
if(initialKeyframeSets.equals(copy)) return;
this.keyframeRepository = copy.toArray(new KeyframeSet[copy.size()]);
ReplayHandler.setKeyframeRepository(keyframeRepository, true);
}

View File

@@ -42,6 +42,8 @@ public class GuiObjectManager extends GuiScreen {
private GuiString dropdownLabel;
private GuiDropdown<GuiEntryListValueEntry<UUID>> assetDropdown;
private final List<CustomImageObject> initialObjects = ReplayHandler.getCustomImageObjects();
private GuiDraggingNumberInput anchorXInput, anchorYInput, anchorZInput;
private GuiDraggingNumberInput positionXInput, positionYInput, positionZInput;
private GuiDraggingNumberInput orientationXInput, orientationYInput, orientationZInput;
@@ -173,7 +175,7 @@ public class GuiObjectManager extends GuiScreen {
nameInput = new GuiAdvancedTextField(fontRendererObj, 0, 0, 0, 20);
nameInput.hint = I18n.format("replaymod.gui.objects.properties.name");
for(CustomImageObject customImageObject : ReplayHandler.getCustomImageObjects()) {
for(CustomImageObject customImageObject : initialObjects) {
objectList.addElement(customImageObject);
}
@@ -366,6 +368,11 @@ public class GuiObjectManager extends GuiScreen {
private void saveOnQuit() {
List<CustomImageObject> objects = objectList.getCopyOfElements();
if(objects.equals(initialObjects)) {
return;
}
ReplayHandler.setCustomImageObjects(objects);
if(objects.size() > 0) {

View File

@@ -54,7 +54,11 @@ public class GuiPlayerOverview extends GuiScreen implements GuiReplayOverlay.NoO
private final String screenTitle = I18n.format("replaymod.input.playeroverview");
private final Set<UUID> initialHiddenPlayers;
public GuiPlayerOverview(List<EntityPlayer> players) {
initialHiddenPlayers = new HashSet<UUID>(PlayerHandler.getHiddenPlayers());
Collections.sort(players, new PlayerComparator());
this.players = new ArrayList<Pair<EntityPlayer, ResourceLocation>>();
@@ -304,6 +308,7 @@ public class GuiPlayerOverview extends GuiScreen implements GuiReplayOverlay.NoO
private void saveOnQuit() {
if(rememberHidden.isChecked()) {
if(initialHiddenPlayers.equals(PlayerHandler.getHiddenPlayers())) return;
try {
File f = File.createTempFile(ReplayFile.ENTRY_VISIBILITY, "json");
ReplayFileIO.write(getVisibilityInstance(), f);
@@ -312,6 +317,7 @@ public class GuiPlayerOverview extends GuiScreen implements GuiReplayOverlay.NoO
e.printStackTrace();
}
} else {
if(initialHiddenPlayers.isEmpty()) return;
ReplayMod.replayFileAppender.registerModifiedFile(null, ReplayFile.ENTRY_VISIBILITY, ReplayHandler.getReplayFile());
}
}