diff --git a/src/main/java/org/saturnclient/modules/ModManager.java b/src/main/java/org/saturnclient/modules/ModManager.java index 358663b..7713afc 100644 --- a/src/main/java/org/saturnclient/modules/ModManager.java +++ b/src/main/java/org/saturnclient/modules/ModManager.java @@ -20,7 +20,8 @@ public class ModManager { new Fullbright(), new NoFog(), new DayCounter(), - new Speedometer() + new Speedometer(), + new Zoom() }; public static void init() { diff --git a/src/main/java/org/saturnclient/modules/mods/Zoom.java b/src/main/java/org/saturnclient/modules/mods/Zoom.java new file mode 100644 index 0000000..32dc738 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/Zoom.java @@ -0,0 +1,60 @@ +package org.saturnclient.modules.mods; + +import org.lwjgl.glfw.GLFW; +import org.saturnclient.modules.Module; +import org.saturnclient.modules.ModuleDetails; +import org.saturnclient.saturnclient.config.Property; + +public class Zoom extends Module { + private static Property enabled = Property.bool(false); + private static Property toggle = Property.bool(false); + public static Property zoomKey = Property.keybinding(GLFW.GLFW_KEY_C); + public static Property zoomLevel = Property.floatProp(3.0f); + + public static boolean isZooming = false; + + public Zoom() { + super( + new ModuleDetails("Zoom", "zoom") + .description("Allows you to zoom in for a closer view") + .tags("Camera", "Utility") + .version("0.1.0"), + enabled.named("Enabled"), + toggle.named("Toggle zoom"), + zoomKey.named("Zoom Keybinding"), + zoomLevel.named("Zoom Level") + ); + } + + @Override + public void tick() { + if (toggle.value) { + if (zoomKey.wasKeyPressed()) { + isZooming = !isZooming; + } + } else { + isZooming = zoomKey.isKeyPressed(); + } + } + + public static float getZoomLevel() { + return zoomLevel.value; + } + + public static boolean shouldZoom() { + return enabled.value; + } + + @Override + public void onEnabled(boolean e) { + enabled.value = e; + if (!e) { + isZooming = false; + } + } + + @Override + public boolean isEnabled() { + return enabled.value; + } +} diff --git a/src/main/java/org/saturnclient/modules/mods/mixins/GameRendererMixin.java b/src/main/java/org/saturnclient/modules/mods/mixins/GameRendererMixin.java new file mode 100644 index 0000000..2518f06 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/mixins/GameRendererMixin.java @@ -0,0 +1,22 @@ +package org.saturnclient.modules.mods.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.saturnclient.modules.mods.Zoom; + +import net.minecraft.client.render.GameRenderer; + +@Mixin(GameRenderer.class) +public class GameRendererMixin { + + @Inject(method = "getFov", at = @At("RETURN"), cancellable = true) + private void onGetFov(CallbackInfoReturnable cir) { + if (Zoom.isZooming && Zoom.shouldZoom()) { + float originalFov = cir.getReturnValue(); + float zoomedFov = originalFov / Zoom.getZoomLevel(); + cir.setReturnValue(zoomedFov); + } + } +} diff --git a/src/main/resources/assets/saturnclient/textures/gui/mod/zoom.png b/src/main/resources/assets/saturnclient/textures/gui/mod/zoom.png new file mode 100644 index 0000000..c6969ae Binary files /dev/null and b/src/main/resources/assets/saturnclient/textures/gui/mod/zoom.png differ diff --git a/src/main/resources/mods.mixins.json b/src/main/resources/mods.mixins.json index 76f9b1f..fea0c0c 100644 --- a/src/main/resources/mods.mixins.json +++ b/src/main/resources/mods.mixins.json @@ -8,7 +8,8 @@ "EntityMixin", "RenderMixin", "LightmapTextureManagerMixin", - "BackgroundRendererMixin" + "BackgroundRendererMixin", + "GameRendererMixin" ], "injectors": { "defaultRequire": 1