Merge branch 'stable' into develop-1.7.10

This commit is contained in:
Jonas Herzig
2018-03-16 13:03:22 +01:00
10 changed files with 75 additions and 33 deletions

View File

@@ -36,6 +36,7 @@ import de.johni0702.minecraft.gui.popup.GuiYesNoPopup;
import de.johni0702.minecraft.gui.utils.Colors;
import net.minecraft.crash.CrashReport;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.lwjgl.util.ReadableDimension;
import javax.annotation.Nullable;
@@ -123,7 +124,8 @@ public class GuiReplayEditor extends GuiScreen {
return button;
}
public void save(File inputFile, PacketStream.FilterInfo...filters) {
@SafeVarargs
public final void save(File inputFile, Pair<PacketStream.FilterInfo, JsonObject>... filters) {
save(Utils.fileNameToReplayName(inputFile.getName()), (outputFile) -> {
Studio studio = new ReplayStudio();
File tmpDir = null;
@@ -146,7 +148,10 @@ public class GuiReplayEditor extends GuiScreen {
PacketStream stream = studio.createReplayStream(in, true);
stream.addFilter(new ProgressFilter(metaData.getDuration()));
for (PacketStream.FilterInfo info : filters) {
for (Pair<PacketStream.FilterInfo, JsonObject> pair : filters) {
PacketStream.FilterInfo info = pair.getLeft();
JsonObject config = pair.getRight();
info.getFilter().init(studio, config);
stream.addFilter(info.getFilter(), info.getFrom(), info.getTo());
LOGGER.debug("Added filter {}", info);
}

View File

@@ -22,6 +22,7 @@ import net.minecraft.client.resources.I18n;
import net.minecraft.crash.CrashReport;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.lang3.tuple.Pair;
import org.lwjgl.util.Dimension;
import java.io.File;
@@ -133,12 +134,11 @@ public class GuiTrimPanel extends GuiPanel {
ChangeTimestampFilter ctf = new ChangeTimestampFilter();
JsonObject config = new JsonObject();
config.addProperty("offset", -start);
ctf.init(null, config);
// Pass filters to save dialog
gui.save(inputReplays.getSelectedValue(),
new PacketStream.FilterInfo(new SquashFilter(), -1, start),
new PacketStream.FilterInfo(ctf, start, end),
new PacketStream.FilterInfo(new RemoveFilter(), end, -1)
Pair.of(new PacketStream.FilterInfo(new SquashFilter(), -1, start), new JsonObject()),
Pair.of(new PacketStream.FilterInfo(ctf, start, end), config),
Pair.of(new PacketStream.FilterInfo(new RemoveFilter(), end, -1), new JsonObject())
);
});
}

View File

@@ -23,15 +23,30 @@ import static com.replaymod.core.versions.MCVer.*;
public class ChunkLoadingRenderGlobal {
private final RenderGlobal hooked;
private final ChunkRenderDispatcher renderDispatcher;
private final JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
private final CustomChunkRenderWorker renderWorker;
private ChunkRenderDispatcher renderDispatcher;
private JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
private CustomChunkRenderWorker renderWorker;
private int frame;
@SuppressWarnings("unchecked")
public ChunkLoadingRenderGlobal(RenderGlobal renderGlobal) {
this.hooked = renderGlobal;
this.renderDispatcher = renderGlobal.renderDispatcher;
setup(renderGlobal.renderDispatcher);
}
public void updateRenderDispatcher(ChunkRenderDispatcher renderDispatcher) {
if (this.renderDispatcher != null) {
workerJailingQueue.freeAll();
this.renderDispatcher = null;
}
if (renderDispatcher != null) {
setup(renderDispatcher);
}
}
private void setup(ChunkRenderDispatcher renderDispatcher) {
this.renderDispatcher = renderDispatcher;
this.renderWorker = new CustomChunkRenderWorker(renderDispatcher, new RegionRenderCacheBuilder());
int workerThreads = renderDispatcher.listThreadedWorkers.size();

View File

@@ -10,6 +10,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC<10904
@@ -67,5 +68,19 @@ public abstract class MixinRenderGlobal {
ci.cancel();
}
}
@Inject(method = "setWorldAndLoadRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher;stopWorkerThreads()V"))
private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
if (replayModRender_hook != null) {
replayModRender_hook.updateRenderDispatcher(null);
}
}
@Inject(method = "loadRenderers", at = @At(value = "RETURN"))
private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
if (replayModRender_hook != null) {
replayModRender_hook.updateRenderDispatcher(renderDispatcher);
}
}
}
//#endif

View File

@@ -95,7 +95,7 @@ public class ReplayHandler {
markers = new ArrayList<>(replayFile.getMarkers().or(Collections.emptySet()));
replaySender = new ReplaySender(this, replayFile, asyncMode);
replaySender = new ReplaySender(this, replayFile, false);
setup();
@@ -103,6 +103,8 @@ public class ReplayHandler {
overlay.setVisible(true);
FML_BUS.post(new ReplayOpenEvent.Post(this));
replaySender.setAsyncMode(asyncMode);
}
void restartedReplay() {