Начинающий
- Статус
- Оффлайн
- Регистрация
- 14 Дек 2022
- Сообщения
- 118
- Реакции
- 2
- Выберите загрузчик игры
- Fabric
Данная функция даёт возможность натсроить камеру через f5
Функция:
mixn
Функция:
code:
package fun.Nexgen.function.impl.render;
import fun.Nexgen.function.api.Category;
import fun.Nexgen.function.api.Function;
import fun.Nexgen.function.settings.impl.BooleanSetting;
import fun.Nexgen.function.settings.impl.NumberSetting;
public class CameraUtils extends Function {
public final BooleanSetting through = new BooleanSetting("Камера через стенки", true);
public final BooleanSetting customDist = new BooleanSetting("Дистанция", true);
public final NumberSetting range = new NumberSetting("Дистанция", 4f, 0f, 7f, 0.05f, customDist::getValue);
public CameraUtils() {
super("CameraUtils", Category.Render, "Настройка камеры в F5");
}
public float getDistanceValue() {
if (customDist.getValue()) return range.getValue();
return 3.5f;
}
}
mixn
CameraMixin:
package fun.Nexgen.api.mixins;
import fun.Nexgen.NexgenClient;
import fun.Nexgen.function.impl.render.CameraUtils;
import fun.Nexgen.function.impl.player.FreeCam;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.Perspective;
import net.minecraft.client.render.Camera;
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.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArgs;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.invoke.arg.Args;
@Mixin(Camera.class)
public abstract class CameraMixin {
@Shadow
protected abstract float clipToSpace(float desiredCameraDistance);
@ModifyArgs(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;moveBy(FFF)V", ordinal = 0))
public void update2(Args args) {
CameraUtils cu = NexgenClient.getInstance().getModuleManager().getModule(CameraUtils.class);
if (cu == null || !cu.isToggled() || !cu.through.getValue()) return;
Perspective p = MinecraftClient.getInstance().options.getPerspective();
if (p == Perspective.FIRST_PERSON) return;
float dist = cu.getDistanceValue();
args.set(0, -clipToSpace(dist));
}
@Inject(method = "clipToSpace", at = @At("HEAD"), cancellable = true)
public void clipToSpace(float f, CallbackInfoReturnable<Float> cir) {
CameraUtils cu = NexgenClient.getInstance().getModuleManager().getModule(CameraUtils.class);
if (cu == null || !cu.isToggled() || !cu.through.getValue()) return;
Perspective p = MinecraftClient.getInstance().options.getPerspective();
if (p == Perspective.FIRST_PERSON) return;
cir.setReturnValue(cu.getDistanceValue());
}
@ModifyArgs(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;setRotation(FF)V"))
public void setRotationHook(Args args) {
FreeCam fc = NexgenClient.getInstance().getModuleManager().getModule(FreeCam.class);
if (fc == null || !fc.isToggled()) return;
float td = MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false);
args.setAll(fc.getFakeYaw(td), fc.getFakePitch(td));
}
@ModifyArgs(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;setPos(DDD)V"))
public void setPosHook(Args args) {
FreeCam fc = NexgenClient.getInstance().getModuleManager().getModule(FreeCam.class);
if (fc == null || !fc.isToggled()) return;
float td = MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false);
args.setAll(fc.getFakeX(td), fc.getFakeY(td), fc.getFakeZ(td));
}
}