diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index de5ae5c5..0df685db 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -42,6 +42,12 @@ import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget; import java.util.concurrent.CompletableFuture; + +//#if MC>=11600 +//$$ import net.minecraft.text.TranslatableText; +//#else +import net.minecraft.client.resource.language.I18n; +//#endif //#else //$$ import com.google.common.util.concurrent.FutureCallback; //$$ import com.google.common.util.concurrent.Futures; @@ -119,6 +125,7 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.Callable; import java.util.function.Consumer; +import java.util.Optional; /** * Abstraction over things that have changed between different MC versions. @@ -603,6 +610,31 @@ public class MCVer { //#endif } + //#if MC>=11400 + public static Optional findButton(List buttonList, @SuppressWarnings("unused") String text, @SuppressWarnings("unused") int id) { + //#if MC>=11600 + //$$ final TranslatableText message = new TranslatableText(text); + //#else + final String message = I18n.translate(text); + //#endif + for (AbstractButtonWidget b : buttonList) { + if (message.equals(b.getMessage())) { + return Optional.of(b); + } + } + return Optional.empty(); + } + //#else + //$$ public static Optional findButton(List buttonList, @SuppressWarnings("unused") String text, int id) { + //$$ for (GuiButton b : buttonList) { + //$$ if (b.id == id) { + //$$ return Optional.of(b); + //$$ } + //$$ } + //$$ return Optional.empty(); + //$$ } + //#endif + //#if MC>=11400 public static void processKeyBinds() { ((MinecraftMethodAccessor) getMinecraft()).replayModProcessKeyBinds(); diff --git a/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java b/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java index d4b2d5de..c34c21e2 100644 --- a/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java +++ b/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java @@ -7,13 +7,13 @@ import com.replaymod.editor.gui.MarkerProcessor; import com.replaymod.recording.Setting; import com.replaymod.recording.packet.PacketListener; import de.johni0702.minecraft.gui.container.GuiPanel; -import de.johni0702.minecraft.gui.container.GuiScreen; import de.johni0702.minecraft.gui.container.VanillaGuiScreen; import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.utils.EventRegistrations; import net.minecraft.client.gui.screen.GameMenuScreen; +import net.minecraft.client.gui.screen.Screen; //#if FABRIC>=1 import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; @@ -25,6 +25,14 @@ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; //$$ import static com.replaymod.core.versions.MCVer.getGui; //#endif +//#if MC>=11400 +import net.minecraft.client.gui.widget.AbstractButtonWidget; +//#endif + +import java.util.List; +import java.util.Optional; +import java.util.function.Function; + public class GuiRecordingControls extends EventRegistrations { private ReplayMod core; private PacketListener packetListener; @@ -70,21 +78,6 @@ public class GuiRecordingControls extends EventRegistrations { updateState(); } - //#if FABRIC>=1 - { on(InitScreenCallback.EVENT, (screen, buttons) -> { - if (screen instanceof GameMenuScreen) { - show((GameMenuScreen) screen); - } - }); } - //#else - //$$ @SubscribeEvent - //$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { - //$$ if (getGui(event) instanceof IngameMenuScreen) { - //$$ show((IngameMenuScreen) getGui(event)); - //$$ } - //$$ } - //#endif - private void updateState() { buttonPauseResume.setI18nLabel("replaymod.gui.recording." + (paused ? "resume" : "pause")); buttonStartStop.setI18nLabel("replaymod.gui.recording." + (stopped ? "start" : "stop")); @@ -92,12 +85,32 @@ public class GuiRecordingControls extends EventRegistrations { buttonPauseResume.setEnabled(!stopped); } - public void show(GameMenuScreen gui) { - int modMenuOffset = MCVer.isModLoaded("modmenu") ? 12 : 0; - VanillaGuiScreen.setup(gui).setLayout(new CustomLayout() { + //#if FABRIC>=1 + { on(InitScreenCallback.EVENT, this::injectIntoIngameMenu); } + private void injectIntoIngameMenu(Screen guiScreen, List buttonList) { + //#else + //$$ @SubscribeEvent + //$$ public void injectIntoIngameMenu(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ Screen guiScreen = getGui(event); + //#if MC>=11400 + //$$ List buttonList = MCVer.getButtonList(event); + //#else + //$$ List buttonList = MCVer.getButtonList(event); + //#endif + //#endif + if (!(guiScreen instanceof GameMenuScreen)) { + return; + } + Function yPos = + MCVer.findButton(buttonList, "menu.returnToMenu", 1) + .map(Optional::of) + .orElse(MCVer.findButton(buttonList, "menu.disconnect", 1)) + .>map(it -> (height) -> it.y) + .orElse((height) -> height / 4 + 120 - 16); + VanillaGuiScreen.setup(guiScreen).setLayout(new CustomLayout() { @Override - protected void layout(GuiScreen container, int width, int height) { - pos(panel, width / 2 - 100, height / 4 + 128 + modMenuOffset); + protected void layout(de.johni0702.minecraft.gui.container.GuiScreen container, int width, int height) { + pos(panel, width / 2 - 100, yPos.apply(height) + 16 + 8); } }).addElements(null, panel); }