From 0c5009db8d0ef6eb90015ee5e1a1a35e92076a06 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 08:49:15 +0200 Subject: [PATCH 1/8] Drop 1.17 in favor of 1.17.1 Primarily because fabric-api for 1.17 never received any updates, so fabric-screen-api isn't available for it. --- build.gradle | 3 --- jGui | 2 +- root.gradle.kts | 4 +--- settings.gradle.kts | 2 -- .../java/com/replaymod/render/mixin/MixinGlStateManager.java | 0 .../replay/mixin/MixinTileEntityEndPortalRenderer.java | 0 versions/{1.17 => 1.17.1}/src/main/resources/fabric.mod.json | 0 ...abric-1.17-1.16.4.txt => mapping-fabric-1.17.1-1.16.4.txt} | 0 8 files changed, 2 insertions(+), 9 deletions(-) rename versions/{1.17 => 1.17.1}/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java (100%) rename versions/{1.17 => 1.17.1}/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java (100%) rename versions/{1.17 => 1.17.1}/src/main/resources/fabric.mod.json (100%) rename versions/{mapping-fabric-1.17-1.16.4.txt => mapping-fabric-1.17.1-1.16.4.txt} (100%) diff --git a/build.gradle b/build.gradle index d0dafa8b..245c2fa7 100644 --- a/build.gradle +++ b/build.gradle @@ -243,7 +243,6 @@ dependencies { 11601: '1.16.1', 11603: '1.16.3', 11604: '1.16.4', - 11700: '1.17', 11701: '1.17.1', 11800: '1.18', 11801: '1.18.1', @@ -260,7 +259,6 @@ dependencies { 11601: '1.16.1+build.17:v2', 11603: '1.16.3+build.1:v2', 11604: '1.16.4+build.6:v2', - 11700: '1.17+build.13:v2', 11701: '1.17.1+build.29:v2', 11800: '1.18+build.1:v2', 11801: '1.18.1+build.1:v2', @@ -278,7 +276,6 @@ dependencies { 11601: '0.14.0+build.371-1.16', 11603: '0.17.1+build.394-1.16', 11604: '0.25.1+build.416-1.16', - 11700: '0.36.0+1.17', 11701: '0.37.1+1.17', 11800: '0.43.1+1.18', 11801: '0.43.1+1.18', diff --git a/jGui b/jGui index 34d9d6bb..5cbf5e32 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 34d9d6bb1531a425c4a4906920c6e235b24a8031 +Subproject commit 5cbf5e3228ee548139c881d05b8588bd7cb78a5f diff --git a/root.gradle.kts b/root.gradle.kts index 6f78706d..a20b9941 100755 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -201,7 +201,6 @@ preprocess { val mc11802 = createNode("1.18.2", 11802, "yarn") val mc11801 = createNode("1.18.1", 11801, "yarn") val mc11701 = createNode("1.17.1", 11701, "yarn") - val mc11700 = createNode("1.17", 11700, "yarn") val mc11604 = createNode("1.16.4", 11604, "yarn") val mc11601 = createNode("1.16.1", 11601, "yarn") val mc11502 = createNode("1.15.2", 11502, "yarn") @@ -225,8 +224,7 @@ preprocess { mc11900.link(mc11802, file("versions/mapping-fabric-1.19-1.18.2.txt")) mc11802.link(mc11801) mc11801.link(mc11701, file("versions/mapping-fabric-1.18.1-1.17.1.txt")) - mc11701.link(mc11700) - mc11700.link(mc11604, file("versions/mapping-fabric-1.17-1.16.4.txt")) + mc11701.link(mc11604, file("versions/mapping-fabric-1.17.1-1.16.4.txt")) mc11604.link(mc11601) mc11601.link(mc11502, file("versions/mapping-fabric-1.16.1-1.15.2.txt")) mc11502.link(mc11404, file("versions/mapping-fabric-1.15.2-1.14.4.txt")) diff --git a/settings.gradle.kts b/settings.gradle.kts index ea849bd8..9ab2e432 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -29,7 +29,6 @@ val jGuiVersions = listOf( "1.15.2", "1.16.1", "1.16.4", - "1.17", "1.17.1", "1.18.1", "1.18.2", @@ -55,7 +54,6 @@ val replayModVersions = listOf( "1.15.2", "1.16.1", "1.16.4", - "1.17", "1.17.1", "1.18.1", "1.18.2", diff --git a/versions/1.17/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java b/versions/1.17.1/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java similarity index 100% rename from versions/1.17/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java rename to versions/1.17.1/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java diff --git a/versions/1.17/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java b/versions/1.17.1/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java similarity index 100% rename from versions/1.17/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java rename to versions/1.17.1/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java diff --git a/versions/1.17/src/main/resources/fabric.mod.json b/versions/1.17.1/src/main/resources/fabric.mod.json similarity index 100% rename from versions/1.17/src/main/resources/fabric.mod.json rename to versions/1.17.1/src/main/resources/fabric.mod.json diff --git a/versions/mapping-fabric-1.17-1.16.4.txt b/versions/mapping-fabric-1.17.1-1.16.4.txt similarity index 100% rename from versions/mapping-fabric-1.17-1.16.4.txt rename to versions/mapping-fabric-1.17.1-1.16.4.txt From fb4ae1b60a7e5be1b9789aed5400025e1f6306bd Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 09:05:28 +0200 Subject: [PATCH 2/8] Delegate bindTexture to jGui's MCVer --- jGui | 2 +- src/main/java/com/replaymod/core/versions/MCVer.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/jGui b/jGui index 5cbf5e32..eacf3a15 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 5cbf5e3228ee548139c881d05b8588bd7cb78a5f +Subproject commit eacf3a1558d205303df0c5f09c6810edbe327ae5 diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index ab6d4763..ff348bfa 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -5,7 +5,6 @@ import com.replaymod.core.mixin.GuiScreenAccessor; import com.replaymod.replaystudio.lib.viaversion.api.protocol.packet.State; import com.replaymod.replaystudio.lib.viaversion.api.protocol.version.ProtocolVersion; import com.replaymod.replaystudio.protocol.PacketTypeRegistry; -import de.johni0702.minecraft.gui.MinecraftGuiRenderer; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector2f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; import net.minecraft.client.MinecraftClient; @@ -422,7 +421,7 @@ public class MCVer { } public static void bindTexture(Identifier id) { - new MinecraftGuiRenderer(null).bindTexture(id); + de.johni0702.minecraft.gui.versions.MCVer.bindTexture(id); } //#if MC<10900 From f92d6f5281a545d3d6795f79cb609cc783d25dc8 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 09:07:45 +0200 Subject: [PATCH 3/8] Fix overlay gui elements not moving on resize (fixes #841) --- jGui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jGui b/jGui index eacf3a15..0fc98877 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit eacf3a1558d205303df0c5f09c6810edbe327ae5 +Subproject commit 0fc98877c977f3bcce5d7ccfd5f4dd26131ba3e5 From 587eff59fe90a726adcf168ddca8382d0f09f05f Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 09:17:40 +0200 Subject: [PATCH 4/8] Rewrite main menu button injection code (closes #577, fixes #621) For 1.16.4+ only because we use parts of fabric-screen-api. --- build.gradle | 7 +- jGui | 2 +- .../java/com/replaymod/replay/Setting.java | 1 + .../replaymod/replay/handler/GuiHandler.java | 163 ++++++++++++++++++ 4 files changed, 170 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 245c2fa7..89f29de0 100644 --- a/build.gradle +++ b/build.gradle @@ -275,8 +275,8 @@ dependencies { 11502: '0.5.1+build.294-1.15', 11601: '0.14.0+build.371-1.16', 11603: '0.17.1+build.394-1.16', - 11604: '0.25.1+build.416-1.16', - 11701: '0.37.1+1.17', + 11604: '0.42.0+1.16', + 11701: '0.46.1+1.17', 11800: '0.43.1+1.18', 11801: '0.43.1+1.18', 11802: '0.47.9+1.18.2', @@ -296,6 +296,9 @@ dependencies { fabricApiModules.remove("keybindings-v0") fabricApiModules.add("key-binding-api-v1") } + if (mcVersion >= 11604) { + fabricApiModules.add("screen-api-v1") + } if (mcVersion >= 11700) { fabricApiModules.remove("networking-v0") fabricApiModules.add("networking-api-v1") diff --git a/jGui b/jGui index 0fc98877..05f8ac3e 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 0fc98877c977f3bcce5d7ccfd5f4dd26131ba3e5 +Subproject commit 05f8ac3ed5fc370058ce4d80ead71e82a7cecb54 diff --git a/src/main/java/com/replaymod/replay/Setting.java b/src/main/java/com/replaymod/replay/Setting.java index b2303c61..643f3834 100644 --- a/src/main/java/com/replaymod/replay/Setting.java +++ b/src/main/java/com/replaymod/replay/Setting.java @@ -12,6 +12,7 @@ public final class Setting extends SettingsRegistry.SettingKeys { public static final SettingsRegistry.MultipleChoiceSettingKeys CAMERA = new SettingsRegistry.MultipleChoiceSettingKeys<>( "replay", "camera", "replaymod.gui.settings.camera", "replaymod.camera.classic"); + public static final Setting LEGACY_MAIN_MENU_BUTTON = new Setting<>("legacyMainMenuButton", false); public static final SettingsRegistry.MultipleChoiceSettingKeys MAIN_MENU_BUTTON = new SettingsRegistry.MultipleChoiceSettingKeys<>( "replay", "mainMenuButton", null, MainMenuButtonPosition.DEFAULT.name()); diff --git a/src/main/java/com/replaymod/replay/handler/GuiHandler.java b/src/main/java/com/replaymod/replay/handler/GuiHandler.java index a8fec2a3..8e9def31 100644 --- a/src/main/java/com/replaymod/replay/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/replay/handler/GuiHandler.java @@ -16,6 +16,23 @@ import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.AbstractButtonWidget; +//#if MC>=11904 +//#else +import net.minecraft.client.MinecraftClient; +//#endif + +//#if MC>=11903 +//$$ import net.minecraft.client.gui.tooltip.Tooltip; +//#endif + +//#if MC>=11604 +import de.johni0702.minecraft.gui.MinecraftGuiRenderer; +import net.fabricmc.fabric.api.client.screen.v1.Screens; +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.client.util.math.MatrixStack; +//#endif + //#if MC>=11600 import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; @@ -36,6 +53,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; +import java.util.List; import java.util.Optional; import java.util.function.Consumer; import java.util.stream.Stream; @@ -124,6 +142,7 @@ public class GuiHandler extends EventRegistrations { b.getWidth(), b.getHeight(), "replaymod.gui.exit", + null, this::onButton )); } else if (id.equals(BUTTON_ADVANCEMENTS)) { @@ -226,6 +245,116 @@ public class GuiHandler extends EventRegistrations { return; } + //#if MC>=11604 + if (mod.getCore().getSettingsRegistry().get(Setting.LEGACY_MAIN_MENU_BUTTON)) { + legacyInjectIntoMainMenu(guiScreen, buttonList); + } else { + properInjectIntoMainMenu(guiScreen); + } + //#else + //$$ legacyInjectIntoMainMenu(guiScreen, buttonList); + //#endif + } + + //#if MC>=11604 + private void properInjectIntoMainMenu(Screen screen) { + List buttonList = Screens.getButtons(screen); + MainMenuButtonPosition buttonPosition = MainMenuButtonPosition.valueOf(mod.getCore().getSettingsRegistry().get(Setting.MAIN_MENU_BUTTON)); + + // Workaround for FancyMenu v2 initializing the screen twice, likely fixed in v3 + if (isFancyMenu2Installed()) { + for (AbstractButtonWidget button : buttonList) { + if (button instanceof InjectedButton) { + return; + } + } + } + + Point pos; + if (buttonPosition == MainMenuButtonPosition.BIG) { + int x = screen.width / 2 - 100; + // We want to position our button below the realms button + Optional targetButton = findButton(buttonList, "menu.online", 14) + .map(Optional::of) + // or, if someone removed the realms button, we'll alternatively take the multiplayer one + .orElseGet(() -> findButton(buttonList, "menu.multiplayer", 2)); + + int y = targetButton + // if we found some button, put our button at its position (we'll move it out of the way shortly) + .map(it -> it.y) + // and if we can't even find that one, then just guess + .orElse(screen.height / 4 + 10 + 4 * 24); + + // Move all buttons above or at our one upwards + moveAllButtonsInRect(buttonList, + x, x + 200, + Integer.MIN_VALUE, y, + -24); + + pos = new Point(x, y); + } else { + pos = determineButtonPos(buttonPosition, screen, buttonList); + } + + AbstractButtonWidget replayViewerButton; + if (buttonPosition == MainMenuButtonPosition.BIG) { + replayViewerButton = new InjectedButton( + screen, BUTTON_REPLAY_VIEWER, + pos.getX(), pos.getY(), + 200, 20, + "replaymod.gui.replayviewer", + null, + this::onButton + ); + } else { + replayViewerButton = new InjectedButton( + screen, BUTTON_REPLAY_VIEWER, + pos.getX(), pos.getY(), + 20, 20, + "", + "replaymod.gui.replayviewer", + this::onButton + ) { + @Override + //#if MC>=11904 + //$$ public void renderButton(MatrixStack context, int mouseX, int mouseY, float delta) { + //$$ super.renderButton(context, mouseX, mouseY, delta); + //#else + protected void renderBg(MatrixStack context, MinecraftClient client, int mouseX, int mouseY) { + super.renderBg(context, client, mouseX, mouseY); + //#endif + + MinecraftGuiRenderer renderer = new MinecraftGuiRenderer(context); + renderer.bindTexture(GuiReplayButton.ICON); + renderer.drawTexturedRect( + this.x + 3, this.y + 3, + 0, 0, + this.width - 6, this.height - 6, + 1, 1, + 1, 1 + ); + } + }; + } + + int index = determineButtonIndex(buttonList, replayViewerButton); + if (index != -1) { + buttonList.add(index, replayViewerButton); + } else { + buttonList.add(replayViewerButton); + } + } + + private boolean isFancyMenu2Installed() { + ModContainer mod = FabricLoader.getInstance().getModContainer("fancymenu").orElse(null); + if (mod == null) { + return false; + } + return mod.getMetadata().getVersion().getFriendlyString().startsWith("2."); + } + //#endif + + private void legacyInjectIntoMainMenu(Screen guiScreen, Collection buttonList) { boolean isCustomMainMenuMod = guiScreen.getClass().getName().endsWith("custommainmenu.gui.GuiFakeMain"); MainMenuButtonPosition buttonPosition = MainMenuButtonPosition.valueOf(mod.getCore().getSettingsRegistry().get(Setting.MAIN_MENU_BUTTON)); @@ -280,6 +409,7 @@ public class GuiHandler extends EventRegistrations { 200, 20, "replaymod.gui.replayviewer", + null, this::onButton ); //#if FABRIC<=0 @@ -356,6 +486,27 @@ public class GuiHandler extends EventRegistrations { } } + private int determineButtonIndex(Collection buttons, AbstractButtonWidget button) { + AbstractButtonWidget best = null; + int bestIndex = -1; + + int index = 0; + for (AbstractButtonWidget other : buttons) { + if (other.y > button.y || other.y == button.y && other.x > button.x) { + index++; + continue; + } + + if (best == null || other.y > best.y || other.y == best.y && other.x > best.x) { + best = other; + bestIndex = index + 1; + } + + index++; + } + return bestIndex; + } + //#if MC>=11400 private void onButton(InjectedButton button) { Screen guiScreen = button.guiScreen; @@ -396,6 +547,7 @@ public class GuiHandler extends EventRegistrations { public final int id; private Consumer onClick; public InjectedButton(Screen guiScreen, int buttonId, int x, int y, int width, int height, String buttonText, + String tooltip, //#if MC>=11400 Consumer onClick //#else @@ -418,6 +570,11 @@ public class GuiHandler extends EventRegistrations { //#if MC>=11400 , self -> onClick.accept((InjectedButton) self) //#endif + //#if MC>=11600 && MC<11903 + , tooltip != null + ? (button, matrices, mouseX, mouseY) -> guiScreen.renderTooltip(matrices, new TranslatableText(tooltip), mouseX, mouseY) + : EMPTY + //#endif //#if MC>=11903 //$$ , DEFAULT_NARRATION_SUPPLIER //#endif @@ -429,6 +586,12 @@ public class GuiHandler extends EventRegistrations { //#else //$$ this.onClick = null; //#endif + + //#if MC>=11903 + //$$ if (tooltip != null) { + //$$ setTooltip(Tooltip.of(Text.translatable(tooltip))); + //$$ } + //#endif } //#if MC>=11400 && MC<11400 From 96a05e256f80595b9e5a68d18a9a5a63c3a1f076 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 09:34:15 +0200 Subject: [PATCH 5/8] Add MixinExtras on 1.16.4+ We'll use it in 1.20 mixins. Unclear what minimal fabric-loader version it requires, so in the interest of keeping older versions compatible with OptiFabric (old versions of which aren't compatible with the latest fabric-loader), we'll add it to 1.16.4+ only. --- build.gradle | 5 +++++ .../java/com/replaymod/core/MixinExtrasInit.java | 14 ++++++++++++++ src/main/resources/fabric.mod.json | 3 ++- versions/1.15.2/src/main/resources/fabric.mod.json | 3 ++- versions/1.17.1/src/main/resources/fabric.mod.json | 3 ++- 5 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/replaymod/core/MixinExtrasInit.java diff --git a/build.gradle b/build.gradle index 89f29de0..6b655eda 100644 --- a/build.gradle +++ b/build.gradle @@ -330,6 +330,11 @@ dependencies { annotationProcessor 'org.ow2.asm:asm-tree:6.2' annotationProcessor 'org.apache.logging.log4j:log4j-core:2.0-beta9' } + + if (mcVersion >= 11604) { + shadow(annotationProcessor('com.github.LlamaLad7:MixinExtras:0.1.1')) + } + shadow 'com.googlecode.mp4parser:isoparser:1.1.7' shadow 'org.apache.commons:commons-exec:1.3' shadow 'com.google.apis:google-api-services-youtube:v3-rev178-1.22.0', shadeExclusions diff --git a/src/main/java/com/replaymod/core/MixinExtrasInit.java b/src/main/java/com/replaymod/core/MixinExtrasInit.java new file mode 100644 index 00000000..4272ed65 --- /dev/null +++ b/src/main/java/com/replaymod/core/MixinExtrasInit.java @@ -0,0 +1,14 @@ +//#if FABRIC>=1 +package com.replaymod.core; + +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; + +public class MixinExtrasInit implements PreLaunchEntrypoint { + @Override + public void onPreLaunch() { + //#if MC>=11604 + com.llamalad7.mixinextras.MixinExtrasBootstrap.init(); + //#endif + } +} +//#endif diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ef5522ec..f8a3356a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,7 +29,8 @@ "com.replaymod.render.utils.FlawlessFrames::registerConsumer" ], "preLaunch": [ - "com.replaymod.core.DummyChainLoadEntryPoint" + "com.replaymod.core.DummyChainLoadEntryPoint", + "com.replaymod.core.MixinExtrasInit" ], "mm:early_risers": [ "com.replaymod.core.ReplayModMMLauncher" diff --git a/versions/1.15.2/src/main/resources/fabric.mod.json b/versions/1.15.2/src/main/resources/fabric.mod.json index 73fe9d6e..9f1f7203 100644 --- a/versions/1.15.2/src/main/resources/fabric.mod.json +++ b/versions/1.15.2/src/main/resources/fabric.mod.json @@ -29,7 +29,8 @@ "com.replaymod.render.utils.FlawlessFrames::registerConsumer" ], "preLaunch": [ - "com.replaymod.core.DummyChainLoadEntryPoint" + "com.replaymod.core.DummyChainLoadEntryPoint", + "com.replaymod.core.MixinExtrasInit" ], "mm:early_risers": [ "com.replaymod.core.ReplayModMMLauncher" diff --git a/versions/1.17.1/src/main/resources/fabric.mod.json b/versions/1.17.1/src/main/resources/fabric.mod.json index dbb99550..29346864 100644 --- a/versions/1.17.1/src/main/resources/fabric.mod.json +++ b/versions/1.17.1/src/main/resources/fabric.mod.json @@ -29,7 +29,8 @@ "com.replaymod.render.utils.FlawlessFrames::registerConsumer" ], "preLaunch": [ - "com.replaymod.core.DummyChainLoadEntryPoint" + "com.replaymod.core.DummyChainLoadEntryPoint", + "com.replaymod.core.MixinExtrasInit" ], "mm:early_risers": [ "com.replaymod.core.ReplayModMMLauncher" From 77265501312dd3d62209835b4e088c9fe47f1054 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 09:39:48 +0200 Subject: [PATCH 6/8] Port to MC 1.20 --- build.gradle | 9 +++++++-- jGui | 2 +- root.gradle.kts | 2 ++ settings.gradle.kts | 2 ++ .../com/replaymod/core/versions/Patterns.java | 9 +++++++++ .../recording/gui/GuiRecordingOverlay.java | 11 ++++++++++- .../render/mixin/Mixin_ChromaKeyForceSky.java | 4 ++++ .../render/rendering/VideoRenderer.java | 19 ++++++++++++++++--- .../replaymod/replay/FullReplaySender.java | 10 ++++++++++ .../replaymod/replay/InputReplayTimer.java | 3 ++- .../com/replaymod/replay/ReplayHandler.java | 15 +++++++++++++-- .../replaymod/replay/camera/CameraEntity.java | 5 +++++ .../replaymod/replay/handler/GuiHandler.java | 9 ++++++++- .../com/replaymod/core/LoadingPlugin.java | 1 + 14 files changed, 90 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 6b655eda..3c086e01 100644 --- a/build.gradle +++ b/build.gradle @@ -252,6 +252,7 @@ dependencies { 11902: '1.19.2', 11903: '1.19.3-rc3', 11904: '1.19.4', + 12000: '1.20', ][mcVersion] mappings 'net.fabricmc:yarn:' + [ 11404: '1.14.4+build.16', @@ -268,6 +269,7 @@ dependencies { 11902: '1.19.2+build.28:v2', 11903: '1.19.3-rc3+build.1:v2', 11904: '1.19.4+build.1:v2', + 12000: '1.20+build.1:v2', ][mcVersion] modImplementation 'net.fabricmc:fabric-loader:0.14.11' def fabricApiVersion = [ @@ -285,6 +287,7 @@ dependencies { 11902: '0.68.0+1.19.2', 11903: '0.68.1+1.19.3', 11904: '0.76.0+1.19.4', + 12000: '0.83.0+1.20', ][mcVersion] def fabricApiModules = [ "api-base", @@ -365,7 +368,7 @@ dependencies { shadow 'com.github.ReplayMod.JavaBlend:2.79.0:a0696f8' - shadow "com.github.ReplayMod:ReplayStudio:d3f8506", shadeExclusions + shadow "com.github.ReplayMod:ReplayStudio:a1e2b83", shadeExclusions // FIXME this should be pulled in by ReplayStudio, and IntelliJ sees it, but javac for some reason does not implementation 'com.github.viaversion:opennbt:0a02214' // 2.0-SNAPSHOT (ViaVersion Edition) @@ -376,7 +379,9 @@ dependencies { shadow 'com.github.ReplayMod:lwjgl-utils:27dcd66' if (FABRIC) { - if (mcVersion >= 11904) { + if (mcVersion >= 12000) { + modImplementation 'com.terraformersmc:modmenu:7.0.1' + } else if (mcVersion >= 11904) { modImplementation 'com.terraformersmc:modmenu:6.1.0-rc.4' } else if (mcVersion >= 11903) { modImplementation 'com.terraformersmc:modmenu:5.0.0-alpha.4' diff --git a/jGui b/jGui index 05f8ac3e..7d002840 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 05f8ac3ed5fc370058ce4d80ead71e82a7cecb54 +Subproject commit 7d002840c48578c85630a0e8e9b0d7b55725816b diff --git a/root.gradle.kts b/root.gradle.kts index a20b9941..eee42c32 100755 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -193,6 +193,7 @@ val doRelease by tasks.registering { defaultTasks("bundleJar") preprocess { + val mc12000 = createNode("1.20", 12000, "yarn") val mc11904 = createNode("1.19.4", 11904, "yarn") val mc11903 = createNode("1.19.3", 11903, "yarn") val mc11902 = createNode("1.19.2", 11902, "yarn") @@ -217,6 +218,7 @@ preprocess { val mc10800 = createNode("1.8", 10800, "srg") val mc10710 = createNode("1.7.10", 10710, "srg") + mc12000.link(mc11904) mc11904.link(mc11903) mc11903.link(mc11902, file("versions/mapping-fabric-1.19.3-1.19.2.txt")) mc11902.link(mc11901) diff --git a/settings.gradle.kts b/settings.gradle.kts index 9ab2e432..7ebd6552 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -37,6 +37,7 @@ val jGuiVersions = listOf( "1.19.2", "1.19.3", "1.19.4", + "1.20", ) val replayModVersions = listOf( // "1.7.10", @@ -62,6 +63,7 @@ val replayModVersions = listOf( "1.19.2", "1.19.3", "1.19.4", + "1.20", ) rootProject.buildFileName = "root.gradle.kts" diff --git a/src/main/java/com/replaymod/core/versions/Patterns.java b/src/main/java/com/replaymod/core/versions/Patterns.java index c794d052..bc52be00 100644 --- a/src/main/java/com/replaymod/core/versions/Patterns.java +++ b/src/main/java/com/replaymod/core/versions/Patterns.java @@ -897,4 +897,13 @@ class Patterns { //#else //$$ @Pattern private static void REGISTRIES() {} //#endif + + @Pattern + public World getWorld(Entity entity) { + //#if MC>=12000 + //$$ return entity.getWorld(); + //#else + return entity.world; + //#endif + } } diff --git a/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java b/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java index ab9ee2e6..90b82d96 100644 --- a/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java +++ b/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java @@ -9,12 +9,17 @@ import de.johni0702.minecraft.gui.versions.callbacks.RenderHudCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.resource.language.I18n; -import net.minecraft.client.util.math.MatrixStack; import static com.replaymod.core.ReplayMod.TEXTURE; import static com.replaymod.core.ReplayMod.TEXTURE_SIZE; import static com.mojang.blaze3d.platform.GlStateManager.*; +//#if MC>=12000 +//$$ import net.minecraft.client.gui.DrawContext; +//#else +import net.minecraft.client.util.math.MatrixStack; +//#endif + /** * Renders overlay during recording. */ @@ -33,7 +38,11 @@ public class GuiRecordingOverlay extends EventRegistrations { * Render the recording icon and text in the top left corner of the screen. */ { on(RenderHudCallback.EVENT, (stack, partialTicks) -> renderRecordingIndicator(stack)); } + //#if MC>=12000 + //$$ private void renderRecordingIndicator(DrawContext stack) { + //#else private void renderRecordingIndicator(MatrixStack stack) { + //#endif if (guiControls.isStopped()) return; if (settingsRegistry.get(Setting.INDICATOR)) { TextRenderer fontRenderer = mc.textRenderer; diff --git a/src/main/java/com/replaymod/render/mixin/Mixin_ChromaKeyForceSky.java b/src/main/java/com/replaymod/render/mixin/Mixin_ChromaKeyForceSky.java index d619f02c..ade1ffee 100644 --- a/src/main/java/com/replaymod/render/mixin/Mixin_ChromaKeyForceSky.java +++ b/src/main/java/com/replaymod/render/mixin/Mixin_ChromaKeyForceSky.java @@ -27,6 +27,9 @@ import net.minecraft.client.render.WorldRenderer; public abstract class Mixin_ChromaKeyForceSky { @Shadow @Final private MinecraftClient client; + //#if MC>=11700 + //$$ // Sky appears to be rendered unconditionally now + //#else //#if MC>=11500 @ModifyConstant(method = "render", constant = @Constant(intValue = 4)) //#elseif MC>=11400 @@ -44,4 +47,5 @@ public abstract class Mixin_ChromaKeyForceSky { } return value; } + //#endif } diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index 6ba71480..b1b57737 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -41,6 +41,11 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.client.render.RenderTickCounter; import org.lwjgl.glfw.GLFW; +//#if MC>=12000 +//$$ import com.mojang.blaze3d.systems.VertexSorter; +//$$ import net.minecraft.client.gui.DrawContext; +//#endif + //#if MC>=11700 //$$ import net.minecraft.client.render.DiffuseLighting; //$$ import net.minecraft.util.math.Matrix4f; @@ -492,7 +497,11 @@ public class VideoRenderer implements RenderInfo { //$$ (float) (window.getFramebufferHeight() / window.getScaleFactor()), //$$ 1000, //$$ 3000 - //$$ )); + //$$ ) + //#if MC>=12000 + //$$ , VertexSorter.BY_Z + //#endif + //$$ ); //$$ MatrixStack matrixStack = RenderSystem.getModelViewStack(); //$$ matrixStack.loadIdentity(); //$$ matrixStack.translate(0, 0, -2000); @@ -544,7 +553,9 @@ public class VideoRenderer implements RenderInfo { try { mc.currentScreen = gui.toMinecraft(); mc.getOverlay().render( - //#if MC>=11600 + //#if MC>=12000 + //$$ new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers()), + //#elseif MC>=11600 new MatrixStack(), //#endif mouseX, mouseY, 0); @@ -554,7 +565,9 @@ public class VideoRenderer implements RenderInfo { } else { gui.toMinecraft().tick(); gui.toMinecraft().render( - //#if MC>=11600 + //#if MC>=12000 + //$$ new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers()), + //#elseif MC>=11600 new MatrixStack(), //#endif mouseX, mouseY, 0); diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index 5eab0b60..f6c2af20 100644 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -440,7 +440,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#endif LightingProvider provider = world.getChunkManager().getLightingProvider(); while (provider.hasUpdates()) { + //#if MC>=12000 + //$$ provider.doLightUpdates(); + //#else provider.doLightUpdates(Integer.MAX_VALUE, true, true); + //#endif } } }; @@ -712,6 +716,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#if MC>=11900 //$$ , java.util.Optional.empty() //#endif + //#if MC>=12000 + //$$ , packet.portalCooldown() + //#endif ); //#else //#if MC>=10800 @@ -775,6 +782,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#if MC>=11900 //$$ , java.util.Optional.empty() //#endif + //#if MC>=12000 + //$$ , respawn.getPortalCooldown() + //#endif ); //#else //#if MC>=10809 diff --git a/src/main/java/com/replaymod/replay/InputReplayTimer.java b/src/main/java/com/replaymod/replay/InputReplayTimer.java index 0b3e8b4a..5b0b3d15 100644 --- a/src/main/java/com/replaymod/replay/InputReplayTimer.java +++ b/src/main/java/com/replaymod/replay/InputReplayTimer.java @@ -5,6 +5,7 @@ import com.replaymod.core.utils.WrappedTimer; import com.replaymod.core.versions.MCVer; import com.replaymod.replay.camera.CameraController; import com.replaymod.replay.camera.CameraEntity; +import de.johni0702.minecraft.gui.versions.ScreenExt; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.RenderTickCounter; @@ -78,7 +79,7 @@ public class InputReplayTimer extends WrappedTimer { // tick speed may vary or there may not be any ticks at all (when the replay is paused) if (mod.getReplayHandler() != null && mc.world != null && mc.player != null) { //#if MC>=11400 - if (mc.currentScreen == null || mc.currentScreen.passEvents) { + if (mc.currentScreen == null || ((ScreenExt) mc.currentScreen).doesPassEvents()) { GLFW.glfwPollEvents(); MCVer.processKeyBinds(); } diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 1e9278d6..5718557b 100644 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -42,6 +42,11 @@ import net.minecraft.network.ClientConnection; import java.io.IOException; import java.util.*; +//#if MC>=12000 +//$$ import com.mojang.blaze3d.systems.VertexSorter; +//$$ import net.minecraft.client.gui.DrawContext; +//#endif + //#if MC>=11904 //$$ import net.minecraft.network.PacketBundler; //#endif @@ -653,7 +658,11 @@ public class ReplayHandler { //$$ (float) (window.getFramebufferHeight() / window.getScaleFactor()), //$$ 1000, //$$ 3000 - //$$ )); + //$$ ) + //#if MC>=12000 + //$$ , VertexSorter.BY_Z + //#endif + //$$ ); //$$ MatrixStack matrixStack = RenderSystem.getModelViewStack(); //$$ matrixStack.loadIdentity(); //$$ matrixStack.translate(0, 0, -2000); @@ -676,7 +685,9 @@ public class ReplayHandler { //#endif guiScreen.toMinecraft().init(mc, window.getScaledWidth(), window.getScaledHeight()); - //#if MC>=11600 + //#if MC>=12000 + //$$ guiScreen.toMinecraft().render(new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers()), 0, 0, 0); + //#elseif MC>=11600 guiScreen.toMinecraft().render(new MatrixStack(), 0, 0, 0); //#else //#if MC>=11400 diff --git a/src/main/java/com/replaymod/replay/camera/CameraEntity.java b/src/main/java/com/replaymod/replay/camera/CameraEntity.java index 19ca60cd..aef121e9 100644 --- a/src/main/java/com/replaymod/replay/camera/CameraEntity.java +++ b/src/main/java/com/replaymod/replay/camera/CameraEntity.java @@ -332,7 +332,12 @@ public class CameraEntity public void afterSpawn() { // Make sure our world is up-to-date in case of world changes if (this.client.world != null) { + // FIXME cannot use Patters because `setWorld` is `protected` in 1.20 + //#if MC>=12000 + //$$ this.setWorld(this.client.world); + //#else this.world = this.client.world; + //#endif } super.afterSpawn(); } diff --git a/src/main/java/com/replaymod/replay/handler/GuiHandler.java b/src/main/java/com/replaymod/replay/handler/GuiHandler.java index 8e9def31..5621b424 100644 --- a/src/main/java/com/replaymod/replay/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/replay/handler/GuiHandler.java @@ -16,6 +16,10 @@ import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.AbstractButtonWidget; +//#if MC>=12000 +//$$ import net.minecraft.client.gui.DrawContext; +//#endif + //#if MC>=11904 //#else import net.minecraft.client.MinecraftClient; @@ -316,7 +320,10 @@ public class GuiHandler extends EventRegistrations { this::onButton ) { @Override - //#if MC>=11904 + //#if MC>=12000 + //$$ public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { + //$$ super.renderButton(context, mouseX, mouseY, delta); + //#elseif MC>=11904 //$$ public void renderButton(MatrixStack context, int mouseX, int mouseY, float delta) { //$$ super.renderButton(context, mouseX, mouseY, delta); //#else diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/LoadingPlugin.java b/versions/1.12.2/src/main/java/com/replaymod/core/LoadingPlugin.java index cf6d0389..570f53e2 100644 --- a/versions/1.12.2/src/main/java/com/replaymod/core/LoadingPlugin.java +++ b/versions/1.12.2/src/main/java/com/replaymod/core/LoadingPlugin.java @@ -30,6 +30,7 @@ public class LoadingPlugin implements IFMLLoadingPlugin { MixinBootstrap.init(); } + Mixins.addConfiguration("mixins.jgui.json"); Mixins.addConfiguration("mixins.core.replaymod.json"); Mixins.addConfiguration("mixins.recording.replaymod.json"); Mixins.addConfiguration("mixins.render.replaymod.json"); From d8c6ce9b5ef3ac1deb9f605e858c1d5e8d5440b8 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 12 Jun 2023 11:04:25 +0200 Subject: [PATCH 7/8] Clean up 1.17 `.gitkeep` file --- versions/1.17/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 versions/1.17/.gitkeep diff --git a/versions/1.17/.gitkeep b/versions/1.17/.gitkeep deleted file mode 100644 index e69de29b..00000000 From 24237557f1201f0ae8bbc4be6f6c11f7939d2609 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Tue, 20 Jun 2023 09:30:13 +0200 Subject: [PATCH 8/8] Port to 1.20.1 --- build.gradle | 6 +++--- jGui | 2 +- root.gradle.kts | 4 ++-- settings.gradle.kts | 4 ++-- versions/1.20.1/.gitkeep | 0 5 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 versions/1.20.1/.gitkeep diff --git a/build.gradle b/build.gradle index 3c086e01..4114ed5e 100644 --- a/build.gradle +++ b/build.gradle @@ -252,7 +252,7 @@ dependencies { 11902: '1.19.2', 11903: '1.19.3-rc3', 11904: '1.19.4', - 12000: '1.20', + 12001: '1.20.1', ][mcVersion] mappings 'net.fabricmc:yarn:' + [ 11404: '1.14.4+build.16', @@ -269,7 +269,7 @@ dependencies { 11902: '1.19.2+build.28:v2', 11903: '1.19.3-rc3+build.1:v2', 11904: '1.19.4+build.1:v2', - 12000: '1.20+build.1:v2', + 12001: '1.20.1+build.2:v2', ][mcVersion] modImplementation 'net.fabricmc:fabric-loader:0.14.11' def fabricApiVersion = [ @@ -287,7 +287,7 @@ dependencies { 11902: '0.68.0+1.19.2', 11903: '0.68.1+1.19.3', 11904: '0.76.0+1.19.4', - 12000: '0.83.0+1.20', + 12001: '0.83.1+1.20.1', ][mcVersion] def fabricApiModules = [ "api-base", diff --git a/jGui b/jGui index 7d002840..eb3297f5 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 7d002840c48578c85630a0e8e9b0d7b55725816b +Subproject commit eb3297f5a62f3b4c8b8445be85b95205d54763b7 diff --git a/root.gradle.kts b/root.gradle.kts index eee42c32..522c0c30 100755 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -193,7 +193,7 @@ val doRelease by tasks.registering { defaultTasks("bundleJar") preprocess { - val mc12000 = createNode("1.20", 12000, "yarn") + val mc12001 = createNode("1.20.1", 12001, "yarn") val mc11904 = createNode("1.19.4", 11904, "yarn") val mc11903 = createNode("1.19.3", 11903, "yarn") val mc11902 = createNode("1.19.2", 11902, "yarn") @@ -218,7 +218,7 @@ preprocess { val mc10800 = createNode("1.8", 10800, "srg") val mc10710 = createNode("1.7.10", 10710, "srg") - mc12000.link(mc11904) + mc12001.link(mc11904) mc11904.link(mc11903) mc11903.link(mc11902, file("versions/mapping-fabric-1.19.3-1.19.2.txt")) mc11902.link(mc11901) diff --git a/settings.gradle.kts b/settings.gradle.kts index 7ebd6552..6d230a13 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -37,7 +37,7 @@ val jGuiVersions = listOf( "1.19.2", "1.19.3", "1.19.4", - "1.20", + "1.20.1", ) val replayModVersions = listOf( // "1.7.10", @@ -63,7 +63,7 @@ val replayModVersions = listOf( "1.19.2", "1.19.3", "1.19.4", - "1.20", + "1.20.1", ) rootProject.buildFileName = "root.gradle.kts" diff --git a/versions/1.20.1/.gitkeep b/versions/1.20.1/.gitkeep new file mode 100644 index 00000000..e69de29b