From efd1cebff3d69e0a90617c3eab332bc07a10fe26 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Thu, 10 Sep 2020 17:23:02 +0200 Subject: [PATCH 01/15] Update to MC 1.16.3 --- build.gradle.kts | 2 +- jGui | 2 +- settings.gradle.kts | 4 ++-- .../replaymod/render/mixin/MixinEntityRenderer.java | 2 +- .../java/com/replaymod/replay/FullReplaySender.java | 10 ++++++---- .../java/com/replaymod/replay/camera/CameraEntity.java | 4 ++-- versions/{1.16.2 => 1.16.3}/.gitkeep | 0 versions/common.gradle | 10 +++++----- versions/mainProject | 2 +- 9 files changed, 19 insertions(+), 17 deletions(-) rename versions/{1.16.2 => 1.16.3}/.gitkeep (100%) diff --git a/build.gradle.kts b/build.gradle.kts index effee147..11134609 100755 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -178,7 +178,7 @@ val doRelease by tasks.registering { defaultTasks("shadowJar") preprocess { - "1.16.2"(11602, "yarn") { + "1.16.3"(11603, "yarn") { "1.16.1"(11601, "yarn") { "1.15.2"(11502, "yarn") { "1.14.4"(11404, "yarn", file("versions/mapping-fabric-1.15.2-1.14.4.txt")) { diff --git a/jGui b/jGui index e9387ad0..42bf9d52 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit e9387ad0035ff2fb2f6eac3ddd9c469e3deccec8 +Subproject commit 42bf9d521bfa0884968655c021f1d89f863bad04 diff --git a/settings.gradle.kts b/settings.gradle.kts index 4cc0c4dc..c5b02983 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -29,7 +29,7 @@ val jGuiVersions = listOf( "1.14.4", "1.15.2", "1.16.1", - "1.16.2" + "1.16.3" ) val replayModVersions = listOf( "1.7.10", @@ -46,7 +46,7 @@ val replayModVersions = listOf( "1.14.4", "1.15.2", "1.16.1", - "1.16.2" + "1.16.3" ) include(":jGui") diff --git a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java index ea84b39f..b82e5be6 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java +++ b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java @@ -38,7 +38,7 @@ import net.minecraft.client.render.WorldRenderer; //#endif //#if MC>=10904 -import net.minecraft.world.RayTraceContext; +import net.minecraft.world.RaycastContext; //#else //$$ import net.minecraft.util.MovingObjectPosition; //#endif diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index 39dd697e..6c60a5a6 100644 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -624,13 +624,15 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#endif false, //#if MC>=11600 - packet.method_29443(), - //#if MC>=11602 + //#if MC>=11603 + packet.getDimensionIds(), (net.minecraft.util.registry.DynamicRegistryManager.Impl) packet.getRegistryManager(), + packet.getDimensionType(), //#else + //$$ packet.method_29443(), //$$ (net.minecraft.util.registry.RegistryTracker.Modifiable) packet.getDimension(), + //$$ packet.method_29444(), //#endif - packet.method_29444(), packet.getDimensionId(), //#else //$$ packet.getDimension(), @@ -639,7 +641,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#if MC<11600 //$$ packet.getGeneratorType(), //#endif - packet.getChunkLoadDistance(), + packet.getViewDistance(), packet.hasReducedDebugInfo() //#if MC>=11500 , packet.showsDeathScreen() diff --git a/src/main/java/com/replaymod/replay/camera/CameraEntity.java b/src/main/java/com/replaymod/replay/camera/CameraEntity.java index 5c9c6e26..0dac037d 100644 --- a/src/main/java/com/replaymod/replay/camera/CameraEntity.java +++ b/src/main/java/com/replaymod/replay/camera/CameraEntity.java @@ -481,8 +481,8 @@ public class CameraEntity //#if MC>=11400 @Override - public HitResult rayTrace(double maxDistance, float tickDelta, boolean fluids) { - HitResult result = super.rayTrace(maxDistance, tickDelta, fluids); + public HitResult raycast(double maxDistance, float tickDelta, boolean fluids) { + HitResult result = super.raycast(maxDistance, tickDelta, fluids); // Make sure we can never look at blocks (-> no outline) if (result instanceof BlockHitResult) { diff --git a/versions/1.16.2/.gitkeep b/versions/1.16.3/.gitkeep similarity index 100% rename from versions/1.16.2/.gitkeep rename to versions/1.16.3/.gitkeep diff --git a/versions/common.gradle b/versions/common.gradle index b0719d2f..b7cc1f3d 100644 --- a/versions/common.gradle +++ b/versions/common.gradle @@ -225,25 +225,25 @@ dependencies { 11404: '1.14.4', 11502: '1.15.2', 11601: '1.16.1', - 11602: '1.16.2', + 11603: '1.16.3', ][mcVersion] mappings 'net.fabricmc:yarn:' + [ 11404: '1.14.4+build.16', 11502: '1.15.2+build.14', 11601: '1.16.1+build.17:v2', - 11602: '1.16.2+build.1:v2', + 11603: '1.16.3+build.1:v2', ][mcVersion] modCompile 'net.fabricmc:fabric-loader:' + [ 11404: '0.7.8+build.189', 11502: '0.7.8+build.189', 11601: '0.8.8+build.202', - 11602: '0.9.1+build.205', + 11603: '0.9.1+build.205', ][mcVersion] def fabricApiVersion = [ 11404: '0.4.3+build.247-1.14', 11502: '0.5.1+build.294-1.15', 11601: '0.14.0+build.371-1.16', - 11602: '0.17.1+build.394-1.16', + 11603: '0.17.1+build.394-1.16', ][mcVersion] def fabricApiModules = [ "api-base", @@ -295,7 +295,7 @@ dependencies { shadow 'com.github.ReplayMod.JavaBlend:2.79.0:a0696f8' - shadow "com.github.ReplayMod:ReplayStudio:bc8baba", shadeExclusions + shadow "com.github.ReplayMod:ReplayStudio:2773270", shadeExclusions implementation(jGui){ transitive = false // FG 1.2 puts all MC deps into the compile configuration and we don't want to shade those diff --git a/versions/mainProject b/versions/mainProject index f21c0ae0..b8ae5a5b 100644 --- a/versions/mainProject +++ b/versions/mainProject @@ -1 +1 @@ -1.16.2 \ No newline at end of file +1.16.3 \ No newline at end of file From e24c4cd8602b3cbed7260f5c4ee3c430cbf7e014 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 12:31:05 +0200 Subject: [PATCH 02/15] Fix incorrect latest version in minimal mode popup (fixes #375) Also clean up the `1.7.6-1.7.10` to just `1.7.10`. --- src/main/java/com/replaymod/core/utils/Utils.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/replaymod/core/utils/Utils.java b/src/main/java/com/replaymod/core/utils/Utils.java index 81448cb5..f15ec91f 100644 --- a/src/main/java/com/replaymod/core/utils/Utils.java +++ b/src/main/java/com/replaymod/core/utils/Utils.java @@ -66,6 +66,7 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Comparator; import java.util.Date; import java.util.UUID; import java.util.function.Consumer; @@ -350,6 +351,10 @@ public class Utils { super(container); setBackgroundColor(Colors.DARK_TRANSPARENT); + ProtocolVersion latestVersion = ProtocolVersion.getProtocols() + .stream() + .max(Comparator.comparing(ProtocolVersion::getId)) + .orElseThrow(RuntimeException::new); getInfo().addElements(new VerticalLayout.Data(0.5), new GuiLabel() .setColor(Colors.BLACK) @@ -357,10 +362,7 @@ public class Utils { new GuiLabel() .setColor(Colors.BLACK) .setI18nText("replaymod.gui.minimalmode.supportedversion", - ProtocolVersion.v1_7_6.getName() - + " - " - + Iterables.getLast(ProtocolVersion.getProtocols()).getName() - )); + "1.7.10 - " + latestVersion.getName())); open(); } From f42f4d468ddc0f8fc6f9d0be112c0445824fb833 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 12:36:16 +0200 Subject: [PATCH 03/15] Fix editing a replay twice with the same name (fixes #342) --- src/main/java/com/replaymod/editor/gui/MarkerProcessor.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java b/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java index 072e1f4c..5f5703a8 100644 --- a/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java +++ b/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java @@ -120,6 +120,9 @@ public class MarkerProcessor { squashFilter.init(studio, null); Path inputPath = path.resolveSibling("raw").resolve(path.getFileName()); + for (int i = 1; Files.exists(inputPath); i++) { + inputPath = inputPath.resolveSibling(replayName + "." + i + ".mcpr"); + } Files.createDirectories(inputPath.getParent()); Files.move(path, inputPath); From 2c2af8a6a66762b2ce728910fc6c9133b597bcab Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 13:11:57 +0200 Subject: [PATCH 04/15] Fix outer skin layer when spectating in first person (fixes #363) --- .../java/com/replaymod/replay/camera/CameraEntity.java | 10 ++++++++++ versions/1.8.9/mapping.txt | 1 + 2 files changed, 11 insertions(+) diff --git a/src/main/java/com/replaymod/replay/camera/CameraEntity.java b/src/main/java/com/replaymod/replay/camera/CameraEntity.java index 0dac037d..8e0cb2bb 100644 --- a/src/main/java/com/replaymod/replay/camera/CameraEntity.java +++ b/src/main/java/com/replaymod/replay/camera/CameraEntity.java @@ -74,6 +74,7 @@ import net.minecraft.util.Hand; //#if MC>=10800 import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.render.entity.PlayerModelPart; //#else //$$ import net.minecraft.client.entity.EntityClientPlayerMP; //$$ import net.minecraft.util.Session; @@ -423,6 +424,15 @@ public class CameraEntity } return super.getModel(); } + + @Override + public boolean isPartVisible(PlayerModelPart modelPart) { + Entity view = getRenderViewEntity(this.client); + if (view != this && view instanceof PlayerEntity) { + return ((PlayerEntity) view).isPartVisible(modelPart); + } + return super.isPartVisible(modelPart); + } //#endif @Override diff --git a/versions/1.8.9/mapping.txt b/versions/1.8.9/mapping.txt index 96c38ef4..43123ad0 100644 --- a/versions/1.8.9/mapping.txt +++ b/versions/1.8.9/mapping.txt @@ -1,3 +1,4 @@ +net.minecraft.entity.player.EntityPlayer isWearing() func_175148_a() net.minecraft.client.renderer.WorldRenderer begin() startDrawing() net.minecraft.network.play.server.S38PacketPlayerListItem getAction() func_179768_b() net.minecraft.network.play.server.S40PacketDisconnect getReason() func_149165_c() From 12a49a4a5e96c6e07e2ef362693f603505b35e10 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 13:13:39 +0200 Subject: [PATCH 05/15] Fix crash due to double-close after ODS rendering (fixes #376) --- .../render/capturer/OpenGlFrameCapturer.java | 1 - .../replaymod/render/rendering/Pipeline.java | 6 ++- .../replaymod/render/rendering/Pipelines.java | 39 +++++++++++-------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java index 496b65d8..9f296caf 100644 --- a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java @@ -141,6 +141,5 @@ public abstract class OpenGlFrameCapturer implements Runnable { + private final WorldRenderer worldRenderer; private final FrameCapturer capturer; private final FrameProcessor processor; private int consumerNextFrame; @@ -31,7 +33,8 @@ public class Pipeline implements Runnable { private volatile boolean abort; - public Pipeline(FrameCapturer capturer, FrameProcessor processor, FrameConsumer

consumer) { + public Pipeline(WorldRenderer worldRenderer, FrameCapturer capturer, FrameProcessor processor, FrameConsumer

consumer) { + this.worldRenderer = worldRenderer; this.capturer = capturer; this.processor = processor; this.consumer = consumer; @@ -81,6 +84,7 @@ public class Pipeline implements Runnable { } try { + worldRenderer.close(); capturer.close(); processor.close(); consumer.close(); diff --git a/src/main/java/com/replaymod/render/rendering/Pipelines.java b/src/main/java/com/replaymod/render/rendering/Pipelines.java index 51437bfb..51c4a2a8 100644 --- a/src/main/java/com/replaymod/render/rendering/Pipelines.java +++ b/src/main/java/com/replaymod/render/rendering/Pipelines.java @@ -10,6 +10,7 @@ import com.replaymod.render.capturer.SimpleOpenGlFrameCapturer; import com.replaymod.render.capturer.SimplePboOpenGlFrameCapturer; import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer; import com.replaymod.render.capturer.StereoscopicPboOpenGlFrameCapturer; +import com.replaymod.render.capturer.WorldRenderer; import com.replaymod.render.frame.CubicOpenGlFrame; import com.replaymod.render.frame.ODSOpenGlFrame; import com.replaymod.render.frame.OpenGlFrame; @@ -45,66 +46,72 @@ public class Pipelines { public static Pipeline newDefaultPipeline(RenderInfo renderInfo, FrameConsumer consumer) { RenderSettings settings = renderInfo.getRenderSettings(); + WorldRenderer worldRenderer = new EntityRendererHandler(settings, renderInfo); FrameCapturer capturer; if (PixelBufferObject.SUPPORTED) { - capturer = new SimplePboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo); + capturer = new SimplePboOpenGlFrameCapturer(worldRenderer, renderInfo); } else { - capturer = new SimpleOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo); + capturer = new SimpleOpenGlFrameCapturer(worldRenderer, renderInfo); } - return new Pipeline<>(capturer, new OpenGlToRGBProcessor(), consumer); + return new Pipeline<>(worldRenderer, capturer, new OpenGlToRGBProcessor(), consumer); } public static Pipeline newStereoscopicPipeline(RenderInfo renderInfo, FrameConsumer consumer) { RenderSettings settings = renderInfo.getRenderSettings(); + WorldRenderer worldRenderer = new EntityRendererHandler(settings, renderInfo); FrameCapturer capturer; if (PixelBufferObject.SUPPORTED) { - capturer = new StereoscopicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo); + capturer = new StereoscopicPboOpenGlFrameCapturer(worldRenderer, renderInfo); } else { - capturer = new StereoscopicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo); + capturer = new StereoscopicOpenGlFrameCapturer(worldRenderer, renderInfo); } - return new Pipeline<>(capturer, new StereoscopicToRGBProcessor(), consumer); + return new Pipeline<>(worldRenderer, capturer, new StereoscopicToRGBProcessor(), consumer); } public static Pipeline newCubicPipeline(RenderInfo renderInfo, FrameConsumer consumer) { RenderSettings settings = renderInfo.getRenderSettings(); + WorldRenderer worldRenderer = new EntityRendererHandler(settings, renderInfo); FrameCapturer capturer; if (PixelBufferObject.SUPPORTED) { - capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4); + capturer = new CubicPboOpenGlFrameCapturer(worldRenderer, renderInfo, settings.getVideoWidth() / 4); } else { - capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4); + capturer = new CubicOpenGlFrameCapturer(worldRenderer, renderInfo, settings.getVideoWidth() / 4); } - return new Pipeline<>(capturer, new CubicToRGBProcessor(), consumer); + return new Pipeline<>(worldRenderer, capturer, new CubicToRGBProcessor(), consumer); } public static Pipeline newEquirectangularPipeline(RenderInfo renderInfo, FrameConsumer consumer) { RenderSettings settings = renderInfo.getRenderSettings(); + WorldRenderer worldRenderer = new EntityRendererHandler(settings, renderInfo); EquirectangularToRGBProcessor processor = new EquirectangularToRGBProcessor(settings.getVideoWidth(), settings.getVideoHeight(), settings.getSphericalFovX()); FrameCapturer capturer; if (PixelBufferObject.SUPPORTED) { - capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, processor.getFrameSize()); + capturer = new CubicPboOpenGlFrameCapturer(worldRenderer, renderInfo, processor.getFrameSize()); } else { - capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, processor.getFrameSize()); + capturer = new CubicOpenGlFrameCapturer(worldRenderer, renderInfo, processor.getFrameSize()); } - return new Pipeline<>(capturer, processor, consumer); + return new Pipeline<>(worldRenderer, capturer, processor, consumer); } public static Pipeline newODSPipeline(RenderInfo renderInfo, FrameConsumer consumer) { RenderSettings settings = renderInfo.getRenderSettings(); + WorldRenderer worldRenderer = new EntityRendererHandler(settings, renderInfo); ODSToRGBProcessor processor = new ODSToRGBProcessor(settings.getVideoWidth(), settings.getVideoHeight(), settings.getSphericalFovX()); FrameCapturer capturer = - new ODSFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, processor.getFrameSize()); - return new Pipeline<>(capturer, processor, consumer); + new ODSFrameCapturer(worldRenderer, renderInfo, processor.getFrameSize()); + return new Pipeline<>(worldRenderer, capturer, processor, consumer); } public static Pipeline newBlendPipeline(RenderInfo renderInfo) { RenderSettings settings = renderInfo.getRenderSettings(); - FrameCapturer capturer = new BlendFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo); + WorldRenderer worldRenderer = new EntityRendererHandler(settings, renderInfo); + FrameCapturer capturer = new BlendFrameCapturer(worldRenderer, renderInfo); FrameConsumer consumer = new FrameConsumer() { @Override public void consume(RGBFrame frame) { @@ -114,6 +121,6 @@ public class Pipelines { public void close() { } }; - return new Pipeline<>(capturer, new DummyProcessor<>(), consumer); + return new Pipeline<>(worldRenderer, capturer, new DummyProcessor<>(), consumer); } } From d9e36222540303183753aae26a0465ac83a77b17 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 13:27:06 +0200 Subject: [PATCH 06/15] Fix crash when screenshots folder does not yet exist (fixes #377) Happens when you open the output file dialog for the first time and haven't taken any screenshots before. --- .../extras/advancedscreenshots/GuiCreateScreenshot.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java b/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java index 2f908952..1e208c2d 100644 --- a/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java +++ b/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java @@ -85,6 +85,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable { protected File generateOutputFile(RenderSettings.EncodingPreset encodingPreset) { DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); File screenshotFolder = new File(getMinecraft().runDirectory, "screenshots"); + screenshotFolder.mkdirs(); String baseName = DATE_FORMAT.format(new Date()); for (int i = 1; ; i++) { File screenshotFile = new File(screenshotFolder, baseName + (i == 1 ? "" : "_" + i) + ".png"); From fb447dc25273b9b1942290fadba90487f7f73f8f Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 13:45:03 +0200 Subject: [PATCH 07/15] Fix incorrect extension for custom screenshot file name (fixes #337) --- .../GuiCreateScreenshot.java | 5 ++++ .../com/replaymod/render/RenderSettings.java | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java b/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java index 1e208c2d..71d13f6a 100644 --- a/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java +++ b/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java @@ -95,6 +95,11 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable { } } + @Override + public void load(RenderSettings settings) { + super.load(settings.withEncodingPreset(RenderSettings.EncodingPreset.PNG)); + } + @Override protected Path getSettingsPath() { return getMinecraft().runDirectory.toPath().resolve("config/replaymod-screenshotsettings.json"); diff --git a/src/main/java/com/replaymod/render/RenderSettings.java b/src/main/java/com/replaymod/render/RenderSettings.java index c39f50b2..f696e862 100644 --- a/src/main/java/com/replaymod/render/RenderSettings.java +++ b/src/main/java/com/replaymod/render/RenderSettings.java @@ -206,6 +206,30 @@ public class RenderSettings { this.highPerformance = highPerformance; } + public RenderSettings withEncodingPreset(EncodingPreset encodingPreset) { + return new RenderSettings( + renderMethod, + encodingPreset, + videoWidth, + videoHeight, + framesPerSecond, + bitRate, + outputFile, + renderNameTags, + stabilizeYaw, + stabilizePitch, + stabilizeRoll, + chromaKeyingColor, + sphericalFovX, + sphericalFovY, + injectSphericalMetadata, + antiAliasing, + exportCommand, + exportArguments, + highPerformance + ); + } + /** * @return the width of the output video during rendering, including the upscale for Anti-Aliasing. */ From 85ea7572537f70537274bbf963e461543bbafabe Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 14:08:39 +0200 Subject: [PATCH 08/15] Fix incorrect jump behavior when jumping small distances beyond 5s --- src/main/java/com/replaymod/replay/ReplayHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 3cec022f..56384232 100644 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -592,7 +592,7 @@ public class ReplayHandler { } } - long diff = targetTime - replaySender.getDesiredTimestamp(); + long diff = targetTime - (replaySender.isHurrying() ? replaySender.getDesiredTimestamp() : replaySender.currentTimeStamp()); if (diff != 0) { if (diff > 0 && diff < 5000) { // Small difference and no time travel replaySender.jumpToTime(targetTime); From 49b0cbe4f8430afbd3de69024cd03ee804ead7ec Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 14:13:40 +0200 Subject: [PATCH 09/15] Fix jumping to marker position when time already matches --- .../java/com/replaymod/replay/ReplayHandler.java | 4 ---- .../replay/gui/overlay/GuiMarkerTimeline.java | 14 +++++++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 56384232..d20a7f41 100644 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -519,10 +519,6 @@ public class ReplayHandler { return spectating; } - public void setTargetPosition(Location pos) { - targetCameraPosition = pos; - } - public void moveCameraToTargetPosition() { CameraEntity cam = getCameraEntity(); if (cam != null && targetCameraPosition != null) { diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java index d312d670..83aa491f 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java @@ -4,6 +4,7 @@ import com.replaymod.core.ReplayMod; import com.replaymod.core.versions.MCVer.Keyboard; import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayModReplay; +import com.replaymod.replay.camera.CameraEntity; import com.replaymod.replaystudio.data.Marker; import com.replaymod.replaystudio.util.Location; import de.johni0702.minecraft.gui.GuiRenderer; @@ -168,11 +169,14 @@ public class GuiMarkerTimeline extends AbstractGuiTimeline im } else if (button == 1) { // Right click selectedMarker = null; if (replayHandler != null) { - replayHandler.setTargetPosition(new Location( - marker.getX(), marker.getY(), marker.getZ(), - marker.getPitch(), marker.getYaw() - )); - replayHandler.doJump(marker.getTime(), false); + CameraEntity cameraEntity = replayHandler.getCameraEntity(); + if (cameraEntity != null) { + cameraEntity.setCameraPosRot(new Location( + marker.getX(), marker.getY(), marker.getZ(), + marker.getPitch(), marker.getYaw() + )); + } + replayHandler.doJump(marker.getTime(), true); } else { setCursorPosition(marker.getTime()); } From afd0c27af950029283cfba3eb1a4f7bb2fd9fbdf Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 14:16:58 +0200 Subject: [PATCH 10/15] Fix incorrect rotation when jumping to marker (fixes #310) --- .../com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java index 83aa491f..f1c140b4 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java @@ -173,7 +173,7 @@ public class GuiMarkerTimeline extends AbstractGuiTimeline im if (cameraEntity != null) { cameraEntity.setCameraPosRot(new Location( marker.getX(), marker.getY(), marker.getZ(), - marker.getPitch(), marker.getYaw() + marker.getYaw(), marker.getPitch() )); } replayHandler.doJump(marker.getTime(), true); From a62100071f525f57a00ebfe72cf0f9649bad6ec0 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 14:34:48 +0200 Subject: [PATCH 11/15] Fix camera getting stuck spectating itself (fixes #300) This bug was introduced when we started to record the login phase because it contains the UUID of the local player. In the replay case this will be the UUID of the camera entity but also the one of the recording player, so if the recording player despawns while it is being spectated (e.g. because of a backwards jump), then the camera snaps onto itself and gets stuck in place until one presses Shift. --- .../java/com/replaymod/replay/camera/CameraEntity.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/replaymod/replay/camera/CameraEntity.java b/src/main/java/com/replaymod/replay/camera/CameraEntity.java index 8e0cb2bb..b9f0f16d 100644 --- a/src/main/java/com/replaymod/replay/camera/CameraEntity.java +++ b/src/main/java/com/replaymod/replay/camera/CameraEntity.java @@ -80,6 +80,7 @@ import net.minecraft.client.render.entity.PlayerModelPart; //$$ import net.minecraft.util.Session; //#endif +import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.UUID; import java.util.function.Function; @@ -99,6 +100,8 @@ public class CameraEntity //$$ extends EntityClientPlayerMP //#endif { + private static final UUID CAMERA_UUID = UUID.nameUUIDFromBytes("ReplayModCamera".getBytes(StandardCharsets.UTF_8)); + /** * Roll of this camera in degrees. */ @@ -155,6 +158,11 @@ public class CameraEntity , false //#endif ); + //#if MC>=10900 + setUuid(CAMERA_UUID); + //#else + //$$ entityUniqueID = CAMERA_UUID; + //#endif eventHandler.register(); if (ReplayModReplay.instance.getReplayHandler().getSpectatedUUID() == null) { cameraController = ReplayModReplay.instance.createCameraController(this); From 1382e9fb314b6d5c7b2d61725d66af8a461280fa Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 15:11:54 +0200 Subject: [PATCH 12/15] Fix VanillaGuiScreen not resetting when resized (fixes #369) --- jGui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jGui b/jGui index 42bf9d52..6602aac4 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 42bf9d521bfa0884968655c021f1d89f863bad04 +Subproject commit 6602aac42a5af9d7ab8c420a01bbf50476037a0b From a55320030fdf79f3308de958fedab1f8aa2fe905 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 15:28:08 +0200 Subject: [PATCH 13/15] Fix thread-unsafe mc method call in FullReplaySender (fixes #370) --- .../java/com/replaymod/replay/FullReplaySender.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index 6c60a5a6..95c847ed 100644 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -729,10 +729,12 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend final PlayerPositionLookS2CPacket ppl = (PlayerPositionLookS2CPacket) p; if(!hasWorldLoaded) hasWorldLoaded = true; - if (mc.currentScreen instanceof DownloadingTerrainScreen) { - // Close the world loading screen manually in case we swallow the packet - mc.openScreen(null); - } + ReplayMod.instance.runLater(() -> { + if (mc.currentScreen instanceof DownloadingTerrainScreen) { + // Close the world loading screen manually in case we swallow the packet + mc.openScreen(null); + } + }); if(replayHandler.shouldSuppressCameraMovements()) return null; From 5721b6f8c9b174f0c7cea1aa5c99b12c036b059d Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 15:58:13 +0200 Subject: [PATCH 14/15] Fix realms notification icon offsets (fixes #373) --- .../replay/mixin/Mixin_MoveRealmsButton.java | 20 +++++++++++++++++++ .../resources/mixins.replay.replaymod.json | 3 +++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/com/replaymod/replay/mixin/Mixin_MoveRealmsButton.java diff --git a/src/main/java/com/replaymod/replay/mixin/Mixin_MoveRealmsButton.java b/src/main/java/com/replaymod/replay/mixin/Mixin_MoveRealmsButton.java new file mode 100644 index 00000000..1a4c2938 --- /dev/null +++ b/src/main/java/com/replaymod/replay/mixin/Mixin_MoveRealmsButton.java @@ -0,0 +1,20 @@ +//#if MC>=11600 +package com.replaymod.replay.mixin; + +import net.minecraft.client.gui.screen.TitleScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(TitleScreen.class) +public abstract class Mixin_MoveRealmsButton { + @ModifyArg( + method = "init", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;init(Lnet/minecraft/client/MinecraftClient;II)V"), + index = 2 + ) + private int adjustRealmsButton(int height) { + return height - (24 - 10) * 4; + } +} +//#endif diff --git a/src/main/resources/mixins.replay.replaymod.json b/src/main/resources/mixins.replay.replaymod.json index 67b9da55..ff2737f1 100644 --- a/src/main/resources/mixins.replay.replaymod.json +++ b/src/main/resources/mixins.replay.replaymod.json @@ -5,6 +5,9 @@ "mixins": [], "server": [], "client": [ + //#if MC>=11600 + "Mixin_MoveRealmsButton", + //#endif //#if MC>=11400 "MixinCamera", "MixinInGameHud", From d7788b675ad736c018347ae4b08dbc54af85ee43 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 27 Sep 2020 17:28:29 +0200 Subject: [PATCH 15/15] Fix missing blocks pre-1.14 in Quick Mode and Edit (fixes #374) --- versions/common.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/common.gradle b/versions/common.gradle index b7cc1f3d..8f1bb427 100644 --- a/versions/common.gradle +++ b/versions/common.gradle @@ -295,7 +295,7 @@ dependencies { shadow 'com.github.ReplayMod.JavaBlend:2.79.0:a0696f8' - shadow "com.github.ReplayMod:ReplayStudio:2773270", shadeExclusions + shadow "com.github.ReplayMod:ReplayStudio:b29955e", shadeExclusions implementation(jGui){ transitive = false // FG 1.2 puts all MC deps into the compile configuration and we don't want to shade those