From 2dcfbd6435575c102a737749c2bb865fecce56c3 Mon Sep 17 00:00:00 2001 From: LindaJuffermans Date: Wed, 15 Jul 2020 15:49:44 +0200 Subject: [PATCH] Changed Replay Viewer panel button (from play button to hamburger) Added quickmode indicator (bottom-right with night vision indicator) --- .../com/replaymod/extras/HotkeyButtons.java | 10 +-- .../java/com/replaymod/extras/QuickMode.java | 65 ++++++++++++++++++ .../com/replaymod/extras/ReplayModExtras.java | 1 + .../resources/assets/replaymod/replay_gui.png | Bin 9764 -> 12340 bytes 4 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/replaymod/extras/QuickMode.java diff --git a/src/main/java/com/replaymod/extras/HotkeyButtons.java b/src/main/java/com/replaymod/extras/HotkeyButtons.java index cbd204cd..08d37b19 100644 --- a/src/main/java/com/replaymod/extras/HotkeyButtons.java +++ b/src/main/java/com/replaymod/extras/HotkeyButtons.java @@ -52,7 +52,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra { public Gui(ReplayMod mod, GuiReplayOverlay overlay) { toggleButton = new GuiTexturedButton(overlay).setSize(20, 20) - .setTexture(ReplayMod.TEXTURE, ReplayMod.TEXTURE_SIZE).setTexturePosH(0, 0) + .setTexture(ReplayMod.TEXTURE, ReplayMod.TEXTURE_SIZE).setTexturePosH(0, 120) .onClick(new Runnable() { @Override public void run() { @@ -74,7 +74,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra { final KeyBindingRegistry keyBindingRegistry = mod.getKeyBindingRegistry(); keyBindingRegistry.getKeyBindings().values().stream() - .sorted(Comparator.comparing(it -> I18n.translate(it.getId()))) + .sorted(Comparator.comparing(it -> I18n.translate(it.getTranslationKey()))) .forEachOrdered(keyBinding -> { GuiButton button = new GuiButton(){ @Override @@ -83,10 +83,10 @@ public class HotkeyButtons extends EventRegistrations implements Extra { String keyName = "???"; try { //#if MC>=11600 - //$$ keyName = keyBinding.getBoundKeyLocalizedText().asString(); + keyName = keyBinding.getBoundKeyLocalizedText().asString(); //#else //#if MC>=11400 - keyName = keyBinding.getLocalizedName(); + //$$ keyName = keyBinding.getLocalizedName(); //#else //$$ keyName = Keyboard.getKeyName(keyBinding.getKeyCode()); //#endif @@ -115,7 +115,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra { return new Dimension(Math.max(10, button.getMinSize().getWidth()) + 10, 20); } }).addElements(null, button), - new GuiLabel().setI18nText(keyBinding.getId()) + new GuiLabel().setI18nText(keyBinding.getTranslationKey()) )); }); diff --git a/src/main/java/com/replaymod/extras/QuickMode.java b/src/main/java/com/replaymod/extras/QuickMode.java new file mode 100644 index 00000000..33295a5a --- /dev/null +++ b/src/main/java/com/replaymod/extras/QuickMode.java @@ -0,0 +1,65 @@ +package com.replaymod.extras; + +import com.replaymod.core.ReplayMod; +import com.replaymod.core.events.PostRenderCallback; +import com.replaymod.core.events.PreRenderCallback; +import com.replaymod.core.versions.MCVer.Keyboard; +import com.replaymod.replay.ReplayHandler; +import com.replaymod.replay.ReplayModReplay; +import com.replaymod.replay.events.ReplayOpenedCallback; +import com.replaymod.replay.gui.overlay.GuiReplayOverlay; +import de.johni0702.minecraft.gui.element.GuiImage; +import de.johni0702.minecraft.gui.element.IGuiImage; +import de.johni0702.minecraft.gui.layout.HorizontalLayout; +import de.johni0702.minecraft.gui.utils.EventRegistrations; +import net.minecraft.client.MinecraftClient; + +public class QuickMode extends EventRegistrations implements Extra { + private ReplayModReplay module; + + private final IGuiImage indicator = new GuiImage().setTexture(ReplayMod.TEXTURE, 40, 100, 16, 16).setSize(16, 16); + + private MinecraftClient mc; + private boolean active; + //#if MC>=11400 + private double originalGamma; + //#else + //$$ private float originalGamma; + //#endif + + @Override + public void register(final ReplayMod mod) throws Exception { + this.module = ReplayModReplay.instance; + this.mc = mod.getMinecraft(); + + mod.getKeyBindingRegistry().registerKeyBinding("replaymod.input.quickmode", Keyboard.KEY_Q, new Runnable() { + @Override + public void run() { + active = !active; + ReplayHandler replayHandler = module.getReplayHandler(); + if (replayHandler == null) return; + updateIndicator(replayHandler.getOverlay()); + replayHandler.getReplaySender().setSyncModeAndWait(); + mod.runLater(() -> + replayHandler.ensureQuickModeInitialized(() -> { + replayHandler.setQuickMode(active); + replayHandler.getReplaySender().setAsyncMode(true); + }) + ); + } + }); + + register(); + } + + { on(ReplayOpenedCallback.EVENT, replayHandler -> updateIndicator(replayHandler.getOverlay())); } + private void updateIndicator(GuiReplayOverlay overlay) { + System.out.println("QuickMode::updateIndicator; active=" + (active ? "T" : "F")); + if (active) { + overlay.statusIndicatorPanel.addElements(new HorizontalLayout.Data(2), indicator); + } else { + overlay.statusIndicatorPanel.removeElement(indicator); + } + } + +} diff --git a/src/main/java/com/replaymod/extras/ReplayModExtras.java b/src/main/java/com/replaymod/extras/ReplayModExtras.java index 5a53c707..d22ed045 100644 --- a/src/main/java/com/replaymod/extras/ReplayModExtras.java +++ b/src/main/java/com/replaymod/extras/ReplayModExtras.java @@ -23,6 +23,7 @@ public class ReplayModExtras implements Module { PlayerOverview.class, YoutubeUpload.class, FullBrightness.class, + QuickMode.class, HotkeyButtons.class, OpenEyeExtra.class ); diff --git a/src/main/resources/assets/replaymod/replay_gui.png b/src/main/resources/assets/replaymod/replay_gui.png index 8a10a721509c70db2459ae4a54786554c3b8f9de..da905273c411c9f69047f9f480053edd98c166b7 100644 GIT binary patch literal 12340 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