diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java index c46f6f9a8f2..00ce1d7ed1f 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java @@ -20,6 +20,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; import net.ccbluex.liquidbounce.event.EventManager; import net.ccbluex.liquidbounce.event.events.GameRenderEvent; @@ -59,7 +60,10 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArgs; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; @Mixin(GameRenderer.class) public abstract class MixinGameRenderer { @@ -285,4 +289,14 @@ private float injectShit(float original) { return original; } + @ModifyArgs( + method = "getBasicProjectionMatrix", + at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;perspective(FFFF)Lorg/joml/Matrix4f;") + ) + private void hookBasicProjectionMatrix(Args args) { + if (ModuleAspect.INSTANCE.getRunning()) { + args.set(1, (float) args.get(1) / ModuleAspect.getRatioMultiplier()); + } + } + } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt index 577b9dd0951..6f5f5b19288 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/ModuleManager.kt @@ -351,6 +351,7 @@ object ModuleManager : EventListener, Iterable by modules { ModuleAttackEffects, ModuleNametags, ModuleCombineMobs, + ModuleAspect, ModuleAutoF5, ModuleChams, ModuleBedPlates, diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleAspect.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleAspect.kt new file mode 100644 index 00000000000..7883c1910d7 --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleAspect.kt @@ -0,0 +1,17 @@ +package net.ccbluex.liquidbounce.features.module.modules.render + +import net.ccbluex.liquidbounce.features.module.Category +import net.ccbluex.liquidbounce.features.module.ClientModule + +/** + * Aspect ratio changer + * + * @author sqlerrorthing + */ +@Suppress("MagicNumber") +object ModuleAspect : ClientModule("Aspect", Category.RENDER) { + private val ratioPercentage by int("Ratio", 100, 1..300, suffix = "%") + + @JvmStatic + val ratioMultiplier: Float get() = ratioPercentage.toFloat() / 100f +} diff --git a/src/main/resources/resources/liquidbounce/lang/en_us.json b/src/main/resources/resources/liquidbounce/lang/en_us.json index 5a3e2cc9df2..442e33e6447 100644 --- a/src/main/resources/resources/liquidbounce/lang/en_us.json +++ b/src/main/resources/resources/liquidbounce/lang/en_us.json @@ -443,6 +443,7 @@ "liquidbounce.module.targets.description": "Allows you to manage which entities are considered to be your target.", "liquidbounce.module.esp.description": "Highlights all targets allowing you to see them through walls.", "liquidbounce.module.fakeLag.description": "Holds back packets so as to prevent you from being hit by an enemy.", + "liquidbounce.module.aspect.description": "Adjust the horizontal stretching.", "liquidbounce.module.fastBreak.description": "Allows you to break blocks faster.", "liquidbounce.module.fastPlace.description": "Allows you to place blocks faster.", "liquidbounce.module.fastUse.description": "Allows you to use items faster.", diff --git a/src/main/resources/resources/liquidbounce/lang/ru_ru.json b/src/main/resources/resources/liquidbounce/lang/ru_ru.json index 1f7b9f11910..3843fcfc420 100644 --- a/src/main/resources/resources/liquidbounce/lang/ru_ru.json +++ b/src/main/resources/resources/liquidbounce/lang/ru_ru.json @@ -624,6 +624,7 @@ "liquidbounce.module.packetLogger.messages.canceled": "Отмененные", "liquidbounce.module.holeFiller.description": "Автоматически заполняет безопасные места для PvP с кристаллами.", "liquidbounce.module.tpAura.description": "Автоматически телепортирует и атакует врагов вокруг.", + "liquidbounce.module.aspect.description": "Позволяет растягивать или сужать игру по горизонтали.", "liquidbounce.module.packetMine.description": "Позволяет добывать блоки, щелкая по ним один раз.", "liquidbounce.module.fastExp.description": "Автоматически чинит вашу броню.", "liquidbounce.module.bookBot.description": "Автоматически пишет в книгах.",