From 5bc5ef5fb8deba64853b56dd7adc23348f77d7e0 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Tue, 16 Jan 2018 14:21:38 +0100 Subject: [PATCH] Add buttons in SP/MP menu for quick en-/disabling of recording --- jGui | 2 +- .../recording/ReplayModRecording.java | 3 ++ .../recording/handler/GuiHandler.java | 52 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/replaymod/recording/handler/GuiHandler.java diff --git a/jGui b/jGui index 9e84e724..59ef5390 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 9e84e724aaf7de21a06fd534faccdfdc6740fc28 +Subproject commit 59ef53903386beda93850351b78c420e7f84b31f diff --git a/src/main/java/com/replaymod/recording/ReplayModRecording.java b/src/main/java/com/replaymod/recording/ReplayModRecording.java index b2458985..afdd4340 100644 --- a/src/main/java/com/replaymod/recording/ReplayModRecording.java +++ b/src/main/java/com/replaymod/recording/ReplayModRecording.java @@ -3,6 +3,7 @@ package com.replaymod.recording; import com.replaymod.core.ReplayMod; import com.replaymod.core.utils.Restrictions; import com.replaymod.recording.handler.ConnectionEventHandler; +import com.replaymod.recording.handler.GuiHandler; import com.replaymod.recording.packet.PacketListener; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandler; @@ -57,6 +58,8 @@ public class ReplayModRecording { EventBus bus = FMLCommonHandler.instance().bus(); bus.register(connectionEventHandler = new ConnectionEventHandler(logger, core)); + new GuiHandler(core).register(); + NetworkRegistry.INSTANCE.newChannel(Restrictions.PLUGIN_CHANNEL, new RestrictionsChannelHandler()); } diff --git a/src/main/java/com/replaymod/recording/handler/GuiHandler.java b/src/main/java/com/replaymod/recording/handler/GuiHandler.java new file mode 100644 index 00000000..dc6869d4 --- /dev/null +++ b/src/main/java/com/replaymod/recording/handler/GuiHandler.java @@ -0,0 +1,52 @@ +package com.replaymod.recording.handler; + +import com.replaymod.core.ReplayMod; +import com.replaymod.core.SettingsRegistry; +import com.replaymod.recording.Setting; +import de.johni0702.minecraft.gui.container.GuiScreen; +import de.johni0702.minecraft.gui.container.VanillaGuiScreen; +import de.johni0702.minecraft.gui.element.GuiCheckbox; +import de.johni0702.minecraft.gui.layout.CustomLayout; +import net.minecraft.client.gui.GuiMultiplayer; +import net.minecraft.client.gui.GuiSelectWorld; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class GuiHandler { + + private final ReplayMod mod; + + public GuiHandler(ReplayMod mod) { + this.mod = mod; + } + + public void register() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { + if (event.gui instanceof GuiSelectWorld || event.gui instanceof GuiMultiplayer) { + SettingsRegistry settingsRegistry = mod.getSettingsRegistry(); + boolean sp = event.gui instanceof GuiSelectWorld; + Setting setting = sp ? Setting.RECORD_SINGLEPLAYER : Setting.RECORD_SERVER; + + GuiCheckbox recordingCheckbox = new GuiCheckbox() + .setI18nLabel("replaymod.gui.settings.record" + (sp ? "singleplayer" : "server")) + .setChecked(settingsRegistry.get(setting)); + recordingCheckbox.onClick(() -> { + settingsRegistry.set(setting, recordingCheckbox.isChecked()); + settingsRegistry.save(); + }); + + VanillaGuiScreen.setup(event.gui).setLayout(new CustomLayout() { + @Override + protected void layout(GuiScreen container, int width, int height) { + //size(recordingCheckbox, 200, 20); + pos(recordingCheckbox, width - width(recordingCheckbox) - 5, 5); + } + }).addElements(null, recordingCheckbox); + } + } +}