From b6ab017f89de88a4e7c9656d62e2e12c91cab523 Mon Sep 17 00:00:00 2001 From: DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> Date: Tue, 1 Sep 2020 10:18:01 -0400 Subject: Bug Fixes Exit perspective when opening a gui (#3) Exit perspective when changing vanilla perspective Add github actions build --- .../perspectivemod/PerspectiveMod.java | 19 ++++++++++++---- .../perspectivemod/mixins/MixinMinecraft.java | 25 ++++++++++++++++++++++ src/main/resources/mixins.djperspectivemod.json | 1 + 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 src/main/java/me/djtheredstoner/perspectivemod/mixins/MixinMinecraft.java (limited to 'src') diff --git a/src/main/java/me/djtheredstoner/perspectivemod/PerspectiveMod.java b/src/main/java/me/djtheredstoner/perspectivemod/PerspectiveMod.java index 5cdbd3b..8158b97 100644 --- a/src/main/java/me/djtheredstoner/perspectivemod/PerspectiveMod.java +++ b/src/main/java/me/djtheredstoner/perspectivemod/PerspectiveMod.java @@ -6,6 +6,7 @@ import me.djtheredstoner.perspectivemod.config.PerspectiveModConfig; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraftforge.client.ClientCommandHandler; +import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; @@ -65,6 +66,13 @@ public class PerspectiveMod { } } + @SubscribeEvent + public void onGuiOpen(GuiOpenEvent event) { + if(event.gui != null) { + resetPerspective(); + } + } + public static void onPressed(int eventKey, boolean state) { if (eventKey == perspectiveKey.getKeyCode()) { if (config.modEnabled) { @@ -80,12 +88,10 @@ public class PerspectiveMod { mc.gameSettings.thirdPersonView = previousPerspective; } } else if (config.holdMode) { - perspectiveToggled = false; - mc.gameSettings.thirdPersonView = previousPerspective; + resetPerspective(); } } else if (perspectiveToggled) { - perspectiveToggled = false; - mc.gameSettings.thirdPersonView = previousPerspective; + resetPerspective(); } } } @@ -113,6 +119,11 @@ public class PerspectiveMod { return false; } + public static void resetPerspective() { + perspectiveToggled = false; + mc.gameSettings.thirdPersonView = previousPerspective; + } + public static void loadConfig(File configFile) { if (configFile.exists()) { try { diff --git a/src/main/java/me/djtheredstoner/perspectivemod/mixins/MixinMinecraft.java b/src/main/java/me/djtheredstoner/perspectivemod/mixins/MixinMinecraft.java new file mode 100644 index 0000000..3083599 --- /dev/null +++ b/src/main/java/me/djtheredstoner/perspectivemod/mixins/MixinMinecraft.java @@ -0,0 +1,25 @@ +package me.djtheredstoner.perspectivemod.mixins; + +import me.djtheredstoner.perspectivemod.PerspectiveMod; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import static org.objectweb.asm.Opcodes.*; + +@Mixin(Minecraft.class) +public class MixinMinecraft { + + @Redirect(method = "runTick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/settings/GameSettings;thirdPersonView:I", opcode = PUTFIELD)) + public void setThirdPersonView(GameSettings gameSettings, int value) { + if(PerspectiveMod.perspectiveToggled) { + PerspectiveMod.resetPerspective(); + } else { + gameSettings.thirdPersonView = value; + } + } + +} diff --git a/src/main/resources/mixins.djperspectivemod.json b/src/main/resources/mixins.djperspectivemod.json index 1ecb9ea..4244d13 100644 --- a/src/main/resources/mixins.djperspectivemod.json +++ b/src/main/resources/mixins.djperspectivemod.json @@ -7,6 +7,7 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "MixinEntityRenderer", + "MixinMinecraft", "MixinRenderManager" ] } \ No newline at end of file -- cgit